|
判断技能被打断的方法
很多人喜欢用计时器给自己的技能加上持续的效果,这时有个问题就是,用什么方法可以判断技能被打断呢?
对于一般技能,如地震,我们有个很简单的方法,就是判断施法者的当前命令。请看下面的代码:
[codes=jass]
globals
timer udg_earthquaketimer = CreateTimer()
integer udg_order
unit udg_caster
endglobals
function Trig_Earthquake_Effect takes nothing returns nothing
if GetUnitCurrentOrder( udg_caster ) != udg_order then
call PauseTimer( udg_earthquaketimer )
else
call DoSomething()
endif
endfunction
function Trig_Earthquake_Actions takes nothing returns nothing
set udg_order = GetUnitCurrentOrder( GetTriggerUnit())
set udg_caster = GetTriggerUnit()
call TimerStart( udg_earthquaketimer, 1.0, true, function Trig_Earthquake_Effect )
endfunction
[/codes]
在上面的代码中,我们用udg_order把施法者一开始的施法命令存起来,然后每1秒比较一次,当二者不同时,停下计时器。
对于用“通魔”['ANcl']模版做的技能,则需要分两种情况看:
对于“使其他技能无效”选项为 FALSE的技能,可以用上面的方法。
但是对于该选项为 TRUE的技能,我们需要做出另外的判断,请看以下函数:
[codes=jass]
function UnitJump_Buff takes unit caster returns boolean
//! textmacro unitjumpbuffboolean takes aId
if GetUnitAbilityLevel( caster, $aId$ ) > 0 then
return false
endif
//! endtextmacro
//! runtextmacro unitjumpbuffboolean( "'Beng'" )
//! runtextmacro unitjumpbuffboolean( "'Bena'" )
//! runtextmacro unitjumpbuffboolean( "'Bens'" )
//! runtextmacro unitjumpbuffboolean( "'Bmlt'" )
//! runtextmacro unitjumpbuffboolean( "'BPSE'" )
//! runtextmacro unitjumpbuffboolean( "'Bfrz'" )
//! runtextmacro unitjumpbuffboolean( "'BSTN'" )
//! runtextmacro unitjumpbuffboolean( "'BNdo'" )
return true
endfunction
function Trig_Earthquake_Effect takes nothing returns nothing
if GetUnitCurrentOrder( udg_caster ) != udg_order or not(UnitJump_Buff(udg_caster)) then
call PauseTimer( udg_earthquaketimer )
else
call DoSomething()
endif
endfunction
[/codes]
我们现在假设地震技能是用通魔为模版做的,而且“使其他技能无效”选项为 TRUE,这时我们需要判断单位是否被打晕,function UnitJump_Buff起的就是这个作用。当施法者身上有被打晕的BUFF时,停下计时器。 |
|