Core/Alcohol: Drunk players will now properly see drunk-visible units.

This commit is contained in:
Shauren
2011-06-21 16:09:07 +02:00
parent 2ac777f8ce
commit f4047ff7dc

View File

@@ -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));