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.
|