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 | 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 | ... | ... |
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", {}}, -- 挂机通过的最大关卡 | ... | ... |