aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp16
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h13
-rwxr-xr-xsrc/server/game/Guilds/Guild.h1
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp48
-rwxr-xr-xsrc/server/game/Handlers/NPCHandler.cpp45
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp9
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h6
-rwxr-xr-xsrc/server/game/Server/WorldSession.h1
8 files changed, 89 insertions, 50 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 1db8b93f9ee..42fa018d7b2 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -15655,14 +15655,14 @@ void Unit::SetAuraStack(uint32 spellId, Unit* target, uint32 stack)
aura->SetStackAmount(stack);
}
-void Unit::SendPlaySpellVisual(uint32 id)
+void Unit::SendPlaySpellVisualKit(uint32 id, uint32 unkParam)
{
ObjectGuid guid = GetGUID();
- WorldPacket data(SMSG_PLAY_SPELL_VISUAL, 4 * 3 + 8);
- data << uint32(0);
- data << uint32(id); // SpellVisualKit.dbc index
+ WorldPacket data(SMSG_PLAY_SPELL_VISUAL_KIT, 4 + 4+ 4 + 8);
data << uint32(0);
+ data << uint32(id); // SpellVisualKit.dbc index
+ data << uint32(unkParam);
data.WriteBit(guid[4]);
data.WriteBit(guid[7]);
data.WriteBit(guid[5]);
@@ -15683,14 +15683,6 @@ void Unit::SendPlaySpellVisual(uint32 id)
SendMessageToSet(&data, false);
}
-void Unit::SendPlaySpellImpact(uint64 guid, uint32 id)
-{
- WorldPacket data(SMSG_PLAY_SPELL_IMPACT, 8 + 4);
- data << uint64(guid); // target
- data << uint32(id); // SpellVisualKit.dbc index
- SendMessageToSet(&data, false);
-}
-
void Unit::ApplyResilience(Unit const* victim, float* crit, int32* damage, bool isCrit, CombatRating type) const
{
// player mounted on multi-passenger mount is also classified as vehicle
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index d5bfaff5e87..4e68ae9a3a0 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1579,8 +1579,7 @@ class Unit : public WorldObject
Aura* AddAura(uint32 spellId, Unit* target);
Aura* AddAura(SpellInfo const* spellInfo, uint8 effMask, Unit* target);
void SetAuraStack(uint32 spellId, Unit* target, uint32 stack);
- void SendPlaySpellVisual(uint32 id);
- void SendPlaySpellImpact(uint64 guid, uint32 id);
+ void SendPlaySpellVisualKit(uint32 id, uint32 unkParam);
void DeMorph();
@@ -2199,10 +2198,14 @@ class Unit : public WorldObject
virtual bool isBeingLoaded() const { return false;}
bool IsDuringRemoveFromWorld() const {return m_duringRemoveFromWorld;}
- Pet* ToPet(){ if (isPet()) return reinterpret_cast<Pet*>(this); else return NULL; }
- Totem* ToTotem(){ if (isTotem()) return reinterpret_cast<Totem*>(this); else return NULL; }
+ Pet* ToPet() { if (isPet()) return reinterpret_cast<Pet*>(this); else return NULL; }
+ Pet const* ToPet() const { if (isPet()) return reinterpret_cast<Pet const*>(this); else return NULL; }
+
+ Totem* ToTotem() { if (isTotem()) return reinterpret_cast<Totem*>(this); else return NULL; }
+ Totem const* ToTotem() const { if (isTotem()) return reinterpret_cast<Totem const*>(this); else return NULL; }
+
TempSummon* ToTempSummon() { if (isSummon()) return reinterpret_cast<TempSummon*>(this); else return NULL; }
- const TempSummon* ToTempSummon() const { if (isSummon()) return reinterpret_cast<const TempSummon*>(this); else return NULL; }
+ TempSummon const* ToTempSummon() const { if (isSummon()) return reinterpret_cast<TempSummon const*>(this); else return NULL; }
void SetTarget(uint64 guid)
{
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index bb94fdbb0f1..1adf1675c45 100755
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -708,6 +708,7 @@ public:
void DeleteMember(uint64 guid, bool isDisbanding = false, bool isKicked = false);
bool ChangeMemberRank(uint64 guid, uint8 newRank);
bool IsMember(uint64 guid);
+ uint32 GetMembersCount() { return m_members.size(); }
// Bank
void SwapItems(Player* player, uint8 tabId, uint8 slotId, uint8 destTabId, uint8 destSlotId, uint32 splitedAmount);
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 76aae192c41..18ec0067623 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -1253,29 +1253,61 @@ void WorldSession::HandleInspectOpcode(WorldPacket& recvData)
data << uint64(guild->GetGUID());
data << uint32(guild->GetLevel());
data << uint64(0/*guild->GetXP()*/);
- data << uint32(0/*guild->GetMembersCount()*/); // number of members
+ data << uint32(guild->GetMembersCount());
}
SendPacket(&data);
}
void WorldSession::HandleInspectHonorStatsOpcode(WorldPacket& recvData)
{
- uint64 guid;
- recvData >> guid;
+ ObjectGuid guid;
+ guid[1] = recvData.ReadBit();
+ guid[5] = recvData.ReadBit();
+ guid[7] = recvData.ReadBit();
+ guid[3] = recvData.ReadBit();
+ guid[2] = recvData.ReadBit();
+ guid[4] = recvData.ReadBit();
+ guid[0] = recvData.ReadBit();
+ guid[6] = recvData.ReadBit();
+ recvData.ReadByteSeq(guid[4]);
+ recvData.ReadByteSeq(guid[7]);
+ recvData.ReadByteSeq(guid[0]);
+ recvData.ReadByteSeq(guid[5]);
+ recvData.ReadByteSeq(guid[1]);
+ recvData.ReadByteSeq(guid[6]);
+ recvData.ReadByteSeq(guid[2]);
+ recvData.ReadByteSeq(guid[3]);
Player* player = ObjectAccessor::FindPlayer(guid);
if (!player)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "MSG_INSPECT_HONOR_STATS: No player found from GUID: " UI64FMTD, guid);
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_INSPECT_HONOR_STATS: No player found from GUID: " UI64FMTD, guid);
return;
}
- WorldPacket data(SMSG_INSPECT_HONOR_STATS, 4+1+4+8);
- data << uint32(player->GetUInt32Value(PLAYER_FIELD_KILLS));
- data << uint8(0); // rank
+ ObjectGuid playerGuid = player->GetGUID();
+ WorldPacket data(SMSG_INSPECT_HONOR_STATS, 8+1+4+4);
+ data.WriteBit(playerGuid[4]);
+ data.WriteBit(playerGuid[3]);
+ data.WriteBit(playerGuid[6]);
+ data.WriteBit(playerGuid[2]);
+ data.WriteBit(playerGuid[5]);
+ data.WriteBit(playerGuid[0]);
+ data.WriteBit(playerGuid[7]);
+ data.WriteBit(playerGuid[1]);
+ data << uint8(0); // rank
+ data << uint16(player->GetUInt16Value(PLAYER_FIELD_KILLS, 1)); // yesterday kills
+ data << uint16(player->GetUInt16Value(PLAYER_FIELD_KILLS, 0)); // today kills
+ data.WriteByteSeq(playerGuid[2]);
+ data.WriteByteSeq(playerGuid[0]);
+ data.WriteByteSeq(playerGuid[6]);
+ data.WriteByteSeq(playerGuid[3]);
+ data.WriteByteSeq(playerGuid[4]);
+ data.WriteByteSeq(playerGuid[1]);
+ data.WriteByteSeq(playerGuid[5]);
data << uint32(player->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS));
- data << uint64(player->GetGUID());
+ data.WriteByteSeq(playerGuid[7]);
SendPacket(&data);
}
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 32636d51f49..749c0254571 100755
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -236,13 +236,13 @@ void WorldSession::SendTrainerList(uint64 guid, const std::string& strTitle)
SendPacket(&data);
}
-void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket & recvData)
+void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
{
uint64 guid;
- uint32 spellId = 0;
- int32 unkInt;
+ uint32 spellId;
+ uint32 trainerId;
- recvData >> guid >> unkInt >> spellId;
+ recvData >> guid >> trainerId >> spellId;
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_TRAINER_BUY_SPELL NpcGUID=%u, learn spell id is: %u", uint32(GUID_LOPART(guid)), spellId);
Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_TRAINER);
@@ -257,33 +257,48 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket & recvData)
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
if (!unit->isCanTrainingOf(_player, true))
+ {
+ SendTrainerService(guid, spellId, 0);
return;
+ }
// check present spell in trainer spell list
TrainerSpellData const* trainer_spells = unit->GetTrainerSpells();
if (!trainer_spells)
+ {
+ SendTrainerService(guid, spellId, 0);
return;
+ }
// not found, cheat?
TrainerSpell const* trainer_spell = trainer_spells->Find(spellId);
if (!trainer_spell)
+ {
+ SendTrainerService(guid, spellId, 0);
return;
+ }
// can't be learn, cheat? Or double learn with lags...
if (_player->GetTrainerSpellState(trainer_spell) != TRAINER_SPELL_GREEN)
+ {
+ SendTrainerService(guid, spellId, 0);
return;
+ }
// apply reputation discount
uint32 nSpellCost = uint32(floor(trainer_spell->spellCost * _player->GetReputationPriceDiscount(unit)));
// check money requirement
if (!_player->HasEnoughMoney(uint64(nSpellCost)))
+ {
+ SendTrainerService(guid, spellId, 1);
return;
+ }
_player->ModifyMoney(-int64(nSpellCost));
- unit->SendPlaySpellVisual(179); // 53 SpellCastDirected
- unit->SendPlaySpellImpact(_player->GetGUID(), 362); // 113 EmoteSalute
+ unit->SendPlaySpellVisualKit(179, 0); // 53 SpellCastDirected
+ _player->SendPlaySpellVisualKit(362, 1); // 113 EmoteSalute
// learn explicitly or cast explicitly
if (trainer_spell->IsCastable())
@@ -291,10 +306,15 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket & recvData)
else
_player->learnSpell(spellId, false);
- WorldPacket data(SMSG_TRAINER_BUY_SUCCEEDED, 12);
+ SendTrainerService(guid, spellId, 2);
+}
+
+void WorldSession::SendTrainerService(uint64 guid, uint32 spellId, uint32 result)
+{
+ WorldPacket data(SMSG_TRAINER_SERVICE, 16);
data << uint64(guid);
- data << uint32(spellId); // should be same as in packet from client
- data << uint32(0); // "Trainer service", 1 = "Not enough money for trainer service <TS>". 0 = "Trainer service <TS> unavailable"
+ data << uint32(spellId); // should be same as in packet from client
+ data << uint32(result); // 2 == Success. 1 == "Not enough money for trainer service." 0 == "Trainer service %d unavailable."
SendPacket(&data);
}
@@ -490,12 +510,7 @@ void WorldSession::SendBindPoint(Creature* npc)
// send spell for homebinding (3286)
npc->CastSpell(_player, bindspell, true);
- WorldPacket data(SMSG_TRAINER_BUY_SUCCEEDED, (8+4));
- data << uint64(npc->GetGUID());
- data << uint32(bindspell);
- data << uint32(0); // "Trainer service", 1 = "Not enough money for trainer service <TS>". 0 = "Trainer service <TS> unavailable"
- SendPacket(&data);
-
+ SendTrainerService(npc->GetGUID(), bindspell, 2);
_player->PlayerTalkClass->SendCloseGossip();
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 671cec2905e..42cd6fc0a32 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -450,7 +450,6 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestAccountData );
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER(CMSG_REQUEST_HONOR_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_HOTFIX, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleRequestHotfix );
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_INSPECT_RATED_BG_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(CMSG_REQUEST_PARTY_MEMBER_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestPartyMemberStatsOpcode);
@@ -898,7 +897,7 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_INITIAL_SPELLS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_INIT_CURRENCY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_INIT_WORLD_STATES, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_INSPECT_HONOR_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_INSPECT_HONOR_STATS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_INSPECT_RATED_BG_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_INSPECT_RESULTS_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_INSPECT_TALENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1245,8 +1244,8 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_TRADE_STATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_TRADE_STATUS_EXTENDED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_TRAINER_BUY_FAILED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_TRAINER_BUY_SUCCEEDED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_TRAINER_LIST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_TRAINER_SERVICE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1560,7 +1559,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(MSG_GM_RESETINSTANCELIMIT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_GM_SHOWLABEL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_GM_SUMMON, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_OPCODE_HANDLER(MSG_INSPECT_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectHonorStatsOpcode );
+ DEFINE_OPCODE_HANDLER(CMSG_INSPECT_HONOR_STATS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectHonorStatsOpcode );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_FEATHER_FALL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_GRAVITY_CHNG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(MSG_MOVE_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -1664,7 +1663,6 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_NPC_WONT_TALK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_PET_UNLEARN_CONFIRM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_PLAYER_UNK_DEAD_ALIVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_PLAY_SPELL_IMPACT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_PROFILEDATA_RESPONSE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_PUREMOUNT_CANCELLED_OBSOLETE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_PVP_QUEUE_STATS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1699,7 +1697,6 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_SPLINE_SET_SWIM_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_SPLINE_SET_TURN_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_SPLINE_SET_WALK_SPEED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_TRAINER_BUY_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_VOICE_SESSION_ADJUST_PRIORITY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_VOICE_SESSION_ENABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_ZONE_MAP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index da881a7eb5b..6c0ac6c88f3 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -284,6 +284,7 @@ enum Opcodes
CMSG_IGNORE_TRADE = 0x7112,
CMSG_INITIATE_TRADE = 0x7916,
CMSG_INSPECT = 0x0927,
+ CMSG_INSPECT_HONOR_STATS = 0x791E,
CMSG_INSTANCE_LOCK_WARNING_RESPONSE = 0x6234,
CMSG_ITEM_REFUND = 0x6134,
CMSG_ITEM_REFUND_INFO = 0x2206,
@@ -463,7 +464,6 @@ enum Opcodes
CMSG_REQUEST_ACCOUNT_DATA = 0x6505,
CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x7102,
CMSG_REQUEST_CEMETERY_LIST = 0x720A,
- CMSG_REQUEST_HONOR_STATS = 0x791E,
CMSG_REQUEST_HOTFIX = 0x2401,
CMSG_REQUEST_INSPECT_RATED_BG_STATS = 0x3010,
CMSG_REQUEST_PARTY_MEMBER_STATS = 0x0C04,
@@ -1170,7 +1170,6 @@ enum Opcodes
SMSG_PLAY_MUSIC = 0x4B06,
SMSG_PLAY_OBJECT_SOUND = 0x2635,
SMSG_PLAY_SOUND = 0x2134,
- SMSG_PLAY_SPELL_IMPACT = 0x0000,
SMSG_PLAY_SPELL_VISUAL = 0x10B1,
SMSG_PLAY_SPELL_VISUAL_KIT = 0x55A5,
SMSG_PLAY_TIME_WARNING = 0x4814,
@@ -1342,9 +1341,8 @@ enum Opcodes
SMSG_TRADE_STATUS = 0x5CA3,
SMSG_TRADE_STATUS_EXTENDED = 0x70A2,
SMSG_TRAINER_BUY_FAILED = 0x0004,
- SMSG_TRAINER_BUY_RESULT = 0x0000,
- SMSG_TRAINER_BUY_SUCCEEDED = 0x6A05,
SMSG_TRAINER_LIST = 0x4414,
+ SMSG_TRAINER_SERVICE = 0x6A05,
SMSG_TRANSFER_ABORTED = 0x0537,
SMSG_TRANSFER_PENDING = 0x18A6,
SMSG_TRIGGER_CINEMATIC = 0x6C27,
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 44b259bdfc4..8ee09e55c72 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -619,6 +619,7 @@ class WorldSession
void HandleStableRevivePet(WorldPacket& recvPacket);
void HandleStableSwapPet(WorldPacket& recvPacket);
void HandleStableSwapPetCallback(PreparedQueryResult result, uint32 petId);
+ void SendTrainerService(uint64 guid, uint32 spellId, uint32 trainState);
void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
void HandleDuelCancelledOpcode(WorldPacket& recvPacket);