aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp33
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h6
4 files changed, 41 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 7db69390677..9c04f2a4e6f 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -192,6 +192,7 @@ Player::Player(WorldSession* session): Unit(true)
m_regenTimer = 0;
m_regenTimerCount = 0;
+ m_foodEmoteTimerCount = 0;
m_weaponChangeTimer = 0;
m_zoneUpdateId = uint32(-1);
@@ -1990,6 +1991,7 @@ void Player::RegenerateAll()
// return;
m_regenTimerCount += m_regenTimer;
+ m_foodEmoteTimerCount += m_regenTimer;
Regenerate(POWER_ENERGY);
@@ -2019,6 +2021,37 @@ void Player::RegenerateAll()
}
m_regenTimer = 0;
+
+ // Handles the emotes for drinking and eating.
+ // According to sniffs there is a background timer going on that repeats independed from the time window where the aura applies.
+ // That's why we dont need to reset the timer on apply. In sniffs I have seen that the first call for the spell visual is totally random, then after
+ // 5 seconds over and over again which confirms my theory that we have a independed timer.
+ if (m_foodEmoteTimerCount >= 5000)
+ {
+ std::vector<AuraEffect*> auraList;
+ AuraEffectList const& ModRegenAuras = GetAuraEffectsByType(SPELL_AURA_MOD_REGEN);
+ AuraEffectList const& ModPowerRegenAuras = GetAuraEffectsByType(SPELL_AURA_MOD_POWER_REGEN);
+
+ auraList.reserve(ModRegenAuras.size() + ModPowerRegenAuras.size());
+ auraList.insert(auraList.end(), ModRegenAuras.begin(), ModRegenAuras.end());
+ auraList.insert(auraList.end(), ModPowerRegenAuras.begin(), ModPowerRegenAuras.end());
+
+ for (auto itr = auraList.begin(); itr != auraList.end(); ++itr)
+ {
+ // Food emote comes above drinking emote if we have to decide (mage regen food for example)
+ if ((*itr)->GetBase()->HasEffectType(SPELL_AURA_MOD_REGEN) && (*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED)
+ {
+ SendPlaySpellVisual(SPELL_VISUAL_KIT_FOOD);
+ break;
+ }
+ else if ((*itr)->GetBase()->HasEffectType(SPELL_AURA_MOD_POWER_REGEN) && (*itr)->GetSpellInfo()->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_SEATED)
+ {
+ SendPlaySpellVisual(SPELL_VISUAL_KIT_DRINK);
+ break;
+ }
+ }
+ m_foodEmoteTimerCount -= 5000;
+ }
}
void Player::Regenerate(Powers power)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 64756dfb287..0ade1633504 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2146,6 +2146,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
// Gamemaster whisper whitelist
GuidList WhisperList;
uint32 m_regenTimerCount;
+ uint32 m_foodEmoteTimerCount;
float m_powerFraction[MAX_POWERS];
uint32 m_contestedPvPTimer;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 76c9c482a0c..6e8a96d72f2 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -11825,7 +11825,7 @@ void Unit::SendPlaySpellVisual(uint32 id)
WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 8 + 4);
data << uint64(GetGUID());
data << uint32(id); // SpellVisualKit.dbc index
- SendMessageToSet(&data, false);
+ SendMessageToSet(&data, true);
}
void Unit::SendPlaySpellImpact(ObjectGuid guid, uint32 id)
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 24afda84de6..b6c3ac974b8 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -303,6 +303,12 @@ enum SpellCategory
SPELL_CATEGORY_DRINK = 59
};
+enum SpellVisualKit
+{
+ SPELL_VISUAL_KIT_FOOD = 406,
+ SPELL_VISUAL_KIT_DRINK = 438
+};
+
const uint32 ItemQualityColors[MAX_ITEM_QUALITY] =
{
0xff9d9d9d, //GREY