Commit b71a819081da541ad962158706e1cd3656390e8e

Authored by zhouhaihai
1 parent e1355da3

动态改变 一些buff

src/adv/Adv.lua
... ... @@ -115,7 +115,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt
115 115 self.maps = {}
116 116 self.maps[1] = AdvMap.new(self, 1, mapId, isEnter, isNewRelay)
117 117  
118   - self:initBattle()
  118 + self:initBattle(true)
119 119  
120 120 self:initLayerTask()
121 121  
... ... @@ -371,7 +371,7 @@ function Adv:clearAdvUnlockCache()
371 371 self.cacheUnlock = {}
372 372 end
373 373  
374   -function Adv:initBattle()
  374 +function Adv:initBattle(notDb)
375 375 self.battle = require("adv.AdvBattle").new(self)
376 376 for _, passiveC in ipairs(self.cachePassiveEvent or {}) do
377 377 self.battle:triggerPassive(passiveC[1], passiveC[2])
... ... @@ -382,6 +382,10 @@ function Adv:initBattle()
382 382 for idx, map in pairs(self.maps) do
383 383 map:initBattleAfter()
384 384 end
  385 + --下层
  386 + if notDb and self.level ~= 1 then
  387 + self.battle.player:attrChangeCondBuffCheck(1)
  388 + end
385 389 end
386 390  
387 391 function Adv:triggerPassive(condType, params)
... ... @@ -758,6 +762,10 @@ function Adv:award(gift, params)
758 762 if items ~= oldItems then
759 763 self.owner:updateProperty({field = "advItems", value = items, notNotify = params.notNotify})
760 764 end
  765 +
  766 + if tgift[ItemId.OldCoin] then
  767 + self.battle.player:attrChangeCondBuffCheck(0)
  768 + end
761 769 return tgift
762 770 end
763 771  
... ...
src/adv/AdvBuff.lua
... ... @@ -35,7 +35,7 @@ Buff.Buff_NO_PASSIVE_MONSTER = 31 -- 地图被动刷新不出来怪物
35 35  
36 36 --角色一些属性的变化
37 37 local function commonAttr(_Buff, attrName)
38   - _Buff._init = function(self, data) --初始化变化值
  38 + _Buff._init = function(self) --初始化变化值
39 39 self.owner:reSetAttr(attrName)
40 40 end
41 41 _Buff._effectValue = function(self)
... ... @@ -55,38 +55,19 @@ local function commonAttr(_Buff, attrName)
55 55 end
56 56 end
57 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 60 end
62 61 _Buff._overlay = function(self)
63   - self._changeV = (self._changeV or 0) + self:_calculate()
64   - self:_reSetAttr(true)
  62 + self:_reSetAttr()
65 63 end
66 64 _Buff._uncover = function(self)
67   - self._changeV = self._changeV - self._changeV / (self.layer + 1)
68 65 self:_reSetAttr()
69 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 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 71 else
91 72 self.owner:reSetAttr(attrName)
92 73 end
... ... @@ -95,27 +76,37 @@ local function commonAttCond(_Buff, attrName)
95 76 _Buff._calculate = function(self)
96 77 local effectCount = 0
97 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 85 end
100   - return self.buffData.effectValue2 * effectCount / tonumber(self.buffData.effectValue5)
  86 + return self.buffData.effectValue2 * effectCount
101 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 95 end
  96 +
105 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 100 end
  101 +
108 102 _Buff._endBuff = function(self, data)
109 103 self:_reSetAttr()
110 104 end
111   - _Buff._getDB = function(self)
112   - return {cv = self._changeV}
113   - end
114 105 end
115 106  
116 107 local BuffFactory = {
117 108 [Buff.HP_CHANGE] = function(_Buff)
118   - _Buff._init = function(self, data) --初始化变化值
  109 + _Buff._init = function(self) --初始化变化值
119 110 self._changeV = self:_calculate()
120 111 end
121 112 _Buff._overlay = function(self)
... ... @@ -161,13 +152,13 @@ local BuffFactory = {
161 152 end,
162 153  
163 154 [Buff.HP_MAX_CHANGE] = function(_Buff)
164   - _Buff._init = function(self, data) --初始化变化值
  155 + _Buff._init = function(self) --初始化变化值
165 156 self._changeV = self:_calculate()
166   - self:_hpChange()
  157 + self.owner:reSetHpMax()
167 158 end
168 159 _Buff._overlay = function(self)
169 160 self._changeV = (self._changeV or 0) + self:_calculate()
170   - self:_hpChange()
  161 + self.owner:reSetHpMax()
171 162 end
172 163  
173 164 _Buff._uncover = function(self)
... ... @@ -175,19 +166,6 @@ local BuffFactory = {
175 166 self.owner:reSetHpMax()
176 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 169 _Buff._calculate = function(self)
192 170 local curValue = 0
193 171 if self.buffData.effectValue1 == 0 then --固定值
... ... @@ -258,7 +236,7 @@ local BuffFactory = {
258 236 end,
259 237  
260 238 [Buff.CLEAR_BUFF] = function(_Buff)
261   - _Buff._init = function(self, data)
  239 + _Buff._init = function(self)
262 240 for _, buff in ipairs(self.owner.buffs) do -- 挂上就清除一下子
263 241 if not buff.isDel and self:canEffect(buff.id) and not self.isDel then
264 242 if not buff.isDel and not self.isDel then
... ... @@ -326,7 +304,7 @@ local BuffFactory = {
326 304 end,
327 305  
328 306 [Buff.SP_MAX_CHANGE] = function(_Buff)
329   - _Buff._init = function(self, data) --初始化变化值
  307 + _Buff._init = function(self) --初始化变化值
330 308 self:_spChange()
331 309 end
332 310 _Buff._overlay = function(self)
... ... @@ -444,8 +422,11 @@ function Buff:initNew(release, data)
444 422 if self.buffData.effectTime > 0 then
445 423 self.count = self.buffData.effectTime
446 424 end
  425 +end
  426 +
  427 +function Buff:createAfter()
447 428 if self._init then
448   - self:_init(data)
  429 + self:_init()
449 430 end
450 431 end
451 432  
... ...
src/adv/AdvPlayer.lua
... ... @@ -68,9 +68,13 @@ function BaseObject:clearRound()
68 68 end
69 69 for i = #self.buffs, 1, -1 do
70 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 73 table.remove(self.buffs, i)
  74 + buff:endBuff()
  75 + if self.attrChangeCondBuffCheck then
  76 + self:attrChangeCondBuffCheck(2, buff.id)
  77 + end
74 78 end
75 79 end
76 80 end
... ... @@ -142,7 +146,9 @@ function BaseObject:addBuff(buffId, releaser)
142 146 buffData = buffData,
143 147 releaseId = releaser and releaser.monsterId or nil
144 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 152 end
147 153 self:triggerPassive(Passive.GET_BUFF, {buffId = buffId})
148 154 self.battle.adv:backBuff(self.monsterId, buffId)
... ... @@ -160,8 +166,11 @@ function BaseObject:delBuffById(bId)
160 166 for idx, buff in ipairs(self.buffs) do
161 167 if buff.id == bId then
162 168 self.battle.adv:backBuff(self.monsterId, buff.id, true)
163   - buff:endBuff()
164 169 table.remove(self.buffs, idx)
  170 + buff:endBuff()
  171 + if self.attrChangeCondBuffCheck then
  172 + self:attrChangeCondBuffCheck(2, bId)
  173 + end
165 174 return buff
166 175 end
167 176 end
... ... @@ -639,9 +648,31 @@ end
639 648  
640 649 function Player:addBuff(buffId, releaser)
641 650 Player.super.addBuff(self, buffId, releaser)
  651 + self.battle.player:attrChangeCondBuffCheck(2, buffId)
642 652 self.battle.adv:checkAchievement(self.battle.adv.AchievType.GetBuff, 1, buffId)
643 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 676 function Player:getDB()
646 677 local db = Player.super.getDB(self)
647 678 for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do
... ...