932 lines
24 KiB
Lua
932 lines
24 KiB
Lua
|
--------------------------------------------------------------------------------
|
|||
|
-- Emperor Slime 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
|
|||
|
|
|||
|
-- <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20>ƹ<EFBFBD><C6B9>͵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
if Var["KQLimitTime"] == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if Var["CurSec"] == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20>Ƽ<DEBE> <20><>û<EFBFBD>Ѵ<EFBFBD>.
|
|||
|
local nLimitSec = Var["KQLimitTime"] - Var["CurSec"]
|
|||
|
|
|||
|
cShowKQTimerWithLife_Obj( Handle, nLimitSec )
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
function KingSlimeRoutine( Handle, MapIndex )
|
|||
|
cExecCheck "KingSlimeRoutine"
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local RoutineTimeIndex = ""..Handle
|
|||
|
|
|||
|
-- // 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ
|
|||
|
if Var["RoutineTime"][ RoutineTimeIndex ] == nil
|
|||
|
then
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond()
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if Var["RoutineTime"][ RoutineTimeIndex ] + 0.2 > cCurrentSecond()
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
else
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond()
|
|||
|
end
|
|||
|
-- 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ //
|
|||
|
|
|||
|
|
|||
|
if Var["Enemy"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["LowerFloor"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["LowerFloor"]["FloorNumber"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
local CurFloorNo = Var["LowerFloor"]["FloorNumber"]
|
|||
|
|
|||
|
if Var["LowerFloor"..CurFloorNo ] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectDead( Handle ) == 1
|
|||
|
then
|
|||
|
Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] = Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] - 1
|
|||
|
|
|||
|
if Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] > 0
|
|||
|
then
|
|||
|
cMobShout( Handle, KingSlimeChat["ScriptFileName"], KingSlimeChat["DeathDialogIndex"] )
|
|||
|
else
|
|||
|
cMobSuicide( MapIndex )
|
|||
|
end
|
|||
|
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function EmperorSlimeRoutine( Handle, MapIndex )
|
|||
|
cExecCheck "EmperorSlimeRoutine"
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
local RoutineTimeIndex = ""..Handle
|
|||
|
|
|||
|
-- // 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ
|
|||
|
if Var["RoutineTime"][ RoutineTimeIndex ] == nil
|
|||
|
then
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond()
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if Var["RoutineTime"][ RoutineTimeIndex ] + 0.2 > cCurrentSecond()
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
else
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond()
|
|||
|
end
|
|||
|
-- 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ //
|
|||
|
|
|||
|
|
|||
|
if Var["Enemy"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["TopFloor"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ]["PhaseNumber"] == nil
|
|||
|
then
|
|||
|
Var["Enemy"][ Handle ]["PhaseNumber"] = 1
|
|||
|
end
|
|||
|
|
|||
|
local CurPhaseNumber = Var["Enemy"][ Handle ]["PhaseNumber"]
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>װų<D7B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<CCB9> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
if CurPhaseNumber == 5 or CurPhaseNumber == 3
|
|||
|
then
|
|||
|
if Var["QueenSlimeHandle"] ~= nil
|
|||
|
then
|
|||
|
for i = 1, #Var["QueenSlimeHandle"]
|
|||
|
do
|
|||
|
if cIsObjectDead( Var["QueenSlimeHandle"][ i ] ) == 1 or cIsObjectDead( Handle ) == 1
|
|||
|
then
|
|||
|
if Var["HealEffect"] ~= nil
|
|||
|
then
|
|||
|
if Var["HealEffect"][ i ]["Boss"] ~= nil
|
|||
|
then
|
|||
|
cNPCVanish( Var["HealEffect"][ i ]["Boss"] )
|
|||
|
DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Boss"] )
|
|||
|
end
|
|||
|
|
|||
|
if Var["HealEffect"][ i ]["Queen"] ~= nil
|
|||
|
then
|
|||
|
cNPCVanish( Var["HealEffect"][ i ]["Queen"] )
|
|||
|
DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Queen"] )
|
|||
|
end
|
|||
|
|
|||
|
Var["HealEffect"][ i ] = {}
|
|||
|
else
|
|||
|
ErrorLog( "Var[\"HealEffect\"] ~= nil" )
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- Emperor Slime <20><><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectDead( Handle ) == 1
|
|||
|
then
|
|||
|
cMobDialog( MapIndex, EmperorSlimeChat["SpeakerIndex"], EmperorSlimeChat["ScriptFileName"], EmperorSlimeChat["DeathDialogIndex"] )
|
|||
|
cMobSuicide( MapIndex )
|
|||
|
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ]["PhaseNumber"] = nil
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["TopFloor"]["bBossTurning"] == true
|
|||
|
then
|
|||
|
if Var["TopFloor"]["BossAnimationStopStepSec"] <= Var["CurSec"]
|
|||
|
then
|
|||
|
cAnimate( Handle, "stop" )
|
|||
|
Var["TopFloor"]["bBossTurning"] = false
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ <20><> <20>ൿ
|
|||
|
local CurHP, MaxHP = cObjectHP( Handle )
|
|||
|
local RoutineStepFunc = DummyPhaseFunc
|
|||
|
|
|||
|
if CurHP == MaxHP
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20><><EFBFBD>θ<D7B7> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
if cAggroListSize( Handle ) == 0
|
|||
|
then
|
|||
|
if CurPhaseNumber ~= 1
|
|||
|
then
|
|||
|
Var["Enemy"][ Handle ]["PhaseNumber"] = 1
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = false
|
|||
|
Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"]
|
|||
|
Var["TopFloor"]["QueenRevivalStepSec"] = nil
|
|||
|
|
|||
|
cVanishAll( MapIndex, "Emp_Tornado" )
|
|||
|
cVanishAll( MapIndex, "Emp_Slime2" )
|
|||
|
cVanishAll( MapIndex, "Emp_FireSlime2" )
|
|||
|
cVanishAll( MapIndex, "Emp_IronSlime2" )
|
|||
|
cVanishAll( MapIndex, "Emp_QueenSlime2" )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ üũ
|
|||
|
if CurPhaseNumber >= #BossPhaseNameTable
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><>ȿ <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
local CurBossPhaseName = BossPhaseNameTable[ CurPhaseNumber ]
|
|||
|
local NextBossPhaseName = BossPhaseNameTable[ CurPhaseNumber + 1 ]
|
|||
|
local CurPhaseSkill = EmperorSlimeSkill[ CurBossPhaseName ]
|
|||
|
local NextPhaseSkill = EmperorSlimeSkill[ NextBossPhaseName ]
|
|||
|
local HP_RealRate = ( CurHP * 1000 ) / MaxHP -- 1000<30><30><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if HP_RealRate <= NextPhaseSkill["HP_Rate"]
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["Enemy"][ Handle ]["PhaseNumber"] = CurPhaseNumber + 1
|
|||
|
RoutineStepFunc = PhaseActionFunc
|
|||
|
|
|||
|
|
|||
|
-- <20><>ȯ ȸ<><C8B8> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
Var["TopFloor"]["CurSummonCount"] = 1
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = false
|
|||
|
Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"]
|
|||
|
|
|||
|
|
|||
|
-- <20><>ȯ Ƚ<><C8BD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡 <20><><EFBFBD>ؼ<EFBFBD> <20><>ȯ Ƚ<><C8BD> üũ
|
|||
|
if NextPhaseSkill["SummonCount"] ~= nil
|
|||
|
then
|
|||
|
if NextPhaseSkill["SummonCount"] <= Var["TopFloor"]["CurSummonCount"]
|
|||
|
then
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><>ȯ<EFBFBD><C8AF> <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><>ȿ<EFBFBD><C8BF> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡 <20><><EFBFBD>ؼ<EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if NextPhaseSkill["SummonGapSec"] ~= nil
|
|||
|
then
|
|||
|
Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] + NextPhaseSkill["SummonGapSec"]
|
|||
|
else
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = true
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ȵ<EFBFBD> & <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ұų<D2B0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
else
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBFA1> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["TopFloor"]["bCurPhaseSummonEnd"] == true
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD>۵DZ<DBB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƹ<EFBFBD><C6B9>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
if CurPhaseNumber == 1
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBFA1><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if CurPhaseSkill["SummonGapSec"] == nil
|
|||
|
then
|
|||
|
-- Ȥ<><C8A4> <20><> <20><><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><> <20><>
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = true
|
|||
|
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ Ÿ<>̹<EFBFBD>
|
|||
|
if Var["TopFloor"]["CurPhaseNextSummonStepSec"] <= Var["CurSec"]
|
|||
|
then
|
|||
|
|
|||
|
local bSummonTiming = true
|
|||
|
|
|||
|
-- <20><><EFBFBD>̾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20>ÿ<EFBFBD><C3BF><EFBFBD> HP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><> üũ <20>Ѵ<EFBFBD>.
|
|||
|
if CurPhaseNumber == 4
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǰ<EFBFBD> <20><>ȯ <20>ܰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
if HP_RealRate > CurPhaseSkill["HP_Rate"]
|
|||
|
then
|
|||
|
bSummonTiming = false
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if bSummonTiming == true
|
|||
|
then
|
|||
|
RoutineStepFunc = PhaseActionFunc
|
|||
|
|
|||
|
-- <20><>ȯ ȸ<><C8B8> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["TopFloor"]["CurSummonCount"] = Var["TopFloor"]["CurSummonCount"] + 1
|
|||
|
|
|||
|
-- <20><>ȯ Ƚ<><C8BD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡 <20><><EFBFBD>ؼ<EFBFBD> <20><>ȯ Ƚ<><C8BD> üũ
|
|||
|
if CurPhaseSkill["SummonCount"] ~= nil
|
|||
|
then
|
|||
|
if CurPhaseSkill["SummonCount"] <= Var["TopFloor"]["CurSummonCount"]
|
|||
|
then
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><>ȯ <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] + CurPhaseSkill["SummonGapSec"]
|
|||
|
|
|||
|
else
|
|||
|
-- <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ鼭 <20>ǰ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><> <20>ٷ<EFBFBD> <20><>ȯ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"]
|
|||
|
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
RoutineStepFunc( Handle, MapIndex )
|
|||
|
|
|||
|
return ReturnAI["CPP"]
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function DummyPhaseFunc( )
|
|||
|
cExecCheck "DummyPhaseFunc"
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function PhaseActionFunc( BossHandle, MapIndex )
|
|||
|
cExecCheck "PhaseActionFunc"
|
|||
|
|
|||
|
if BossHandle == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if MapIndex == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local PhaseNumber = Var["Enemy"][ BossHandle ]["PhaseNumber"]
|
|||
|
|
|||
|
if PhaseNumber == 1
|
|||
|
then
|
|||
|
ErrorLog( "PhaseActionFunc::Normal-Phase does not have Phase-Action." )
|
|||
|
return
|
|||
|
elseif PhaseNumber < 1 and PhaseNumber > #BossPhaseNameTable
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̽<EFBFBD>
|
|||
|
ErrorLog( "PhaseActionFunc::Invalid-Phase" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local BossPhase = BossPhaseNameTable[ PhaseNumber ]
|
|||
|
|
|||
|
DebugLog( "Start PhaseActionFunc::"..BossPhase )
|
|||
|
|
|||
|
|
|||
|
if EmperorSlimeChat["SummonMobShout"][ BossPhase ] ~= nil
|
|||
|
then
|
|||
|
if Var["TopFloor"]["CurSummonCount"] == 1
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ÿ<EFBFBD><C3BF><EFBFBD> <20><>ħ
|
|||
|
then
|
|||
|
cMobShout( BossHandle, EmperorSlimeChat["ScriptFileName"], EmperorSlimeChat["SummonMobShout"][ BossPhase ]["Index"] )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local i = 1
|
|||
|
|
|||
|
local SummonMobTableInfo = nil
|
|||
|
|
|||
|
if EmperorSlimeSkill[ BossPhase ] ~= nil
|
|||
|
then
|
|||
|
SummonMobTableInfo = RegenInfo["Mob"]["TopFloor"][ EmperorSlimeSkill[ BossPhase ]["SummonMobsTableIndex"] ]
|
|||
|
|
|||
|
-- <20><>ȯ<EFBFBD>ϸ鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȸ<><C8B8><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD>
|
|||
|
if EmperorSlimeSkill[ BossPhase ]["bBossSpinning"] == true
|
|||
|
then
|
|||
|
cAnimate( BossHandle, "start", EmperorSlimeSkill["SummonEffect"]["EffectSkillIndex"] )
|
|||
|
Var["TopFloor"]["bBossTurning"] = true
|
|||
|
Var["TopFloor"]["BossAnimationStopStepSec"] = Var["CurSec"] + EmperorSlimeSkill["SummonEffect"]["AnimationKeepSec"] + 1 -- + 1 <20><> <20>ణ<EFBFBD><E0B0A3> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
end
|
|||
|
|
|||
|
else
|
|||
|
ErrorLog( "SummonMobInfo is not exist( BossPhase : ".. BossPhase.." )" )
|
|||
|
end
|
|||
|
|
|||
|
if SummonMobTableInfo ~= nil
|
|||
|
then
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD>
|
|||
|
for k = 1, #SummonMobTableInfo
|
|||
|
do
|
|||
|
if SummonMobTableInfo[ k ] ~= nil
|
|||
|
then
|
|||
|
local SummonMobInfo = { Index = SummonMobTableInfo[ k ]["Index"], x = SummonMobTableInfo[ k ]["x"], y = SummonMobTableInfo[ k ]["y"], dir = 0, }
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD> <20>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܸ<EFBFBD><DCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
|||
|
local BossX, BossY = cObjectLocate( BossHandle )
|
|||
|
local OriginX = Var["Enemy"][ BossHandle ]["x"]
|
|||
|
local OriginY = Var["Enemy"][ BossHandle ]["y"]
|
|||
|
local LimitSquare = EmperorSlimeSkill["LimitDistanceFromOrigin"] * EmperorSlimeSkill["LimitDistanceFromOrigin"]
|
|||
|
|
|||
|
-- <20>Ÿ<EFBFBD> <20>ʰ<EFBFBD><CAB0><EFBFBD>
|
|||
|
if cDistanceSquar( BossX, BossY, OriginX, OriginY ) > LimitSquare
|
|||
|
then
|
|||
|
SummonMobInfo["x"] = BossX
|
|||
|
SummonMobInfo["y"] = BossY
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD> <20><>ȯ
|
|||
|
if EmperorSlimeSkill[ BossPhase ]["bSummonAreaCenterTornado"] == true
|
|||
|
then
|
|||
|
local TornadoHandle = cMobRegen_XY( MapIndex, EmperorSlimeSkill["TornadoEffect"]["CenterMobIndex"], SummonMobInfo["x"], SummonMobInfo["y"], 0 )
|
|||
|
|
|||
|
if TornadoHandle ~= nil
|
|||
|
then
|
|||
|
cSetAIScript ( MainLuaScriptPath, TornadoHandle )
|
|||
|
cAIScriptFunc( TornadoHandle, "Entrance", "SummonMobRoutine" )
|
|||
|
|
|||
|
local TornadoInfo = { Index = EmperorSlimeSkill["TornadoEffect"]["CenterMobIndex"], x = SummonMobInfo["x"], y = SummonMobInfo["y"], dir = 0, }
|
|||
|
|
|||
|
Var["Enemy"][ TornadoHandle ] = TornadoInfo
|
|||
|
if EmperorSlimeSkill["TornadoEffect"]["MobLifeSec"] ~= nil
|
|||
|
then
|
|||
|
Var["Enemy"][ TornadoHandle ]["DieStepSec"] = Var["CurSec"] + EmperorSlimeSkill["TornadoEffect"]["MobLifeSec"]
|
|||
|
end
|
|||
|
else
|
|||
|
ErrorLog( "Summon Tornado Fail"..TornadoInfo["Index"] )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ŭ <20><> <20><>ȯ
|
|||
|
if Var["KQ_Difficulty"] == nil
|
|||
|
then
|
|||
|
Var["KQ_Difficulty"] = 3
|
|||
|
end
|
|||
|
|
|||
|
for nSummonCount = 1, SummonMobTableInfo[ k ]["count"..Var["KQ_Difficulty"] ]
|
|||
|
do
|
|||
|
local SummonMobHandle = nil
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ
|
|||
|
if PhaseNumber == 5
|
|||
|
then
|
|||
|
SummonMobInfo["x"] = BossX
|
|||
|
SummonMobInfo["y"] = BossY
|
|||
|
end
|
|||
|
|
|||
|
SummonMobHandle = cMobRegen_Circle( MapIndex, SummonMobInfo["Index"], SummonMobInfo["x"], SummonMobInfo["y"], SummonMobInfo["radius"] )
|
|||
|
|
|||
|
if SummonMobHandle ~= nil
|
|||
|
then
|
|||
|
cSetAIScript ( MainLuaScriptPath, SummonMobHandle )
|
|||
|
cAIScriptFunc( SummonMobHandle, "Entrance", "SummonMobRoutine" )
|
|||
|
|
|||
|
Var["Enemy"][ SummonMobHandle ] = SummonMobInfo
|
|||
|
if EmperorSlimeSkill[ BossPhase ]["MobLifeSec"] ~= nil
|
|||
|
then
|
|||
|
Var["Enemy"][ SummonMobHandle ]["DieStepSec"] = Var["CurSec"] + EmperorSlimeSkill[ BossPhase ]["MobLifeSec"]
|
|||
|
end
|
|||
|
|
|||
|
if PhaseNumber == 5
|
|||
|
then
|
|||
|
if Var["QueenSlimeHandle"] == nil
|
|||
|
then
|
|||
|
Var["QueenSlimeHandle"] = {}
|
|||
|
end
|
|||
|
|
|||
|
Var["QueenSlimeHandle"][ nSummonCount ] = SummonMobHandle
|
|||
|
end
|
|||
|
else
|
|||
|
ErrorLog( "Summon Mob Fail : "..SummonMobInfo["Index"] )
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
DebugLog( "End PhaseActionFunc::"..BossPhase )
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
function SummonMobRoutine( Handle, MapIndex )
|
|||
|
cExecCheck "SummonMobRoutine"
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
if Var == nil then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- // 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ
|
|||
|
local RoutineTimeIndex = ""..Handle
|
|||
|
|
|||
|
if Var["RoutineTime"][ RoutineTimeIndex ] == nil
|
|||
|
then
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond()
|
|||
|
end
|
|||
|
|
|||
|
if Var["RoutineTime"][ RoutineTimeIndex ] + 0.2 > cCurrentSecond()
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
else
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond()
|
|||
|
end
|
|||
|
-- 0.2<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><>ƾ //
|
|||
|
|
|||
|
|
|||
|
if Var["Enemy"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if Var["TopFloor"] == nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
cNPCVanish( Handle )
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><>ȯ<EFBFBD><C8AF> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectDead( Handle ) == 1
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectDead( Var["Enemy"]["BossHandle"] ) == 1
|
|||
|
then
|
|||
|
cMobSuicide( MapIndex, Handle )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local sSkillIndex = ""
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ]["Index"] == "Emp_Tornado"
|
|||
|
then
|
|||
|
sSkillIndex = "TornadoEffect"
|
|||
|
|
|||
|
elseif Var["Enemy"][ Handle ]["Index"] == "Emp_Slime2"
|
|||
|
then
|
|||
|
sSkillIndex = "FirstSummon"
|
|||
|
elseif Var["Enemy"][ Handle ]["Index"] == "Emp_FireSlime2"
|
|||
|
then
|
|||
|
sSkillIndex = "SecondSummon"
|
|||
|
elseif Var["Enemy"][ Handle ]["Index"] == "Emp_IronSlime2"
|
|||
|
then
|
|||
|
sSkillIndex = "ThirdSummon"
|
|||
|
elseif Var["Enemy"][ Handle ]["Index"] == "Emp_QueenSlime2"
|
|||
|
then
|
|||
|
sSkillIndex = "LastSummon"
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
local CurHP, MaxHP = cObjectHP( Var["Enemy"]["BossHandle"] )
|
|||
|
|
|||
|
local HP_RealRate = 1000
|
|||
|
|
|||
|
if MaxHP ~= 0
|
|||
|
then
|
|||
|
HP_RealRate = ( CurHP * 1000 ) / MaxHP -- 1000<30><30><EFBFBD><EFBFBD>
|
|||
|
end
|
|||
|
|
|||
|
if HP_RealRate >= EmperorSlimeSkill[ sSkillIndex ]["MobVanishCondBossHP_Rate"]
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̻<EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>Ҹ<EFBFBD> ( <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><EFBFBD><D7BE><EFBFBD> <20><> <20>ϴ<EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><><EFBFBD>ش<EFBFBD>. )
|
|||
|
cVanishAll( MapIndex, Var["Enemy"][ Handle ]["Index"] )
|
|||
|
|
|||
|
for i = 1, #Var["QueenSlimeHandle"]
|
|||
|
do
|
|||
|
local VanishHandle = Var["QueenSlimeHandle"][ i ]
|
|||
|
DebugLog( "VanishedByHP"..EmperorSlimeSkill[ sSkillIndex ]["MobVanishCondBossHP_Rate"].."More : "..sSkillIndex..", Handle("..VanishHandle..")" )
|
|||
|
cAIScriptSet( VanishHandle )
|
|||
|
Var["Enemy"][ VanishHandle ] = nil
|
|||
|
Var["RoutineTime"][ ""..VanishHandle ] = nil
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϻ<EFBFBD> <20>ʱ<EFBFBD>ȭ : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̾<CCBE><EEBDBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD>ķ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD> ( <20><><EFBFBD><EFBFBD> HP<48><50> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> )
|
|||
|
Var["Enemy"][ Var["Enemy"]["BossHandle"] ]["PhaseNumber"] = 3
|
|||
|
Var["TopFloor"]["bCurPhaseSummonEnd"] = true
|
|||
|
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
-- <20>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 30<33><30> <20>ȿ<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> <20><EFBFBD><D7BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
local QueenDeadCount = 0
|
|||
|
local CurQueenNo = 0
|
|||
|
local DeadQueenNo = 0
|
|||
|
|
|||
|
for i = 1, #Var["QueenSlimeHandle"]
|
|||
|
do
|
|||
|
if cIsObjectDead( Var["QueenSlimeHandle"][ i ] ) == 1
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><C4AB><EFBFBD><EFBFBD> <20><> <20><>ȣ <20><><EFBFBD><EFBFBD>
|
|||
|
QueenDeadCount = QueenDeadCount + 1
|
|||
|
DeadQueenNo = i
|
|||
|
else
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><>ƾ<EFBFBD><C6BE> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ <20><><EFBFBD><EFBFBD>
|
|||
|
if Handle == Var["QueenSlimeHandle"][ i ]
|
|||
|
then
|
|||
|
CurQueenNo = i
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD>üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20>κ<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȱ<EFBFBD><C8B0>ȭ <20>ʿ<EFBFBD>)
|
|||
|
--DebugLog( "AtThisRoutine, QueenDeathCount("..QueenDeadCount.."), CurQueenNo("..CurQueenNo.."), DeadQueenNo("..DeadQueenNo..")" )
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><>ƾ<EFBFBD><C6BE> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰų<CAB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϸ<C6B4> <20>ڻ<EFBFBD>ó<EFBFBD><C3B3>
|
|||
|
if CurQueenNo == 0
|
|||
|
then
|
|||
|
ErrorLog( "This QueenSlime was aleady died." )
|
|||
|
cMobSuicide( Handle )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
if QueenDeadCount == 1
|
|||
|
then
|
|||
|
if Var["TopFloor"]["QueenRevivalStepSec"] ~= nil
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ٸ<EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ä<EFBFBD><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȱ
|
|||
|
if Var["TopFloor"]["QueenRevivalStepSec"] <= Var["CurSec"]
|
|||
|
then
|
|||
|
DebugLog( "AtThisRoutine, YesQueenRevivalTiming" )
|
|||
|
local BossX, BossY = cObjectLocate( Var["Enemy"]["BossHandle"] )
|
|||
|
local QueenSlimeRegenInfo = RegenInfo["Mob"]["TopFloor"]["TwinQueenSlimes"][ 1 ]
|
|||
|
local QueenSlimeHandle = cMobRegen_Circle( MapIndex, QueenSlimeRegenInfo["Index"], BossX, BossY, QueenSlimeRegenInfo["radius"] )
|
|||
|
if QueenSlimeHandle ~= nil
|
|||
|
then
|
|||
|
DebugLog( "Revival : "..sSkillIndex..", Handle("..QueenSlimeHandle.."), No("..DeadQueenNo..")" )
|
|||
|
-- cNoticeString( MapIndex, "Revival : "..sSkillIndex..", Handle("..QueenSlimeHandle.."), No("..DeadQueenNo..")" )
|
|||
|
Var["QueenSlimeHandle"][ DeadQueenNo ] = QueenSlimeHandle
|
|||
|
|
|||
|
cSetAIScript ( MainLuaScriptPath, QueenSlimeHandle )
|
|||
|
cAIScriptFunc( QueenSlimeHandle, "Entrance", "SummonMobRoutine" )
|
|||
|
|
|||
|
Var["Enemy"][ QueenSlimeHandle ] = { Index = Var["Enemy"][ Handle ]["Index"], x = Var["Enemy"][ Handle ]["x"], y = Var["Enemy"][ Handle ]["y"], dir = 0, }
|
|||
|
else
|
|||
|
ErrorLog( "Summon Queen Fail"..Var["Enemy"][ Handle ]["Index"] )
|
|||
|
end
|
|||
|
|
|||
|
Var["TopFloor"]["QueenRevivalStepSec"] = nil
|
|||
|
QueenDeadCount = 0
|
|||
|
else
|
|||
|
-- <20><> <20><>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
-- DebugLog( "Queen Revival Remain Sec : "..( Var["TopFloor"]["QueenRevivalStepSec"] - Var["CurSec"] ) )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if QueenDeadCount == 1 and Var["TopFloor"]["QueenRevivalStepSec"] == nil
|
|||
|
then
|
|||
|
local RevivalInfo = QueenSlimeInfo["RevivalInfo"]
|
|||
|
if cGetAbstate( Handle, RevivalInfo["AbstateIndex"] ) == nil
|
|||
|
then
|
|||
|
DebugLog( "AtThisRoutine, NoQueenAbstate" )
|
|||
|
if cSetAbstate( Handle, RevivalInfo["AbstateIndex"], RevivalInfo["AbstateStrength"], RevivalInfo["AbstateKeepTime"] ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "cSetAbstate To Queen : Failed" )
|
|||
|
-- cNoticeString( MapIndex, "Queen("..Handle..") Abstate Fail" )
|
|||
|
else
|
|||
|
-- cNoticeString( MapIndex, "Queen("..Handle..") Abstate Success" )
|
|||
|
end
|
|||
|
Var["TopFloor"]["QueenRevivalStepSec"] = Var["CurSec"] + RevivalInfo["RevivalSec"]
|
|||
|
else
|
|||
|
-- DebugLog( "AtThisRoutine, YesQueenAbstate" )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
else
|
|||
|
Var["TopFloor"]["QueenRevivalStepSec"] = nil
|
|||
|
end
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
|||
|
if Var["Enemy"][ Handle ]["HealStepSec"] == nil
|
|||
|
then
|
|||
|
Var["Enemy"][ Handle ]["HealStepSec"] = Var["CurSec"]
|
|||
|
end
|
|||
|
|
|||
|
if Var["Enemy"][ Handle ]["HealStepSec"] <= Var["CurSec"]
|
|||
|
then
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD>Ʈ <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
if Var["HealEffect"] == nil
|
|||
|
then
|
|||
|
Var["HealEffect"] = {}
|
|||
|
|
|||
|
for i = 1, #Var["QueenSlimeHandle"]
|
|||
|
do
|
|||
|
Var["HealEffect"][ i ] = {}
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ϰ<EFBFBD> <20>ѹ<EFBFBD> <20><> ó<><C3B3><EFBFBD>ϱ<EFBFBD>
|
|||
|
if Var["QueenSlimeHandle"] ~= nil
|
|||
|
then
|
|||
|
for i = 1, #Var["QueenSlimeHandle"]
|
|||
|
do
|
|||
|
if cIsObjectDead( Var["QueenSlimeHandle"][ i ] ) == 1
|
|||
|
then
|
|||
|
if Var["HealEffect"] ~= nil
|
|||
|
then
|
|||
|
|
|||
|
if Var["HealEffect"][ i ]["Boss"] ~= nil
|
|||
|
then
|
|||
|
cNPCVanish( Var["HealEffect"][ i ]["Boss"] )
|
|||
|
DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Boss"] )
|
|||
|
end
|
|||
|
|
|||
|
if Var["HealEffect"][ i ]["Queen"] ~= nil
|
|||
|
then
|
|||
|
cNPCVanish( Var["HealEffect"][ i ]["Queen"] )
|
|||
|
DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Queen"] )
|
|||
|
end
|
|||
|
|
|||
|
Var["HealEffect"][ i ] = {}
|
|||
|
|
|||
|
else
|
|||
|
ErrorLog( "Var[\"HealEffect\"] ~= nil" )
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if Var["KQ_Difficulty"] == nil
|
|||
|
then
|
|||
|
Var["KQ_Difficulty"] = 3
|
|||
|
end
|
|||
|
|
|||
|
cHeal( Var["Enemy"]["BossHandle"], QueenSlimeInfo["HealInfo"]["HealAmount"..Var["KQ_Difficulty"] ] )
|
|||
|
|
|||
|
local sHealEffectIndex = QueenSlimeInfo["HealInfo"]["HealEffectIndex"]
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["HealEffect"][ CurQueenNo ]["Queen"] == nil
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ to <20><>
|
|||
|
local QueenHealEffectHandle = cEffectRegen_Object( MapIndex, sHealEffectIndex, Handle, 3600000, 1, 1000 )
|
|||
|
|
|||
|
if QueenHealEffectHandle ~= nil
|
|||
|
then
|
|||
|
Var["HealEffect"][ CurQueenNo ]["Queen"] = QueenHealEffectHandle
|
|||
|
else
|
|||
|
ErrorLog( "QueenHealEffectHandle is nil" )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["HealEffect"][ CurQueenNo ]["Boss"] == nil
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ to <20><><EFBFBD>۷<EFBFBD>
|
|||
|
local BossHealEffectHandle = cEffectRegen_Object( MapIndex, sHealEffectIndex, Var["Enemy"]["BossHandle"], 3600000, 1, 1000 )
|
|||
|
|
|||
|
if BossHealEffectHandle ~= nil
|
|||
|
then
|
|||
|
Var["HealEffect"][ CurQueenNo ]["Boss"] = BossHealEffectHandle
|
|||
|
else
|
|||
|
ErrorLog( "BossHealEffectHandle is nil" )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["Enemy"][ Handle ]["HealStepSec"] = Var["CurSec"] + QueenSlimeInfo["HealInfo"]["HealGapSec"]
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
else
|
|||
|
-- <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ְ<EFBFBD> AI<41><49> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
ErrorLog( "MobIndex is invalid : "..Var["Enemy"][ Handle ]["Index"] )
|
|||
|
|
|||
|
cNPCVanish( Handle )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ<C3BC>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> <20>ڻ<EFBFBD>ó<EFBFBD><C3B3>
|
|||
|
if EmperorSlimeSkill[ sSkillIndex ]["MobLifeSec"] ~= nil
|
|||
|
then
|
|||
|
if Var["Enemy"][ Handle ]["DieStepSec"] <= Var["CurSec"]
|
|||
|
then
|
|||
|
if sSkillIndex == "TornadoEffect"
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
|||
|
-- DebugLog( "Vanished : "..sSkillIndex..", Handle("..Handle..")" )
|
|||
|
cNPCVanish( Handle )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
else
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> <20>ڻ<EFBFBD><DABB>Ѵ<EFBFBD>.
|
|||
|
-- DebugLog( "Suicided : "..sSkillIndex..", Handle("..Handle..")" )
|
|||
|
cMobSuicide( MapIndex, Handle )
|
|||
|
cAIScriptSet( Handle )
|
|||
|
Var["Enemy"][ Handle ] = nil
|
|||
|
Var["RoutineTime"][ RoutineTimeIndex ] = nil
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return ReturnAI["CPP"]
|
|||
|
|
|||
|
end
|
|||
|
|