傷害加深(靈活創造觸發器)

讓目標在45秒內受到的傷害加倍:

function Trig_Ampify_Damage_Conditions takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A001' )    //'A001'為自訂的傷害加深術
endfunction

function Ampify_Damage_child takes nothing returns nothing
    call SetUnitState( GetTriggerUnit(), UNIT_STATE_LIFE, RMaxBJ(( GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) - GetEventDamage() ), 0.50) )
endfunction

function Trig_Ampify_Damage_Actions takes nothing returns nothing
    local trigger trg = CreateTrigger()
    local triggeraction act = TriggerAddAction(trg, function Ampify_Damage_child)
    call TriggerRegisterUnitEvent( trg, GetSpellTargetUnit(), EVENT_UNIT_DAMAGED )
    call PolledWait(45.0)
    call TriggerRemoveAction(trg,act)
    call DestroyTrigger(trg)
    //set trg = null
    //set act = null
endfunction

//===========================================================================
function InitTrig_Ampify_Damage takes nothing returns nothing
    set gg_trg_Ampify_Damage = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Ampify_Damage, EVENT_PLAYER_UNIT_SPELL_EFFECT ) 
    call TriggerAddCondition( gg_trg_Ampify_Damage, Condition( function Trig_Ampify_Damage_Conditions ) )
    call TriggerAddAction( gg_trg_Ampify_Damage, function Trig_Ampify_Damage_Actions )
endfunction

有點類似前面的多執行緒概念,不過這裡的重點不一樣。

JASS其中一大特點是可以自己創造新的觸發、事件、動作,如果用得好,可以省下很多不必要的資源浪費,並且讓你的思路更簡單,觸發更漂亮。

以這個技能為例,我們在技能生效後創造一個觸發,它會讓部隊所受到的傷害加倍。而時間一到,只須要把臨時創造的觸發和動作刪除清空即可。

綜合教學/jass入門教學/e4.傷害加深.txt · 上一次變更: 2007年11月11日 3:32 pm 來自 wasabi
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0