Commit 1e7896240ae1d42323d7d434eb9a496001b95768

Authored by zhouhaihai
1 parent a95b35ce

新的 buff 效果

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