diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 33 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 6 | 
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 | 
