From 45333fcc8fd8fbd58b6168098a8445b36b9c5248 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 11 Jul 2023 19:00:12 +0200 Subject: Core/Spells: fixed an underflow in SPELL_EFFECT_INEBRIATE when using drinks that sober the character up (such as Starfire Espresso) --- src/server/game/Spells/SpellEffects.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'src/server/game/Spells/SpellEffects.cpp') 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(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() -- cgit v1.2.3