Commit b71a819081da541ad962158706e1cd3656390e8e
1 parent
e1355da3
动态改变 一些buff
Showing
3 changed files
with
79 additions
and
59 deletions
Show diff stats
src/adv/Adv.lua
| @@ -115,7 +115,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt | @@ -115,7 +115,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt | ||
| 115 | self.maps = {} | 115 | self.maps = {} |
| 116 | self.maps[1] = AdvMap.new(self, 1, mapId, isEnter, isNewRelay) | 116 | self.maps[1] = AdvMap.new(self, 1, mapId, isEnter, isNewRelay) |
| 117 | 117 | ||
| 118 | - self:initBattle() | 118 | + self:initBattle(true) |
| 119 | 119 | ||
| 120 | self:initLayerTask() | 120 | self:initLayerTask() |
| 121 | 121 | ||
| @@ -371,7 +371,7 @@ function Adv:clearAdvUnlockCache() | @@ -371,7 +371,7 @@ function Adv:clearAdvUnlockCache() | ||
| 371 | self.cacheUnlock = {} | 371 | self.cacheUnlock = {} |
| 372 | end | 372 | end |
| 373 | 373 | ||
| 374 | -function Adv:initBattle() | 374 | +function Adv:initBattle(notDb) |
| 375 | self.battle = require("adv.AdvBattle").new(self) | 375 | self.battle = require("adv.AdvBattle").new(self) |
| 376 | for _, passiveC in ipairs(self.cachePassiveEvent or {}) do | 376 | for _, passiveC in ipairs(self.cachePassiveEvent or {}) do |
| 377 | self.battle:triggerPassive(passiveC[1], passiveC[2]) | 377 | self.battle:triggerPassive(passiveC[1], passiveC[2]) |
| @@ -382,6 +382,10 @@ function Adv:initBattle() | @@ -382,6 +382,10 @@ function Adv:initBattle() | ||
| 382 | for idx, map in pairs(self.maps) do | 382 | for idx, map in pairs(self.maps) do |
| 383 | map:initBattleAfter() | 383 | map:initBattleAfter() |
| 384 | end | 384 | end |
| 385 | + --下层 | ||
| 386 | + if notDb and self.level ~= 1 then | ||
| 387 | + self.battle.player:attrChangeCondBuffCheck(1) | ||
| 388 | + end | ||
| 385 | end | 389 | end |
| 386 | 390 | ||
| 387 | function Adv:triggerPassive(condType, params) | 391 | function Adv:triggerPassive(condType, params) |
| @@ -758,6 +762,10 @@ function Adv:award(gift, params) | @@ -758,6 +762,10 @@ function Adv:award(gift, params) | ||
| 758 | if items ~= oldItems then | 762 | if items ~= oldItems then |
| 759 | self.owner:updateProperty({field = "advItems", value = items, notNotify = params.notNotify}) | 763 | self.owner:updateProperty({field = "advItems", value = items, notNotify = params.notNotify}) |
| 760 | end | 764 | end |
| 765 | + | ||
| 766 | + if tgift[ItemId.OldCoin] then | ||
| 767 | + self.battle.player:attrChangeCondBuffCheck(0) | ||
| 768 | + end | ||
| 761 | return tgift | 769 | return tgift |
| 762 | end | 770 | end |
| 763 | 771 |
src/adv/AdvBuff.lua
| @@ -35,7 +35,7 @@ Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物 | @@ -35,7 +35,7 @@ Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物 | ||
| 35 | 35 | ||
| 36 | --角色一些属性的变化 | 36 | --角色一些属性的变化 |
| 37 | local function commonAttr(_Buff, attrName) | 37 | local function commonAttr(_Buff, attrName) |
| 38 | - _Buff._init = function(self, data) --初始化变化值 | 38 | + _Buff._init = function(self) --初始化变化值 |
| 39 | self.owner:reSetAttr(attrName) | 39 | self.owner:reSetAttr(attrName) |
| 40 | end | 40 | end |
| 41 | _Buff._effectValue = function(self) | 41 | _Buff._effectValue = function(self) |
| @@ -55,38 +55,19 @@ local function commonAttr(_Buff, attrName) | @@ -55,38 +55,19 @@ local function commonAttr(_Buff, attrName) | ||
| 55 | end | 55 | end |
| 56 | end | 56 | end |
| 57 | local function commonAttCond(_Buff, attrName) | 57 | local function commonAttCond(_Buff, attrName) |
| 58 | - _Buff._init = function(self, data) --初始化变化值 | ||
| 59 | - self._changeV = self:_calculate() | ||
| 60 | - self:_reSetAttr(true) | 58 | + _Buff._init = function(self) --初始化变化值 |
| 59 | + self:_reSetAttr() | ||
| 61 | end | 60 | end |
| 62 | _Buff._overlay = function(self) | 61 | _Buff._overlay = function(self) |
| 63 | - self._changeV = (self._changeV or 0) + self:_calculate() | ||
| 64 | - self:_reSetAttr(true) | 62 | + self:_reSetAttr() |
| 65 | end | 63 | end |
| 66 | _Buff._uncover = function(self) | 64 | _Buff._uncover = function(self) |
| 67 | - self._changeV = self._changeV - self._changeV / (self.layer + 1) | ||
| 68 | self:_reSetAttr() | 65 | self:_reSetAttr() |
| 69 | end | 66 | end |
| 70 | 67 | ||
| 71 | - _Buff._hpChange = function(self) | ||
| 72 | - local oldHpMax = self.owner.hpMax | ||
| 73 | - self.owner:reSetHpMax() | ||
| 74 | - | ||
| 75 | - local curValue = self.owner.hpMax - oldHpMax | ||
| 76 | - if curValue > 0 then | ||
| 77 | - self.owner:recover(curValue, self.release) -- 防止release不存在,地图点buff | ||
| 78 | - elseif curValue < 0 then | ||
| 79 | - self.owner:hurt(self.release and self.release:getHurtValue(-curValue) or -curValue, self.release, {hurtType = 2, buffId = self.id}) | ||
| 80 | - end | ||
| 81 | - end | ||
| 82 | - | ||
| 83 | - _Buff._reSetAttr = function(self, isInit) | 68 | + _Buff._reSetAttr = function(self) |
| 84 | if attrName == "hp" then | 69 | if attrName == "hp" then |
| 85 | - if isInit then | ||
| 86 | - self:_hpChange() | ||
| 87 | - else | ||
| 88 | - self.owner:reSetHpMax() | ||
| 89 | - end | 70 | + self.owner:reSetHpMax() |
| 90 | else | 71 | else |
| 91 | self.owner:reSetAttr(attrName) | 72 | self.owner:reSetAttr(attrName) |
| 92 | end | 73 | end |
| @@ -95,27 +76,37 @@ local function commonAttCond(_Buff, attrName) | @@ -95,27 +76,37 @@ local function commonAttCond(_Buff, attrName) | ||
| 95 | _Buff._calculate = function(self) | 76 | _Buff._calculate = function(self) |
| 96 | local effectCount = 0 | 77 | local effectCount = 0 |
| 97 | if self.buffData.effectValue4 == 0 then | 78 | if self.buffData.effectValue4 == 0 then |
| 98 | - effectCount = self.owner.battle.adv.owner:getProperty("advItems"):getv(ItemId.OldCoin, 0) | 79 | + effectCount = self.owner.battle.adv.owner:getProperty("advItems"):getv(ItemId.OldCoin, 0) / tonumber(self.buffData.effectValue5) |
| 80 | + elseif self.buffData.effectValue4 == 1 then | ||
| 81 | + effectCount = self.owner.battle.adv.level | ||
| 82 | + elseif self.buffData.effectValue4 == 2 then | ||
| 83 | + local buff = self.owner.battle.player:getBuffById(tonumber(self.buffData.effectValue5)) | ||
| 84 | + effectCount = buff.layer | ||
| 99 | end | 85 | end |
| 100 | - return self.buffData.effectValue2 * effectCount / tonumber(self.buffData.effectValue5) | 86 | + return self.buffData.effectValue2 * effectCount |
| 101 | end | 87 | end |
| 102 | - _Buff._initDB = function(self, data) | ||
| 103 | - self._changeV = data.cv | 88 | + |
| 89 | + _Buff.getEffectBy = function(self) | ||
| 90 | + local cond = nil | ||
| 91 | + if self.buffData.effectValue4 == 2 then | ||
| 92 | + cond = tonumber(self.buffData.effectValue5) | ||
| 93 | + end | ||
| 94 | + return self.buffData.effectValue4, attrName, cond | ||
| 104 | end | 95 | end |
| 96 | + | ||
| 105 | _Buff._effectValue = function(self) | 97 | _Buff._effectValue = function(self) |
| 106 | - return self.buffData.effectValue1, self._changeV, attrName | 98 | + print(self:_calculate() * self.layer) |
| 99 | + return self.buffData.effectValue1, self:_calculate() * self.layer, attrName | ||
| 107 | end | 100 | end |
| 101 | + | ||
| 108 | _Buff._endBuff = function(self, data) | 102 | _Buff._endBuff = function(self, data) |
| 109 | self:_reSetAttr() | 103 | self:_reSetAttr() |
| 110 | end | 104 | end |
| 111 | - _Buff._getDB = function(self) | ||
| 112 | - return {cv = self._changeV} | ||
| 113 | - end | ||
| 114 | end | 105 | end |
| 115 | 106 | ||
| 116 | local BuffFactory = { | 107 | local BuffFactory = { |
| 117 | [Buff.HP_CHANGE] = function(_Buff) | 108 | [Buff.HP_CHANGE] = function(_Buff) |
| 118 | - _Buff._init = function(self, data) --初始化变化值 | 109 | + _Buff._init = function(self) --初始化变化值 |
| 119 | self._changeV = self:_calculate() | 110 | self._changeV = self:_calculate() |
| 120 | end | 111 | end |
| 121 | _Buff._overlay = function(self) | 112 | _Buff._overlay = function(self) |
| @@ -161,13 +152,13 @@ local BuffFactory = { | @@ -161,13 +152,13 @@ local BuffFactory = { | ||
| 161 | end, | 152 | end, |
| 162 | 153 | ||
| 163 | [Buff.HP_MAX_CHANGE] = function(_Buff) | 154 | [Buff.HP_MAX_CHANGE] = function(_Buff) |
| 164 | - _Buff._init = function(self, data) --初始化变化值 | 155 | + _Buff._init = function(self) --初始化变化值 |
| 165 | self._changeV = self:_calculate() | 156 | self._changeV = self:_calculate() |
| 166 | - self:_hpChange() | 157 | + self.owner:reSetHpMax() |
| 167 | end | 158 | end |
| 168 | _Buff._overlay = function(self) | 159 | _Buff._overlay = function(self) |
| 169 | self._changeV = (self._changeV or 0) + self:_calculate() | 160 | self._changeV = (self._changeV or 0) + self:_calculate() |
| 170 | - self:_hpChange() | 161 | + self.owner:reSetHpMax() |
| 171 | end | 162 | end |
| 172 | 163 | ||
| 173 | _Buff._uncover = function(self) | 164 | _Buff._uncover = function(self) |
| @@ -175,19 +166,6 @@ local BuffFactory = { | @@ -175,19 +166,6 @@ local BuffFactory = { | ||
| 175 | self.owner:reSetHpMax() | 166 | self.owner:reSetHpMax() |
| 176 | end | 167 | end |
| 177 | 168 | ||
| 178 | - -- 提高生命上限的时候要相应提高生命值 | ||
| 179 | - _Buff._hpChange = function(self) | ||
| 180 | - local oldHpMax = self.owner.hpMax | ||
| 181 | - self.owner:reSetHpMax() | ||
| 182 | - | ||
| 183 | - local curValue = self.owner.hpMax - oldHpMax | ||
| 184 | - if curValue > 0 then | ||
| 185 | - self.owner:recover(curValue, self.release) -- 防止release不存在,地图点buff | ||
| 186 | - elseif curValue < 0 then | ||
| 187 | - self.owner:hurt(self.release and self.release:getHurtValue(-curValue) or -curValue, self.release, {hurtType = 2, buffId = self.id}) | ||
| 188 | - end | ||
| 189 | - end | ||
| 190 | - | ||
| 191 | _Buff._calculate = function(self) | 169 | _Buff._calculate = function(self) |
| 192 | local curValue = 0 | 170 | local curValue = 0 |
| 193 | if self.buffData.effectValue1 == 0 then --固定值 | 171 | if self.buffData.effectValue1 == 0 then --固定值 |
| @@ -258,7 +236,7 @@ local BuffFactory = { | @@ -258,7 +236,7 @@ local BuffFactory = { | ||
| 258 | end, | 236 | end, |
| 259 | 237 | ||
| 260 | [Buff.CLEAR_BUFF] = function(_Buff) | 238 | [Buff.CLEAR_BUFF] = function(_Buff) |
| 261 | - _Buff._init = function(self, data) | 239 | + _Buff._init = function(self) |
| 262 | for _, buff in ipairs(self.owner.buffs) do -- 挂上就清除一下子 | 240 | for _, buff in ipairs(self.owner.buffs) do -- 挂上就清除一下子 |
| 263 | if not buff.isDel and self:canEffect(buff.id) and not self.isDel then | 241 | if not buff.isDel and self:canEffect(buff.id) and not self.isDel then |
| 264 | if not buff.isDel and not self.isDel then | 242 | if not buff.isDel and not self.isDel then |
| @@ -326,7 +304,7 @@ local BuffFactory = { | @@ -326,7 +304,7 @@ local BuffFactory = { | ||
| 326 | end, | 304 | end, |
| 327 | 305 | ||
| 328 | [Buff.SP_MAX_CHANGE] = function(_Buff) | 306 | [Buff.SP_MAX_CHANGE] = function(_Buff) |
| 329 | - _Buff._init = function(self, data) --初始化变化值 | 307 | + _Buff._init = function(self) --初始化变化值 |
| 330 | self:_spChange() | 308 | self:_spChange() |
| 331 | end | 309 | end |
| 332 | _Buff._overlay = function(self) | 310 | _Buff._overlay = function(self) |
| @@ -444,8 +422,11 @@ function Buff:initNew(release, data) | @@ -444,8 +422,11 @@ function Buff:initNew(release, data) | ||
| 444 | if self.buffData.effectTime > 0 then | 422 | if self.buffData.effectTime > 0 then |
| 445 | self.count = self.buffData.effectTime | 423 | self.count = self.buffData.effectTime |
| 446 | end | 424 | end |
| 425 | +end | ||
| 426 | + | ||
| 427 | +function Buff:createAfter() | ||
| 447 | if self._init then | 428 | if self._init then |
| 448 | - self:_init(data) | 429 | + self:_init() |
| 449 | end | 430 | end |
| 450 | end | 431 | end |
| 451 | 432 |
src/adv/AdvPlayer.lua
| @@ -68,9 +68,13 @@ function BaseObject:clearRound() | @@ -68,9 +68,13 @@ function BaseObject:clearRound() | ||
| 68 | end | 68 | end |
| 69 | for i = #self.buffs, 1, -1 do | 69 | for i = #self.buffs, 1, -1 do |
| 70 | if self.buffs[i].isDel then | 70 | if self.buffs[i].isDel then |
| 71 | - self.battle.adv:backBuff(self.monsterId, self.buffs[i].id, true) | ||
| 72 | - self.buffs[i]:endBuff() | 71 | + local buff = self.buffs[i] |
| 72 | + self.battle.adv:backBuff(self.monsterId, buff.id, true) | ||
| 73 | table.remove(self.buffs, i) | 73 | table.remove(self.buffs, i) |
| 74 | + buff:endBuff() | ||
| 75 | + if self.attrChangeCondBuffCheck then | ||
| 76 | + self:attrChangeCondBuffCheck(2, buff.id) | ||
| 77 | + end | ||
| 74 | end | 78 | end |
| 75 | end | 79 | end |
| 76 | end | 80 | end |
| @@ -142,7 +146,9 @@ function BaseObject:addBuff(buffId, releaser) | @@ -142,7 +146,9 @@ function BaseObject:addBuff(buffId, releaser) | ||
| 142 | buffData = buffData, | 146 | buffData = buffData, |
| 143 | releaseId = releaser and releaser.monsterId or nil | 147 | releaseId = releaser and releaser.monsterId or nil |
| 144 | }) then return end | 148 | }) then return end |
| 145 | - table.insert(self.buffs, Buff.create(self, releaser, {id = buffId})) | 149 | + local buff = Buff.create(self, releaser, {id = buffId}) |
| 150 | + table.insert(self.buffs, buff) | ||
| 151 | + buff:createAfter() | ||
| 146 | end | 152 | end |
| 147 | self:triggerPassive(Passive.GET_BUFF, {buffId = buffId}) | 153 | self:triggerPassive(Passive.GET_BUFF, {buffId = buffId}) |
| 148 | self.battle.adv:backBuff(self.monsterId, buffId) | 154 | self.battle.adv:backBuff(self.monsterId, buffId) |
| @@ -160,8 +166,11 @@ function BaseObject:delBuffById(bId) | @@ -160,8 +166,11 @@ function BaseObject:delBuffById(bId) | ||
| 160 | for idx, buff in ipairs(self.buffs) do | 166 | for idx, buff in ipairs(self.buffs) do |
| 161 | if buff.id == bId then | 167 | if buff.id == bId then |
| 162 | self.battle.adv:backBuff(self.monsterId, buff.id, true) | 168 | self.battle.adv:backBuff(self.monsterId, buff.id, true) |
| 163 | - buff:endBuff() | ||
| 164 | table.remove(self.buffs, idx) | 169 | table.remove(self.buffs, idx) |
| 170 | + buff:endBuff() | ||
| 171 | + if self.attrChangeCondBuffCheck then | ||
| 172 | + self:attrChangeCondBuffCheck(2, bId) | ||
| 173 | + end | ||
| 165 | return buff | 174 | return buff |
| 166 | end | 175 | end |
| 167 | end | 176 | end |
| @@ -639,9 +648,31 @@ end | @@ -639,9 +648,31 @@ end | ||
| 639 | 648 | ||
| 640 | function Player:addBuff(buffId, releaser) | 649 | function Player:addBuff(buffId, releaser) |
| 641 | Player.super.addBuff(self, buffId, releaser) | 650 | Player.super.addBuff(self, buffId, releaser) |
| 651 | + self.battle.player:attrChangeCondBuffCheck(2, buffId) | ||
| 642 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) | 652 | self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId) |
| 643 | end | 653 | end |
| 644 | 654 | ||
| 655 | +function Player:attrChangeCondBuffCheck(etype, cond) | ||
| 656 | + local effect = {} | ||
| 657 | + for _, buff in ipairs(self.buffs) do | ||
| 658 | + if not buff.isDel and (buff:getType() == Buff.ATTR_CHANGE_COND) then | ||
| 659 | + local _et, _attr, _co = buff:getEffectBy() | ||
| 660 | + if etype == _et and (not _co or _co == cond) then | ||
| 661 | + effect[_attr] = 1 | ||
| 662 | + end | ||
| 663 | + | ||
| 664 | + end | ||
| 665 | + end | ||
| 666 | + dump(effect) | ||
| 667 | + for attrName, _ in pairs(effect) do | ||
| 668 | + if attrName == "hp" then | ||
| 669 | + self:reSetHpMax() | ||
| 670 | + else | ||
| 671 | + self:reSetAttr(attrName) | ||
| 672 | + end | ||
| 673 | + end | ||
| 674 | +end | ||
| 675 | + | ||
| 645 | function Player:getDB() | 676 | function Player:getDB() |
| 646 | local db = Player.super.getDB(self) | 677 | local db = Player.super.getDB(self) |
| 647 | for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do | 678 | for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do |