diff options
| author | Ovah <dreadkiller@gmx.de> | 2020-04-24 19:00:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-24 19:00:19 +0200 |
| commit | fb0d2ed2b96c314ea144b3524195ae96878e0079 (patch) | |
| tree | 2d439892ee44787cab0ecd256348a7b4f2935d10 /src/server/game/Spells | |
| parent | 1a415147b9acc945163f6c8044e886983cbe8900 (diff) | |
Core/Spells: implement SMSG_MOUNT_RESULT and use it for transformed mounting cases (#24404)
Diffstat (limited to 'src/server/game/Spells')
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 22 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.h | 1 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 779b0d0495c..a03788cdda5 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3952,6 +3952,23 @@ void Spell::SendCastResult(Player* caster, SpellInfo const* spellInfo, uint32 sp caster->GetSession()->SendPacket(packet.Write()); } +void Spell::SendMountResult(MountResult result) +{ + if (result == MountResult::Ok) + return; + + if (!m_caster->IsPlayer()) + return; + + Player* caster = m_caster->ToPlayer(); + if (caster->IsLoading()) // don't send mount results at loading time + return; + + WorldPackets::Spells::MountResult packet; + packet.Result = AsUnderlyingType(result); + caster->SendDirectMessage(packet.Write()); +} + void Spell::SendSpellStart() { if (!IsNeedSendToClient()) @@ -5712,7 +5729,10 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint return SPELL_FAILED_NO_MOUNTS_ALLOWED; if (m_caster->IsInDisallowedMountForm()) - return SPELL_FAILED_NOT_SHAPESHIFT; + { + SendMountResult(MountResult::Shapeshifted); // mount result gets sent before the cast result + return SPELL_FAILED_DONT_REPORT; + } break; } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index f31c2b12bf5..b8b72b5dcfc 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -576,6 +576,7 @@ class TC_GAME_API Spell static void SendCastResult(Player* caster, SpellInfo const* spellInfo, uint32 spellVisual, ObjectGuid cast_count, SpellCastResult result, SpellCustomErrors customError = SPELL_CUSTOM_ERROR_NONE, uint32* param1 = nullptr, uint32* param2 = nullptr); void SendCastResult(SpellCastResult result, uint32* param1 = nullptr, uint32* param2 = nullptr) const; void SendPetCastResult(SpellCastResult result, uint32* param1 = nullptr, uint32* param2 = nullptr) const; + void SendMountResult(MountResult result); void SendSpellStart(); void SendSpellGo(); void SendSpellCooldown(); |
