Commit e852b3506762d6cb6a28fa603450b7fbea57171e
1 parent
5f44bcc3
冒险成就类型增加
Showing
5 changed files
with
147 additions
and
9 deletions
Show diff stats
src/adv/Adv.lua
@@ -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 |
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", {}}, -- 挂机通过的最大关卡 |