层数护盾
This commit is contained in:
parent
6249f3bd3e
commit
de16d711ec
@ -333,6 +333,7 @@ local BUFF_NAME = {
|
|||||||
INVALID_CONTROL = "invalid_control",
|
INVALID_CONTROL = "invalid_control",
|
||||||
END_DMG_ADDITION_ALL_ADD = "end_dmg_addition_all_add",
|
END_DMG_ADDITION_ALL_ADD = "end_dmg_addition_all_add",
|
||||||
END_DMG_DEC_ALL_ADD = "end_dmg_dec_all_add",
|
END_DMG_DEC_ALL_ADD = "end_dmg_dec_all_add",
|
||||||
|
INVINCIBLE_SHIELD = "invincible_shield",
|
||||||
}
|
}
|
||||||
BattleConst.BUFF_NAME = BUFF_NAME
|
BattleConst.BUFF_NAME = BUFF_NAME
|
||||||
|
|
||||||
@ -390,7 +391,6 @@ local ATTR_NAME = {
|
|||||||
INVALID_CONTROL = "invalid_control",
|
INVALID_CONTROL = "invalid_control",
|
||||||
END_DMG_ADDITION_ALL = "end_dmg_addition_all",
|
END_DMG_ADDITION_ALL = "end_dmg_addition_all",
|
||||||
END_DMG_DEC_ALL = "end_dmg_dec_all",
|
END_DMG_DEC_ALL = "end_dmg_dec_all",
|
||||||
|
|
||||||
ATTR_CRIT_RED = "attr_crit_red",
|
ATTR_CRIT_RED = "attr_crit_red",
|
||||||
ATTR_CRIT_YELLOW = "attr_crit_yellow",
|
ATTR_CRIT_YELLOW = "attr_crit_yellow",
|
||||||
ATTR_CRIT_GREEN = "attr_crit_green",
|
ATTR_CRIT_GREEN = "attr_crit_green",
|
||||||
@ -416,7 +416,6 @@ local ATTR_NAME = {
|
|||||||
ATTR_HPP_GREEN = "attr_hpp_green",
|
ATTR_HPP_GREEN = "attr_hpp_green",
|
||||||
ATTR_HPP_BLUE = "attr_hpp_blue",
|
ATTR_HPP_BLUE = "attr_hpp_blue",
|
||||||
ATTR_HPP_PURPLE = "attr_hpp_purple",
|
ATTR_HPP_PURPLE = "attr_hpp_purple",
|
||||||
|
|
||||||
ATTR_NORMAL_HURT_RED = "attr_normal_hurt_red",
|
ATTR_NORMAL_HURT_RED = "attr_normal_hurt_red",
|
||||||
ATTR_NORMAL_HURT_YELLOW = "attr_normal_hurt_yellow",
|
ATTR_NORMAL_HURT_YELLOW = "attr_normal_hurt_yellow",
|
||||||
ATTR_NORMAL_HURT_GREEN = "attr_normal_hurt_green",
|
ATTR_NORMAL_HURT_GREEN = "attr_normal_hurt_green",
|
||||||
@ -437,6 +436,7 @@ local ATTR_NAME = {
|
|||||||
ATTR_SKILL_HURTP_GREEN = "attr_skill_hurtp_green",
|
ATTR_SKILL_HURTP_GREEN = "attr_skill_hurtp_green",
|
||||||
ATTR_SKILL_HURTP_BLUE = "attr_skill_hurtp_blue",
|
ATTR_SKILL_HURTP_BLUE = "attr_skill_hurtp_blue",
|
||||||
ATTR_SKILL_HURTP_PURPLE = "attr_skill_hurtp_purple",
|
ATTR_SKILL_HURTP_PURPLE = "attr_skill_hurtp_purple",
|
||||||
|
INVINCIBLE_SHIELD = "invincible_shield",
|
||||||
}
|
}
|
||||||
BattleConst.ATTR_NAME = ATTR_NAME
|
BattleConst.ATTR_NAME = ATTR_NAME
|
||||||
|
|
||||||
|
|||||||
@ -1614,13 +1614,14 @@ function BattleUnitComp:takeDamageOrCure(atker, num, effectType, effectStatus, d
|
|||||||
if effectType ~= EFFECT_TYPE.DIRECT then
|
if effectType ~= EFFECT_TYPE.DIRECT then
|
||||||
showHurtCombo = false
|
showHurtCombo = false
|
||||||
end
|
end
|
||||||
|
|
||||||
local shieldHpBefore = self.unitEntity:getShieldHp()
|
local shieldHpBefore = self.unitEntity:getShieldHp()
|
||||||
local hpRealReduce = self.unitEntity:takeDamageOrCure(num)
|
local hpRealReduce, shieldWorkOn = self.unitEntity:takeDamageOrCure(num)
|
||||||
if hpRealReduce < 0 and self.side == BattleConst.SIDE_DEF then -- 实际掉血了
|
if hpRealReduce < 0 and self.side == BattleConst.SIDE_DEF then -- 实际掉血了
|
||||||
self:addBattleExp(atker, hpRealReduce)
|
self:addBattleExp(atker, hpRealReduce)
|
||||||
end
|
end
|
||||||
local shieldHpDiff = self.unitEntity:getShieldHp() - shieldHpBefore
|
local shieldHpDiff = self.unitEntity:getShieldHp() - shieldHpBefore
|
||||||
if shieldHpDiff < 0 then -- 说明护盾减少了
|
if shieldHpDiff < 0 or shieldWorkOn then -- 说明护盾减少了
|
||||||
self.team:handleShield(shieldHpDiff, self)
|
self.team:handleShield(shieldHpDiff, self)
|
||||||
end
|
end
|
||||||
local hp = self.unitEntity:getHp()
|
local hp = self.unitEntity:getHp()
|
||||||
|
|||||||
@ -116,6 +116,18 @@ local function _invalidControlOff(buffSender, target, buff, buffEffect)
|
|||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function _invincibleShieldOn(buffSender, buff, target, buffEffect)
|
||||||
|
local shieldNum = buff:getEffectNum()
|
||||||
|
target.team:addInvincibleShield(buffEffect)
|
||||||
|
target.unitEntity:addAttr(ATTR_NAME.INVINCIBLE_SHIELD, shieldNum, false)
|
||||||
|
return shieldNum
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _invincibleShieldOff(buffSender, target, buff, buffEffect)
|
||||||
|
target.team:removeShield(buffEffect)
|
||||||
|
target.unitEntity:setAttr(ATTR_NAME.INVINCIBLE_SHIELD, 0)
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
local _handleOn = {
|
local _handleOn = {
|
||||||
[BUFF_NAME.ADD_SKILL] = _addSkillOn, -- 添加技能
|
[BUFF_NAME.ADD_SKILL] = _addSkillOn, -- 添加技能
|
||||||
@ -126,6 +138,7 @@ local _handleOn = {
|
|||||||
[BUFF_NAME.FROZEN] = _frozenOn, -- 冻结
|
[BUFF_NAME.FROZEN] = _frozenOn, -- 冻结
|
||||||
[BUFF_NAME.LOCK] = _lockOn, -- 锁定
|
[BUFF_NAME.LOCK] = _lockOn, -- 锁定
|
||||||
[BUFF_NAME.INVALID_CONTROL] = _invalidControlOn, -- 无控
|
[BUFF_NAME.INVALID_CONTROL] = _invalidControlOn, -- 无控
|
||||||
|
[BUFF_NAME.INVINCIBLE_SHIELD] = _invincibleShieldOn, -- 层数护盾
|
||||||
}
|
}
|
||||||
|
|
||||||
local _handleOff = {
|
local _handleOff = {
|
||||||
@ -137,6 +150,7 @@ local _handleOff = {
|
|||||||
[BUFF_NAME.FROZEN] = _frozenOff, -- 冻结
|
[BUFF_NAME.FROZEN] = _frozenOff, -- 冻结
|
||||||
[BUFF_NAME.LOCK] = _lockOff, -- 锁定
|
[BUFF_NAME.LOCK] = _lockOff, -- 锁定
|
||||||
[BUFF_NAME.INVALID_CONTROL] = _invalidControlOff, -- 无控
|
[BUFF_NAME.INVALID_CONTROL] = _invalidControlOff, -- 无控
|
||||||
|
[BUFF_NAME.INVINCIBLE_SHIELD] = _invincibleShieldOff, -- 层数护盾
|
||||||
}
|
}
|
||||||
|
|
||||||
local _handleWork = {
|
local _handleWork = {
|
||||||
|
|||||||
@ -204,6 +204,12 @@ function BattleTeam:addShield(buffEffect)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function BattleTeam:addInvincibleShield(buffEffect)
|
||||||
|
if buffEffect then
|
||||||
|
table.insert(self.shieldBuffList, 1, buffEffect)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function BattleTeam:removeShield(buffEffect)
|
function BattleTeam:removeShield(buffEffect)
|
||||||
for k, v in ipairs(self.shieldBuffList) do
|
for k, v in ipairs(self.shieldBuffList) do
|
||||||
if v == buffEffect then
|
if v == buffEffect then
|
||||||
@ -221,7 +227,12 @@ function BattleTeam:handleShield(reduceShield, unit)
|
|||||||
local needReedRefreshBuff = false
|
local needReedRefreshBuff = false
|
||||||
local currShieldBuff = self.shieldBuffList[1]
|
local currShieldBuff = self.shieldBuffList[1]
|
||||||
while currShieldBuff do
|
while currShieldBuff do
|
||||||
|
if reduceShield <= 0 and currShieldBuff.buff and currShieldBuff.buff:getName() == BattleConst.BUFF_NAME.INVINCIBLE_SHIELD then
|
||||||
|
reduceShield = currShieldBuff.result - 1
|
||||||
|
else
|
||||||
reduceShield = reduceShield + currShieldBuff.result
|
reduceShield = reduceShield + currShieldBuff.result
|
||||||
|
end
|
||||||
|
|
||||||
if reduceShield > 0 then
|
if reduceShield > 0 then
|
||||||
currShieldBuff.result = reduceShield
|
currShieldBuff.result = reduceShield
|
||||||
reduceShield = 0
|
reduceShield = 0
|
||||||
|
|||||||
@ -363,7 +363,7 @@ function BattleTeamEntity:takeDamageOrCure(num)
|
|||||||
if num < 0 then -- 是伤害的话处理一下护盾
|
if num < 0 then -- 是伤害的话处理一下护盾
|
||||||
num = self:handleShield(num)
|
num = self:handleShield(num)
|
||||||
if num >= 0 then -- 这次伤害被抵消了
|
if num >= 0 then -- 这次伤害被抵消了
|
||||||
return 0
|
return 0, true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local hpBefore = self:getHp()
|
local hpBefore = self:getHp()
|
||||||
@ -391,6 +391,12 @@ function BattleTeamEntity:takeDamageOrCure(num)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function BattleTeamEntity:handleShield(damageNum)
|
function BattleTeamEntity:handleShield(damageNum)
|
||||||
|
local invincibleShieldCount = self:getAttrValue(ATTR_NAME.INVINCIBLE_SHIELD)
|
||||||
|
if invincibleShieldCount > 0 then
|
||||||
|
self:setAttrValue(ATTR_NAME.INVINCIBLE_SHIELD, invincibleShieldCount - 1)
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
self.shieldHp = self.shieldHp + damageNum
|
self.shieldHp = self.shieldHp + damageNum
|
||||||
if self.shieldHp >= 0 then
|
if self.shieldHp >= 0 then
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user