kirlandiya но мы же не на западе живем
если на западе кому то понравились новые патчи, то это не значит что и тут всем понравятся новые патчи.
Модмейкинг прекрасно и на 1.26 выживал
И то что на новых патчах нету удобных средств для модмейкинга - это вовсе не нытье, а самый настоящий факт
nvc123 насчет таймеров подумаю, там просто нужно сделать 5-10 таймеров. Т.к период в 0.00 медленный.
А насчет loop и потока - я с этого и начинал, далее благополучно варкрафт завершал поток из за перегрузки, примерно на 750 цикле nvc123 +когда я уничтожал таймер, то появлялся баг и он тупо прогонял if( IsTerrainPathable(pointX, pointY, regionType) == false ) по 10-20 раз, я уже с того времени переделал код, через 20-30 минут попробую переделать на таймерах nvc123 а ещё после loop'ов, я сделал рекурсию через ExecuteFunc как аналог loop, но в этом случае варкрафт просто вылетел без ошибок во время инициализации
nvc123 потестил с таймерами, прокатило когда я начал паузить их вместо того чтобы уничтожать, сравнил с триггером - тоже самое, нагрузка и время почти одинаковы, в случае с таймерами в качестве единицы скорости послужило их количество
Мне кажется лучше давать триггеру ивенты чем вручную в глобалках создавать массив из таймеров по отдельности (т.к если создать таймеры при инициализации, то будет фриз на несколько секунд)
Absolute
вообще то это модель, имея в руках мемхак, можно обойтись без даммика (просто менять координаты спецэффекта, при этом анимация по умолчанию должна быть той, когда шар крутится).
А если по старинке - то через дамми юнита с моделью этого самого шара
Циклом пробегаешь по номерам игроков и проверяешь, играют или нет, если игрок играет то ставишь переменную на +1.
В конце проверяешь, если равно 1 то объявляешь поражение игроку
Есть ещё способ вызвать fatal error или просто чтобы варкрафт вылетел без лишних "ошибок", но думаю поражения игроку хватит
Macghoul
создаешь метеорит в полярных координатах с нужной дистанцией и углом поворота инвокера. Далее ставишь ему изменение высоты с нужной скоростью (в данном случае расстояние делить на время падения) и так же двигаешь его слегка по полярным координатам, когда его высота будет меньше 50 или 100, то создаешь метеорит который будет катиться.
Далее этому метеориту ставишь нужную анимацию (в данном случае чтобы он катился, или если у него stand это катиться - то пропускаешь этот пункт), а потом так же двигаешь по полярным координатам и когда расстояние до нужных координат будет меньше 50, то очищаешь хеш или структуру, удаляешь таймер и удаляешь метеорит
Почему то на таймере всё забагалось и прилетало по несколько ивентов, сделал на периодическом триггере и всё стало нормально.
Код
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, это просто чтобы ты посмотрел сам алгоритм)
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион
Пушистый
ну там включить и выключить пассивку у него
Я алгоритм собрал, но вот че то не пойму почему при входе в воду прилетает 10-20 ивентов, вроде шаг стоит на 30.00.
Тем более таймер очень медленный, примерно за 2-3 собирает регион. Мне кажется шаг в 30.00 слишком большой и нужно его уменьшить, но чем больше уменьшаю тем медленнее таймер собирает регион.
Там у таймера если что периодичность 0.000
Попробую сделать периодический триггер или разбить потоки с помощью Execute и loop, (т.к loop гораздо быстрее таймера, но в одном потоке нереально сделать сборку региона)
Пушистый
зачем такую нагрузку лишнюю, есть же прекрасные ивенты на вход/выход. И тем более у него видимо карты с разными ландшафтами.
Я тут подсчитал, мой алгоритм сьел 4 фпс на карте 64x64 за пол секунды, поставил его в инициализацию, так вообще незаметно стало.
Щас пока что настраиваю
ыыы, затупил, варкрафт тупо завершает поток из за loop, ща на таймере переделаю
UrsaBoss, разве что придумать костыльный алгоритм для определения (хотя, когда-то его уже придумали, вроде, просто точно попадалось что-то подобное, но не могу вспомнить где).
да я уже тут начал писать алгоритм "loop в loop", чтобы собрать регион)
ImbaState:
P.S. Редактор областей не совсем то, что нужно, т.к. я сделал пассивную способность, работающую в воде, и для каждого ландшафта вновь мучиться с областями...
ImbaState только учти что в таком случае точка автоматически превратится в область 32x32
в теории можно построить алгоритм который обыщет всю карту начиная с верхнего левого угла карты
далее двигаешь координаты с шагом приблизительно 30.00 сначала по оси X, далее снижаешь на 30.00 по Y и повторяешь.
Добавлять координаты в регион нужно через RegionAddCell
Но чую вызовет лаги во время такого "поиска"))) Если нужно один раз во время инициализации это сделать, то запросто
и учти что PATHING_TYPE_FLOATABILITY вернёт true если в этом месте нельзя плавать (т.е нету воды)
ImbaState из точек не области строятся, а регионы.
И если без гуи, то берёшь обычный GUI триггер с любым ивентом на вход в регион, далее конвертируешь его в jass.
Потом в функции инициализации триггера локально объявляешь регион и вносишь все свои области с водой в него, ну и потом вписываешь регион в ивент
Кстати ещё вспомнил, можно проверять в воде юнит или нет через PATHING_TYPE_FLOATABILITY
ImbaState я и забыл какой кривой GUI, там нету нормально работы с регионами (там даже регион в редакторе переменных не объявить). Качай JNGP, или вручную делай ивент на вход в каждую область
ImbaState в редакторе областей нужно создать области там где есть вода, далее делаешь в редакторе переменных один регион, далее триггер на инициализацию, там вносишь эти области в регион. А в конце делаешь нужный тебе триггер с событием входа именно в этот регион
» WarCraft 3 / Мапинг 1.26 /1.29
» WarCraft 3 / Событие на вход в воду
» WarCraft 3 / Событие на вход в воду
Ред. Hodor
» WarCraft 3 / Мапинг 1.26 /1.29
если на западе кому то понравились новые патчи, то это не значит что и тут всем понравятся новые патчи.
Модмейкинг прекрасно и на 1.26 выживал
И то что на новых патчах нету удобных средств для модмейкинга - это вовсе не нытье, а самый настоящий факт
» WarCraft 3 / Событие на вход в воду
Ред. Hodor
» WarCraft 3 / Событие на вход в воду
будет пол часа лепить регион
Ред. Hodor
» WarCraft 3 / Событие на вход в воду
А насчет loop и потока - я с этого и начинал, далее благополучно варкрафт завершал поток из за перегрузки, примерно на 750 цикле
nvc123 +когда я уничтожал таймер, то появлялся баг и он тупо прогонял if( IsTerrainPathable(pointX, pointY, regionType) == false ) по 10-20 раз, я уже с того времени переделал код, через 20-30 минут попробую переделать на таймерах
nvc123 а ещё после loop'ов, я сделал рекурсию через ExecuteFunc как аналог loop, но в этом случае варкрафт просто вылетел без ошибок во время инициализации
Мне кажется лучше давать триггеру ивенты чем вручную в глобалках создавать массив из таймеров по отдельности (т.к если создать таймеры при инициализации, то будет фриз на несколько секунд)
Ред. Hodor
» WarCraft 3 / Как создать способность метеорит
вообще то это модель, имея в руках мемхак, можно обойтись без даммика (просто менять координаты спецэффекта, при этом анимация по умолчанию должна быть той, когда шар крутится).
А если по старинке - то через дамми юнита с моделью этого самого шара
» WarCraft 3 / Мапинг 1.26 /1.29
(а ещё там нету очень удобного JNGP, поэтому 1.29 моментально отпадает)
» WarCraft 3 / Событие на вход в воду
» WarCraft 3 / Юнит и принадлежность
цвет и кастомный круг выбора, что тут сложного
» WarCraft 3 / Как сделать анти сингл?
В конце проверяешь, если равно 1 то объявляешь поражение игроку
Есть ещё способ вызвать fatal error или просто чтобы варкрафт вылетел без лишних "ошибок", но думаю поражения игроку хватит
» WarCraft 3 / Проверка на то, что юнит в воде.
кстати, чтобы быстрее искало - добавь ещё 9 таких строчек
Ред. Hodor
» WarCraft 3 / Как создать способность метеорит
создаешь метеорит в полярных координатах с нужной дистанцией и углом поворота инвокера. Далее ставишь ему изменение высоты с нужной скоростью (в данном случае расстояние делить на время падения) и так же двигаешь его слегка по полярным координатам, когда его высота будет меньше 50 или 100, то создаешь метеорит который будет катиться.
Далее этому метеориту ставишь нужную анимацию (в данном случае чтобы он катился, или если у него stand это катиться - то пропускаешь этот пункт), а потом так же двигаешь по полярным координатам и когда расстояние до нужных координат будет меньше 50, то очищаешь хеш или структуру, удаляешь таймер и удаляешь метеорит
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион
» WarCraft 3 / Проверка на то, что юнит в воде.
ну там включить и выключить пассивку у него
Я алгоритм собрал, но вот че то не пойму почему при входе в воду прилетает 10-20 ивентов, вроде шаг стоит на 30.00.
Тем более таймер очень медленный, примерно за 2-3 собирает регион. Мне кажется шаг в 30.00 слишком большой и нужно его уменьшить, но чем больше уменьшаю тем медленнее таймер собирает регион.
Там у таймера если что периодичность 0.000
Попробую сделать периодический триггер или разбить потоки с помощью Execute и loop, (т.к loop гораздо быстрее таймера, но в одном потоке нереально сделать сборку региона)
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
зачем такую нагрузку лишнюю, есть же прекрасные ивенты на вход/выход. И тем более у него видимо карты с разными ландшафтами.
Я тут подсчитал, мой алгоритм сьел 4 фпс на карте 64x64 за пол секунды, поставил его в инициализацию, так вообще незаметно стало.
Щас пока что настраиваю
ыыы, затупил, варкрафт тупо завершает поток из за loop, ща на таймере переделаю
» WarCraft 3 / Проверка на то, что юнит в воде.
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
в теории можно построить алгоритм который обыщет всю карту начиная с верхнего левого угла карты
далее двигаешь координаты с шагом приблизительно 30.00 сначала по оси X, далее снижаешь на 30.00 по Y и повторяешь.
Добавлять координаты в регион нужно через RegionAddCell
Но чую вызовет лаги во время такого "поиска"))) Если нужно один раз во время инициализации это сделать, то запросто
и учти что PATHING_TYPE_FLOATABILITY вернёт true если в этом месте нельзя плавать (т.е нету воды)
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
И если без гуи, то берёшь обычный GUI триггер с любым ивентом на вход в регион, далее конвертируешь его в jass.
Потом в функции инициализации триггера локально объявляешь регион и вносишь все свои области с водой в него, ну и потом вписываешь регион в ивент
» WarCraft 3 / Проверка на то, что юнит в воде.
Ред. Hodor
» WarCraft 3 / Проверка на то, что юнит в воде.
» WarCraft 3 / Проверка на то, что юнит в воде.