@x3w0r Regarding my cha_timer and function resume this is how it looks like:
function cha_timer(role, freq, time)
local resume_freq = 5
local now_tick = GetChaParam(role, 1)
local is_role_living = -1
SetChaParam(role, 1, now_tick + freq * time)
if math.mod(now_tick, resume_freq) == 0 and now_tick > 0 then
JianYuKa(role ,now_tick)
ZhongShenTaoZhuang(role,now_tick)
if is_role_living == -1 then
is_role_living = IsChaLiving(role)
end
if is_role_living == 1 then
Resume(role)
end
end
---------------------------------------------------------------------------------------------------------
function Resume ( role )
local role_type = ChaIsBoat ( role )
local srec = GetChaAttr ( role , ATTR_SREC )
local sp = GetChaAttr ( role , ATTR_SP )
local mxsp = GetChaAttr ( role , ATTR_MXSP )
local hrec = GetChaAttr ( role , ATTR_HREC )
if hrec < 0 then
LG ( "resume_err" , "role = " , GetChaName (role) , "HP recovery rate lower than 0" )
LG ( "resume_err" , "role_hrec_statec = " , GetChaAttr ( role , ATTR_STATEC_HREC) , "role_hrec_statev = ", GetChaAttr ( role , ATTR_STATEV_HREC) )
LG ( "luascript_err" , "function Resume: character HP recovery rate less than 0" )
return
end
local hp = GetChaAttr ( role , ATTR_HP )
local mxhp = GetChaAttr ( role , ATTR_MXHP )
if role_type == 1 then --船只resume
--Rem_State_NOSEA ( role )
-- SystemNotice (role,"enter ship recover")
if hp <= 0 then
LG ( "luascript_err" , "function Resume: Character in dead status" )
return
end
cha_role = GetMainCha ( role )
if sp <= 0 then
BickerNotice ( role , "No more fuel! The ship is being damaged every moment! Get to the nearest Harbor now!" )
hrec = hrec - 0.025 * mxhp
srec = 0
end
sp = math.max ( 0 , sp - srec )
hp = math.min ( mxhp , hp + hrec )
local ship_lv = GetChaAttr ( role , ATTR_LV )
local ship_exp = GetChaAttr ( role , ATTR_CEXP )
local boatexpup_count = GetBoatCtrlTick ( role )
if ( boatexpup_count - math.floor ( boatexpup_count / 5 ) * 5 ) == 4 then
a = 1
else
a = 0
end
boatexpup_count = boatexpup_count + 1
if boatexpup_count >= 500 then
boatexpup_count = 0
end
SetBoatCtrlTick ( role , boatexpup_count )
-- SetAttrChangeFlag( role)
if ship_lv <= 30 and ship_exp <= 1000 then
-- if ship_lv <= 50 and ship_exp <= 1000 then
-- SystemNotice (role,"enter ship expup")
if a == 1 then
-- SystemNotice (role,"ship_expadd = " ..ship_expadd)
-- SystemNotice (role,"ship_exp = " ..ship_exp)
local ship_expadd = math.floor ( math.random ( 1, 3 ) + math.max ( 0 , ( 2 - ship_lv /10 ) ) )
-- local ship_expadd = math.floor ( math.random ( 50, 150 ) )
ship_exp = ship_exp + ship_expadd
-- SystemNotice (role,"after resume ship_exp = " ..ship_exp)
SystemNotice (role,"Ship EXP gained:" ..ship_expadd)
SetCharaAttr (ship_exp ,role , ATTR_CEXP )
-- ship_exp = GetChaAttr ( role , ATTR_CEXP )
-- SystemNotice (role,"1 after resume ship_exp = " ..ship_exp)
end
end
-- cha_hp = math.min ( Mxhp ( cha_role ) , Hp ( cha_role ) + Hrec ( cha_role ) )
cha_sp = math.min ( Mxsp ( cha_role ) , Sp ( cha_role ) + Srec ( cha_role ) )
SetCharaAttr ( sp , role , ATTR_SP )
SetCharaAttr ( hp , role , ATTR_HP )
-- SetCharaAttr ( cha_hp , cha_role , ATTR_HP )
SetCharaAttr ( cha_sp , cha_role , ATTR_SP )
-- SyncBoat ( role, 4 )
else
if hp <= 0 then
LG ( "luascript_err" , "function Resume: Character in dead status" )
return
end
local Elf_SkillHpResume = 0
local Elf_SkillSpResume = 0
if mxhp ~= hp then
Elf_SkillHpResume = ElfSkill_HpResume ( role )
end
if mxsp ~= sp then
Elf_SkillSpResume = ElfSkill_SpResume ( role )
end
hrec = hrec + Elf_SkillHpResume
srec = srec + Elf_SkillSpResume
sp = math.min ( mxsp , sp + srec )
hp = math.min ( mxhp , hp + hrec )
SetCharaAttr ( hp , role , ATTR_HP )
SetCharaAttr ( sp , role , ATTR_SP )
end
end