|
|
require( "ID/WarHH/WarHHData" )
|
|
|
|
|
|
function GateCreate( EventMemory )
|
|
|
cExecCheck( "GateCreate" )
|
|
|
|
|
|
if GATE_MAP_INDEX == nil then
|
|
|
|
|
|
GATE_MAP_INDEX = { }
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
EventMemory["GateList"] = { }
|
|
|
|
|
|
local Gate = { }
|
|
|
|
|
|
|
|
|
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["LinkData"] = GATE_DATA["START_GATE"]["LINK"]
|
|
|
GATE_MAP_INDEX[Gate["Handle"]] = EventMemory["MapIndex"]
|
|
|
Gate["RegenPosition"] = GATE_DATA["START_GATE"]["REGEN_POSITION"]
|
|
|
|
|
|
EventMemory["GateList"][Gate["Handle"]] = Gate
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
function DoorCreate( EventMemory )
|
|
|
cExecCheck( "DoorCreate" )
|
|
|
|
|
|
EventMemory["EventData"]["DoorList"] = { }
|
|
|
EventMemory["EventData"]["LockList"] = { }
|
|
|
|
|
|
|
|
|
local DoorList = { }
|
|
|
local DoorCount = 1
|
|
|
|
|
|
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
|
|
|
|
|
|
local LockList = { }
|
|
|
local LockCount = 1
|
|
|
|
|
|
for i = 1, #DOOR_LOCK_DATA do
|
|
|
|
|
|
local Lock = { }
|
|
|
|
|
|
Lock["Handle"] = cDoorBuild( EventMemory["MapIndex"], DOOR_LOCK_DATA[i]["LOCK_INDEX"],
|
|
|
DOOR_LOCK_DATA[i]["REGEN_POSITION"]["X"], DOOR_LOCK_DATA[i]["REGEN_POSITION"]["Y"], DOOR_LOCK_DATA[i]["REGEN_POSITION"]["DIR"], 1000 )
|
|
|
|
|
|
if Lock["Handle"] ~= nil then
|
|
|
|
|
|
Lock["Index"] = DOOR_LOCK_DATA[i]["LOCK_INDEX"]
|
|
|
LockList[LockCount] = Lock
|
|
|
LockCount = LockCount + 1
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
EventMemory["EventData"]["DoorList"] = DoorList
|
|
|
EventMemory["EventData"]["LockList"] = LockList
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
function MAPMARK( EventMemory )
|
|
|
cExecCheck( "MAPMARK" )
|
|
|
|
|
|
if EventMemory == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
local MapMarkTable = { }
|
|
|
local Num = 0
|
|
|
|
|
|
|
|
|
if EventMemory["EventData"]["DoorList"] ~= nil then
|
|
|
|
|
|
for index, value in pairs( EventMemory["EventData"]["DoorList"] ) do
|
|
|
|
|
|
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
|
|
|
|
|
|
Num = 0
|
|
|
|
|
|
for index, value in pairs( EventMemory["GateList"] ) do
|
|
|
|
|
|
local MapMark = { }
|
|
|
|
|
|
|
|
|
MapMark["Group"] = MAP_MARK_DATA["LINKTOWN"]["GROUP"] + Num
|
|
|
MapMark["x"] = value["RegenPosition"]["X"]
|
|
|
MapMark["y"] = value["RegenPosition"]["Y"]
|
|
|
MapMark["KeepTime"] = MAP_MARK_DATA["LINKTOWN"]["KEEPTIME"]
|
|
|
MapMark["IconIndex"] = MAP_MARK_DATA["LINKTOWN"]["ICON"]
|
|
|
|
|
|
Num = Num + 1
|
|
|
|
|
|
end
|
|
|
|
|
|
cMapMark( EventMemory["MapIndex"], MapMarkTable )
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
function CameraMove( EventMemory )
|
|
|
cExecCheck( "CameraMove" )
|
|
|
|
|
|
if EventMemory == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
if EventMemory["CameraMove"] == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
if EventMemory["CameraMove"]["Number"] > #CAMERAMOVE_DATA then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
local CameraData
|
|
|
|
|
|
|
|
|
CameraData = CAMERAMOVE_DATA[EventMemory["CameraMove"]["Number"]]
|
|
|
|
|
|
if EventMemory["CameraMove"]["CameraState"] == CAMERA_STATE["MOVE"] then
|
|
|
|
|
|
|
|
|
local PlayerList
|
|
|
|
|
|
|
|
|
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
|
|
|
|
|
|
for i=1, #PlayerList do
|
|
|
|
|
|
cSetAbstate( PlayerList[i], CameraData["AbstateIndex"], 1, CameraData["AbstateTime"] )
|
|
|
|
|
|
end
|
|
|
|
|
|
cCameraMove( EventMemory["MapIndex"], EventMemory["CameraMove"]["Focus"]["X"], EventMemory["CameraMove"]["Focus"]["Y"], EventMemory["CameraMove"]["Focus"]["DIR"],
|
|
|
CameraData["AngleY"], CameraData["Distance"], 1 )
|
|
|
|
|
|
EventMemory["CameraMove"]["CheckTime"] = EventMemory["CurrentTime"] + CameraData["KeepTime"]
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
elseif EventMemory["CameraMove"]["CameraState"] == CAMERA_STATE["REMOVE"] then
|
|
|
|
|
|
local PlayerList
|
|
|
|
|
|
|
|
|
PlayerList = { cGetPlayerList( EventMemory["MapIndex"] ) }
|
|
|
|
|
|
for i=1, #PlayerList do
|
|
|
|
|
|
cResetAbstate( PlayerList[i], CameraData["AbstateIndex"] )
|
|
|
|
|
|
end
|
|
|
|
|
|
EventMemory["CameraMove"]["CheckTime"] = nil
|
|
|
cCameraMove( EventMemory["MapIndex"], 0, 0, 0, 0, 0, 0 )
|
|
|
EventMemory["CameraMove"]["Number"] = EventMemory["CameraMove"]["Number"] + 1
|
|
|
|
|
|
return
|
|
|
|
|
|
elseif EventMemory["CameraMove"]["CameraState"] == CAMERA_STATE["NEXT_STEP"] then
|
|
|
|
|
|
EventMemory["CameraMove"]["Number"] = EventMemory["CameraMove"]["Number"] + 1
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
function FaceCut( EventMemory )
|
|
|
cExecCheck( "FaceCut" )
|
|
|
|
|
|
if EventMemory == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
if EventMemory["FaceCut"] == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
if EventMemory["FaceCut"]["Number"] > #DIALOG_DATA then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
local FacecutData
|
|
|
|
|
|
|
|
|
FacecutData = DIALOG_DATA[EventMemory["FaceCut"]["Number"]]
|
|
|
|
|
|
if FacecutData == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
if FacecutData["FACECUT"] == nil then
|
|
|
|
|
|
cNotice( EventMemory["MapIndex"], FacecutData["FILENAME"], FacecutData["INDEX"] )
|
|
|
|
|
|
elseif FacecutData["FACECUT"] ~= nil then
|
|
|
|
|
|
cMobDialog( EventMemory["MapIndex"], FacecutData["FACECUT"], FacecutData["FILENAME"], FacecutData["INDEX"] )
|
|
|
|
|
|
end
|
|
|
|
|
|
EventMemory["FaceCut"]["CheckTime"] = EventMemory["CurrentTime"] + FacecutData["DELAY"]
|
|
|
EventMemory["FaceCut"]["Number"] = EventMemory["FaceCut"]["Number"] + 1
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
function TableLength( t )
|
|
|
cExecCheck "TableLength"
|
|
|
|
|
|
local count = 0
|
|
|
|
|
|
|
|
|
for index, value in pairs( t ) do
|
|
|
|
|
|
count = count + 1
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
return count
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
function PlayerMapLogin( Field, Handle )
|
|
|
cExecCheck( "PlayerMapLogin" )
|
|
|
|
|
|
local EventMemory = InstanceField[Field]
|
|
|
|
|
|
if EventMemory == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
local PlayerList = EventMemory["PlayerList"]
|
|
|
|
|
|
if PlayerList == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
if PlayerList[Handle] == nil then
|
|
|
|
|
|
PlayerList[Handle] = { }
|
|
|
|
|
|
end
|
|
|
|
|
|
PlayerList[Handle]["CheckTime"] = BOMB_DATA["REGEN_TIME"]
|
|
|
MAPMARK( EventMemory )
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
function RegenBomb( EventMemory )
|
|
|
cExecCheck( "RegenBomb" )
|
|
|
|
|
|
if EventMemory == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
local PlayerList = EventMemory["PlayerList"]
|
|
|
|
|
|
if PlayerList == nil then
|
|
|
|
|
|
return
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
-- <EFBFBD>ʿ<EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ݺ<EFBFBD>
|
|
|
for index, value in pairs(PlayerList) do
|
|
|
--[[
|
|
|
local MoveState, MoveStateTime
|
|
|
|
|
|
|
|
|
MoveState, MoveStateTime = cGetMoveState( index )
|
|
|
--]]
|
|
|
local MoveState, MoveStateTime, MoveStateSetTime = cGetMoveState( index )
|
|
|
|
|
|
if MoveState == 0 and MoveStateTime >= value["CheckTime"] then
|
|
|
|
|
|
if cIsInMap( index, EventMemory["MapIndex"] ) ~= nil then
|
|
|
|
|
|
if cGetAreaObject( EventMemory["MapIndex"], "Area01", index ) ~= nil then
|
|
|
|
|
|
local locX, locY = cObjectLocate( index )
|
|
|
local Bomb = { }
|
|
|
|
|
|
Bomb["Handle"] = cMobRegen_XY( EventMemory["MapIndex"], BOMB_DATA["MOBINDEX"], locX, locY, 0 )
|
|
|
|
|
|
if Bomb["Handle"] ~= nil then
|
|
|
|
|
|
cSetAIScript ( SCRIPT_MAIN, Bomb["Handle"] )
|
|
|
cAIScriptFunc ( Bomb["Handle"], "Entrance", "EVENT_BOMB_ROUTINE" )
|
|
|
|
|
|
Bomb["MonsterState"] = MS_STATE["NORMAL"]
|
|
|
Bomb["CheckTime"] = EventMemory["CurrentTime"] + BOMB_DATA["DELAY_TIME"]
|
|
|
|
|
|
EventMemory["EventData"]["BombList"][Bomb["Handle"]] = Bomb
|
|
|
|
|
|
cSkillBlast( Bomb["Handle"], Bomb["Handle"], "WarH_FBomb_Skill01_W" )
|
|
|
|
|
|
end
|
|
|
|
|
|
value["CheckTime"] = value["CheckTime"] + BOMB_DATA["REGEN_TIME"] + BOMB_DATA["DELAY_TIME"]
|
|
|
|
|
|
end
|
|
|
|
|
|
else
|
|
|
|
|
|
PlayerList[index] = nil
|
|
|
|
|
|
end
|
|
|
|
|
|
--elseif MoveState == 1 then
|
|
|
elseif MoveState == 1 or MoveState == 2 or MoveState == 3 then
|
|
|
|
|
|
value["CheckTime"] = BOMB_DATA["REGEN_TIME"]
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|