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.
2119 lines
32 KiB
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
|
|
|