diff options
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 70 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 23 | ||||
-rw-r--r-- | src/server/game/Server/Packets/NPCPackets.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/NPCPackets.h | 21 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 7 |
11 files changed, 114 insertions, 58 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 3728e567453..314aae65617 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -25,6 +25,7 @@ #include "Formulas.h" #include "QuestPackets.h" #include "NPCPackets.h" +#include "WorldPacket.h" GossipMenu::GossipMenu() { @@ -196,6 +197,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) WorldPackets::NPC::GossipMessage packet; packet.GossipGUID = objectGUID; + packet.GossipID = _gossipMenu.GetMenuId(); packet.TextID = titleTextId; packet.GossipOptions.resize(_gossipMenu.GetMenuItems().size()); @@ -256,8 +258,8 @@ void PlayerMenu::SendCloseGossip() { _gossipMenu.SetSenderGUID(ObjectGuid::Empty); - WorldPacket data(SMSG_GOSSIP_COMPLETE, 0); - _session->SendPacket(&data); + WorldPackets::NPC::GossipComplete packet; + _session->SendPacket(packet.Write()); } void PlayerMenu::SendPointOfInterest(uint32 poiId) const diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fc7dff4dcac..361c651e882 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9566,9 +9566,8 @@ uint32 Player::GetXPRestBonus(uint32 xp) void Player::SetBindPoint(ObjectGuid guid) { - WorldPacket data(SMSG_BINDER_CONFIRM, 8); - data << guid; - GetSession()->SendPacket(&data); + WorldPackets::Misc::BinderConfirm packet(guid); + GetSession()->SendPacket(packet.Write()); } void Player::SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost) diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 02fdb9bd4e4..7a983f7b847 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -59,6 +59,7 @@ #include "CharacterPackets.h" #include "ClientConfigPackets.h" #include "MiscPackets.h" +#include "NPCPackets.h" #include "AchievementPackets.h" #include "WhoPackets.h" @@ -90,53 +91,40 @@ void WorldSession::HandleRepopRequest(WorldPackets::Misc::RepopRequest& packet) GetPlayer()->RepopAtGraveyard(); } -void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) +void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelectOption& packet) { - TC_LOG_DEBUG("network", "WORLD: CMSG_GOSSIP_SELECT_OPTION"); - - uint32 gossipListId; - uint32 menuId; - ObjectGuid guid; - std::string code = ""; - - recvData >> guid >> menuId >> gossipListId; - - if (!_player->PlayerTalkClass->GetGossipMenu().GetItem(gossipListId)) - { - recvData.rfinish(); + if (!_player->PlayerTalkClass->GetGossipMenu().GetItem(packet.GossipIndex)) return; - } - - if (_player->PlayerTalkClass->IsGossipOptionCoded(gossipListId)) - recvData >> code; // Prevent cheating on C++ scripted menus - if (_player->PlayerTalkClass->GetGossipMenu().GetSenderGUID() != guid) + if (_player->PlayerTalkClass->GetGossipMenu().GetSenderGUID() != packet.GossipUnit) return; - Creature* unit = NULL; - GameObject* go = NULL; - if (guid.IsCreatureOrVehicle()) + Creature* unit = nullptr; + GameObject* go = nullptr; + if (packet.GossipUnit.IsCreatureOrVehicle()) { - unit = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE); + unit = GetPlayer()->GetNPCIfCanInteractWith(packet.GossipUnit, UNIT_NPC_FLAG_NONE); if (!unit) { - TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - %s not found or you can't interact with him.", guid.ToString().c_str()); + + TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - %s not found or you can't interact with him.", packet.GossipUnit.ToString().c_str()); return; } } - else if (guid.IsGameObject()) + else if (packet.GossipUnit.IsGameObject()) { - go = _player->GetMap()->GetGameObject(guid); + go = _player->GetMap()->GetGameObject(packet.GossipUnit); if (!go) { - TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - %s not found.", guid.ToString().c_str()); + TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - %s not found.", packet.GossipUnit.ToString().c_str()); return; } } else { - TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - unsupported %s.", guid.ToString().c_str()); + + TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - unsupported %s.", packet.GossipUnit.ToString().c_str()); return; } @@ -149,39 +137,41 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - Script reloaded while in use, ignoring and set new scipt id"); if (unit) unit->LastUsedScriptID = unit->GetCreatureTemplate()->ScriptID; + if (go) go->LastUsedScriptID = go->GetGOInfo()->ScriptId; _player->PlayerTalkClass->SendCloseGossip(); return; } - if (!code.empty()) + + if (!packet.PromotionCode.empty()) { if (unit) { - unit->AI()->sGossipSelectCode(_player, menuId, gossipListId, code.c_str()); - if (!sScriptMgr->OnGossipSelectCode(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) - _player->OnGossipSelect(unit, gossipListId, menuId); + unit->AI()->sGossipSelectCode(_player, packet.GossipID, packet.GossipIndex, packet.PromotionCode.c_str()); + if (!sScriptMgr->OnGossipSelectCode(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(packet.GossipIndex), _player->PlayerTalkClass->GetGossipOptionAction(packet.GossipIndex), packet.PromotionCode.c_str())) + _player->OnGossipSelect(unit, packet.GossipIndex, packet.GossipID); } else { - go->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str()); - if (!sScriptMgr->OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) - _player->OnGossipSelect(go, gossipListId, menuId); + go->AI()->GossipSelectCode(_player, packet.GossipID, packet.GossipIndex, packet.PromotionCode.c_str()); + if (!sScriptMgr->OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(packet.GossipIndex), _player->PlayerTalkClass->GetGossipOptionAction(packet.GossipIndex), packet.PromotionCode.c_str())) + _player->OnGossipSelect(go, packet.GossipIndex, packet.GossipID); } } else { if (unit) { - unit->AI()->sGossipSelect(_player, menuId, gossipListId); - if (!sScriptMgr->OnGossipSelect(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId))) - _player->OnGossipSelect(unit, gossipListId, menuId); + unit->AI()->sGossipSelect(_player, packet.GossipID, packet.GossipIndex); + if (!sScriptMgr->OnGossipSelect(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(packet.GossipIndex), _player->PlayerTalkClass->GetGossipOptionAction(packet.GossipIndex))) + _player->OnGossipSelect(unit, packet.GossipIndex, packet.GossipID); } else { - go->AI()->GossipSelect(_player, menuId, gossipListId); - if (!sScriptMgr->OnGossipSelect(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId))) - _player->OnGossipSelect(go, gossipListId, menuId); + go->AI()->GossipSelect(_player, packet.GossipID, packet.GossipIndex); + if (!sScriptMgr->OnGossipSelect(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(packet.GossipIndex), _player->PlayerTalkClass->GetGossipOptionAction(packet.GossipIndex))) + _player->OnGossipSelect(go, packet.GossipIndex, packet.GossipID); } } } diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index dbd14c469f4..82a49afbcec 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -286,3 +286,18 @@ WorldPacket const* WorldPackets::Misc::StandStateUpdate::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Misc::PlayerBound::Write() +{ + _worldPacket << BinderID; + _worldPacket << uint32(AreaID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Misc::BinderConfirm::Write() +{ + _worldPacket << Unit; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 7ec6ad5923a..53fd7ce8796 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -42,6 +42,29 @@ namespace WorldPackets uint32 BindAreaID = 0; }; + class PlayerBound final : public ServerPacket + { + public: + PlayerBound() : ServerPacket(SMSG_PLAYER_BOUND, 16 + 4) { } + PlayerBound(ObjectGuid binderId, uint32 areaId) : ServerPacket(SMSG_PLAYER_BOUND, 16 + 4), BinderID(binderId), AreaID(areaId) { } + + WorldPacket const* Write() override; + + ObjectGuid BinderID; + uint32 AreaID = 0; + }; + + class BinderConfirm final : public ServerPacket + { + public: + BinderConfirm() : ServerPacket(SMSG_BINDER_CONFIRM, 16) { } + BinderConfirm(ObjectGuid unit) : ServerPacket(SMSG_BINDER_CONFIRM, 16), Unit(unit) { } + + WorldPacket const* Write() override; + + ObjectGuid Unit; + }; + class InvalidatePlayer final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index bd3fe1e5803..1b1ef3ce613 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -125,3 +125,13 @@ WorldPacket const* WorldPackets::NPC::ShowBank::Write() return &_worldPacket; } + +void WorldPackets::NPC::GossipSelectOption::Read() +{ + _worldPacket >> GossipUnit; + _worldPacket >> GossipID; + _worldPacket >> GossipIndex; + + uint32 length = _worldPacket.ReadBits(8); + PromotionCode = _worldPacket.ReadString(length); +} diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 840041983d9..50c174539b5 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -77,6 +77,27 @@ namespace WorldPackets int32 GossipID = 0; }; + class GossipSelectOption final : public ClientPacket + { + public: + GossipSelectOption(WorldPacket&& packet) : ClientPacket(CMSG_GOSSIP_SELECT_OPTION, std::move(packet)) { } + + void Read() override; + + ObjectGuid GossipUnit; + int32 GossipIndex; + int32 GossipID; + std::string PromotionCode; + }; + + class GossipComplete final : public ServerPacket + { + public: + GossipComplete() : ServerPacket(SMSG_GOSSIP_COMPLETE, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + struct VendorItem { int32 MuID = 0; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 8230a246265..00d136d9c76 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -397,7 +397,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_RESPONSE_RESOLVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMResponseResolve ); DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_UPDATE_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketUpdateOpcode ); DEFINE_HANDLER(CMSG_GOSSIP_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleGossipHelloOpcode); - DEFINE_OPCODE_HANDLER_OLD(CMSG_GOSSIP_SELECT_OPTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGossipSelectOptionOpcode ); + DEFINE_HANDLER(CMSG_GOSSIP_SELECT_OPTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::GossipSelectOption, &WorldSession::HandleGossipSelectOptionOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_GRANT_LEVEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGrantLevel ); DEFINE_OPCODE_HANDLER_OLD(CMSG_GROUP_ASSISTANT_LEADER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupAssistantLeaderOpcode); DEFINE_OPCODE_HANDLER_OLD(CMSG_GROUP_CANCEL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -1046,9 +1046,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_REVOKED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_TRAP_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_UPDATES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDPOINTUPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDZONEREPLY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OPEN_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OUTBID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1288,7 +1287,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_SYSTEM_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOD_MODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_ACTION_THROTTLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1660,8 +1659,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_TAME_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_UPDATE_COMBO_POINTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYED_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYERBINDERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_BOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_BOUND, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SKINNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_VEHICLE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_DANCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 394448a21b2..6dfa72cf46b 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -949,7 +949,6 @@ enum OpcodeServer : uint32 SMSG_BATTLE_PET_UPDATES = 0x0354, SMSG_BINDER_CONFIRM = 0x0B11, SMSG_BINDPOINTUPDATE = 0x0A30, - SMSG_BINDZONEREPLY = 0xBADD, SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x0825, SMSG_BLACK_MARKET_OPEN_RESULT = 0x0A05, SMSG_BLACK_MARKET_OUTBID = 0x0B1D, @@ -1561,7 +1560,6 @@ enum OpcodeServer : uint32 SMSG_PET_TAME_FAILURE = 0x0025, SMSG_PET_UPDATE_COMBO_POINTS = 0xBADD, SMSG_PLAYED_TIME = 0x038B, - SMSG_PLAYERBINDERROR = 0xBADD, SMSG_PLAYER_BOUND = 0x078E, SMSG_PLAYER_SKINNED = 0x00D2, SMSG_PLAYER_VEHICLE_DATA = 0xBADD, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index e6b5b3b215d..d6bdc0f11fb 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -239,6 +239,7 @@ namespace WorldPackets namespace NPC { class Hello; + class GossipSelectOption; } namespace Query @@ -922,7 +923,7 @@ class WorldSession void HandleTrainerBuySpellOpcode(WorldPacket& recvPacket); void HandlePetitionShowListOpcode(WorldPacket& recvPacket); void HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet); - void HandleGossipSelectOptionOpcode(WorldPacket& recvPacket); + void HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelectOption& packet); void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket); void HandleNpcTextQueryOpcode(WorldPackets::Query::QueryNPCText& packet); void HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 54f3f95dff9..3a358154bc4 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -66,6 +66,7 @@ #include "GuildMgr.h" #include "ReputationMgr.h" #include "AreaTrigger.h" +#include "MiscPackets.h" pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= { @@ -5690,10 +5691,8 @@ void Spell::EffectBind(SpellEffIndex /*effIndex*/) homeLoc.GetPositionX(), homeLoc.GetPositionY(), homeLoc.GetPositionZ(), homeLoc.GetMapId(), areaId); // zone update - WorldPacket data(SMSG_PLAYER_BOUND, 8 + 4); - data << m_caster->GetGUID(); - data << uint32(areaId); - player->SendDirectMessage(&data); + WorldPackets::Misc::PlayerBound packet(m_caster->GetGUID(), areaId); + player->SendDirectMessage(packet.Write()); } void Spell::EffectSummonRaFFriend(SpellEffIndex /*effIndex*/) |