aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp2
-rwxr-xr-xsrc/server/game/Handlers/NPCHandler.cpp27
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp8
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h2
-rwxr-xr-xsrc/server/game/Server/WorldSession.h2
5 files changed, 24 insertions, 17 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 42fa018d7b2..19c522eff87 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -15680,7 +15680,7 @@ void Unit::SendPlaySpellVisualKit(uint32 id, uint32 unkParam)
data.WriteByteSeq(guid[2]);
data.WriteByteSeq(guid[3]);
data.WriteByteSeq(guid[5]);
- SendMessageToSet(&data, false);
+ SendMessageToSet(&data, true);
}
void Unit::ApplyResilience(Unit const* victim, float* crit, int32* damage, bool isCrit, CombatRating type) const
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 749c0254571..554030270d9 100755
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -258,7 +258,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
if (!unit->isCanTrainingOf(_player, true))
{
- SendTrainerService(guid, spellId, 0);
+ SendTrainerBuyFailed(guid, spellId, 0);
return;
}
@@ -266,7 +266,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
TrainerSpellData const* trainer_spells = unit->GetTrainerSpells();
if (!trainer_spells)
{
- SendTrainerService(guid, spellId, 0);
+ SendTrainerBuyFailed(guid, spellId, 0);
return;
}
@@ -274,14 +274,14 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
TrainerSpell const* trainer_spell = trainer_spells->Find(spellId);
if (!trainer_spell)
{
- SendTrainerService(guid, spellId, 0);
+ SendTrainerBuyFailed(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);
+ SendTrainerBuyFailed(guid, spellId, 0);
return;
}
@@ -291,7 +291,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
// check money requirement
if (!_player->HasEnoughMoney(uint64(nSpellCost)))
{
- SendTrainerService(guid, spellId, 1);
+ SendTrainerBuyFailed(guid, spellId, 1);
return;
}
@@ -306,15 +306,18 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPacket& recvData)
else
_player->learnSpell(spellId, false);
- SendTrainerService(guid, spellId, 2);
+ WorldPacket data(SMSG_TRAINER_BUY_SUCCEEDED, 12);
+ data << uint64(guid);
+ data << uint32(spellId);
+ SendPacket(&data);
}
-void WorldSession::SendTrainerService(uint64 guid, uint32 spellId, uint32 result)
+void WorldSession::SendTrainerBuyFailed(uint64 guid, uint32 spellId, uint32 reason)
{
- WorldPacket data(SMSG_TRAINER_SERVICE, 16);
+ WorldPacket data(SMSG_TRAINER_BUY_FAILED, 16);
data << uint64(guid);
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."
+ data << uint32(reason); // 1 == "Not enough money for trainer service." 0 == "Trainer service %d unavailable."
SendPacket(&data);
}
@@ -510,7 +513,11 @@ void WorldSession::SendBindPoint(Creature* npc)
// send spell for homebinding (3286)
npc->CastSpell(_player, bindspell, true);
- SendTrainerService(npc->GetGUID(), bindspell, 2);
+ WorldPacket data(SMSG_TRAINER_BUY_SUCCEEDED, 12);
+ data << uint64(npc->GetGUID());
+ data << uint32(bindspell);
+ SendPacket(&data);
+
_player->PlayerTalkClass->SendCloseGossip();
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 42cd6fc0a32..81620808485 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1078,8 +1078,8 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_PLAY_MUSIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_PLAY_OBJECT_SOUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_PLAY_SOUND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL_KIT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL_KIT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_PLAY_TIME_WARNING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_PONG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_POWER_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@@ -1243,9 +1243,9 @@ void InitOpcodes()
DEFINE_OPCODE_HANDLER(SMSG_TOTEM_CREATED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
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_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_TRAINER_BUY_SUCCEEDED, STATUS_NEVER, 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 );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 6c0ac6c88f3..3155c4eb922 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -1341,8 +1341,8 @@ enum Opcodes
SMSG_TRADE_STATUS = 0x5CA3,
SMSG_TRADE_STATUS_EXTENDED = 0x70A2,
SMSG_TRAINER_BUY_FAILED = 0x0004,
+ 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 8ee09e55c72..dda9d0c146d 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -619,7 +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 SendTrainerBuyFailed(uint64 guid, uint32 spellId, uint32 reason);
void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
void HandleDuelCancelledOpcode(WorldPacket& recvPacket);