Commit e852b3506762d6cb6a28fa603450b7fbea57171e

Authored by zhouhaihai
1 parent 5f44bcc3

冒险成就类型增加

src/adv/Adv.lua
... ... @@ -204,6 +204,7 @@ end
204 204 function Adv:awardArtifact(id, params)
205 205 if self:isHaveArtifact(id) then return end
206 206 self.owner:changeUpdates({{type = "advAFGet", field = id, value = 1}}, params.notNotify)
  207 + self:checkAchievement(Adv.AchievType.GetMWeapon, 1, id)
207 208 self:pushBackEvent(AdvBackEventType.Artifact, {id = id})
208 209 end
209 210  
... ... @@ -284,18 +285,56 @@ function Adv:wearArtifact(slot, id)
284 285 return true
285 286 end
286 287  
  288 +-- 是否穿着指定神器
  289 +function Adv:isWearAF(id)
  290 + local advAFWear = self.owner:getProperty("advAFWear")
  291 + for _, _id in pairs(advAFWear) do
  292 + if _id == id then
  293 + return true
  294 + end
  295 + end
  296 + return false
  297 +end
  298 +--是否激活指定神器套装
  299 +function Adv:haveComboAF(id)
  300 + local advAFGet = self.owner:getProperty("advAFGet")
  301 + local advAFWear = self.owner:getProperty("advAFWear")
  302 + local curWear = {}
  303 + for _, _id in pairs(advAFWear) do
  304 + curWear[_id] = 1
  305 + end
  306 + for _, _id in pairs(advAFWear) do
  307 + local afData = csvdb["adv_artifactCsv"][_id][advAFGet[_id]]
  308 + if afData.comboId == id then
  309 + local comboData = csvdb["adv_artifact_comboCsv"][afData.comboId]
  310 + if comboData then
  311 + for _, _id2 in ipairs(comboData.artifactid:toArray(true)) do
  312 + if not curWear[_id2] then
  313 + return false
  314 + end
  315 + end
  316 + return true
  317 + end
  318 + return false
  319 + end
  320 + end
  321 + return false
  322 +end
  323 +
287 324 function Adv:artifactLevelUp(id)
288 325 local advAFGet = self.owner:getProperty("advAFGet")
289 326 local advAFWear = self.owner:getProperty("advAFWear")
290 327 local status = 0
  328 + local newLv = advAFGet[id] + 1
291 329 if advAFWear[id] then -- 穿着呢
292 330 local oldData = csvdb["adv_artifactCsv"][id][advAFGet[id]]
293   - local newData = csvdb["adv_artifactCsv"][id][advAFGet[id] + 1]
  331 + local newData = csvdb["adv_artifactCsv"][id][newLv]
294 332 self:delArtifactEffect(oldData.effect)
295 333 self:addArtifactEffect(newData.effect)
296 334 status = 1
297 335 end
298   - self.owner:changeUpdates({{type = "advAFGet", field = id, value = advAFGet[id] + 1}})
  336 + self.owner:changeUpdates({{type = "advAFGet", field = id, value = newLv}})
  337 + self:checkAchievement(Adv.AchievType.MWeaponLv, 1, id, newLv)
299 338 return status
300 339 end
301 340  
... ... @@ -690,6 +729,7 @@ local function clickChoose(self, room, block, params)
690 729 self:checkAdvUnlock(3, block.event.id)
691 730 self:checkTask(Adv.TaskType.Choose, 1, block.event.id)
692 731 self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id)
  732 + self:checkAchievement(Adv.AchievType.ChooseBySelect, 1, block.event.id, choose)
693 733 if clearBlock then
694 734 block:clear()
695 735 end
... ... @@ -708,6 +748,13 @@ local function clickLinkChoose(self, room, block, params)
708 748 local startId = math.floor(block.event.id / 10) * 10 + 1
709 749 self.lchoose[startId] = (self.lchoose[startId] or 0) + 1
710 750 self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId)
  751 + self:checkAchievement(Adv.AchievType.FinishStoryId, 1, chooseData.storyid)
  752 + local advStoryB = self.owner:getProperty("advStoryB")
  753 + advStoryB[chooseData.storyid] = (advStoryB[chooseData.storyid] or 0) + 1
  754 + self.owner:setProperty("advStoryB", advStoryB)
  755 + local storyData = csvdb["event_linkchoose_storyCsv"][chooseData.storyid]
  756 + self:checkAchievement(Adv.AchievType.StorryDone, 1, storyData[1].chapter) -- 检查故事对应章节
  757 +
711 758 self:checkAdvUnlock(4, startId)
712 759 self.lchoose.cur = self.lchoose.cur or {}
713 760 table.insert(self.lchoose.cur, {block.event.id, choose})
... ... @@ -763,6 +810,7 @@ local function clickBuild(self, room, block, params)
763 810  
764 811 self:checkTask(Adv.TaskType.Build, 1, block.event.id)
765 812 self:checkAchievement(Adv.AchievType.Build, 1, block.event.id)
  813 + self:checkAchievement(Adv.AchievType.BuildBySelect, 1, block.event.id, choose)
766 814  
767 815 if clearBlock then
768 816 block:clear()
... ... @@ -1147,6 +1195,20 @@ function Adv:enemyDead(enemy, escape)
1147 1195 self:checkTask(Adv.TaskType.Kill, 1, enemyId)
1148 1196 self:checkTask(Adv.TaskType.KillAll)
1149 1197 self:checkAchievement(Adv.AchievType.Kill, 1, enemyId)
  1198 + self:checkAchievement(Adv.AchievType.KillHadBuff, 1, enemy)
  1199 +
  1200 + self:checkAchievement(Adv.TaskType.KillWithBuff, 1)
  1201 + self:checkAchievement(Adv.TaskType.KillNoBuff, 1)
  1202 + self:checkAchievement(Adv.AchievType.KillWithMWeapon, 1)
  1203 + self:checkAchievement(Adv.AchievType.KillWithAMWeapon, 1)
  1204 +
  1205 + if monsterData.type == 2 then
  1206 + self:checkAchievement(Adv.TaskType.KillBoss, 1, enemyId)
  1207 + self:checkAchievement(Adv.TaskType.KillBossWithBuff, 1)
  1208 + self:checkAchievement(Adv.TaskType.KillBossNoBuff, 1)
  1209 + self:checkAchievement(Adv.AchievType.KillBossWithMWeapon, 1)
  1210 + self:checkAchievement(Adv.AchievType.KillBossWithAMWeapon, 1)
  1211 + end
1150 1212 end
1151 1213 end
1152 1214 self:backBlockChange(roomId, blockId)
... ...
src/adv/AdvPlayer.lua
... ... @@ -638,6 +638,11 @@ function Player:afterLayer()
638 638 end
639 639 end
640 640  
  641 +function Player:addBuff(buffId, releaser)
  642 + Player.super.addBuff(self, buffId, releaser)
  643 + self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId)
  644 +end
  645 +
641 646 function Player:getDB()
642 647 local db = Player.super.getDB(self)
643 648 for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do
... ...
src/adv/AdvTask.lua
... ... @@ -194,7 +194,7 @@ function AdvTask.bind(Adv)
194 194 TaskLayer = 3, --完成每层任务N次
195 195 UseItem = 4, --使用道具N次
196 196 GetItem = 5, --获得道具N个
197   - GetMWeapon = 6, --获得神器N个 -todo
  197 + GetMWeapon = 6, --获得神器N个
198 198 Build = 7, --完成建筑N个
199 199 Choose = 8, --完成事件N个
200 200 Shop = 9, --完成商店N次
... ... @@ -203,6 +203,22 @@ function AdvTask.bind(Adv)
203 203 Kill = 12, --消灭怪物N个
204 204 EnterILayer = 13, --进入夹层N次
205 205 KillByBuff = 14, --使用BUFF消灭敌人N个
  206 + KillBoss = 15, --击杀首领N次
  207 + FinishStoryId = 16, -- 完成故事Id
  208 + MWeaponLv = 17, -- 指定神器等级达到
  209 + GetBuff = 18, -- 获得指定buff
  210 + KillHadBuff = 19, -- 击败拥有指定buff的敌人
  211 + ChooseBySelect = 20, -- 指定事件的指定选项N次
  212 + BuildBySelect = 21, -- 指定建筑的指定选项N次
  213 + KillWithBuff = 22, -- 携带指定层数的buff 击败怪物
  214 + KillBossWithBuff = 23, -- 携带指定层数的buff 击败boss
  215 + KillNoBuff = 24, -- 不携带指定的buff 击败boss
  216 + KillBossNoBuff = 25, -- 不携带指定的buff 击败boss
  217 + StorryDone = 26, -- 故事完成个数
  218 + KillWithMWeapon = 27, -- 携带指定神器击败怪物N次
  219 + KillBossWithMWeapon = 28, -- 携带指定神器击败BossN次
  220 + KillWithAMWeapon = 29, -- 激活神器套装 击败怪物N次
  221 + KillBossWithAMWeapon= 30, -- 激活神器套装 击败BossN次
206 222 }
207 223  
208 224  
... ... @@ -213,27 +229,81 @@ function AdvTask.bind(Adv)
213 229 table.insert(advAchievChange, {type = "advAchiev", field = {chapterId, taskId}, value = value})
214 230 end
215 231  
216   - function Adv:checkAchievement(taskType, count, cond)
  232 + function Adv:checkAchievement(taskType, count, cond, cond2)
217 233 local advAchiev = self.owner:getProperty("advAchiev")[self.chapterId] or {}
218 234 for taskId , data in pairs(csvdb["adv_achievementCsv"][self.chapterId] or {}) do
219 235 local oldStatus = advAchiev[taskId] or 0
220 236 if oldStatus ~= -1 and data.type == taskType then
221 237 local status
222 238 local checkTaskFunc = {}
223   - -- checkTaskFunc[Adv.AchievType.] = function()
  239 + checkTaskFunc[Adv.AchievType.KillHadBuff] = function()
  240 + if cond:hadBuffById(data.value2) then
  241 + return (oldStatus + count)
  242 + end
  243 + end
  244 +
  245 + checkTaskFunc[Adv.AchievType.KillWithBuff] = function()
  246 + local buff = self.battle.player:hadBuffById(data.value2)
  247 + if buff and buff.layer == data.value3 then
  248 + return (oldStatus + count)
  249 + end
  250 + end
  251 + checkTaskFunc[Adv.AchievType.KillBossWithBuff] = checkTaskFunc[Adv.AchievType.KillWithBuff]
  252 +
  253 + checkTaskFunc[Adv.AchievType.KillNoBuff] = function()
  254 + local buff = self.battle.player:hadBuffById(data.value2)
  255 + if not buff then
  256 + return (oldStatus + count)
  257 + end
  258 + end
  259 + checkTaskFunc[Adv.AchievType.KillBossNoBuff] = checkTaskFunc[Adv.AchievType.KillNoBuff]
  260 +
  261 + checkTaskFunc[Adv.AchievType.KillWithMWeapon] = function()
  262 + if self:isWearAF(data.value2) then
  263 + return (oldStatus + count)
  264 + end
  265 + end
  266 + checkTaskFunc[Adv.AchievType.KillBossWithMWeapon] = checkTaskFunc[Adv.AchievType.KillWithMWeapon]
  267 +
  268 + checkTaskFunc[Adv.AchievType.KillWithAMWeapon] = function()
  269 + if self:haveComboAF(data.value2) then
  270 + return (oldStatus + count)
  271 + end
  272 + end
  273 + checkTaskFunc[Adv.AchievType.KillBossWithAMWeapon] = checkTaskFunc[Adv.AchievType.KillWithAMWeapon]
  274 +
  275 + checkTaskFunc[Adv.AchievType.StorryDone] = function()
  276 + if data.value2 == 0 or data.value2 == cond then
  277 + local advStoryB = self.owner:getProperty("advStoryB")
  278 + local newCount = 0
  279 + for storyId, _ in pairs(advStoryB) do
  280 + if data.value2 == 0 then
  281 + newCount = newCount + 1
  282 + else
  283 + local storyData = csvdb["event_linkchoose_storyCsv"][storyId]
  284 + if storyData[1].chapter == data.value2 then
  285 + newCount = newCount + 1
  286 + end
  287 + end
  288 + end
  289 + if newCount > oldStatus then
  290 + return newCount
  291 + end
  292 + end
  293 + end
  294 +
224 295  
225   - -- end
226 296 if checkTaskFunc[taskType] then
227 297 status = checkTaskFunc[taskType]()
228 298 else
229   - if count ~= 0 and (data.value2 == 0 or data.value2 == cond) then
  299 + if count ~= 0 and (data.value2 == 0 or data.value2 == cond) and (data.value3 == 0 or data.value3 == cond2) then
230 300 status = oldStatus + count
231 301 end
232 302 end
233 303 if (status or -1) >= data.value1 then
234 304 status = -1
235 305 end
236   - if status ~= oldStatus then
  306 + if status and status ~= oldStatus then
237 307 insertChange(self.chapterId, taskId, status)
238 308 if status == -1 then
239 309 local ptcount = (self.owner:getProperty("advAchiev")[self.chapterId] or {})[-1] or 0
... ...
1   -Subproject commit d1b10c53dcd4e448396a8fbbe10fcfb595ec79f5
  1 +Subproject commit 140e26cedfd14213ed616ac36c7b44ca60e2c7ad
... ...
src/models/Role.lua
... ... @@ -69,6 +69,7 @@ Role.schema = {
69 69 advAFGet = {"table", {}}, -- 当前拥有的神器 {[id] = 等级}
70 70 advAFWear = {"table", {}}, -- 当前拥有的神器 {[slot] = id}
71 71 advDrawB = {"table", {}}, -- 冒险抽奖回馈 {[1] = 0, [2] = 100} -- 池子类型 = 点数
  72 + advStoryB = {"table", {}}, -- 冒险故事完成记录 (连锁事件绑定的故事) -- {storyId = 1}
72 73  
73 74 --挂机相关
74 75 hangPass = {"table", {}}, -- 挂机通过的最大关卡
... ...