|
楼主 |
发表于 2011-3-3 00:16:38
|
显示全部楼层
回 1楼(zq8827213) 的帖子
代码当然没有错误
放到动作或者条件里 触发单位当然会是 死亡单位
下面又做了玩家单位 被攻击事件 测试 -
- function Trig_aaa_Conditions takes nothing returns boolean
- call BJDebugMsg(GetUnitName(GetTriggerUnit()))
- return false
- endfunction
- function Filteraa takes nothing returns boolean
- call BJDebugMsg(GetUnitName(GetFilterUnit()))
- return IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO)
- endfunction
- //===========================================================================
- function InitTrig_aaa takes nothing returns nothing
- set gg_trg_aaa = CreateTrigger( )
- call TriggerRegisterPlayerUnitEvent( gg_trg_aaa, Player(0), EVENT_PLAYER_UNIT_ATTACKED, Condition(function Filteraa))
- call TriggerRegisterPlayerUnitEvent( gg_trg_aaa, Player(1), EVENT_PLAYER_UNIT_ATTACKED, Condition(function Filteraa))
- call TriggerAddCondition( gg_trg_aaa, Condition(function Trig_aaa_Conditions) )
- endfunction
复制代码
只注册玩家2被攻击事件时显示如下: 攻击单位为 大法师
匹配是过滤作用,而最后的到的匹配单位应该==事件触发单位,
也就是死亡事件指代 死亡单位==触发单位 被攻击事件指代 被攻击单位==触发单位
用以上测试结果GetFilterUnit()永远指代相对的单位
而这样也是一样-
- function Filteraa takes nothing returns boolean
- if IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) then
- set udg_u=GetFilterUnit()
- else
- set udg_u=GetFilterUnit()
- endif
- return true
- endfunction
复制代码
udg_u最终还是 攻击者
过滤函数没有将触发事件的一部分不符合单位过滤掉
说明过滤函数匹配单位的问题 |
|