From 7503a242664934a8824e269244dbd7abd3f96630 Mon Sep 17 00:00:00 2001 From: Tereneckla Date: Sat, 26 Apr 2025 18:37:05 +0000 Subject: [PATCH] fix(Core/Player) internally handle expertise as float (#21967) The core will no longer truncated the expertise (from float to int) value on the server side. --- src/server/game/Entities/Player/Player.cpp | 4 ++-- src/server/game/Entities/Player/Player.h | 3 +++ src/server/game/Entities/Unit/StatSystem.cpp | 8 +++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c79fd6f1f..4d9e9655a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5233,9 +5233,9 @@ float Player::GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const switch (attType) { case BASE_ATTACK: - return GetUInt32Value(PLAYER_EXPERTISE) / 4.0f; + return m_Expertise / 4.0f; case OFF_ATTACK: - return GetUInt32Value(PLAYER_OFFHAND_EXPERTISE) / 4.0f; + return m_OffhandExpertise / 4.0f; default: break; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2545c89e4..844d5f9db 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2884,6 +2884,9 @@ protected: uint8 m_swingErrorMsg; float m_ammoDPS; + float m_Expertise; + float m_OffhandExpertise; + ////////////////////Rest System///////////////////// time_t _restTime; uint32 _innTriggerId; diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 49a00a5ae..3e702f846 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -879,7 +879,7 @@ void Player::UpdateExpertise(WeaponAttackType attack) if (attack == RANGED_ATTACK) return; - int32 expertise = int32(GetRatingBonusValue(CR_EXPERTISE)); + float expertise = GetRatingBonusValue(CR_EXPERTISE); Item* weapon = GetWeaponForAttack(attack, true); @@ -900,10 +900,12 @@ void Player::UpdateExpertise(WeaponAttackType attack) switch (attack) { case BASE_ATTACK: - SetUInt32Value(PLAYER_EXPERTISE, expertise); + m_Expertise = expertise; + SetUInt32Value(PLAYER_EXPERTISE, int32(expertise)); break; case OFF_ATTACK: - SetUInt32Value(PLAYER_OFFHAND_EXPERTISE, expertise); + m_OffhandExpertise = expertise; + SetUInt32Value(PLAYER_OFFHAND_EXPERTISE, int32(expertise)); break; default: break;