diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 2 | ||||
| -rwxr-xr-x | src/server/game/Handlers/NPCHandler.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 8 | ||||
| -rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 2 | ||||
| -rwxr-xr-x | src/server/game/Server/WorldSession.h | 2 |
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); |
