Commit e852b3506762d6cb6a28fa603450b7fbea57171e

Authored by zhouhaihai
1 parent 5f44bcc3

冒险成就类型增加

@@ -204,6 +204,7 @@ end @@ -204,6 +204,7 @@ end
204 function Adv:awardArtifact(id, params) 204 function Adv:awardArtifact(id, params)
205 if self:isHaveArtifact(id) then return end 205 if self:isHaveArtifact(id) then return end
206 self.owner:changeUpdates({{type = "advAFGet", field = id, value = 1}}, params.notNotify) 206 self.owner:changeUpdates({{type = "advAFGet", field = id, value = 1}}, params.notNotify)
  207 + self:checkAchievement(Adv.AchievType.GetMWeapon, 1, id)
207 self:pushBackEvent(AdvBackEventType.Artifact, {id = id}) 208 self:pushBackEvent(AdvBackEventType.Artifact, {id = id})
208 end 209 end
209 210
@@ -284,18 +285,56 @@ function Adv:wearArtifact(slot, id) @@ -284,18 +285,56 @@ function Adv:wearArtifact(slot, id)
284 return true 285 return true
285 end 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 function Adv:artifactLevelUp(id) 324 function Adv:artifactLevelUp(id)
288 local advAFGet = self.owner:getProperty("advAFGet") 325 local advAFGet = self.owner:getProperty("advAFGet")
289 local advAFWear = self.owner:getProperty("advAFWear") 326 local advAFWear = self.owner:getProperty("advAFWear")
290 local status = 0 327 local status = 0
  328 + local newLv = advAFGet[id] + 1
291 if advAFWear[id] then -- 穿着呢 329 if advAFWear[id] then -- 穿着呢
292 local oldData = csvdb["adv_artifactCsv"][id][advAFGet[id]] 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 self:delArtifactEffect(oldData.effect) 332 self:delArtifactEffect(oldData.effect)
295 self:addArtifactEffect(newData.effect) 333 self:addArtifactEffect(newData.effect)
296 status = 1 334 status = 1
297 end 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 return status 338 return status
300 end 339 end
301 340
@@ -690,6 +729,7 @@ local function clickChoose(self, room, block, params) @@ -690,6 +729,7 @@ local function clickChoose(self, room, block, params)
690 self:checkAdvUnlock(3, block.event.id) 729 self:checkAdvUnlock(3, block.event.id)
691 self:checkTask(Adv.TaskType.Choose, 1, block.event.id) 730 self:checkTask(Adv.TaskType.Choose, 1, block.event.id)
692 self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id) 731 self:checkAchievement(Adv.AchievType.Choose, 1, block.event.id)
  732 + self:checkAchievement(Adv.AchievType.ChooseBySelect, 1, block.event.id, choose)
693 if clearBlock then 733 if clearBlock then
694 block:clear() 734 block:clear()
695 end 735 end
@@ -708,6 +748,13 @@ local function clickLinkChoose(self, room, block, params) @@ -708,6 +748,13 @@ local function clickLinkChoose(self, room, block, params)
708 local startId = math.floor(block.event.id / 10) * 10 + 1 748 local startId = math.floor(block.event.id / 10) * 10 + 1
709 self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 749 self.lchoose[startId] = (self.lchoose[startId] or 0) + 1
710 self:checkAchievement(Adv.AchievType.LinkChoose, 1, startId) 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 self:checkAdvUnlock(4, startId) 758 self:checkAdvUnlock(4, startId)
712 self.lchoose.cur = self.lchoose.cur or {} 759 self.lchoose.cur = self.lchoose.cur or {}
713 table.insert(self.lchoose.cur, {block.event.id, choose}) 760 table.insert(self.lchoose.cur, {block.event.id, choose})
@@ -763,6 +810,7 @@ local function clickBuild(self, room, block, params) @@ -763,6 +810,7 @@ local function clickBuild(self, room, block, params)
763 810
764 self:checkTask(Adv.TaskType.Build, 1, block.event.id) 811 self:checkTask(Adv.TaskType.Build, 1, block.event.id)
765 self:checkAchievement(Adv.AchievType.Build, 1, block.event.id) 812 self:checkAchievement(Adv.AchievType.Build, 1, block.event.id)
  813 + self:checkAchievement(Adv.AchievType.BuildBySelect, 1, block.event.id, choose)
766 814
767 if clearBlock then 815 if clearBlock then
768 block:clear() 816 block:clear()
@@ -1147,6 +1195,20 @@ function Adv:enemyDead(enemy, escape) @@ -1147,6 +1195,20 @@ function Adv:enemyDead(enemy, escape)
1147 self:checkTask(Adv.TaskType.Kill, 1, enemyId) 1195 self:checkTask(Adv.TaskType.Kill, 1, enemyId)
1148 self:checkTask(Adv.TaskType.KillAll) 1196 self:checkTask(Adv.TaskType.KillAll)
1149 self:checkAchievement(Adv.AchievType.Kill, 1, enemyId) 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 end 1212 end
1151 end 1213 end
1152 self:backBlockChange(roomId, blockId) 1214 self:backBlockChange(roomId, blockId)
src/adv/AdvPlayer.lua
@@ -638,6 +638,11 @@ function Player:afterLayer() @@ -638,6 +638,11 @@ function Player:afterLayer()
638 end 638 end
639 end 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 function Player:getDB() 646 function Player:getDB()
642 local db = Player.super.getDB(self) 647 local db = Player.super.getDB(self)
643 for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do 648 for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do
src/adv/AdvTask.lua
@@ -194,7 +194,7 @@ function AdvTask.bind(Adv) @@ -194,7 +194,7 @@ function AdvTask.bind(Adv)
194 TaskLayer = 3, --完成每层任务N次 194 TaskLayer = 3, --完成每层任务N次
195 UseItem = 4, --使用道具N次 195 UseItem = 4, --使用道具N次
196 GetItem = 5, --获得道具N个 196 GetItem = 5, --获得道具N个
197 - GetMWeapon = 6, --获得神器N个 -todo 197 + GetMWeapon = 6, --获得神器N个
198 Build = 7, --完成建筑N个 198 Build = 7, --完成建筑N个
199 Choose = 8, --完成事件N个 199 Choose = 8, --完成事件N个
200 Shop = 9, --完成商店N次 200 Shop = 9, --完成商店N次
@@ -203,6 +203,22 @@ function AdvTask.bind(Adv) @@ -203,6 +203,22 @@ function AdvTask.bind(Adv)
203 Kill = 12, --消灭怪物N个 203 Kill = 12, --消灭怪物N个
204 EnterILayer = 13, --进入夹层N次 204 EnterILayer = 13, --进入夹层N次
205 KillByBuff = 14, --使用BUFF消灭敌人N个 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,27 +229,81 @@ function AdvTask.bind(Adv)
213 table.insert(advAchievChange, {type = "advAchiev", field = {chapterId, taskId}, value = value}) 229 table.insert(advAchievChange, {type = "advAchiev", field = {chapterId, taskId}, value = value})
214 end 230 end
215 231
216 - function Adv:checkAchievement(taskType, count, cond) 232 + function Adv:checkAchievement(taskType, count, cond, cond2)
217 local advAchiev = self.owner:getProperty("advAchiev")[self.chapterId] or {} 233 local advAchiev = self.owner:getProperty("advAchiev")[self.chapterId] or {}
218 for taskId , data in pairs(csvdb["adv_achievementCsv"][self.chapterId] or {}) do 234 for taskId , data in pairs(csvdb["adv_achievementCsv"][self.chapterId] or {}) do
219 local oldStatus = advAchiev[taskId] or 0 235 local oldStatus = advAchiev[taskId] or 0
220 if oldStatus ~= -1 and data.type == taskType then 236 if oldStatus ~= -1 and data.type == taskType then
221 local status 237 local status
222 local checkTaskFunc = {} 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 if checkTaskFunc[taskType] then 296 if checkTaskFunc[taskType] then
227 status = checkTaskFunc[taskType]() 297 status = checkTaskFunc[taskType]()
228 else 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 status = oldStatus + count 300 status = oldStatus + count
231 end 301 end
232 end 302 end
233 if (status or -1) >= data.value1 then 303 if (status or -1) >= data.value1 then
234 status = -1 304 status = -1
235 end 305 end
236 - if status ~= oldStatus then 306 + if status and status ~= oldStatus then
237 insertChange(self.chapterId, taskId, status) 307 insertChange(self.chapterId, taskId, status)
238 if status == -1 then 308 if status == -1 then
239 local ptcount = (self.owner:getProperty("advAchiev")[self.chapterId] or {})[-1] or 0 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,6 +69,7 @@ Role.schema = {
69 advAFGet = {"table", {}}, -- 当前拥有的神器 {[id] = 等级} 69 advAFGet = {"table", {}}, -- 当前拥有的神器 {[id] = 等级}
70 advAFWear = {"table", {}}, -- 当前拥有的神器 {[slot] = id} 70 advAFWear = {"table", {}}, -- 当前拥有的神器 {[slot] = id}
71 advDrawB = {"table", {}}, -- 冒险抽奖回馈 {[1] = 0, [2] = 100} -- 池子类型 = 点数 71 advDrawB = {"table", {}}, -- 冒险抽奖回馈 {[1] = 0, [2] = 100} -- 池子类型 = 点数
  72 + advStoryB = {"table", {}}, -- 冒险故事完成记录 (连锁事件绑定的故事) -- {storyId = 1}
72 73
73 --挂机相关 74 --挂机相关
74 hangPass = {"table", {}}, -- 挂机通过的最大关卡 75 hangPass = {"table", {}}, -- 挂机通过的最大关卡