From 949d82e4d1ed2b694c8a6d7240aefc9b4d81d01e Mon Sep 17 00:00:00 2001 From: Mykhailo Redko Date: Mon, 26 Feb 2024 12:37:28 +0200 Subject: Core/Units: Fix some cases where server was not sending power updates to client on time (#29573) --- src/server/game/Entities/Player/Player.cpp | 4 ++-- src/server/game/Entities/Unit/Unit.cpp | 4 ++-- src/server/game/Entities/Unit/Unit.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6872705706f..ef84452914b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2099,8 +2099,8 @@ void Player::Regenerate(Powers power) else m_powerFraction[power] = addvalue - integerValue; } - if (m_regenTimerCount >= 2000) - SetPower(power, curValue); + if (m_regenTimerCount >= 2000 || curValue == maxValue || curValue == 0) + SetPower(power, curValue, true, true); else UpdateUInt32Value(UNIT_FIELD_POWER1 + AsUnderlyingType(power), curValue); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f879b65074e..d31025c40ce 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9402,9 +9402,9 @@ void Unit::SetMaxHealth(uint32 val) SetHealth(val); } -void Unit::SetPower(Powers power, uint32 val, bool withPowerUpdate /*= true*/) +void Unit::SetPower(Powers power, uint32 val, bool withPowerUpdate /*= true*/, bool force /*= false*/) { - if (GetPower(power) == val) + if (!force && GetPower(power) == val) return; uint32 maxPower = GetMaxPower(power); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 7074a6a8058..c39eb4328bc 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -934,7 +934,7 @@ class TC_GAME_API Unit : public WorldObject uint32 GetMaxPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_MAXPOWER1 + int32(power)); } float GetPowerPct(Powers power) const { return GetMaxPower(power) ? 100.f * GetPower(power) / GetMaxPower(power) : 0.0f; } int32 CountPctFromMaxPower(Powers power, int32 pct) const { return CalculatePct(GetMaxPower(power), pct); } - void SetPower(Powers power, uint32 val, bool withPowerUpdate = true); + void SetPower(Powers power, uint32 val, bool withPowerUpdate = true, bool force = false); void SetMaxPower(Powers power, uint32 val); inline void SetFullPower(Powers power) { SetPower(power, GetMaxPower(power)); } // returns the change in power -- cgit v1.2.3