require( "ID/WarL/WarLData" )

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