Commit f45d3a7bc9280e7b6fed64cf57ebefec03f707a1
1 parent
eee37c88
adv_unlock
Showing
2 changed files
with
52 additions
and
4 deletions
Show diff stats
src/adv/Adv.lua
| ... | ... | @@ -34,6 +34,7 @@ function Adv:initByInfo(advInfo) |
| 34 | 34 | self.mapStack = advInfo.mstack or {} |
| 35 | 35 | self.lchoose = advInfo.lch or {} |
| 36 | 36 | self.waitArtifact = advInfo.waitAF |
| 37 | + self.cacheUnlock = advInfo.cacheUnlock or {} | |
| 37 | 38 | self.maps = {} |
| 38 | 39 | for id, map in ipairs(advInfo.maps or {}) do |
| 39 | 40 | self.maps[id] = AdvMap.new(self, id, map) |
| ... | ... | @@ -58,6 +59,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) |
| 58 | 59 | self.mapStack = {1} -- 最后一个为当前的地图 |
| 59 | 60 | self.lchoose = self.lchoose or {} |
| 60 | 61 | self.owner._advWheelSurfCount = nil -- 抽奖进行次数 |
| 62 | + self.cacheUnlock = self.cacheUnlock or {} | |
| 61 | 63 | |
| 62 | 64 | -- 随机出地图 |
| 63 | 65 | local mapId = self:randomMapId(chapterId, level) |
| ... | ... | @@ -69,6 +71,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) |
| 69 | 71 | self:initLayerTask() |
| 70 | 72 | |
| 71 | 73 | self:checkTask(Adv.TaskType.Arrive) |
| 74 | + self:checkAdvUnlock(1, self.level) | |
| 72 | 75 | if isToNext then |
| 73 | 76 | self.battle.player:afterLayer() -- 玩家的buff 清理一下 |
| 74 | 77 | self:scoreChange(AdvScoreType.Level) --增加层级加分 |
| ... | ... | @@ -89,6 +92,7 @@ function Adv:clear() |
| 89 | 92 | self.maps = {} |
| 90 | 93 | self.battle = nil |
| 91 | 94 | self.waitArtifact = nil |
| 95 | + self.cacheUnlock = {} | |
| 92 | 96 | end |
| 93 | 97 | |
| 94 | 98 | function Adv:saveDB(notNotify) |
| ... | ... | @@ -103,6 +107,7 @@ function Adv:saveDB(notNotify) |
| 103 | 107 | advInfo.mstack = self.mapStack |
| 104 | 108 | advInfo.lch = self.lchoose |
| 105 | 109 | advInfo.waitAF = self.waitArtifact |
| 110 | + advInfo.cacheUnlock = self.cacheUnlock | |
| 106 | 111 | advInfo.maps = {} |
| 107 | 112 | |
| 108 | 113 | self.battle:saveDB() |
| ... | ... | @@ -122,6 +127,37 @@ function Adv:saveDB(notNotify) |
| 122 | 127 | self.owner:updateProperties({advInfo = advInfo, advTeam = advTeam}, notNotify) |
| 123 | 128 | end |
| 124 | 129 | |
| 130 | +-- 1=抵达x层;2=通关x层;3=完成指定事件;4=完成指定连锁事件 | |
| 131 | +function Adv:checkAdvUnlock(utype, value) | |
| 132 | + if not self.chapterId then return end | |
| 133 | + local chapter = self.chapterId % 100 | |
| 134 | + local reward = {} | |
| 135 | + for id, data in pairs(csvdb["adv_unlockCsv"]) do | |
| 136 | + if data.chapterid == chapter and data.type == utype and value == data.value then | |
| 137 | + --0=立即获得;1=结算时获得 | |
| 138 | + if data.time == 0 then | |
| 139 | + reward[data.itemid] = 1 | |
| 140 | + elseif data.time == 1 then | |
| 141 | + table.insert(self.cacheUnlock, data.itemid) | |
| 142 | + end | |
| 143 | + end | |
| 144 | + end | |
| 145 | + if next(reward) then | |
| 146 | + self.owner:award(reward) | |
| 147 | + end | |
| 148 | +end | |
| 149 | + | |
| 150 | +function Adv:clearAdvUnlockCache() | |
| 151 | + local reward = {} | |
| 152 | + for _, itemId in ipairs(self.cacheUnlock) do | |
| 153 | + reward[itemId] = 1 | |
| 154 | + end | |
| 155 | + if next(reward) then | |
| 156 | + self.owner:award(reward) | |
| 157 | + end | |
| 158 | + self.cacheUnlock = {} | |
| 159 | +end | |
| 160 | + | |
| 125 | 161 | function Adv:initBattle() |
| 126 | 162 | self.battle = require("adv.AdvBattle").new(self) |
| 127 | 163 | for _, passiveC in ipairs(self.cachePassiveEvent or {}) do |
| ... | ... | @@ -327,6 +363,7 @@ function Adv:over(success, isAllPass) |
| 327 | 363 | self.owner._advWheelSurfCount = 0 -- 抽奖进行次数 |
| 328 | 364 | end |
| 329 | 365 | end |
| 366 | + self:clearAdvUnlockCache() | |
| 330 | 367 | self:clear() |
| 331 | 368 | self.owner:checkTaskEnter("AdvScore", {score = score}) |
| 332 | 369 | self.owner:updateProperty({field = "advItems", value = ""}) |
| ... | ... | @@ -475,6 +512,7 @@ local function clickOut(self, room, block, params) |
| 475 | 512 | end |
| 476 | 513 | |
| 477 | 514 | self:checkAchievement(Adv.AchievType.OverWin, 1, self.level) |
| 515 | + self:checkAdvUnlock(2, self.level) | |
| 478 | 516 | local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel |
| 479 | 517 | if params.relay or (not self:isEndless() and (self.level >= levellimit or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1))) then --关卡结束 |
| 480 | 518 | self:over(true, not self:isEndless() and self.level >= levellimit) |
| ... | ... | @@ -586,6 +624,7 @@ local function chooseCommon(self, room, block, chooseData, choose) |
| 586 | 624 | end |
| 587 | 625 | self:checkTask(Adv.TaskType.Choose, 1, block.event.id) |
| 588 | 626 | self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id) |
| 627 | + self:checkAdvUnlock(3, block.event.id) | |
| 589 | 628 | return true, clearBlock |
| 590 | 629 | end |
| 591 | 630 | |
| ... | ... | @@ -613,6 +652,7 @@ local function clickLinkChoose(self, room, block, params) |
| 613 | 652 | local startId = math.floor(block.event.id / 10) * 10 + 1 |
| 614 | 653 | self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 |
| 615 | 654 | self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) |
| 655 | + self:checkAdvUnlock(4, startId) | |
| 616 | 656 | else |
| 617 | 657 | self.lchoose.ing = block.event.id + 1 --后面会出现后继事件 |
| 618 | 658 | end | ... | ... |
src/models/RolePlugin.lua
| ... | ... | @@ -714,17 +714,25 @@ function RolePlugin.bind(Role) |
| 714 | 714 | if csvdb["itemCsv"][func] and csvdb["itemCsv"][func].type == ItemType.FuncOpen then |
| 715 | 715 | local unlockData = csvdb["unlockCsv"][func] |
| 716 | 716 | if unlockData.type == 4 then -- 解锁神器 |
| 717 | - self:changeUpdates({{type = "advAFOpen", field = unlockData.value1, value = 1}}) | |
| 717 | + if self:getProperty("advAFOpen")[unlockData.value1] ~= 1 then | |
| 718 | + self:changeUpdates({{type = "advAFOpen", field = unlockData.value1, value = 1}}) | |
| 719 | + end | |
| 718 | 720 | elseif TypeIsFunc[unlockData.type] then |
| 719 | 721 | if unlockData.value1 == 0 or unlockData.value1 == 1 then |
| 720 | - self:changeUpdates({{type = "funcOpen", field = unlockData.type, value = 1}}) | |
| 722 | + if self:getProperty("funcOpen")[unlockData.type] ~= 1 then | |
| 723 | + self:changeUpdates({{type = "funcOpen", field = unlockData.type, value = 1}}) | |
| 724 | + end | |
| 721 | 725 | else |
| 722 | 726 | local oldV = self:getFuncLv(unlockData.type) |
| 723 | 727 | local newLv = math.min(oldV + count, unlockData.value2) |
| 724 | - self:changeUpdates({{type = "funcLv", field = unlockData.type, value = newLv}}) | |
| 728 | + if oldV ~= newLv then | |
| 729 | + self:changeUpdates({{type = "funcLv", field = unlockData.type, value = newLv}}) | |
| 730 | + end | |
| 725 | 731 | end |
| 726 | 732 | else |
| 727 | - self:changeUpdates({{type = "funcOpen", field = func, value = 1}}) | |
| 733 | + if self:getProperty("funcOpen")[func] ~= 1 then | |
| 734 | + self:changeUpdates({{type = "funcOpen", field = func, value = 1}}) | |
| 735 | + end | |
| 728 | 736 | end |
| 729 | 737 | end |
| 730 | 738 | end | ... | ... |