fix(destroyable): damage reductions add up, as the client

The damage reduction behavior set the reduction to its amount and back to 0
when it ended, so a second reduction replaced the first and ending either
removed both. The client's behavior sends AddDamageReduction
(DamageReductionBehavior::Cast) and the destroyable adds it to the current
reduction; removing takes off that amount, never below 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-10-02 09:11:20 -05:00
parent 3236d9f08a
commit cf1e8a54c6
4 changed files with 28 additions and 2 deletions

View File

@@ -444,6 +444,14 @@ void DestroyableComponent::SetDamageReduction(int32_t value) {
m_DamageReduction = value;
}
void DestroyableComponent::AddDamageReduction(const int32_t value) {
SetDamageReduction(std::max(m_DamageReduction + value, 0));
}
void DestroyableComponent::RemoveDamageReduction(const int32_t value) {
SetDamageReduction(std::max(m_DamageReduction - value, 0));
}
void DestroyableComponent::SetIsImmune(bool value) {
m_DirtyHealth = true;
m_ImmuneToBasicAttackCount = value ? 1 : 0;