找回密码
 点一下
查看: 2125|回复: 2

关于动态注册的教程

[复制链接]
发表于 2007-11-19 06:47:34 | 显示全部楼层 |阅读模式
//当触发注册的事件时调用的函数
function OnUnitAmort takes nothing returns nothing
      //设置触发单位为无敌
      call SetUnitInvulnerable( GetTriggerUnit(), true )
      //破坏这个触发器,即下面的RegisterUnitAmortEvent所创建的触发器
      //这样就不会导致该触发被多次调用,并且还能清理该触发所占用的内存
      call DestroyTrigger(GetTriggeringTrigger())
endfunction

//注册模板
function RegisterUnitAmortEvent takes unit witchUnit returns nothing
      //创建一个触发器
      local trigger rTrg = CreateTrigger()
      //为创建的触发器注册事件:当单位witchUnit的生命值小于或等于50的时触发事件
      call TriggerRegisterUnitLifeEvent( rTrg , witchUnit, LESS_THAN_OR_EQUAL, 50 )
      //注册触发器事件响应后所调用的函数
      call TriggerAddAction( rTrg, function OnUnitAmort )
endfunction
-------------------------------------------------------------------------------------------------------------------------------
为什么老狼说这个写法很笨?
发表于 2007-11-19 15:50:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-11-27 11:19:37 | 显示全部楼层
以下是标准的触发创建和删除~
[codes=jass]
function DestroyTriggerAllById takes integer t returns nothing
    call TriggerRemoveCondition(i2tg(t),i2tc(GetStoredInteger(udg_GC,I2S(t),"TriggerCondition")))
    call DestroyTrigger(i2tg(t))
    call FlushStoredMission(udg_GC,I2S(t))
endfunction

function DestroyTriggerAll takes trigger trg returns nothing
    call TriggerRemoveCondition(trg,i2tc(GetStoredInteger(udg_GC,I2S(h2i(trg)),"TriggerCondition")))
    call DestroyTrigger(trg)
    call FlushStoredMission(udg_GC,I2S(h2i(trg)))
endfunction

//========================================================
function RegisterUnitAmortCond takes nothing returns nothing
      call SetUnitInvulnerable(GetTriggerUnit(), true)
      call DestroyTriggerAll(GetTriggeringTrigger())
endfunction

function RegisterUnitAmortEvent takes unit witchUnit returns nothing
    local trigger trg = CreateTrigger()
    call TriggerRegisterUnitStateEvent(trg, witchUnit, UNIT_STATE_LIFE, LESS_THAN_OR_EQUAL, 50)
    call StoreInteger(udg_GC,I2S(h2i(trg)),"TriggerCondition",TriggerAddCondition(trg,Condition(function RegisterUnitAmortCond)))
    set trg = null
endfunction
[/codes]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 20:02 , Processed in 0.074671 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表