XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
agentex

offline
Опыт: 34,834
Активность:
Получить тип урона
Есть триггер, срабатывающий на EVENT_UNIT_DAMAGED. Вот его код.
Код:
function Trig_HMdamage_Actions takes nothing returns nothing
 local real dmg
 if GetObjectInt(GetTriggerUnit(), "HM_lvl") > 0 then
 if GetPlayerAlliance(GetOwningPlayer(GetEventDamageSource()), GetOwningPlayer(GetTriggerUnit()), ALLIANCE_PASSIVE) == false and IsUnitType(GetEventDamageSource(), UNIT_TYPE_RANGED_ATTACKER) == true then
 set dmg = (GetEventDamage()*(GetObjectInt(GetTriggerUnit(), "HM_lvl")*20))/100.
 call DisableTrigger(GetTriggeringTrigger())
 call DamageUnit(GetEventDamageSource(), GetTriggerUnit(), dmg)
 call EnableTrigger(GetTriggeringTrigger())
 endif
endif
set dmg = 0.
endfunction

Как известно, это событие срабатывает в том числе и на каст целевых спелов.
Мне нужно исключить этот вариант при срабатывании триггера, т.е. сделать чтобы вышеперечисленные действия происходили только при физическом характере урона (при обычной атаке).
была идея отлавливать начало каста и через тот же СЦВ ставить цели булев флаг, но боюсь в масштабах моей карты такие связки будут затрачивать оч многа ресурсов

Возможно есть более оптимальное решение?
Старый 20.09.2008, 01:15
Лось

offline
Опыт: 7,223
Активность:
Нельзя отследить тип по событию, можно провераять наличие баффа спелла или как ты сказал.
Ещё вариант: делать все спеллы триггерными и при нанесение дамага ставить глобальный флаг, и после нанесения убирать
Код:
globals
    boolean MagicDamage = false
endglobals

function DecalMagicDamage takes unit damager, unit target, real damage returns nothing //Ф-ия нанесение маг. урона
    set MagicDamage = true
        call UnitDamageTarget(damager, target, damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
    set MagicDamage = false
endfunction
//==========================================================

function YourTriggerAct takes nothing returns nothing // Действие от триггеры с событием "юнит дамагед"
    if MagicDamage then
        call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,10,"It's magic damage!")    
    endif       
endfunction
Старый 20.09.2008, 05:09
agentex

offline
Опыт: 34,834
Активность:
Цитата:
function DecalMagicDamage takes unit damager, unit target, real damage returns nothing //Ф-ия нанесение маг. урона
set MagicDamage = true
call UnitDamageTarget(damager, target, damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
set MagicDamage = false
endfunction

Самое обидное то, что тригер срабатывает даже на каст спела у которого нет и малейших признаков нанесения урона, он может сработать вообще на любой спел с целью - юнитом (проверено)
Старый 20.09.2008, 09:24
adic3x

offline
Опыт: 108,439
Активность:
мб бафф поможет? если надо отследить атаку с "руки"
вариант с булеаном тоже приемлим
Старый 20.09.2008, 17:09
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:12.