132 lines
3.9 KiB
Lua
132 lines
3.9 KiB
Lua
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 |