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

求教关于任意单位接受伤害的触发

[复制链接]
发表于 2011-4-2 14:14:26 | 显示全部楼层 |阅读模式
function Trig_DR_Action takes nothing returns nothing
local real Damage=GetEventDamage()
local unit Attacker = GetEventDamageSource()
local unit Damager =GetTriggerUnit()
call DestroyTrigger(gg_trg_Damage_Action)
call DestroyTrigger(gg_trg_InitDamage)
if((Attacker==udg_UNIT)and(IsUnitAliveBJ(Attacker)))then
if(GetRandomInt(1,100)<=30)then
call SetUnitState(Attacker,UNIT_STATE_LIFE,GetUnitState(Attacker,UNIT_STATE_LIFE)+(Damage*0.05)+(GetUnitStateSwap(UNIT_STATE_MAX_LIFE,Attacker)*0.03 ))
call DestroyEffect(AddSpecialEffectTargetUnitBJ( "overhead",Attacker, "Abilities\\Spells\\Undead\\ReplenishMana\\SpiritTouchTarget.mdl" ))
endif
endif
if( (Damager==udg_UNIT)and(IsUnitAliveBJ(Damager)) )then
if(GetRandomInt(1,100)<=20)then
call SetUnitState(Damager,UNIT_STATE_LIFE,GetUnitState(Damager,UNIT_STATE_LIFE)+Damage)
endif
endif
endfunction


function Trig_Init_Damage_Func002A takes nothing returns nothing
set gg_trg_Damage_Action = CreateTrigger(  )
call TriggerRegisterUnitEvent( gg_trg_Damage_Action, GetEnumUnit(), EVENT_UNIT_DAMAGED )
call TriggerAddAction(gg_trg_Damage_Action,function Trig_DR_Action)
endfunction
function Trig_Init_Damage_Actions takes nothing returns nothing
    call ForGroupBJ(GetUnitsInRectAll(GetEntireMapRect()), function Trig_Init_Damage_Func002A )
endfunction
function InitTrig_Init_Damage_Actions takes nothing returns nothing
    set gg_trg_InitDamage = CreateTrigger(  )
    call TriggerRegisterEnterRectSimple( gg_trg_InitDamage, GetEntireMapRect() )
    call TriggerAddAction( gg_trg_InitDamage, function Trig_Init_Damage_Actions )
endfunction



就是捕捉任意单位受伤害,对某个单位做到模拟吸血和模拟闪避的效果


但是不加标红那两句的话图会很卡,加了之后感觉技能效果有时出不来,没有吸血的动画效果


半模仿半实践写出来的,不是很懂JASS,求指导
发表于 2011-4-2 23:53:27 | 显示全部楼层
[jass]
function Trig_Init_Damage_Func002A takes nothing returns nothing
set gg_trg_Damage_Action = CreateTrigger(&#160;&#160;)
call TriggerRegisterUnitEvent( gg_trg_Damage_Action, GetEnumUnit(), EVENT_UNIT_DAMAGED )
call TriggerAddAction(gg_trg_Damage_Action,function Trig_DR_Action)
endfunction
function Trig_Init_Damage_Actions takes nothing returns nothing
&#160;&#160;&#160;&#160;call ForGroupBJ(GetUnitsInRectAll(GetEntireMapRect()), function Trig_Init_Damage_Func002A )
endfunction
function InitTrig_Init_Damage_Actions takes nothing returns nothing
&#160;&#160;&#160;&#160;set gg_trg_InitDamage = CreateTrigger(&#160;&#160;)
&#160;&#160;&#160;&#160;call TriggerRegisterEnterRectSimple( gg_trg_InitDamage, GetEntireMapRect() )
&#160;&#160;&#160;&#160;call TriggerAddAction( gg_trg_InitDamage, function Trig_Init_Damage_Actions )
endfunction
[/jass]
只看这里。卡是必须的。
每有一个单位进入区域,你要选全地图的单位加触发加事件加动作。
回复

使用道具 举报

 楼主| 发表于 2011-4-3 10:21:19 | 显示全部楼层
谢谢解答,我已经搞清楚了,把动态注册搞乱了,应该是分开一个是进入地图区域的时候直接捕捉进入地图事件,另一个是地图初始化的时候捕捉全部单位

再问一下,进入地图区域事件包不包括复活?要不要再注册一个任意单位完成复活的?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 14:49 , Processed in 0.039426 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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