Commit 1e7896240ae1d42323d7d434eb9a496001b95768

Authored by zhouhaihai
1 parent a95b35ce

新的 buff 效果

src/adv/AdvBlock.lua
... ... @@ -48,6 +48,8 @@ function Block:updateEvent(event, isInit)
48 48 end
49 49 end
50 50 end
  51 + local oldet = self:getEventType()
  52 +
51 53 self.event = event
52 54 if not isInit and self.event then
53 55 -- 判断下类型是不是错的
... ... @@ -59,18 +61,48 @@ function Block:updateEvent(event, isInit)
59 61 self:randomEvent()
60 62 end
61 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 83 end
63 84  
64 85 function Block:clear()
65   - if self:getEventType() == AdvEventType.Trap then
  86 + local et = self:getEventType()
  87 + if et == AdvEventType.Trap then
66 88 self.trapId = self.event.id
67   - elseif self:getEventType() == AdvEventType.Build then
  89 + elseif et == AdvEventType.Build then
68 90 local build = self.room.map.adv.battle:getBuild(self.room.roomId, self.blockId, self.room.map.mapIdx)
69 91 if build then
70 92 build.isDead = true
71 93 end
72 94 end
73 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 106 end
75 107  
76 108  
... ... @@ -91,8 +123,10 @@ function Block:randomEvent()
91 123 enemy:triggerPassive(Passive.BORN_ONCE)
92 124  
93 125 adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
  126 + adv.battle.player:attrChangeCondBuffCheck(3, enemy:getClassify())
94 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 130 end
97 131 end
98 132 randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster]
... ... @@ -272,6 +306,16 @@ function Block:open()
272 306 self.isOpen = true
273 307 self:randomEvent()
274 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 319 return true
276 320 end
277 321  
... ...
src/adv/AdvBuff.lua
... ... @@ -89,13 +89,24 @@ local function commonAttCond(_Buff, attrName)
89 89 if buff then
90 90 effectCount = buff.layer
91 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 103 end
93 104 return self.buffData.effectValue2 * effectCount
94 105 end
95 106  
96 107 _Buff.getEffectBy = function(self)
97 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 110 cond = tonumber(self.buffData.effectValue5)
100 111 end
101 112 return self.buffData.effectValue4, attrName, cond
... ...
src/adv/AdvMap.lua
... ... @@ -463,6 +463,18 @@ function Map:getEnemysBySize(roomId, blockId, size)
463 463 return enemys
464 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 480 -- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入
... ...
src/adv/AdvPassive.lua
... ... @@ -60,9 +60,7 @@ end
60 60  
61 61 FilterFactory[Filter.CLASSIFY] = function (_Filter)
62 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 64 end
67 65 end
68 66  
... ...
src/adv/AdvPlayer.lua
... ... @@ -165,6 +165,7 @@ function BaseObject:addBuff(buffId, releaser)
165 165 end
166 166 self:triggerPassive(Passive.GET_BUFF, {trigger = releaser, buffId = buffId})
167 167 self:triggerPassive(Passive.PLAYER_BUFF_CLASSIFY, {trigger = releaser, classify = buffData.classify})
  168 + self:attrChangeCondBuffCheck(2, buffId)
168 169 return true
169 170 end
170 171  
... ... @@ -424,6 +425,12 @@ function BaseObject:hurt(value, releaser, params)
424 425 self.battle.adv:checkAchievement(self.battle.adv.AchievType.KillByBuff, 1, params.buffId)
425 426 end
426 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 434 end
428 435 self:triggerPassive(Passive.HURT_PERCENT_SELF, {value = value / self.hpMax})
429 436 for _, team in ipairs(self:getTeam(1, true)) do
... ... @@ -505,6 +512,50 @@ function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock)
505 512 return team
506 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 559 function BaseObject:getDB()
509 560 local db = {}
510 561 db.hp = self.hp
... ... @@ -565,6 +616,16 @@ function Enemy:getObstacle()
565 616 return obstacle
566 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 629 function Enemy:kill()
569 630 self:hurt(self.hp, self.battle.player, {hurtType = 5})
570 631 end
... ... @@ -704,7 +765,6 @@ end
704 765 function Player:addBuff(buffId, releaser)
705 766 local status = Player.super.addBuff(self, buffId, releaser)
706 767 if status then
707   - self.battle.player:attrChangeCondBuffCheck(2, buffId)
708 768 self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId)
709 769 self.battle.adv:pushBackEvent(AdvBackEventType.Buff, {buffId = buffId})
710 770 self.battle:triggerPassive(Passive.PLAYER_BUFF, {buffId = buffId})
... ... @@ -716,26 +776,6 @@ function Player:addBuff(buffId, releaser)
716 776 return status
717 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 779 function Player:isPlayer()
740 780 return true
741 781 end
... ...