После того, как юнит применяет молот бурь, на его хэндл в хэш таблицу заносится юнит - цель способности.
Далее создаю триггер, когда юнит-цель получает урон, то идёт проверка.
Я выгружаю из хэндла юнита, нанёсшего урон, юнит-цель.
Далее идёт проверка( баф, урон равный 0 и уровень способности > 0 не интересуют), дело именно в последнем условии в IF. Там я сравниваю юнита, получившего урон и юнита, которого я достал из хэш-таблицы с хэндлом юнита, нанёсшего урон ( Так как юнит, нанёсший урон, и юнит, применивший способность в начале - это один и тот же юнит, то его handle одинаковый, значит в handle_target должен был попасть тот же target. Но почему-то условие не проходит. ( Если убрать эту последнюю проверку, то всё работает) Почему так?

Лучше событие spell effect, так же помни что у молотка бурь сперва идёт основной урон, а только потом 0.00 урона и бафф, на первом ивенте урона юнит ещё не оглушен и баффа нету.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
пример - папка Mechanic, триггер Structs, самый верх
используйте структуры (vjass)
ответ
MultiboardGetItem создает игровой объект-ячейку, MultiboardReleaseItem разбивает её обратно. Если таблица навсегда. то выгоднее хранить объекты в массиве, чтобы не терять время на постоянные Get-Release + это позволяет в дальнейшем асинхронно менять содержимое ячеек, что невозможно, если использовать функции.
Ну а кто жрет память, моешь с помощью этой тулзы глянуть (может не запускаться, у меня работает) - кинуть в корень варика и запустить при работающей игре
ответ
Какие-то объекты могут создавать зависимости, осовбожегние хендла не значит, что объект чисто удален. В целом это всё уже из области псевдопрограммирования - не стоит волновться о таких мелочах. Create & Destroy работают достаточно хорошо. И да, объекты это все agent
type agent extends handle all reference counted objects
ответ
ладно. заработало.
не рабочий вариант
call SaveInteger(Hash,GetHandleId(GetTriggerUnit()),5555, CurrentNumberOfSettlement) в одном триггере сохраняем
set CurrentNumberOfSettlement = LoadInteger(Hash,GetHandleId(GetTriggerUnit()),5555) в другом триггере для проверки выгружаем
рабочий вариант
local integer id = GetHandleId(GetTriggerUnit())
call SaveInteger(Hash,id,5555, CurrentNumberOfSettlement) в одном триггере сохраняем
set CurrentNumberOfSettlement = LoadInteger(Hash,id,5555) в другом триггере для проверки выгружаем
Короче вернул обратно локалки, и все заработало. И почему первый вариант не работал. Ладно будут искать подводные камни. Наверное после чистой оптимизации что-то перестало работать. эх... придеться посравнивать. похоже старый код где то мб лучше. только времени потратил на методы тыка.

22
damage == 0 может не оч работать с вещественными числами, лучше damage < 1
помимо этого
в первом триггере не обнуляются хендлы
flush'ить хеш у всех юнитов которые бьют цель не стоит, убьет всю инфу сохраненную на юните, лучше RemoveSavedInteger/Handle по одному
ну и попробуй дебажить хотя бы сообщениями, например выводить урон через BJDebugMsg(damage) может поможет понять что не так
32
Лучше событие spell effect, так же помни что у молотка бурь сперва идёт основной урон, а только потом 0.00 урона и бафф, на первом ивенте урона юнит ещё не оглушен и баффа нету.
Принятый ответ
3
quq_CCCP:
Лучше событие spell effect, так же помни что у молотка бурь сперва идёт основной урон, а только потом 0.00 урона и бафф, на первом ивенте урона юнит ещё не оглушен и баффа нету.
Это многое обьясняет, ведь после даже не сработавшего условия, хэндл дамагера очищается.
32
Такая фигня лишь у молотка бурь, у баша и удара из инвиза(стремительность) и вроде incenerate (фаирлорд, пассивка), и все все остальные работают иначе, ччасто нанося урон в момент каста и после при попадании, я эту тему изучал досконально когда возился с линкой в доте и у себя в карте делал детект дефолтных снарядов,от аксид бомбы и молотка бурь.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.