local ServerChapterData = class("ServerChapterData", ServerBaseData) local MIN_CHAPTER_ID = 1 function ServerChapterData:init(data) self.data.chapterId = data and data.chapterId or MIN_CHAPTER_ID self.data.maxChapterId = data and data.maxChapterId or (self.data.chapterId - 1) self.data.chapterBoxInfo = data and data.chapterBoxInfo or {} self.data.chapterFightInfo = data and data.chapterFightInfo or {} end function ServerChapterData:fightChapter(id, victory, wave) local idStr = tostring(id) if not self.data.chapterFightInfo[idStr] then self.data.chapterFightInfo[idStr] = { victory = false, maxWave = 0 } end local passBefore = self.data.chapterFightInfo[idStr].victory if victory then self.data.chapterFightInfo[idStr].victory = victory end if wave > self.data.chapterFightInfo[idStr].maxWave then self.data.chapterFightInfo[idStr].maxWave = wave end if not passBefore and victory then if id > self.data.maxChapterId then self.data.maxChapterId = id end end end function ServerChapterData:getChapterBoxRewardGot(chapterId, index) local idStr = tostring(chapterId) local list = self.data.chapterBoxInfo[idStr] if not list then return false end for _, idx in ipairs(list) do if idx == index then return true end end return false end function ServerChapterData:getChapterBoxRewards(chapterId, index) local cfg = ConfigManager:getConfig("chapter")[chapterId] if not cfg then return end return cfg["box_reward_" .. index] end function ServerChapterData:openChapterBox(chapterId, index) local idStr = tostring(chapterId) local list = self.data.chapterBoxInfo[idStr] if not list then self.data.chapterBoxInfo[idStr] = {} else for _, idx in ipairs(list) do if idx == index then return false end end end table.insert(self.data.chapterBoxInfo[idStr], index) return true end return ServerChapterData