Commit f45d3a7bc9280e7b6fed64cf57ebefec03f707a1

Authored by zhouhaihai
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
... ...