Commit 1e7896240ae1d42323d7d434eb9a496001b95768
1 parent
a95b35ce
新的 buff 效果
Showing
5 changed files
with
133 additions
and
28 deletions
Show diff stats
src/adv/AdvBlock.lua
| @@ -48,6 +48,8 @@ function Block:updateEvent(event, isInit) | @@ -48,6 +48,8 @@ function Block:updateEvent(event, isInit) | ||
| 48 | end | 48 | end |
| 49 | end | 49 | end |
| 50 | end | 50 | end |
| 51 | + local oldet = self:getEventType() | ||
| 52 | + | ||
| 51 | self.event = event | 53 | self.event = event |
| 52 | if not isInit and self.event then | 54 | if not isInit and self.event then |
| 53 | -- 判断下类型是不是错的 | 55 | -- 判断下类型是不是错的 |
| @@ -59,18 +61,48 @@ function Block:updateEvent(event, isInit) | @@ -59,18 +61,48 @@ function Block:updateEvent(event, isInit) | ||
| 59 | self:randomEvent() | 61 | self:randomEvent() |
| 60 | end | 62 | end |
| 61 | self:quickDrop() | 63 | self:quickDrop() |
| 64 | + | ||
| 65 | + if not isInit and self.isOpen then | ||
| 66 | + local newet = self:getEventType() | ||
| 67 | + if oldet ~= newet then | ||
| 68 | + local em = {} | ||
| 69 | + if oldet then | ||
| 70 | + em[oldet] =1 | ||
| 71 | + end | ||
| 72 | + if newet then | ||
| 73 | + em[oldet] =1 | ||
| 74 | + end | ||
| 75 | + | ||
| 76 | + local player = self.room.map.adv.battle.player | ||
| 77 | + player:attrChangeCondBuffCheck(4, em) | ||
| 78 | + for _, monster in pairs(player:getTeam(2)) do | ||
| 79 | + monster:attrChangeCondBuffCheck(4, em) | ||
| 80 | + end | ||
| 81 | + end | ||
| 82 | + end | ||
| 62 | end | 83 | end |
| 63 | 84 | ||
| 64 | function Block:clear() | 85 | function Block:clear() |
| 65 | - if self:getEventType() == AdvEventType.Trap then | 86 | + local et = self:getEventType() |
| 87 | + if et == AdvEventType.Trap then | ||
| 66 | self.trapId = self.event.id | 88 | self.trapId = self.event.id |
| 67 | - elseif self:getEventType() == AdvEventType.Build then | 89 | + elseif et == AdvEventType.Build then |
| 68 | local build = self.room.map.adv.battle:getBuild(self.room.roomId, self.blockId, self.room.map.mapIdx) | 90 | local build = self.room.map.adv.battle:getBuild(self.room.roomId, self.blockId, self.room.map.mapIdx) |
| 69 | if build then | 91 | if build then |
| 70 | build.isDead = true | 92 | build.isDead = true |
| 71 | end | 93 | end |
| 72 | end | 94 | end |
| 73 | self.event = nil | 95 | self.event = nil |
| 96 | + | ||
| 97 | + | ||
| 98 | + if et then | ||
| 99 | + local em = {[et] = 1} | ||
| 100 | + local player = self.room.map.adv.battle.player | ||
| 101 | + player:attrChangeCondBuffCheck(4, em) | ||
| 102 | + for _, monster in pairs(player:getTeam(2)) do | ||
| 103 | + monster:attrChangeCondBuffCheck(4, em) | ||
| 104 | + end | ||
| 105 | + end | ||
| 74 | end | 106 | end |
| 75 | 107 | ||
| 76 | 108 | ||
| @@ -91,8 +123,10 @@ function Block:randomEvent() | @@ -91,8 +123,10 @@ function Block:randomEvent() | ||
| 91 | enemy:triggerPassive(Passive.BORN_ONCE) | 123 | enemy:triggerPassive(Passive.BORN_ONCE) |
| 92 | 124 | ||
| 93 | adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy}) | 125 | adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy}) |
| 126 | + adv.battle.player:attrChangeCondBuffCheck(3, enemy:getClassify()) | ||
| 94 | for _, monster in pairs(adv.battle.player:getTeam(2)) do | 127 | for _, monster in pairs(adv.battle.player:getTeam(2)) do |
| 95 | - adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy}) | 128 | + monster:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy}) |
| 129 | + monster:attrChangeCondBuffCheck(3, enemy:getClassify()) | ||
| 96 | end | 130 | end |
| 97 | end | 131 | end |
| 98 | randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster] | 132 | randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster] |
| @@ -272,6 +306,16 @@ function Block:open() | @@ -272,6 +306,16 @@ function Block:open() | ||
| 272 | self.isOpen = true | 306 | self.isOpen = true |
| 273 | self:randomEvent() | 307 | self:randomEvent() |
| 274 | self:quickDrop() | 308 | self:quickDrop() |
| 309 | + | ||
| 310 | + local et = self:getEventType() | ||
| 311 | + if et then | ||
| 312 | + local em = {[et] = 1} | ||
| 313 | + local player = self.room.map.adv.battle.player | ||
| 314 | + player:attrChangeCondBuffCheck(4, em) | ||
| 315 | + for _, monster in pairs(player:getTeam(2)) do | ||
| 316 | + monster:attrChangeCondBuffCheck(4, em) | ||
| 317 | + end | ||
| 318 | + end | ||
| 275 | return true | 319 | return true |
| 276 | end | 320 | end |
| 277 | 321 |
src/adv/AdvBuff.lua
| @@ -89,13 +89,24 @@ local function commonAttCond(_Buff, attrName) | @@ -89,13 +89,24 @@ local function commonAttCond(_Buff, attrName) | ||
| 89 | if buff then | 89 | if buff then |
| 90 | effectCount = buff.layer | 90 | effectCount = buff.layer |
| 91 | end | 91 | end |
| 92 | + elseif self.buffData.effectValue4 == 3 then | ||
| 93 | + local classify = tonumber(self.buffData.effectValue5) -- 怪标签 | ||
| 94 | + local enemy = self.owner.battle.player:getTeam(2) | ||
| 95 | + for _, one in pairs(enemy) do | ||
| 96 | + if one.isClassify and one:isClassify(classify) then | ||
| 97 | + effectCount = effectCount + 1 | ||
| 98 | + end | ||
| 99 | + end | ||
| 100 | + elseif self.buffData.effectValue4 == 4 then | ||
| 101 | + local eventType = tonumber(self.buffData.effectValue5) -- event 类型 | ||
| 102 | + effectCount = #self.owner.battle.adv:getCurMap():getEventTypeAllMap(eventType) | ||
| 92 | end | 103 | end |
| 93 | return self.buffData.effectValue2 * effectCount | 104 | return self.buffData.effectValue2 * effectCount |
| 94 | end | 105 | end |
| 95 | 106 | ||
| 96 | _Buff.getEffectBy = function(self) | 107 | _Buff.getEffectBy = function(self) |
| 97 | local cond = nil | 108 | local cond = nil |
| 98 | - if self.buffData.effectValue4 == 2 then | 109 | + if self.buffData.effectValue4 == 2 or self.buffData.effectValue4 == 3 or self.buffData.effectValue4 == 4 then |
| 99 | cond = tonumber(self.buffData.effectValue5) | 110 | cond = tonumber(self.buffData.effectValue5) |
| 100 | end | 111 | end |
| 101 | return self.buffData.effectValue4, attrName, cond | 112 | return self.buffData.effectValue4, attrName, cond |
src/adv/AdvMap.lua
| @@ -463,6 +463,18 @@ function Map:getEnemysBySize(roomId, blockId, size) | @@ -463,6 +463,18 @@ function Map:getEnemysBySize(roomId, blockId, size) | ||
| 463 | return enemys | 463 | return enemys |
| 464 | end | 464 | end |
| 465 | 465 | ||
| 466 | +function Map:getEventTypeAllMap(eventType) | ||
| 467 | + local blocks = {} | ||
| 468 | + if not eventType then return blocks end | ||
| 469 | + for roomId, room in pairs(self.rooms) do | ||
| 470 | + for blockId, block in pairs(room.blocks) do | ||
| 471 | + if block.isOpen and block:getEventType() == eventType then | ||
| 472 | + table.insert(blocks, block) | ||
| 473 | + end | ||
| 474 | + end | ||
| 475 | + end | ||
| 476 | + return blocks | ||
| 477 | +end | ||
| 466 | -----------------------------随机地图----------------------------- | 478 | -----------------------------随机地图----------------------------- |
| 467 | 479 | ||
| 468 | -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入 | 480 | -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入 |
src/adv/AdvPassive.lua
| @@ -60,9 +60,7 @@ end | @@ -60,9 +60,7 @@ end | ||
| 60 | 60 | ||
| 61 | FilterFactory[Filter.CLASSIFY] = function (_Filter) | 61 | FilterFactory[Filter.CLASSIFY] = function (_Filter) |
| 62 | _Filter._execute = function (self, target) | 62 | _Filter._execute = function (self, target) |
| 63 | - if not target.monsterId then return end | ||
| 64 | - local classify = csvdb["event_monsterCsv"][target.monsterId].classify | ||
| 65 | - return classify and classify:sismember(self.value, " ") | 63 | + return target.isClassify and target:isClassify(self.value) |
| 66 | end | 64 | end |
| 67 | end | 65 | end |
| 68 | 66 |
src/adv/AdvPlayer.lua
| @@ -165,6 +165,7 @@ function BaseObject:addBuff(buffId, releaser) | @@ -165,6 +165,7 @@ function BaseObject:addBuff(buffId, releaser) | ||
| 165 | end | 165 | end |
| 166 | self:triggerPassive(Passive.GET_BUFF, {trigger = releaser, buffId = buffId}) | 166 | self:triggerPassive(Passive.GET_BUFF, {trigger = releaser, buffId = buffId}) |
| 167 | self:triggerPassive(Passive.PLAYER_BUFF_CLASSIFY, {trigger = releaser, classify = buffData.classify}) | 167 | self:triggerPassive(Passive.PLAYER_BUFF_CLASSIFY, {trigger = releaser, classify = buffData.classify}) |
| 168 | + self:attrChangeCondBuffCheck(2, buffId) | ||
| 168 | return true | 169 | return true |
| 169 | end | 170 | end |
| 170 | 171 | ||
| @@ -424,6 +425,12 @@ function BaseObject:hurt(value, releaser, params) | @@ -424,6 +425,12 @@ function BaseObject:hurt(value, releaser, params) | ||
| 424 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.KillByBuff, 1, params.buffId) | 425 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.KillByBuff, 1, params.buffId) |
| 425 | end | 426 | end |
| 426 | self.isDead = true | 427 | self.isDead = true |
| 428 | + if self:is("Enemy") then | ||
| 429 | + self.battle.player:attrChangeCondBuffCheck(3, self:getClassify()) | ||
| 430 | + for _, monster in pairs(self.battle.player:getTeam(2)) do | ||
| 431 | + monster:attrChangeCondBuffCheck(3, self:getClassify()) | ||
| 432 | + end | ||
| 433 | + end | ||
| 427 | end | 434 | end |
| 428 | self:triggerPassive(Passive.HURT_PERCENT_SELF, {value = value / self.hpMax}) | 435 | self:triggerPassive(Passive.HURT_PERCENT_SELF, {value = value / self.hpMax}) |
| 429 | for _, team in ipairs(self:getTeam(1, true)) do | 436 | for _, team in ipairs(self:getTeam(1, true)) do |
| @@ -505,6 +512,50 @@ function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock) | @@ -505,6 +512,50 @@ function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock) | ||
| 505 | return team | 512 | return team |
| 506 | end | 513 | end |
| 507 | 514 | ||
| 515 | +function BaseObject:attrChangeCondBuffCheck(etype, cond) | ||
| 516 | + local effect = {} | ||
| 517 | + if etype == 3 then | ||
| 518 | + if type(cond) ~= "string" then | ||
| 519 | + return | ||
| 520 | + end | ||
| 521 | + local temp = cond:toArray(true, " ") | ||
| 522 | + cond = {} | ||
| 523 | + for _, one in pairs(temp) do | ||
| 524 | + cond[one] = 1 | ||
| 525 | + end | ||
| 526 | + elseif etype == 4 then | ||
| 527 | + if not cond then | ||
| 528 | + cond = {} | ||
| 529 | + end | ||
| 530 | + if type(cond) == "number" then | ||
| 531 | + cond = {[cond] = 1} | ||
| 532 | + end | ||
| 533 | + end | ||
| 534 | + for _, buff in ipairs(self.buffs) do | ||
| 535 | + if not buff:isHide() and (buff:getType() == Buff.ATTR_CHANGE_COND) then | ||
| 536 | + local _et, _attr, _co = buff:getEffectBy() | ||
| 537 | + if etype == _et then | ||
| 538 | + if etype == 3 or etype == 4 then | ||
| 539 | + if cond[_co] then | ||
| 540 | + effect[_attr] = 1 | ||
| 541 | + end | ||
| 542 | + else | ||
| 543 | + if (not _co or _co == cond) then | ||
| 544 | + effect[_attr] = 1 | ||
| 545 | + end | ||
| 546 | + end | ||
| 547 | + end | ||
| 548 | + end | ||
| 549 | + end | ||
| 550 | + for attrName, _ in pairs(effect) do | ||
| 551 | + if attrName == "hp" then | ||
| 552 | + self:reSetHpMax() | ||
| 553 | + else | ||
| 554 | + self:reSetAttr(attrName) | ||
| 555 | + end | ||
| 556 | + end | ||
| 557 | +end | ||
| 558 | + | ||
| 508 | function BaseObject:getDB() | 559 | function BaseObject:getDB() |
| 509 | local db = {} | 560 | local db = {} |
| 510 | db.hp = self.hp | 561 | db.hp = self.hp |
| @@ -565,6 +616,16 @@ function Enemy:getObstacle() | @@ -565,6 +616,16 @@ function Enemy:getObstacle() | ||
| 565 | return obstacle | 616 | return obstacle |
| 566 | end | 617 | end |
| 567 | 618 | ||
| 619 | +function Enemy:isClassify(check) | ||
| 620 | + local classify = self:getClassify() | ||
| 621 | + return classify and classify:sismember(check, " ") | ||
| 622 | +end | ||
| 623 | + | ||
| 624 | +function Enemy:getClassify() | ||
| 625 | + return csvdb["event_monsterCsv"][self.monsterId].classify | ||
| 626 | +end | ||
| 627 | + | ||
| 628 | + | ||
| 568 | function Enemy:kill() | 629 | function Enemy:kill() |
| 569 | self:hurt(self.hp, self.battle.player, {hurtType = 5}) | 630 | self:hurt(self.hp, self.battle.player, {hurtType = 5}) |
| 570 | end | 631 | end |
| @@ -704,7 +765,6 @@ end | @@ -704,7 +765,6 @@ end | ||
| 704 | function Player:addBuff(buffId, releaser) | 765 | function Player:addBuff(buffId, releaser) |
| 705 | local status = Player.super.addBuff(self, buffId, releaser) | 766 | local status = Player.super.addBuff(self, buffId, releaser) |
| 706 | if status then | 767 | if status then |
| 707 | - self.battle.player:attrChangeCondBuffCheck(2, buffId) | ||
| 708 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) | 768 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) |
| 709 | self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId}) | 769 | self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId}) |
| 710 | self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId}) | 770 | self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId}) |
| @@ -716,26 +776,6 @@ function Player:addBuff(buffId, releaser) | @@ -716,26 +776,6 @@ function Player:addBuff(buffId, releaser) | ||
| 716 | return status | 776 | return status |
| 717 | end | 777 | end |
| 718 | 778 | ||
| 719 | -function Player:attrChangeCondBuffCheck(etype, cond) | ||
| 720 | - local effect = {} | ||
| 721 | - for _, buff in ipairs(self.buffs) do | ||
| 722 | - if not buff:isHide() and (buff:getType() == Buff.ATTR_CHANGE_COND) then | ||
| 723 | - local _et, _attr, _co = buff:getEffectBy() | ||
| 724 | - if etype == _et and (not _co or _co == cond) then | ||
| 725 | - effect[_attr] = 1 | ||
| 726 | - end | ||
| 727 | - | ||
| 728 | - end | ||
| 729 | - end | ||
| 730 | - for attrName, _ in pairs(effect) do | ||
| 731 | - if attrName == "hp" then | ||
| 732 | - self:reSetHpMax() | ||
| 733 | - else | ||
| 734 | - self:reSetAttr(attrName) | ||
| 735 | - end | ||
| 736 | - end | ||
| 737 | -end | ||
| 738 | - | ||
| 739 | function Player:isPlayer() | 779 | function Player:isPlayer() |
| 740 | return true | 780 | return true |
| 741 | end | 781 | end |