|
用3-5个Debug文本信息检错的时候一旦同时运行多次会很卡。
第一次用Jass自己写函数。
以前都是改改Dota虐虐AI而已。
对函数隐藏的错误个人已经检查不出来了,希望有经验丰富的前辈指点指点。
引用的内容是我对函数的理解。
Jass高亮的内容是实际函数。
顺带问一下,Timerstart和新建触发器并给予事件和动作有什么差别么。
Timerstart看起来简单一些,可是我听说函数的运行是串联的,触发器是并联的。
函数名HealHP
声明局部变量*4
……
……
……
设置局部变量*4
……
……
……
显示Debug信息
判断循环次数(本来是用了个局部变量从缓存里读,然后看Dota里的方法更省事,果断无耻的抄袭了。)
是则:
恢复生命值
否则:
清空局部变量*3(根据教材,只有句柄型变量需要清空,但是习惯性的全部清零吧。)
……
……
……
删除缓存类别
关闭触发器
删除触发器
清空trigger变量(担心清空变量导致无法使用变量做事,所以最后清除。)
函数名HealHP_Start
声明局部变量*5
设置局部变量*4
清空起到传递参数用的全局变量(不会用传递参数……每次JassshopPRO总是提示Except“.”or“return” )
设置局部变量(这个局部变量是用计算得来的,所以位置稍后了一些。)
简单的判断
是则XXX
否则无视
对变量进行最后的计算*2
使用Trigger变量,创建一个新触发器
使用return Bug保存需要保存的数据到触发器身上
为新建的触发器添加事件和动作
清空变量
[jass]function HealHP takes nothing returns nothing
local trigger Temp_Trigger
local unit Temp_Unit
local integer Temp_Integer
local real Temp_RHP
set Temp_Trigger = GetTriggeringTrigger()
set Temp_Unit = I2U(GetStoredInteger(udg_GC, I2S(H2I(Temp_Trigger)),"Temp_Unit"))
set Temp_Integer = GetStoredInteger(udg_GC, I2S(H2I(Temp_Trigger)),"Temp_Integer")
set Temp_RHP = GetStoredReal(udg_GC, I2S(H2I(Temp_Trigger)),"Temp_RHP")
call BJDebugMsg( "当前循环次数"+I2S(GetTriggerEvalCount(Temp_Trigger)))
if GetTriggerEvalCount(Temp_Trigger) <= Temp_Integer then
call SetUnitState( Temp_Unit, UNIT_STATE_LIFE,(GetUnitState(Temp_Unit,UNIT_STATE_LIFE)+(Temp_RHP)))
else
set Temp_Unit = null
set Temp_Integer = 0
set Temp_RHP = 0
call FlushStoredMission(udg_GC, I2S(H2I(Temp_Trigger)) )
call DisableTrigger( Temp_Trigger )
call DestroyTrigger( Temp_Trigger )
set Temp_Trigger = null
endif
endfunction
function HealHP_Start takes nothing returns nothing
local integer Temp_Integer
local trigger Temp_Trigger
local unit Temp_Unit
local real Temp_PPT
local real Temp_RHPMax
local real Temp_RHP
set Temp_Unit = udg_Unit
set Temp_Integer = udg_Integer
set Temp_PPT = udg_PPT
set Temp_RHPMax = udg_RHPMax
set udg_Unit = null
set udg_Integer = 0
set udg_PPT = 0
set udg_RHPMax = 0
set Temp_RHP = ((GetUnitState(Temp_Unit, UNIT_STATE_MAX_LIFE) - GetUnitState(Temp_Unit, UNIT_STATE_LIFE))* Temp_PPT)
if  ( Temp_RHP > Temp_RHPMax )  then
set Temp_RHP=Temp_RHPMax
endif
set Temp_Integer = Temp_Integer*100
set Temp_RHP = Temp_RHP/Temp_Integer
set Temp_Trigger = CreateTrigger()
call StoreInteger( udg_GC, (I2S(H2I(Temp_Trigger))), "Temp_Unit",  H2I(Temp_Unit) )
call StoreInteger( udg_GC, (I2S(H2I(Temp_Trigger))), "Temp_Integer",  Temp_Integer )
call StoreReal( udg_GC, (I2S(H2I(Temp_Trigger))), "Temp_RHP", Temp_RHP )
call TriggerRegisterTimerEvent(Temp_Trigger,0.01,true)
//一般情况下时间间隔小于多少会导致机器卡?刚开始我5个Debug,每0.001运行一次,直接卡飞了。
call TriggerAddCondition(Temp_Trigger,Condition(function HealHP))
set Temp_Trigger = null
set Temp_Unit = null
set Temp_Integer = 0
set Temp_PPT = 0
set Temp_RHPMax = 0
set Temp_RHP = 0
endfunction[/jass] |
|