call UnitDamageTargetBJ( GetEventDamageSource() , GetTriggerUnit(), GetEventDamage()*5, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
Такой способ крашит карту, орать не нужно ибо я ковыряю функции.

Буквально вчера такое же разбирал у себя. Краш лечится предусловием. Перед нанесением урона сохранить в Custom Value (UserData) боевой единицы какое-то число, которое бы говорило о нанесении урона, после нанесения урона - убираете. Для триггера, ловящего урон поставить условие, что юниты с таким установленным числом не проходят по событию детекта урона (чтобы триггерный урон не ловился и не получалась рекурсия).
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
Судя по этой строчке у тебя образуется бесконечный цикл, ты ловишь урон, и тут же снова его наносишь запуская эту же функцию до бесконечности. Попробуй отключать триггер отлова урона перед нанесением бонусного урона и включать после.
29
Почему вы не используете логическую переменную для фильтрации входящего урона?
Конечно будет крашить.
И вообще, это ж BJ,
Вот сама нативка, к которой обращается это BJ фнукция
native UnitDamageTarget takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean
13
Буквально вчера такое же разбирал у себя. Краш лечится предусловием. Перед нанесением урона сохранить в Custom Value (UserData) боевой единицы какое-то число, которое бы говорило о нанесении урона, после нанесения урона - убираете. Для триггера, ловящего урон поставить условие, что юниты с таким установленным числом не проходят по событию детекта урона (чтобы триггерный урон не ловился и не получалась рекурсия).
Принятый ответ
4
Ответ на вопрос "Можно ли реализовать подобное без орб эффектов?" - Можно!
6
Alexander122:
Ответ на вопрос "Можно ли реализовать подобное без орб эффектов?" - Можно!
ЮМОРИСТ
28
Буквально вчера такое же разбирал у себя. Краш лечится предусловием. Перед нанесением урона сохранить в Custom Value (UserData) боевой единицы какое-то число, которое бы говорило о нанесении урона, после нанесения урона - убираете. Для триггера, ловящего урон поставить условие, что юниты с таким установленным числом не проходят по событию детекта урона (чтобы триггерный урон не ловился и не получалась рекурсия).
Custom Value может использоваться.
Вот нормальное решение.
call DisableTrigger(GetTriggeringTrigger())
call UnitDamageTargetBJ( GetEventDamageSource() , GetTriggerUnit(), GetEventDamage()*5, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
call EnableTrigger(GetTriggeringTrigger())
13
PT153, да, потом я начал так блокировать отлов урона, когда анализ записей в хэше не устроил)
29
PT153, можно было и не выключать триггер, а обойтись логической переменной.
if NoDamageReaction  then
else
set  NoDamageReaction = true 
call UnitDamageTarget ( GetEventDamageSource() , GetTriggerUnit(), GetEventDamage()*5, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, null )
set  NoDamageReaction = false
endif
28
можно было и не выключать триггер, а обойтись логической переменной.
В итоге у тебя сработает триггер, начнётся проверятся условие. Зачем так, если можно просто выключить триггер, это обойдётся в меньше строк кода и без создания переменных.
28
KingMaximax, а зачем тут else?
if(!NoDamageReaction){
	NoDamageReaction = true;
	UnitDamageTarget ( GetEventDamageSource() , GetTriggerUnit(), GetEventDamage()*5, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, null )
	NoDamageReaction = false
}
29
KingMaximax, а зачем тут else?
Как сказал мой один рыжий знакомый, который ломает сайты. if else быстрее чем if not...
Я всегда использую if else принцип... Особенно для проверки "Есть ли юнит в группе".
28
KingMaximax, т.е. ради экономии одного такта ты пишешь быдлокод?
когда даже старые компьютеры совершают более миллиарда тактов в секунду
может тогда ещё будешь писать всё в одну строчку
т.к. лишние пустые строки замедляют работу намного сильнее чем отрицание
29
nvc123, я бы не сказал, что я писал быдлокод такой код радим одного такта. Скажем так ради тысячи тактов. Просто так я ничего не пишу, всегда есть причина. И Алсилична бы тебе не простила за оскорбление сего способа — быдлокодом. Обычно такое такое её триггерит. Хотя, наверно она не среагирует, скорее всего она как обычно угнетает угоз...
28
KingMaximax, обратить 1 бит это 1 такт
и оставлять пустые иф/елсе это чистой воды былдлокод за который бьют по рукам
а в некоторых местах даже увольняют с работы
лично я бы за такое сжигал напалмом
жаль только что проезд дорогой
да и тащить напалм через границу неудобно
29
nvc123, я в других яп подобного не делаю, только в jass'е. И то не во всех случаях применяю данный способ. Если на то пошло. И вообще это грубо по отношению к некоторым наркокодерам...
и оставлять пустые иф/елсе это чистой воды былдлокод за который бьют по рукам
А кто сказал, что они будут пустыми.. А вдруг там будет код, откуда ты знаешь. А вдруг я просчитал наперёд, что нужно будет ему. А разве программисты не просчитывают всё наперёд, ?)
Быть на шаг впереди заказчика.....
Чтобы оставить комментарий, пожалуйста, войдите на сайт.