require( "ID/WarBL/WarBLData" ) function EndGateRoutine( Handle, MapIndex ) cExecCheck( "EndGateRoutine" ) local RoomEvent RoomEvent = InstanceField[MapIndex] if RoomEvent == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) GATE_MAP_INDEX[Handle] = nil return ReturnAI["END"] end if RoomEvent["EndGate"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) GATE_MAP_INDEX[Handle] = nil return ReturnAI["END"] end if RoomEvent["EndGate"][Handle] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) RoomEvent["EndGate"] = nil GATE_MAP_INDEX[Handle] = nil return ReturnAI["END"] end return ReturnAI["END"] end function EndGateClick( NPCHandle, PlyHandle, RegistNumber ) cExecCheck( "EndGateClick" ) local MapIndex = GATE_MAP_INDEX[NPCHandle] if MapIndex == nil then return end if InstanceField[MapIndex] == nil then return end if InstanceField[MapIndex]["EndGate"] == nil then return end cServerMenu( PlyHandle, NPCHandle, GATE_TITLE["End"]["Title"], GATE_TITLE["End"]["Yes"], "LinkToEnd", GATE_TITLE["End"]["No"], "GateDummy") end function LinkToEnd( NPCHandle, PlyHandle, RegistNumber ) cExecCheck( "LinkToStart" ) local MapIndex = GATE_MAP_INDEX[NPCHandle] if MapIndex == nil then return end local RoomEvent RoomEvent = InstanceField[MapIndex] if RoomEvent == nil then return end if RoomEvent["EndGate"] == nil then return end cLinkTo( PlyHandle, GATE_DATA["END_GATE"]["LINK"]["FIELD"], GATE_DATA["END_GATE"]["LINK"]["X"], GATE_DATA["END_GATE"]["LINK"]["Y"] ) end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Room 1 -- -- -- -- -- -- -- -- ( ¸ÞÀÎ ·çƾ ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function EVENT_ROOM_ONE_ROUTINE( RoomEvent ) cExecCheck( "EVENT_ROOM_ONE_ROUTINE" ) if RoomEvent == nil then return end if RoomEvent["Room"]["RoomNumber"] ~= 1 then return end if RoomEvent["Room"]["Data"] == nil then return end if RoomEvent["Room"]["Data"]["ForasList"] == nil then return end local Event_Foras_Data = { } local Event_Foras_List = { } Event_Foras_Data = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["ENVENT_FORAS"] Event_Foras_List = RoomEvent["Room"]["Data"]["ForasList"] -- °¢ Æ÷¶ó½º µéÀÌ ÁÖº¯¿¡ ij¸¯ÅÍ°¡ ÀÖ´ÂÁö üũÇÏ¿© ¼º°ø½Ã RE_STATE º¯°æ if RoomEvent["Room"]["RE_State"] == RE_STATE_1 then -- ÁÖº¯Ä³¸¯ÅÍ °Ë»ö¼º°ø if Event_Foras_List["FL_State"] == FL_SEARCH_SUCCESS then local PlayerList local ForasPos PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cSetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"], 1, DOOR_CAMERAMOVE["AbstateTime"] ) end ForasPos = Event_Foras_Data["FORAS_POSITION"][1]["REGEN_POS"] -- ¼­¹ö¿Í Ŭ¶ó ¹æÇâ ¸ÂÃçÁÜ local tmpdir = (-48 + 180) * (-1) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], ForasPos["X"], ForasPos["Y"], tmpdir, FORAS_CAMERAMOVE["AngleY"], FORAS_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["Data"]["CameraCheckTime"] = RoomEvent["CurrentTime"] + FORAS_CAMERAMOVE["KeepTime"] RoomEvent["Room"]["Data"]["CheckTime"] = RoomEvent["CurrentTime"] + 1 RoomEvent["Room"]["RE_State"] = RE_STATE_2 end return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_2 then if RoomEvent["Room"]["Data"]["CheckTime"] > RoomEvent["CurrentTime"] then return end RoomEvent["Room"]["Data"]["CheckTime"] = nil Event_Foras_List["FL_State"] = FL_SURPRISE Event_Foras_List["CheckTime"] = RoomEvent["CurrentTime"] + Event_Foras_Data["SURPRISE_DELAY"] RoomEvent["Room"]["RE_State"] = RE_STATE_3 return -- Æ÷¶ó½º°¡ ij¸¯Å͸¦ ÀνÄÇÏ°í ´ë±âÁßÀÎ »óÅ elseif RoomEvent["Room"]["RE_State"] == RE_STATE_3 then if RoomEvent["Room"]["Data"]["CameraCheckTime"] > RoomEvent["CurrentTime"] then return end local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cResetAbstate( PlayerList[i], FORAS_CAMERAMOVE["AbstateIndex"] ) end RoomEvent["Room"]["Data"]["CameraCheckTime"] = nil cCameraMove( RoomEvent["MapIndex"], 0, 0, 0, 0, 0, 0 ) RoomEvent["Room"]["RE_State"] = RE_STATE_4 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_4 then if RoomEvent["CurrentTime"] > Event_Foras_List["CheckTime"] then Event_Foras_List["FL_State"] = FL_ESCAPE RoomEvent["Room"]["RE_State"] = RE_STATE_5 for index, value in pairs ( Event_Foras_List["List"] ) do local GoalPos = {} GoalPos = value["Path"][value["PathNumber"]] cRunTo ( index, GoalPos["X"], GoalPos["Y"] ) cMobChat ( index, "WarBL", value["MobChatData"]["INDEX"][5] ) end RoomEvent["Room"]["Data"]["NoticeCheckTime"] = RoomEvent["CurrentTime"] + NOTICE_INFO[1]["DelayTime"] end return -- Æ÷¶ó½º°¡ ¸ðµÎ µµ¸Á ¿Ï·á µÇ¾ú´ÂÁö üũ - ¸¶°èº´»ç ¸®Á¨ elseif RoomEvent["Room"]["RE_State"] == RE_STATE_5 then local Event_DavilDom_Data = { } local Event_DavilDom = { } local Daivildom = { } local Event_Davildom_List = { } Event_DavilDom_Data = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["EVNET_DAVILDOM"] Event_DavilDom = RoomEvent["Room"]["Data"]["Davildom"] Event_Davildom_List = RoomEvent["Room"]["Data"]["Davildom"]["List"] if RoomEvent["Room"]["Data"]["NoticeCheckTime"] < RoomEvent["CurrentTime"] then cNotice( RoomEvent["MapIndex"], NOTICE_INFO[1]["FileName"], NOTICE_INFO[1]["Index"] ) RoomEvent["Room"]["Data"]["NoticeCheckTime"] = RoomEvent["Room"]["Data"]["NoticeCheckTime"] + 999999999999 end if RoomEvent["CurrentTime"] > Event_DavilDom["RegenCheckTime"] then if Event_DavilDom["RegenCount"] > Event_DavilDom_Data["MOB_TOTAL_COUNT"] then RoomEvent["Room"]["RE_State"] = RE_STATE_6 return end Event_DavilDom["RegenCheckTime"] = RoomEvent["CurrentTime"] + Event_DavilDom_Data["REGEN_DELAY_TIME"] Daivildom["Handle"] = cMobRegen_XY( RoomEvent["MapIndex"], Event_DavilDom_Data["MOB_INDEX"], Event_DavilDom_Data["DAVILDOM_POSITION"]["START_POSITION"]["X"], Event_DavilDom_Data["DAVILDOM_POSITION"]["START_POSITION"]["Y"], Event_DavilDom_Data["DAVILDOM_POSITION"]["START_POSITION"]["DIR"] ) if Daivildom["Handle"] ~= nil then Daivildom["D_State"] = D_Normal Daivildom["CheckTime"] = RoomEvent["CurrentTime"] Event_Davildom_List[Daivildom["Handle"]] = Daivildom Event_DavilDom["RegenCount"] = Event_DavilDom["RegenCount"] + 1 cSetAIScript ( SCRIPT_MAIN, Daivildom["Handle"] ) cAIScriptFunc ( Daivildom["Handle"], "Entrance", "ROOM_ONE_DAVILDOM_ROUTINE" ) cRunTo ( Daivildom["Handle"], Event_DavilDom_Data["DAVILDOM_POSITION"]["END_POSITION"]["X"], Event_DavilDom_Data["DAVILDOM_POSITION"]["END_POSITION"]["Y"] ) end return end return -- ÀüÅõ ¿Ï·á ÈÄ ¾Ë¸² elseif RoomEvent["Room"]["RE_State"] == RE_STATE_6 then local Event_Davildom_List = { } Event_Davildom_List = RoomEvent["Room"]["Data"]["Davildom"]["List"] for index, value in pairs(Event_Davildom_List) do return end cNotice( RoomEvent["MapIndex"], NOTICE_INFO[2]["FileName"], NOTICE_INFO[2]["Index"] ) end return EVENT_ROUTINE_END end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Room 2 -- -- -- -- -- -- -- -- ( ¸ÞÀÎ ·çƾ ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function EVENT_ROOM_TWO_ROUTINE( RoomEvent ) cExecCheck( "EVENT_ROOM_TWO_ROUTINE" ) if RoomEvent == nil then return end if RoomEvent["Room"]["RoomNumber"] ~= 2 then return end if RoomEvent["Room"]["Data"] == nil then return end -- Ä«¸Þ¶ó ¿öÅ© ( µµ¾î¿ÀÇ ) if RoomEvent["Room"]["RE_State"] == RE_STATE_1 then local PlayerList local DoorLoc PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cSetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"], 1, DOOR_CAMERAMOVE["AbstateTime"] ) end DoorLoc = DOOR_BLOCK_DATA[1]["REGEN_POSITION"] -- ¼­¹ö¿Í Ŭ¶ó ¹æÇâ ¸ÂÃçÁÜ local tmpdir = (DoorLoc["DIR"] + 180) * (-1) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], DoorLoc["X"], DoorLoc["Y"], tmpdir, DOOR_CAMERAMOVE["AngleY"], DOOR_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["Data"]["CameraCheckTime"] = RoomEvent["CurrentTime"] + DOOR_CAMERAMOVE["KeepTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_2 RoomEvent["DoorCheckTime"] = RoomEvent["CurrentTime"] + DOOR_CHECK_TIME return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_2 then if RoomEvent["CurrentTime"] < RoomEvent["DoorCheckTime"] then return end local DoorInfo DoorInfo = RoomEvent["DoorList"][1] cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" ) RoomEvent["Room"]["RE_State"] = RE_STATE_3 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_3 then if RoomEvent["Room"]["Data"]["CameraCheckTime"] > RoomEvent["CurrentTime"] then return end RoomEvent["Room"]["RE_State"] = RE_STATE_4 local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cResetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"] ) end RoomEvent["CameraCheckTime"] = nil cCameraMove( RoomEvent["MapIndex"], 0, 0, 0, 0, 0, 0 ) cNotice( RoomEvent["MapIndex"], NOTICE_INFO[1]["FileName"], NOTICE_INFO[1]["Index"] ) return -- ½ÃÆ®¸® Á×¾ú³ª È®ÀÎ elseif RoomEvent["Room"]["RE_State"] == RE_STATE_4 then if RoomEvent["Room"]["Data"]["Citrie"] ~= nil then return end RoomEvent["Room"]["RE_State"] = RE_STATE_5 cNotice( RoomEvent["MapIndex"], NOTICE_INFO[2]["FileName"], NOTICE_INFO[2]["Index"] ) local Gate = { } RoomEvent["MiddleGate"] = { } Gate["Handle"] = cMobRegen_XY( RoomEvent["MapIndex"], GATE_DATA["MIDDLE_GATE"]["GATE_INDEX"], GATE_DATA["MIDDLE_GATE"]["REGEN_POSITION"]["X"], GATE_DATA["MIDDLE_GATE"]["REGEN_POSITION"]["Y"], GATE_DATA["MIDDLE_GATE"]["REGEN_POSITION"]["DIR"] ) if Gate["Handle"] ~= nil then cSetAIScript ( SCRIPT_MAIN, Gate["Handle"] ) cAIScriptFunc ( Gate["Handle"], "Entrance", "MiddleGateRoutine" ) cAIScriptFunc ( Gate["Handle"], "NPCClick", "MiddleGateClick" ) Gate["RegenLocNum"] = 1 GATE_MAP_INDEX[Gate["Handle"]] = RoomEvent["MapIndex"] end RoomEvent["MiddleGate"] = Gate MAPMARK( RoomEvent ) return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_5 then local PlayerList local DoorLoc PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cSetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"], 1, DOOR_CAMERAMOVE["AbstateTime"] ) end DoorLoc = DOOR_BLOCK_DATA[2]["REGEN_POSITION"] -- ¼­¹ö¿Í Ŭ¶ó ¹æÇâ ¸ÂÃçÁÜ local tmpdir = (DoorLoc["DIR"] + 180) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], DoorLoc["X"], DoorLoc["Y"], tmpdir, DOOR_CAMERAMOVE["AngleY"], DOOR_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["Data"]["CameraCheckTime"] = RoomEvent["CurrentTime"] + DOOR_CAMERAMOVE["KeepTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_6 RoomEvent["DoorCheckTime"] = RoomEvent["CurrentTime"] + DOOR_CHECK_TIME return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_6 then if RoomEvent["CurrentTime"] < RoomEvent["DoorCheckTime"] then return end local DoorInfo DoorInfo = RoomEvent["DoorList"][2] cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" ) RoomEvent["Room"]["RE_State"] = RE_STATE_7 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_7 then if RoomEvent["CurrentTime"] < RoomEvent["Room"]["Data"]["CameraCheckTime"] then return end local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cResetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"] ) end RoomEvent["CameraCheckTime"] = nil cCameraMove( RoomEvent["MapIndex"], 0, 0, 0, 0, 0, 0 ) end return EVENT_ROUTINE_END end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Room 3 -- -- -- -- -- -- -- -- ( ¸ÞÀÎ ·çƾ ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function EVENT_ROOM_THREE_ROUTINE( RoomEvent ) cExecCheck( "EVENT_ROOM_THREE_ROUTINE" ) if RoomEvent == nil then return end if RoomEvent["Room"]["RoomNumber"] ~= 3 then return end if RoomEvent["Room"]["Data"] == nil then return end -- 1. ¸¶°èº´»ç ±×·ì ¾î±×·Î È®ÀÎ if RoomEvent["Room"]["RE_State"] == RE_STATE_1 then local DavildomGroupList local DavildomGroup local ForasGroupList local ForasGroup DavildomGroupList = RoomEvent["Room"]["Data"]["DavildomGroupList"] ForasGroupList = RoomEvent["Room"]["Data"]["ForasGroupList"] if RoomEvent["Room"]["Data"]["EscapeStateNum"] >= #DavildomGroupList then RoomEvent["Room"]["RE_State"] = RE_STATE_2 return end for i = 1, #DavildomGroupList do DavildomGroup = DavildomGroupList[i] ForasGroup = ForasGroupList[i] if DavildomGroup["DG_State"] == DG_AGGRO then DavildomGroup["DG_State"] = DG_AGGRO_SUCC RoomEvent["Room"]["Data"]["EscapeStateNum"] = RoomEvent["Room"]["Data"]["EscapeStateNum"] + 1 ForasGroup["FG_State"] = FG_ESCAPE for index, value in pairs ( ForasGroup["List"] ) do local GoalPos = {} GoalPos = value["Path"][value["PathNumber"]] cRunTo ( value["Handle"], GoalPos["X"], GoalPos["Y"] ) cMobChat ( index, "WarBL", value["MobChat"] ) end end end return -- 2. ¸ðµç ¸¶°èº´»ç°¡ Á×¾ú´ÂÁö È®ÀÎ elseif RoomEvent["Room"]["RE_State"] == RE_STATE_2 then for index, value in pairs ( RoomEvent["Room"]["Data"]["DavildomList"] ) do return end cMobDialog( RoomEvent["MapIndex"], DialogInfo[1]["Facecut"], DialogInfo[1]["FileName"], DialogInfo[1]["Index"] ) RoomEvent["Room"]["RE_State"] = RE_STATE_3 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_3 then local RegenDavildomData local RegenDavildomList = { } RegenDavildomData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["REGEN_DAVILDOM"] for i = 1, RegenDavildomData["MOB_COUNT"][1] do local RegenDavildom = { } RegenDavildom["Handle"] = cMobRegen_Circle( RoomEvent["MapIndex"], RegenDavildomData["MOB_INDEX"], RegenDavildomData["CENTER_POSITION"]["X"], RegenDavildomData["CENTER_POSITION"]["Y"], RegenDavildomData["CENTER_POSITION"]["RADIUS"] ) if RegenDavildom["Handle"] ~= nil then cSetAIScript ( SCRIPT_MAIN, RegenDavildom["Handle"] ) cAIScriptFunc ( RegenDavildom["Handle"], "Entrance", "ROOM_THREE_REGEN_DAVILDOM_ROUTINE" ) local PlayerList local PlayerAggroList = { } local CurPos = { } local Count = 1 CurPos["X"], CurPos["Y"] = cObjectLocate( RegenDavildom["Handle"] ) 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"] ) < ( RegenDavildomData["SEARCH_RANGE"] * RegenDavildomData["SEARCH_RANGE"] ) then PlayerAggroList[Count] = PlayerList[i] Count = Count + 1 end end local PlayerHandle PlayerHandle = cRandomInt(1, #PlayerAggroList) RegenDavildom["AggroPlayer"] = PlayerAggroList[PlayerHandle] RegenDavildom["AggroDistance"] = RegenDavildomData["AGGRO_DISTANCE"] RegenDavildom["AggroPoint"] = RegenDavildomData["AGGRO_POINT"] RegenDavildom["CheckTime"] = RoomEvent["CurrentTime"] RegenDavildom["D_State"] = D_AGGRO RegenDavildomList[RegenDavildom["Handle"]] = RegenDavildom end end RoomEvent["Room"]["Data"]["RegenDavildomList"] = RegenDavildomList RoomEvent["Room"]["RE_State"] = RE_STATE_4 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_4 then for index, value in pairs(RoomEvent["Room"]["Data"]["RegenDavildomList"]) do return end RoomEvent["Room"]["Data"]["RegenDavildomList"] = nil cMobDialog( RoomEvent["MapIndex"], DialogInfo[2]["Facecut"], DialogInfo[2]["FileName"], DialogInfo[2]["Index"] ) RoomEvent["Room"]["RE_State"] = RE_STATE_5 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_5 then local RegenDavildomData local RegenDavildomList = { } RegenDavildomData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["REGEN_DAVILDOM"] for i = 1, RegenDavildomData["MOB_COUNT"][2] do local RegenDavildom = { } RegenDavildom["Handle"] = cMobRegen_Circle( RoomEvent["MapIndex"], RegenDavildomData["MOB_INDEX"], RegenDavildomData["CENTER_POSITION"]["X"], RegenDavildomData["CENTER_POSITION"]["Y"], RegenDavildomData["CENTER_POSITION"]["RADIUS"] ) if RegenDavildom["Handle"] ~= nil then cSetAIScript ( SCRIPT_MAIN, RegenDavildom["Handle"] ) cAIScriptFunc ( RegenDavildom["Handle"], "Entrance", "ROOM_THREE_REGEN_DAVILDOM_ROUTINE" ) local PlayerList local PlayerAggroList = { } local CurPos = { } local Count = 1 CurPos["X"], CurPos["Y"] = cObjectLocate( RegenDavildom["Handle"] ) 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"] ) < ( RegenDavildomData["SEARCH_RANGE"] * RegenDavildomData["SEARCH_RANGE"] ) then PlayerAggroList[Count] = PlayerList[i] Count = Count + 1 end end local PlayerHandle PlayerHandle = cRandomInt(1, #PlayerAggroList) RegenDavildom["AggroPlayer"] = PlayerAggroList[PlayerHandle] RegenDavildom["AggroDistance"] = RegenDavildomData["AGGRO_DISTANCE"] RegenDavildom["AggroPoint"] = RegenDavildomData["AGGRO_POINT"] RegenDavildom["CheckTime"] = RoomEvent["CurrentTime"] RegenDavildom["D_State"] = D_AGGRO RegenDavildomList[RegenDavildom["Handle"]] = RegenDavildom end end RoomEvent["Room"]["Data"]["RegenDavildomList"] = RegenDavildomList RoomEvent["Room"]["RE_State"] = RE_STATE_6 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_6 then for index, value in pairs(RoomEvent["Room"]["Data"]["RegenDavildomList"]) do return end end return EVENT_ROUTINE_END end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Room 4 -- -- -- -- -- -- -- -- ( ¸ÞÀÎ ·çƾ ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function EVENT_ROOM_FOUR_ROUTINE( RoomEvent ) cExecCheck( "EVENT_ROOM_THREE_ROUTINE" ) if RoomEvent == nil then return end if RoomEvent["Room"]["RoomNumber"] ~= 4 then return end if RoomEvent["Room"]["Data"] == nil then return end if RoomEvent["Room"]["RE_State"] == RE_STATE_1 then local PlayerList local ForasChiefLocation PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cSetAbstate( PlayerList[i], EVENT4_CAMERAMOVE["AbstateIndex"], 1, EVENT4_CAMERAMOVE["AbstateTime"] ) end ForasChiefLocation = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["FORAS_CHIEF"]["REGEN_POSITION"] -- ¼­¹ö¿Í Ŭ¶ó ¹æÇâ ¸ÂÃçÁÜ local tmpdir = (ForasChiefLocation["DIR"] + 180) * (-1) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], ForasChiefLocation["X"], ForasChiefLocation["Y"], tmpdir, EVENT4_CAMERAMOVE["AngleY"], EVENT4_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["Data"]["CameraCheckTime"] = RoomEvent["CurrentTime"] + EVENT4_CAMERAMOVE["KeepTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_2 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_2 then if RoomEvent["Room"]["Data"]["CameraCheckTime"] > RoomEvent["CurrentTime"] then return end RoomEvent["Room"]["RE_State"] = RE_STATE_3 local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cResetAbstate( PlayerList[i], EVENT4_CAMERAMOVE["AbstateIndex"] ) end RoomEvent["CameraCheckTime"] = nil cCameraMove( RoomEvent["MapIndex"], 0, 0, 0, 0, 0, 0 ) RoomEvent["Room"]["RE_State"] = RE_STATE_3 RoomEvent["CameraCheckTime"] = RoomEvent["CurrentTime"] + 1 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_3 then if RoomEvent["CameraCheckTime"] > RoomEvent["CurrentTime"] then return end cMobDialog( RoomEvent["MapIndex"], DialogInfo[3]["Facecut"], DialogInfo[3]["FileName"], DialogInfo[3]["Index"] ) RoomEvent["CameraCheckTime"] = nil RoomEvent["Room"]["RE_State"] = RE_STATE_4 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_4 then for index, value in pairs(RoomEvent["Room"]["Data"]["DavildomList"]) do return end cAnimate( RoomEvent["Room"]["Data"]["ForasChief"]["Handle"], "stop" ) RoomEvent["Room"]["RE_State"] = RE_STATE_5 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_5 then local EquipItemPlayerList = { } local nCount local MaseterPlayer PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } nCount = 1 local MasterPlayer = nil for i = 1, #PlayerList do local PriorityFirst local PrioritySecond if cIsEquipItem( PlayerList[i], RoomEvent["Room"]["Data"]["ForasChief"]["MaskItem"] ) == 1 then if MasterPlayer == nil then MasterPlayer = PlayerList[i] elseif MasterPlayer ~= nil then PriorityFirst = PRIORITY_CLASS[cGetBaseClass( MasterPlayer )] PrioritySecond = PRIORITY_CLASS[cGetBaseClass( PlayerList[i] )] if PriorityFirst > PrioritySecond then MasterPlayer = PlayerList[i] end end end end local ForasChief ForasChief = RoomEvent["Room"]["Data"]["ForasChief"] if MasterPlayer == nil then ForasChief["FC_State"] = FC_MOVE cMobShout ( ForasChief["Handle"], "WarBL", ForasChief["MobChatData"][1] ) elseif MasterPlayer ~= nil then ForasChief["MasterPlayer"] = MasterPlayer ForasChief["FC_State"] = FC_FOLLOW cMobShout ( ForasChief["Handle"], "WarBL", ForasChief["MobChatData"][2] ) end RoomEvent["MiddleGate"]["RegenLocNum"] = 2 RoomEvent["Room"]["RE_State"] = RE_STATE_6 RoomEvent["Room"]["Data"]["CheckTime"] = RoomEvent["CurrentTime"] + 4 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_6 then if RoomEvent["Room"]["Data"]["CheckTime"] > RoomEvent["CurrentTime"] then return end end return EVENT_ROUTINE_END end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Room 5 -- -- -- -- -- -- -- -- ( ¸ÞÀÎ ·çƾ ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function EVENT_ROOM_FIVE_ROUTINE( RoomEvent ) cExecCheck( "EVENT_ROOM_FIVE_ROUTINE" ) if RoomEvent == nil then return end if RoomEvent["Room"]["RoomNumber"] ~= 5 then return end if RoomEvent["Room"]["Data"] == nil then return end if RoomEvent["Room"]["RE_State"] == RE_STATE_1 then local PlayerList local DoorLoc PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cSetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"], 1, DOOR_CAMERAMOVE["AbstateTime"] ) end DoorLoc = DOOR_BLOCK_DATA[3]["REGEN_POSITION"] -- ¼­¹ö¿Í Ŭ¶ó ¹æÇâ ¸ÂÃçÁÜ local tmpdir = (DoorLoc["DIR"] + 180) * (-1) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], DoorLoc["X"], DoorLoc["Y"], tmpdir, DOOR_CAMERAMOVE["AngleY"], DOOR_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["Data"]["CameraCheckTime"] = RoomEvent["CurrentTime"] + DOOR_CAMERAMOVE["KeepTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_2 RoomEvent["DoorCheckTime"] = RoomEvent["CurrentTime"] + DOOR_CHECK_TIME return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_2 then if RoomEvent["CurrentTime"] < RoomEvent["DoorCheckTime"] then return end local DoorInfo DoorInfo = RoomEvent["DoorList"][3] cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" ) RoomEvent["Room"]["RE_State"] = RE_STATE_3 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_3 then if RoomEvent["Room"]["Data"]["CameraCheckTime"] > RoomEvent["CurrentTime"] then return end local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cResetAbstate( PlayerList[i], DOOR_CAMERAMOVE["AbstateIndex"] ) end RoomEvent["CameraCheckTime"] = nil cCameraMove( RoomEvent["MapIndex"], 0, 0, 0, 0, 0, 0 ) RoomEvent["Room"]["RE_State"] = RE_STATE_4 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_4 then if RoomEvent["Room"]["Data"]["Citrie"] ~= nil then return end RoomEvent["Room"]["Data"]["RegenDavildom"] = nil if RoomEvent["Room"]["Data"]["ForasChief"] ~= nil then cAIScriptSet( RoomEvent["Room"]["Data"]["ForasChief"]["Handle"] ) cNPCVanish( RoomEvent["Room"]["Data"]["ForasChief"]["Handle"] ) RoomEvent["Room"]["Data"]["ForasChief"] = nil end RoomEvent["Room"]["RE_State"] = RE_STATE_5 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_5 then local ForasChiefData = { } local ForasChief = { } ForasChiefData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["FORAS_CHIEF"] ForasChief["Handle"] = cMobRegen_XY( RoomEvent["MapIndex"], ForasChiefData["MOB_INDEX"], ForasChiefData["START_POSITION"]["X"], ForasChiefData["START_POSITION"]["Y"], ForasChiefData["START_POSITION"]["DIR"] ) if ForasChief["Handle"] ~= nil then cSetAIScript ( SCRIPT_MAIN, ForasChief["Handle"] ) cAIScriptFunc ( ForasChief["Handle"], "Entrance", "ROOM_FIVE_FORASCHEIF_ROUTINE" ) cSetAbstate ( ForasChief["Handle"], STA_IMMORTAL, 1, 20000000 ) ForasChief["MobChatData"] = ForasChiefData["MOB_CHAT"] ForasChief["FC_State"] = FC_MOVE end RoomEvent["Room"]["Data"]["ForasChief"] = ForasChief local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cSetAbstate( PlayerList[i], ENDING_CAMERAMOVE["AbstateIndex"], 1, ENDING_CAMERAMOVE["AbstateTime"] ) end local ForasChiefData = { } local ForasChief = RoomEvent["Room"]["Data"]["ForasChief"] ForasChiefData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["FORAS_CHIEF"] local tmpdir = (ForasChiefData["START_POSITION"]["DIR"] + 180) * (-1) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], ForasChiefData["END_POSITION"]["X"], ForasChiefData["END_POSITION"]["Y"], tmpdir, DOOR_CAMERAMOVE["AngleY"], DOOR_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["RE_State"] = RE_STATE_6 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_6 then local ForasChief = RoomEvent["Room"]["Data"]["ForasChief"] local CurLoc = { } local ForasChiefData = { } CurLoc["X"], CurLoc["Y"] = cObjectLocate( ForasChief["Handle"] ) ForasChiefData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["FORAS_CHIEF"] if cDistanceSquar( CurLoc["X"], CurLoc["Y"], ForasChiefData["END_POSITION"]["X"], ForasChiefData["END_POSITION"]["Y"] ) < ( MOVE_INTERVER * MOVE_INTERVER ) then RoomEvent["Room"]["RE_State"] = RE_STATE_7 end return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_7 then local ForasChiefData = { } local ForasChief = RoomEvent["Room"]["Data"]["ForasChief"] ForasChiefData = EVENT_ROOM_DATA[RoomEvent["Room"]["RoomNumber"]]["FORAS_CHIEF"] local tmpdir = (ForasChiefData["START_POSITION"]["DIR"] + 180) * (-1) tmpdir = tmpdir % 360 cCameraMove( RoomEvent["MapIndex"], ForasChiefData["END_POSITION"]["X"], ForasChiefData["END_POSITION"]["Y"], tmpdir, ENDING_CAMERAMOVE["AngleY"], ENDING_CAMERAMOVE["Distance"], 1 ) RoomEvent["Room"]["Data"]["CameraCheckTime"] = RoomEvent["CurrentTime"] + ENDING_CAMERAMOVE["KeepTime"] ForasChief["ChatCheckTime"] = RoomEvent["CurrentTime"] + ForasChief["MobChatData"]["DELAY"] RoomEvent["Room"]["RE_State"] = RE_STATE_8 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_8 then local ForasChief ForasChief = RoomEvent["Room"]["Data"]["ForasChief"] if ForasChief["ChatCheckTime"] > RoomEvent["CurrentTime"] then return end cMobShout( ForasChief["Handle"], "WarBL", ForasChief["MobChatData"]["INDEX"][1] ) ForasChief["ChatCheckTime"] = RoomEvent["CurrentTime"] + ForasChief["MobChatData"]["DELAY"] RoomEvent["Room"]["RE_State"] = RE_STATE_9 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_9 then local ForasChief ForasChief = RoomEvent["Room"]["Data"]["ForasChief"] if ForasChief["ChatCheckTime"] < RoomEvent["CurrentTime"] then cMobShout( ForasChief["Handle"], "WarBL", ForasChief["MobChatData"]["INDEX"][2] ) ForasChief["ChatCheckTime"] = RoomEvent["CurrentTime"] + 100 return end if RoomEvent["Room"]["Data"]["CameraCheckTime"] > RoomEvent["CurrentTime"] then return end local PlayerList PlayerList = { cGetPlayerList( RoomEvent["MapIndex"] ) } for i=1, #PlayerList do cResetAbstate( PlayerList[i], ENDING_CAMERAMOVE["AbstateIndex"] ) end RoomEvent["CameraCheckTime"] = nil cCameraMove( RoomEvent["MapIndex"], 0, 0, 0, 0, 0, 0 ) RoomEvent["Room"]["RE_State"] = RE_STATE_10 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_10 then RoomEvent["EndGate"] = { } local EndGateData = { } local EndGate = { } EndGateData = GATE_DATA["END_GATE"] EndGate["Handle"] = cMobRegen_XY( RoomEvent["MapIndex"], EndGateData["GATE_INDEX"], EndGateData["REGEN_POSITION"]["X"], EndGateData["REGEN_POSITION"]["Y"], EndGateData["REGEN_POSITION"]["DIR"] ) if EndGate["Handle"] ~= nil then cSetAIScript ( SCRIPT_MAIN, EndGate["Handle"] ) cAIScriptFunc ( EndGate["Handle"], "Entrance", "EndGateRoutine" ) cAIScriptFunc ( EndGate["Handle"], "NPCClick", "EndGateClick" ) end GATE_MAP_INDEX[EndGate["Handle"]] = RoomEvent["MapIndex"] RoomEvent["EndGate"][EndGate["Handle"]] = EndGate MAPMARK( RoomEvent ) end return EVENT_ROUTINE_END end -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ENDING -- -- -- -- -- -- -- -- ( ¸ÞÀÎ ·çƾ ) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- function EVENT_ROOM_ENDING_ROUTINE( RoomEvent ) cExecCheck( "EVENT_ROOM_ENDING_ROUTINE" ) if RoomEvent == nil then return end if RoomEvent["Room"]["RoomNumber"] ~= 6 then return end if RoomEvent["Room"]["Data"] == nil then return end local EndingData = RoomEvent["Room"]["Data"]["EndingData"] if RoomEvent["Room"]["RE_State"] == RE_STATE_1 then cNotice( RoomEvent["MapIndex"], EndingData[1]["FileName"], EndingData[1]["Index"] ) RoomEvent["Room"]["Data"]["EndingCheckTime"] = RoomEvent["CurrentTime"] + EndingData[1]["WaitTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_2 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_2 then if RoomEvent["Room"]["Data"]["EndingCheckTime"] > RoomEvent["CurrentTime"] then return end cNotice( RoomEvent["MapIndex"], EndingData[2]["FileName"], EndingData[2]["Index"] ) RoomEvent["Room"]["Data"]["EndingCheckTime"] = RoomEvent["CurrentTime"] + EndingData[2]["WaitTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_3 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_3 then if RoomEvent["Room"]["Data"]["EndingCheckTime"] > RoomEvent["CurrentTime"] then return end cNotice( RoomEvent["MapIndex"], EndingData[3]["FileName"], EndingData[3]["Index"] ) RoomEvent["Room"]["Data"]["EndingCheckTime"] = RoomEvent["CurrentTime"] + EndingData[3]["WaitTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_4 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_4 then if RoomEvent["Room"]["Data"]["EndingCheckTime"] > RoomEvent["CurrentTime"] then return end cNotice( RoomEvent["MapIndex"], EndingData[4]["FileName"], EndingData[4]["Index"] ) RoomEvent["Room"]["Data"]["EndingCheckTime"] = RoomEvent["CurrentTime"] + EndingData[4]["WaitTime"] RoomEvent["Room"]["RE_State"] = RE_STATE_5 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_5 then if RoomEvent["Room"]["Data"]["EndingCheckTime"] > RoomEvent["CurrentTime"] then return end cLinkToAll( RoomEvent["MapIndex"], GATE_DATA["END_GATE"]["LINK"]["FIELD"], GATE_DATA["END_GATE"]["LINK"]["X"], GATE_DATA["END_GATE"]["LINK"]["Y"] ) RoomEvent["Room"]["RE_State"] = RE_STATE_6 return elseif RoomEvent["Room"]["RE_State"] == RE_STATE_6 then return end return end EVENT_ROOM_ROUTINE = { } EVENT_ROOM_ROUTINE[1] = EVENT_ROOM_ONE_ROUTINE EVENT_ROOM_ROUTINE[2] = EVENT_ROOM_TWO_ROUTINE EVENT_ROOM_ROUTINE[3] = EVENT_ROOM_THREE_ROUTINE EVENT_ROOM_ROUTINE[4] = EVENT_ROOM_FOUR_ROUTINE EVENT_ROOM_ROUTINE[5] = EVENT_ROOM_FIVE_ROUTINE EVENT_ROOM_ROUTINE[6] = EVENT_ROOM_ENDING_ROUTINE