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/WarHH/WarHHEventRoutine.lua

2138 lines
51 KiB

require( "ID/WarHH/WarHHData" )
function EVENT_ROUTINE_1( EventMemory )
cExecCheck( "EVENT_ROUTINE_1" )
if EventMemory == nil then
return
end
if EventMemory["EventNumber"] ~= 1 then
return
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 5
EventMemory["EventState"] = ES_STATE["STATE_2"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_2"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_3"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_3"] then
return
elseif EventMemory["EventState"] == ES_STATE["STATE_4"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
FaceCut( EventMemory )
local EventData
local EventDevildomData
local EventTDevildomData
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventDevildomData = EventData["EVENT_DEVILDOM"]
EventTDevildomData = EventData["EVENT_TDEVILDOM"]
local PlayerList
local PlayerAggroList = { }
local Count = 1
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
for i = 1, #PlayerList do
local CurPlayerPos = { }
local DevildomPos
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
DevildomPos = EventDevildomData["REGEN_POSITION"]
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( SEARCH_RANGE * SEARCH_RANGE ) then
PlayerAggroList[Count] = PlayerList[i]
Count = Count + 1
end
end
local EventDevildomList = { }
for i = 1, EventDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventDevildom = { }
EventDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventDevildomData["MOBINDEX"],
EventDevildomData["REGEN_POSITION"]["X"], EventDevildomData["REGEN_POSITION"]["Y"], EventDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventDevildom["Handle"] )
cAIScriptFunc ( EventDevildom["Handle"], "Entrance", "EVENT_1_REGEN_DEVILDOM_ROUTINE" )
EventDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventDevildomList[EventDevildom["Handle"]] = EventDevildom
end
end
EventMemory["EventData"]["EventDevildomList"] = EventDevildomList
local EventTDevildomList = { }
for i = 1, EventTDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventTDevildom = { }
EventTDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventTDevildomData["MOBINDEX"],
EventTDevildomData["REGEN_POSITION"]["X"], EventTDevildomData["REGEN_POSITION"]["Y"], EventTDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventTDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventTDevildom["Handle"] )
cAIScriptFunc ( EventTDevildom["Handle"], "Entrance", "EVENT_1_REGEN_TDEVILDOM_ROUTINE" )
EventTDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventTDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventTDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventTDevildomList[EventTDevildom["Handle"]] = EventTDevildom
end
end
EventMemory["EventData"]["EventTDevildomList"] = EventTDevildomList
EventMemory["EventState"] = ES_STATE["STATE_5"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_5"] then
local EventData
local FenceList
local DevildomList
local HighDevildomList
local EventDevildomList
local EventTDevildomList
EventData = EventMemory["EventData"]
FenceList = EventData["FenceList"]
DevildomList = EventData["DevildomList"]
HighDevildomList = EventData["HighDevildomList"]
EventDevildomList = EventData["EventDevildomList"]
EventTDevildomList = EventData["EventTDevildomList"]
if next( FenceList ) ~= nil or next( DevildomList ) ~= nil or next( EventDevildomList ) ~= nil or next( EventTDevildomList ) ~= nil or next( HighDevildomList ) ~= nil then
return
end
EventMemory["ForasChief"] = nil
EventMemory["EventState"] = ES_STATE["STATE_6"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_6"] then
local PlayerList
local ForasChiefPosition
local ForasChief = { }
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
ForasChiefPosition = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]
ForasChief["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], FORAS_CHIEF["MOBINDEX"],
ForasChiefPosition["START_POS"]["X"], ForasChiefPosition["START_POS"]["Y"], ForasChiefPosition["START_POS"]["DIR"] )
if ForasChief["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, ForasChief["Handle"] )
cAIScriptFunc ( ForasChief["Handle"], "Entrance", "FORASCHIEF_ROUTINE" )
cSetAbstate ( ForasChief["Handle"], STA_IMMORTAL, 1, 99999999 )
ForasChief["FC_STATE"] = FC_STATE["MOVE"]
ForasChief["CheckTime"] = EventMemory["CurrentTime"]
if PlayerList[1] ~= nil then
ForasChief["MasterPlayer"] = PlayerList[1]
end
end
EventMemory["ForasChief"] = ForasChief
EventMemory["EventState"] = ES_STATE["STATE_7"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_7"] then
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_8"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_8"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["EventState"] = ES_STATE["STATE_9"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_9"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_10"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_10"] then
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 1
EventMemory["EventState"] = ES_STATE["STATE_11"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_11"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
cAnimate( EventMemory["ForasChief"]["Handle"], "start", FORAS_CHIEF["ANIMATION"] )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + ANIMATION_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_12"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_12"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
local LockInfo
LockInfo = EventMemory["EventData"]["LockList"][EventMemory["EventNumber"]]
cDoorAction( LockInfo["Handle"], LockInfo["Index"], "open" )
EventMemory["EventState"] = ES_STATE["STATE_13"]
cAnimate( EventMemory["ForasChief"]["Handle"], "stop" )
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CameraMove"]["CheckTime"] + 2
return
elseif EventMemory["EventState"] == ES_STATE["STATE_13"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["DoorCheckTime"] = EventMemory["CurrentTime"] + DOOR_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_14"]
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + 6
return
elseif EventMemory["EventState"] == ES_STATE["STATE_14"] then
if EventMemory["DoorCheckTime"] > EventMemory["CurrentTime"] then
return
end
local DoorInfo
DoorInfo = EventMemory["EventData"]["DoorList"][EventMemory["EventNumber"]]
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" )
EventMemory["EventState"] = ES_STATE["STATE_15"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_15"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
EventMemory["EventState"] = ES_STATE["STATE_16"]
CameraMove( EventMemory )
return
elseif EventMemory["EventState"] == ES_STATE["STATE_16"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["ForasChief"]["FC_STATE"] = FC_STATE["FOLLOW"]
FaceCut( EventMemory )
return EVENT_ROUTINE_END
end
end
function EVENT_ROUTINE_2( EventMemory )
cExecCheck( "EVENT_ROUTINE_2" )
if EventMemory == nil then
return
end
if EventMemory["EventNumber"] ~= 2 then
return
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
return
elseif EventMemory["EventState"] == ES_STATE["STATE_2"] then
FaceCut( EventMemory )
FaceCut( EventMemory )
local EventData
local EventDevildomData
local EventSDevildomData
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventDevildomData = EventData["EVENT_DEVILDOM"]
EventSDevildomData = EventData["EVENT_SDEVILDOM"]
local PlayerList
local PlayerAggroList = { }
local Count = 1
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
for i = 1, #PlayerList do
local CurPlayerPos = { }
local DevildomPos
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
DevildomPos = EventDevildomData["REGEN_POSITION"]
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( SEARCH_RANGE * SEARCH_RANGE ) then
PlayerAggroList[Count] = PlayerList[i]
Count = Count + 1
end
end
local EventDevildomList = { }
for i = 1, EventDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventDevildom = { }
EventDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventDevildomData["MOBINDEX"],
EventDevildomData["REGEN_POSITION"]["X"], EventDevildomData["REGEN_POSITION"]["Y"], EventDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventDevildom["Handle"] )
cAIScriptFunc ( EventDevildom["Handle"], "Entrance", "EVENT_2_REGEN_DEVILDOM_ROUTINE" )
EventDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventDevildomList[EventDevildom["Handle"]] = EventDevildom
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventDevildomList"] = EventDevildomList
local EventSDevildomList = { }
for i = 1, EventSDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventSDevildom = { }
EventSDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventSDevildomData["MOBINDEX"],
EventSDevildomData["REGEN_POSITION"]["X"], EventSDevildomData["REGEN_POSITION"]["Y"], EventSDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventSDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventSDevildom["Handle"] )
cAIScriptFunc ( EventSDevildom["Handle"], "Entrance", "EVENT_2_REGEN_SDEVILDOM_ROUTINE" )
EventSDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventSDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventSDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventSDevildomList[EventSDevildom["Handle"]] = EventSDevildom
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventSDevildomList"] = EventSDevildomList
EventMemory["EventState"] = ES_STATE["STATE_3"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_3"] then
local EventData
local DevildomList
local EventDevildomList
local EventSDevildomList
local SCtrie
local SFocalor
local SRangeList
local HighDevildomList
EventData = EventMemory["EventData"]
DevildomList = EventData[EventMemory["EventNumber"]]["DevildomList"]
EventDevildomList = EventData[EventMemory["EventNumber"]]["EventDevildomList"]
EventSDevildomList = EventData[EventMemory["EventNumber"]]["EventSDevildomList"]
SCtrieList = EventData[EventMemory["EventNumber"]]["SCtrieList"]
SFocalor = EventData[EventMemory["EventNumber"]]["SFocalor"]
SRangeList = EventData[EventMemory["EventNumber"]]["SRangeList"]
HighDevildomList = EventData["HighDevildomList"]
if next( DevildomList ) ~= nil or next( EventDevildomList ) ~= nil or next( EventSDevildomList ) ~= nil or next( SCtrieList ) ~= nil or next( HighDevildomList ) ~= nil or next( SRangeList ) then
return
end
if SFocalor ~= nil then
return
end
EventMemory["ForasChief"] = nil
EventMemory["EventState"] = ES_STATE["STATE_4"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_4"] then
local PlayerList
local ForasChiefPosition
local ForasChief = { }
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
ForasChiefPosition = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]
ForasChief["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], FORAS_CHIEF["MOBINDEX"],
ForasChiefPosition["START_POS"]["X"], ForasChiefPosition["START_POS"]["Y"], ForasChiefPosition["START_POS"]["DIR"] )
if ForasChief["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, ForasChief["Handle"] )
cAIScriptFunc ( ForasChief["Handle"], "Entrance", "FORASCHIEF_ROUTINE" )
cSetAbstate ( ForasChief["Handle"], STA_IMMORTAL, 1, 99999999 )
ForasChief["FC_STATE"] = FC_STATE["MOVE"]
ForasChief["CheckTime"] = EventMemory["CurrentTime"]
if PlayerList[1] ~= nil then
ForasChief["MasterPlayer"] = PlayerList[1]
end
end
EventMemory["ForasChief"] = ForasChief
EventMemory["EventState"] = ES_STATE["STATE_5"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_5"] then
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_6"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_6"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["EventState"] = ES_STATE["STATE_7"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_7"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_8"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_8"] then
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_9"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_9"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
cAnimate( EventMemory["ForasChief"]["Handle"], "start", FORAS_CHIEF["ANIMATION"] )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + ANIMATION_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_10"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_10"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
local LockInfo
LockInfo = EventMemory["EventData"]["LockList"][EventMemory["EventNumber"]]
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + 2
cAnimate( EventMemory["ForasChief"]["Handle"], "stop" )
cDoorAction( LockInfo["Handle"], LockInfo["Index"], "open" )
EventMemory["EventState"] = ES_STATE["STATE_11"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_11"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["DoorCheckTime"] = EventMemory["CurrentTime"] + DOOR_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_12"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_12"] then
if EventMemory["DoorCheckTime"] > EventMemory["CurrentTime"] then
return
end
local DoorInfo
DoorInfo = EventMemory["EventData"]["DoorList"][EventMemory["EventNumber"]]
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" )
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_13"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_13"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 1
EventMemory["EventState"] = ES_STATE["STATE_14"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_14"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["ForasChief"]["FC_STATE"] = FC_STATE["FOLLOW"]
FaceCut( EventMemory )
return EVENT_ROUTINE_END
end
end
function EVENT_ROUTINE_3( EventMemory )
cExecCheck( "EVENT_ROUTINE_3" )
if EventMemory == nil then
return
end
if EventMemory["EventNumber"] ~= 3 then
return
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
return
elseif EventMemory["EventState"] == ES_STATE["STATE_2"] then
FaceCut( EventMemory )
FaceCut( EventMemory )
local EventData
local EventDevildomData
local EventSDevildomData
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventDevildomData = EventData["EVENT_DEVILDOM"]
EventSDevildomData = EventData["EVENT_IDEVILDOM"]
local PlayerList
local PlayerAggroList = { }
local Count = 1
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
for i = 1, #PlayerList do
local CurPlayerPos = { }
local DevildomPos
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
DevildomPos = EventDevildomData["REGEN_POSITION"]
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( SEARCH_RANGE * SEARCH_RANGE ) then
PlayerAggroList[Count] = PlayerList[i]
Count = Count + 1
end
end
local EventDevildomList = { }
for i = 1, EventDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventDevildom = { }
EventDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventDevildomData["MOBINDEX"],
EventDevildomData["REGEN_POSITION"]["X"], EventDevildomData["REGEN_POSITION"]["Y"], EventDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventDevildom["Handle"] )
cAIScriptFunc ( EventDevildom["Handle"], "Entrance", "EVENT_2_REGEN_DEVILDOM_ROUTINE" )
EventDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventDevildomList[EventDevildom["Handle"]] = EventDevildom
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventDevildomList"] = EventDevildomList
local EventSDevildomList = { }
for i = 1, EventSDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventSDevildom = { }
EventSDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventSDevildomData["MOBINDEX"],
EventSDevildomData["REGEN_POSITION"]["X"], EventSDevildomData["REGEN_POSITION"]["Y"], EventSDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventSDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventSDevildom["Handle"] )
cAIScriptFunc ( EventSDevildom["Handle"], "Entrance", "EVENT_2_REGEN_SDEVILDOM_ROUTINE" )
EventSDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventSDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventSDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventSDevildomList[EventSDevildom["Handle"]] = EventSDevildom
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventSDevildomList"] = EventSDevildomList
EventMemory["EventState"] = ES_STATE["STATE_3"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_3"] then
local EventData
local DevildomList
local EventDevildomList
local EventSDevildomList
local SCtrieList
local SFocalor
local SRangeList
local HighDevildomList
EventData = EventMemory["EventData"]
DevildomList = EventData[EventMemory["EventNumber"]]["DevildomList"]
EventDevildomList = EventData[EventMemory["EventNumber"]]["EventDevildomList"]
EventSDevildomList = EventData[EventMemory["EventNumber"]]["EventSDevildomList"]
SCtrieList = EventData[EventMemory["EventNumber"]]["SCtrieList"]
SFocalor = EventData[EventMemory["EventNumber"]]["SFocalor"]
SRangeList = EventData[EventMemory["EventNumber"]]["SRangeList"]
HighDevildomList = EventData["HighDevildomList"]
if next( DevildomList ) ~= nil or next( EventDevildomList ) ~= nil or next( EventSDevildomList ) ~= nil or next( SCtrieList ) ~= nil or next( HighDevildomList ) ~= nil or next( SRangeList ) then
return
end
if SFocalor ~= nil then
return
end
EventMemory["EventState"] = ES_STATE["STATE_4"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_4"] then
local EventData
local EventMeleeData
local Melee = { }
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventMeleeData = EventData["EVENT_IMELEE"]
Melee["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], EventMeleeData["MOBINDEX"],
EventMeleeData["REGEN_POSITION"]["X"], EventMeleeData["REGEN_POSITION"]["Y"], EventMeleeData["REGEN_POSITION"]["DIR"] )
if Melee["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, Melee["Handle"] )
cAIScriptFunc ( Melee["Handle"], "Entrance", "EVENT_3_MELEE_ROUTINE" )
cSetAbstate ( Melee["Handle"], STA_MELEEATTACK, 1, 99999999 )
Melee["State"] = MONSTER_STATE["CAMERA"]
end
EventMemory["EventData"][EventMemory["EventNumber"]]["Melee"] = Melee
EventMemory["EventState"] = ES_STATE["STATE_5"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_5"] then
local MeleeData
MeleeData = EVNET_DATA[EventMemory["EventNumber"]]["EVENT_IMELEE"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = MeleeData["REGEN_POSITION"]["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = MeleeData["REGEN_POSITION"]["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( MeleeData["REGEN_POSITION"]["DIR"] + 140 )
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_6"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_6"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
CameraMove( EventMemory )
EventMemory["EventData"][EventMemory["EventNumber"]]["Melee"]["State"] = MONSTER_STATE["NORMAL"]
EventMemory["EventState"] = ES_STATE["STATE_7"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_7"] then
if EventMemory["EventData"][EventMemory["EventNumber"]]["Melee"] ~= nil then
return
end
EventMemory["ForasChief"] = nil
EventMemory["EventState"] = ES_STATE["STATE_8"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_8"] then
local PlayerList
local ForasChiefPosition
local ForasChief = { }
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
ForasChiefPosition = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]
ForasChief["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], FORAS_CHIEF["MOBINDEX"],
ForasChiefPosition["START_POS"]["X"], ForasChiefPosition["START_POS"]["Y"], ForasChiefPosition["START_POS"]["DIR"] )
if ForasChief["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, ForasChief["Handle"] )
cAIScriptFunc ( ForasChief["Handle"], "Entrance", "FORASCHIEF_ROUTINE" )
cSetAbstate ( ForasChief["Handle"], STA_IMMORTAL, 1, 99999999 )
ForasChief["FC_STATE"] = FC_STATE["MOVE"]
ForasChief["CheckTime"] = EventMemory["CurrentTime"]
if PlayerList[1] ~= nil then
ForasChief["MasterPlayer"] = PlayerList[1]
end
end
EventMemory["ForasChief"] = ForasChief
EventMemory["EventState"] = ES_STATE["STATE_9"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_9"] then
local FocusPosition
FocusPosition = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]["END_POS"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = FocusPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = FocusPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( FocusPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_10"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_10"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_11"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_11"] then
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_12"]
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
return
elseif EventMemory["EventState"] == ES_STATE["STATE_12"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
cAnimate( EventMemory["ForasChief"]["Handle"], "start", FORAS_CHIEF["ANIMATION"] )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + ANIMATION_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_13"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_13"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
local LockInfo
LockInfo = EventMemory["EventData"]["LockList"][EventMemory["EventNumber"]]
cDoorAction( LockInfo["Handle"], LockInfo["Index"], "open" )
cAnimate( EventMemory["ForasChief"]["Handle"], "stop" )
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_14"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_14"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["DoorCheckTime"] = EventMemory["CurrentTime"] + DOOR_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_15"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_15"] then
if EventMemory["DoorCheckTime"] > EventMemory["CurrentTime"] then
return
end
local DoorInfo
DoorInfo = EventMemory["EventData"]["DoorList"][EventMemory["EventNumber"]]
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" )
EventMemory["EventState"] = ES_STATE["STATE_16"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_16"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_17"]
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 1
return
elseif EventMemory["EventState"] == ES_STATE["STATE_17"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["ForasChief"]["FC_STATE"] = FC_STATE["FOLLOW"]
FaceCut( EventMemory )
return EVENT_ROUTINE_END
end
end
function EVENT_ROUTINE_4( EventMemory )
cExecCheck( "EVENT_ROUTINE_4" )
if EventMemory == nil then
return
end
if EventMemory["EventNumber"] ~= 4 then
return
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
return
elseif EventMemory["EventState"] == ES_STATE["STATE_2"] then
FaceCut( EventMemory )
FaceCut( EventMemory )
local EventData
local EventDevildomData
local EventSDevildomData
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventDevildomData = EventData["EVENT_DEVILDOM"]
EventSDevildomData = EventData["EVENT_FDEVILDOM"]
local PlayerList
local PlayerAggroList = { }
local Count = 1
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
for i = 1, #PlayerList do
local CurPlayerPos = { }
local DevildomPos
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
DevildomPos = EventDevildomData["REGEN_POSITION"]
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( SEARCH_RANGE * SEARCH_RANGE ) then
PlayerAggroList[Count] = PlayerList[i]
Count = Count + 1
end
end
local EventDevildomList = { }
for i = 1, EventDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventDevildom = { }
EventDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventDevildomData["MOBINDEX"],
EventDevildomData["REGEN_POSITION"]["X"], EventDevildomData["REGEN_POSITION"]["Y"], EventDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventDevildom["Handle"] )
cAIScriptFunc ( EventDevildom["Handle"], "Entrance", "EVENT_2_REGEN_DEVILDOM_ROUTINE" )
EventDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventDevildomList[EventDevildom["Handle"]] = EventDevildom
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventDevildomList"] = EventDevildomList
local EventSDevildomList = { }
for i = 1, EventSDevildomData["MOBCOUNT"] do
local PlayerHandle
local EventSDevildom = { }
EventSDevildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], EventSDevildomData["MOBINDEX"],
EventSDevildomData["REGEN_POSITION"]["X"], EventSDevildomData["REGEN_POSITION"]["Y"], EventSDevildomData["REGEN_POSITION"]["RADIUS"] )
if EventSDevildom["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventSDevildom["Handle"] )
cAIScriptFunc ( EventSDevildom["Handle"], "Entrance", "EVENT_2_REGEN_SDEVILDOM_ROUTINE" )
EventSDevildom["CheckTime"] = EventMemory["CurrentTime"]
EventSDevildom["MS_STATE"] = MONSTER_STATE["AGGRO"]
PlayerHandle = cRandomInt(1, #PlayerAggroList)
EventSDevildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
EventSDevildomList[EventSDevildom["Handle"]] = EventSDevildom
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventSDevildomList"] = EventSDevildomList
EventMemory["EventState"] = ES_STATE["STATE_3"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_3"] then
local EventData
local DevildomList
local EventDevildomList
local EventSDevildomList
local SCtrieList
local SFocalor
local SRangeList
local HighDevildomList
EventData = EventMemory["EventData"]
DevildomList = EventData[EventMemory["EventNumber"]]["DevildomList"]
EventDevildomList = EventData[EventMemory["EventNumber"]]["EventDevildomList"]
EventSDevildomList = EventData[EventMemory["EventNumber"]]["EventSDevildomList"]
SCtrieList = EventData[EventMemory["EventNumber"]]["SCtrieList"]
SFocalor = EventData[EventMemory["EventNumber"]]["SFocalor"]
SRangeList = EventData[EventMemory["EventNumber"]]["SRangeList"]
HighDevildomList = EventData["HighDevildomList"]
if next( DevildomList ) ~= nil or next( EventDevildomList ) ~= nil or next( EventSDevildomList ) ~= nil or next( SRangeList ) ~= nil or next( SCtrieList ) ~= nil or next( HighDevildomList ) ~= nil then
return
end
if SFocalor ~= nil then
return
end
EventMemory["ForasChief"] = nil
EventMemory["EventState"] = ES_STATE["STATE_4"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_4"] then
local EventData
local EventMeleeData
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventMeleeData = EventData["EVENT_FMELEE"]
local EventMeleeList = { }
for i = 1, #EventMeleeData["REGEN_POSITION"] do
local EventMelee = { }
EventMelee["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], EventMeleeData["MOBINDEX"],
EventMeleeData["REGEN_POSITION"][i]["X"], EventMeleeData["REGEN_POSITION"][i]["Y"], EventMeleeData["REGEN_POSITION"][i]["DIR"] )
if EventMelee["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventMelee["Handle"] )
cAIScriptFunc ( EventMelee["Handle"], "Entrance", "EVENT_TWINS_MELEE_ROUTINE" )
cSetAbstate ( EventMelee["Handle"], STA_MELEEATTACK, 1, 99999999 )
EventMelee["CheckTime"] = EventMemory["CurrentTime"]
EventMelee["MS_STATE"] = MS_STATE["CAMERA"]
EventMelee["SummonCheckTime"] = 0
EventMeleeList[EventMelee["Handle"]] = EventMelee
end
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventMeleeList"] = EventMeleeList
EventMemory["EventState"] = ES_STATE["STATE_5"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_5"] then
local MeleeData
MeleeData = EVNET_DATA[EventMemory["EventNumber"]]["EVENT_FMELEE"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = MeleeData["REGEN_POSITION"][1]["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = MeleeData["REGEN_POSITION"][1]["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( MeleeData["REGEN_POSITION"][1]["DIR"] + 180 )
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 1
EventMemory["EventState"] = ES_STATE["STATE_6"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_6"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_7"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_7"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
CameraMove( EventMemory )
for index, value in pairs( EventMemory["EventData"][EventMemory["EventNumber"]]["EventMeleeList"] ) do
value["MS_STATE"] = MS_STATE["NORMAL"]
end
EventMemory["EventState"] = ES_STATE["STATE_8"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_8"] then
local MeleeList
MeleeList = EventMemory["EventData"][EventMemory["EventNumber"]]["EventMeleeList"]
if next( MeleeList )~= nil then
return
end
EventMemory["ForasChief"] = nil
EventMemory["EventState"] = ES_STATE["STATE_9"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_9"] then
local PlayerList
local ForasChiefPosition
local ForasChief = { }
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
ForasChiefPosition = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]
ForasChief["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], FORAS_CHIEF["MOBINDEX"],
ForasChiefPosition["START_POS"]["X"], ForasChiefPosition["START_POS"]["Y"], ForasChiefPosition["START_POS"]["DIR"] )
if ForasChief["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, ForasChief["Handle"] )
cAIScriptFunc ( ForasChief["Handle"], "Entrance", "FORASCHIEF_ROUTINE" )
cSetAbstate ( ForasChief["Handle"], STA_IMMORTAL, 1, 99999999 )
ForasChief["FC_STATE"] = FC_STATE["MOVE"]
ForasChief["CheckTime"] = EventMemory["CurrentTime"]
if PlayerList[1] ~= nil then
ForasChief["MasterPlayer"] = PlayerList[1]
end
end
EventMemory["ForasChief"] = ForasChief
EventMemory["EventState"] = ES_STATE["STATE_10"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_10"] then
local FocusPosition
FocusPosition = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]["END_POS"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = FocusPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = FocusPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( FocusPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 2
EventMemory["EventState"] = ES_STATE["STATE_11"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_11"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["EventState"] = ES_STATE["STATE_12"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_12"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_13"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_13"] then
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 1
EventMemory["EventState"] = ES_STATE["STATE_14"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_14"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
cAnimate( EventMemory["ForasChief"]["Handle"], "start", FORAS_CHIEF["ANIMATION"] )
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + ANIMATION_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_15"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_15"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
local LockInfo
LockInfo = EventMemory["EventData"]["LockList"][EventMemory["EventNumber"]]
cDoorAction( LockInfo["Handle"], LockInfo["Index"], "open" )
cAnimate( EventMemory["ForasChief"]["Handle"], "stop" )
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + 3
EventMemory["EventState"] = ES_STATE["STATE_16"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_16"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["NEXT_STEP"]
CameraMove( EventMemory )
local DoorPosition
DoorPosition = DOOR_BLOCK_DATA[EventMemory["EventNumber"]]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = DoorPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = DoorPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( DoorPosition["DIR"] + 180 ) * (-1)
CameraMove( EventMemory )
EventMemory["DoorCheckTime"] = EventMemory["CurrentTime"] + DOOR_CHECK_TIME
EventMemory["EventState"] = ES_STATE["STATE_17"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_17"] then
if EventMemory["DoorCheckTime"] > EventMemory["CurrentTime"] then
return
end
local DoorInfo
DoorInfo = EventMemory["EventData"]["DoorList"][EventMemory["EventNumber"]]
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" )
EventMemory["EventState"] = ES_STATE["STATE_18"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_18"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + 1
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_19"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_19"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["ForasChief"]["FC_STATE"] = FC_STATE["FOLLOW"]
FaceCut( EventMemory )
return EVENT_ROUTINE_END
end
end
function EVENT_ROUTINE_5( EventMemory )
cExecCheck( "EVENT_ROUTINE_5" )
if EventMemory == nil then
return
end
if EventMemory["EventNumber"] ~= 5 then
return
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
if EventMemory["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CheckTime"] = EventMemory["CurrentTime"] + 1
if cGetAreaObjectList( EventMemory["MapIndex"], "Area02", ObjectType["Player"] ) == nil then
return
end
EventMemory["EventState"] = ES_STATE["STATE_2"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_2"] then
local AvanasPosition
AvanasPosition = EVNET_DATA[EventMemory["EventNumber"]]["FAVANAS"]["REGEN_POSITION"]
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["MOVE"]
EventMemory["CameraMove"]["Focus"]["X"] = AvanasPosition["X"]
EventMemory["CameraMove"]["Focus"]["Y"] = AvanasPosition["Y"]
EventMemory["CameraMove"]["Focus"]["DIR"] = ( AvanasPosition["DIR"] + 180 )
EventMemory["CheckTime"] = EventMemory["CurrentTime"] + 1
CameraMove( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_3"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_3"] then
if EventMemory["CheckTime"] > EventMemory["CurrentTime"] then
return
end
cAnimate( EventMemory["EventData"][EventMemory["EventNumber"]]["Avanas"]["Handle"], "start", "SW_FAvanas_Skill01_W_SS" )
-- <EFBFBD><EFBFBD>ų<EFBFBD>ִϸ<EFBFBD><EFBFBD>̼<EFBFBD>
EventMemory["EventState"] = ES_STATE["STATE_4"]
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + 4
return
elseif EventMemory["EventState"] == ES_STATE["STATE_4"] then
if EventMemory["CameraMove"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CameraMove"]["CameraState"] = CAMERA_STATE["REMOVE"]
CameraMove( EventMemory )
EventMemory["EventData"][EventMemory["EventNumber"]]["Avanas"]["MS_STATE"] = MS_STATE["NORMAL"]
EventMemory["EventState"] = ES_STATE["STATE_5"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_5"] then
if EventMemory["EventData"][EventMemory["EventNumber"]]["Avanas"] == nil then
EventMemory["EventState"] = ES_STATE["STATE_6"]
EventMemory["EventData"]["RegenMonsterList"] = nil
EventMemory["EventData"]["BombList"] = nil
EventMemory["EventData"][EventMemory["EventNumber"]]["AvanasGate"] = nil
return
end
if EventMemory["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["CheckTime"] = EventMemory["CurrentTime"] + 1
cSetAbstateInArea( EventMemory["MapIndex"], "StaBRNWarH", 1, 1000, "WarH_BossRoom", 22255, 12636 )
-- <EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
local Avanas
Avanas = EventMemory["EventData"][EventMemory["EventNumber"]]["Avanas"]
if cAggroListSize( Avanas["Handle"] ) == 0 then
return
end
RegenBomb( EventMemory )
if EventMemory["MonsterRegenTime"] > EventMemory["CurrentTime"] then
return
end
EventMemory["MonsterRegenTime"] = EventMemory["CurrentTime"] + 60
local EventData = { }
local FavanasGateData = { }
EventData = EVNET_DATA[EventMemory["EventNumber"]]
FavanasGateData = EventData["FAVANAS_GATE"]
local RandomInt
local AvanasGate = { }
RandomInt = cRandomInt( 1, #FavanasGateData["REGEN_POSITION"] )
AvanasGate["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], FavanasGateData["MOBINDEX"],
FavanasGateData["REGEN_POSITION"][RandomInt]["X"], FavanasGateData["REGEN_POSITION"][RandomInt]["Y"], FavanasGateData["REGEN_POSITION"][RandomInt]["DIR"] )
if AvanasGate["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, AvanasGate["Handle"] )
cAIScriptFunc ( AvanasGate["Handle"], "Entrance", "EVENT_AVANASGATE_ROUTINE" )
AvanasGate["RegenNumber"] = 1
AvanasGate["RegenTime"] = 1
AvanasGate["RegenPosition"] = { }
AvanasGate["RegenPosition"]["X"] = FavanasGateData["REGEN_POSITION"][RandomInt]["X"]
AvanasGate["RegenPosition"]["Y"] = FavanasGateData["REGEN_POSITION"][RandomInt]["Y"]
AvanasGate["RegenPosition"]["DIR"] = FavanasGateData["REGEN_POSITION"][RandomInt]["DIR"]
EventMemory["EventData"][EventMemory["EventNumber"]]["AvanasGate"] = AvanasGate
end
return
elseif EventMemory["EventState"] == ES_STATE["STATE_6"] then
FaceCut( EventMemory )
return EVENT_ROUTINE_END
end
end
function EVENT_ROUTINE_6( EventMemory )
cExecCheck( "EVENT_ROUTINE_6" )
if EventMemory == nil then
return
end
if EventMemory["EventNumber"] ~= 6 then
return
end
if EventMemory["AreaStateCheckTime"] < EventMemory["CurrentTime"] then
cSetAbstateInArea( EventMemory["MapIndex"], "StaBRNWarH", 1, 1000, "WarH_BossRoom", 22255, 12636 )
EventMemory["AreaStateCheckTime"] = EventMemory["CurrentTime"] + 1
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_2"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_2"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_3"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_3"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_4"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_4"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_5"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_5"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_6"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_6"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_7"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_7"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_8"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_8"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_9"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_9"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
FaceCut( EventMemory )
EventMemory["EventState"] = ES_STATE["STATE_10"]
return
elseif EventMemory["EventState"] == ES_STATE["STATE_10"] then
if EventMemory["FaceCut"]["CheckTime"] > EventMemory["CurrentTime"] then
return
end
cLinkToAll( EventMemory["MapIndex"], GATE_DATA["END_GATE"]["LINK"]["FIELD"], GATE_DATA["END_GATE"]["LINK"]["X"], GATE_DATA["END_GATE"]["LINK"]["Y"] )
return EVENT_ROUTINE_END
end
end
function EVENT_ROUTINE_7( EventMemory )
cExecCheck( "EVENT_ROUTINE_7" )
end
EVENT_ROUTINE = { }
EVENT_ROUTINE[1] = EVENT_ROUTINE_1
EVENT_ROUTINE[2] = EVENT_ROUTINE_2
EVENT_ROUTINE[3] = EVENT_ROUTINE_3
EVENT_ROUTINE[4] = EVENT_ROUTINE_4
EVENT_ROUTINE[5] = EVENT_ROUTINE_5
EVENT_ROUTINE[6] = EVENT_ROUTINE_6
EVENT_ROUTINE[7] = EVENT_ROUTINE_7