Commit f45d3a7bc9280e7b6fed64cf57ebefec03f707a1

Authored by zhouhaihai
1 parent eee37c88

adv_unlock

Showing 2 changed files with 52 additions and 4 deletions   Show diff stats
@@ -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