diff options
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 13 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 2 |
5 files changed, 30 insertions, 8 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5bc6a53f6a5..c9a782cc78b 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3682,10 +3682,9 @@ void Player::LearnSpell(uint32 spell_id, bool dependent, bool fromSkill /*= fals // prevent duplicated entires in spell book, also not send if not in world (loading) if (learning && IsInWorld()) { - WorldPacket data(SMSG_LEARNED_SPELL, 8); - data << uint32(spell_id); - data << uint32(0); - GetSession()->SendPacket(&data); + WorldPackets::Spells::LearnedSpells packet; + packet.SpellID.push_back(spell_id); + GetSession()->SendPacket(packet.Write()); } // learn all disabled higher ranks and required spells (recursive) diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index 1094dd7640e..ee2e0e8dfdf 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -403,4 +403,16 @@ WorldPacket const* WorldPackets::Spells::SendSpellStart::Write() }*/ return &_worldPacket; -}
\ No newline at end of file +} + +WorldPacket const* WorldPackets::Spells::LearnedSpells::Write() +{ + _worldPacket << uint32(SpellID.size()); + for (int32 spell : SpellID) + _worldPacket << spell; + + _worldPacket.WriteBit(SuppressMessaging); + _worldPacket.FlushBits(); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 77825067693..2c971107268 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -152,7 +152,18 @@ namespace WorldPackets WorldPacket const* Write() override; Spell* spell; - }; + }; + + class LearnedSpells final : public ServerPacket + { + public: + LearnedSpells() : ServerPacket(SMSG_LEARNED_SPELLS, 9) { } + + WorldPacket const* Write() override; + + std::vector<int32> SpellID; + bool SuppressMessaging = false; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 8fb7ca21acd..3b92433fb2d 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1031,7 +1031,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_TIME_UPDATE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_KICK_REASON, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_DANCE_MOVES, STATUS_UNHANDLED); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_SPELL, STATUS_UNHANDLED); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_SPELLS, STATUS_NEVER); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEVELUP_INFO, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_BOOT_PROPOSAL_UPDATE, STATUS_UNHANDLED); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_DISABLED, STATUS_UNHANDLED); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 9a7c8ed8ae3..70bc31fc5ce 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1041,7 +1041,7 @@ enum OpcodeServer : uint32 SMSG_JOINED_BATTLEGROUND_QUEUE = 0xBADD, SMSG_KICK_REASON = 0xBADD, SMSG_LEARNED_DANCE_MOVES = 0xBADD, - SMSG_LEARNED_SPELL = 0xBADD, + SMSG_LEARNED_SPELLS = 0x08AB, SMSG_LEVELUP_INFO = 0xBADD, SMSG_LFG_BOOT_PROPOSAL_UPDATE = 0xBADD, SMSG_LFG_DISABLED = 0xBADD, |
