function L23 takes nothing returns boolean
local trigger t2=GetTriggeringTrigger()
local integer BBO=GetHandleId(t2)
local trigger t1=(LoadTriggerHandle(HY,(BBO),(274)))
local integer YF2=GetHandleId(t1)
local unit JTI=(LoadUnitHandle(HY,(BBO),(2)))
local unit JRI
local real d
local real a
local boolean L33=(LoadBoolean(HY,(BBO),(273)))
if(GetTriggerEventId()==EVENT_UNIT_DEATH and GetTriggerUnit()==JTI)or(GetTriggerEventId()!=EVENT_UNIT_DAMAGED and GetTriggerEventId()!=EVENT_UNIT_DEATH)then
call FlushChildHashtable(HY,(YF2))
call FlushChildHashtable(HY,(BBO))
call WTI(t1)
call WTI(t2)
elseif GetTriggerEventId()==EVENT_UNIT_DEATH then
if IsUnitIllusion(GetDyingUnit())==false then
call N1I(GetDyingUnit(),JTI,1747990361,"LO3",600)
endif
elseif L33==false then
set JRI=GetTriggerUnit()
set d=L9I(JTI,JRI)
if d<775 and GetEventDamage()>4 then
if LI3(JTI)then
set a=20+5*CUI
else
set a=15+5*CUI
endif
if d>200 then
set a=a-15*((d-150)/(775-150))
endif
call SaveBoolean(HY,(BBO),(273),(true))
call JSI(GetEventDamageSource(),GetTriggerUnit(),3,GetEventDamage()*a/100)
call SaveBoolean(HY,(BBO),(273),(false))
endif
endif
set t2=null
set t1=null
set JTI=null
set JRI=null
return false
endfunction
在其它函数的辅助下,若是尸王死亡触发事件则摧毁触发器t1、t2,若是非幻象敌人死亡则,根据距离由尸王对目标造成英雄攻击魔法伤害
function N1I takes unit JTI,unit JRI,integer NOI,string N2I,real MRI returns trigger
local trigger t=CreateTrigger()
local integer XII=GetHandleId(t)
local real L5I=GetUnitX(JTI)
local real L6I=GetUnitY(JTI)
local real N3I=GetUnitFacing(JTI)
call TriggerRegisterTimerEvent(t,0.03,true)
call TriggerAddCondition(t,Condition(function MSI))
call SaveReal(HY,(XII),(44),((MRI)*1.0))
call SaveInteger(HY,(XII),(30),(WVI(JRI)))
call SaveStr(HY,(XII),(46),(N2I))
call SaveInteger(HY,(XII),(43),(WVI(JTI)))
call SaveUnitHandle(HY,(XII),(45),(CreateUnit(GetOwningPlayer(JTI),NOI,L5I,L6I,N3I)))
set CK=t
set t=null
return CK
endfunction
function WVI takes unit u returns integer
set YY=YY+1
if YY>16000 then
set XY[YY-16000]=u
elseif YY>8000 then
set WY[YY-8000]=u
else
set VY[YY]=u
endif
return YY
endfunction
function MSI takes nothing returns boolean
local trigger t=GetTriggeringTrigger()
local integer XII=GetHandleId(t)
local integer K0I=(LoadInteger(HY,(XII),(30)))
local unit JRI=WHI(K0I)
local integer MTI=(LoadInteger(HY,(XII),(43)))
local unit JTI=WHI(MTI)
local real MRI=(LoadReal(HY,(XII),(44)))
local unit MPI=(LoadUnitHandle(HY,(XII),(45)))
local real x=GetUnitX(MPI)
local real y=GetUnitY(MPI)
local real L7I=GetUnitX(JRI)
local real L8I=GetUnitY(JRI)
local real MQI=MRI*0.03
local real MUI=LQI(x,y,L7I,L8I)
local real N0I=x+MQI*Cos(MUI*bj_DEGTORAD)
local real NII=y+MQI*Sin(MUI*bj_DEGTORAD)
call SetUnitX(MPI,N0I)
call SetUnitY(MPI,NII)
call SetUnitFacing(MPI,MUI)
if MNI(JRI)then
call KillUnit(MPI)
call WGI(K0I)
call FlushChildHashtable(HY,(XII))
call WTI(t)
elseif MBI(L7I,L8I,N0I,NII)<=MQI then
call KillUnit(MPI)
set IK=JTI
set OK=JRI
call ExecuteFunc((LoadStr(HY,(XII),(46))))
call WGI(K0I)
call FlushChildHashtable(HY,(XII))
call WTI(t)
endif
set t=null
set JRI=null
set JTI=null
set MPI=null
return false
endfunction
function WHI takes integer i returns unit
if i>16000 then
return XY[i-16000]
elseif i>8000 then
return WY[i-8000]
else
return VY[i]
endif
endfunction
function WGI takes integer i returns nothing
if i>16000 then
set XY[i-16000]=null
elseif i>8000 then
set WY[i-8000]=null
else
set VY[i]=null
endif
endfunction
function MNI takes unit u returns boolean
return GetUnitTypeId(u)<1 or IsUnitType(u,UNIT_TYPE_DEAD)==true
endfunction
以上是对目标死亡的函数