Скинь карту с примером такого приоритета, я наспавнил своих и вражеских юнитов, ударил каждого героем и никто не отреагировал, все бьют тех кого и били
единственное что, если умирает цель юнита, то они ищут сначала ближайщую цель не героя
А утечки точно из-за самого выбора? Насколько знаю, нативные функции утечек не вызывают, а BJ реализация ForGroup вроде без утечек...
Нативные функции вызывают утечки, если их не обнулять. Та же работа с точками.
В бж for group нет утечек, туда лишь добавили условие по уничтожению группы если bj_wantDestroyGroup равна true. Но следующие функции вызывают утечку, например, выбрать всех юнитов на карте, там создаётся локальная группа которая никуда не девается
Да и чёт я не понимаю вариант первого "безутечного" перебора группы. По факту ты глобальной переменной присвоил значение локальной, которая создание группы, затем ты уничтожаешь группу 2 раза через разные переменные, зачем? К тому же создавать и уничтожать группу не нужно, достаточно написать перед пиком группы set bj_wantDestroyGroup = true, и всё
map_maiker, ничего баговаться не будет, но если прям очень сильно переживаешь за это, то наноси урон от имени дамми, если продамажил дамми, значит урон от абилки)
NatriY, в доту не играл и хз что и как там сворачивает, что ты подразумеваешь под полётом молота бурь тож не особо понимаю, он же просто летит за юнитом, нет?)
Единственные возможные проблемы, это пожалуй движение рутовой кости или же 360 анимаций для снарядов
NatriY, вариковские абилки супер простые и их без проблем можно на триггерах реализовать, как и указал Ворон, а перед нанесением урона ставим, допустим, переменную целочисленной на 1, и если юнит получил урон и эта переменная равна 1, то урон был от абилки
Если я не ошибаюсь, при удалении триггера событие же всё равно остаётся в памяти?
Звучит как создание одного громоздкого триггера...
Мой пример по такому принципу и работает, один триггер с регистрацией для всех юнитов на карте и те, кто входят в её область
Да, я знаю. Дамми-касты и всё такое
Ну вообще даммикаст только касательно дебаффов, всё остальное триггерно) Да и на примере молний, разноцветную даммикастом фиг сделаешь)
Я же не про утечки. Например, как в гуи прицепить функцию к таймеру?
Что мешает другой триггер создать?)
Тебе в любом случае тут таймер не нужен был и я об этом и говорю, что твою затею спокойно на гуи можно было сделать
Я не говорю, что это идеально, но чутка получше чем у тебя
library mylib initializer init
private group TempG = CreateGroup()
private trigger trg1 = CreateTrigger()
private function IsUnitDead takes unit u returns boolean
return IsUnitType(u,UNIT_TYPE_DEAD) or GetUnitTypeId(u) < 1
endfunction
private function enemy takes nothing returns boolean
set bj_lastReplacedUnit = GetFilterUnit()
return not IsUnitDead(bj_lastReplacedUnit) and IsUnitEnemy(bj_lastReplacedUnit,GetOwningPlayer(bj_lastCreatedUnit))
endfunction
private function damage takes nothing returns nothing
call UnitDamageTarget(bj_lastCreatedUnit,GetEnumUnit(),udg_damage,false,false,ATTACK_TYPE_PIERCE,DAMAGE_TYPE_NORMAL,null)
endfunction
private function damage1 takes nothing returns nothing
local unit attacker = GetEventDamageSource()
local unit damaged = GetTriggerUnit()
local real rad = GetRandomReal(udg_minradius,udg_maxradius)
local real a = GetRandomReal(0,360)*bj_DEGTORAD
local real x = GetUnitX(damaged)+rad*Cos(a)
local real y = GetUnitY(damaged)+rad*Sin(a)
local boolexpr b = Condition(function enemy)
call KillUnit(CreateUnit(Player(15),'u000',x,y,0))
set bj_lastCreatedUnit = attacker
call GroupEnumUnitsInRange(TempG,x,y,udg_damage_radius,b)
call DisableTrigger(trg1)
call ForGroup(TempG,function damage)
call EnableTrigger(trg1)
call GroupClear(TempG)
set bj_lastCreatedUnit = null
set attacker = null
set damaged = null
set b = null
endfunction
//===========================================================================
private function myfunc takes nothing returns nothing
call TriggerRegisterUnitEvent(trg1,GetEnumUnit(),EVENT_UNIT_DAMAGED)
endfunction
private function Trig_d1_Actions takes nothing returns nothing
call TriggerRegisterUnitEvent(trg1,GetTriggerUnit(),EVENT_UNIT_DAMAGED)
endfunction
//===========================================================================
private function mycond1 takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit()) != 'u000'
endfunction
private function mycond takes nothing returns boolean
return GetEventDamage() > 0. and GetUnitTypeId(GetEventDamageSource()) == 'hrif'
endfunction
private function init takes nothing returns nothing
set gg_trg_d1 = CreateTrigger( )
call GroupEnumUnitsInRect(TempG,bj_mapInitialPlayableArea,null)
call ForGroup(TempG,function myfunc)
call GroupClear(TempG)
call TriggerRegisterEnterRectSimple( gg_trg_d1, bj_mapInitialPlayableArea )
call TriggerAddCondition(gg_trg_d1,Condition(function mycond1))
call TriggerAddAction( gg_trg_d1, function Trig_d1_Actions )
call TriggerAddCondition(trg1,Condition(function mycond))
call TriggerAddAction(trg1,function damage1)
endfunction
endlibrary
Кстати, ты можешь делать намного интереснее вещи с триггерной атакой, вплоть до кривой цепной молнии скакающей по юнитам накладывающая дебаффы с отталкиванием и всей ерундой что только можешь придумать
Так-то, я раньше особо не писал на jass, недавно вот решил что гуи сковывает.
Чистый гуи да, но у тебя есть кастом скрипт, где можно обнулить точки и это всё, что в принципе нужно, чтобы эта система работала без утечек
Нет, не оптимально, юзаешь точки вместо координат и даже не обнуляешь их, переменные юнитов тоже не обнулил, таймеры не обнуляешь, да и локальные триггеры тоже в null можно
local location tmp = PolarProjectionBJ(GetUnitLoc(damaged), radius, GetRandomReal(0, 360))
-->
local real x = GetUnitX(damaged)+radius*Cos(GetRandomReal(0,360)*bj_DEGTORAD))
local real y = GetUnitY(damaged)+radius*Sin(GetRandomReal(0,360)*bj_DEGTORAD))
local unit u = CreateUnit(GetOwningPlayer(damager), 'h000',x, y, 0 )
Координаты обнулять не нужно
call UnitDamagePointLoc( u, 0, udg_damage_radius, tmp, udg_damage, ATTACK_TYPE_PIERCE, DAMAGE_TYPE_NORMAL )
Функция дамажит всех без исключения если не ошибаюсь, лучше самим юнитом через цикл/группу дамажить юнитов
Ой посмотрел на это всё, вообще желательно всё переписать, зачем сохранять что-то в хэш-таблицу если ты уже создал триггер для этого
хиляет и наносит урон по формуле 25 х лвл абилки + 30% от недостающего здоровья цели, так же накладывает бафф/дебафф, все остальные ништячки думаю сам разберёшься как сделать
Fly123, у тебя общее событие, а не для одного игрока. Всё что тебе в данном случае нужно проверить это выделить одновременно несколько юнитов и прожать абилку, всё)
Хех, ну memory hack не о чем не говорит?) думаю близы бы не "хакнули" сами себя. Там есть куча полезных функций и даже работа с фреймами, но по поводу уровней рельефа я хз, ибо им никогда не пользовался
map_maiker, а.. никогда в жизни не видел динамического рельефа через уровни, вероятно (если даже на мемхаке нет такой возможности) тут только исхищряться с особым ландом без уровней и через декорации. То бишь когда изначально всё водой заливаешь и через плато сушу делаешь
» WarCraft 3 / Приоритет по атаке
Ред. rsfghd
» WarCraft 3 / Приоритет по атаке
Ред. rsfghd
» WarCraft 3 / Нативка SetUnitTimeScale
Ред. rsfghd
» WarCraft 3 / Нативка SetUnitTimeScale
Взял первую анимацию атаки пехотинца, тоже 1 секунда
» WarCraft 3 / Воскрешение в форме друида
» WarCraft 3 / Лагает из-за большой группы
В бж for group нет утечек, туда лишь добавили условие по уничтожению группы если bj_wantDestroyGroup равна true. Но следующие функции вызывают утечку, например, выбрать всех юнитов на карте, там создаётся локальная группа которая никуда не девается
Ред. rsfghd
» WarCraft 3 / Лагает из-за большой группы
» WarCraft 3 / Самый сложный вопрос на XGM :D
Ред. rsfghd
» WarCraft 3 / Отследить удар рукой
» WarCraft 3 / Отследить удар рукой
» WarCraft 3 / Самый сложный вопрос на XGM :D
» WarCraft 3 / Отследить удар рукой
Ред. rsfghd
» WarCraft 3 / Оптимальна ли реализация?
Да и на примере молний, разноцветную даммикастом фиг сделаешь)
Тебе в любом случае тут таймер не нужен был и я об этом и говорю, что твою затею спокойно на гуи можно было сделать
» WarCraft 3 / MUI ли этот триггер?
или у тебя что-то сработало не так как надо?
Ред. rsfghd
» WarCraft 3 / Оптимальна ли реализация?
» WarCraft 3 / Оптимальна ли реализация?
Многое теряешь без джнгп, и скорее всего, мою версию не заценишь
» WarCraft 3 / Оптимальна ли реализация?
» WarCraft 3 / Оптимальна ли реализация?
Ред. rsfghd
» WarCraft 3 / Оптимальна ли реализация?
Ред. rsfghd
» WarCraft 3 / Оптимальна ли реализация?
Функция дамажит всех без исключения если не ошибаюсь, лучше самим юнитом через цикл/группу дамажить юнитов
Ред. rsfghd
» WarCraft 3 / Благодать\Свет небес паладина
» WarCraft 3 / MUI ли этот триггер?
» WarCraft 3 / MUI ли этот триггер?
Ред. rsfghd
» WarCraft 3 / Редактирование рельефа средствами jass
Альтернативный способ наложения карты путей
думаю близы бы не "хакнули" сами себя. Там есть куча полезных функций и даже работа с фреймами, но по поводу уровней рельефа я хз, ибо им никогда не пользовался
» WarCraft 3 / Редактирование рельефа средствами jass