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,6 +34,7 @@ function Adv:initByInfo(advInfo) | ||
34 | self.mapStack = advInfo.mstack or {} | 34 | self.mapStack = advInfo.mstack or {} |
35 | self.lchoose = advInfo.lch or {} | 35 | self.lchoose = advInfo.lch or {} |
36 | self.waitArtifact = advInfo.waitAF | 36 | self.waitArtifact = advInfo.waitAF |
37 | + self.cacheUnlock = advInfo.cacheUnlock or {} | ||
37 | self.maps = {} | 38 | self.maps = {} |
38 | for id, map in ipairs(advInfo.maps or {}) do | 39 | for id, map in ipairs(advInfo.maps or {}) do |
39 | self.maps[id] = AdvMap.new(self, id, map) | 40 | self.maps[id] = AdvMap.new(self, id, map) |
@@ -58,6 +59,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) | @@ -58,6 +59,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) | ||
58 | self.mapStack = {1} -- 最后一个为当前的地图 | 59 | self.mapStack = {1} -- 最后一个为当前的地图 |
59 | self.lchoose = self.lchoose or {} | 60 | self.lchoose = self.lchoose or {} |
60 | self.owner._advWheelSurfCount = nil -- 抽奖进行次数 | 61 | self.owner._advWheelSurfCount = nil -- 抽奖进行次数 |
62 | + self.cacheUnlock = self.cacheUnlock or {} | ||
61 | 63 | ||
62 | -- 随机出地图 | 64 | -- 随机出地图 |
63 | local mapId = self:randomMapId(chapterId, level) | 65 | local mapId = self:randomMapId(chapterId, level) |
@@ -69,6 +71,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) | @@ -69,6 +71,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) | ||
69 | self:initLayerTask() | 71 | self:initLayerTask() |
70 | 72 | ||
71 | self:checkTask(Adv.TaskType.Arrive) | 73 | self:checkTask(Adv.TaskType.Arrive) |
74 | + self:checkAdvUnlock(1, self.level) | ||
72 | if isToNext then | 75 | if isToNext then |
73 | self.battle.player:afterLayer() -- 玩家的buff 清理一下 | 76 | self.battle.player:afterLayer() -- 玩家的buff 清理一下 |
74 | self:scoreChange(AdvScoreType.Level) --增加层级加分 | 77 | self:scoreChange(AdvScoreType.Level) --增加层级加分 |
@@ -89,6 +92,7 @@ function Adv:clear() | @@ -89,6 +92,7 @@ function Adv:clear() | ||
89 | self.maps = {} | 92 | self.maps = {} |
90 | self.battle = nil | 93 | self.battle = nil |
91 | self.waitArtifact = nil | 94 | self.waitArtifact = nil |
95 | + self.cacheUnlock = {} | ||
92 | end | 96 | end |
93 | 97 | ||
94 | function Adv:saveDB(notNotify) | 98 | function Adv:saveDB(notNotify) |
@@ -103,6 +107,7 @@ function Adv:saveDB(notNotify) | @@ -103,6 +107,7 @@ function Adv:saveDB(notNotify) | ||
103 | advInfo.mstack = self.mapStack | 107 | advInfo.mstack = self.mapStack |
104 | advInfo.lch = self.lchoose | 108 | advInfo.lch = self.lchoose |
105 | advInfo.waitAF = self.waitArtifact | 109 | advInfo.waitAF = self.waitArtifact |
110 | + advInfo.cacheUnlock = self.cacheUnlock | ||
106 | advInfo.maps = {} | 111 | advInfo.maps = {} |
107 | 112 | ||
108 | self.battle:saveDB() | 113 | self.battle:saveDB() |
@@ -122,6 +127,37 @@ function Adv:saveDB(notNotify) | @@ -122,6 +127,37 @@ function Adv:saveDB(notNotify) | ||
122 | self.owner:updateProperties({advInfo = advInfo, advTeam = advTeam}, notNotify) | 127 | self.owner:updateProperties({advInfo = advInfo, advTeam = advTeam}, notNotify) |
123 | end | 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 | function Adv:initBattle() | 161 | function Adv:initBattle() |
126 | self.battle = require("adv.AdvBattle").new(self) | 162 | self.battle = require("adv.AdvBattle").new(self) |
127 | for _, passiveC in ipairs(self.cachePassiveEvent or {}) do | 163 | for _, passiveC in ipairs(self.cachePassiveEvent or {}) do |
@@ -327,6 +363,7 @@ function Adv:over(success, isAllPass) | @@ -327,6 +363,7 @@ function Adv:over(success, isAllPass) | ||
327 | self.owner._advWheelSurfCount = 0 -- 抽奖进行次数 | 363 | self.owner._advWheelSurfCount = 0 -- 抽奖进行次数 |
328 | end | 364 | end |
329 | end | 365 | end |
366 | + self:clearAdvUnlockCache() | ||
330 | self:clear() | 367 | self:clear() |
331 | self.owner:checkTaskEnter("AdvScore", {score = score}) | 368 | self.owner:checkTaskEnter("AdvScore", {score = score}) |
332 | self.owner:updateProperty({field = "advItems", value = ""}) | 369 | self.owner:updateProperty({field = "advItems", value = ""}) |
@@ -475,6 +512,7 @@ local function clickOut(self, room, block, params) | @@ -475,6 +512,7 @@ local function clickOut(self, room, block, params) | ||
475 | end | 512 | end |
476 | 513 | ||
477 | self:checkAchievement(Adv.AchievType.OverWin, 1, self.level) | 514 | self:checkAchievement(Adv.AchievType.OverWin, 1, self.level) |
515 | + self:checkAdvUnlock(2, self.level) | ||
478 | local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel | 516 | local levellimit = csvdb["adv_chapterCsv"][self.chapterId].limitlevel |
479 | if params.relay or (not self:isEndless() and (self.level >= levellimit or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1))) then --关卡结束 | 517 | if params.relay or (not self:isEndless() and (self.level >= levellimit or not self.owner:advChapterIsOpen(self.chapterId, self.level + 1))) then --关卡结束 |
480 | self:over(true, not self:isEndless() and self.level >= levellimit) | 518 | self:over(true, not self:isEndless() and self.level >= levellimit) |
@@ -586,6 +624,7 @@ local function chooseCommon(self, room, block, chooseData, choose) | @@ -586,6 +624,7 @@ local function chooseCommon(self, room, block, chooseData, choose) | ||
586 | end | 624 | end |
587 | self:checkTask(Adv.TaskType.Choose, 1, block.event.id) | 625 | self:checkTask(Adv.TaskType.Choose, 1, block.event.id) |
588 | self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id) | 626 | self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id) |
627 | + self:checkAdvUnlock(3, block.event.id) | ||
589 | return true, clearBlock | 628 | return true, clearBlock |
590 | end | 629 | end |
591 | 630 | ||
@@ -613,6 +652,7 @@ local function clickLinkChoose(self, room, block, params) | @@ -613,6 +652,7 @@ local function clickLinkChoose(self, room, block, params) | ||
613 | local startId = math.floor(block.event.id / 10) * 10 + 1 | 652 | local startId = math.floor(block.event.id / 10) * 10 + 1 |
614 | self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 | 653 | self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 |
615 | self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) | 654 | self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) |
655 | + self:checkAdvUnlock(4, startId) | ||
616 | else | 656 | else |
617 | self.lchoose.ing = block.event.id + 1 --后面会出现后继事件 | 657 | self.lchoose.ing = block.event.id + 1 --后面会出现后继事件 |
618 | end | 658 | end |
src/models/RolePlugin.lua
@@ -714,17 +714,25 @@ function RolePlugin.bind(Role) | @@ -714,17 +714,25 @@ function RolePlugin.bind(Role) | ||
714 | if csvdb["itemCsv"][func] and csvdb["itemCsv"][func].type == ItemType.FuncOpen then | 714 | if csvdb["itemCsv"][func] and csvdb["itemCsv"][func].type == ItemType.FuncOpen then |
715 | local unlockData = csvdb["unlockCsv"][func] | 715 | local unlockData = csvdb["unlockCsv"][func] |
716 | if unlockData.type == 4 then -- 解锁神器 | 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 | elseif TypeIsFunc[unlockData.type] then | 720 | elseif TypeIsFunc[unlockData.type] then |
719 | if unlockData.value1 == 0 or unlockData.value1 == 1 then | 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 | else | 725 | else |
722 | local oldV = self:getFuncLv(unlockData.type) | 726 | local oldV = self:getFuncLv(unlockData.type) |
723 | local newLv = math.min(oldV + count, unlockData.value2) | 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 | end | 731 | end |
726 | else | 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 | end | 736 | end |
729 | end | 737 | end |
730 | end | 738 | end |