aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp7
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp14
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h13
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h2
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,