diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index c864584..46e5543 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -34,6 +34,7 @@ function Adv:initByInfo(advInfo) self.mapStack = advInfo.mstack or {} self.lchoose = advInfo.lch or {} self.waitArtifact = advInfo.waitAF + self.cacheUnlock = advInfo.cacheUnlock or {} self.maps = {} for id, map in ipairs(advInfo.maps or {}) do self.maps[id] = AdvMap.new(self, id, map) @@ -58,6 +59,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) self.mapStack = {1} -- 最后一个为当前的地图 self.lchoose = self.lchoose or {} self.owner._advWheelSurfCount = nil -- 抽奖进行次数 + self.cacheUnlock = self.cacheUnlock or {} -- 随机出地图 local mapId = self:randomMapId(chapterId, level) @@ -69,6 +71,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) self:initLayerTask() self:checkTask(Adv.TaskType.Arrive) + self:checkAdvUnlock(1, self.level) if isToNext then self.battle.player:afterLayer() -- 玩家的buff 清理一下 self:scoreChange(AdvScoreType.Level) --增加层级加分 @@ -89,6 +92,7 @@ function Adv:clear() self.maps = {} self.battle = nil self.waitArtifact = nil + self.cacheUnlock = {} end function Adv:saveDB(notNotify) @@ -103,6 +107,7 @@ function Adv:saveDB(notNotify) advInfo.mstack = self.mapStack advInfo.lch = self.lchoose advInfo.waitAF = self.waitArtifact + advInfo.cacheUnlock = self.cacheUnlock advInfo.maps = {} self.battle:saveDB() @@ -122,6 +127,37 @@ function Adv:saveDB(notNotify) self.owner:updateProperties({advInfo = advInfo, advTeam = advTeam}, notNotify) end +-- 1=抵达x层;2=通关x层;3=完成指定事件;4=完成指定连锁事件 +function Adv:checkAdvUnlock(utype, value) + if not self.chapterId then return end + local chapter = self.chapterId % 100 + local reward = {} + for id, data in pairs(csvdb["adv_unlockCsv"]) do + if data.chapterid == chapter and data.type == utype and value == data.value then + --0=立即获得;1=结算时获得 + if data.time == 0 then + reward[data.itemid] = 1 + elseif data.time == 1 then + table.insert(self.cacheUnlock, data.itemid) + end + end + end + if next(reward) then + self.owner:award(reward) + end +end + +function Adv:clearAdvUnlockCache() + local reward = {} + for _, itemId in ipairs(self.cacheUnlock) do + reward[itemId] = 1 + end + if next(reward) then + self.owner:award(reward) + end + self.cacheUnlock = {} +end + function Adv:initBattle() self.battle = require("adv.AdvBattle").new(self) for _, passiveC in ipairs(self.cachePassiveEvent or {}) do @@ -327,6 +363,7 @@ function Adv:over(success, isAllPass) self.owner._advWheelSurfCount = 0 -- 抽奖进行次数 end end + self:clearAdvUnlockCache() self:clear() self.owner:checkTaskEnter("AdvScore", {score = score}) self.owner:updateProperty({field = "advItems", value = ""}) @@ -475,6 +512,7 @@ local function clickOut(self, room, block, params) end self:checkAchievement(Adv.AchievType.OverWin, 1, self.level) + self:checkAdvUnlock(2, self.level) local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel if params.relay or (not self:isEndless() and (self.level >= levellimit or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1))) then --关卡结束 self:over(true, not self:isEndless() and self.level >= levellimit) @@ -586,6 +624,7 @@ local function chooseCommon(self, room, block, chooseData, choose) end self:checkTask(Adv.TaskType.Choose, 1, block.event.id) self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id) + self:checkAdvUnlock(3, block.event.id) return true, clearBlock end @@ -613,6 +652,7 @@ local function clickLinkChoose(self, room, block, params) local startId = math.floor(block.event.id / 10) * 10 + 1 self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) + self:checkAdvUnlock(4, startId) else self.lchoose.ing = block.event.id + 1 --后面会出现后继事件 end diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index 71bb7ed..9959dab 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -714,17 +714,25 @@ function RolePlugin.bind(Role) if csvdb["itemCsv"][func] and csvdb["itemCsv"][func].type == ItemType.FuncOpen then local unlockData = csvdb["unlockCsv"][func] if unlockData.type == 4 then -- 解锁神器 - self:changeUpdates({{type = "advAFOpen", field = unlockData.value1, value = 1}}) + if self:getProperty("advAFOpen")[unlockData.value1] ~= 1 then + self:changeUpdates({{type = "advAFOpen", field = unlockData.value1, value = 1}}) + end elseif TypeIsFunc[unlockData.type] then if unlockData.value1 == 0 or unlockData.value1 == 1 then - self:changeUpdates({{type = "funcOpen", field = unlockData.type, value = 1}}) + if self:getProperty("funcOpen")[unlockData.type] ~= 1 then + self:changeUpdates({{type = "funcOpen", field = unlockData.type, value = 1}}) + end else local oldV = self:getFuncLv(unlockData.type) local newLv = math.min(oldV + count, unlockData.value2) - self:changeUpdates({{type = "funcLv", field = unlockData.type, value = newLv}}) + if oldV ~= newLv then + self:changeUpdates({{type = "funcLv", field = unlockData.type, value = newLv}}) + end end else - self:changeUpdates({{type = "funcOpen", field = func, value = 1}}) + if self:getProperty("funcOpen")[func] ~= 1 then + self:changeUpdates({{type = "funcOpen", field = func, value = 1}}) + end end end end -- libgit2 0.21.2