From f4047ff7dca9864007100fe767d4c716bf29cd0f Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 21 Jun 2011 16:09:07 +0200 Subject: Core/Alcohol: Drunk players will now properly see drunk-visible units. --- src/server/game/Entities/Player/Player.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src') 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,13 +1459,18 @@ void Player::SetDrunkValue(uint16 newDrunkenValue, uint32 itemId) { uint32 oldDrunkenState = Player::GetDrunkenstateByValue(m_drunk); - if (!newDrunkenValue && !HasAuraType(SPELL_AURA_MOD_FAKE_INEBRIATE)) + // 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)); + + if (drunkPercent) + { m_invisibilityDetect.AddFlag(INVISIBILITY_DRUNK); - else + m_invisibilityDetect.SetValue(INVISIBILITY_DRUNK, drunkPercent); + } + else if (!HasAuraType(SPELL_AURA_MOD_FAKE_INEBRIATE) && !newDrunkenValue) m_invisibilityDetect.DelFlag(INVISIBILITY_DRUNK); - m_invisibilityDetect.AddValue(INVISIBILITY_DRUNK, int32(newDrunkenValue - m_drunk) / 256); - m_drunk = newDrunkenValue; SetUInt32Value(PLAYER_BYTES_3, (GetUInt32Value(PLAYER_BYTES_3) & 0xFFFF0001) | (m_drunk & 0xFFFE)); -- cgit v1.2.3