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

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

Закрытая тема
 
Vretx

offline
Опыт: 34
Активность:
EVENT_UNIT_DAMAGED
Такое вот заклинание: герой вешает на цель щит, теряя % от своего здоровья. Когда цель, на которую наложен щит, получает урон, то герой (который повесил щит) восстанавливает себе ману в размере 15% от полученного урона.
Проблема: функция восстановления маны срабатывает периодически, даже когда цель не получает урона. Что я сделал не так?

Триггер, отлавливающий каст:
Код:
function Trig_EnergyShieldCast_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function Trig_EnergyShieldCast_Actions takes nothing returns nothing
    local unit target
    local unit caster
    local integer vHandle
    
    set target = GetSpellTargetUnit()
    set caster = GetSpellAbilityUnit()
    set vHandle = GetHandleId(target)
    call TriggerRegisterUnitEvent( gg_trg_EnergyShieldEffect, target, EVENT_UNIT_DAMAGED )
    call SaveUnitHandle(udg_hash, vHandle, 0, caster)    
    call SetUnitLifeBJ( caster, ( GetUnitStateSwap(UNIT_STATE_LIFE, caster) - GetUnitStateSwap(UNIT_STATE_LIFE, caster) * 0.25 ) )
    
endfunction

//===========================================================================
function InitTrig_EnergyShieldCast takes nothing returns nothing
    set gg_trg_EnergyShieldCast = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_EnergyShieldCast, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_EnergyShieldCast, Condition( function Trig_EnergyShieldCast_Conditions ) )
    call TriggerAddAction( gg_trg_EnergyShieldCast, function Trig_EnergyShieldCast_Actions )
endfunction


Триггер, отлавливающий получение урона:
Код:
function Trig_EnergyShieldEffect_Conditions takes nothing returns boolean
        return UnitHasBuffBJ(GetTriggerUnit(), 'B001')
endfunction

//проблемная функция
function Trig_EnergyShieldEffect_Actions takes nothing returns nothing
    local unit victim
    local unit caster
    local integer vHandle
    local real amount
    
    set victim = GetTriggerUnit()
    set vHandle = GetHandleId(victim)
    set caster = LoadUnitHandle(udg_hash, vHandle, 0)
    set amount = GetEventDamage() * 0.15 )
    call SetUnitManaBJ( caster, ( GetUnitStateSwap(UNIT_STATE_MANA, caster) + amount )
    call DestroyEffectBJ(AddSpecialEffectTargetUnitBJ("chest", caster, "Abilities\\Spells\\Undead\\AbsorbMana\\AbsorbManaBirthMissile.mdl"))
    call BJDebugMsg(R2S(amount)
    
    set victim = null
    set caster = null
    
endfunction

//===========================================================================
function InitTrig_EnergyShieldEffect takes nothing returns nothing
    set gg_trg_EnergyShieldEffect = CreateTrigger(  )
    call TriggerAddCondition( gg_trg_EnergyShieldEffect, Condition( function Trig_EnergyShieldEffect_Conditions ) )
    call TriggerAddAction( gg_trg_EnergyShieldEffect, function Trig_EnergyShieldEffect_Actions )
endfunction

Отредактировано Vretx, 11.09.2013 в 15:03.
Старый 11.09.2013, 14:56
DioD

offline
Опыт: 45,134
Активность:
отладка?
Старый 11.09.2013, 15:47
Закрытая тема

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

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

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

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



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