From e65700f13e2f4daaf9f31cbfa1adc8450522a6f8 Mon Sep 17 00:00:00 2001 From: BartPortugalec Date: Wed, 13 Nov 2024 20:52:33 +0100 Subject: [PATCH] Fix --- .../formulas/TES5DamageFormula.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/skymp5-server/cpp/server_guest_lib/formulas/TES5DamageFormula.cpp b/skymp5-server/cpp/server_guest_lib/formulas/TES5DamageFormula.cpp index 9fda8ef480..132577775f 100644 --- a/skymp5-server/cpp/server_guest_lib/formulas/TES5DamageFormula.cpp +++ b/skymp5-server/cpp/server_guest_lib/formulas/TES5DamageFormula.cpp @@ -8,9 +8,9 @@ namespace internal { -bool IsUnarmedAttack(const uint32_t sourceFormId) +bool IsUnarmedAttack(const uint32_t sourceFormId, bool isBashAttack) { - return sourceFormId == 0x1f4; + return isBashAttack ? false : sourceFormId == 0x1f4; } class TES5DamageFormulaImpl @@ -36,7 +36,7 @@ class TES5DamageFormulaImpl const Inventory::Entry& opponentEquipmentEntry) const; [[nodiscard]] float CalcOpponentArmorRating() const; [[nodiscard]] float CalcMagicEffects(const Effects& effects) const; - [[nodiscard]] float DetermineDamageFromSource(uint32_t source) const; + [[nodiscard]] float DetermineDamageFromSource(uint32_t source, bool isBashAttack) const; [[nodiscard]] float CalcUnarmedDamage() const; [[nodiscard]] float CalcArmorDamagePenalty() const; }; @@ -118,9 +118,9 @@ float TES5DamageFormulaImpl::CalcUnarmedDamage() const return espm::GetData(raceId, espmProvider).unarmedDamage; } -float TES5DamageFormulaImpl::DetermineDamageFromSource(uint32_t source) const +float TES5DamageFormulaImpl::DetermineDamageFromSource(uint32_t source, bool isBashAttack) const { - return IsUnarmedAttack(source) ? CalcUnarmedDamage() : CalcWeaponRating(); + return IsUnarmedAttack(source, isBashAttack) ? CalcUnarmedDamage() : CalcWeaponRating(); } float TES5DamageFormulaImpl::CalcArmorDamagePenalty() const @@ -141,7 +141,7 @@ float TES5DamageFormulaImpl::CalcArmorDamagePenalty() const float TES5DamageFormulaImpl::CalculateDamage() const { - const float incomingDamage = DetermineDamageFromSource(hitData.source); + const float incomingDamage = DetermineDamageFromSource(hitData.source, hitData.isBashAttack); // TODO(#461): add difficulty multiplier // TODO(#463): add sneak modifier @@ -151,6 +151,10 @@ float TES5DamageFormulaImpl::CalculateDamage() const damage *= 2.f; } + if (hitData.isBashAttack) { + damage *= 0.3f; + } + if (hitData.isHitBlocked) { // TODO(#460): implement correct block formula damage *= 0.1f;