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/WarHHEventMobRoutine.lua

2119 lines
32 KiB

require( "ID/WarHH/WarHHData" )
function GateRoutine( Handle, MapIndex )
cExecCheck( "GateRoutine" )
local EventMemory
EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
GATE_MAP_INDEX[Handle] = nil
return ReturnAI["END"]
end
if EventMemory["GateList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
GATE_MAP_INDEX[Handle] = nil
return ReturnAI["END"]
end
if EventMemory["GateList"][Handle] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
GATE_MAP_INDEX[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["END"]
end
function GateClick( NPCHandle, PlyHandle, RegistNumber )
cExecCheck( "GateClick" )
local MapIndex = GATE_MAP_INDEX[NPCHandle]
if MapIndex == nil then
return
end
EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
return
end
if EventMemory["GateList"] == nil then
return
end
local Gate = EventMemory["GateList"][NPCHandle]
if Gate == nil then
return
end
cServerMenu( PlyHandle, NPCHandle, GATE_TITLE["Start"]["Title"],
GATE_TITLE["Start"]["Yes"], "LinkToTown",
GATE_TITLE["Start"]["No"], "GateDummy")
end
function LinkToTown( NPCHandle, PlyHandle, RegistNumber )
cExecCheck( "GateClick" )
local MapIndex = GATE_MAP_INDEX[NPCHandle]
if MapIndex == nil then
return
end
EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
return
end
if EventMemory["GateList"] == nil then
return
end
local Gate = EventMemory["GateList"][NPCHandle]
if Gate == nil then
return
end
if Gate["LinkData"] == nil then
return
end
cLinkTo( PlyHandle, Gate["LinkData"]["FIELD"], Gate["LinkData"]["X"], Gate["LinkData"]["Y"] )
end
function GateDummy( NPCHandle, PlyHandle, RegistNumber )
cExecCheck( "GateDummy" )
end
function FORASCHIEF_ROUTINE( Handle, MapIndex )
cExecCheck "FORASCHIEF_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local ForasChief
ForasChief = EventMemory["ForasChief"]
if ForasChief == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
ForasChief = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
ForasChief = nil
return ReturnAI["END"]
end
if ForasChief["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["END"]
end
ForasChief["CheckTime"] = ForasChief["CheckTime"] + 1
if ForasChief["FC_STATE"] == FC_STATE["FOLLOW"] then
if ForasChief["MasterPlayer"] ~= nil then
cFollow( Handle, ForasChief["MasterPlayer"], 200, 1500 )
if cDistanceSquar( Handle, ForasChief["MasterPlayer"] ) > ( 1500 * 1500 ) then
local FindPlayer
FindPlayer = cObjectFind( Handle, 1000, ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
ForasChief["MasterPlayer"] = FindPlayer
end
end
end
elseif ForasChief["FC_STATE"] == FC_STATE["MOVE"] then
local CurrentPos = { }
local EndPos
CurrentPos["X"], CurrentPos["Y"] = cObjectLocate( Handle )
EndPos = FORAS_CHIEF["EVENT_POSITION"][EventMemory["EventNumber"]]["END_POS"]
cRunTo( Handle, EndPos["X"], EndPos["Y"] )
if cDistanceSquar( CurrentPos["X"], CurrentPos["Y"], EndPos["X"], EndPos["Y"] ) < ( 10 * 10 ) then
ForasChief["FC_STATE"] = FC_STATE["END"]
end
end
return ReturnAI["CPP"]
end
function DOORLOCK_ROUTINE( Handle, MapIndex )
cExecCheck "DOORLOCK_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local LockList
local Lock
LockList = EventData["LockList"]
if LockList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Lock = LockList[Handle]
if Lock == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
LockList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Lock = nil
LockList[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_1_FENCE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_1_FENCE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventMemory["EventNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local FenceList
local Fence
FenceList = EventData["FenceList"]
if FenceList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Fence = FenceList[Handle]
if Fence == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
FenceList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Fence = nil
FenceList[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_1_DEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_1_DEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventMemory["EventNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DevildomList
local Devildom
DevildomList = EventData["DevildomList"]
if DevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Devildom = DevildomList[Handle]
if Devildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Devildom = nil
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if EventMemory["EventState"] == ES_STATE["STATE_3"] then
if Devildom["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
local FindPlayer
FindPlayer = cObjectFind( Devildom["Handle"], 500, ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
EventMemory["EventState"] = ES_STATE["STATE_4"]
end
Devildom["CheckTime"] = Devildom["CheckTime"] + 1
end
return ReturnAI["CPP"]
end
function HIGH_DEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "HIGH_DEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local HighDevildomList
local HighDevildom
HighDevildomList = EventData["HighDevildomList"]
if HighDevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
HighDevildom = HighDevildomList[Handle]
if HighDevildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
HighDevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
HighDevildom = nil
HighDevildomList[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_1_REGEN_DEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_1_REGEN_DEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventMemory["EventNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DevildomList
local Devildom
DevildomList = EventData["EventDevildomList"]
if DevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Devildom = DevildomList[Handle]
if Devildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Devildom = nil
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if Devildom["MS_STATE"] == MONSTER_STATE["AGGRO"] then
if Devildom["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
Devildom["CheckTime"] = EventMemory["CurrentTime"] + 1
if Devildom["AggroPlayer"] == nil then
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
return
end
local PlayerPos = { }
local DevildomPos = { }
PlayerPos["X"], PlayerPos["Y"] = cObjectLocate( Devildom["AggroPlayer"] )
DevildomPos["X"], DevildomPos["Y"] = cObjectLocate( Handle )
cRunTo( Handle, PlayerPos["X"], PlayerPos["Y"] )
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], PlayerPos["X"], PlayerPos["Y"] ) < ( AGGRO_RANGE * AGGRO_RANGE ) then
cAggroSet( Handle, Devildom["AggroPlayer"], 5 )
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
end
end
return ReturnAI["CPP"]
end
function EVENT_1_REGEN_TDEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_1_REGEN_TDEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventMemory["EventNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DevildomList
local Devildom
DevildomList = EventData["EventTDevildomList"]
if DevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Devildom = DevildomList[Handle]
if Devildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Devildom = nil
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if Devildom["MS_STATE"] == MONSTER_STATE["AGGRO"] then
if Devildom["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
Devildom["CheckTime"] = EventMemory["CurrentTime"] + 1
if Devildom["AggroPlayer"] == nil then
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
return
end
local PlayerPos = { }
local DevildomPos = { }
PlayerPos["X"], PlayerPos["Y"] = cObjectLocate( Devildom["AggroPlayer"] )
DevildomPos["X"], DevildomPos["Y"] = cObjectLocate( Handle )
cRunTo( Handle, PlayerPos["X"], PlayerPos["Y"] )
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], PlayerPos["X"], PlayerPos["Y"] ) < ( AGGRO_RANGE * AGGRO_RANGE ) then
cAggroSet( Handle, Devildom["AggroPlayer"], 5 )
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
end
end
return ReturnAI["CPP"]
end
function EVENT_1_FMCORPS_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_1_FMCORPS_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventMemory["EventNumber"] ~= 1 then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local FMcorpsList
local FMcorps
FMcorpsList = EventData["FMcorpsList"]
if FMcorpsList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
FMcorps = FMcorpsList[Handle]
if FMcorps == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
FMcorpsList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
FMcorps = nil
FMcorpsList[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_2_DEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_DEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DevildomList
local Devildom
DevildomList = EventData[EventMemory["EventNumber"]]["DevildomList"]
if DevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Devildom = DevildomList[Handle]
if Devildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Devildom = nil
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if EventMemory["EventState"] == ES_STATE["STATE_1"] then
if Devildom["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
local FindPlayer
FindPlayer = cObjectFind( Devildom["Handle"], 500, ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
EventMemory["EventState"] = ES_STATE["STATE_2"]
end
Devildom["CheckTime"] = Devildom["CheckTime"] + 1
end
return ReturnAI["CPP"]
end
function EVENT_2_FMCORPS_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_FMCORPS_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local FMCorpsList
local FMCorps
FMCorpsList = EventData[EventMemory["EventNumber"]]["FMCorpsList"]
if FMCorpsList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
FMCorps = FMCorpsList[Handle]
if FMCorps == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
FMCorpsList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
FMCorps = nil
FMCorpsList[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_2_SCTRIE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_SCTRIE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["SCtrieList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["SCtrieList"][Handle] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData[EventMemory["EventNumber"]]["SCtrieList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_2_SFOCALOR_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_SFOCALOR_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["SFocalor"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData[EventMemory["EventNumber"]]["SFocalor"] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_2_SRANAGE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_SRANAGE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["SRange"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData[EventMemory["EventNumber"]]["SRange"] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_2_REGEN_DEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_REGEN_DEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DevildomList
local Devildom
DevildomList = EventData[EventMemory["EventNumber"]]["EventDevildomList"]
if DevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Devildom = DevildomList[Handle]
if Devildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Devildom = nil
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if Devildom["MS_STATE"] == MONSTER_STATE["AGGRO"] then
if Devildom["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
Devildom["CheckTime"] = EventMemory["CurrentTime"] + 1
if Devildom["AggroPlayer"] == nil then
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
return
end
local PlayerPos = { }
local DevildomPos = { }
PlayerPos["X"], PlayerPos["Y"] = cObjectLocate( Devildom["AggroPlayer"] )
DevildomPos["X"], DevildomPos["Y"] = cObjectLocate( Handle )
cRunTo( Handle, PlayerPos["X"], PlayerPos["Y"] )
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], PlayerPos["X"], PlayerPos["Y"] ) < ( AGGRO_RANGE * AGGRO_RANGE ) then
cAggroSet( Handle, Devildom["AggroPlayer"], 5 )
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
end
end
return ReturnAI["CPP"]
end
function EVENT_2_REGEN_SDEVILDOM_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_2_REGEN_SDEVILDOM_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DevildomList
local Devildom
DevildomList = EventData[EventMemory["EventNumber"]]["EventSDevildomList"]
if DevildomList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Devildom = DevildomList[Handle]
if Devildom == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
Devildom = nil
DevildomList[Handle] = nil
return ReturnAI["END"]
end
if Devildom["MS_STATE"] == MONSTER_STATE["AGGRO"] then
if Devildom["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
Devildom["CheckTime"] = EventMemory["CurrentTime"] + 1
if Devildom["AggroPlayer"] == nil then
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
return
end
local PlayerPos = { }
local DevildomPos = { }
PlayerPos["X"], PlayerPos["Y"] = cObjectLocate( Devildom["AggroPlayer"] )
DevildomPos["X"], DevildomPos["Y"] = cObjectLocate( Handle )
cRunTo( Handle, PlayerPos["X"], PlayerPos["Y"] )
if cDistanceSquar( DevildomPos["X"], DevildomPos["Y"], PlayerPos["X"], PlayerPos["Y"] ) < ( AGGRO_RANGE * AGGRO_RANGE ) then
cAggroSet( Handle, Devildom["AggroPlayer"], 5 )
Devildom["MS_STATE"] = MONSTER_STATE["NORMAL"]
end
end
return ReturnAI["CPP"]
end
function EVENT_3_SRANAGE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_3_SRANAGE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local SRangeList
local SRange
SRangeList = EventData[EventMemory["EventNumber"]]["SRangeList"]
if SRangeList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
SRange = SRangeList[Handle]
if SRange == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
SRangeList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
SRange = nil
SRangeList[Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_3_MELEE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_3_MELEE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["Melee"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData[EventMemory["EventNumber"]]["Melee"] = nil
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["Melee"]["State"] == MONSTER_STATE["CAMERA"] then
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_TWINS_MELEE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_TWINS_MELEE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventMeleeList
local EventMelee
EventMeleeList = EventData[EventMemory["EventNumber"]]["EventMeleeList"]
if EventMeleeList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
EventMelee = EventMeleeList[Handle]
if EventMelee == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
EventMeleeList[Handle] = nil
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventMelee = nil
EventMeleeList[Handle] = nil
return ReturnAI["END"]
end
if EventMelee["MS_STATE"] == MS_STATE["CAMERA"] then
return ReturnAI["END"]
end
if EventMelee["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
EventMelee["CheckTime"] = EventMemory["CurrentTime"] + 1
if EventMelee["MS_STATE"] == MS_STATE["NORMAL"] then
local size
size = TableLength ( EventMemory["EventData"][EventMemory["EventNumber"]]["EventMeleeList"] )
if size == 1 then
EventMelee["SummonCheckTime"] = EventMemory["CurrentTime"] + 30
EventMelee["MS_STATE"] = MS_STATE["SUMMON"]
cSetAbstate ( EventMelee["Handle"], "StaCount30", 1, 30000 )
end
return ReturnAI["CPP"]
elseif EventMelee["MS_STATE"] == MS_STATE["SUMMON"] then
if EventMelee["SummonCheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
local EventData
local EventMeleeData
EventData = EVNET_DATA[EventMemory["EventNumber"]]
EventMeleeData = EventData["EVENT_FMELEE"]
local EventRegenMelee = { }
EventRegenMelee["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], EventMeleeData["MOBINDEX"],
EventMeleeData["REVIVAL_POSITION"]["X"], EventMeleeData["REVIVAL_POSITION"]["Y"], EventMeleeData["REVIVAL_POSITION"]["DIR"] )
if EventRegenMelee["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, EventRegenMelee["Handle"] )
cAIScriptFunc ( EventRegenMelee["Handle"], "Entrance", "EVENT_TWINS_MELEE_ROUTINE" )
EventRegenMelee["CheckTime"] = EventMemory["CurrentTime"]
EventRegenMelee["MS_STATE"] = MS_STATE["NORMAL"]
EventRegenMelee["SummonCheckTime"] = 0
end
EventMemory["EventData"][EventMemory["EventNumber"]]["EventMeleeList"][EventRegenMelee["Handle"]] = EventRegenMelee
EventMelee["MS_STATE"] = MS_STATE["NORMAL"]
return
end
return ReturnAI["CPP"]
end
function EVENT_AVANAS_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_AVANAS_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["Avanas"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData[EventMemory["EventNumber"]]["Avanas"] = nil
return ReturnAI["END"]
end
if EventData[EventMemory["EventNumber"]]["Avanas"]["MS_STATE"] == MS_STATE["CAMERA"] then
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EVENT_AVANASGATE_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_AVANASGATE_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventMemoryData
EventMemoryData = EventMemory["EventData"]
if EventMemoryData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local AvanasGate
AvanasGate = EventMemoryData[EventMemory["EventNumber"]]["AvanasGate"]
if AvanasGate == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventMemoryData[EventMemory["EventNumber"]]["AvanasGate"] = nil
return ReturnAI["END"]
end
if AvanasGate["RegenTime"] > EventMemory["CurrentTime"] then
return
end
local PlayerList
local PlayerAggroList = { }
local Count = 1
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
for i = 1, #PlayerList do
local CurPlayerPos = { }
local AvanasGatePos
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
if cDistanceSquar( AvanasGate["RegenPosition"]["X"], AvanasGate["RegenPosition"]["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( SEARCH_RANGE * SEARCH_RANGE ) then
PlayerAggroList[Count] = PlayerList[i]
Count = Count + 1
end
end
local RegenMosterData = EVNET_DATA[EventMemory["EventNumber"]]["FAVANAS_GATE"]["REGEN_MONSTER"][AvanasGate["RegenNumber"]]
local RegenMonster = { }
local PlayerHandle
RegenMonster["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], RegenMosterData["MOBINDEX"],
AvanasGate["RegenPosition"]["X"], AvanasGate["RegenPosition"]["Y"], AvanasGate["RegenPosition"]["DIR"] )
if RegenMonster["Handle"] ~= nil then
cSetAIScript ( SCRIPT_MAIN, RegenMonster["Handle"] )
cAIScriptFunc ( RegenMonster["Handle"], "Entrance", "EVENT_REGENMONSTER_ROUTINE" )
RegenMonster["DeleteTime"] = EventMemory["CurrentTime"] + 60
PlayerHandle = cRandomInt(1, #PlayerAggroList)
RegenMonster["AggroPlayer"] = PlayerAggroList[PlayerHandle]
RegenMonster["MS_STATE"] = MONSTER_STATE["AGGRO"]
RegenMonster["CheckTime"] = EventMemory["CurrentTime"]
cSetNPCIsItemDrop( RegenMonster["Handle"], 0 )
EventMemory["EventData"]["RegenMonsterList"][RegenMonster["Handle"]] = RegenMonster
end
AvanasGate["RegenTime"] = EventMemory["CurrentTime"] + RegenMosterData["REGEN_TIME"]
AvanasGate["RegenNumber"] = AvanasGate["RegenNumber"] + 1
if AvanasGate["RegenNumber"] > #EVNET_DATA[EventMemory["EventNumber"]]["FAVANAS_GATE"]["REGEN_MONSTER"] then
EventMemory["EventData"][EventMemory["EventNumber"]]["AvanasGate"] = nil
end
return ReturnAI["CPP"]
end
function EVENT_REGENMONSTER_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_REGENMONSTER_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RegenMonsterList
local RegenMonster
RegenMonsterList = EventData["RegenMonsterList"]
if RegenMonsterList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
RegenMonster = RegenMonsterList[Handle]
if RegenMonster == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData[EventMemory["EventNumber"]]["RegenMonsterList"][Handle] = nil
return ReturnAI["END"]
end
if RegenMonster["MS_STATE"] == MONSTER_STATE["AGGRO"] then
if RegenMonster["CheckTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
RegenMonster["CheckTime"] = EventMemory["CurrentTime"] + 1
if RegenMonster["AggroPlayer"] == nil then
RegenMonster["MS_STATE"] = MONSTER_STATE["NORMAL"]
return
end
local PlayerPos = { }
local RegenMonsterPos = { }
PlayerPos["X"], PlayerPos["Y"] = cObjectLocate( RegenMonster["AggroPlayer"] )
RegenMonsterPos["X"], RegenMonsterPos["Y"] = cObjectLocate( Handle )
cRunTo( Handle, PlayerPos["X"], PlayerPos["Y"] )
if cDistanceSquar( RegenMonsterPos["X"], RegenMonsterPos["Y"], PlayerPos["X"], PlayerPos["Y"] ) < ( AGGRO_RANGE * AGGRO_RANGE ) then
cAggroSet( Handle, RegenMonster["AggroPlayer"], 5 )
RegenMonster["MS_STATE"] = MONSTER_STATE["NORMAL"]
end
elseif RegenMonster["MS_STATE"] == MONSTER_STATE["NORMAL"] then
if RegenMonster["DeleteTime"] > EventMemory["CurrentTime"] then
return ReturnAI["CPP"]
end
EventMemory["EventData"]["RegenMonsterList"][Handle] = nil
end
return ReturnAI["CPP"]
end
function EVENT_BOMB_ROUTINE( Handle, MapIndex )
cExecCheck "EVENT_BOMB_ROUTINE"
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData
EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local BombList
local Bomb
BombList = EventData["BombList"]
if BombList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
Bomb = BombList[Handle]
if Bomb == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData["BombList"][Handle] = nil
return ReturnAI["END"]
end
if Bomb["MonsterState"] == MS_STATE["NORMAL"] then
if Bomb["CheckTime"] > EventMemory["CurrentTime"] then
return
end
local X, Y = cObjectLocate( Bomb["Handle"] )
local TargetList = { cGetTargetList( Bomb["Handle"], X, Y, BOMB_DATA["RADIUS"] ) }
for i = 1, #TargetList do
cDamaged( TargetList[i], BOMB_DATA["DAMAGE"], Bomb["Handle"] )
end
Bomb["MonsterState"] = MS_STATE["DEAD"]
Bomb["CheckTime"] = EventMemory["CurrentTime"] + 5
return
elseif Bomb["MonsterState"] == MS_STATE["DEAD"] then
if Bomb["CheckTime"] > EventMemory["CurrentTime"] then
return
end
EventData["BombList"][Handle] = nil
return
end
return ReturnAI["CPP"]
end