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.
935 lines
23 KiB
935 lines
23 KiB
require( "ID/WarLH/WarLHData" )
|
|
|
|
GATE_MAP_INDEX = { }
|
|
|
|
function MAPMARK( EventMemory )
|
|
cExecCheck( "MAPMARK" )
|
|
|
|
if EventMemory == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
local MapMarkTable = { }
|
|
local Num = 0
|
|
|
|
|
|
if EventMemory["DoorList"] ~= nil then
|
|
|
|
for index, value in pairs( EventMemory["DoorList"] ) do
|
|
|
|
if value["X"] ~= 0 and value["Y"] ~= 0
|
|
then
|
|
|
|
local MapMark = { }
|
|
|
|
MapMark["Group"] = MAP_MARK_DATA["DOOR"]["GROUP"] + Num
|
|
MapMark["x"] = value["X"]
|
|
MapMark["y"] = value["Y"]
|
|
MapMark["KeepTime"] = MAP_MARK_DATA["DOOR"]["KEEPTIME"]
|
|
MapMark["IconIndex"] = MAP_MARK_DATA["DOOR"]["ICON"]
|
|
|
|
MapMarkTable[MapMark["Group"]] = MapMark
|
|
|
|
Num = Num + 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if EventMemory["StartGate"] ~= nil then
|
|
|
|
local MapMark = { }
|
|
|
|
MapMark["Group"] = MAP_MARK_DATA["LINKTOWN"]["GROUP"]
|
|
MapMark["x"] = GATE_DATA["START_GATE"]["REGEN_POSITION"]["X"]
|
|
MapMark["y"] = GATE_DATA["START_GATE"]["REGEN_POSITION"]["Y"]
|
|
MapMark["KeepTime"] = MAP_MARK_DATA["LINKTOWN"]["KEEPTIME"]
|
|
MapMark["IconIndex"] = MAP_MARK_DATA["LINKTOWN"]["ICON"]
|
|
|
|
MapMarkTable[MapMark["Group"]] = MapMark
|
|
|
|
end
|
|
|
|
if EventMemory["EndGate"] ~= nil then
|
|
|
|
local MapMark = { }
|
|
|
|
MapMark["Group"] = MAP_MARK_DATA["LINKTOWN"]["GROUP"] + 2
|
|
MapMark["x"] = GATE_DATA["END_GATE"]["REGEN_POSITION"]["X"]
|
|
MapMark["y"] = GATE_DATA["END_GATE"]["REGEN_POSITION"]["Y"]
|
|
MapMark["KeepTime"] = MAP_MARK_DATA["LINKTOWN"]["KEEPTIME"]
|
|
MapMark["IconIndex"] = MAP_MARK_DATA["LINKTOWN"]["ICON"]
|
|
|
|
MapMarkTable[MapMark["Group"]] = MapMark
|
|
|
|
end
|
|
|
|
cMapMark( EventMemory["MapIndex"], MapMarkTable )
|
|
|
|
end
|
|
|
|
|
|
function PlayerMapLogin( Field, Player )
|
|
|
|
local EventMemory = InstanceField[Field]
|
|
|
|
if EventMemory == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
cMapObjectControl( EventMemory["MapIndex"], "L_Line", EventMemory["ObjectState"]["L_Line"], 1 )
|
|
cMapObjectControl( EventMemory["MapIndex"], "R_Line", EventMemory["ObjectState"]["R_Line"], 1 )
|
|
|
|
MAPMARK( EventMemory )
|
|
|
|
end
|
|
|
|
|
|
|
|
function DOOR_N_GATE_CREATE( EventMemory )
|
|
cExecCheck( "DOOR_N_GATE_CREATE" )
|
|
|
|
EventMemory["StartGate"] = { }
|
|
|
|
local DoorList = { }
|
|
local DoorCount = 1
|
|
local Gate = { }
|
|
|
|
for index, value in pairs( DOOR_BLOCK_DATA ) do
|
|
|
|
local Door = { }
|
|
|
|
|
|
Door["Handle"] = cDoorBuild( EventMemory["MapIndex"], value["DOOR_INDEX"],
|
|
value["REGEN_POSITION"]["X"], value["REGEN_POSITION"]["Y"], value["REGEN_POSITION"]["DIR"], 1000 )
|
|
|
|
if Door["Handle"] ~= nil then
|
|
|
|
Door["Index"] = value["DOOR_BLOCK"]
|
|
Door["X"] = value["REGEN_POSITION"]["X"]
|
|
Door["Y"] = value["REGEN_POSITION"]["Y"]
|
|
DoorList[DoorCount] = Door
|
|
DoorCount = DoorCount + 1
|
|
cDoorAction( Door["Handle"], Door["Index"], "close" )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
Gate["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], GATE_DATA["START_GATE"]["GATE_INDEX"],
|
|
GATE_DATA["START_GATE"]["REGEN_POSITION"]["X"], GATE_DATA["START_GATE"]["REGEN_POSITION"]["Y"], GATE_DATA["START_GATE"]["REGEN_POSITION"]["DIR"] )
|
|
|
|
|
|
if Gate["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Gate["Handle"] )
|
|
cAIScriptFunc ( Gate["Handle"], "Entrance", "GateRoutine" )
|
|
cAIScriptFunc ( Gate["Handle"], "NPCClick", "GateClick" )
|
|
GATE_MAP_INDEX[Gate["Handle"]] = EventMemory["MapIndex"]
|
|
|
|
end
|
|
|
|
EventMemory["StartGate"] = Gate
|
|
EventMemory["DoorList"] = DoorList
|
|
|
|
end
|
|
|
|
|
|
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["StartGate"] == nil then
|
|
|
|
cAIScriptSet( Handle )
|
|
cNPCVanish( Handle )
|
|
GATE_MAP_INDEX[Handle] = nil
|
|
|
|
return ReturnAI["END"]
|
|
|
|
end
|
|
|
|
if EventMemory["StartGate"]["Handle"] == nil then
|
|
|
|
cAIScriptSet( Handle )
|
|
cNPCVanish( Handle )
|
|
EventMemory["StartGate"] = nil
|
|
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
|
|
|
|
if InstanceField[MapIndex] == nil then
|
|
return
|
|
end
|
|
|
|
cServerMenu( PlyHandle, NPCHandle, GATE_TITLE["Start"]["Title"],
|
|
GATE_TITLE["Start"]["Yes"], "LinkToTownStart",
|
|
GATE_TITLE["Start"]["No"], "GateDummy")
|
|
|
|
end
|
|
|
|
|
|
function LinkToTownStart( NPCHandle, PlyHandle, RegistNumber )
|
|
cExecCheck( "LinkToStart" )
|
|
|
|
local MapIndex = GATE_MAP_INDEX[NPCHandle]
|
|
|
|
if MapIndex == nil then
|
|
return
|
|
|
|
end
|
|
|
|
|
|
local EventMemory
|
|
|
|
|
|
EventMemory = InstanceField[MapIndex]
|
|
|
|
if EventMemory == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if EventMemory["StartGate"] == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
cLinkTo( PlyHandle, GATE_DATA["START_GATE"]["LINK"]["FIELD"], GATE_DATA["START_GATE"]["LINK"]["X"], GATE_DATA["START_GATE"]["LINK"]["Y"] )
|
|
end
|
|
|
|
|
|
function GateDummy( NPCHandle, PlyHandle, RegistNumber )
|
|
cExecCheck( "GateDummy" )
|
|
|
|
|
|
end
|
|
|
|
|
|
function EVNET_NO1_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local ForasChiefData = { }
|
|
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
ForasChiefData = EventData["FORASCHIEF"]
|
|
|
|
|
|
|
|
local ForasChief = { }
|
|
|
|
|
|
ForasChief["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], ForasChiefData["MOBINDEX"],
|
|
ForasChiefData["REGENPOSITION"]["X"], ForasChiefData["REGENPOSITION"]["Y"], ForasChiefData["REGENPOSITION"]["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["Dialog1"]
|
|
ForasChief["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
ForasChief["FollowDistance"] = ForasChiefData["FOLLOWDISTANCE"]
|
|
ForasChief["DialogData"] = ForasChiefData["DIALOGINFO"]
|
|
ForasChief["MasterPlayer"] = nil
|
|
ForasChief["DelayTime"] = EventMemory["CurrentTime"] + ForasChiefData["DELAYTIME"]
|
|
|
|
end
|
|
|
|
EventMemory["ForasChief"] = ForasChief
|
|
|
|
end
|
|
|
|
|
|
function EVNET_NO2_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local DavildomData = { }
|
|
local DavildomList = { }
|
|
local PlayerList
|
|
local PlayerAggroList = { }
|
|
local Count = 1
|
|
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
DavildomData = EventData["DAVILDOM"]
|
|
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
|
|
|
|
|
|
for i = 1, #PlayerList do
|
|
|
|
local CurPlayerPos = { }
|
|
local DavildomPos = { }
|
|
|
|
|
|
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
|
|
DavildomPos = DavildomData["REGENPOSITION"]
|
|
|
|
if cDistanceSquar( DavildomPos["X"], DavildomPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( DavildomData["SEARCH_RANGE"] * DavildomData["SEARCH_RANGE"] ) then
|
|
|
|
PlayerAggroList[Count] = PlayerList[i]
|
|
Count = Count + 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
for i = 1, DavildomData["MOBCOUNT"] do
|
|
|
|
local Davildom = { }
|
|
|
|
|
|
Davildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], DavildomData["MOBINDEX"],
|
|
DavildomData["REGENPOSITION"]["X"], DavildomData["REGENPOSITION"]["Y"], DavildomData["REGENPOSITION"]["RADIUS"] )
|
|
|
|
if Davildom["Handle"] ~= nil then
|
|
|
|
local PlayerHandle
|
|
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
|
|
cAIScriptFunc ( Davildom["Handle"], "Entrance", "EVENT_NO2_DAVILDOM_ROUTINE" )
|
|
|
|
|
|
Davildom["AggroDistance"] = DavildomData["AGGRO_DISTANCE"]
|
|
Davildom["D_State"] = D_STATE["Aggro"]
|
|
Davildom["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
PlayerHandle = cRandomInt(1, #PlayerAggroList)
|
|
Davildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
|
|
|
|
end
|
|
|
|
DavildomList[Davildom["Handle"]] = Davildom
|
|
|
|
end
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = DavildomList
|
|
|
|
end
|
|
|
|
function EVNET_NO3_INIT_FUNC( EventMemory )
|
|
|
|
local PlayerList
|
|
local EventData = { }
|
|
local DavildomData = { }
|
|
local DavildomList = { }
|
|
local PlayerAggroList = { }
|
|
local Count = 1
|
|
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
DavildomData = EventData["DAVILDOM"]
|
|
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
|
|
|
|
|
|
for i = 1, #PlayerList do
|
|
|
|
local CurPlayerPos = { }
|
|
local DavildomPos = { }
|
|
|
|
|
|
CurPlayerPos["X"], CurPlayerPos["Y"] = cObjectLocate( PlayerList[i] )
|
|
DavildomPos = DavildomData["REGENPOSITION"]
|
|
|
|
if cDistanceSquar( DavildomPos["X"], DavildomPos["Y"], CurPlayerPos["X"], CurPlayerPos["Y"] ) < ( DavildomData["SEARCH_RANGE"] * DavildomData["SEARCH_RANGE"] ) then
|
|
|
|
PlayerAggroList[Count] = PlayerList[i]
|
|
Count = Count + 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
for i = 1, DavildomData["MOBCOUNT"] do
|
|
|
|
local Davildom = { }
|
|
|
|
|
|
Davildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], DavildomData["MOBINDEX"],
|
|
DavildomData["REGENPOSITION"]["X"], DavildomData["REGENPOSITION"]["Y"], DavildomData["REGENPOSITION"]["RADIUS"] )
|
|
|
|
if Davildom["Handle"] ~= nil then
|
|
|
|
local PlayerHandle
|
|
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
|
|
cAIScriptFunc ( Davildom["Handle"], "Entrance", "EVENT_NO3_DAVILDOM_ROUTINE" )
|
|
|
|
|
|
Davildom["AggroDistance"] = DavildomData["AGGRO_DISTANCE"]
|
|
Davildom["D_State"] = D_STATE["Aggro"]
|
|
Davildom["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
PlayerHandle = cRandomInt(1, #PlayerAggroList)
|
|
Davildom["AggroPlayer"] = PlayerAggroList[PlayerHandle]
|
|
|
|
end
|
|
|
|
DavildomList[Davildom["Handle"]] = Davildom
|
|
|
|
end
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = DavildomList
|
|
|
|
end
|
|
|
|
function EVNET_NO4_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local BrainWashData = { }
|
|
local BrainWash = { }
|
|
local PForasData = { }
|
|
local PForasList = { }
|
|
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
BrainWashData = EventData["BRAINWASH"]
|
|
BrainWash["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], BrainWashData["MOBINDEX"],
|
|
BrainWashData["REGENPOSITION"]["X"], BrainWashData["REGENPOSITION"]["Y"], BrainWashData["REGENPOSITION"]["DIR"] )
|
|
|
|
if BrainWash["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, BrainWash["Handle"] )
|
|
cAIScriptFunc ( BrainWash["Handle"], "Entrance", "BRAINWASH_ROUTINE" )
|
|
cAIScriptFunc ( BrainWash["Handle"], "MobDamaged", "BRAINWASH_DAMAGED" )
|
|
cSetNPCParam ( BrainWash["Handle"], "HPRegen", 0 )
|
|
|
|
BrainWash["BW_State"] = BW_SATATE["BrainWash"]
|
|
BrainWash["Damage"] = BrainWashData["DAMAGE"]
|
|
|
|
local CurHP, MaxHP = cObjectHP( BrainWash["Handle"] )
|
|
|
|
BrainWash["BaseDamage"] = MaxHP / 100 * 8
|
|
|
|
end
|
|
|
|
EventMemory["BrainWash"] = BrainWash
|
|
|
|
|
|
PForasData = EventData["PFORAS"]
|
|
|
|
for i = 1, #PForasData do
|
|
|
|
local PForas = { }
|
|
|
|
|
|
PForas["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], PForasData[i]["MOBINDEX"],
|
|
PForasData[i]["REGENPOSITION"]["X"], PForasData[i]["REGENPOSITION"]["Y"], PForasData[i]["REGENPOSITION"]["DIR"] )
|
|
|
|
if PForas["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, PForas["Handle"] )
|
|
cAIScriptFunc ( PForas["Handle"], "Entrance", "PFORAS_ROUTINE" )
|
|
cSetAbstate ( PForas["Handle"], STA_IMMORTAL, 1, 99999999 )
|
|
PForas["PF_State"] = PF_STATE["STUN"]
|
|
PForasList[PForas["Handle"]] = PForas
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
EventMemory["PForasList"] = PForasList
|
|
EventMemory["PForasState"] = PF_STATE["STUN"]
|
|
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["RegenCheckTime"] = EventMemory["CurrentTime"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["RegenDavildomCount"] = 1
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = { }
|
|
|
|
end
|
|
|
|
function EVNET_NO5_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local ForasData = { }
|
|
local PoreData = { }
|
|
local DavildomData = { }
|
|
local ForasList = { }
|
|
local DavildomList = { }
|
|
local Pore = { }
|
|
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
ForasData = EventData["FORAS"]
|
|
DavildomData = EventData["DAVILDOM"]
|
|
PoreData = EventData["PORE"]
|
|
|
|
|
|
for i = 1, DavildomData["MOBCOUNT"] do
|
|
|
|
local Davildom = { }
|
|
|
|
|
|
Davildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], DavildomData["MOBINDEX"],
|
|
DavildomData["REGENPOSITION"]["X"], DavildomData["REGENPOSITION"]["Y"], DavildomData["REGENPOSITION"]["RADIUS"] )
|
|
|
|
if Davildom["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
|
|
cAIScriptFunc ( Davildom["Handle"], "Entrance", "EVENT_NO5_DAVILDOM_ROUTINE" )
|
|
|
|
Davildom["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
Davildom["AggroRange"] = DavildomData["AGGRO_RANGE"]
|
|
|
|
end
|
|
|
|
DavildomList[Davildom["Handle"]] = Davildom
|
|
|
|
end
|
|
|
|
|
|
|
|
for i = 1, ForasData["MOBCOUNT"] do
|
|
|
|
local Foras = { }
|
|
|
|
|
|
Foras["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], ForasData["MOBINDEX"],
|
|
ForasData["REGENPOSITION"]["X"], ForasData["REGENPOSITION"]["Y"], ForasData["REGENPOSITION"]["RADIUS"] )
|
|
|
|
if Foras["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Foras["Handle"] )
|
|
cAIScriptFunc ( Foras["Handle"], "Entrance", "EVENT_NO5_FORAS_ROUTINE" )
|
|
|
|
Foras["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
Foras["AggroRange"] = ForasData["AGGRO_RANGE"]
|
|
|
|
end
|
|
|
|
ForasList[Foras["Handle"]] = Foras
|
|
|
|
end
|
|
|
|
local DoorInfo
|
|
|
|
|
|
DoorInfo = EventMemory["DoorList"][4]
|
|
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" )
|
|
Pore["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], PoreData["MOBINDEX"],
|
|
PoreData["REGENPOSITION"]["X"], PoreData["REGENPOSITION"]["Y"], PoreData["REGENPOSITION"]["DIR"] )
|
|
|
|
if Pore["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Pore["Handle"] )
|
|
cAIScriptFunc ( Pore["Handle"], "Entrance", "PORE_ROUTINE" )
|
|
cAIScriptFunc ( Pore["Handle"], "MobDamaged", "PORE_DAMAGED" )
|
|
cSetNPCParam ( Pore["Handle"], "HPRegen", 0 )
|
|
|
|
|
|
Pore["PR_State"] = PR_STATE["Normal"]
|
|
Pore["Damage"] = PoreData["DAMAGE"]
|
|
|
|
local CurHP, MaxHP = cObjectHP( Pore["Handle"] )
|
|
|
|
Pore["BaseDamage"] = MaxHP / 100 * 8
|
|
|
|
|
|
end
|
|
|
|
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "close" )
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["RSState"] = RS_STATE["Aggro"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = DavildomList
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["ForasList"] = ForasList
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["Pore"] = Pore
|
|
|
|
end
|
|
|
|
|
|
function EVNET_NO6_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local CitrieData = { }
|
|
local Citrie = { }
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
CitrieData = EventData["CITRIE"]
|
|
|
|
Citrie["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], CitrieData["MOBINDEX"],
|
|
CitrieData["REGENPOSITION"]["X"], CitrieData["REGENPOSITION"]["Y"], CitrieData["REGENPOSITION"]["DIR"] )
|
|
|
|
if Citrie["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Citrie["Handle"] )
|
|
cAIScriptFunc ( Citrie["Handle"], "Entrance", "EVNET_NO6_CITRIE_ROUTINE" )
|
|
|
|
Citrie["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
Citrie["AggroRange"] = CitrieData["AGGRO_RANGE"]
|
|
Citrie["C_State"] = CT_STATE["Aggro"]
|
|
|
|
end
|
|
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["RegenTime"] = EventMemory["CurrentTime"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["Citrie"] = Citrie
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = { }
|
|
|
|
end
|
|
|
|
|
|
function EVNET_NO7_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local ForasData = { }
|
|
local PoreData = { }
|
|
local DavildomData = { }
|
|
local ForasList = { }
|
|
local DavildomList = { }
|
|
local Pore = { }
|
|
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
ForasData = EventData["FORAS"]
|
|
DavildomData = EventData["DAVILDOM"]
|
|
PoreData = EventData["PORE"]
|
|
|
|
|
|
for i = 1, DavildomData["MOBCOUNT"] do
|
|
|
|
local Davildom = { }
|
|
|
|
|
|
Davildom["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], DavildomData["MOBINDEX"],
|
|
DavildomData["REGENPOSITION"]["X"], DavildomData["REGENPOSITION"]["Y"], DavildomData["REGENPOSITION"]["RADIUS"] )
|
|
|
|
if Davildom["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Davildom["Handle"] )
|
|
cAIScriptFunc ( Davildom["Handle"], "Entrance", "EVENT_NO7_DAVILDOM_ROUTINE" )
|
|
|
|
Davildom["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
Davildom["AggroRange"] = DavildomData["AGGRO_RANGE"]
|
|
|
|
end
|
|
|
|
DavildomList[Davildom["Handle"]] = Davildom
|
|
|
|
end
|
|
|
|
|
|
|
|
for i = 1, ForasData["MOBCOUNT"] do
|
|
|
|
local Foras = { }
|
|
|
|
|
|
Foras["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], ForasData["MOBINDEX"],
|
|
ForasData["REGENPOSITION"]["X"], ForasData["REGENPOSITION"]["Y"], ForasData["REGENPOSITION"]["RADIUS"] )
|
|
|
|
if Foras["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Foras["Handle"] )
|
|
cAIScriptFunc ( Foras["Handle"], "Entrance", "EVENT_NO7_FORAS_ROUTINE" )
|
|
|
|
Foras["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
Foras["AggroRange"] = ForasData["AGGRO_RANGE"]
|
|
|
|
end
|
|
|
|
ForasList[Foras["Handle"]] = Foras
|
|
|
|
end
|
|
|
|
|
|
local DoorInfo
|
|
|
|
|
|
DoorInfo = EventMemory["DoorList"][5]
|
|
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "open" )
|
|
Pore["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], PoreData["MOBINDEX"],
|
|
PoreData["REGENPOSITION"]["X"], PoreData["REGENPOSITION"]["Y"], PoreData["REGENPOSITION"]["DIR"] )
|
|
|
|
if Pore["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Pore["Handle"] )
|
|
cAIScriptFunc ( Pore["Handle"], "Entrance", "PORE_ROUTINE" )
|
|
cAIScriptFunc ( Pore["Handle"], "MobDamaged", "PORE_DAMAGED" )
|
|
cSetNPCParam ( Pore["Handle"], "HPRegen", 0 )
|
|
|
|
|
|
Pore["PR_State"] = PR_STATE["Normal"]
|
|
Pore["Damage"] = PoreData["DAMAGE"]
|
|
|
|
local CurHP, MaxHP = cObjectHP( Pore["Handle"] )
|
|
|
|
Pore["BaseDamage"] = MaxHP / 100 * 8
|
|
|
|
end
|
|
|
|
cDoorAction( DoorInfo["Handle"], DoorInfo["Index"], "close" )
|
|
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["RSState"] = RS_STATE["Aggro"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = DavildomList
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["ForasList"] = ForasList
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["Pore"] = Pore
|
|
|
|
end
|
|
|
|
function EVNET_NO8_INIT_FUNC( EventMemory )
|
|
|
|
local EventData = { }
|
|
local CitrieData = { }
|
|
local Citrie = { }
|
|
|
|
EventData = EVNET_DATA[EventMemory["EventNumber"]]
|
|
CitrieData = EventData["CITRIE"]
|
|
|
|
Citrie["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], CitrieData["MOBINDEX"],
|
|
CitrieData["REGENPOSITION"]["X"], CitrieData["REGENPOSITION"]["Y"], CitrieData["REGENPOSITION"]["DIR"] )
|
|
|
|
if Citrie["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Citrie["Handle"] )
|
|
cAIScriptFunc ( Citrie["Handle"], "Entrance", "EVNET_NO8_CITRIE_ROUTINE" )
|
|
|
|
Citrie["CheckTime"] = EventMemory["CurrentTime"] + 1
|
|
Citrie["AggroRange"] = CitrieData["AGGRO_RANGE"]
|
|
Citrie["C_State"] = CT_STATE["Aggro"]
|
|
|
|
end
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["RegenTime"] = EventMemory["CurrentTime"]
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["Citrie"] = Citrie
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"]["DavildomList"] = { }
|
|
|
|
end
|
|
|
|
function EVNET_NO9_INIT_FUNC( EventMemory )
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
end
|
|
|
|
function EVNET_NO10_INIT_FUNC( EventMemory )
|
|
|
|
EventMemory[EventMemory["EventNumber"]] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventData"] = { }
|
|
EventMemory[EventMemory["EventNumber"]]["EventState"] = ES_STATE["State1"]
|
|
|
|
|
|
EventMemory["EndGate"] = { }
|
|
|
|
|
|
local EndGateData = { }
|
|
local EndGate = { }
|
|
|
|
|
|
EndGateData = GATE_DATA["END_GATE"]
|
|
EndGate["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], EndGateData["GATE_INDEX"],
|
|
EndGateData["REGEN_POSITION"]["X"],
|
|
EndGateData["REGEN_POSITION"]["Y"],
|
|
EndGateData["REGEN_POSITION"]["DIR"] )
|
|
|
|
if EndGate["Handle"] ~= nil then
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, EndGate["Handle"] )
|
|
cAIScriptFunc ( EndGate["Handle"], "Entrance", "EndGateRoutine" )
|
|
cAIScriptFunc ( EndGate["Handle"], "NPCClick", "EndGateClick" )
|
|
|
|
end
|
|
|
|
|
|
GATE_MAP_INDEX[EndGate["Handle"]] = EventMemory["MapIndex"]
|
|
EventMemory["EndGate"] = EndGate
|
|
|
|
MAPMARK( EventMemory )
|
|
|
|
end
|
|
|
|
|
|
function EndGateRoutine( Handle, MapIndex )
|
|
cExecCheck( "EndGateRoutine" )
|
|
|
|
local EventMemory
|
|
|
|
|
|
EventMemory = InstanceField[MapIndex]
|
|
|
|
if EventMemory == nil then
|
|
|
|
cAIScriptSet( Handle )
|
|
cNPCVanish( Handle )
|
|
GATE_MAP_INDEX[Handle] = nil
|
|
|
|
return ReturnAI["END"]
|
|
|
|
end
|
|
|
|
if EventMemory["EndGate"] == nil then
|
|
|
|
cAIScriptSet( Handle )
|
|
cNPCVanish( Handle )
|
|
GATE_MAP_INDEX[Handle] = nil
|
|
|
|
return ReturnAI["END"]
|
|
|
|
end
|
|
|
|
if EventMemory["EndGate"]["Handle"] == nil then
|
|
|
|
cAIScriptSet( Handle )
|
|
cNPCVanish( Handle )
|
|
EventMemory["EndGate"] = nil
|
|
GATE_MAP_INDEX[Handle] = nil
|
|
|
|
return ReturnAI["END"]
|
|
|
|
end
|
|
|
|
|
|
return ReturnAI["END"]
|
|
|
|
end
|
|
|
|
|
|
function EndGateClick( NPCHandle, PlyHandle, RegistNumber )
|
|
cExecCheck( "EndGateClick" )
|
|
|
|
local MapIndex = GATE_MAP_INDEX[NPCHandle]
|
|
|
|
if MapIndex == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if InstanceField[MapIndex] == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if InstanceField[MapIndex]["EndGate"] == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
cServerMenu( PlyHandle, NPCHandle, GATE_TITLE["End"]["Title"],
|
|
GATE_TITLE["End"]["Yes"], "LinkToTownEnd",
|
|
GATE_TITLE["End"]["No"], "GateDummy")
|
|
end
|
|
|
|
|
|
function LinkToTownEnd( NPCHandle, PlyHandle, RegistNumber )
|
|
cExecCheck( "LinkToTownEnd" )
|
|
|
|
local MapIndex = GATE_MAP_INDEX[NPCHandle]
|
|
|
|
if MapIndex == nil then
|
|
return
|
|
|
|
end
|
|
|
|
|
|
local EventMemory
|
|
|
|
|
|
EventMemory = InstanceField[MapIndex]
|
|
|
|
if EventMemory == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
if EventMemory["EndGate"] == nil then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
cLinkTo( PlyHandle, GATE_DATA["END_GATE"]["LINK"]["FIELD"], GATE_DATA["END_GATE"]["LINK"]["X"], GATE_DATA["END_GATE"]["LINK"]["Y"] )
|
|
|
|
end
|
|
|
|
|
|
EVENT_INIT_FUNC = { }
|
|
|
|
EVENT_INIT_FUNC[1] = EVNET_NO1_INIT_FUNC
|
|
EVENT_INIT_FUNC[2] = EVNET_NO2_INIT_FUNC
|
|
EVENT_INIT_FUNC[3] = EVNET_NO3_INIT_FUNC
|
|
EVENT_INIT_FUNC[4] = EVNET_NO4_INIT_FUNC
|
|
EVENT_INIT_FUNC[5] = EVNET_NO5_INIT_FUNC
|
|
EVENT_INIT_FUNC[6] = EVNET_NO6_INIT_FUNC
|
|
EVENT_INIT_FUNC[7] = EVNET_NO7_INIT_FUNC
|
|
EVENT_INIT_FUNC[8] = EVNET_NO8_INIT_FUNC
|
|
EVENT_INIT_FUNC[9] = EVNET_NO9_INIT_FUNC
|
|
EVENT_INIT_FUNC[10] = EVNET_NO10_INIT_FUNC
|
|
|
|
|