aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2023-07-11 19:00:12 +0200
committerOvahlord <dreadkiller@gmx.de>2023-07-11 19:06:17 +0200
commit45333fcc8fd8fbd58b6168098a8445b36b9c5248 (patch)
tree34886e374724f51131aa77550f14f9efefc9df5d /src
parentff9a23afab84cb084e77d0a005e20c2da1f8d31a (diff)
Core/Spells: fixed an underflow in SPELL_EFFECT_INEBRIATE when using drinks that sober the character up (such as Starfire Espresso)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index efb6f525f36..16e31fb645c 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -3400,23 +3400,19 @@ void Spell::EffectInebriate()
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
- if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
+ if (!unitTarget || !unitTarget->IsPlayer())
return;
Player* player = unitTarget->ToPlayer();
- uint8 currentDrunk = player->GetDrunkValue();
- uint8 drunkMod = damage;
- if (currentDrunk + drunkMod > 100)
- {
- currentDrunk = 100;
- if (rand_chance() < 25.0f)
+
+ uint8 currentDrunkValue = player->GetDrunkValue();
+ uint8 drunkValue = std::clamp<int32>(damage + currentDrunkValue, 0, 100);
+ if (currentDrunkValue == 100 && currentDrunkValue == drunkValue)
+ if (roll_chance_f(25.0f))
player->CastSpell(player, 67468, CastSpellExtraArgs()
.SetTriggeringSpell(this)); // Drunken Vomit
- }
- else
- currentDrunk += drunkMod;
- player->SetDrunkValue(currentDrunk, m_CastItem ? m_CastItem->GetEntry() : 0);
+ player->SetDrunkValue(drunkValue, m_CastItem ? m_CastItem->GetEntry() : 0);
}
void Spell::EffectFeedPet()