diff --git a/src/adv/AdvBuff.lua b/src/adv/AdvBuff.lua index b774e75..26d8b41 100644 --- a/src/adv/AdvBuff.lua +++ b/src/adv/AdvBuff.lua @@ -16,6 +16,7 @@ Buff.CLEAR_BUFF = 12 -- 清除buff Buff.CANT_SKILL = 13 -- 禁止技能 Buff.OPEN_BLOCK = 14 -- 翻开格子(每回合) Buff.POWER_CHANGE = 15 -- MP变化(每回合) +Buff.HP_CHANGE_NOW = 16 -- 生命变化(每回合生效,立刻生效) --角色一些属性的变化 local function commonAttr(_Buff, attrName) @@ -196,7 +197,48 @@ local BuffFactory = { _Buff._effectValue = function(self) return self.buffData.effectValue1, self.buffData.effectValue2 end - end + end, + [Buff.HP_CHANGE_NOW] = function(_Buff) + _Buff._init = function(self, data) --初始化变化值 + self._changeV = 0 + if self.buffData.effectValue1 == 0 then --固定值 + self._changeV = self.buffData.effectValue2 + elseif self.buffData.effectValue1 == 1 then + local baseOwner = self.buffData.effectValue4 == 1 and self.owner or self.release + local attrs = {[0] = "hp", [1] = "hpMax", [2] = "atk"} + self._changeV = baseOwner[attrs[self.buffData.effectValue3]] * self.buffData.effectValue2 / 100 + end + if self._changeV < 0 then + self._changeV = -self.release:getHurtValue(-self._changeV) + end + self:afterTurn() + end + _Buff._initDB = function(self, data) + self._changeV = data.cv + end + _Buff._afterRound = function(self) + local value = self:effect() + if value > 0 then + self.owner:recover(value, self.release) + elseif value < 0 then + self.owner:hurt(-value, self.release, {hurtType = 2}) + end + end + _Buff._afterTurn = function(self) + local value = self:effect() + if value > 0 then + self.owner:recover(value, self.release) + elseif value < 0 then + self.owner:hurt(-value, self.release, {hurtType = 2}) + end + end + _Buff._effectValue = function(self) + return self._changeV + end + _Buff._getDB = function(self) + return {cv = self._changeV} + end + end, } function Buff:ctor(owner, id) -- libgit2 0.21.2