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 | ... | ... |