2023-07-14 19:35:33 +00:00
|
|
|
|
local XRpgMakerGameActivityDb = require("XEntity/XRpgMakerGame/XRpgMakerGameActivityDb")
|
|
|
|
|
local XRpgMakerGameEnterStageDb = require("XEntity/XRpgMakerGame/XRpgMakerGameEnterStageDb")
|
|
|
|
|
local XRpgMakerGameEndPoint = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameEndPoint")
|
|
|
|
|
local XRpgMakerGameMonsterData = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameMonsterData")
|
|
|
|
|
local XRpgMakerGamePlayer = require("XEntity/XRpgMakerGame/Object/XRpgMakerGamePlayer")
|
|
|
|
|
local XRpgMakerGameTriggerData = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameTriggerData")
|
|
|
|
|
local XRpgMakerGameShadow = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameShadow")
|
|
|
|
|
local XRpgMakerGameElectricFence = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameElectricFence")
|
|
|
|
|
local XRpgMakerGameTrasfer = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameTrasfer")
|
|
|
|
|
local XRpgMakerGameGrassData = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameGrassData")
|
|
|
|
|
local XRpgMakerGameSteelData = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameSteelData")
|
|
|
|
|
local XRpgMakerGameWaterData = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameWaterData")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local XRpgMakerGameBubble = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameBubble")
|
|
|
|
|
local XRpgMakerGameMagic = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameMagic")
|
|
|
|
|
local XRpgMakerGameDrop = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameDrop")
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XUiRpgMakerGamePlayScene = require("XUi/XUiRpgMakerGame/PlayMain/XUiRpgMakerGamePlayScene")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local XUiRpgPlayMixBlockScene = require("XUi/XUiRpgMakerGame/PlayMain/XUiRpgPlayMixBlockScene")
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---推箱子管理器
|
|
|
|
|
---@return XRpgMakerGameManager
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XRpgMakerGameManagerCreator = function()
|
|
|
|
|
local tableInsert = table.insert
|
|
|
|
|
local tableSort = table.sort
|
|
|
|
|
local tableRemove = table.remove
|
|
|
|
|
local tonumber = tonumber
|
|
|
|
|
local pairs = pairs
|
|
|
|
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
|
|
|
|
local stringFormat = string.format
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XRpgMakerGameActivityDb
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local RpgMakerGameActivityDb = XRpgMakerGameActivityDb.New()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XRpgMakerGameEnterStageDb
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local RpgMakerGameEnterStageDb = XRpgMakerGameEnterStageDb.New()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XRpgMakerGamePlayer
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local PlayerObj = XRpgMakerGamePlayer.New()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XRpgMakerGameEndPoint
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local EndPointObj = XRpgMakerGameEndPoint.New()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type XUiRpgPlayMixBlockScene
|
|
|
|
|
local CurrentScene = XUiRpgPlayMixBlockScene.New()
|
|
|
|
|
|
|
|
|
|
local CurrTabGroupIndexByUiMainTemp --缓存主界面选择的chapter对应的TabGroupIndex
|
|
|
|
|
local CurrentCount = 0 --当前回合数
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local GameMonsterObjDic = {} --怪物对象字典
|
|
|
|
|
local TriggerObjDic = {} --机关对象字典
|
|
|
|
|
local Actions = {} --状态列表
|
|
|
|
|
local HaveOpenChapterIdList = {} --缓存章节开启情况
|
|
|
|
|
local HaveOpenChapterGroupIdList = {} --缓存章节组开启情况
|
|
|
|
|
local _CurrentLockReqReset --重置协议锁
|
|
|
|
|
local _CurrentReqMoveLock --请求移动协议结果未处理之前不允许接着请求
|
|
|
|
|
local ClickObjectCallback --点击场景对象回调
|
|
|
|
|
local PointerDownObjectCallback --按下场景对象回调
|
|
|
|
|
local PointerUpObjectCallback --松开按下的场景对象回调
|
|
|
|
|
local ShadowObjDic = {} --影子对象字典
|
|
|
|
|
local ElectricFenceObjDic = {} --电网对象
|
|
|
|
|
local GrassObjDic = {} --草圃对象字典
|
|
|
|
|
local TransferPointObjDic = {} --传送点对象字典
|
|
|
|
|
local SteelObjDic = {} --钢板对象字典
|
|
|
|
|
local WaterObjDic = {} --水、冰对象字典
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local BubbleObjDic = {} --泡泡对象字典
|
|
|
|
|
local DropObjDic = {} --掉落物对象字典
|
|
|
|
|
local MagicObjDic = {} --魔法阵对象字典
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
---------------------本地接口 begin------------------
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local InitMonsterObj = function(mapId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
GameMonsterObjDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- local monsterIdList = XRpgMakerGameConfigs.GetRpgMakerGameMapIdToMonsterIdList(mapId)
|
|
|
|
|
local mapMonsterDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Moster)
|
|
|
|
|
for _, data in ipairs(mapMonsterDataList) do
|
|
|
|
|
local monsterId = data:GetParams()[1]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
GameMonsterObjDic[monsterId] = XRpgMakerGameMonsterData.New(monsterId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
GameMonsterObjDic[monsterId]:InitDataByMapObjData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearMonsterObj = function()
|
|
|
|
|
for _, monsterObj in pairs(GameMonsterObjDic) do
|
|
|
|
|
monsterObj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
GameMonsterObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local ResetMonsterObj = function()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
for _, monsterObj in pairs(GameMonsterObjDic) do
|
|
|
|
|
monsterObj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitTriggerObjDic = function(mapId)
|
|
|
|
|
TriggerObjDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- local triggerIdList = XRpgMakerGameConfigs.GetRpgMakerGameMapIdToTriggerIdList(mapId)
|
|
|
|
|
local mapTriggerDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Trigger)
|
|
|
|
|
for _, data in ipairs(mapTriggerDataList) do
|
|
|
|
|
local triggerId = data:GetParams()[1]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
TriggerObjDic[triggerId] = XRpgMakerGameTriggerData.New(triggerId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
TriggerObjDic[triggerId]:InitDataByMapObjData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearTriggerObj = function()
|
|
|
|
|
for _, triggerObj in pairs(TriggerObjDic) do
|
|
|
|
|
triggerObj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
TriggerObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetTriggerObj = function()
|
|
|
|
|
for _, triggerObj in pairs(TriggerObjDic) do
|
|
|
|
|
triggerObj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local LockReqMove = function()
|
|
|
|
|
_CurrentReqMoveLock = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local UnLockReqMove = function()
|
|
|
|
|
_CurrentReqMoveLock = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local IsLockReqMove = function()
|
|
|
|
|
return _CurrentReqMoveLock or false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetStepCount = function()
|
|
|
|
|
XDataCenter.RpgMakerGameManager.SetCurrentCount(0)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InsertAction = function(action)
|
|
|
|
|
tableInsert(Actions, action)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--检查设置播放电网机关音效(多个电网机关状态改变只播放一次音效)
|
|
|
|
|
local CheckSetPlayElectricStatusSwitchSound = function(actions)
|
|
|
|
|
local triggerObj
|
|
|
|
|
local triggerId
|
|
|
|
|
for _, action in ipairs(actions or {}) do
|
|
|
|
|
triggerId = action.TriggerId or action.Id
|
|
|
|
|
triggerObj = XDataCenter.RpgMakerGameManager.GetTriggerObj(triggerId)
|
|
|
|
|
if triggerObj and XRpgMakerGameConfigs.GetRpgMakerGameTriggerType(triggerId) == XRpgMakerGameConfigs.XRpgMakerGameTriggerType.TriggerElectricFence then
|
|
|
|
|
triggerObj:SetIsPlayElectricStatusSwitchSound(true)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local LockReqReset = function()
|
|
|
|
|
_CurrentLockReqReset = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local UnLockReqReset = function()
|
|
|
|
|
_CurrentLockReqReset = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local IsLockReqReset = function()
|
|
|
|
|
return _CurrentLockReqReset or false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitShadowObj = function(mapId)
|
|
|
|
|
ShadowObjDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- local shadowIdList = XRpgMakerGameConfigs.GetRpgMakerGameMapIdToShadowIdList(mapId)
|
|
|
|
|
-- for _, shadowId in ipairs(shadowIdList) do
|
|
|
|
|
-- ShadowObjDic[shadowId] = XRpgMakerGameShadow.New(shadowId)
|
|
|
|
|
-- end
|
|
|
|
|
local mapShadowDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Shadow)
|
|
|
|
|
for _, data in ipairs(mapShadowDataList) do
|
|
|
|
|
local shadowId = data:GetParams()[1]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
ShadowObjDic[shadowId] = XRpgMakerGameShadow.New(shadowId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
ShadowObjDic[shadowId]:InitDataByMapObjData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearShadowObj = function()
|
|
|
|
|
for _, shadowObj in pairs(ShadowObjDic) do
|
|
|
|
|
shadowObj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
ShadowObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetShadowObj = function()
|
|
|
|
|
for _, shadowObj in pairs(ShadowObjDic) do
|
|
|
|
|
shadowObj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitElectricFenceObj = function(mapId)
|
|
|
|
|
ElectricFenceObjDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- local idList = XRpgMakerGameConfigs.GetRpgMakerGameMapIdToElectricFenceIdList(mapId)
|
|
|
|
|
-- for _, id in ipairs(idList) do
|
|
|
|
|
-- ElectricFenceObjDic[id] = XRpgMakerGameElectricFence.New(id)
|
|
|
|
|
-- end
|
|
|
|
|
local mapElectricFenceDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.ElectricFence)
|
|
|
|
|
for index, data in ipairs(mapElectricFenceDataList) do
|
|
|
|
|
ElectricFenceObjDic[index] = XRpgMakerGameElectricFence.New(index)
|
|
|
|
|
ElectricFenceObjDic[index]:InitDataByMapObjData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local SetElectricFenceStatus = function(electricStatus)
|
|
|
|
|
for _, obj in pairs(ElectricFenceObjDic) do
|
|
|
|
|
obj:SetElectricStatus(electricStatus)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearElectricFencebj = function()
|
|
|
|
|
for _, obj in pairs(ElectricFenceObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
ElectricFenceObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetElectricFenceObj = function()
|
|
|
|
|
for _, obj in pairs(ElectricFenceObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--传送点
|
|
|
|
|
local InitTransferPointObj = function(mapId)
|
|
|
|
|
TransferPointObjDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- local idList = XRpgMakerGameConfigs.GetMapIdToTransferPointIdList(mapId)
|
|
|
|
|
-- for _, id in ipairs(idList) do
|
|
|
|
|
-- TransferPointObjDic[id] = XRpgMakerGameTrasfer.New(id)
|
|
|
|
|
-- end
|
|
|
|
|
local mapTransferPointDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.TransferPoint)
|
|
|
|
|
for index, data in ipairs(mapTransferPointDataList) do
|
|
|
|
|
TransferPointObjDic[index] = XRpgMakerGameTrasfer.New(index)
|
|
|
|
|
TransferPointObjDic[index]:InitDataByMapObjData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearTransferPointObj = function()
|
|
|
|
|
for _, obj in pairs(TransferPointObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
TransferPointObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--实体对象
|
|
|
|
|
local InitEntityObj = function(mapId)
|
|
|
|
|
GrassObjDic = {}
|
|
|
|
|
SteelObjDic = {}
|
|
|
|
|
WaterObjDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local entityType
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local mapEntityDataList = XRpgMakerGameConfigs.GetMixBlockEntityList(mapId)
|
|
|
|
|
for index, data in ipairs(mapEntityDataList) do
|
|
|
|
|
entityType = data:GetType()
|
|
|
|
|
if entityType == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Water or
|
|
|
|
|
entityType == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Ice then
|
|
|
|
|
WaterObjDic[index] = XRpgMakerGameWaterData.New(index)
|
|
|
|
|
WaterObjDic[index]:InitDataByMapObjData(data)
|
|
|
|
|
WaterObjDic[index]:SetStatus(entityType == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Water and
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XRpgMakerGameConfigs.XRpgMakerGameWaterType.Water or
|
|
|
|
|
XRpgMakerGameConfigs.XRpgMakerGameWaterType.Ice)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
elseif entityType == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Steel then
|
|
|
|
|
SteelObjDic[index] = XRpgMakerGameSteelData.New(index)
|
|
|
|
|
SteelObjDic[index]:InitDataByMapObjData(data)
|
|
|
|
|
elseif entityType == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Grass then
|
|
|
|
|
GrassObjDic[index] = XRpgMakerGameGrassData.New(index)
|
|
|
|
|
GrassObjDic[index]:InitDataByMapObjData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearEntityObj = function()
|
|
|
|
|
for _, obj in pairs(GrassObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
for _, obj in pairs(SteelObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
for _, obj in pairs(WaterObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
GrassObjDic = {}
|
|
|
|
|
SteelObjDic = {}
|
|
|
|
|
WaterObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetEntityObj = function()
|
|
|
|
|
for _, obj in pairs(GrassObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
for _, obj in pairs(SteelObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
for _, obj in pairs(WaterObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--泡泡对象
|
|
|
|
|
local InitBubbleObj = function (mapId)
|
|
|
|
|
BubbleObjDic = {}
|
|
|
|
|
local BubbleMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Bubble)
|
|
|
|
|
for _, data in ipairs(BubbleMapDataList) do
|
|
|
|
|
local bubbleId = data:GetParams()[1]
|
|
|
|
|
BubbleObjDic[bubbleId] = XRpgMakerGameBubble.New(bubbleId)
|
|
|
|
|
BubbleObjDic[bubbleId]:InitDataByMapObjData(data)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetBubbleObj = function()
|
|
|
|
|
for _, obj in pairs(BubbleObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearBubbleObj = function()
|
|
|
|
|
for _, obj in pairs(BubbleObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
BubbleObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--掉落物对象
|
|
|
|
|
local InitDropObj = function (mapId)
|
|
|
|
|
DropObjDic = {}
|
|
|
|
|
local DropMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Drop)
|
|
|
|
|
for _, data in ipairs(DropMapDataList) do
|
|
|
|
|
local dropId = data:GetParams()[1]
|
|
|
|
|
DropObjDic[dropId] = XRpgMakerGameDrop.New(dropId)
|
|
|
|
|
DropObjDic[dropId]:InitDataByMapObjData(data)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetDropObj = function()
|
|
|
|
|
for _, obj in pairs(DropObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearDropObj = function()
|
|
|
|
|
for _, obj in pairs(DropObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
DropObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--魔法阵对象
|
|
|
|
|
local InitMagicObj = function (mapId)
|
|
|
|
|
MagicObjDic = {}
|
|
|
|
|
local MagicMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Magic)
|
|
|
|
|
for index, data in ipairs(MagicMapDataList) do
|
|
|
|
|
MagicObjDic[index] = XRpgMakerGameMagic.New(index)
|
|
|
|
|
MagicObjDic[index]:InitDataByMapObjData(data)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ResetMagicObj = function()
|
|
|
|
|
for _, obj in pairs(MagicObjDic) do
|
|
|
|
|
obj:InitData()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ClearMagicObj = function()
|
|
|
|
|
for _, obj in pairs(MagicObjDic) do
|
|
|
|
|
obj:Dispose()
|
|
|
|
|
end
|
|
|
|
|
MagicObjDic = {}
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local GetCurrClearButtonGroupIndexCookieKey = function()
|
|
|
|
|
local activityId = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
return "RpgMakerGameCurrClearButtonGroupIndex" .. XPlayer.Id .. activityId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local GetHaveOpenChapterIdListCookieKey = function ()
|
|
|
|
|
local activityId = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
return "RpgMakerGameChapterIdList" .. XPlayer.Id .. activityId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local GetHaveOpenChapterGroupIdListCookieKey = function ()
|
|
|
|
|
local activityId = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
return "RpgMakerGameChapterGroupIdList" .. XPlayer.Id .. activityId
|
|
|
|
|
end
|
|
|
|
|
---------------------本地接口 end--------------------
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---推箱子管理器
|
|
|
|
|
---@class XRpgMakerGameManager
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XRpgMakerGameManager = {}
|
|
|
|
|
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--#region ExManager
|
|
|
|
|
function XRpgMakerGameManager:GetProgressTips()
|
|
|
|
|
if not XRpgMakerGameManager.CheckActivityIsOpen() then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local chapterGroupId = XRpgMakerGameManager.GetDefaultChapterGroupId()
|
|
|
|
|
local currentCount = XRpgMakerGameManager.GetChapterGroupPassStageCount(chapterGroupId)
|
|
|
|
|
local allCount = XRpgMakerGameManager.GetChapterGroupAllStageCount(chapterGroupId)
|
|
|
|
|
return "Progress: " .. currentCount .. "/" .. allCount
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--#endregion
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
-----------------功能入口 begin----------------
|
|
|
|
|
|
|
|
|
|
---读取本期玩法数据
|
|
|
|
|
---@return table
|
|
|
|
|
function XRpgMakerGameManager.GetActivityChapters()
|
|
|
|
|
local chapters = {}
|
|
|
|
|
if XRpgMakerGameManager.CheckActivityIsOpen(true) then
|
|
|
|
|
local temp = {}
|
|
|
|
|
local activityId = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
temp.Id = activityId
|
|
|
|
|
temp.Name = XRpgMakerGameConfigs.GetActivityName(activityId)
|
|
|
|
|
temp.BannerBg = XRpgMakerGameConfigs.GetActivityBannerBg(activityId)
|
|
|
|
|
temp.Type = XDataCenter.FubenManager.ChapterType.RpgMakerGame
|
|
|
|
|
table.insert(chapters, temp)
|
|
|
|
|
end
|
|
|
|
|
return chapters
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.CheckActivityIsOpen(isNotShowTips)
|
|
|
|
|
local id = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameActivityTimeId(id)
|
|
|
|
|
if not XFunctionManager.CheckInTimeByTimeId(timeId) then
|
|
|
|
|
if CS.XFight.IsRunning or XLuaUiManager.IsUiLoad("UiLoading") then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not isNotShowTips then
|
|
|
|
|
XUiManager.TipText("ActivityMainLineEnd")
|
|
|
|
|
XLuaUiManager.RunMain()
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetActivityTime()
|
|
|
|
|
local id = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameActivityTimeId(id)
|
|
|
|
|
return XFunctionManager.GetTimeByTimeId(timeId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.CheckActivityCondition()
|
|
|
|
|
local functionId = XFunctionManager.FunctionName.RpgMakerActivity
|
|
|
|
|
local isOpen = XFunctionManager.JudgeCanOpen(functionId)
|
|
|
|
|
local desc = XFunctionManager.GetFunctionOpenCondition(functionId)
|
|
|
|
|
if not isOpen then
|
|
|
|
|
XUiManager.TipMsg(desc)
|
|
|
|
|
end
|
|
|
|
|
return isOpen, desc
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetActivityEndTime()
|
|
|
|
|
local activityId = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
if not XTool.IsNumberValid(activityId) then return 0 end
|
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameActivityTimeId(activityId)
|
|
|
|
|
return XFunctionManager.GetEndTimeByTimeId(timeId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.UpdateActivityData(data)
|
|
|
|
|
RpgMakerGameActivityDb:UpdateData(data.ActivityData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--#region 任务功能
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetCurrTaskTimeLimitId()
|
|
|
|
|
local activityId = XRpgMakerGameConfigs.GetDefaultActivityId()
|
|
|
|
|
return XRpgMakerGameConfigs.GetRpgMakerGameActivityTaskTimeLimitId(activityId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetTimeLimitTask()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local groupId = XRpgMakerGameManager.GetCurrTaskTimeLimitId()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return XDataCenter.TaskManager.GetTimeLimitTaskListByGroupId(groupId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---在未完成及待领取的任务中,取一个待领取且Priority值最大的taskId
|
|
|
|
|
---@return integer|nil
|
|
|
|
|
function XRpgMakerGameManager.GetFirstTaskId()
|
|
|
|
|
local resultTaskId
|
|
|
|
|
local taskIdList = XRpgMakerGameManager.GetTimeLimitTask()
|
|
|
|
|
if not XTool.IsTableEmpty(taskIdList) then
|
|
|
|
|
local taskData = taskIdList[1]
|
|
|
|
|
if taskData.State ~= XDataCenter.TaskManager.TaskState.Finish then
|
|
|
|
|
resultTaskId = taskData.Id
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return resultTaskId
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--#region 章节功能
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.SetCurrTabGroupIndexByUiMainTemp(currTabGroupIndexByUiMainTemp)
|
|
|
|
|
CurrTabGroupIndexByUiMainTemp = currTabGroupIndexByUiMainTemp
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XRpgMakerGameManager.SetCurrClearButtonGroupIndex()
|
|
|
|
|
local cookieKey = GetCurrClearButtonGroupIndexCookieKey()
|
|
|
|
|
XSaveTool.SaveData(cookieKey, CurrTabGroupIndexByUiMainTemp)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetCurrClearButtonGroupIndex()
|
|
|
|
|
local cookieKey = GetCurrClearButtonGroupIndexCookieKey()
|
|
|
|
|
return XSaveTool.GetData(cookieKey)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetDefaultChapterGroupId()
|
|
|
|
|
local chapterGroupId = XRpgMakerGameConfigs.GetDefaultChapterGroupId()
|
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetChapterGroupOpenTimeId(chapterGroupId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if XFunctionManager.CheckInTimeByTimeId(timeId, true) then
|
|
|
|
|
return chapterGroupId
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--返回最新且已开启的章节组Id
|
|
|
|
|
local chapterGroupIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterGroupIdList()
|
|
|
|
|
local totalCount = #chapterGroupIdList
|
|
|
|
|
for i = totalCount, 1, -1 do
|
|
|
|
|
chapterGroupId = chapterGroupIdList[i]
|
|
|
|
|
timeId = XRpgMakerGameConfigs.GetChapterGroupOpenTimeId(chapterGroupId)
|
|
|
|
|
if XFunctionManager.CheckInTimeByTimeId(timeId, true) then
|
|
|
|
|
return chapterGroupId
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return chapterGroupIdList[totalCount]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XRpgMakerGameManager.IsChapterUnLock(chapterId)
|
|
|
|
|
if not XTool.IsNumberValid(chapterId) then
|
|
|
|
|
return true
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return XRpgMakerGameManager.IsChapterInTime(chapterId) and XRpgMakerGameManager.IsPassPreChapter(chapterId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XRpgMakerGameManager.IsChapterInTime(chapterId, isTip)
|
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameChapterOpenTimeId(chapterId)
|
|
|
|
|
local isInTime = XFunctionManager.CheckInTimeByTimeId(timeId)
|
|
|
|
|
if not isInTime and isTip then
|
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetRpgMakerGameChapterOpenTimeId(chapterId)
|
|
|
|
|
local time = XFunctionManager.GetStartTimeByTimeId(timeId)
|
|
|
|
|
local serverTimestamp = XTime.GetServerNowTimestamp()
|
|
|
|
|
local str = CS.XTextManager.GetText("ScheOpenCountdown", XUiHelper.GetTime(time - serverTimestamp, XUiHelper.TimeFormatType.RPG_MAKER_GAME))
|
|
|
|
|
XUiManager.TipMsg(str)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return isInTime
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.IsPassPreChapter(chapterId, isTip)
|
|
|
|
|
-- 推箱子前置章节解锁
|
|
|
|
|
local preChapterId = XRpgMakerGameConfigs.GetRpgMakerGameChapterPreChapterId(chapterId)
|
|
|
|
|
local isPassPreChapter = not XTool.IsNumberValid(preChapterId)
|
|
|
|
|
if not isPassPreChapter then
|
|
|
|
|
isPassPreChapter = XRpgMakerGameManager.IsChapterUnLock(preChapterId)
|
|
|
|
|
end
|
|
|
|
|
if not isPassPreChapter and isTip then
|
|
|
|
|
XUiManager.TipErrorWithKey("RpgMakerGameIsPassPreChapter", XRpgMakerGameConfigs.GetRpgMakerGameChapterName(chapterId))
|
|
|
|
|
end
|
|
|
|
|
return isPassPreChapter
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--#region 关卡功能
|
|
|
|
|
|
|
|
|
|
---关卡状态情况
|
|
|
|
|
---@param rpgMakerGameStageId integer
|
|
|
|
|
---@return integer
|
|
|
|
|
function XRpgMakerGameManager.GetRpgMakerGameStageStatus(rpgMakerGameStageId)
|
|
|
|
|
local stageIsPerfectClear = XRpgMakerGameManager.IsStagePerfectClear(rpgMakerGameStageId)
|
|
|
|
|
if stageIsPerfectClear then
|
|
|
|
|
return XRpgMakerGameConfigs.RpgMakerGameStageStatus.Perfect
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local stageIsClear = XRpgMakerGameManager.IsStageClear(rpgMakerGameStageId)
|
|
|
|
|
if stageIsClear then
|
|
|
|
|
return XRpgMakerGameConfigs.RpgMakerGameStageStatus.Clear
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local preStage = XRpgMakerGameConfigs.GetRpgMakerGameStagePreStage(rpgMakerGameStageId)
|
|
|
|
|
local preStageIsClear = not XTool.IsNumberValid(preStage) and true or XRpgMakerGameManager.IsStageClear(preStage)
|
|
|
|
|
if preStageIsClear then
|
|
|
|
|
return XRpgMakerGameConfigs.RpgMakerGameStageStatus.UnLock
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return XRpgMakerGameConfigs.RpgMakerGameStageStatus.Lock
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.IsStagePerfectClear(stageId)
|
|
|
|
|
local stageDb = XRpgMakerGameManager.GetRpgMakerActivityStageDb(stageId)
|
|
|
|
|
return stageDb:IsStagePerfectClear()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.IsStageClear(stageId)
|
|
|
|
|
local stageDb = XRpgMakerGameManager.GetRpgMakerActivityStageDb(stageId)
|
|
|
|
|
return stageDb:IsStageClear()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetRpgMakerActivityStageDb(stageCfgId)
|
|
|
|
|
return RpgMakerGameActivityDb:GetStageDb(stageCfgId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetRpgMakerChapterClearStarCount(chapterId)
|
|
|
|
|
local stageIdList = XRpgMakerGameConfigs.GetRpgMakerGameStageIdList(chapterId)
|
|
|
|
|
local stageDb
|
|
|
|
|
local starCount = 0
|
|
|
|
|
for _, stageId in ipairs(stageIdList) do
|
|
|
|
|
stageDb = XRpgMakerGameManager.GetRpgMakerActivityStageDb(stageId)
|
|
|
|
|
if stageDb then
|
|
|
|
|
starCount = starCount + stageDb:GetStarCount()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return starCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.IsStageUnLock(stageId)
|
|
|
|
|
local stageStatus = XRpgMakerGameManager.GetRpgMakerGameStageStatus(stageId)
|
|
|
|
|
if stageStatus ~= XRpgMakerGameConfigs.RpgMakerGameStageStatus.Lock then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local preStage = XRpgMakerGameConfigs.GetRpgMakerGameStagePreStage(stageId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if preStage == stageId then return false, CS.XTextManager.GetText("RpgMakerGameStageInXf") end
|
|
|
|
|
local preStageNumberName = XRpgMakerGameConfigs.GetStageNumberName(preStage)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local preStageName = XRpgMakerGameConfigs.GetRpgMakerGameStageName(preStage)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local desc = CS.XTextManager.GetText("RpgMakerGameStageNotOpen", preStageNumberName, preStageName)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return false, desc
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---获取单期玩法通过的关卡数
|
|
|
|
|
---@param chapterGroupId integer 单期章节组Id
|
|
|
|
|
---@return integer
|
|
|
|
|
function XRpgMakerGameManager.GetChapterGroupPassStageCount(chapterGroupId)
|
|
|
|
|
local result = 0
|
|
|
|
|
local chapterIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterIdList(chapterGroupId)
|
|
|
|
|
if XTool.IsTableEmpty(chapterIdList) then return result end
|
|
|
|
|
for _, chapterId in ipairs(chapterIdList) do
|
|
|
|
|
result = result + XRpgMakerGameManager.GetChapterPassStageCount(chapterId)
|
|
|
|
|
end
|
|
|
|
|
return result
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---获取单期玩法所有的关卡数
|
|
|
|
|
---@param chapterGroupId integer 单期章节组Id
|
|
|
|
|
---@return integer
|
|
|
|
|
function XRpgMakerGameManager.GetChapterGroupAllStageCount(chapterGroupId)
|
|
|
|
|
local result = 0
|
|
|
|
|
local chapterIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterIdList(chapterGroupId)
|
|
|
|
|
if XTool.IsTableEmpty(chapterIdList) then return result end
|
|
|
|
|
for _, chapterId in ipairs(chapterIdList) do
|
|
|
|
|
result = result + XRpgMakerGameManager.GetChapterAllStageCount(chapterId)
|
|
|
|
|
end
|
|
|
|
|
return result
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---获取单个章节已通过的关卡数
|
|
|
|
|
---@param chapterId integer
|
|
|
|
|
---@return integer
|
|
|
|
|
function XRpgMakerGameManager.GetChapterPassStageCount(chapterId)
|
|
|
|
|
local result = 0
|
|
|
|
|
local stageIdList = XRpgMakerGameConfigs.GetRpgMakerGameStageIdList(chapterId)
|
|
|
|
|
if XTool.IsTableEmpty(stageIdList) then return result end
|
|
|
|
|
for _, stageId in ipairs(stageIdList) do
|
|
|
|
|
local stageStatus = XRpgMakerGameManager.GetRpgMakerGameStageStatus(stageId)
|
|
|
|
|
if stageStatus == XRpgMakerGameConfigs.RpgMakerGameStageStatus.Clear or
|
|
|
|
|
stageStatus == XRpgMakerGameConfigs.RpgMakerGameStageStatus.Perfect then
|
|
|
|
|
result = result + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return result
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---获取单个章节的关卡数
|
|
|
|
|
---@param chapterId integer
|
|
|
|
|
---@return integer
|
|
|
|
|
function XRpgMakerGameManager.GetChapterAllStageCount(chapterId)
|
|
|
|
|
local result = 0
|
|
|
|
|
local stageIdList = XRpgMakerGameConfigs.GetRpgMakerGameStageIdList(chapterId)
|
|
|
|
|
if XTool.IsTableEmpty(stageIdList) then return result end
|
|
|
|
|
result = #stageIdList
|
|
|
|
|
return result
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--#region 红点功能
|
|
|
|
|
|
|
|
|
|
---任务红点
|
|
|
|
|
---@return boolean
|
|
|
|
|
function XRpgMakerGameManager.CheckRedPoint()
|
|
|
|
|
local groupId = XRpgMakerGameManager.GetCurrTaskTimeLimitId()
|
|
|
|
|
return XDataCenter.TaskManager.CheckLimitTaskList(groupId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---所有期玩法关卡小红点
|
|
|
|
|
---@return boolean
|
|
|
|
|
function XRpgMakerGameManager.CheckAllChapterGroupRedPoint()
|
|
|
|
|
local haveChapterGroupIdList = XRpgMakerGameManager.GetHaveOpenChapterGroupIdList()
|
|
|
|
|
local groupIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterGroupIdList()
|
|
|
|
|
local openListCount = 0
|
|
|
|
|
local timeId, isOpen
|
|
|
|
|
for _, groupId in ipairs(groupIdList) do
|
|
|
|
|
timeId = XRpgMakerGameConfigs.GetChapterGroupOpenTimeId(groupId)
|
|
|
|
|
isOpen = XFunctionManager.CheckInTimeByTimeId(timeId)
|
|
|
|
|
openListCount = openListCount + (isOpen and 1 or 0)
|
|
|
|
|
end
|
|
|
|
|
return #haveChapterGroupIdList < openListCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---单期玩法小红点
|
|
|
|
|
---@param chapterGroupId integer
|
|
|
|
|
---@return boolean
|
|
|
|
|
function XRpgMakerGameManager.CheckChapterGroupBtnRedPoint(chapterGroupId)
|
|
|
|
|
local haveChapterGroupIdList = XRpgMakerGameManager.GetHaveOpenChapterGroupIdList()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local timeId = XRpgMakerGameConfigs.GetChapterGroupOpenTimeId(chapterGroupId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local isOpen = XFunctionManager.CheckInTimeByTimeId(timeId)
|
|
|
|
|
for _,v in ipairs(haveChapterGroupIdList) do
|
|
|
|
|
if chapterGroupId == v or not isOpen then return false end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---当期玩法关卡小红点
|
|
|
|
|
---@return boolean
|
|
|
|
|
function XRpgMakerGameManager.CheckFirstChapterGroupRedPoint()
|
|
|
|
|
local groupIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterGroupIdList()
|
|
|
|
|
local flag
|
|
|
|
|
for _,v in ipairs(groupIdList) do
|
|
|
|
|
if XRpgMakerGameConfigs.GetChapterGroupIsFirstShow(v) then
|
|
|
|
|
flag = v
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local haveChapterIdList = XRpgMakerGameConfigs.GetRpgMakerGameChapterIdList(flag)
|
|
|
|
|
for _, v in ipairs(haveChapterIdList) do
|
|
|
|
|
if XRpgMakerGameManager.CheckChapterBtnRedPoint(v) then return true end
|
|
|
|
|
end
|
|
|
|
|
return false
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---单个章节小红点
|
|
|
|
|
---@param chapterId integer
|
|
|
|
|
---@return boolean
|
|
|
|
|
function XRpgMakerGameManager.CheckChapterBtnRedPoint(chapterId)
|
|
|
|
|
local haveChapterIdList = XRpgMakerGameManager.GetHaveOpenChapterIdList()
|
|
|
|
|
for _,v in ipairs(haveChapterIdList) do
|
|
|
|
|
if chapterId == v then return false end
|
|
|
|
|
end
|
|
|
|
|
return XRpgMakerGameManager.IsChapterUnLock(chapterId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--章节组小红点缓存
|
|
|
|
|
function XRpgMakerGameManager.SetChapterGroupIdOpen(chapterGroupId)
|
|
|
|
|
HaveOpenChapterGroupIdList = XRpgMakerGameManager.GetHaveOpenChapterGroupIdList() or {}
|
|
|
|
|
for _,v in ipairs(HaveOpenChapterGroupIdList) do
|
|
|
|
|
if chapterGroupId == v then return end
|
|
|
|
|
end
|
|
|
|
|
table.insert(HaveOpenChapterGroupIdList, chapterGroupId)
|
|
|
|
|
local haveOpenChapterGroupIdList = GetHaveOpenChapterGroupIdListCookieKey()
|
|
|
|
|
return XSaveTool.SaveData(haveOpenChapterGroupIdList, HaveOpenChapterGroupIdList)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetHaveOpenChapterGroupIdList()
|
|
|
|
|
local haveOpenChapterGroupIdList = GetHaveOpenChapterGroupIdListCookieKey()
|
|
|
|
|
return XSaveTool.GetData(haveOpenChapterGroupIdList) or {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--章节小红点缓存
|
|
|
|
|
function XRpgMakerGameManager.SetChapterIdOpen(chapterId)
|
|
|
|
|
HaveOpenChapterIdList = XRpgMakerGameManager.GetHaveOpenChapterIdList()
|
|
|
|
|
for _,v in ipairs(HaveOpenChapterIdList) do
|
|
|
|
|
if chapterId == v then return end
|
|
|
|
|
end
|
|
|
|
|
table.insert(HaveOpenChapterIdList, chapterId)
|
|
|
|
|
local haveOpenChapterIdList = GetHaveOpenChapterIdListCookieKey()
|
|
|
|
|
return XSaveTool.SaveData(haveOpenChapterIdList, HaveOpenChapterIdList)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetHaveOpenChapterIdList()
|
|
|
|
|
local haveOpenChapterIdList = GetHaveOpenChapterIdListCookieKey()
|
|
|
|
|
return XSaveTool.GetData(haveOpenChapterIdList) or {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--缓存当前的活动组Id
|
|
|
|
|
local _CurChapterGroupId
|
|
|
|
|
function XRpgMakerGameManager.SetCurChapterGroupId(chapterGroupId)
|
|
|
|
|
_CurChapterGroupId = chapterGroupId
|
|
|
|
|
XRpgMakerGameManager.SetChapterGroupIdOpen(chapterGroupId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetCurChapterGroupId()
|
|
|
|
|
return _CurChapterGroupId
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--#endregion
|
|
|
|
|
|
|
|
|
|
-----------------功能入口 end------------------
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
-----------------关卡内 begin------------------
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XRpgMakerGameManager.InitStageMap(mapId, selectRoleId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local startPointMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.StartPoint)
|
|
|
|
|
local endPointMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.EndPoint)
|
|
|
|
|
local startPointMapData = startPointMapDataList[1]
|
|
|
|
|
local endPointMapData = endPointMapDataList[1]
|
|
|
|
|
if not XTool.IsTableEmpty(startPointMapData) then
|
|
|
|
|
PlayerObj:InitData(startPointMapData, selectRoleId)
|
|
|
|
|
end
|
|
|
|
|
if not XTool.IsTableEmpty(endPointMapData) then
|
|
|
|
|
EndPointObj:InitData(endPointMapData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
InitMonsterObj(mapId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
InitTriggerObjDic(mapId)
|
|
|
|
|
InitShadowObj(mapId)
|
|
|
|
|
InitElectricFenceObj(mapId)
|
|
|
|
|
InitTransferPointObj(mapId)
|
|
|
|
|
InitEntityObj(mapId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
InitBubbleObj(mapId)
|
|
|
|
|
InitDropObj(mapId)
|
|
|
|
|
InitMagicObj(mapId)
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
ResetStepCount()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.ResetStageMap()
|
|
|
|
|
local enterStageDb = XRpgMakerGameManager:GetRpgMakerGameEnterStageDb()
|
|
|
|
|
local mapId = enterStageDb:GetMapId()
|
|
|
|
|
local selectRoleId = enterStageDb:GetSelectRoleId()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local startPointMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.StartPoint)
|
|
|
|
|
local endPointMapDataList = XRpgMakerGameConfigs.GetMixBlockDataListByType(mapId, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.EndPoint)
|
|
|
|
|
local startPointMapData = startPointMapDataList[1]
|
|
|
|
|
local endPointMapData = endPointMapDataList[1]
|
|
|
|
|
if not XTool.IsTableEmpty(startPointMapData) then
|
|
|
|
|
PlayerObj:InitData(startPointMapData, selectRoleId)
|
|
|
|
|
end
|
|
|
|
|
if not XTool.IsTableEmpty(endPointMapData) then
|
|
|
|
|
EndPointObj:InitData(endPointMapData)
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
ResetTriggerObj()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
ResetMonsterObj()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
ResetShadowObj()
|
|
|
|
|
ResetElectricFenceObj()
|
|
|
|
|
ResetEntityObj()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
ResetBubbleObj()
|
|
|
|
|
ResetDropObj()
|
|
|
|
|
ResetMagicObj()
|
|
|
|
|
|
|
|
|
|
ResetStepCount()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XRpgMakerGameManager.ResetActions()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.ClearStageMap()
|
|
|
|
|
PlayerObj:Dispose()
|
|
|
|
|
EndPointObj:Dispose()
|
|
|
|
|
ClearMonsterObj()
|
|
|
|
|
ClearTriggerObj()
|
|
|
|
|
ClearShadowObj()
|
|
|
|
|
ClearElectricFencebj()
|
|
|
|
|
ClearTransferPointObj()
|
|
|
|
|
ClearEntityObj()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
ClearBubbleObj()
|
|
|
|
|
ClearDropObj()
|
|
|
|
|
ClearMagicObj()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
ResetStepCount()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetNextAction(isNotRemove)
|
|
|
|
|
if isNotRemove then
|
|
|
|
|
return Actions[1]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local action = tableRemove(Actions, 1)
|
|
|
|
|
XRpgMakerGameManager.UpdateActionData(action)
|
|
|
|
|
return action
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XRpgMakerGameManager.GetActionsNotRemove(actionType)
|
|
|
|
|
local actions = {}
|
|
|
|
|
for _, action in ipairs(Actions) do
|
|
|
|
|
if action.ActionType == actionType then
|
|
|
|
|
tableInsert(actions, action)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return actions
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--需要并列执行动作的用该方法
|
|
|
|
|
function XRpgMakerGameManager.GetActions(actionType)
|
|
|
|
|
local actions = {}
|
|
|
|
|
for i = #Actions, 1, -1 do
|
|
|
|
|
if Actions[i].ActionType == actionType then
|
|
|
|
|
local action = tableRemove(Actions, i)
|
|
|
|
|
XRpgMakerGameManager.UpdateActionData(action)
|
|
|
|
|
tableInsert(actions, action)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return actions
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.IsActionsEmpty()
|
|
|
|
|
return XTool.IsTableEmpty(Actions)
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---更新状态数据,不播放动画
|
|
|
|
|
---@param action any
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XRpgMakerGameManager.UpdateActionData(action)
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionPlayerMove then
|
|
|
|
|
XRpgMakerGameManager.SetCurrentCount(action.CurrentCount)
|
|
|
|
|
PlayerObj:SetFaceDirection(action.Direction)
|
|
|
|
|
PlayerObj:UpdatePosition(action.EndPosition)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionKillMonster
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterDieByTrap
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterKillByElectricFence
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionHumanKill
|
2024-09-01 20:49:41 +00:00
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterDrown
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionShadowKillMonster
|
|
|
|
|
then
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local monsterObj = XRpgMakerGameManager.GetMonsterObj(action.MonsterId)
|
|
|
|
|
if monsterObj then
|
|
|
|
|
monsterObj:Die()
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionStageWin then
|
|
|
|
|
local enterStageDb = XRpgMakerGameManager:GetRpgMakerGameEnterStageDb()
|
|
|
|
|
local stageId = enterStageDb:GetStageId()
|
|
|
|
|
local selectRoleId = enterStageDb:GetSelectRoleId()
|
|
|
|
|
local stepCount = XRpgMakerGameManager.GetCurrentCount()
|
|
|
|
|
local stageDb = XRpgMakerGameManager.GetRpgMakerActivityStageDb(stageId)
|
|
|
|
|
local starCount = action.StarCondition and #action.StarCondition or 0
|
|
|
|
|
stageDb:SetRoleId(selectRoleId)
|
|
|
|
|
if stepCount < stageDb:GetStepCount() then
|
|
|
|
|
stageDb:SetStepCount(stepCount)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if stageDb:GetStarCount() <= starCount then
|
|
|
|
|
stageDb:SetStarCondition(action.StarCondition)
|
|
|
|
|
end
|
|
|
|
|
stageDb:SetStarReward(action.StarReward, true)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionEndPointOpen then
|
|
|
|
|
EndPointObj:EndPointOpen()
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterRunAway
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterPatrol then
|
|
|
|
|
local monsterObj = XRpgMakerGameManager.GetMonsterObj(action.MonsterId)
|
|
|
|
|
if monsterObj then
|
|
|
|
|
monsterObj:SetFaceDirection(action.Direction)
|
|
|
|
|
monsterObj:UpdatePosition(action.EndPosition)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterChangeDirection then
|
|
|
|
|
local monsterObj = XRpgMakerGameManager.GetMonsterObj(action.MonsterId)
|
|
|
|
|
if monsterObj then
|
|
|
|
|
monsterObj:SetFaceDirection(action.Direction)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterKillPlayer
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionPlayerDieByTrap
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionPlayerKillByElectricFence
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionPlayerDrown then
|
|
|
|
|
PlayerObj:Die()
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionTriggerStatusChange then
|
|
|
|
|
local triggerObj = XRpgMakerGameManager.GetTriggerObj(action.TriggerId)
|
|
|
|
|
if triggerObj then
|
|
|
|
|
triggerObj:SetTriggerStatus(action.TriggerStatus)
|
|
|
|
|
triggerObj:SetElectricStatus(action.ElectricStatus)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionUnlockRole then
|
|
|
|
|
RpgMakerGameActivityDb:UpdateUnlockRoleId(action.RoleId)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionShadowMove then
|
|
|
|
|
local shadowObj = XRpgMakerGameManager.GetShadowObj(action.ShadowId)
|
|
|
|
|
if shadowObj then
|
|
|
|
|
shadowObj:SetFaceDirection(action.Direction)
|
|
|
|
|
shadowObj:UpdatePosition(action.EndPosition)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionShadowDieByTrap then
|
|
|
|
|
local shadowObj = XRpgMakerGameManager.GetShadowObj(action.ShadowId)
|
|
|
|
|
if shadowObj then
|
|
|
|
|
shadowObj:Die()
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionElectricStatusChange then
|
|
|
|
|
SetElectricFenceStatus(action.ElectricStatus)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionSentrySign then
|
|
|
|
|
local monsterObj = XRpgMakerGameManager.GetMonsterObj(action.MonsterId)
|
|
|
|
|
if monsterObj then
|
|
|
|
|
monsterObj:UpdateSentrySignAction(action)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionSteelBrokenToTrap
|
|
|
|
|
or XRpgMakerGameConfigs.RpgMakerGameActionType.ActionSteelBrokenToFlat then
|
|
|
|
|
local entityId = action.EntityId
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local entityObj = XRpgMakerGameManager.GetSteelObj(entityId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if entityObj and entityObj.SetStatus then
|
|
|
|
|
entityObj:SetStatus(XRpgMakerGameConfigs.XRpgMakerGameSteelBrokenType.Flat)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionShadowKillByElectricFence
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterKillShadow
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionShadowDrown then
|
|
|
|
|
local shadowObj = XRpgMakerGameManager.GetShadowObj(action.ShadowId)
|
|
|
|
|
if shadowObj then shadowObj:Die() end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionBubbleMove then
|
|
|
|
|
local bubbleId = action.EntityId
|
|
|
|
|
local bubbleObj = XDataCenter.RpgMakerGameManager.GetBubbleObj(bubbleId)
|
|
|
|
|
if bubbleObj then
|
|
|
|
|
bubbleObj:UpdatePosition(action.EndPosition)
|
|
|
|
|
end
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionShadowPickupDrop
|
|
|
|
|
or action.ActionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionPlayerPickupDrop then
|
|
|
|
|
local entityId = action.EntityId
|
|
|
|
|
local dropObj = XRpgMakerGameManager.GetDropObj(entityId)
|
|
|
|
|
dropObj:SetPickUp(true)
|
|
|
|
|
return
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--地图某一时刻的状态
|
|
|
|
|
function XRpgMakerGameManager.UpdateMapStatusDb(data)
|
|
|
|
|
XDataCenter.RpgMakerGameManager.SetCurrentCount(data.CurrentRound)
|
|
|
|
|
|
|
|
|
|
--玩家状态
|
|
|
|
|
PlayerObj:UpdateData(data.GamePlayer)
|
|
|
|
|
|
|
|
|
|
--终点状态
|
|
|
|
|
EndPointObj:UpdateData(data.EndPoint)
|
|
|
|
|
|
|
|
|
|
--怪物状态
|
|
|
|
|
for _, monsterData in ipairs(data.GameMonsters) do
|
|
|
|
|
local id = monsterData.Id
|
|
|
|
|
local monsterObj = XRpgMakerGameManager.GetMonsterObj(id)
|
|
|
|
|
if monsterObj then
|
|
|
|
|
monsterObj:UpdateData(monsterData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--机关
|
|
|
|
|
CheckSetPlayElectricStatusSwitchSound(data.Triggers)
|
|
|
|
|
for _, triggerData in ipairs(data.Triggers) do
|
|
|
|
|
local id = triggerData.Id
|
|
|
|
|
local triggerObj = XRpgMakerGameManager.GetTriggerObj(id)
|
|
|
|
|
if triggerObj then
|
|
|
|
|
triggerObj:UpdateData(triggerData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--影子
|
|
|
|
|
for _, shadowData in ipairs(data.Shadows) do
|
|
|
|
|
local id = shadowData.Id
|
|
|
|
|
local obj = XRpgMakerGameManager.GetShadowObj(id)
|
|
|
|
|
if obj then
|
|
|
|
|
obj:UpdateData(shadowData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--电网
|
|
|
|
|
local electricStatus = data.ElectricFence and data.ElectricFence.ElectricStatus
|
|
|
|
|
SetElectricFenceStatus(electricStatus)
|
|
|
|
|
|
|
|
|
|
--水,冰
|
|
|
|
|
local waterObj
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local iceObj
|
2023-07-14 19:35:33 +00:00
|
|
|
|
for _, water in ipairs(data.Water) do
|
2024-09-01 20:49:41 +00:00
|
|
|
|
waterObj = XRpgMakerGameManager.GetEntityObjByPosition(water.PositionX, water.PositionY, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Water)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if waterObj and waterObj.SetStatus then
|
|
|
|
|
waterObj:SetStatus(water.WaterStatus)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
iceObj = XRpgMakerGameManager.GetEntityObjByPosition(water.PositionX, water.PositionY, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Ice)
|
|
|
|
|
if iceObj and iceObj.SetStatus then
|
|
|
|
|
iceObj:SetStatus(water.WaterStatus)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--草圃
|
|
|
|
|
local grassObj
|
|
|
|
|
for _, grass in ipairs(data.Grass) do
|
2024-09-01 20:49:41 +00:00
|
|
|
|
grassObj = XRpgMakerGameManager.GetEntityObjByPosition(grass.PositionX, grass.PositionY, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Grass)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if grassObj and grassObj.SetIsGrow then
|
|
|
|
|
grassObj:SetIsGrow(true)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--钢板
|
|
|
|
|
local steelObj
|
|
|
|
|
for _, steel in ipairs(data.Steel) do
|
2024-09-01 20:49:41 +00:00
|
|
|
|
steelObj = XRpgMakerGameManager.GetEntityObjByPosition(steel.PositionX, steel.PositionY, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Steel)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if steelObj and steelObj.SetStatus then
|
|
|
|
|
steelObj:SetStatus(steel.SteelStatus)
|
|
|
|
|
end
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--泡泡
|
|
|
|
|
local bubbleObj
|
|
|
|
|
for _, data in ipairs(data.Bubble) do
|
|
|
|
|
local id = data.Id
|
|
|
|
|
bubbleObj = XRpgMakerGameManager.GetBubbleObj(id)
|
|
|
|
|
if bubbleObj then
|
|
|
|
|
bubbleObj:UpdateData(data)
|
|
|
|
|
bubbleObj:SetIsBroken(false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--掉落物
|
|
|
|
|
local dropObj
|
|
|
|
|
for _, data in ipairs(data.Drop) do
|
|
|
|
|
local id = data.Id
|
|
|
|
|
dropObj = XRpgMakerGameManager.GetDropObj(id)
|
|
|
|
|
if dropObj then
|
|
|
|
|
dropObj:UpdateData(data)
|
|
|
|
|
dropObj:SetPickUp(false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--魔法阵
|
|
|
|
|
local magicObj
|
|
|
|
|
for _, data in ipairs(data.Magic) do
|
|
|
|
|
local id = data.Id
|
|
|
|
|
magicObj = XRpgMakerGameManager.GetMagicObj(id)
|
|
|
|
|
if magicObj then
|
|
|
|
|
magicObj:UpdateData(data)
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.SetCurrentCount(currentCount)
|
|
|
|
|
CurrentCount = currentCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetCurrentCount()
|
|
|
|
|
return CurrentCount
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@param shadowId integer
|
|
|
|
|
---@return XRpgMakerGameShadow
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XRpgMakerGameManager.GetShadowObj(shadowId)
|
|
|
|
|
return XTool.IsNumberValid(shadowId) and ShadowObjDic[shadowId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetMonsterObj(monsterId)
|
|
|
|
|
return XTool.IsNumberValid(monsterId) and GameMonsterObjDic[monsterId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetMonsterObjDic()
|
|
|
|
|
return GameMonsterObjDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetElectricFenceObjDic()
|
|
|
|
|
return ElectricFenceObjDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetElectricFenceObj(electricFenceId)
|
|
|
|
|
return XTool.IsNumberValid(electricFenceId) and ElectricFenceObjDic[electricFenceId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获得怪物死亡的数量
|
|
|
|
|
function XRpgMakerGameManager.GetMonsterDeathCount()
|
|
|
|
|
local normalMonsterDeathCount = 0
|
|
|
|
|
local bossDeathCount = 0
|
|
|
|
|
local totalDeathCount = 0
|
|
|
|
|
local monsterTypeCfg
|
|
|
|
|
for _, obj in pairs(GameMonsterObjDic) do
|
|
|
|
|
monsterTypeCfg = XRpgMakerGameConfigs.GetRpgMakerGameMonsterType(obj:GetId())
|
|
|
|
|
if monsterTypeCfg == XRpgMakerGameConfigs.XRpgMakerGameMonsterType.Normal and obj:IsDeath() then
|
|
|
|
|
normalMonsterDeathCount = normalMonsterDeathCount + 1
|
|
|
|
|
elseif monsterTypeCfg == XRpgMakerGameConfigs.XRpgMakerGameMonsterType.BOSS and obj:IsDeath() then
|
|
|
|
|
bossDeathCount = bossDeathCount + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
totalDeathCount = normalMonsterDeathCount + bossDeathCount
|
|
|
|
|
return totalDeathCount, normalMonsterDeathCount, bossDeathCount
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XRpgMakerGameManager.GetDropPickUpCount()
|
|
|
|
|
local totalPickDropCount = {}
|
|
|
|
|
for _, obj in pairs(DropObjDic) do
|
|
|
|
|
if obj:CheckIsPickUp() then
|
|
|
|
|
if totalPickDropCount[obj:GetDropType()] then
|
|
|
|
|
totalPickDropCount[obj:GetDropType()] = totalPickDropCount[obj:GetDropType()] + 1
|
|
|
|
|
else
|
|
|
|
|
totalPickDropCount[obj:GetDropType()] = 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return totalPickDropCount
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XRpgMakerGameManager.GetTriggerObj(triggerId)
|
|
|
|
|
return XTool.IsNumberValid(triggerId) and TriggerObjDic[triggerId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetRpgMakerGameEnterStageDb()
|
|
|
|
|
return RpgMakerGameEnterStageDb
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetPlayerObj()
|
|
|
|
|
return PlayerObj
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetEndPointObj()
|
|
|
|
|
return EndPointObj
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.ResetActions()
|
|
|
|
|
Actions = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetCurrentScene()
|
|
|
|
|
return CurrentScene
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获得一个随机对话内容的id
|
|
|
|
|
function XRpgMakerGameManager.GetRandomDialogBoxId()
|
|
|
|
|
--设置随机数种子
|
|
|
|
|
math.randomseed(os.time())
|
|
|
|
|
|
|
|
|
|
local idList = XRpgMakerGameConfigs.GetRpgMakerGameRandomDialogBoxIdList()
|
|
|
|
|
local clearStageIdList = {}
|
|
|
|
|
local preStageId
|
|
|
|
|
local isStageClear
|
|
|
|
|
local weight
|
|
|
|
|
local sum = 0
|
|
|
|
|
local randomDialogBoxId
|
|
|
|
|
|
|
|
|
|
--获取权重总和
|
|
|
|
|
for _, id in ipairs(idList) do
|
|
|
|
|
preStageId = XRpgMakerGameConfigs.GetRpgMakerGameRandomDialogBoxPreStage(id)
|
|
|
|
|
isStageClear = not XTool.IsNumberValid(preStageId) and true or XRpgMakerGameManager.IsStageClear(preStageId)
|
|
|
|
|
weight = XRpgMakerGameConfigs.GetRpgMakerGameRandomDialogBoxWeight(id)
|
|
|
|
|
if isStageClear then
|
|
|
|
|
table.insert(clearStageIdList, id)
|
|
|
|
|
sum = sum + weight
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--随机数加上权重,越大的权重,数值越大
|
|
|
|
|
local maxRand = 0
|
|
|
|
|
local rand
|
|
|
|
|
for _, id in ipairs(clearStageIdList) do
|
|
|
|
|
rand = math.random(0, sum)
|
|
|
|
|
weight = XRpgMakerGameConfigs.GetRpgMakerGameRandomDialogBoxWeight(id)
|
|
|
|
|
if rand + weight > maxRand then
|
|
|
|
|
maxRand = rand + weight
|
|
|
|
|
randomDialogBoxId = id
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return randomDialogBoxId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetSceneCubeObj(row, col)
|
|
|
|
|
local currentScene = XRpgMakerGameManager.GetCurrentScene()
|
|
|
|
|
return currentScene and currentScene:GetCubeObj(row, col)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetSceneCubeUpCenterPosition(row, col)
|
|
|
|
|
local cubeObj = XRpgMakerGameManager.GetSceneCubeObj(row, col)
|
|
|
|
|
return cubeObj and cubeObj:GetGameObjUpCenterPosition()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetSceneCubeTransform(row, col)
|
|
|
|
|
local cubeObj = XRpgMakerGameManager.GetSceneCubeObj(row, col)
|
|
|
|
|
return cubeObj and cubeObj:GetTransform()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--是否满足激活星星条件,不使用服务端下发的数据
|
|
|
|
|
--isWin:通关才计算行走步数,为nil时不考虑是否通关
|
|
|
|
|
function XRpgMakerGameManager.IsStarConditionClear(starConditionId, isWin)
|
|
|
|
|
local currentCount = XRpgMakerGameManager.GetCurrentCount()
|
|
|
|
|
local totalDeathCount, normalMonsterDeathCount, bossDeathCount = XRpgMakerGameManager.GetMonsterDeathCount()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local totalPickDropCount = XRpgMakerGameManager.GetDropPickUpCount()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local stepCount = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionStepCount(starConditionId)
|
|
|
|
|
local monsterCount = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionMonsterCount(starConditionId)
|
|
|
|
|
local monsterBossCount = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionMonsterBossCount(starConditionId)
|
|
|
|
|
local monsterTotalCount = monsterCount + monsterBossCount
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local pickDropType = XRpgMakerGameConfigs.GetStarConditionDropType(starConditionId)
|
|
|
|
|
local pickDropCount = XRpgMakerGameConfigs.GetStarConditionDropCount(starConditionId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
if currentCount <= stepCount then
|
|
|
|
|
if isWin ~= nil then
|
|
|
|
|
return isWin
|
|
|
|
|
end
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
if XTool.IsNumberValid(monsterCount) and XTool.IsNumberValid(monsterBossCount) then
|
|
|
|
|
return monsterTotalCount <= totalDeathCount
|
|
|
|
|
end
|
|
|
|
|
if XTool.IsNumberValid(monsterCount) then
|
|
|
|
|
return monsterCount <= normalMonsterDeathCount
|
|
|
|
|
end
|
|
|
|
|
if XTool.IsNumberValid(monsterBossCount) then
|
|
|
|
|
return monsterBossCount <= bossDeathCount
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if not XTool.IsTableEmpty(pickDropType) and not XTool.IsTableEmpty(totalPickDropCount) then
|
|
|
|
|
for index, type in ipairs(pickDropType) do
|
|
|
|
|
if totalPickDropCount[type] < pickDropCount[index] then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.SetClickObjectCallback(cb)
|
|
|
|
|
ClickObjectCallback = cb
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.FireClickObjectCallback(modelKey, modelName)
|
|
|
|
|
if ClickObjectCallback then
|
|
|
|
|
ClickObjectCallback(modelKey, modelName)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.SetPointerDownObjectCallback(cb)
|
|
|
|
|
PointerDownObjectCallback = cb
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.FirePointerDownObjectCallback()
|
|
|
|
|
if PointerDownObjectCallback then
|
|
|
|
|
PointerDownObjectCallback()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.SetPointerUpObjectCallback(cb)
|
|
|
|
|
PointerUpObjectCallback = cb
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.FirePointerUpObjectCallback()
|
|
|
|
|
if PointerUpObjectCallback then
|
|
|
|
|
PointerUpObjectCallback()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--是否能在当前坐标中设置模型或特效
|
|
|
|
|
function XRpgMakerGameManager.IsCurPositionSet(posX, posY, direction)
|
|
|
|
|
local isCurSet = true --是否能在当前的坐标中设置
|
|
|
|
|
local isNextSet = true --是否能继续在下一个坐标中判断能否设置
|
|
|
|
|
|
|
|
|
|
local currentScene = XRpgMakerGameManager.GetCurrentScene()
|
|
|
|
|
local blockObj = currentScene:GetBlockObj(posY, posX)
|
|
|
|
|
if blockObj then
|
|
|
|
|
isCurSet, isNextSet = false, false
|
|
|
|
|
return isCurSet, isNextSet
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, obj in pairs(TriggerObjDic or {}) do
|
|
|
|
|
if obj:IsSamePoint(posX, posY) and obj:IsBlock() then
|
|
|
|
|
isCurSet, isNextSet = false, false
|
|
|
|
|
return isCurSet, isNextSet
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, obj in pairs(ShadowObjDic or {}) do
|
|
|
|
|
if obj:IsSamePoint(posX, posY) then
|
|
|
|
|
isCurSet, isNextSet = false, false
|
|
|
|
|
return isCurSet, isNextSet
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, obj in pairs(GameMonsterObjDic or {}) do
|
|
|
|
|
if obj:IsSamePoint(posX, posY) and not obj:IsDeath() then
|
|
|
|
|
isCurSet, isNextSet = false, false
|
|
|
|
|
return isCurSet, isNextSet
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
isNextSet = XRpgMakerGameManager.IsCurGapSet(posX, posY, direction)
|
|
|
|
|
|
|
|
|
|
return isCurSet, isNextSet
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--是否能在缝隙或电墙所在的下一个坐标中设置模型或特效
|
|
|
|
|
function XRpgMakerGameManager.IsCurGapSet(posX, posY, direction)
|
|
|
|
|
local currentScene = XRpgMakerGameManager.GetCurrentScene()
|
|
|
|
|
local getGapObjs = currentScene:GetGapObjs()
|
|
|
|
|
local nextPosX = (direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveLeft and posX - 1) or (direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveRight and posX + 1) or posX
|
|
|
|
|
local nextPosY = (direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveUp and posY + 1) or (direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveDown and posY - 1) or posY
|
|
|
|
|
local isBlock
|
|
|
|
|
|
|
|
|
|
for _, obj in pairs(getGapObjs or {}) do
|
|
|
|
|
isBlock = obj:IsGapInMiddle(posX, posY, direction, nextPosX, nextPosY)
|
|
|
|
|
if isBlock then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, obj in pairs(ElectricFenceObjDic or {}) do
|
|
|
|
|
isBlock = obj:IsElectricFenceInMiddle(posX, posY, direction, nextPosX, nextPosY)
|
|
|
|
|
if isBlock then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetTransferPointObj(transferPointId)
|
|
|
|
|
return TransferPointObjDic[transferPointId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetEntityObj(entityId)
|
|
|
|
|
local obj = GrassObjDic[entityId]
|
|
|
|
|
if obj then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
obj = SteelObjDic[entityId]
|
|
|
|
|
if obj then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
obj = WaterObjDic[entityId]
|
|
|
|
|
if obj then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XRpgMakerGameManager.GetSteelObj(steelId)
|
|
|
|
|
for _, obj in pairs(SteelObjDic) do
|
|
|
|
|
local data = obj:GetMapObjData()
|
|
|
|
|
if data:GetParams()[1] == steelId then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetEntityObjByPosition(x, y, metaType)
|
|
|
|
|
local mapId = CurrentScene:GetMapId()
|
|
|
|
|
local entityDataList = XRpgMakerGameConfigs.GetMixBlockEntityListByPosition(mapId, x, y)
|
|
|
|
|
for _, data in ipairs(entityDataList) do
|
|
|
|
|
if data:GetType() == metaType then
|
|
|
|
|
local entityId = XRpgMakerGameConfigs.GetEntityIndex(mapId, data)
|
|
|
|
|
local entityObj = XTool.IsNumberValid(entityId) and XDataCenter.RpgMakerGameManager.GetEntityObj(entityId)
|
|
|
|
|
return entityObj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XRpgMakerGameManager.GetWaterObjDic()
|
|
|
|
|
return WaterObjDic
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@param dropId integer
|
|
|
|
|
---@return XRpgMakerGameDrop
|
|
|
|
|
function XRpgMakerGameManager.GetDropObj(dropId)
|
|
|
|
|
local obj = DropObjDic[dropId]
|
|
|
|
|
if obj then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---@param bubbleId integer
|
|
|
|
|
---@return XRpgMakerGameBubble
|
|
|
|
|
function XRpgMakerGameManager.GetBubbleObj(bubbleId)
|
|
|
|
|
local obj = BubbleObjDic[bubbleId]
|
|
|
|
|
if obj then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---@param magicId integer
|
|
|
|
|
---@return XRpgMakerGameMagic
|
|
|
|
|
function XRpgMakerGameManager.GetMagicObj(magicId)
|
|
|
|
|
local obj = MagicObjDic[magicId]
|
|
|
|
|
if obj then
|
|
|
|
|
return obj
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--是否会被草埔遮挡
|
|
|
|
|
function XRpgMakerGameManager.IsGrassShelter(x, y)
|
|
|
|
|
local currentScene = XRpgMakerGameManager.GetCurrentScene()
|
|
|
|
|
local mapId = currentScene:GetMapId()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local entityMapDataList = XRpgMakerGameConfigs.GetMixBlockEntityListByPosition(mapId, x, y)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local obj
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
for _, entityMapData in pairs(entityMapDataList) do
|
|
|
|
|
local entityId = XRpgMakerGameConfigs.GetEntityIndex(mapId, entityMapData)
|
|
|
|
|
if entityMapData:GetType() == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Grass then
|
2023-07-14 19:35:33 +00:00
|
|
|
|
obj = XRpgMakerGameManager.GetEntityObj(entityId)
|
|
|
|
|
if obj and obj:IsActive() then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
obj = currentScene:GetGrass(x, y)
|
|
|
|
|
return obj and obj:IsActive() or false
|
|
|
|
|
end
|
|
|
|
|
-----------------关卡内 end--------------------
|
|
|
|
|
|
|
|
|
|
-----------------角色相关 begin----------------
|
|
|
|
|
function XRpgMakerGameManager.GetOnceUnLockRoleId()
|
|
|
|
|
local roleIdList = XRpgMakerGameConfigs.GetRpgMakerGameRoleIdList()
|
|
|
|
|
for _, roleId in ipairs(roleIdList) do
|
|
|
|
|
if XRpgMakerGameManager.IsUnlockRole(roleId) then
|
|
|
|
|
return roleId
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return roleIdList[1]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.IsUnlockRole(roleId)
|
|
|
|
|
if not XTool.IsNumberValid(roleId) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local unlockRoleIdList = XRpgMakerGameManager.GetUnlockRoleIdList()
|
|
|
|
|
for _, unlockRoleId in ipairs(unlockRoleIdList) do
|
|
|
|
|
if unlockRoleId == roleId then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return false, XRpgMakerGameConfigs.GetRpgMakerGameRoleLockTipsDesc(roleId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRpgMakerGameManager.GetUnlockRoleIdList()
|
|
|
|
|
return RpgMakerGameActivityDb:GetUnlockRoleIdList()
|
|
|
|
|
end
|
|
|
|
|
-----------------角色相关 end------------------
|
|
|
|
|
|
|
|
|
|
-----------------协议相关 begin----------------
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--进入活动请求
|
|
|
|
|
function XRpgMakerGameManager.RequestRpgMakerGameEnter()
|
|
|
|
|
if not XDataCenter.RpgMakerGameManager.CheckActivityCondition() then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XNetwork.Call("RpgMakerGameEnterRequest", {}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
RpgMakerGameActivityDb:UpdateData(res.ActivityDb or res.ActivityData) --中途改了名字,防止出错
|
|
|
|
|
if not XLuaUiManager.IsUiLoad("UiRpgMakerGameMain") then
|
|
|
|
|
XLuaUiManager.Open("UiRpgMakerGameMain")
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--进入一个TileMap
|
|
|
|
|
function XRpgMakerGameManager.RequestRpgMakerGameEnterStage(stageId, selectRoleId, cb)
|
|
|
|
|
local req = { StageId = stageId, SelectRoleId = selectRoleId }
|
|
|
|
|
XNetwork.Call("RpgMakerGameEnterStageRequest", req, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
CurrentScene:RemoveScene()
|
|
|
|
|
XRpgMakerGameManager.ResetActions()
|
|
|
|
|
|
|
|
|
|
RpgMakerGameEnterStageDb:UpdateData(res)
|
|
|
|
|
for _, action in ipairs(res.Actions or {}) do
|
|
|
|
|
InsertAction(action)
|
|
|
|
|
end
|
|
|
|
|
XRpgMakerGameManager.InitStageMap(res.MapId, res.SelectRoleId)
|
|
|
|
|
|
|
|
|
|
XLuaUiManager.Open("UiFubenRpgMakerGameMovie", stageId)
|
|
|
|
|
CurrentScene:LoadScene(res.MapId, function()
|
|
|
|
|
local delay = CS.XGame.ClientConfig:GetInt("RpgMakerGameLoadingDelayClose") --延迟Loading界面关闭的时间
|
|
|
|
|
|
|
|
|
|
XScheduleManager.ScheduleOnce(function()
|
|
|
|
|
XLuaUiManager.Close("UiFubenRpgMakerGameMovie")
|
|
|
|
|
CurrentScene:SetSceneActive(false) --处理光照异常
|
|
|
|
|
CurrentScene:SetSceneActive(true)
|
|
|
|
|
if cb then
|
|
|
|
|
cb()
|
|
|
|
|
end
|
|
|
|
|
end, delay)
|
|
|
|
|
end)
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--玩家移动
|
|
|
|
|
function XRpgMakerGameManager.RequestRpgMakerGameMapMove(mapId, direction, cb)
|
|
|
|
|
if IsLockReqMove() then return end
|
|
|
|
|
|
|
|
|
|
local req = { MapId = mapId, Direction = direction }
|
|
|
|
|
LockReqMove()
|
|
|
|
|
XNetwork.Call("RpgMakerGameMapMoveRequest", req, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
UnLockReqMove()
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, action in ipairs(res.Actions) do
|
|
|
|
|
InsertAction(action)
|
|
|
|
|
end
|
|
|
|
|
CheckSetPlayElectricStatusSwitchSound(res.Actions)
|
|
|
|
|
|
|
|
|
|
UnLockReqMove()
|
|
|
|
|
|
|
|
|
|
if cb then
|
|
|
|
|
cb()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--重置游戏
|
|
|
|
|
function XRpgMakerGameManager.RequestRpgMakerGameMapResetGame(mapId, cb)
|
|
|
|
|
if IsLockReqReset() then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
LockReqReset()
|
|
|
|
|
local req = { MapId = mapId }
|
|
|
|
|
XNetwork.Call("RpgMakerGameMapResetGameRequest", req, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
UnLockReqReset()
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XRpgMakerGameManager.ResetStageMap()
|
|
|
|
|
for _, action in ipairs(res.Actions or {}) do
|
|
|
|
|
InsertAction(action)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if cb then
|
|
|
|
|
cb()
|
|
|
|
|
end
|
|
|
|
|
UnLockReqReset()
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--后退
|
|
|
|
|
function XRpgMakerGameManager.RequestRpgMakerGameMapBackUp(mapId, cb)
|
|
|
|
|
local currCount = XRpgMakerGameManager.GetCurrentCount()
|
|
|
|
|
if currCount == 0 then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local req = { MapId = mapId }
|
|
|
|
|
XNetwork.Call("RpgMakerGameMapBackUpRequest", req, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XRpgMakerGameManager.UpdateMapStatusDb(res.GameMapStatusDb)
|
|
|
|
|
for _, action in ipairs(res.Actions or {}) do
|
|
|
|
|
InsertAction(action)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local currentRound = res.GameMapStatusDb.CurrentRound
|
|
|
|
|
if cb then
|
|
|
|
|
cb(currentRound)
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--解锁提示
|
|
|
|
|
function XRpgMakerGameManager.RequestRpgMakerGameMapUnlockHint(stageId, type, cb)
|
|
|
|
|
local req = {
|
|
|
|
|
StageId = stageId,
|
|
|
|
|
Type = type, --1提示,2答案
|
|
|
|
|
}
|
|
|
|
|
XNetwork.Call("RpgMakerGameMapUnlockHintRequest", req, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local stageDb = XRpgMakerGameManager.GetRpgMakerActivityStageDb(stageId)
|
|
|
|
|
if stageDb then
|
|
|
|
|
if type == XRpgMakerGameConfigs.XRpgMakerGameRoleAnswerType.Hint then
|
|
|
|
|
stageDb:SetHint(1)
|
|
|
|
|
else
|
|
|
|
|
stageDb:SetAnswer(1)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if cb then
|
|
|
|
|
cb()
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
-----------------协议相关 end----------------
|
|
|
|
|
|
|
|
|
|
return XRpgMakerGameManager
|
2024-09-01 20:49:41 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--登陆下发
|
|
|
|
|
XRpc.NotifyRpgMakerGameActivityData = function(data)
|
|
|
|
|
XDataCenter.RpgMakerGameManager.UpdateActivityData(data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|