aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-06-21 16:09:07 +0200
committerShauren <shauren.trinity@gmail.com>2011-06-21 16:09:07 +0200
commitf4047ff7dca9864007100fe767d4c716bf29cd0f (patch)
treec5e8229befd5b7378cca78ea14a331271afdfa11
parent2ac777f8ce35aeed2acbd76de4c0df7bf5878fae (diff)
Core/Alcohol: Drunk players will now properly see drunk-visible units.
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp13
1 files changed, 9 insertions, 4 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,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));