18

» WarCraft 3 / Мапинг 1.26 /1.29

GeNr1x вообще то гарена работает на 1.29 патче))) И другие сервера запросто могут перейти на него, если конечно захотят
18

» WarCraft 3 / Событие на вход в воду

nvc123 в перезалитом ресурсе тебя указать как как автора оптимизированного кода?
18

» WarCraft 3 / Событие на вход в воду

nvc123 аааа, точно. Можно же было каждый поток по максимуму выжать, ща перезалью код
18

» WarCraft 3 / Мапинг 1.26 /1.29

kirlandiya но мы же не на западе живем
если на западе кому то понравились новые патчи, то это не значит что и тут всем понравятся новые патчи.
Модмейкинг прекрасно и на 1.26 выживал
И то что на новых патчах нету удобных средств для модмейкинга - это вовсе не нытье, а самый настоящий факт
18

» WarCraft 3 / Событие на вход в воду

nvc123:
UrsaBoss, а нафига много таймеров?
1 достаточно
ага, думаешь он вывезет на 0.00 периоде?)
будет пол часа лепить регион
18

» WarCraft 3 / Событие на вход в воду

nvc123 насчет таймеров подумаю, там просто нужно сделать 5-10 таймеров. Т.к период в 0.00 медленный.
А насчет loop и потока - я с этого и начинал, далее благополучно варкрафт завершал поток из за перегрузки, примерно на 750 цикле
nvc123 +когда я уничтожал таймер, то появлялся баг и он тупо прогонял if( IsTerrainPathable(pointX, pointY, regionType) == false ) по 10-20 раз, я уже с того времени переделал код, через 20-30 минут попробую переделать на таймерах
nvc123 а ещё после loop'ов, я сделал рекурсию через ExecuteFunc как аналог loop, но в этом случае варкрафт просто вылетел без ошибок во время инициализации
nvc123 потестил с таймерами, прокатило когда я начал паузить их вместо того чтобы уничтожать, сравнил с триггером - тоже самое, нагрузка и время почти одинаковы, в случае с таймерами в качестве единицы скорости послужило их количество
Мне кажется лучше давать триггеру ивенты чем вручную в глобалках создавать массив из таймеров по отдельности (т.к если создать таймеры при инициализации, то будет фриз на несколько секунд)
18

» WarCraft 3 / Как создать способность метеорит

Absolute
вообще то это модель, имея в руках мемхак, можно обойтись без даммика (просто менять координаты спецэффекта, при этом анимация по умолчанию должна быть той, когда шар крутится).
А если по старинке - то через дамми юнита с моделью этого самого шара
18

» WarCraft 3 / Мапинг 1.26 /1.29

Absolute на 1.29 никто не играет, поэтому и смысла делать карты там нету
(а ещё там нету очень удобного JNGP, поэтому 1.29 моментально отпадает)
18

» WarCraft 3 / Как сделать анти сингл?

Циклом пробегаешь по номерам игроков и проверяешь, играют или нет, если игрок играет то ставишь переменную на +1.
В конце проверяешь, если равно 1 то объявляешь поражение игроку
Есть ещё способ вызвать fatal error или просто чтобы варкрафт вылетел без лишних "ошибок", но думаю поражения игроку хватит
18

» WarCraft 3 / Проверка на то, что юнит в воде.

ImbaState
кстати, чтобы быстрее искало - добавь ещё 9 таких строчек
call TriggerRegisterTimerEvent( trg, 0., true )
18

» WarCraft 3 / Как создать способность метеорит

Macghoul
создаешь метеорит в полярных координатах с нужной дистанцией и углом поворота инвокера. Далее ставишь ему изменение высоты с нужной скоростью (в данном случае расстояние делить на время падения) и так же двигаешь его слегка по полярным координатам, когда его высота будет меньше 50 или 100, то создаешь метеорит который будет катиться.
Далее этому метеориту ставишь нужную анимацию (в данном случае чтобы он катился, или если у него stand это катиться - то пропускаешь этот пункт), а потом так же двигаешь по полярным координатам и когда расстояние до нужных координат будет меньше 50, то очищаешь хеш или структуру, удаляешь таймер и удаляешь метеорит
18

» WarCraft 3 / Проверка на то, что юнит в воде.

Почему то на таймере всё забагалось и прилетало по несколько ивентов, сделал на периодическом триггере и всё стало нормально.
Код
globals
    region region123
    trigger trg = CreateTrigger()
    real maxX
    real minX
    real maxY
    real minY
    real pointX
    real pointY
endglobals

function Run takes nothing returns nothing
    if pointY < minY then
        call TriggerRegisterEnterRegion( gg_trg_enter, region123, null )
        call TriggerRegisterLeaveRegion( gg_trg_leave, region123, null )
        call DisableTrigger( trg )
    endif
    if pointX > maxX then
        set pointY = pointY-32.00
        set pointX = minX
    endif
    if IsTerrainPathable(pointX, pointY, PATHING_TYPE_FLOATABILITY) == false then
        call RegionAddCell( region123, pointX, pointY )
    endif
    set pointX = pointX+32.00
endfunction

function Trig_trg_Actions takes nothing returns nothing
    set region123 = CreateRegion()
    set maxX = GetRectMaxX(bj_mapInitialPlayableArea)
    set minX = GetRectMinX(bj_mapInitialPlayableArea)
    set maxY = GetRectMaxY(bj_mapInitialPlayableArea)
    set minY = GetRectMinY(bj_mapInitialPlayableArea)
    set pointX = minX
    set pointY = maxY
    
    call TriggerRegisterTimerEvent( trg, 0., true )
    call TriggerAddCondition( trg, Condition(function Run) )
endfunction

//===========================================================================

function InitTrig_trg takes nothing returns nothing
    call Trig_trg_Actions()
endfunction
Вот карта с примером (карту сохранить не сможешь, т.к тебе нужен будет JNGP, это просто чтобы ты посмотрел сам алгоритм)
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион
Загруженные файлы
18

» WarCraft 3 / Проверка на то, что юнит в воде.

Пушистый
ну там включить и выключить пассивку у него
Я алгоритм собрал, но вот че то не пойму почему при входе в воду прилетает 10-20 ивентов, вроде шаг стоит на 30.00.
Тем более таймер очень медленный, примерно за 2-3 собирает регион. Мне кажется шаг в 30.00 слишком большой и нужно его уменьшить, но чем больше уменьшаю тем медленнее таймер собирает регион.
Там у таймера если что периодичность 0.000
Попробую сделать периодический триггер или разбить потоки с помощью Execute и loop, (т.к loop гораздо быстрее таймера, но в одном потоке нереально сделать сборку региона)
18

» WarCraft 3 / Проверка на то, что юнит в воде.

Пушистый
зачем такую нагрузку лишнюю, есть же прекрасные ивенты на вход/выход. И тем более у него видимо карты с разными ландшафтами.
Я тут подсчитал, мой алгоритм сьел 4 фпс на карте 64x64 за пол секунды, поставил его в инициализацию, так вообще незаметно стало.
Щас пока что настраиваю
ыыы, затупил, варкрафт тупо завершает поток из за loop, ща на таймере переделаю
18

» WarCraft 3 / Проверка на то, что юнит в воде.

Пушистый:
UrsaBoss, разве что придумать костыльный алгоритм для определения (хотя, когда-то его уже придумали, вроде, просто точно попадалось что-то подобное, но не могу вспомнить где).
да я уже тут начал писать алгоритм "loop в loop", чтобы собрать регион)
18

» WarCraft 3 / Проверка на то, что юнит в воде.

Пушистый
ImbaState:
P.S. Редактор областей не совсем то, что нужно, т.к. я сделал пассивную способность, работающую в воде, и для каждого ландшафта вновь мучиться с областями...
18

» WarCraft 3 / Проверка на то, что юнит в воде.

ImbaState:
Да скорее всего да, но разово.
Если при инициализации карты это делать - то ничего страшного
ImbaState:
Вот только есть небольшой пример с добавлением областей в регион на Jass'е?
попробую написать алгоритм, точнее проверить мою теорию выше
18

» WarCraft 3 / Проверка на то, что юнит в воде.

ImbaState только учти что в таком случае точка автоматически превратится в область 32x32
в теории можно построить алгоритм который обыщет всю карту начиная с верхнего левого угла карты
далее двигаешь координаты с шагом приблизительно 30.00 сначала по оси X, далее снижаешь на 30.00 по Y и повторяешь.
Добавлять координаты в регион нужно через RegionAddCell
Но чую вызовет лаги во время такого "поиска"))) Если нужно один раз во время инициализации это сделать, то запросто
и учти что PATHING_TYPE_FLOATABILITY вернёт true если в этом месте нельзя плавать (т.е нету воды)
18

» WarCraft 3 / Проверка на то, что юнит в воде.

ImbaState из точек не области строятся, а регионы.
И если без гуи, то берёшь обычный GUI триггер с любым ивентом на вход в регион, далее конвертируешь его в jass.
Потом в функции инициализации триггера локально объявляешь регион и вносишь все свои области с водой в него, ну и потом вписываешь регион в ивент
Кстати ещё вспомнил, можно проверять в воде юнит или нет через PATHING_TYPE_FLOATABILITY
18

» WarCraft 3 / Проверка на то, что юнит в воде.

ImbaState я и забыл какой кривой GUI, там нету нормально работы с регионами (там даже регион в редакторе переменных не объявить). Качай JNGP, или вручную делай ивент на вход в каждую область
18

» WarCraft 3 / Проверка на то, что юнит в воде.

ImbaState в редакторе областей нужно создать области там где есть вода, далее делаешь в редакторе переменных один регион, далее триггер на инициализацию, там вносишь эти области в регион. А в конце делаешь нужный тебе триггер с событием входа именно в этот регион
18

» WarCraft 3 / Проверка на то, что юнит в воде.

Собери все области с водой в один регион и сделай триггер с событием входа в этот регион