local type = type local pairs = pairs local XMonsterCombatStage = require("XEntity/XMonsterCombat/XMonsterCombatStage") local XMonsterCombatFormation = require("XEntity/XMonsterCombat/XMonsterCombatFormation") --[[ public class NotifyMonsterCombatData { // 活动id public int ActivityId; // 已通关关卡 public List PassStages = new List(); // 已通关章节 public HashSet PassChapters = new HashSet(); // 已解锁怪物 public HashSet UnlockMonsters = new HashSet(); // 章节阵容 public List ChapterFormations = new List(); } ]] local Default = { _ActivityId = 0, -- 活动Id _PassStages = {}, -- 已通关关卡 _PassChapters = {}, -- 已通关章节 _UnlockMonsters = {}, -- 已解锁怪物 _ChapterFormations = {}, -- 章节阵容 } ---@class XMonsterCombat ---@field _ActivityId number 活动Id ---@field _PassStages table 已通关关卡 ---@field _PassChapters table 已通关章节 ---@field _UnlockMonsters table 已解锁怪物 ---@field _ChapterFormations table 章节阵容 local XMonsterCombat = XClass(nil, "XMonsterCombat") function XMonsterCombat:Ctor(data) for key, value in pairs(Default) do if type(value) == "table" then self[key] = {} else self[key] = value end end if data then self:UpdateData(data) end end function XMonsterCombat:UpdateData(data) self._ActivityId = data.ActivityId self._PassStages = {} for _, passStage in pairs(data.PassStages) do self:UpdatePassStage(passStage) end self._PassChapters = {} for _, chapterId in pairs(data.PassChapters) do self:UpdatePassChapter(chapterId) end self._UnlockMonsters = {} for _, monsterId in pairs(data.UnlockMonsters) do self:UpdateUnlockMonster(monsterId) end self._ChapterFormations = {} for _, chapterFormation in pairs(data.ChapterFormations) do self:UpdateChapterFormation(chapterFormation) end end function XMonsterCombat:UpdatePassStage(data) local stageId = data.StageId local passStage = self._PassStages[stageId] if not passStage then passStage = XMonsterCombatStage.New() self._PassStages[stageId] = passStage end passStage:UpdateData(data) end function XMonsterCombat:UpdatePassChapter(chapterId) if not XTool.IsNumberValid(chapterId) then return end self._PassChapters[chapterId] = chapterId end function XMonsterCombat:UpdateUnlockMonster(monsterId) if not XTool.IsNumberValid(monsterId) then return end self._UnlockMonsters[monsterId] = monsterId end function XMonsterCombat:UpdateChapterFormation(data) local chapterId = data.ChapterId local chapterFormation = self._ChapterFormations[chapterId] if not chapterFormation then chapterFormation = XMonsterCombatFormation.New() self._ChapterFormations[chapterId] = chapterFormation end chapterFormation:UpdateData(data) end function XMonsterCombat:GetActivityId() return self._ActivityId end -- 获取关卡最大分数 function XMonsterCombat:GetStageMaxScore(stageId) local passStage = self._PassStages[stageId] if passStage then return passStage:GetMaxScore() end return 0 end -- 获取编队角色Id function XMonsterCombat:GetFormationEntityId(chapterId) local chapterFormation = self._ChapterFormations[chapterId] if not chapterFormation then return 0 end local entityId = 0 local characterId = chapterFormation:GetCharacterId() if XTool.IsNumberValid(characterId) then entityId = characterId end local robotId = chapterFormation:GetRobotId() if XTool.IsNumberValid(robotId) then entityId = robotId end return entityId end -- 获取编队怪物 function XMonsterCombat:GetFormationMonsters(chapterId) local chapterFormation = self._ChapterFormations[chapterId] if not chapterFormation then return {} end return chapterFormation:GetMonsterIds() end -- 获取所有解锁怪物 function XMonsterCombat:GetAllUnlockMonsters() return self._UnlockMonsters end -- 检查章节是否通关 function XMonsterCombat:CheckChapterPass(chapterId) return self._PassChapters[chapterId] and true or false end -- 检查关卡是否通关 function XMonsterCombat:CheckStagePass(stageId) return self._PassStages[stageId] and true or false end -- 检查怪物是否解锁 function XMonsterCombat:CheckMonsterUnlock(monsterId) return self._UnlockMonsters[monsterId] and true or false end return XMonsterCombat