Commit 7828ffd0d78c0cb074911bc82a944efa105aa6ec
1 parent
e38b9c49
冒险 连续选择点 和 地图因子
Showing
9 changed files
with
156 additions
and
24 deletions
Show diff stats
src/GlobalVar.lua
... | ... | @@ -86,7 +86,8 @@ ItemId = { |
86 | 86 | AdvSpecialStage = { |
87 | 87 | [1]= "In", |
88 | 88 | [2] = "Out", |
89 | - [3] = "BOSS" | |
89 | + [3] = "BOSS", | |
90 | + [4] = "LinkChoose", | |
90 | 91 | } |
91 | 92 | --客户端需要知道这个 |
92 | 93 | AdvEventType = { |
... | ... | @@ -94,6 +95,7 @@ AdvEventType = { |
94 | 95 | In = -1, --入口 |
95 | 96 | Out = -2, --出口 |
96 | 97 | BOSS = -3, -- boss |
98 | + LinkChoose = -4, -- 连续选择 | |
97 | 99 | -- 普通事件(随机) |
98 | 100 | Choose = 1, --选择点 |
99 | 101 | Drop = 2, --物品掉落点 | ... | ... |
src/adv/Adv.lua
... | ... | @@ -2,6 +2,7 @@ local Passive = require "adv.AdvPassive" |
2 | 2 | |
3 | 3 | local AdvCommon = require "adv.AdvCommon" |
4 | 4 | local AdvMap = require "adv.AdvMap" |
5 | +local Buff = require "adv.AdvBuff" | |
5 | 6 | |
6 | 7 | local Adv = class("Adv") |
7 | 8 | local AdvTask = import(".AdvTask") --任务相关数据搞出去 |
... | ... | @@ -31,6 +32,7 @@ function Adv:initByInfo(advInfo) |
31 | 32 | self.score = advInfo.score or {} |
32 | 33 | self.lastEnemyId = advInfo.lastEId or 1 |
33 | 34 | self.mapStack = advInfo.mstack or {} |
35 | + self.lchoose = advInfo.lch or {} | |
34 | 36 | self.maps = {} |
35 | 37 | for id, map in ipairs(advInfo.maps or {}) do |
36 | 38 | self.maps[id] = AdvMap.new(self, id, map) |
... | ... | @@ -48,7 +50,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify) |
48 | 50 | self.score = self.score or {} |
49 | 51 | self.lastEnemyId = 1 |
50 | 52 | self.mapStack = {1} -- 最后一个为当前的地图 |
51 | - | |
53 | + self.lchoose = self.lchoose or {} | |
52 | 54 | self.owner._advWheelSurfCount = nil -- 抽奖进行次数 |
53 | 55 | |
54 | 56 | -- 随机出地图 |
... | ... | @@ -77,6 +79,7 @@ function Adv:clear() |
77 | 79 | self.round = 0 |
78 | 80 | self.lastEnemyId = 1 |
79 | 81 | self.mapStack = {} |
82 | + self.lchoose = {} | |
80 | 83 | self.maps = {} |
81 | 84 | self.battle = nil |
82 | 85 | end |
... | ... | @@ -91,6 +94,7 @@ function Adv:saveDB(notNotify) |
91 | 94 | advInfo.score = self.score |
92 | 95 | advInfo.lastEId = self.lastEnemyId |
93 | 96 | advInfo.mstack = self.mapStack |
97 | + advInfo.lch = self.lchoose | |
94 | 98 | advInfo.maps = {} |
95 | 99 | |
96 | 100 | self.battle:saveDB() |
... | ... | @@ -315,13 +319,15 @@ local function clickMonster(self, room, block, params) |
315 | 319 | return true |
316 | 320 | end |
317 | 321 | |
318 | -local function clickChoose(self, room, block, params) | |
319 | - local choose = params.choose | |
320 | - local chooseData = csvdb["event_chooseCsv"][block.event.id] | |
322 | +local function chooseCommon(self, room, block, chooseData, choose) | |
321 | 323 | if not chooseData or not chooseData["button".. choose .."cond"] then return end |
322 | 324 | |
323 | 325 | local cond = chooseData["button".. choose .."cond"]:toArray(true, "=") |
324 | 326 | local checkCond = { |
327 | + -- 没有条件 | |
328 | + [0] = function() | |
329 | + return true | |
330 | + end, | |
325 | 331 | -- 拥有道具 |
326 | 332 | [1] = function() |
327 | 333 | if self:cost({[cond[2]] = cond[3]}, {}, true) then |
... | ... | @@ -339,7 +345,7 @@ local function clickChoose(self, room, block, params) |
339 | 345 | [3] = function() |
340 | 346 | for _, room in pairs(self:getCurMap().rooms) do |
341 | 347 | for _, block in pairs(room.blocks) do |
342 | - if block.event and (block.event.etype == AdvEventType.BOSS or block.event.etype == AdvEventType.Monster) then | |
348 | + if block:isMonster() then | |
343 | 349 | return |
344 | 350 | end |
345 | 351 | end |
... | ... | @@ -352,10 +358,17 @@ local function clickChoose(self, room, block, params) |
352 | 358 | return true |
353 | 359 | end |
354 | 360 | end, |
361 | + -- 提交一个物品 | |
362 | + [5] = function () | |
363 | + if self:cost({[cond[2]] = cond[3]}, {}) then | |
364 | + return true | |
365 | + end | |
366 | + end, | |
355 | 367 | } |
356 | - assert(not cond[1] or checkCond[cond[1]], "error cond, event_chooseCsv id :" .. block.event.id) | |
368 | + assert(not cond[1] or checkCond[cond[1]], "error cond, event_[link]chooseCsv id :" .. block.event.id) | |
369 | + | |
357 | 370 | if cond[1] and not checkCond[cond[1]]() then return end |
358 | - local clearBlock = true | |
371 | + local clearBlock = chooseData.keep ~= 1 | |
359 | 372 | local effects = chooseData["button".. choose .."effect"]:toTableArray(true) |
360 | 373 | for _, effect in ipairs(effects) do |
361 | 374 | if effect[1] == 1 then |
... | ... | @@ -378,15 +391,44 @@ local function clickChoose(self, room, block, params) |
378 | 391 | [4] = function() --无事发生 |
379 | 392 | end |
380 | 393 | } |
381 | - assert(doEffect[effect[1]], "error effect, event_chooseCsv id :" .. block.event.id) | |
394 | + assert(doEffect[effect[1]], "error effect, event_[link]chooseCsv id :" .. block.event.id) | |
382 | 395 | doEffect[effect[1]]() |
383 | 396 | end |
384 | - | |
385 | 397 | self:checkTask(Adv.TaskType.Choose, 1, block.event.id) |
398 | + return true, clearBlock | |
399 | +end | |
400 | + | |
401 | +local function clickChoose(self, room, block, params) | |
402 | + local choose = params.choose | |
403 | + local chooseData = csvdb["event_chooseCsv"][block.event.id] | |
404 | + local status, clearBlock = chooseCommon(self, room, block, chooseData, choose) | |
405 | + if not status then return end | |
406 | + | |
407 | + if clearBlock then | |
408 | + block:clear() | |
409 | + end | |
410 | + return true | |
411 | +end | |
412 | + | |
413 | +local function clickLinkChoose(self, room, block, params) | |
414 | + local choose = params.choose | |
415 | + local chooseData = csvdb["event_linkchooseCsv"][block.event.id] | |
416 | + local status, clearBlock = chooseCommon(self, room, block, chooseData, choose) | |
417 | + if not status then return end | |
418 | + | |
419 | + -- 完成统计次数 | |
420 | + local idx = block.event.id % 10 | |
421 | + if idx == 9 or not csvdb["event_linkchooseCsv"][block.event.id + 1] then --全部完成 | |
422 | + local startId = math.floor(block.event.id / 10) * 10 + 1 | |
423 | + self.lchoose[startId] = (self.lchoose[startId] or 0) + 1 | |
424 | + else | |
425 | + self.lchoose.ing = block.event.id + 1 --后面会出现后继事件 | |
426 | + end | |
386 | 427 | |
387 | 428 | if clearBlock then |
388 | 429 | block:clear() |
389 | 430 | end |
431 | + | |
390 | 432 | return true |
391 | 433 | end |
392 | 434 | |
... | ... | @@ -501,6 +543,7 @@ local eventCallFunc = { |
501 | 543 | [AdvEventType.BOSS] = clickMonster, |
502 | 544 | [AdvEventType.Monster] = clickMonster, |
503 | 545 | [AdvEventType.Choose] = clickChoose, |
546 | + [AdvEventType.LinkChoose] = clickLinkChoose, | |
504 | 547 | [AdvEventType.Drop] = clickDrop, |
505 | 548 | [AdvEventType.Trader] = clickTrader, |
506 | 549 | [AdvEventType.Build] = clickBuild, |
... | ... | @@ -607,8 +650,33 @@ function Adv:usePotion(potionId, potionLevel, target) |
607 | 650 | return true |
608 | 651 | end |
609 | 652 | |
653 | +-- 地图上物品变化 | |
654 | +function Adv:mapItemChange(ctype) | |
655 | + local clist = csvdb["transform_itemCsv"][ctype] | |
656 | + if clist then | |
657 | + for roomId, room in pairs(self:getCurMap().rooms) do | |
658 | + for blockId, block in pairs(room.blocks) do | |
659 | + if block:getEventType() == AdvEventType.Drop and block.event.item then | |
660 | + local id = block.event.item[1] | |
661 | + local changeTo = nil | |
662 | + if clist[id] then | |
663 | + changeTo = {clist[id].toId, clist[id].num} | |
664 | + elseif clist[-1] then | |
665 | + changeTo = {clist[-1].toId, clist[-1].num} | |
666 | + end | |
667 | + if changeTo and changeTo[1] ~= 0 and changeTo[2] ~= 0 then | |
668 | + block.event.item = changeTo | |
669 | + self:backBlockChange(roomId, blockId) | |
670 | + end | |
671 | + end | |
672 | + end | |
673 | + end | |
674 | + end | |
675 | +end | |
676 | + | |
610 | 677 | --敌人死亡 |
611 | -function Adv:enemyDead(roomId, blockId, escape) | |
678 | +function Adv:enemyDead(enemy, escape) | |
679 | + local roomId, blockId = enemy.roomId, enemy.blockId | |
612 | 680 | local map = self:getCurMap() |
613 | 681 | local room = self:getRoom(roomId) |
614 | 682 | local block = self:getBlock(roomId, blockId) |
... | ... | @@ -621,15 +689,20 @@ function Adv:enemyDead(roomId, blockId, escape) |
621 | 689 | if escape then |
622 | 690 | block:clear() |
623 | 691 | else |
624 | - | |
625 | 692 | local enemyId = block.event.id |
626 | 693 | local monsterData = csvdb["event_monsterCsv"][enemyId] |
627 | 694 | self:scoreChange(AdvScoreType.Kill, monsterData.type) |
628 | 695 | self.battle.player:addExp(monsterData.exp) |
629 | 696 | local item = block.event.item |
630 | 697 | if not item then |
631 | - local dropData = csvdb["event_dropCsv"][monsterData.dropid] | |
632 | - item = dropData["range"]:randWeight(true) | |
698 | + local buff = enemy:hadBuff(Buff.CHANGE_DROP) | |
699 | + if buff then | |
700 | + item = table.pack(buff:effect()) | |
701 | + else | |
702 | + local dropData = csvdb["event_dropCsv"][monsterData.dropid] | |
703 | + item = dropData["range"]:randWeight(true) | |
704 | + end | |
705 | + | |
633 | 706 | end |
634 | 707 | |
635 | 708 | if item[1] == 0 then | ... | ... |
src/adv/AdvBattle.lua
... | ... | @@ -177,9 +177,9 @@ function Battle:afterRound() |
177 | 177 | end |
178 | 178 | for i = #self.enemys[mapIdx], 1, -1 do |
179 | 179 | if self.enemys[mapIdx][i].isDead then |
180 | - self.enemys[mapIdx][i]:clear() | |
181 | 180 | local enemy = table.remove(self.enemys[mapIdx], i) |
182 | - self.adv:enemyDead(enemy.roomId, enemy.blockId) | |
181 | + self.adv:enemyDead(enemy, enemy.isDead == 1) | |
182 | + enemy:clear() | |
183 | 183 | end |
184 | 184 | end |
185 | 185 | ... | ... |
src/adv/AdvBlock.lua
... | ... | @@ -89,9 +89,24 @@ function Block:open() |
89 | 89 | |
90 | 90 | randomFunc[AdvEventType.Trap] = function() |
91 | 91 | local data = csvdb["event_trapCsv"][self.event.id] |
92 | - for _, buffId in ipairs(data.effect:toArray(true, "=")) do | |
92 | + local buffs = data.effect:toArray(true, "=") | |
93 | + for _, buffId in ipairs(buffs) do | |
93 | 94 | adv.battle.player:addBuff(buffId) |
94 | 95 | end |
96 | + if data.target == 1 then-- 给所有敌人同样增加buff | |
97 | + local enemys = adv.battle.player:getTeam(2) | |
98 | + for k , enemy in ipairs(enemys) do | |
99 | + for _, buffId in ipairs(buffs) do | |
100 | + enemy:addBuff(buffId) | |
101 | + end | |
102 | + end | |
103 | + end | |
104 | + if data.specialEff ~= "" then | |
105 | + local effect = data.specialEff:toArray(true, "=") | |
106 | + if effect[1] == 1 then | |
107 | + self.room.map.adv:mapItemChange(effect[2]) | |
108 | + end | |
109 | + end | |
95 | 110 | adv:backTrap() |
96 | 111 | self:clear() |
97 | 112 | end | ... | ... |
src/adv/AdvBuff.lua
... | ... | @@ -18,6 +18,7 @@ Buff.OPEN_BLOCK = 14 -- 翻开格子(每回合) |
18 | 18 | Buff.SP_CHANGE = 15 -- sp变化(每回合) |
19 | 19 | Buff.HP_CHANGE_NOW = 16 -- 生命变化(每回合生效,立刻生效) |
20 | 20 | Buff.BATTLE_BUFF = 17 -- 切换为战斗中的buff |
21 | +Buff.CHANGE_DROP = 18 -- 转换掉落 | |
21 | 22 | |
22 | 23 | --角色一些属性的变化 |
23 | 24 | local function commonAttr(_Buff, attrName) |
... | ... | @@ -134,6 +135,12 @@ local BuffFactory = { |
134 | 135 | return self.buffData.effectValue1, self.buffData.effectValue2 |
135 | 136 | end |
136 | 137 | end, |
138 | + | |
139 | + [Buff.CHANGE_DROP] = function(_Buff) | |
140 | + _Buff._effectValue = function(self) | |
141 | + return self.buffData.effectValue1, self.buffData.effectValue2 | |
142 | + end | |
143 | + end, | |
137 | 144 | |
138 | 145 | [Buff.IMMNUE_BUFF] = function(_Buff) |
139 | 146 | _Buff._init = function(self, data) | ... | ... |
src/adv/AdvMap.lua
... | ... | @@ -175,6 +175,7 @@ createMap = function(self, mapId) |
175 | 175 | local eventLib = getEventLib(self) -- 同时记录出现次数 |
176 | 176 | local monsterEvents = {} --处理钥匙掉落 |
177 | 177 | local haveBoss = false |
178 | + local haveLChoose = false | |
178 | 179 | |
179 | 180 | |
180 | 181 | local function randomEvent(roomId, blockId, eventType) |
... | ... | @@ -211,6 +212,18 @@ createMap = function(self, mapId) |
211 | 212 | end |
212 | 213 | haveBoss = true |
213 | 214 | end |
215 | + randomFunc[AdvEventType.LinkChoose] = function() | |
216 | + if haveLChoose then return false end | |
217 | + if self.adv.lchoose.ing then -- 有正在进行的 | |
218 | + event.id = self.adv.lchoose.ing | |
219 | + self.adv.lchoose.ing = nil | |
220 | + else | |
221 | + if randomCommon() == false then | |
222 | + return false | |
223 | + end | |
224 | + end | |
225 | + haveLChoose = true | |
226 | + end | |
214 | 227 | |
215 | 228 | --怪物 |
216 | 229 | randomFunc[AdvEventType.Monster] = function() |
... | ... | @@ -351,6 +364,7 @@ getEventLib = function(self, needEventType) -- needEventType 需要的事件 |
351 | 364 | ["event_clickCsv"] = AdvEventType.Click, |
352 | 365 | ["event_layerCsv"] = AdvEventType.Layer, |
353 | 366 | ["event_questCsv"] = AdvEventType.Task, |
367 | + ["event_linkchooseCsv"] = AdvEventType.LinkChoose, | |
354 | 368 | |
355 | 369 | } |
356 | 370 | local eventLib = {} |
... | ... | @@ -372,9 +386,17 @@ getEventLib = function(self, needEventType) -- needEventType 需要的事件 |
372 | 386 | local etype = type(eventType) == "table" and eventType[data.type] or eventType |
373 | 387 | |
374 | 388 | if data.levelchapter == chapterId and (data.unlockType == 0 or (advEventOpenStatus[etype] or {})[data.unlockType]) then |
375 | - if AdvCommon.checkIsIn(level, data.leveltype, data.levellimit) then | |
376 | - eventLib[etype][data.BlockEventType] = eventLib[etype][data.BlockEventType] or {} | |
377 | - eventLib[etype][data.BlockEventType][id] = {showup = data.showup, limit = data.limit} | |
389 | + local add = true | |
390 | + if etype == AdvEventType.LinkChoose then --link 只有起始任务并且还没完成的进入池子 | |
391 | + if id % 10 ~= 1 or (data.limit ~= 0 and data.limit <= (self.adv.lchoose[id] or 0)) then | |
392 | + add = false | |
393 | + end | |
394 | + end | |
395 | + if add then | |
396 | + if AdvCommon.checkIsIn(level, data.leveltype, data.levellimit) then | |
397 | + eventLib[etype][data.BlockEventType] = eventLib[etype][data.BlockEventType] or {} | |
398 | + eventLib[etype][data.BlockEventType][id] = {showup = data.showup, limit = data.limit} | |
399 | + end | |
378 | 400 | end |
379 | 401 | end |
380 | 402 | end | ... | ... |
src/adv/AdvPassive.lua
... | ... | @@ -337,8 +337,8 @@ function Passive:effect3() |
337 | 337 | end |
338 | 338 | --4=逃跑 |
339 | 339 | function Passive:effect4() |
340 | - self.owner.isDead = true --跑了 | |
341 | - self.owner.battle.adv:enemyDead(self.owner.roomId,self.owner.blockId, true) | |
340 | + self.owner.isDead = 1 --跑了 | |
341 | + -- self.owner.battle.adv:enemyDead(self.owner, true) | |
342 | 342 | end |
343 | 343 | --5=给随机一个敌方增加一个buff |
344 | 344 | function Passive:effect5(value) |
... | ... | @@ -350,5 +350,12 @@ end |
350 | 350 | function Passive:effect6(value) |
351 | 351 | self.owner:addPassive({id = value}) |
352 | 352 | end |
353 | +--7=给场上队友增加buff | |
354 | +function Passive:effect7(value) | |
355 | + local firends = self.owner:getTeam(1, true) | |
356 | + for k , v in pairs(firends) do | |
357 | + self.owner:addBuff(value, self.owner) | |
358 | + end | |
359 | +end | |
353 | 360 | |
354 | 361 | return Passive |
355 | 362 | \ No newline at end of file | ... | ... |
src/adv/AdvPlayer.lua
... | ... | @@ -121,7 +121,7 @@ end |
121 | 121 | function BaseObject:hadBuff(bType) |
122 | 122 | for _, buff in ipairs(self.buffs) do |
123 | 123 | if not buff.isDel and buff:getType() == bType then |
124 | - return true | |
124 | + return buff | |
125 | 125 | end |
126 | 126 | end |
127 | 127 | end |
... | ... | @@ -129,7 +129,7 @@ end |
129 | 129 | function BaseObject:hadBuffById(bId) |
130 | 130 | for _, buff in ipairs(self.buffs) do |
131 | 131 | if not buff.isDel and buff.id == bId then |
132 | - return true | |
132 | + return buff | |
133 | 133 | end |
134 | 134 | end |
135 | 135 | end | ... | ... |
src/models/RolePlugin.lua
... | ... | @@ -589,6 +589,12 @@ function RolePlugin.bind(Role) |
589 | 589 | return globalCsv.adv_daily_cross_count |
590 | 590 | end |
591 | 591 | |
592 | + function Role:getAdvElLimit() | |
593 | + -- todo | |
594 | + return globalCsv.adv_endless_daily_cross_count | |
595 | + end | |
596 | + | |
597 | + | |
592 | 598 | function Role:isFuncOpen(func) |
593 | 599 | return self:getProperty("funcOpen")[func] == 1 |
594 | 600 | end | ... | ... |