c1_lua/lua/app/module/battle/helper/battle_buff_special.lua
2023-05-11 19:11:21 +08:00

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