From f4047ff7dca9864007100fe767d4c716bf29cd0f Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 21 Jun 2011 16:09:07 +0200 Subject: [PATCH] Core/Alcohol: Drunk players will now properly see drunk-visible units. --- src/server/game/Entities/Player/Player.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8f1467aa302..d30455b8825 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1459,12 +1459,17 @@ void Player::SetDrunkValue(uint16 newDrunkenValue, uint32 itemId) { uint32 oldDrunkenState = Player::GetDrunkenstateByValue(m_drunk); - if (!newDrunkenValue && !HasAuraType(SPELL_AURA_MOD_FAKE_INEBRIATE)) - m_invisibilityDetect.AddFlag(INVISIBILITY_DRUNK); - else - m_invisibilityDetect.DelFlag(INVISIBILITY_DRUNK); + // select drunk percent or total SPELL_AURA_MOD_FAKE_INEBRIATE amount, whichever is higher for visibility updates + int32 drunkPercent = newDrunkenValue * 100 / 0xFFFF; + drunkPercent = std::max(drunkPercent, GetTotalAuraModifier(SPELL_AURA_MOD_FAKE_INEBRIATE)); - m_invisibilityDetect.AddValue(INVISIBILITY_DRUNK, int32(newDrunkenValue - m_drunk) / 256); + if (drunkPercent) + { + m_invisibilityDetect.AddFlag(INVISIBILITY_DRUNK); + m_invisibilityDetect.SetValue(INVISIBILITY_DRUNK, drunkPercent); + } + else if (!HasAuraType(SPELL_AURA_MOD_FAKE_INEBRIATE) && !newDrunkenValue) + m_invisibilityDetect.DelFlag(INVISIBILITY_DRUNK); m_drunk = newDrunkenValue; SetUInt32Value(PLAYER_BYTES_3, (GetUInt32Value(PLAYER_BYTES_3) & 0xFFFF0001) | (m_drunk & 0xFFFE));