local BattleConst = require "app/module/battle/battle_const" local BattleFormula = require "app/module/battle/helper/battle_formula" local BattleBuffSpecial = {} local BUFF_NAME = BattleConst.BUFF_NAME local ATTR_NAME = BattleConst.ATTR_NAM local EFFECT_TYPE = BattleConst.EFFECT_TYPE local function _addSkillOn(unitComp, buff, target, buffEffect) return target:addSkill(buff:getEffectNum()) end local function _addSkillOff(buffSender, target, buff, buffEffect) if buffEffect and buffEffect.result > 0 then target:removeSkill(buff:getEffectNum(), buffEffect.result) end end local function _skillFireTimesOn(unitComp, buff, target, buffEffect) target.unitEntity:addSkillExtraUseTimes(buff:getEffectNum(), 1) return 1 end local function _skillFireTimesOff(buffSender, target, buff, buffEffect) target.unitEntity:addSkillExtraUseTimes(buff:getEffectNum(), -1) return 1 end local function _bleedOn(buffSender, buff, target, buffEffect) return target.unitEntity:addAttr(BattleConst.ATTR_NAME.BE_SUCKED, 1000, false) -- 写死10% end local function _bleedOff(buffSender, target, buff, buffEffect) target.unitEntity:addAttr(BattleConst.ATTR_NAME.BE_SUCKED, -1000, false) -- 写死10% return 1 end local function _bleedWork(unitComp, buffEffect, buff) local damage, hurtStatus = BattleFormula:getDamageOrCureResult(buffEffect.sender, buff, unitComp) if damage <= 0 then damage = -1 else damage = -damage end unitComp:takeDamageOrCure(buffEffect.sender, damage, EFFECT_TYPE.DOT, hurtStatus) return 1 end local function _undeadOn(buffSender, buff, target, buffEffect) return target.unitEntity:setUndeadHp(1) -- 写死1 end local function _undeadOff(buffSender, target, buff, buffEffect) target.unitEntity:setUndeadHp(0) -- 写死0 return 1 end local function _imprisonOn(buffSender, buff, target, buffEffect) target.unitEntity:addActiveSkillLimit(buff:getName()) return 1 end local function _imprisonOff(buffSender, target, buff, buffEffect) target.unitEntity:removeActiveSkillLimit(buff:getName()) return 1 end local function _frozenOn(buffSender, buff, target, buffEffect) if not target.unitEntity:getIsFrozen() then target:putCacheBuffByDecr(BattleConst.BUFF_DECR_TYPE.INCREASE_GAIN) end target.unitEntity:addLimit(buff:getName(), buffEffect) return 1 end local function _frozenOff(buffSender, target, buff, buffEffect) target.unitEntity:removeLimit(buff:getName(), buffEffect) if not target.unitEntity:getIsFrozen() then target:popCacheBuffByDecr(BattleConst.BUFF_DECR_TYPE.INCREASE_GAIN) end return 1 end local _handleOn = { [BUFF_NAME.ADD_SKILL] = _addSkillOn, -- 添加技能 [BUFF_NAME.SKILL_FIRE_TIMES] = _skillFireTimesOn, -- 技能额外使用次数 [BUFF_NAME.BLEED] = _bleedOn, -- 流血 [BUFF_NAME.UNDEAD] = _undeadOn, -- 不死 [BUFF_NAME.IMPRISON] = _imprisonOn, -- 禁锢 [BUFF_NAME.FROZEN] = _frozenOn, -- 冻结 } local _handleOff = { [BUFF_NAME.ADD_SKILL] = _addSkillOff, -- 添加技能 [BUFF_NAME.SKILL_FIRE_TIMES] = _skillFireTimesOff, -- 技能额外使用次数 [BUFF_NAME.BLEED] = _bleedOff, -- 流血 [BUFF_NAME.UNDEAD] = _undeadOff, -- 不死 [BUFF_NAME.IMPRISON] = _imprisonOff, -- 禁锢 [BUFF_NAME.FROZEN] = _frozenOff, -- 冻结 } local _handleWork = { [BUFF_NAME.BLEED] = _bleedWork, -- 流血 } -- 特殊buff添加时 function BattleBuffSpecial.specialBuffOn(unitComp, buff, target, buffEffect) local func = _handleOn[buff:getName()] if func then return func(unitComp, buff, target, buffEffect) end return 0 end -- 特殊buff移除时 function BattleBuffSpecial.specialBuffOff(buffSender, target, buff, buffEffect) local func = _handleOff[buff:getName()] if func then func(buffSender, target, buff, buffEffect) end end -- 特殊buff生效 function BattleBuffSpecial.specialBuffWork(unitComp, buffEffect, buff) local func = _handleWork[buff:getName()] if func then func(unitComp, buffEffect, buff) end end return BattleBuffSpecial