You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
SigFiesta/LuaScript/ID/WarBL/WarBLEventMobRoutine.lua

1366 lines
24 KiB

require( "ID/WarBL/WarBLData" )
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- --
-- -- Room 1 -- --
-- -- -- --
-- -- ( 포라스 루틴 / 마계병사 ) -- --
-- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
function ROOM_ONE_FORAS_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_ONE_FORAS_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
-- 1번방 상태인지 체크
if InstanceField[MapIndex]["Room"]["RoomNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if InstanceField[MapIndex]["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local Event_Foras_List = { }
local Event_Foras = { }
Event_Foras_List = InstanceField[MapIndex]["Room"]["Data"]["ForasList"]
if Event_Foras_List == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Event_Foras = InstanceField[MapIndex]["Room"]["Data"]["ForasList"]["List"][Handle]
if Event_Foras == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Event_Foras[Handle] = nil
return ReturnAI["END"]
end
-- 주변 캐릭터 검색
if Event_Foras_List["FL_State"] == FL_SEARCH then
if Event_Foras["CheckTime"] > InstanceField[MapIndex]["CurrentTime"] then
return ReturnAI["CPP"]
end
Event_Foras["CheckTime"] = Event_Foras["CheckTime"] + 1
if Event_Foras["ChatCheckTime"] < InstanceField[MapIndex]["CurrentTime"] then
local RandInt
Event_Foras["ChatCheckTime"] = Event_Foras["ChatCheckTime"] + Event_Foras["MobChatData"]["DELAY"]
RandInt = cRandomInt( 1, 3 )
cMobChat( Handle, "WarBL", Event_Foras["MobChatData"]["INDEX"][RandInt] )
end
local FindPlayer
FindPlayer = cObjectFind( Event_Foras["Handle"], Event_Foras["SearchRange"], ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
-- 포라스 리스트에 검색 성공 알림 ( 이벤트 루틴에서 사용 )
Event_Foras_List["FL_State"] = FL_SEARCH_SUCCESS
Event_Foras_List["FindPlayer"] = FindPlayer
end
-- 포라스 위 느낌표 출력 / 방향 전화
elseif Event_Foras_List["FL_State"] == FL_SURPRISE then
if Event_Foras["IsSurprise"] == 0 then
local CurX, CurY
CurX, CurY = cObjectLocate( Event_Foras_List["FindPlayer"] )
cRunTo( Handle, CurX, CurY )
cMobChat ( Handle, "WarBL", Event_Foras["MobChatData"]["INDEX"][4] )
cSetAbstate ( Handle, STA_STUN, 1, 1000, Event_Foras_List["FindPlayer"] )
cSetAbstate ( Handle, STA_SURPRISE, 1, 20000000 )
Event_Foras["IsSurprise"] = 1
end
-- 목표지점을 패스를 따라 이동
elseif Event_Foras_List["FL_State"] == FL_ESCAPE then
local CurPos = {}
local GoalPos = {}
CurPos["X"], CurPos["Y"] = cObjectLocate( Event_Foras["Handle"] )
GoalPos = Event_Foras["Path"][Event_Foras["PathNumber"]]
if cDistanceSquar( CurPos["X"], CurPos["Y"], GoalPos["X"], GoalPos["Y"] ) < ( MOVE_INTERVER * MOVE_INTERVER ) then
Event_Foras["PathNumber"] = Event_Foras["PathNumber"] + 1
if Event_Foras["PathNumber"] > #Event_Foras["Path"] then
Event_Foras_List["FL_State"] = FL_REMOVE
return
end
GoalPos = Event_Foras["Path"][Event_Foras["PathNumber"]]
cRunTo( Event_Foras["Handle"], GoalPos["X"], GoalPos["Y"] )
end
elseif Event_Foras_List["FL_State"] == FL_REMOVE then
cAIScriptSet( Event_Foras["Handle"] )
cNPCVanish( Event_Foras["Handle"] )
Event_Foras = nil
end
end
function ROOM_ONE_DAVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_ONE_DAVILDOM_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
-- 1번방 상태인지 체크
if InstanceField[MapIndex]["Room"]["RoomNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if InstanceField[MapIndex]["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local Event_Davildom_List = { }
local Davildom = { }
Event_Davildom_List = InstanceField[MapIndex]["Room"]["Data"]["Davildom"]["List"]
Davildom = Event_Davildom_List[Handle]
if Event_Davildom_List == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Event_Davildom_List[Handle] = nil
return ReturnAI["END"]
end
if Davildom["CheckTime"] > InstanceField[MapIndex]["CurrentTime"] then
return ReturnAI["CPP"]
end
Davildom["CheckTime"] = Davildom["CheckTime"] + 1
if Davildom["D_State"] == D_Normal then
local FindPlayer
FindPlayer = cObjectFind( Handle, InstanceField[MapIndex]["Room"]["Data"]["Davildom"]["SearchRange"], ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
cSetAbstate ( Handle, STA_IMMORTAL, 1, 1, FindPlayer )
cAggroSet ( Handle, FindPlayer )
Davildom["D_State"] = D_Aggro
end
elseif Davildom["D_State"] == D_Aggro then
cResetAbstate ( Handle, STA_IMMORTAL )
Davildom["D_State"] = D_Aggro_SUCC
return ReturnAI["CPP"]
elseif Davildom["D_State"] == D_Aggro_SUCC then
return ReturnAI["CPP"]
end
return ReturnAI["CPP"]
end
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- --
-- -- Room 2 -- --
-- -- -- --
-- -- ( 시트리 ) -- --
-- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
function ROOM_TWO_CITRIE_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_TWO_CITRIE_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 2 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["Citrie"] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- --
-- -- Room 3 -- --
-- -- -- --
-- -- ( 포라스 / 마계병사 루틴 ) -- --
-- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
function ROOM_THREE_FORAS_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_THREE_FORAS_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
local GroupNumber
local ForasList
local EventForas
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 3 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
GroupNumber = RoomEvent["Room"]["Data"]["ForasList"][Handle]
if GroupNumber == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
ForasList = RoomEvent["Room"]["Data"]["ForasGroupList"][GroupNumber]
if ForasList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
EventForas = ForasList["List"][Handle]
if EventForas == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["ForasList"][Handle] = nil
RoomEvent["Room"]["Data"]["ForasGroupList"][GroupNumber]["List"][Handle] = nil
return ReturnAI["END"]
end
if EventForas["CheckTime"] > RoomEvent["CurrentTime"] then
return ReturnAI["END"]
end
EventForas["CheckTime"] = RoomEvent["CurrentTime"] + 1
if ForasList["FG_State"] == FG_ESCAPE then
local CurPos = {}
local GoalPos = {}
CurPos["X"], CurPos["Y"] = cObjectLocate( Handle )
GoalPos = EventForas["Path"][EventForas["PathNumber"]]
if cDistanceSquar( CurPos["X"], CurPos["Y"], GoalPos["X"], GoalPos["Y"] ) < ( MOVE_INTERVER * MOVE_INTERVER ) then
EventForas["PathNumber"] = EventForas["PathNumber"] + 1
if EventForas["PathNumber"] > #EventForas["Path"] then
ForasList["FG_State"] = FG_REMOVE
return
end
GoalPos = EventForas["Path"][EventForas["PathNumber"]]
cRunTo( Handle, GoalPos["X"], GoalPos["Y"] )
end
elseif ForasList["FG_State"] == FG_REMOVE then
cAIScriptSet( Handle )
cNPCVanish( Handle )
RoomEvent["Room"]["Data"]["ForasList"][Handle] = nil
RoomEvent["Room"]["Data"]["ForasGroupList"][GroupNumber]["List"][Handle] = nil
end
return ReturnAI["END"]
end
function ROOM_THREE_DAVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_THREE_DAVILDOM_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
local GroupNumber
local DavildomList
local EventDavildom
local DavildomState
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 3 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
GroupNumber = RoomEvent["Room"]["Data"]["DavildomList"][Handle]
if GroupNumber == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
DavildomList = RoomEvent["Room"]["Data"]["DavildomGroupList"][GroupNumber]["List"]
if DavildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
EventDavildom = DavildomList[Handle]
if EventDavildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["DavildomList"][Handle] = nil
DavildomList[Handle] = nil
return ReturnAI["END"]
end
DavildomState = RoomEvent["Room"]["Data"]["DavildomGroupList"][GroupNumber]["DG_State"]
if DavildomState == DG_NORMAL then
if EventDavildom["CheckTime"] > RoomEvent["CurrentTime"] then
return ReturnAI["END"]
end
EventDavildom["CheckTime"] = RoomEvent["CurrentTime"] + 1
local FindPlayer
FindPlayer = cObjectFind( Handle, 400, ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
RoomEvent["Room"]["Data"]["DavildomGroupList"][GroupNumber]["DG_State"] = DG_AGGRO
end
elseif DavildomState == DG_AGGRO_SUCC then
if EventDavildom["D_State"] ~= D_NORMAL then
return ReturnAI["CPP"]
end
local CurPos = { }
CurPos["X"], CurPos["Y"] = cObjectLocate( Handle )
local PlayerList
local PlayerAggroList = { }
local Count = 1
PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) }
for i = 1, #PlayerList do
local CurPlayerPos = { }
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
if cDistanceSquar( CurPos["X"], CurPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( EventDavildom["SearchRange"] * EventDavildom["SearchRange"] ) then
PlayerAggroList[Count] = PlayerList[i]
Count = Count + 1
end
end
local PlayerHandle
PlayerHandle = cRandomInt(1, #PlayerAggroList)
cAggroSet( Handle, PlayerAggroList[PlayerHandle], EventDavildom["AggroPoint"])
EventDavildom["D_State"] = D_AGGRO
end
return ReturnAI["CPP"]
end
function ROOM_THREE_REGEN_DAVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_THREE_REGEN_DAVILDOM_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 3 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"]["RegenDavildomList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local Davildom = RoomEvent["Room"]["Data"]["RegenDavildomList"][Handle]
if Davildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["RegenDavildomList"][Handle] = nil
return ReturnAI["END"]
end
if Davildom["D_State"] == D_AGGRO then
if Davildom["CheckTime"] > RoomEvent["CurrentTime"] then
return ReturnAI["END"]
end
Davildom["CheckTime"] = Davildom["CheckTime"] + 1
if Davildom["AggroPlayer"] == nil then
Davildom["D_State"] = D_Aggro_SUCC
elseif Davildom["AggroPlayer"] ~= nil then
local PlayerPos = { }
local DavildomPos = { }
PlayerPos["X"], PlayerPos["Y"] = cObjectLocate( Davildom["AggroPlayer"] )
DavildomPos["X"], DavildomPos["Y"] = cObjectLocate( Handle )
cRunTo( Handle, PlayerPos["X"], PlayerPos["Y"] )
if cDistanceSquar( DavildomPos["X"], DavildomPos["Y"], PlayerPos["X"], PlayerPos["Y"] ) < ( Davildom["AggroDistance"] * Davildom["AggroDistance"] ) then
cAggroSet( Handle, Davildom["AggroPlayer"], Davildom["AGGRO_POINT"] )
Davildom["D_State"] = D_Aggro_SUCC
Davildom["CheckTime"] = RoomEvent["CurrentTime"] + 10
end
end
elseif Davildom["D_State"] == D_Aggro_SUCC then
end
return ReturnAI["CPP"]
end
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- --
-- -- Room 4 -- --
-- -- -- --
-- -- ( 포라스 족장 / 마계병사 루틴 ) -- --
-- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
function ROOM_FOUR_FORAS_CHIEF_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_FOUR_FORAS_CHIEF_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local ForasChief
local DavildomList
ForasChief = RoomEvent["Room"]["Data"]["ForasChief"]
if ForasChief == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
DavildomList = RoomEvent["Room"]["Data"]["DavildomList"]
if DavildomList == nil then
ForasChief["FC_State"] = FC_NORMAL
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["ForasChief"] = nil
return ReturnAI["END"]
end
if ForasChief["CheckTime"] > RoomEvent["CurrentTime"] then
return
end
ForasChief["CheckTime"] = RoomEvent["CurrentTime"] + 1
if ForasChief["FC_State"] == FC_DAMAGE then
for index, value in pairs(DavildomList) do
return
end
ForasChief["FC_State"] = FC_NORMAL
return ReturnAI["END"]
elseif ForasChief["FC_State"] == FC_NORMAL then
cAnimate( Handle, "stop" )
ForasChief["FC_State"] = FC_IDLE
elseif ForasChief["FC_State"] == FC_MOVE then
cRunTo( ForasChief["Handle"], ForasChief["EndPosition"]["X"], ForasChief["EndPosition"]["Y"] )
ForasChief["FC_State"] = FC_REMOVE
elseif ForasChief["FC_State"] == FC_REMOVE then
local CurPos = {}
local GoalPos = {}
CurPos["X"], CurPos["Y"] = cObjectLocate( Handle )
GoalPos = ForasChief["EndPosition"]
if cDistanceSquar( CurPos["X"], CurPos["Y"], GoalPos["X"], GoalPos["Y"] ) < ( MOVE_INTERVER * MOVE_INTERVER ) then
cAIScriptSet( Handle )
cNPCVanish( Handle )
RoomEvent["Room"]["Data"]["ForasChief"] = nil
end
elseif ForasChief["FC_State"] == FC_FOLLOW then
if ForasChief["MasterPlayer"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
end
cFollow( Handle, ForasChief["MasterPlayer"], ForasChief["FollowData"]["RANGE"], 1000 )
if ForasChief["HealCheckTime"] < RoomEvent["CurrentTime"] then
local CurHP, MaxHP = cObjectHP( ForasChief["MasterPlayer"] )
local Percent
local HealAmount
Percent = CurHP / MaxHP * 100
HealAmount = MaxHP * ( ForasChief["FollowData"]["HEALAMOUNT"] / 100 )
if Percent < ForasChief["FollowData"]["MASTERHP"] then
cHeal ( ForasChief["MasterPlayer"], HealAmount )
cAnimate ( Handle, "start", ForasChief["FollowData"]["ANIMATION"] )
ForasChief["HealCheckTime"] = RoomEvent["CurrentTime"] + ForasChief["FollowData"]["COOLTIME"]
end
end
end
return ReturnAI["CPP"]
end
function ROOM_FOUR_DEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_FOUR_DEVILDOM_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
local Davildom
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 4 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"]["DavildomList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Davildom = RoomEvent["Room"]["Data"]["DavildomList"][Handle]
if Davildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["DavildomList"][Handle] = nil
return ReturnAI["END"]
end
if Davildom["D_State"] == D_AnimateStart then
if Davildom["AnimateStartTime"] > RoomEvent["CurrentTime"] then
return ReturnAI["END"]
end
cAnimate( Handle, "start", EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["EVENT_DAVILDOM"]["ANIMATION"] )
Davildom["D_State"] = D_NORMAL
elseif Davildom["D_State"] == D_NORMAL then
if Davildom["CheckTime"] > RoomEvent["CurrentTime"] then
return ReturnAI["END"]
end
Davildom["CheckTime"] = RoomEvent["CurrentTime"] + 1
local FindPlayer
FindPlayer = cObjectFind( Handle, 500, ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
RoomEvent["Room"]["Data"]["DavildomList"][Handle]["D_State"] = D_AGGRO
cAnimate ( Handle, "stop" )
cAggroSet ( Handle, FindPlayer, 50 )
end
elseif Davildom["D_State"] == D_AGGRO then
return ReturnAI["CPP"]
end
return ReturnAI["CPP"]
end
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- --
-- -- Room 5 -- --
-- -- -- --
-- -- ( 시트리 루틴 ) -- --
-- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
function ROOM_FIVE_SCITRIE_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_FIVE_SCITRIE_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 5 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["Citrie"] = nil
return ReturnAI["END"]
end
local Citrie
local HPRate
local HP
local MAXHP
local Davildom = { }
local DavildomList = { }
local CurX, CurY
local Davildom = { }
local DavildomList = { }
Citrie = RoomEvent["Room"]["Data"]["Citrie"]
HP, MAXHP = cObjectHP( Citrie["Handle"] )
HPRate = HP / MAXHP * 100
CurX, CurY = cObjectLocate( Citrie["Handle"] )
if Citrie["C_State"] == C_HP_90_UNDER then
if HPRate < Citrie["AI"][Citrie["C_State"]]["HP"] then
for i = 1, Citrie["AI"][Citrie["C_State"]]["REGEN_NUM"] do
Davildom["Handle"] = cMobRegen_Circle( RoomEvent["MapIndex"], Citrie["SUMMON"]["MOB_INDEX"],
CurX, CurY,
Citrie["SUMMON"]["RADIUS"] )
if Davildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
cAIScriptFunc ( Davildom["Handle"], "Entrance", "ROOM_FIVE_DAVILDOM_ROUTINE" )
DavildomList[Davildom["Handle"]] = Davildom
end
end
RoomEvent["Room"]["Data"]["RegenDavildom"][C_HP_90_UNDER] = DavildomList
Citrie["C_State"] = C_HP_60_UNDER
end
elseif Citrie["C_State"] == C_HP_60_UNDER then
if HPRate < Citrie["AI"][Citrie["C_State"]]["HP"] then
for i = 1, Citrie["AI"][Citrie["C_State"]]["REGEN_NUM"] do
Davildom["Handle"] = cMobRegen_Circle( RoomEvent["MapIndex"], Citrie["SUMMON"]["MOB_INDEX"],
CurX, CurY,
Citrie["SUMMON"]["RADIUS"] )
if Davildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
cAIScriptFunc ( Davildom["Handle"], "Entrance", "ROOM_FIVE_DAVILDOM_ROUTINE" )
DavildomList[Davildom["Handle"]] = Davildom
end
end
RoomEvent["Room"]["Data"]["RegenDavildom"][C_HP_60_UNDER] = DavildomList
Citrie["C_State"] = C_HP_30_UNDER
end
elseif Citrie["C_State"] == C_HP_30_UNDER then
if HPRate < Citrie["AI"][Citrie["C_State"]]["HP"] then
for i = 1, Citrie["AI"][Citrie["C_State"]]["REGEN_NUM"] do
Davildom["Handle"] = cMobRegen_Circle( RoomEvent["MapIndex"], Citrie["SUMMON"]["MOB_INDEX"],
CurX, CurY,
Citrie["SUMMON"]["RADIUS"] )
if Davildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
cAIScriptFunc ( Davildom["Handle"], "Entrance", "ROOM_FIVE_DAVILDOM_ROUTINE" )
DavildomList[Davildom["Handle"]] = Davildom
end
end
RoomEvent["Room"]["Data"]["RegenDavildom"][C_HP_30_UNDER] = DavildomList
Citrie["C_State"] = C_END
end
end
return ReturnAI["CPP"]
end
function ROOM_FIVE_DAVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_FIVE_DAVILDOM_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["RoomNumber"] ~= 5 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if RoomEvent["Room"]["Data"]["RegenDavildom"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function ROOM_FIVE_FORASCHEIF_ROUTINE( Handle, MapIndex )
cExecCheck( "ROOM_FIVE_FORASCHEIF_ROUTINE" )
if InstanceField[MapIndex] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RoomEvent
RoomEvent = InstanceField[MapIndex]
if RoomEvent["Room"]["Data"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local ForasChief
ForasChief = RoomEvent["Room"]["Data"]["ForasChief"]
if ForasChief == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
RoomEvent["Room"]["Data"]["ForasChief"] = nil
return ReturnAI["END"]
end
if ForasChief["FC_State"] == FC_MOVE then
local ForasChiefData = { }
ForasChiefData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["FORAS_CHIEF"]
cRunTo( Handle, ForasChiefData["END_POSITION"]["X"], ForasChiefData["END_POSITION"]["Y"] )
ForasChief["FC_State"] = FC_NORMAL
elseif ForasChief["FC_State"] == FC_NORMAL then
return ReturnAI["END"]
end
return ReturnAI["END"]
end