补一句,竭心光环的10进制代码是1093677390
function OK4 takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerRegisterTimerEvent(t,0.5,true)
call TriggerAddCondition(t,Condition(function OJ4))
call SaveUnitHandle(HY,(GetHandleId(t)),(2),(GetTriggerUnit()))
set t=null
OK4函数会创建一个0.5秒游戏时间事件的触发器,也就是每0.5秒会触发一次。条件是函数OJ4
function OJ4 takes nothing returns boolean
local integer XII=GetHandleId(GetTriggeringTrigger())
local unit JTI=(LoadUnitHandle(HY,(XII),(2)))
local group g
if MNI(JTI)==false then
set g=WKI()
set IK=JTI
set DSI=JTI
set DTI=GetUnitAbilityLevel(JTI,1093677390)
call GroupEnumUnitsInRange(g,GetUnitX(JTI),GetUnitY(JTI),1025,Condition(function OY4))
call ForGroup(g,function OV4)
call WJI(g)
endif
set g=null
set JTI=null
return false
endfunction
这就开始实际运作了,创建一个本地单位组,选取满足条件单位,条件是函数OY4:
function OY4 takes nothing returns boolean
return(IsUnitEnemy(IK,GetOwningPlayer(GetFilterUnit()))and(GetUnitAbilityLevel(GetFilterUnit(),1093678162)==0 and IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false and MNI(GetFilterUnit())==false)and(IsUnitType(GetFilterUnit(),UNIT_TYPE_ANCIENT)==false or TUI(GetFilterUnit())))and GetUnitAbilityLevel(GetFilterUnit(),1110456372)>0
endfunction
这里的1110456372正是竭心光环的BuffID B084。经过一系列敌我判断,技能等级判断(按这个J来说竭心光环对其他学习了竭心光环的单位是无效的,希望玩过NEC 10人群P的童鞋验证),除去过滤单位(应该指的是小鸡之类免疫触发的单位),除去远古单位,选取【拥有竭心光环buff】的单位,竭心光环的目标终于全部选取。
动作是函数OV4:
function OV4 takes nothing returns nothing
local unit JRI=GetEnumUnit()
local unit JTI=DSI
local real BLO=GetUnitState(JRI,UNIT_STATE_LIFE)
local real OW4=GetUnitState(JRI,UNIT_STATE_MAX_LIFE)
local real OX4=((0.004+0.002*DTI)*OW4)/2
if BLO<OX4 then
call SetUnitState(JRI,UNIT_STATE_LIFE,1)
call JSI(JTI,JRI,3,100)
call JSI(JTI,JRI,1,100)
call JSI(JTI,JRI,2,100)
else
call SetUnitState(JRI,UNIT_STATE_LIFE,KUI(GetUnitState(JRI,UNIT_STATE_LIFE)-OX4,1))
endif
set JRI=null
set JTI=null
endfunction
简单来说不至死的话设置生命值降低,致死的话是设置成1点血之后让NEC对目标造成3次100点伤害,不过不才确实不知道函数里的3、1、2是什么东西,难道是设置好的攻击伤害类型?
