330 lines
8.0 KiB
Lua
330 lines
8.0 KiB
Lua
|
--------------------------------------------------------------------------------
|
|||
|
-- Tower Of Iyzel Routine --
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
function PlayerMapLogin( MapIndex, Handle )
|
|||
|
cExecCheck "PlayerMapLogin"
|
|||
|
|
|||
|
if MapIndex == nil
|
|||
|
then
|
|||
|
DebugLog( "PlayerMapLogin::MapIndex == nil")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if Handle == nil
|
|||
|
then
|
|||
|
DebugLog( "PlayerMapLogin::Handle == nil")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
DebugLog( "PlayerMapLogin::Var == nil")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- ù <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> <20><> <20>α<EFBFBD><CEB1><EFBFBD> üũ
|
|||
|
Var["bPlayerMapLogin"] = true
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function ExitGateClick( NPCHandle, PlyHandle, RegistNumber )
|
|||
|
cExecCheck "ExitGateClick"
|
|||
|
|
|||
|
DebugLog( "ExitGateClick::Start" )
|
|||
|
|
|||
|
if NPCHandle == nil
|
|||
|
then
|
|||
|
ErrorLog( "ExitGateClick::NPCHandle == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if PlyHandle == nil
|
|||
|
then
|
|||
|
ErrorLog( "ExitGateClick::PlyHandle == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
cLinkTo( PlyHandle, LinkInfo["ReturnMapOnGateClick"]["MapIndex"], LinkInfo["ReturnMapOnGateClick"]["x"], LinkInfo["ReturnMapOnGateClick"]["y"] )
|
|||
|
|
|||
|
DebugLog( "ExitGateClick::End" )
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function BossDamaged( MapIndex, AttackerHandle, MaxHP, CurHP, DefenderHandle )
|
|||
|
cExecCheck "BossDamaged"
|
|||
|
|
|||
|
if DefenderHandle == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::DefenderHandle == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if MapIndex == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::MapIndex == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if MaxHP == nil or CurHP == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::HP Info is nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::Var == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"] == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::Var[\"Enemy\"] == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"][ DefenderHandle ] == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::Var[\"Enemy\"]["..DefenderHandle.."] == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if Var["EachFloor"] == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossDamaged::Var[\"EachFloor\"] == nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["EachFloor"]["Casting"] == nil
|
|||
|
then
|
|||
|
Var["EachFloor"]["Casting"] = {}
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local HP_Rate = ( CurHP * 1000 ) / MaxHP
|
|||
|
|
|||
|
|
|||
|
-- <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><> Ž<><C5BD>
|
|||
|
for nIndex, sSkillName in pairs ( BossSkillNameTable )
|
|||
|
do
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
if Var["EachFloor"][ sSkillName.."PhaseNo"] == nil
|
|||
|
then
|
|||
|
Var["EachFloor"][ sSkillName.."PhaseNo"] = 1
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["EachFloor"][ sSkillName ] == nil
|
|||
|
then
|
|||
|
Var["EachFloor"][ sSkillName ] = {}
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20>ܰ<EFBFBD><DCB0≯<EFBFBD> <20>ƿ<DEBE><C6BF><EFBFBD>
|
|||
|
local CurFloorNo = Var["EachFloor"]["StepNumber"]
|
|||
|
local CurFloor = StepNameTable[ CurFloorNo ]
|
|||
|
|
|||
|
-- <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
local sThresholdTableIndex = sSkillName.."HP_"..CurFloor -- ex ) "SummonHP_Floor04
|
|||
|
local nCurPhase = Var["EachFloor"][ sSkillName.."PhaseNo"]
|
|||
|
local nMaxPhase = #ThresholdTable[ sThresholdTableIndex ]
|
|||
|
|
|||
|
if nCurPhase <= nMaxPhase
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD> HP<48><50> <20><>ų<EFBFBD><C5B3> Threshold <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ұ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
while ThresholdTable[ sThresholdTableIndex ][ nCurPhase ] >= HP_Rate
|
|||
|
do
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD>̺<EFBFBD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD> <20>ƿ<DEBE><C6BF><EFBFBD>
|
|||
|
local sCurSkillIndex = "HP"..ThresholdTable[ sThresholdTableIndex ][ nCurPhase ] -- ex) "HP800"
|
|||
|
local sBossSkillTableIndex = sSkillName.."_"..CurFloor -- ex) "Summon_Floor04"
|
|||
|
|
|||
|
if BossSkill[ sBossSkillTableIndex ][ sCurSkillIndex ] ~= nil
|
|||
|
then
|
|||
|
-- <20><>ų<EFBFBD><C5B3> <20><>ƾ<EFBFBD><C6BE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["EachFloor"][ sSkillName ][ nCurPhase ] == nil
|
|||
|
then
|
|||
|
Var["EachFloor"][ sSkillName ][ nCurPhase ] = {}
|
|||
|
Var["EachFloor"][ sSkillName ][ nCurPhase ]["bCasting"] = true
|
|||
|
Var["EachFloor"][ sSkillName ][ nCurPhase ]["sSkillTableIndex"] = sCurSkillIndex
|
|||
|
DebugLog( "BossDamaged::SetSkillCasting-"..sSkillName.." "..sCurSkillIndex.." "..nCurPhase )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
nCurPhase = nCurPhase + 1
|
|||
|
if nCurPhase > nMaxPhase
|
|||
|
then
|
|||
|
break
|
|||
|
end
|
|||
|
|
|||
|
end -- <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
-- <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["EachFloor"][ sSkillName.."PhaseNo"] = nCurPhase
|
|||
|
|
|||
|
end -- <20><> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD><CAB0>ߴ<EFBFBD><DFB4><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD>ǹ<EFBFBD> //
|
|||
|
|
|||
|
end -- <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> Ž<><C5BD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function BossRoutine( Handle, MapIndex )
|
|||
|
cExecCheck "BossRoutine"
|
|||
|
|
|||
|
if Handle == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossRoutine::Handle == nil" )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if MapIndex == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossRoutine::MapIndex == nil" )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossRoutine::Var == nil" )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ
|
|||
|
if Var["RoutineTime"][ Handle ] <= cCurrentSecond()
|
|||
|
then
|
|||
|
Var["RoutineTime"][ Handle ] = cCurrentSecond() + 0.2
|
|||
|
else
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if Var["Enemy"] == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossRoutine::Var[\"Enemy\"] == nil" )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ] == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossRoutine::Var[\"Enemy\"]["..Handle.."] == nil" )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- Boss <20><><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectDead( Handle ) == 1
|
|||
|
then
|
|||
|
DebugLog( "BossRoutine::BossDead" )
|
|||
|
cMobSuicide( Var["MapIndex"] )
|
|||
|
|
|||
|
-- <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><EFBFBD><DEB8><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
for nIndex, sSkillName in pairs ( BossSkillNameTable )
|
|||
|
do
|
|||
|
Var["EachFloor"][ sSkillName ] = nil
|
|||
|
Var["EachFloor"][ sSkillName.."PhaseNo"] = nil
|
|||
|
end
|
|||
|
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if Var["EachFloor"] == nil
|
|||
|
then
|
|||
|
ErrorLog( "BossRoutine::Var[\"EachFloor\"] == nil" )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- MobDamaged <20><>ƾ <20><><EFBFBD><EFBFBD>
|
|||
|
cAIScriptFunc( Handle, "MobDamaged", "BossDamaged" )
|
|||
|
|
|||
|
|
|||
|
-- <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><> Ž<><C5BD>
|
|||
|
for nIndex, sSkillName in pairs ( BossSkillNameTable )
|
|||
|
do
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵ<EFBFBD> <20><><EFBFBD>̹Ƿ<CCB9> <20>н<EFBFBD>
|
|||
|
if Var["EachFloor"][ sSkillName.."PhaseNo"] ~= nil and Var["EachFloor"][ sSkillName ] ~= nil
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> <20><>ų<EFBFBD>鸸 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>.
|
|||
|
for i = 1, #Var["EachFloor"][ sSkillName ]
|
|||
|
do
|
|||
|
-- <20><><EFBFBD><EFBFBD>üũ
|
|||
|
if Var["EachFloor"][ sSkillName ][ i ] == nil
|
|||
|
then
|
|||
|
break
|
|||
|
end
|
|||
|
|
|||
|
-- <20>غ<EFBFBD><D8BA><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["EachFloor"][ sSkillName ][ i ]["bCasting"] == true
|
|||
|
then
|
|||
|
local sCurSkillTableIndex = Var["EachFloor"][ sSkillName ][ i ]["sSkillTableIndex"] -- ex) "HP800"
|
|||
|
|
|||
|
-- <20>ܰ<EFBFBD><DCB0≯<EFBFBD> <20>ƿ<DEBE><C6BF><EFBFBD>
|
|||
|
local CurFloorNo = Var["EachFloor"]["StepNumber"]
|
|||
|
local CurFloor = StepNameTable[ CurFloorNo ]
|
|||
|
|
|||
|
-- <20><>ų <20><><EFBFBD>̺<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
local sBossSkillTableIndex = sSkillName.."_"..CurFloor -- ex) "Summon_Floor04"
|
|||
|
|
|||
|
-- <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
local CurSkillInfo = BossSkill[ sBossSkillTableIndex ][ sCurSkillTableIndex ]
|
|||
|
|
|||
|
-- <20>ܸ<EFBFBD> <20><>ȯ
|
|||
|
if sSkillName == "Summon"
|
|||
|
then
|
|||
|
DebugLog( "BossRoutine::StartSkillCasting-"..sSkillName.." "..sCurSkillTableIndex.." "..i )
|
|||
|
|
|||
|
for i = 1, #CurSkillInfo["SummonMobs"]
|
|||
|
do
|
|||
|
cMobRegen_Obj( CurSkillInfo["SummonMobs"][ i ], Handle )
|
|||
|
DebugLog( "BossRoutine::CastSkill-"..sSkillName.." "..sCurSkillTableIndex.." ("..i.."/"..#CurSkillInfo["SummonMobs"]..") :"..CurSkillInfo["SummonMobs"][ i ] )
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD>
|
|||
|
if NPC_GuardChat["BossBattleDialog"][ CurFloor ] ~= nil
|
|||
|
then
|
|||
|
cMobDialog( Var["MapIndex"], NPC_GuardChat["SpeakerIndex"], NPC_GuardChat["ScriptFileName"], NPC_GuardChat["BossBattleDialog"][ CurFloor ][ i ]["Index"] )
|
|||
|
else
|
|||
|
ErrorLog( "BossRoutine::There is no face-cut at This Floor" )
|
|||
|
end
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD> ó<><C3B3>
|
|||
|
Var["EachFloor"][ sSkillName ][ i ]["bCasting"] = false
|
|||
|
DebugLog( "BossRoutine::EndSkillCasting-"..sSkillName.." "..sCurSkillTableIndex.." "..i )
|
|||
|
|
|||
|
end -- <20><>ų <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ǹ<EFBFBD> //
|
|||
|
|
|||
|
end -- <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>غ<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ǹ<EFBFBD> //
|
|||
|
|
|||
|
end -- <20><> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> //
|
|||
|
|
|||
|
end -- <20><>ų <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>ߴ°<DFB4> Ȯ<><C8AE><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ǹ<EFBFBD> //
|
|||
|
|
|||
|
end -- <20><> <20><>ų<EFBFBD><C5B3> <20>ѹ<EFBFBD><D1B9><EFBFBD> Ž<><C5BD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> //
|
|||
|
|
|||
|
return ReturnAI["CPP"]
|
|||
|
|
|||
|
end
|