TrinityCore
Loading...
Searching...
No Matches
WorldSession.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __WORLDSESSION_H
19#define __WORLDSESSION_H
20
21#include "Common.h"
23#include "AuthDefines.h"
24#include "ClientBuildInfo.h"
25#include "DatabaseEnvFwd.h"
26#include "Duration.h"
27#include "IteratorPair.h"
28#include "LockedQueue.h"
29#include "ObjectGuid.h"
30#include "Opcodes.h"
31#include "Optional.h"
32#include "RaceMask.h"
33#include "SharedDefines.h"
34#include <boost/circular_buffer_fwd.hpp>
35#include <array>
36#include <atomic>
37#include <map>
38#include <memory>
39#include <unordered_map>
40
42class CollectionMgr;
43class Creature;
44class InstanceLock;
45class Item;
47class MessageBuffer;
48class Player;
49class Unit;
50class WorldPacket;
51class WorldSession;
52class WorldSocket;
53struct AuctionPosting;
56struct DeclinedName;
57struct ItemTemplate;
58struct Loot;
59struct MovementInfo;
60struct Petition;
61struct Position;
62enum class AuctionCommand : int8;
63enum class AuctionResult : int8;
64enum class PlayerInteractionType : int32;
66enum class StableResult : uint8;
67enum class TabardVendorType : int32;
68
69namespace Battlenet
70{
71class Account;
72}
73
74namespace BattlePets
75{
76 class BattlePetMgr;
77}
78
79namespace lfg
80{
81 struct LfgJoinResultData;
82 struct LfgPlayerBoot;
83 struct LfgProposal;
84 struct LfgQueueStatusData;
85 struct LfgPlayerRewardData;
86 struct LfgRoleCheck;
87 struct LfgUpdateData;
89}
90
91namespace rbac
92{
93class RBACData;
94}
95
96namespace UF
97{
99}
100
101namespace WorldPackets
102{
103 namespace Achievement
104 {
105 class GuildSetFocusedAchievement;
106 class GuildGetAchievementMembers;
107 }
108
109 namespace AdventureJournal
110 {
111 class AdventureJournalOpenQuest;
112 class AdventureJournalUpdateSuggestions;
113 }
114
115 namespace AdventureMap
116 {
117 class CheckIsAdventureMapPoiValid;
118 class AdventureMapStartQuest;
119 }
120
121 namespace AreaTrigger
122 {
123 class AreaTrigger;
124 class UpdateAreaTriggerVisual;
125 }
126
127 namespace Artifact
128 {
129 class ArtifactAddPower;
130 class ArtifactSetAppearance;
131 class ConfirmArtifactRespec;
132 }
133
134 namespace AuctionHouse
135 {
136 class AuctionBrowseQuery;
137 class AuctionCancelCommoditiesPurchase;
138 class AuctionConfirmCommoditiesPurchase;
139 class AuctionGetCommodityQuote;
140 class AuctionHelloRequest;
141 class AuctionListBiddedItems;
142 class AuctionListBucketsByBucketKeys;
143 class AuctionListItemsByBucketKey;
144 class AuctionListItemsByItemID;
145 class AuctionListOwnedItems;
146 class AuctionPlaceBid;
147 class AuctionRemoveItem;
148 class AuctionReplicateItems;
149 class AuctionSellCommodity;
150 class AuctionSellItem;
151 class AuctionSetFavoriteItem;
152 }
153
154 namespace Auth
155 {
156 enum class ConnectToSerial : uint32;
157 class QueuedMessagesEnd;
158 }
159
160 namespace Azerite
161 {
162 class AzeriteEmpoweredItemSelectPower;
163 class AzeriteEmpoweredItemViewed;
164 class AzeriteEssenceUnlockMilestone;
165 class AzeriteEssenceActivateEssence;
166 }
167
168 namespace Bank
169 {
170 class AutoBankItem;
171 class AutoStoreBankItem;
172 class BuyBankTab;
173 class UpdateBankTabSettings;
174 class AutoDepositCharacterBank;
175 class BankerActivate;
176 }
177
178 namespace Battleground
179 {
180 class AreaSpiritHealerQuery;
181 class AreaSpiritHealerQueue;
182 class HearthAndResurrect;
183 class PVPLogDataRequest;
184 class BattlemasterJoin;
185 class BattlemasterJoinArena;
186 class BattlefieldLeave;
187 class BattlefieldPort;
188 class BattlefieldListRequest;
189 class GetPVPOptionsEnabled;
190 class RequestBattlefieldStatus;
191 class ReportPvPPlayerAFK;
192 class RequestPVPRewards;
193 class RequestRatedPvpInfo;
194 }
195
196 namespace Battlenet
197 {
198 class ChangeRealmTicket;
199 class Request;
200 }
201
202 namespace BattlePet
203 {
204 class BattlePetRequestJournal;
205 class BattlePetRequestJournalLock;
206 class BattlePetSetBattleSlot;
207 class BattlePetModifyName;
208 class QueryBattlePetName;
209 class BattlePetDeletePet;
210 class BattlePetSetFlags;
211 class BattlePetClearFanfare;
212 class BattlePetSummon;
213 class BattlePetUpdateNotify;
214 class CageBattlePet;
215 }
216
217 namespace BlackMarket
218 {
219 class BlackMarketOpen;
220 class BlackMarketRequestItems;
221 class BlackMarketBidOnItem;
222 class BlackMarketOutbid;
223 }
224
225 namespace Calendar
226 {
227 class CalendarAddEvent;
228 class CalendarCopyEvent;
229 class CalendarInvite;
230 class CalendarModeratorStatusQuery;
231 class CalendarRSVP;
232 class CalendarEventSignUp;
233 class CalendarStatus;
234 class CalendarGetCalendar;
235 class CalendarGetEvent;
236 class CalendarGetNumPending;
237 class CalendarCommunityInviteRequest;
238 class CalendarRemoveEvent;
239 class CalendarRemoveInvite;
240 class CalendarUpdateEvent;
241 class SetSavedInstanceExtend;
242 class CalendarComplain;
243 }
244
245 namespace Character
246 {
247 struct CharacterCreateInfo;
248 struct CharacterRenameInfo;
249 struct CharCustomizeInfo;
250 struct CharRaceOrFactionChangeInfo;
251 struct CharacterUndeleteInfo;
252
253 class AlterApperance;
254 class EnumCharacters;
255 class CreateCharacter;
256 class CharDelete;
257 class CharacterRenameRequest;
258 class CharCustomize;
259 class CharRaceOrFactionChange;
260 class CheckCharacterNameAvailability;
261 class GenerateRandomCharacterName;
262 class GetUndeleteCharacterCooldownStatus;
263 class ReorderCharacters;
264 class UndeleteCharacter;
265 class PlayerLogin;
266 class LogoutRequest;
267 class LogoutCancel;
268 class LoadingScreenNotify;
269 class SetActionBarToggles;
270 class RequestPlayedTime;
271 class SetTitle;
272 class SetFactionAtWar;
273 class SetFactionNotAtWar;
274 class SetFactionInactive;
275 class SetWatchedFaction;
276 class SetPlayerDeclinedNames;
277 class SavePersonalEmblem;
278
279 enum class LoginFailureReason : uint8;
280 }
281
282 namespace ClientConfig
283 {
284 class RequestAccountData;
285 class UserClientUpdateAccountData;
286 class SetAdvancedCombatLogging;
287 }
288
289 namespace Channel
290 {
291 class ChannelCommand;
292 class ChannelPlayerCommand;
293 class ChannelPassword;
294 class JoinChannel;
295 class LeaveChannel;
296 }
297
298 namespace Chat
299 {
300 class ChatMessage;
301 class ChatMessageWhisper;
302 class ChatMessageChannel;
303 class ChatAddonMessage;
304 class ChatAddonMessageTargeted;
305 class ChatMessageAFK;
306 class ChatMessageDND;
307 class ChatMessageEmote;
308 class CTextEmote;
309 class EmoteClient;
310 class ChatRegisterAddonPrefixes;
311 class ChatUnregisterAllAddonPrefixes;
312 class ChatReportIgnored;
313 class CanLocalWhisperTargetRequest;
314 class UpdateAADCStatus;
315 }
316
317 namespace Collections
318 {
319 class CollectionItemSetFavorite;
320 }
321
322 namespace Combat
323 {
324 class AttackSwing;
325 class AttackStop;
326 class SetSheathed;
327 }
328
329 namespace Duel
330 {
331 class CanDuel;
332 class DuelResponse;
333 }
334
335 namespace EquipmentSet
336 {
337 class SaveEquipmentSet;
338 class DeleteEquipmentSet;
339 class UseEquipmentSet;
340 }
341
342 namespace GameObject
343 {
344 class GameObjReportUse;
345 class GameObjUse;
346 }
347
348 namespace Garrison
349 {
350 class GetGarrisonInfo;
351 class GarrisonPurchaseBuilding;
352 class GarrisonCancelConstruction;
353 class GarrisonRequestBlueprintAndSpecializationData;
354 class GarrisonGetMapData;
355 }
356
357 namespace Guild
358 {
359 class QueryGuildInfo;
360 class GuildInviteByName;
361 class AcceptGuildInvite;
362 class DeclineGuildInvites;
363 class GuildDeclineInvitation;
364 class GuildGetRoster;
365 class GuildPromoteMember;
366 class GuildDemoteMember;
367 class GuildOfficerRemoveMember;
368 class GuildAssignMemberRank;
369 class GuildLeave;
370 class GuildDelete;
371 class GuildUpdateMotdText;
372 class GuildGetRanks;
373 class GuildAddRank;
374 class GuildDeleteRank;
375 class GuildShiftRank;
376 class GuildUpdateInfoText;
377 class GuildSetMemberNote;
378 class GuildEventLogQuery;
379 class GuildBankRemainingWithdrawMoneyQuery;
380 class GuildPermissionsQuery;
381 class GuildSetRankPermissions;
382 class GuildBankActivate;
383 class GuildBankQueryTab;
384 class GuildBankDepositMoney;
385 class GuildBankWithdrawMoney;
386 class AutoGuildBankItem;
387 class StoreGuildBankItem;
388 class SwapItemWithGuildBankItem;
389 class SwapGuildBankItemWithGuildBankItem;
390 class MoveGuildBankItem;
391 class MergeItemWithGuildBankItem;
392 class SplitItemToGuildBank;
393 class MergeGuildBankItemWithItem;
394 class SplitGuildBankItemToInventory;
395 class AutoStoreGuildBankItem;
396 class MergeGuildBankItemWithGuildBankItem;
397 class SplitGuildBankItem;
398 class GuildBankBuyTab;
399 class GuildBankUpdateTab;
400 class GuildBankLogQuery;
401 class GuildBankTextQuery;
402 class GuildBankSetTabText;
403 class RequestGuildPartyState;
404 class RequestGuildRewardsList;
405 class GuildQueryNews;
406 class GuildNewsUpdateSticky;
407 class GuildReplaceGuildMaster;
408 class GuildSetGuildMaster;
409 class GuildChallengeUpdateRequest;
410 class SaveGuildEmblem;
411 class GuildSetAchievementTracking;
412 }
413
414 namespace Hotfix
415 {
416 class DBQueryBulk;
417 class HotfixRequest;
418 }
419
420 namespace Housing
421 {
422 class DeclineNeighborhoodInvites;
423 }
424
425 namespace Inspect
426 {
427 class Inspect;
428 class QueryInspectAchievements;
429 }
430
431 namespace Instance
432 {
433 class InstanceInfo;
434 class InstanceLockResponse;
435 class ResetInstances;
436 }
437
438 namespace Item
439 {
440 class AutoEquipItem;
441 class AutoEquipItemSlot;
442 class AutoStoreBagItem;
443 class BuyItem;
444 class BuyBackItem;
445 class DestroyItem;
446 class GetItemPurchaseData;
447 class ItemPurchaseRefund;
448 class RepairItem;
449 class ReadItem;
450 class SellItem;
451 class SellAllJunkItems;
452 class SplitItem;
453 class SwapInvItem;
454 class SwapItem;
455 class WrapItem;
456 class CancelTempEnchantment;
457 class UseCritterItem;
458 class SocketGems;
459 class SortAccountBankBags;
460 class SortBags;
461 class SortBankBags;
462 struct ItemInstance;
463 class RemoveNewItem;
464 class ChangeBagSlotFlag;
465 class SetBackpackAutosortDisabled;
466 class SetBackpackSellJunkDisabled;
467 class SetBankAutosortDisabled;
468 }
469
470 namespace LFG
471 {
472 class DFJoin;
473 class DFLeave;
474 class DFProposalResponse;
475 class DFSetRoles;
476 class DFBootPlayerVote;
477 class DFTeleport;
478 class DFGetSystemInfo;
479 class DFGetJoinStatus;
480 }
481
482 namespace Loot
483 {
484 class LootUnit;
485 class LootItem;
486 class MasterLootItem;
487 class LootRelease;
488 class LootMoney;
489 class LootRoll;
490 class SetLootSpecialization;
491 }
492
493 namespace Mail
494 {
495 class MailCreateTextItem;
496 class MailDelete;
497 class MailGetList;
498 class MailMarkAsRead;
499 class MailQueryNextMailTime;
500 class MailReturnToSender;
501 class MailTakeItem;
502 class MailTakeMoney;
503 class SendMail;
504 }
505
506 namespace Misc
507 {
508 class SetSelection;
509 class ViolenceLevel;
510 class TimeSyncResponse;
511 class TutorialSetFlag;
512 class SetDungeonDifficulty;
513 class SetRaidDifficulty;
514 class PortGraveyard;
515 class ReclaimCorpse;
516 class RepopRequest;
517 class RequestCemeteryList;
518 class ResurrectResponse;
519 class StandStateChange;
520 class ServerTimeOffsetRequest;
521 class RandomRollClient;
522 class ObjectUpdateFailed;
523 class ObjectUpdateRescued;
524 class CompleteCinematic;
525 class CompleteMovie;
526 class NextCinematicCamera;
527 class FarSight;
528 class LoadCUFProfiles;
529 class SaveCUFProfiles;
530 class OpeningCinematic;
531 class TogglePvP;
532 class SetPvP;
533 class SetWarMode;
534 class MountSpecial;
535 class SetTaxiBenchmarkMode;
536 class MountSetFavorite;
537 class CloseInteraction;
538 class ConversationLineStarted;
539 class RequestLatestSplashScreen;
540 class QueryCountdownTimer;
541 class SetCurrencyFlags;
542 }
543
544 namespace Movement
545 {
546 class ClientPlayerMovement;
547 class WorldPortResponse;
548 class MoveTeleportAck;
549 class MovementAckMessage;
550 class MovementSpeedAck;
551 class MovementSpeedRangeAck;
552 class MoveKnockBackAck;
553 class SetActiveMover;
554 class MoveSetCollisionHeightAck;
555 class MoveTimeSkipped;
556 class SummonResponse;
557 class MoveSplineDone;
558 class SuspendTokenResponse;
559 class MoveApplyMovementForceAck;
560 class MoveRemoveMovementForceAck;
561 class MoveInitActiveMoverComplete;
562 }
563
564 namespace NPC
565 {
566 class Hello;
567 class GossipSelectOption;
568 class SpiritHealerActivate;
569 class TabardVendorActivate;
570 class TrainerBuySpell;
571 class RequestStabledPets;
572 class SetPetSlot;
573 }
574
575 namespace Party
576 {
577 class PartyCommandResult;
578 class PartyInviteClient;
579 class PartyInvite;
580 class PartyInviteResponse;
581 class PartyUninvite;
582 class GroupDecline;
583 class RequestPartyMemberStats;
584 class PartyMemberFullState;
585 class SetPartyLeader;
586 class SetPartyAssignment;
587 class SetRole;
588 class RoleChangedInform;
589 class SetLootMethod;
590 class LeaveGroup;
591 class MinimapPingClient;
592 class MinimapPing;
593 class UpdateRaidTarget;
594 class SendRaidTargetUpdateSingle;
595 class SendRaidTargetUpdateAll;
596 class ConvertRaid;
597 class RequestPartyJoinUpdates;
598 class SetAssistantLeader;
599 class DoReadyCheck;
600 class ReadyCheckStarted;
601 class ReadyCheckResponseClient;
602 class ReadyCheckResponse;
603 class ReadyCheckCompleted;
604 class RequestRaidInfo;
605 class OptOutOfLoot;
606 class InitiateRolePoll;
607 class RolePollInform;
608 class GroupNewLeader;
609 class PartyUpdate;
610 class SetEveryoneIsAssistant;
611 class ChangeSubGroup;
612 class SwapSubGroups;
613 class RaidMarkersChanged;
614 class ClearRaidMarker;
615 class SetRestrictPingsToAssistants;
616 class SendPingUnit;
617 class SendPingWorldPoint;
618 }
619
620 namespace Pet
621 {
622 class DismissCritter;
623 class RequestPetInfo;
624 class PetAbandon;
625 class PetAbandonByNumber;
626 class PetStopAttack;
627 class PetSpellAutocast;
628 class PetRename;
629 class PetAction;
630 class PetCancelAura;
631 class PetSetAction;
632 }
633
634 namespace Petition
635 {
636 class DeclinePetition;
637 class OfferPetition;
638 class PetitionBuy;
639 class PetitionRenameGuild;
640 class PetitionShowList;
641 class PetitionShowSignatures;
642 class QueryPetition;
643 class SignPetition;
644 class TurnInPetition;
645 }
646
647 namespace Query
648 {
649 class QueryCreature;
650 struct NameCacheLookupResult;
651 class QueryPlayerNames;
652 class QueryPageText;
653 class QueryNPCText;
654 class QueryGameObject;
655 class QueryCorpseLocationFromClient;
656 class QueryCorpseTransport;
657 class QueryTime;
658 class QueryPetName;
659 class QuestPOIQuery;
660 class QueryQuestCompletionNPCs;
661 class QueryRealmName;
662 class ItemTextQuery;
663 class QueryTreasurePicker;
664 }
665
666 namespace Quest
667 {
668 class QuestConfirmAccept;
669 class QuestGiverStatusQuery;
670 class QuestGiverStatusMultipleQuery;
671 class QuestGiverHello;
672 class QueryQuestInfo;
673 class QuestGiverChooseReward;
674 class QuestGiverCloseQuest;
675 class QuestGiverCompleteQuest;
676 class QuestGiverRequestReward;
677 class QuestGiverQueryQuest;
678 class QuestGiverAcceptQuest;
679 class QuestLogRemoveQuest;
680 class QuestPushResult;
681 class PushQuestToParty;
682 class RequestWorldQuestUpdate;
683 class ChoiceResponse;
684 class UiMapQuestLinesRequest;
685 class SpawnTrackingUpdate;
686 }
687
688 namespace RaF
689 {
690 class AcceptLevelGrant;
691 class GrantLevel;
692 }
693
694 namespace Toy
695 {
696 class AccountToyUpdate;
697 class AddToy;
698 class UseToy;
699 class ToyClearFanfare;
700 }
701
702 namespace Scenario
703 {
704 class QueryScenarioPOI;
705 }
706
707 namespace Scenes
708 {
709 class SceneTriggerEvent;
710 class ScenePlaybackComplete;
711 class ScenePlaybackCanceled;
712 }
713
714 namespace Social
715 {
716 class AddFriend;
717 class AddIgnore;
718 class DelFriend;
719 class DelIgnore;
720 class SendContactList;
721 class SetContactNotes;
722 class SocialContractRequest;
723 }
724
725 namespace Spells
726 {
727 class CancelAura;
728 class CancelAutoRepeatSpell;
729 class CancelChannelling;
730 class CancelGrowthAura;
731 class CancelMountAura;
732 class CancelModSpeedNoControlAuras;
733 class CancelQueuedSpell;
734 class PetCancelAura;
735 class CancelCast;
736 class CastSpell;
737 class PetCastSpell;
738 class UseItem;
739 class OpenItem;
740 class SetActionButton;
741 class UnlearnSkill;
742 class SelfRes;
743 class GetMirrorImageData;
744 class SpellClick;
745 class MissileTrajectoryCollision;
746 class UpdateMissileTrajectory;
747 class UpdateAuraVisual;
748 class TradeSkillSetFavorite;
749 class KeyboundOverride;
750 class SetEmpowerMinHoldStagePercent;
751 class SpellEmpowerRelease;
752 class SpellEmpowerRestart;
753 }
754
755 namespace Talent
756 {
757 class LearnTalents;
758 class LearnPvpTalents;
759 class ConfirmRespecWipe;
760 }
761
762 namespace Taxi
763 {
764 class ShowTaxiNodes;
765 class TaxiNodeStatusQuery;
766 class EnableTaxiNode;
767 class TaxiQueryAvailableNodes;
768 class ActivateTaxi;
769 class TaxiRequestEarlyLanding;
770 }
771
772 namespace Ticket
773 {
774 class GMTicketGetSystemStatus;
775 class GMTicketGetCaseStatus;
776 class SubmitUserFeedback;
777 class SupportTicketSubmitComplaint;
778 class BugReport;
779 class Complaint;
780 }
781
782 namespace Token
783 {
784 class CommerceTokenGetLog;
785 class CommerceTokenGetMarketPrice;
786 }
787
788 namespace Totem
789 {
790 class TotemDestroyed;
791 }
792
793 namespace Trade
794 {
795 class AcceptTrade;
796 class BeginTrade;
797 class BusyTrade;
798 class CancelTrade;
799 class ClearTradeItem;
800 class IgnoreTrade;
801 class InitiateTrade;
802 class SetTradeCurrency;
803 class SetTradeGold;
804 class SetTradeItem;
805 class UnacceptTrade;
806 class TradeStatus;
807 }
808
809 namespace Traits
810 {
811 class TraitsCommitConfig;
812 class ClassTalentsRequestNewConfig;
813 class ClassTalentsRenameConfig;
814 class ClassTalentsDeleteConfig;
815 class ClassTalentsSetStarterBuildActive;
816 class ClassTalentsSetUsesSharedActionBars;
817 }
818
819 namespace Transmogrification
820 {
821 class TransmogrifyItems;
822 class TransmogOutfitNew;
823 class TransmogOutfitUpdateInfo;
824 class TransmogOutfitUpdateSituations;
825 class TransmogOutfitUpdateSlots;
826 }
827
828 namespace Vehicle
829 {
830 class MoveDismissVehicle;
831 class RequestVehiclePrevSeat;
832 class RequestVehicleNextSeat;
833 class MoveChangeVehicleSeats;
834 class RequestVehicleSwitchSeat;
835 class RideVehicleInteract;
836 class EjectPassenger;
837 class RequestVehicleExit;
838 class MoveSetVehicleRecIdAck;
839 }
840
841 namespace Who
842 {
843 class WhoIsRequest;
844 class WhoRequestPkt;
845 }
846
847 class Null;
848}
849
850namespace google
851{
852 namespace protobuf
853 {
854 class Message;
855 }
856}
857
858namespace pb = google::protobuf;
859
883
884#define NUM_ACCOUNT_DATA_TYPES 20
885
886#define ALL_ACCOUNT_DATA_CACHE_MASK 0x000FFFFFu
887#define GLOBAL_CACHE_MASK 0x000BA515u
888#define PER_CHARACTER_CACHE_MASK 0x00045AEAu
889
891{
892 time_t Time = 0;
893 std::string Data;
894};
895
903
912
918
925
926//class to deal with packet processing
927//allows to determine if next packet is safe to be processed
929{
930public:
931 explicit PacketFilter(WorldSession* pSession) : m_pSession(pSession) { }
932 virtual ~PacketFilter() { }
933
934 virtual bool Process(WorldPacket* /*packet*/) { return true; }
935 virtual bool ProcessUnsafe() const { return true; }
936
937protected:
939
940private:
941 PacketFilter(PacketFilter const& right) = delete;
942 PacketFilter& operator=(PacketFilter const& right) = delete;
943};
944
945//process only thread-safe packets in Map::Update()
947{
948public:
949 explicit MapSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
951
952 virtual bool Process(WorldPacket* packet) override;
953 //in Map::Update() we do not process player logout!
954 virtual bool ProcessUnsafe() const override { return false; }
955};
956
957//class used to filer only thread-unsafe packets from queue
958//in order to update only be used in World::UpdateSessions()
960{
961public:
962 explicit WorldSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
964
965 bool Process(WorldPacket* packet) override;
966 bool ProcessUnsafe() const override { return true; }
967};
968
974
977{
978 public:
979 WorldSession(uint32 id, std::string&& name, uint32 battlenetAccountId, std::string&& battlenetAccountEmail,
980 std::shared_ptr<WorldSocket>&& sock, AccountTypes sec, uint8 expansion, time_t mute_time, std::string&& os, Minutes timezoneOffset,
981 uint32 build, ClientBuild::VariantId clientBuildVariant, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
983
984 bool PlayerLoading() const { return !m_playerLoading.IsEmpty(); }
985 bool PlayerLogout() const { return m_playerLogout; }
986 bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
987 bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; }
988 bool PlayerDisconnected() const;
989
990 bool IsAddonRegistered(std::string_view prefix) const;
991
992 void SendPacket(WorldPacket const* packet, bool forced = false);
993
994 void SendNotification(char const* format, ...) ATTR_PRINTF(2, 3);
995 void SendNotification(uint32 stringId, ...);
996 void SendPetNameInvalid(uint32 error, std::string const& name, Optional<DeclinedName> const& declinedName);
997 void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0);
998 void SendQueryTimeResponse();
999
1000 void SendAuthResponse(uint32 code, bool queued, uint32 queuePos = 0);
1001 void SendClientCacheVersion(uint32 version);
1002 void SendAvailableHotfixes();
1003
1004 void InitializeSession();
1005 void InitializeSessionCallback(LoginDatabaseQueryHolder const& holder, CharacterDatabaseQueryHolder const& realmHolder);
1006
1007 rbac::RBACData* GetRBACData();
1008 bool HasPermission(uint32 permissionId);
1009 void LoadPermissions();
1010 QueryCallback LoadPermissionsAsync();
1011 void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check
1012
1013 AccountTypes GetSecurity() const { return _security; }
1014 uint32 GetAccountId() const { return _accountId; }
1015 ObjectGuid GetAccountGUID() const { return ObjectGuid::Create<HighGuid::WowAccount>(GetAccountId()); }
1016 std::string const& GetAccountName() const { return _accountName; }
1017 uint32 GetBattlenetAccountId() const;
1018 ObjectGuid GetBattlenetAccountGUID() const;
1019 Battlenet::Account& GetBattlenetAccount() const { return *_battlenetAccount; }
1020 Player* GetPlayer() const { return _player; }
1021 std::string const& GetPlayerName() const;
1022 std::string GetPlayerInfo() const;
1023
1024 void SetSecurity(AccountTypes security) { _security = security; }
1025 std::string const& GetRemoteAddress() const { return m_Address; }
1026 void SetPlayer(Player* player);
1027 uint8 GetAccountExpansion() const { return m_accountExpansion; }
1028 uint8 GetExpansion() const { return m_expansion; }
1029 std::string const& GetOS() const { return _os; }
1030 uint32 GetClientBuild() const { return _clientBuild; }
1031 ClientBuild::VariantId const& GetClientBuildVariant() const { return _clientBuildVariant; }
1032
1033 bool CanAccessAlliedRaces() const;
1034
1036 void SetInQueue(bool state) { m_inQueue = state; }
1037
1039 bool isLogingOut() const { return _logoutTime || m_playerLogout; }
1040
1042 void SetLogoutStartTime(time_t requestTime)
1043 {
1044 _logoutTime = requestTime;
1045 }
1046
1048 bool ShouldLogOut(time_t currTime) const
1049 {
1050 return (_logoutTime > 0 && currTime >= _logoutTime + 20);
1051 }
1052
1053 void LogoutPlayer(bool save);
1054 void KickPlayer(std::string_view reason);
1055 // Returns true if all contained hyperlinks are valid
1056 // May kick player on false depending on world config (handler should abort)
1057 bool ValidateHyperlinksAndMaybeKick(std::string const& str);
1058 // Returns true if the message contains no hyperlinks
1059 // May kick player on false depending on world config (handler should abort)
1060 bool DisallowHyperlinksAndMaybeKick(std::string const& str);
1061
1062 void QueuePacket(WorldPacket&& new_packet);
1063 bool Update(uint32 diff, PacketFilter& updater);
1064
1066 void SendAuthWaitQueue(uint32 position);
1067
1068 void SendSetTimeZoneInformation();
1069 void SendFeatureSystemStatus();
1070 void SendFeatureSystemStatusGlueScreen();
1071
1072 void BuildNameQueryData(ObjectGuid guid, WorldPackets::Query::NameCacheLookupResult& lookupData);
1073
1074 void SendTrainerList(Creature* npc, uint32 trainerId);
1075 void SendListInventory(ObjectGuid guid);
1076 void SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType);
1077 bool CanOpenMailBox(ObjectGuid guid);
1078 void SendShowMailBox(ObjectGuid guid);
1079 void SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type);
1080 void SendSpiritResurrect();
1081 void SendBindPoint(Creature* npc);
1082 void SendOpenTransmogrifier(ObjectGuid const& guid);
1083
1084 void SendAttackStop(Unit const* enemy);
1085
1086 void SendTradeStatus(WorldPackets::Trade::TradeStatus& status);
1087 void SendUpdateTrade(bool trader_data = true);
1088 void SendCancelTrade();
1089
1090 void SendPetitionQueryOpcode(ObjectGuid petitionguid);
1091
1092 // Pet
1093 void SendQueryPetNameResponse(ObjectGuid guid);
1094 void SendPetStableResult(StableResult result);
1095 bool CheckStableMaster(ObjectGuid guid);
1096
1097 // Account Data
1098 AccountData const* GetAccountData(AccountDataType type) const { return &_accountData[type]; }
1099 void SetAccountData(AccountDataType type, time_t time, std::string const& data);
1100 void SendAccountDataTimes(ObjectGuid playerGuid, uint32 mask);
1101 void LoadAccountData(PreparedQueryResult result, uint32 mask);
1102
1103 void LoadTutorialsData(PreparedQueryResult result);
1104 void SendTutorialsData();
1105 void SaveTutorialsData(CharacterDatabaseTransaction trans);
1106 uint32 GetTutorialInt(uint8 index) const { return _tutorials[index]; }
1107 void SetTutorialInt(uint8 index, uint32 value)
1108 {
1109 if (_tutorials[index] != value)
1110 {
1111 _tutorials[index] = value;
1112 _tutorialsChanged |= TUTORIALS_FLAG_CHANGED;
1113 }
1114 }
1115
1117 {
1118 struct Element
1119 {
1122 union
1123 {
1126 };
1127 };
1128
1129 struct Flag
1130 {
1133 };
1134
1135 std::vector<Element> Elements;
1136 std::vector<Flag> Flags;
1137 };
1138
1139 void LoadPlayerDataAccount(PreparedQueryResult const& elementsResult, PreparedQueryResult const& flagsResult);
1140 void SavePlayerDataAccount(LoginDatabaseTransaction const& transaction);
1141
1142 void SetPlayerDataElementAccount(uint32 dataElementId, float value);
1143 void SetPlayerDataElementAccount(uint32 dataElementId, int64 value);
1144 void SetPlayerDataFlagAccount(uint32 dataFlagId, bool on);
1145
1146 PlayerDataAccount const& GetPlayerDataAccount() const { return _playerDataAccount; }
1147
1148 // Auction
1149 void SendAuctionHello(ObjectGuid guid, Unit const* unit);
1150
1161 void SendAuctionCommandResult(uint32 auctionId, AuctionCommand command, AuctionResult errorCode, Milliseconds delayForNextAction, InventoryResult bagResult = InventoryResult(0));
1162 void SendAuctionClosedNotification(AuctionPosting const* auction, float mailDelay, bool sold);
1163 void SendAuctionOwnerBidNotification(AuctionPosting const* auction);
1164
1165 // Black Market
1166 void SendBlackMarketOpenResult(ObjectGuid guid, Creature* auctioneer);
1167 void SendBlackMarketBidOnItemResult(int32 result, int32 marketId, WorldPackets::Item::ItemInstance& item);
1168 void SendBlackMarketWonNotification(BlackMarketEntry const* entry, Item const* item);
1169 void SendBlackMarketOutbidNotification(BlackMarketTemplate const* templ);
1170
1171 //Item Enchantment
1172 void SendEnchantmentLog(ObjectGuid owner, ObjectGuid caster, ObjectGuid itemGuid, uint32 itemId, uint32 enchantId, uint32 enchantSlot);
1173 void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration);
1174
1175 //Taxi
1176 void SendTaxiStatus(ObjectGuid guid);
1177 void SendTaxiMenu(Creature* unit);
1178 bool SendLearnNewTaxiNode(Creature* unit);
1179 void SendDiscoverNewTaxiNode(uint32 nodeid);
1180
1181 // Guild/Arena Team
1182 void SendPetitionShowList(ObjectGuid guid);
1183
1184 void DoLootRelease(Loot* loot);
1185 void DoLootReleaseAll();
1186
1187 // Account mute time
1188 bool CanSpeak() const;
1190
1191 // Locales
1192 LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
1193 LocaleConstant GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
1194
1195 Minutes GetTimezoneOffset() const { return _timezoneOffset; }
1196
1197 char const* GetTrinityString(uint32 entry) const;
1198
1199 uint32 GetLatency() const { return m_latency; }
1200 void SetLatency(uint32 latency) { m_latency = latency; }
1201
1202 std::atomic<time_t> m_timeOutTime;
1203
1204 void ResetTimeOutTime(bool onlyActive);
1205
1206 bool IsConnectionIdle() const;
1207
1208 // Recruit-A-Friend Handling
1209 uint32 GetRecruiterId() const { return recruiterId; }
1210 bool IsARecruiter() const { return isRecruiter; }
1211
1212 // Time Synchronisation
1213 void ResetTimeSync();
1214 void SendTimeSync();
1215 void RegisterTimeSync(uint32 counter);
1216 uint32 AdjustClientMovementTime(uint32 time) const;
1217
1218 static constexpr uint32 SPECIAL_INIT_ACTIVE_MOVER_TIME_SYNC_COUNTER = 0xFFFFFFFF;
1219 static constexpr uint32 SPECIAL_RESUME_COMMS_TIME_SYNC_COUNTER = 0xFFFFFFFE;
1220
1221 // Packets cooldown
1222 time_t GetCalendarEventCreationCooldown() const { return _calendarEventCreationCooldown; }
1223 void SetCalendarEventCreationCooldown(time_t cooldown) { _calendarEventCreationCooldown = cooldown; }
1224
1225 // Battle Pets
1226 BattlePets::BattlePetMgr* GetBattlePetMgr() const { return _battlePetMgr.get(); }
1227
1228 CollectionMgr* GetCollectionMgr() const { return _collectionMgr.get(); }
1229
1230 public: // opcodes handlers
1231
1232 void Handle_NULL(WorldPackets::Null& null); // not used
1233 void Handle_EarlyProccess(WorldPackets::Null& null); // just mark packets processed in WorldSocket::ReadDataHandler
1234 void LogUnprocessedTail(WorldPacket const* packet);
1235
1236 void HandleCharEnum(CharacterDatabaseQueryHolder const& holder);
1237 void HandleCharEnumOpcode(WorldPackets::Character::EnumCharacters& /*enumCharacters*/);
1238 void HandleCharUndeleteEnumOpcode(WorldPackets::Character::EnumCharacters& /*enumCharacters*/);
1239 void HandleCharDeleteOpcode(WorldPackets::Character::CharDelete& charDelete);
1240 void HandleCharCreateOpcode(WorldPackets::Character::CreateCharacter& charCreate);
1241 void HandlePlayerLoginOpcode(WorldPackets::Character::PlayerLogin& playerLogin);
1242
1243 void SendConnectToInstance(WorldPackets::Auth::ConnectToSerial serial);
1244 void HandleContinuePlayerLogin();
1245 void AbortLogin(WorldPackets::Character::LoginFailureReason reason);
1246 void HandleLoadScreenOpcode(WorldPackets::Character::LoadingScreenNotify& loadingScreenNotify);
1247 void HandlePlayerLogin(LoginQueryHolder const& holder);
1248 void HandleCheckCharacterNameAvailability(WorldPackets::Character::CheckCharacterNameAvailability& checkCharacterNameAvailability);
1249 void HandleCharRenameOpcode(WorldPackets::Character::CharacterRenameRequest& request);
1250 void HandleCharRenameCallBack(std::shared_ptr<WorldPackets::Character::CharacterRenameInfo> renameInfo, PreparedQueryResult result);
1251 void HandleSetPlayerDeclinedNames(WorldPackets::Character::SetPlayerDeclinedNames& packet);
1252 void HandleAlterAppearance(WorldPackets::Character::AlterApperance& packet);
1253 void HandleCharCustomizeOpcode(WorldPackets::Character::CharCustomize& packet);
1254 void HandleCharCustomizeCallback(std::shared_ptr<WorldPackets::Character::CharCustomizeInfo> customizeInfo, PreparedQueryResult result);
1255 void HandleCharRaceOrFactionChangeOpcode(WorldPackets::Character::CharRaceOrFactionChange& packet);
1256 void HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPackets::Character::CharRaceOrFactionChangeInfo> factionChangeInfo, PreparedQueryResult result);
1257 void HandleRandomizeCharNameOpcode(WorldPackets::Character::GenerateRandomCharacterName& packet);
1258 void HandleReorderCharacters(WorldPackets::Character::ReorderCharacters& reorderChars);
1259 void HandleOpeningCinematic(WorldPackets::Misc::OpeningCinematic& packet);
1260 void HandleGetUndeleteCooldownStatus(WorldPackets::Character::GetUndeleteCharacterCooldownStatus& /*getCooldown*/);
1261 void HandleUndeleteCooldownStatusCallback(PreparedQueryResult result);
1262 void HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCharacter& undeleteInfo);
1263 void HandleSavePersonalEmblem(WorldPackets::Character::SavePersonalEmblem const& savePersonalEmblem);
1264 bool MeetsChrCustomizationReq(ChrCustomizationReqEntry const* req, Races race, Classes playerClass,
1265 bool checkRequiredDependentChoices, Trinity::IteratorPair<UF::ChrCustomizationChoice const*> selectedChoices) const;
1266 bool ValidateAppearance(Races race, Classes playerClass, Gender gender,
1267 Trinity::IteratorPair<UF::ChrCustomizationChoice const*> customizations); // customizations must be sorted
1268
1269 void SendCharCreate(ResponseCodes result, ObjectGuid const& guid = ObjectGuid::Empty);
1270 void SendCharDelete(ResponseCodes result);
1271 void SendCharRename(ResponseCodes result, WorldPackets::Character::CharacterRenameInfo const* renameInfo);
1272 void SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo);
1273 void SendCharFactionChange(ResponseCodes result, WorldPackets::Character::CharRaceOrFactionChangeInfo const* factionChangeInfo);
1274 void SendSetPlayerDeclinedNamesResult(DeclinedNameResult result, ObjectGuid guid);
1275 void SendUndeleteCooldownStatusResponse(uint32 currentCooldown, uint32 maxCooldown);
1276 void SendUndeleteCharacterResponse(CharacterUndeleteResult result, WorldPackets::Character::CharacterUndeleteInfo const* undeleteInfo);
1277
1278 // played time
1279 void HandlePlayedTime(WorldPackets::Character::RequestPlayedTime& packet);
1280
1281 // cemetery/graveyard related
1282 void HandlePortGraveyard(WorldPackets::Misc::PortGraveyard& packet);
1283 void HandleRequestCemeteryList(WorldPackets::Misc::RequestCemeteryList& packet);
1284
1285 // Inspect
1286 void HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect);
1287 void HandleQueryInspectAchievements(WorldPackets::Inspect::QueryInspectAchievements& inspect);
1288
1289 void HandleMountSpecialAnimOpcode(WorldPackets::Misc::MountSpecial& mountSpecial);
1290
1291 // repair
1292 void HandleRepairItemOpcode(WorldPackets::Item::RepairItem& packet);
1293
1294 // Knockback
1295 void HandleMoveKnockBackAck(WorldPackets::Movement::MoveKnockBackAck& movementAck);
1296
1297 void HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet);
1298 void HandleForceSpeedChangeAck(WorldPackets::Movement::MovementSpeedAck& packet);
1299 void HandleSetAdvFlyingSpeedAck(WorldPackets::Movement::MovementSpeedAck& speedAck);
1300 void HandleSetAdvFlyingSpeedRangeAck(WorldPackets::Movement::MovementSpeedRangeAck& speedRangeAck);
1301 void HandleSetCollisionHeightAck(WorldPackets::Movement::MoveSetCollisionHeightAck& setCollisionHeightAck);
1302
1303 // Movement forces
1304 void HandleMoveApplyMovementForceAck(WorldPackets::Movement::MoveApplyMovementForceAck& moveApplyMovementForceAck);
1305 void HandleMoveRemoveMovementForceAck(WorldPackets::Movement::MoveRemoveMovementForceAck& moveRemoveMovementForceAck);
1306 void HandleMoveSetModMovementForceMagnitudeAck(WorldPackets::Movement::MovementSpeedAck& setModMovementForceMagnitudeAck);
1307
1308 void HandleRepopRequest(WorldPackets::Misc::RepopRequest& packet);
1309 void HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& packet);
1310 void HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& packet);
1311 void HandleLootOpcode(WorldPackets::Loot::LootUnit& packet);
1312 void HandleLootReleaseOpcode(WorldPackets::Loot::LootRelease& packet);
1313 void HandleLootMasterGiveOpcode(WorldPackets::Loot::MasterLootItem& masterLootItem);
1314 void HandleSetLootSpecialization(WorldPackets::Loot::SetLootSpecialization& packet);
1315
1316 void HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest);
1317 void HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& logoutRequest);
1318 void HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& logoutCancel);
1319
1320 // GM Ticket opcodes
1321 void HandleGMTicketGetCaseStatusOpcode(WorldPackets::Ticket::GMTicketGetCaseStatus& packet);
1322 void HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTicketGetSystemStatus& packet);
1323 void HandleSubmitUserFeedback(WorldPackets::Ticket::SubmitUserFeedback& userFeedback);
1324 void HandleSupportTicketSubmitComplaint(WorldPackets::Ticket::SupportTicketSubmitComplaint& packet);
1325 void HandleBugReportOpcode(WorldPackets::Ticket::BugReport& bugReport);
1326 void HandleComplaint(WorldPackets::Ticket::Complaint& packet);
1327
1328 void HandleTogglePvP(WorldPackets::Misc::TogglePvP& packet);
1329 void HandleSetPvP(WorldPackets::Misc::SetPvP& packet);
1330 void HandleSetWarMode(WorldPackets::Misc::SetWarMode& packet);
1331
1332 void HandleSetSelectionOpcode(WorldPackets::Misc::SetSelection& packet);
1333 void HandleStandStateChangeOpcode(WorldPackets::Misc::StandStateChange& packet);
1334 void HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& packet);
1335
1336 // Social
1337 void HandleContactListOpcode(WorldPackets::Social::SendContactList& packet);
1338 void HandleAddFriendOpcode(WorldPackets::Social::AddFriend& packet);
1339 void HandleDelFriendOpcode(WorldPackets::Social::DelFriend& packet);
1340 void HandleAddIgnoreOpcode(WorldPackets::Social::AddIgnore& packet);
1341 void HandleDelIgnoreOpcode(WorldPackets::Social::DelIgnore& packet);
1342 void HandleSetContactNotesOpcode(WorldPackets::Social::SetContactNotes& packet);
1343
1344 void HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigger& packet);
1345 void HandleUpdateAreaTriggerVisual(WorldPackets::AreaTrigger::UpdateAreaTriggerVisual const& updateAreaTriggerVisual);
1346
1347 void HandleSetFactionAtWar(WorldPackets::Character::SetFactionAtWar& packet);
1348 void HandleSetFactionNotAtWar(WorldPackets::Character::SetFactionNotAtWar& packet);
1349 void HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet);
1350 void HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet);
1351
1352 void HandleUpdateAccountData(WorldPackets::ClientConfig::UserClientUpdateAccountData& packet);
1353 void HandleRequestAccountData(WorldPackets::ClientConfig::RequestAccountData& request);
1354 void HandleSetAdvancedCombatLogging(WorldPackets::ClientConfig::SetAdvancedCombatLogging& setAdvancedCombatLogging);
1355 void HandleSetActionButtonOpcode(WorldPackets::Spells::SetActionButton& packet);
1356
1357 void HandleGameObjectUseOpcode(WorldPackets::GameObject::GameObjUse& packet);
1358 void HandleGameobjectReportUse(WorldPackets::GameObject::GameObjReportUse& packet);
1359
1360 void HandleQueryPlayerNames(WorldPackets::Query::QueryPlayerNames& queryPlayerNames);
1361 void HandleQueryTimeOpcode(WorldPackets::Query::QueryTime& queryTime);
1362 void HandleCreatureQuery(WorldPackets::Query::QueryCreature& packet);
1363 void HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObject& packet);
1364
1365 void HandleDBQueryBulk(WorldPackets::Hotfix::DBQueryBulk& dbQuery);
1366 void HandleHotfixRequest(WorldPackets::Hotfix::HotfixRequest& hotfixQuery);
1367
1368 void HandleMoveWorldportAckOpcode(WorldPackets::Movement::WorldPortResponse& packet);
1369 void HandleMoveWorldportAck(); // for server-side calls
1370 void HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTokenResponse& suspendTokenResponse);
1371
1372 // Validates that correct unit is moved, coords are in valid range and movement flags
1373 bool ValidateMovementInfo(MovementInfo* mi) const;
1374
1375 void HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMovement& packet);
1376 void HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movementInfo);
1377 void HandleSetActiveMoverOpcode(WorldPackets::Movement::SetActiveMover& packet);
1378 void HandleMoveDismissVehicle(WorldPackets::Vehicle::MoveDismissVehicle& moveDismissVehicle);
1379 void HandleRequestVehiclePrevSeat(WorldPackets::Vehicle::RequestVehiclePrevSeat& requestVehiclePrevSeat);
1380 void HandleRequestVehicleNextSeat(WorldPackets::Vehicle::RequestVehicleNextSeat& requestVehicleNextSeat);
1381 void HandleMoveChangeVehicleSeats(WorldPackets::Vehicle::MoveChangeVehicleSeats& moveChangeVehicleSeats);
1382 void HandleRequestVehicleSwitchSeat(WorldPackets::Vehicle::RequestVehicleSwitchSeat& requestVehicleSwitchSeat);
1383 void HandleRideVehicleInteract(WorldPackets::Vehicle::RideVehicleInteract& rideVehicleInteract);
1384 void HandleEjectPassenger(WorldPackets::Vehicle::EjectPassenger& ejectPassenger);
1385 void HandleRequestVehicleExit(WorldPackets::Vehicle::RequestVehicleExit& requestVehicleExit);
1386 void HandleMoveSetVehicleRecAck(WorldPackets::Vehicle::MoveSetVehicleRecIdAck& setVehicleRecIdAck);
1387 void HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& moveTimeSkipped);
1388 void HandleMovementAckMessage(WorldPackets::Movement::MovementAckMessage& movementAck);
1389 void HandleMoveInitActiveMoverComplete(WorldPackets::Movement::MoveInitActiveMoverComplete const& moveInitActiveMoverComplete);
1390
1391 void HandleRequestRaidInfoOpcode(WorldPackets::Party::RequestRaidInfo& packet);
1392
1393 void HandlePartyInviteOpcode(WorldPackets::Party::PartyInviteClient& packet);
1394 void HandlePartyInviteResponseOpcode(WorldPackets::Party::PartyInviteResponse& packet);
1395 void HandlePartyUninviteOpcode(WorldPackets::Party::PartyUninvite& packet);
1396 void HandleSetPartyLeaderOpcode(WorldPackets::Party::SetPartyLeader& packet);
1397 void HandleSetRoleOpcode(WorldPackets::Party::SetRole& packet);
1398 void HandleLeaveGroupOpcode(WorldPackets::Party::LeaveGroup& packet);
1399 void HandleOptOutOfLootOpcode(WorldPackets::Party::OptOutOfLoot& packet);
1400 void HandleSetLootMethodOpcode(WorldPackets::Party::SetLootMethod& packet);
1401 void HandleLootRoll(WorldPackets::Loot::LootRoll& packet);
1402 void HandleRequestPartyMemberStatsOpcode(WorldPackets::Party::RequestPartyMemberStats& packet);
1403 void HandleUpdateRaidTargetOpcode(WorldPackets::Party::UpdateRaidTarget& packet);
1404 void HandleDoReadyCheckOpcode(WorldPackets::Party::DoReadyCheck& packet);
1405 void HandleReadyCheckResponseOpcode(WorldPackets::Party::ReadyCheckResponseClient& packet);
1406 void HandleConvertRaidOpcode(WorldPackets::Party::ConvertRaid& packet);
1407 void HandleRequestPartyJoinUpdates(WorldPackets::Party::RequestPartyJoinUpdates& packet);
1408 void HandleChangeSubGroupOpcode(WorldPackets::Party::ChangeSubGroup& packet);
1409 void HandleSwapSubGroupsOpcode(WorldPackets::Party::SwapSubGroups& packet);
1410 void HandleSetAssistantLeaderOpcode(WorldPackets::Party::SetAssistantLeader& packet);
1411 void HandleSetPartyAssignment(WorldPackets::Party::SetPartyAssignment& packet);
1412 void HandleInitiateRolePoll(WorldPackets::Party::InitiateRolePoll& packet);
1413 void HandleSetEveryoneIsAssistant(WorldPackets::Party::SetEveryoneIsAssistant& packet);
1414 void HandleClearRaidMarker(WorldPackets::Party::ClearRaidMarker& packet);
1415 void HandleSetRestrictPingsToAssistants(WorldPackets::Party::SetRestrictPingsToAssistants const& setRestrictPingsToAssistants);
1416 void HandleSendPingUnit(WorldPackets::Party::SendPingUnit const& pingUnit);
1417 void HandleSendPingWorldPoint(WorldPackets::Party::SendPingWorldPoint const& pingWorldPoint);
1418
1419 void HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet);
1420 void HandlePetitionShowSignatures(WorldPackets::Petition::PetitionShowSignatures& packet);
1421 void SendPetitionSigns(Petition const* petition, Player* sendTo);
1422 void HandleQueryPetition(WorldPackets::Petition::QueryPetition& packet);
1423 void HandlePetitionRenameGuild(WorldPackets::Petition::PetitionRenameGuild& packet);
1424 void HandleSignPetition(WorldPackets::Petition::SignPetition& packet);
1425 void HandleDeclinePetition(WorldPackets::Petition::DeclinePetition& packet);
1426 void HandleOfferPetition(WorldPackets::Petition::OfferPetition& packet);
1427 void HandleTurnInPetition(WorldPackets::Petition::TurnInPetition& packet);
1428
1429 void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query);
1430 void HandleGuildInviteByName(WorldPackets::Guild::GuildInviteByName& packet);
1431 void HandleGuildOfficerRemoveMember(WorldPackets::Guild::GuildOfficerRemoveMember& packet);
1432 void HandleGuildAcceptInvite(WorldPackets::Guild::AcceptGuildInvite& invite);
1433 void HandleGuildDeclineInvitation(WorldPackets::Guild::GuildDeclineInvitation& decline);
1434 void HandleGuildEventLogQuery(WorldPackets::Guild::GuildEventLogQuery& packet);
1435 void HandleGuildGetRoster(WorldPackets::Guild::GuildGetRoster& packet);
1436 void HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& packet);
1437 void HandleGuildPromoteMember(WorldPackets::Guild::GuildPromoteMember& promote);
1438 void HandleGuildDemoteMember(WorldPackets::Guild::GuildDemoteMember& demote);
1439 void HandleGuildAssignRank(WorldPackets::Guild::GuildAssignMemberRank& packet);
1440 void HandleGuildLeave(WorldPackets::Guild::GuildLeave& leave);
1441 void HandleGuildDelete(WorldPackets::Guild::GuildDelete& packet);
1442 void HandleGuildReplaceGuildMaster(WorldPackets::Guild::GuildReplaceGuildMaster& replaceGuildMaster);
1443 void HandleGuildSetAchievementTracking(WorldPackets::Guild::GuildSetAchievementTracking& packet);
1444 void HandleGuildGetAchievementMembers(WorldPackets::Achievement::GuildGetAchievementMembers& getAchievementMembers);
1445 void HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet);
1446 void HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet);
1447 void HandleGuildNewsUpdateSticky(WorldPackets::Guild::GuildNewsUpdateSticky& packet);
1448 void HandleGuildSetMemberNote(WorldPackets::Guild::GuildSetMemberNote& packet);
1449 void HandleGuildGetRanks(WorldPackets::Guild::GuildGetRanks& packet);
1450 void HandleGuildQueryNews(WorldPackets::Guild::GuildQueryNews& newsQuery);
1451 void HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet);
1452 void HandleGuildAddRank(WorldPackets::Guild::GuildAddRank& packet);
1453 void HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet);
1454 void HandleGuildShiftRank(WorldPackets::Guild::GuildShiftRank& shiftRank);
1455 void HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet);
1456 void HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& packet);
1457 void HandleGuildRequestPartyState(WorldPackets::Guild::RequestGuildPartyState& packet);
1458 void HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest& packet);
1459 void HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet);
1460
1461 void HandleDeclineNeighborhoodInvites(WorldPackets::Housing::DeclineNeighborhoodInvites const& declineNeighborhoodInvites);
1462
1463 void HandleEnableTaxiNodeOpcode(WorldPackets::Taxi::EnableTaxiNode& enableTaxiNode);
1464 void HandleTaxiNodeStatusQueryOpcode(WorldPackets::Taxi::TaxiNodeStatusQuery& taxiNodeStatusQuery);
1465 void HandleTaxiQueryAvailableNodesOpcode(WorldPackets::Taxi::TaxiQueryAvailableNodes& taxiQueryAvailableNodes);
1466 void HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& activateTaxi);
1467 void HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSplineDone& moveSplineDone);
1468 void SendActivateTaxiReply(ActivateTaxiReply reply);
1469 void HandleTaxiRequestEarlyLanding(WorldPackets::Taxi::TaxiRequestEarlyLanding& taxiRequestEarlyLanding);
1470
1471 void HandleTabardVendorActivateOpcode(WorldPackets::NPC::TabardVendorActivate const& tabardVendorActivate);
1472 void HandleBankerActivateOpcode(WorldPackets::Bank::BankerActivate const& bankerActivate);
1473 void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
1474 void HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpell& packet);
1475 void HandlePetitionShowList(WorldPackets::Petition::PetitionShowList& packet);
1476 void HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet);
1477 void HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelectOption& packet);
1478 void HandleSpiritHealerActivate(WorldPackets::NPC::SpiritHealerActivate& packet);
1479 void HandleNpcTextQueryOpcode(WorldPackets::Query::QueryNPCText& packet);
1480 void HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet);
1481 void HandleRequestStabledPets(WorldPackets::NPC::RequestStabledPets& packet);
1482 void HandleSetPetSlot(WorldPackets::NPC::SetPetSlot& setPetSlot);
1483
1484 void HandleCanDuel(WorldPackets::Duel::CanDuel& packet);
1485 void HandleDuelResponseOpcode(WorldPackets::Duel::DuelResponse& duelResponse);
1486 void HandleDuelAccepted(ObjectGuid arbiterGuid);
1487 void HandleDuelCancelled();
1488
1489 void HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acceptTrade);
1490 void HandleBeginTradeOpcode(WorldPackets::Trade::BeginTrade& beginTrade);
1491 void HandleBusyTradeOpcode(WorldPackets::Trade::BusyTrade& busyTrade);
1492 void HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade& cancelTrade);
1493 void HandleClearTradeItemOpcode(WorldPackets::Trade::ClearTradeItem& clearTradeItem);
1494 void HandleIgnoreTradeOpcode(WorldPackets::Trade::IgnoreTrade& ignoreTrade);
1495 void HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade& initiateTrade);
1496 void HandleSetTradeCurrencyOpcode(WorldPackets::Trade::SetTradeCurrency& setTradeCurrency);
1497 void HandleSetTradeGoldOpcode(WorldPackets::Trade::SetTradeGold& setTradeGold);
1498 void HandleSetTradeItemOpcode(WorldPackets::Trade::SetTradeItem& setTradeItem);
1499 void HandleUnacceptTradeOpcode(WorldPackets::Trade::UnacceptTrade& unacceptTrade);
1500
1501 void HandleAuctionBrowseQuery(WorldPackets::AuctionHouse::AuctionBrowseQuery& browseQuery);
1502 void HandleAuctionCancelCommoditiesPurchase(WorldPackets::AuctionHouse::AuctionCancelCommoditiesPurchase& cancelCommoditiesPurchase);
1503 void HandleAuctionConfirmCommoditiesPurchase(WorldPackets::AuctionHouse::AuctionConfirmCommoditiesPurchase& confirmCommoditiesPurchase);
1504 void HandleAuctionGetCommodityQuote(WorldPackets::AuctionHouse::AuctionGetCommodityQuote& startCommoditiesPurchase);
1505 void HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& hello);
1506 void HandleAuctionListBiddedItems(WorldPackets::AuctionHouse::AuctionListBiddedItems& listBiddedItems);
1507 void HandleAuctionListBucketsByBucketKeys(WorldPackets::AuctionHouse::AuctionListBucketsByBucketKeys& listBucketsByBucketKeys);
1508 void HandleAuctionListItemsByBucketKey(WorldPackets::AuctionHouse::AuctionListItemsByBucketKey& listItemsByBucketKey);
1509 void HandleAuctionListItemsByItemID(WorldPackets::AuctionHouse::AuctionListItemsByItemID& listItemsByItemID);
1510 void HandleAuctionListOwnedItems(WorldPackets::AuctionHouse::AuctionListOwnedItems& listOwnedItems);
1511 void HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlaceBid& placeBid);
1512 void HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRemoveItem& removeItem);
1513 void HandleAuctionReplicateItems(WorldPackets::AuctionHouse::AuctionReplicateItems& replicateItems);
1514 void SendAuctionFavoriteList();
1515 void HandleAuctionSellCommodity(WorldPackets::AuctionHouse::AuctionSellCommodity& sellCommodity);
1516 void HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSellItem& sellItem);
1517 void HandleAuctionSetFavoriteItem(WorldPackets::AuctionHouse::AuctionSetFavoriteItem& setFavoriteItem);
1518
1519 // Bank
1520 void HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet);
1521 void HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet);
1522 void HandleBuyBankTab(WorldPackets::Bank::BuyBankTab const& buyBankTab);
1523 void HandleUpdateBankTabSettings(WorldPackets::Bank::UpdateBankTabSettings const& updateBankTabSettings);
1524 void HandleAutoDepositCharacterBank(WorldPackets::Bank::AutoDepositCharacterBank const& autoDepositCharacterBank);
1525
1526 // Black Market
1527 void HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& blackMarketOpen);
1528 void HandleBlackMarketRequestItems(WorldPackets::BlackMarket::BlackMarketRequestItems& blackMarketRequestItems);
1529 void HandleBlackMarketBidOnItem(WorldPackets::BlackMarket::BlackMarketBidOnItem& blackMarketBidOnItem);
1530
1531 void HandleGetMailList(WorldPackets::Mail::MailGetList& getList);
1532 void HandleSendMail(WorldPackets::Mail::SendMail& sendMail);
1533 void HandleMailTakeMoney(WorldPackets::Mail::MailTakeMoney& takeMoney);
1534 void HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& takeItem);
1535 void HandleMailMarkAsRead(WorldPackets::Mail::MailMarkAsRead& markAsRead);
1536 void HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSender& returnToSender);
1537 void HandleMailDelete(WorldPackets::Mail::MailDelete& mailDelete);
1538 void HandleItemTextQuery(WorldPackets::Query::ItemTextQuery& itemTextQuery);
1539 void HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextItem& createTextItem);
1540 void HandleQueryNextMailTime(WorldPackets::Mail::MailQueryNextMailTime& queryNextMailTime);
1541
1542 void HandleSplitItemOpcode(WorldPackets::Item::SplitItem& splitItem);
1543 void HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem& swapInvItem);
1544 void HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem& destroyItem);
1545 void HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem& autoEquipItem);
1546 void HandleSellItemOpcode(WorldPackets::Item::SellItem const& sellItem);
1547 void HandleSellAllJunkItems(WorldPackets::Item::SellAllJunkItems const& sellAllJunkItems);
1548 void HandleBuyItemOpcode(WorldPackets::Item::BuyItem& packet);
1549 void HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet);
1550 void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem& packet);
1551 void HandleReadItem(WorldPackets::Item::ReadItem& readItem);
1552 void HandleAutoEquipItemSlotOpcode(WorldPackets::Item::AutoEquipItemSlot& autoEquipItemSlot);
1553 void HandleSwapItem(WorldPackets::Item::SwapItem& swapItem);
1554 void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
1555 void HandleWrapItem(WorldPackets::Item::WrapItem& packet);
1556 void HandleUseCritterItem(WorldPackets::Item::UseCritterItem& packet);
1557 void HandleChangeBagSlotFlag(WorldPackets::Item::ChangeBagSlotFlag const& changeBagSlotFlag);
1558 void HandleSetBackpackAutosortDisabled(WorldPackets::Item::SetBackpackAutosortDisabled const& setBackpackAutosortDisabled);
1559 void HandleSetBackpackSellJunkDisabled(WorldPackets::Item::SetBackpackSellJunkDisabled const& setBackpackSellJunkDisabled);
1560 void HandleSetBankAutosortDisabled(WorldPackets::Item::SetBankAutosortDisabled const& setBankAutosortDisabled);
1561
1562 void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
1563 void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);
1564 void HandleSetSheathedOpcode(WorldPackets::Combat::SetSheathed& packet);
1565
1566 void HandleUseItemOpcode(WorldPackets::Spells::UseItem& packet);
1567 void HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet);
1568 void HandleOpenWrappedItemCallback(uint16 pos, ObjectGuid itemGuid, PreparedQueryResult result);
1569 void HandleCastSpellOpcode(WorldPackets::Spells::CastSpell& castRequest);
1570 void HandleCancelCastOpcode(WorldPackets::Spells::CancelCast& packet);
1571 void HandleCancelAuraOpcode(WorldPackets::Spells::CancelAura& cancelAura);
1572 void HandleCancelGrowthAuraOpcode(WorldPackets::Spells::CancelGrowthAura& cancelGrowthAura);
1573 void HandleCancelMountAuraOpcode(WorldPackets::Spells::CancelMountAura& cancelMountAura);
1574 void HandleCancelModSpeedNoControlAuras(WorldPackets::Spells::CancelModSpeedNoControlAuras& cancelModSpeedNoControlAuras);
1575 void HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::CancelAutoRepeatSpell& cancelAutoRepeatSpell);
1576 void HandleCancelQueuedSpellOpcode(WorldPackets::Spells::CancelQueuedSpell& cancelQueuedSpell);
1577 void HandleCancelChanneling(WorldPackets::Spells::CancelChannelling& cancelChanneling);
1578 void HandleSetEmpowerMinHoldStagePercent(WorldPackets::Spells::SetEmpowerMinHoldStagePercent const& setEmpowerMinHoldStagePercent);
1579 void HandleSpellEmpowerRelease(WorldPackets::Spells::SpellEmpowerRelease const& spellEmpowerRelease);
1580 void HandleSpellEmpowerRestart(WorldPackets::Spells::SpellEmpowerRestart const& spellEmpowerRestart);
1581 void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet);
1582 void HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMissileTrajectory& packet);
1583 void HandleUpdateAuraVisual(WorldPackets::Spells::UpdateAuraVisual const& updateAuraVisual);
1584
1585 void HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTalents& packet);
1586 void HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet);
1587 void HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe);
1588 void HandleUnlearnSkillOpcode(WorldPackets::Spells::UnlearnSkill& packet);
1589 void HandleTradeSkillSetFavorite(WorldPackets::Spells::TradeSkillSetFavorite const& tradeSkillSetFavorite);
1590
1591 void HandleTraitsCommitConfig(WorldPackets::Traits::TraitsCommitConfig const& traitsCommitConfig);
1592 void HandleClassTalentsRequestNewConfig(WorldPackets::Traits::ClassTalentsRequestNewConfig& classTalentsRequestNewConfig);
1593 void HandleClassTalentsRenameConfig(WorldPackets::Traits::ClassTalentsRenameConfig& classTalentsRenameConfig);
1594 void HandleClassTalentsDeleteConfig(WorldPackets::Traits::ClassTalentsDeleteConfig const& classTalentsDeleteConfig);
1595 void HandleClassTalentsSetStarterBuildActive(WorldPackets::Traits::ClassTalentsSetStarterBuildActive const& classTalentsSetStarterBuildActive);
1596 void HandleClassTalentsSetUsesSharedActionBars(WorldPackets::Traits::ClassTalentsSetUsesSharedActionBars const& classTalentsSetUsesSharedActionBars);
1597
1598 void HandleQuestgiverStatusQueryOpcode(WorldPackets::Quest::QuestGiverStatusQuery& packet);
1599 void HandleQuestgiverStatusMultipleQuery(WorldPackets::Quest::QuestGiverStatusMultipleQuery& packet);
1600 void HandleQuestgiverHelloOpcode(WorldPackets::Quest::QuestGiverHello& packet);
1601 void HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestGiverAcceptQuest& packet);
1602 void HandleQuestgiverQueryQuestOpcode(WorldPackets::Quest::QuestGiverQueryQuest& packet);
1603 void HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::QuestGiverChooseReward& packet);
1604 void HandleQuestgiverRequestRewardOpcode(WorldPackets::Quest::QuestGiverRequestReward& packet);
1605 void HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& packet);
1606 void HandleQuestLogRemoveQuest(WorldPackets::Quest::QuestLogRemoveQuest& packet);
1607 void HandleQuestConfirmAccept(WorldPackets::Quest::QuestConfirmAccept& packet);
1608 void HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiverCompleteQuest& packet);
1609 void HandleQuestgiverCloseQuest(WorldPackets::Quest::QuestGiverCloseQuest& questGiverCloseQuest);
1610 void HandlePushQuestToParty(WorldPackets::Quest::PushQuestToParty& packet);
1611 void HandleQuestPushResult(WorldPackets::Quest::QuestPushResult& packet);
1612 void HandleRequestWorldQuestUpdate(WorldPackets::Quest::RequestWorldQuestUpdate& packet);
1613 void HandlePlayerChoiceResponse(WorldPackets::Quest::ChoiceResponse const& choiceResponse);
1614 void HandleUiMapQuestLinesRequest(WorldPackets::Quest::UiMapQuestLinesRequest& uiMapQuestLinesRequest);
1615 void HandleQueryTreasurePicker(WorldPackets::Query::QueryTreasurePicker const& queryTreasurePicker);
1616 void HandleSpawnTrackingUpdate(WorldPackets::Quest::SpawnTrackingUpdate& spawnTrackingUpdate);
1617
1618 void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chatMessage);
1619 void HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& chatMessageWhisper);
1620 void HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& chatMessageChannel);
1621 ChatMessageResult HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target = "", Optional<ObjectGuid> targetGuid = {});
1622 void HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& chatAddonMessage);
1623 void HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted);
1624 void HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target = "", Optional<ObjectGuid> targetGuid = {});
1625 void HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK& chatMessageAFK);
1626 void HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND& chatMessageDND);
1627 void HandleChatMessageEmoteOpcode(WorldPackets::Chat::ChatMessageEmote& chatMessageEmote);
1628 void SendChatPlayerNotfoundNotice(std::string const& name);
1629 void SendPlayerAmbiguousNotice(std::string const& name);
1630 void SendChatRestricted(ChatRestrictionType restriction);
1631 void HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet);
1632 void HandleChatIgnoredOpcode(WorldPackets::Chat::ChatReportIgnored& chatReportIgnored);
1633 void HandleChatCanLocalWhisperTargetRequest(WorldPackets::Chat::CanLocalWhisperTargetRequest const& canLocalWhisperTargetRequest);
1634 void HandleChatUpdateAADCStatus(WorldPackets::Chat::UpdateAADCStatus const& updateAADCStatus);
1635
1636 void HandleUnregisterAllAddonPrefixesOpcode(WorldPackets::Chat::ChatUnregisterAllAddonPrefixes& packet);
1637 void HandleAddonRegisteredPrefixesOpcode(WorldPackets::Chat::ChatRegisterAddonPrefixes& packet);
1638
1639 void HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& packet);
1640 void HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& packet);
1641 void HandleQueryCorpseTransport(WorldPackets::Query::QueryCorpseTransport& packet);
1642 void HandleResurrectResponse(WorldPackets::Misc::ResurrectResponse& packet);
1643 void HandleSummonResponseOpcode(WorldPackets::Movement::SummonResponse& packet);
1644
1645 void HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet);
1646 void HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packet);
1647 void HandleChannelCommand(WorldPackets::Channel::ChannelCommand& packet);
1648 void HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlayerCommand& packet);
1649 void HandleChannelPassword(WorldPackets::Channel::ChannelPassword& channelPassword);
1650
1651 void HandleCompleteCinematic(WorldPackets::Misc::CompleteCinematic& packet);
1652 void HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCamera& packet);
1653 void HandleCompleteMovie(WorldPackets::Misc::CompleteMovie& packet);
1654
1655 void HandleQueryPageText(WorldPackets::Query::QueryPageText& packet);
1656
1657 void HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packet);
1658
1659 //Pet
1660 void HandlePetAction(WorldPackets::Pet::PetAction& packet);
1661 void HandlePetStopAttack(WorldPackets::Pet::PetStopAttack& packet);
1662 void HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spellid, uint16 flag, ObjectGuid guid2, Position const& pos);
1663 void HandleQueryPetName(WorldPackets::Query::QueryPetName& packet);
1664 void HandlePetSetAction(WorldPackets::Pet::PetSetAction& packet);
1665 void HandlePetAbandon(WorldPackets::Pet::PetAbandon& packet);
1666 void HandlePetAbandonByNumber(WorldPackets::Pet::PetAbandonByNumber const& petAbandonByNumber);
1667 void HandlePetRename(WorldPackets::Pet::PetRename& packet);
1668 void HandlePetCancelAuraOpcode(WorldPackets::Spells::PetCancelAura& packet);
1669 void HandlePetSpellAutocastOpcode(WorldPackets::Pet::PetSpellAutocast& packet);
1670 void HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell& petCastSpell);
1671
1672 void HandleSetActionBarToggles(WorldPackets::Character::SetActionBarToggles& packet);
1673
1674 void HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& totemDestroyed);
1675 void HandleDismissCritter(WorldPackets::Pet::DismissCritter& dismissCritter);
1676
1677 //Battleground
1678 void HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello);
1679 void HandleBattlemasterJoinOpcode(WorldPackets::Battleground::BattlemasterJoin& battlemasterJoin);
1680 void HandlePVPLogDataOpcode(WorldPackets::Battleground::PVPLogDataRequest& pvpLogDataRequest);
1681 void HandleBattleFieldPortOpcode(WorldPackets::Battleground::BattlefieldPort& battlefieldPort);
1682 void HandleBattlefieldListOpcode(WorldPackets::Battleground::BattlefieldListRequest& battlefieldList);
1683 void HandleBattlefieldLeaveOpcode(WorldPackets::Battleground::BattlefieldLeave& battlefieldLeave);
1684 void HandleBattlemasterJoinArena(WorldPackets::Battleground::BattlemasterJoinArena& packet);
1685 void HandleReportPvPAFK(WorldPackets::Battleground::ReportPvPPlayerAFK& reportPvPPlayerAFK);
1686 void HandleRequestRatedPvpInfo(WorldPackets::Battleground::RequestRatedPvpInfo& packet);
1687 void HandleGetPVPOptionsEnabled(WorldPackets::Battleground::GetPVPOptionsEnabled& getPvPOptionsEnabled);
1688 void HandleRequestPvpReward(WorldPackets::Battleground::RequestPVPRewards& packet);
1689 void HandleAreaSpiritHealerQueryOpcode(WorldPackets::Battleground::AreaSpiritHealerQuery& areaSpiritHealerQuery);
1690 void HandleAreaSpiritHealerQueueOpcode(WorldPackets::Battleground::AreaSpiritHealerQueue& areaSpiritHealerQueue);
1691 void HandleHearthAndResurrect(WorldPackets::Battleground::HearthAndResurrect& hearthAndResurrect);
1692 void HandleRequestBattlefieldStatusOpcode(WorldPackets::Battleground::RequestBattlefieldStatus& requestBattlefieldStatus);
1693
1694 void HandleMinimapPingOpcode(WorldPackets::Party::MinimapPingClient& packet);
1695 void HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet);
1696 void HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet);
1697 void HandleSetDungeonDifficultyOpcode(WorldPackets::Misc::SetDungeonDifficulty& setDungeonDifficulty);
1698 void HandleSetRaidDifficultyOpcode(WorldPackets::Misc::SetRaidDifficulty& setRaidDifficulty);
1699 void HandleSetTitleOpcode(WorldPackets::Character::SetTitle& packet);
1700 void HandleTimeSync(uint32 counter, int64 clientTime, TimePoint responseReceiveTime);
1701 void HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse const& timeSyncResponse);
1702 void HandleQueuedMessagesEnd(WorldPackets::Auth::QueuedMessagesEnd const& queuedMessagesEnd);
1703 void HandleWhoIsOpcode(WorldPackets::Who::WhoIsRequest& packet);
1704 void HandleResetInstancesOpcode(WorldPackets::Instance::ResetInstances& packet);
1705 void HandleInstanceLockResponse(WorldPackets::Instance::InstanceLockResponse& packet);
1706
1707 // Looking for Dungeon/Raid
1708 void SendLfgPlayerLockInfo();
1709 void SendLfgPartyLockInfo();
1710 void HandleLfgJoinOpcode(WorldPackets::LFG::DFJoin& dfJoin);
1711 void HandleLfgLeaveOpcode(WorldPackets::LFG::DFLeave& dfLeave);
1712 void HandleLfgProposalResultOpcode(WorldPackets::LFG::DFProposalResponse& dfProposalResponse);
1713 void HandleLfgSetRolesOpcode(WorldPackets::LFG::DFSetRoles& dfSetRoles);
1714 void HandleLfgSetBootVoteOpcode(WorldPackets::LFG::DFBootPlayerVote& dfBootPlayerVote);
1715 void HandleLfgTeleportOpcode(WorldPackets::LFG::DFTeleport& dfTeleport);
1716 void HandleDFGetSystemInfo(WorldPackets::LFG::DFGetSystemInfo& dfGetSystemInfo);
1717 void HandleDFGetJoinStatus(WorldPackets::LFG::DFGetJoinStatus& dfGetJoinStatus);
1718
1719 void SendLfgUpdateStatus(lfg::LfgUpdateData const& updateData, bool party);
1720 void SendLfgRoleChosen(ObjectGuid guid, uint8 roles);
1721 void SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& pRoleCheck);
1722 void SendLfgJoinResult(lfg::LfgJoinResultData const& joinData);
1723 void SendLfgQueueStatus(lfg::LfgQueueStatusData const& queueData);
1724 void SendLfgPlayerReward(lfg::LfgPlayerRewardData const& lfgPlayerRewardData);
1725 void SendLfgBootProposalUpdate(lfg::LfgPlayerBoot const& boot);
1726 void SendLfgUpdateProposal(lfg::LfgProposal const& proposal);
1727 void SendLfgDisabled();
1728 void SendLfgOfferContinue(uint32 dungeonEntry);
1729 void SendLfgTeleportError(lfg::LfgTeleportResult err);
1730
1731 void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes);
1732 void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& requestPetInfo);
1733
1734 // Socket gem
1735 void HandleSocketGems(WorldPackets::Item::SocketGems& socketGems);
1736 void HandleSortAccountBankBags(WorldPackets::Item::SortAccountBankBags& sortBankBags);
1737 void HandleSortBags(WorldPackets::Item::SortBags& sortBags);
1738 void HandleSortBankBags(WorldPackets::Item::SortBankBags& sortBankBags);
1739 void HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& removeNewItem);
1740
1741 void HandleCancelTempEnchantmentOpcode(WorldPackets::Item::CancelTempEnchantment& cancelTempEnchantment);
1742
1743 void HandleGetItemPurchaseData(WorldPackets::Item::GetItemPurchaseData& packet);
1744 void HandleItemRefund(WorldPackets::Item::ItemPurchaseRefund& packet);
1745
1746 void HandleSetTaxiBenchmark(WorldPackets::Misc::SetTaxiBenchmarkMode& packet);
1747
1748 // Guild Bank
1749 void HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery& packet);
1750 void HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& packet);
1751 void HandleGuildBankActivate(WorldPackets::Guild::GuildBankActivate& packet);
1752 void HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet);
1753 void HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet);
1754 void HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet);
1755 void HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet);
1756 void HandleAutoGuildBankItem(WorldPackets::Guild::AutoGuildBankItem& autoGuildBankItem);
1757 void HandleStoreGuildBankItem(WorldPackets::Guild::StoreGuildBankItem& storeGuildBankItem);
1758 void HandleSwapItemWithGuildBankItem(WorldPackets::Guild::SwapItemWithGuildBankItem& swapItemWithGuildBankItem);
1759 void HandleSwapGuildBankItemWithGuildBankItem(WorldPackets::Guild::SwapGuildBankItemWithGuildBankItem& swapGuildBankItemWithGuildBankItem);
1760 void HandleMoveGuildBankItem(WorldPackets::Guild::MoveGuildBankItem& moveGuildBankItem);
1761 void HandleMergeItemWithGuildBankItem(WorldPackets::Guild::MergeItemWithGuildBankItem& mergeItemWithGuildBankItem);
1762 void HandleSplitItemToGuildBank(WorldPackets::Guild::SplitItemToGuildBank& splitItemToGuildBank);
1763 void HandleMergeGuildBankItemWithItem(WorldPackets::Guild::MergeGuildBankItemWithItem& mergeGuildBankItemWithItem);
1764 void HandleSplitGuildBankItemToInventory(WorldPackets::Guild::SplitGuildBankItemToInventory& splitGuildBankItemToInventory);
1765 void HandleAutoStoreGuildBankItem(WorldPackets::Guild::AutoStoreGuildBankItem& autoStoreGuildBankItem);
1766 void HandleMergeGuildBankItemWithGuildBankItem(WorldPackets::Guild::MergeGuildBankItemWithGuildBankItem& mergeGuildBankItemWithGuildBankItem);
1767 void HandleSplitGuildBankItem(WorldPackets::Guild::SplitGuildBankItem& splitGuildBankItem);
1768
1769 void HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet);
1770 void HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet);
1771 void HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery& packet);
1772 void HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet);
1773
1774 // Calendar
1775 void HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGetCalendar& calendarGetCalendar);
1776 void HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEvent& calendarGetEvent);
1777 void HandleCalendarCommunityInvite(WorldPackets::Calendar::CalendarCommunityInviteRequest& calendarCommunityInvite);
1778 void HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent);
1779 void HandleCalendarUpdateEvent(WorldPackets::Calendar::CalendarUpdateEvent& calendarUpdateEvent);
1780 void HandleCalendarRemoveEvent(WorldPackets::Calendar::CalendarRemoveEvent& calendarRemoveEvent);
1781 void HandleCalendarCopyEvent(WorldPackets::Calendar::CalendarCopyEvent& calendarCopyEvent);
1782 void HandleCalendarInvite(WorldPackets::Calendar::CalendarInvite& calendarEventInvite);
1783 void HandleCalendarRsvp(WorldPackets::Calendar::CalendarRSVP& calendarRSVP);
1784 void HandleCalendarEventRemoveInvite(WorldPackets::Calendar::CalendarRemoveInvite& calendarRemoveInvite);
1785 void HandleCalendarStatus(WorldPackets::Calendar::CalendarStatus& calendarStatus);
1786 void HandleCalendarModeratorStatus(WorldPackets::Calendar::CalendarModeratorStatusQuery& calendarModeratorStatus);
1787 void HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& calendarComplain);
1788 void HandleCalendarGetNumPending(WorldPackets::Calendar::CalendarGetNumPending& calendarGetNumPending);
1789 void HandleCalendarEventSignup(WorldPackets::Calendar::CalendarEventSignUp& calendarEventSignUp);
1790
1791 void SendCalendarRaidLockoutAdded(InstanceLock const* lock);
1792 void SendCalendarRaidLockoutRemoved(InstanceLock const* lock);
1793 void HandleSetSavedInstanceExtend(WorldPackets::Calendar::SetSavedInstanceExtend& setSavedInstanceExtend);
1794
1795 // Collections
1796 void HandleCollectionItemSetFavorite(WorldPackets::Collections::CollectionItemSetFavorite& collectionItemSetFavorite);
1797
1798 // Transmogrification
1799 void HandleTransmogrifyItems(WorldPackets::Transmogrification::TransmogrifyItems& transmogrifyItems);
1800 void HandleTransmogOutfitNew(WorldPackets::Transmogrification::TransmogOutfitNew const& transmogOutfitNew);
1801 void HandleTransmogOutfitUpdateInfo(WorldPackets::Transmogrification::TransmogOutfitUpdateInfo const& transmogOutfitUpdateInfo);
1802 void HandleTransmogOutfitUpdateSituations(WorldPackets::Transmogrification::TransmogOutfitUpdateSituations const& transmogOutfitUpdateSituations);
1803 void HandleTransmogOutfitUpdateSlots(WorldPackets::Transmogrification::TransmogOutfitUpdateSlots const& transmogOutfitUpdateSlots);
1804
1805 // Miscellaneous
1806 void HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick);
1807 void HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorImageData& getMirrorImageData);
1808 void HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement);
1809 void HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& saveEquipmentSet);
1810 void HandleDeleteEquipmentSet(WorldPackets::EquipmentSet::DeleteEquipmentSet& deleteEquipmentSet);
1811 void HandleUseEquipmentSet(WorldPackets::EquipmentSet::UseEquipmentSet& useEquipmentSet);
1812 void HandleServerTimeOffsetRequest(WorldPackets::Misc::ServerTimeOffsetRequest& /*request*/);
1813 void HandleQueryQuestCompletionNPCs(WorldPackets::Query::QueryQuestCompletionNPCs& queryQuestCompletionNPCs);
1814 void HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& questPoiQuery);
1815 void HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& violenceLevel);
1816 void HandleObjectUpdateFailedOpcode(WorldPackets::Misc::ObjectUpdateFailed& objectUpdateFailed);
1817 void HandleObjectUpdateRescuedOpcode(WorldPackets::Misc::ObjectUpdateRescued& objectUpdateRescued);
1818 void HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction);
1819 void HandleConversationLineStarted(WorldPackets::Misc::ConversationLineStarted& conversationLineStarted);
1820 void HandleKeyboundOverride(WorldPackets::Spells::KeyboundOverride& keyboundOverride);
1821 void HandleQueryCountdownTimer(WorldPackets::Misc::QueryCountdownTimer& queryCountdownTimer);
1822 void HandleSetCurrencyFlags(WorldPackets::Misc::SetCurrencyFlags const& setCurrenctFlags);
1823
1824 // Adventure Journal
1825 void HandleAdventureJournalOpenQuest(WorldPackets::AdventureJournal::AdventureJournalOpenQuest& openQuest);
1826 void HandleAdventureJournalUpdateSuggestions(WorldPackets::AdventureJournal::AdventureJournalUpdateSuggestions& updateSuggestions);
1827
1828 // Adventure Map
1829 void HandleCheckIsAdventureMapPoiValid(WorldPackets::AdventureMap::CheckIsAdventureMapPoiValid& CheckIsAdventureMapPoiValid);
1830 void HandleAdventureMapStartQuest(WorldPackets::AdventureMap::AdventureMapStartQuest& startQuest);
1831
1832 // Toys
1833 void HandleAddToy(WorldPackets::Toy::AddToy& packet);
1834 void HandleUseToy(WorldPackets::Toy::UseToy& packet);
1835 void HandleToyClearFanfare(WorldPackets::Toy::ToyClearFanfare& toyClearFanfare);
1836
1837 void HandleMountSetFavorite(WorldPackets::Misc::MountSetFavorite& mountSetFavorite);
1838
1839 // Scenes
1840 void HandleSceneTriggerEvent(WorldPackets::Scenes::SceneTriggerEvent& sceneTriggerEvent);
1841 void HandleScenePlaybackComplete(WorldPackets::Scenes::ScenePlaybackComplete& scenePlaybackComplete);
1842 void HandleScenePlaybackCanceled(WorldPackets::Scenes::ScenePlaybackCanceled& scenePlaybackCanceled);
1843
1844 // Token
1845 void HandleCommerceTokenGetLog(WorldPackets::Token::CommerceTokenGetLog& updateListedAuctionableTokens);
1846 void HandleCommerceTokenGetMarketPrice(WorldPackets::Token::CommerceTokenGetMarketPrice& requestWowTokenMarketPrice);
1847
1848 // Compact Unit Frames (4.x)
1849 void HandleSaveCUFProfiles(WorldPackets::Misc::SaveCUFProfiles& packet);
1850 void SendLoadCUFProfiles();
1851
1852 // Garrison
1853 void HandleGetGarrisonInfo(WorldPackets::Garrison::GetGarrisonInfo& getGarrisonInfo);
1854 void HandleGarrisonPurchaseBuilding(WorldPackets::Garrison::GarrisonPurchaseBuilding& garrisonPurchaseBuilding);
1855 void HandleGarrisonCancelConstruction(WorldPackets::Garrison::GarrisonCancelConstruction& garrisonCancelConstruction);
1856 void HandleGarrisonRequestBlueprintAndSpecializationData(WorldPackets::Garrison::GarrisonRequestBlueprintAndSpecializationData& garrisonRequestBlueprintAndSpecializationData);
1857 void HandleGarrisonGetMapData(WorldPackets::Garrison::GarrisonGetMapData& garrisonGetMapData);
1858
1859 // Battle Pets
1860 void HandleBattlePetRequestJournal(WorldPackets::BattlePet::BattlePetRequestJournal& battlePetRequestJournal);
1861 void HandleBattlePetRequestJournalLock(WorldPackets::BattlePet::BattlePetRequestJournalLock& battlePetRequestJournalLock);
1862 void HandleBattlePetSetBattleSlot(WorldPackets::BattlePet::BattlePetSetBattleSlot& battlePetSetBattleSlot);
1863 void HandleBattlePetModifyName(WorldPackets::BattlePet::BattlePetModifyName& battlePetModifyName);
1864 void HandleQueryBattlePetName(WorldPackets::BattlePet::QueryBattlePetName& queryBattlePetName);
1865 void HandleBattlePetDeletePet(WorldPackets::BattlePet::BattlePetDeletePet& battlePetDeletePet);
1866 void HandleBattlePetSetFlags(WorldPackets::BattlePet::BattlePetSetFlags& battlePetSetFlags);
1867 void HandleBattlePetClearFanfare(WorldPackets::BattlePet::BattlePetClearFanfare& battlePetClearFanfare);
1868 void HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon& battlePetSummon);
1869 void HandleBattlePetUpdateNotify(WorldPackets::BattlePet::BattlePetUpdateNotify& battlePetUpdateNotify);
1870 void HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet& cageBattlePet);
1871
1872 // Battlenet
1873 void HandleBattlenetChangeRealmTicket(WorldPackets::Battlenet::ChangeRealmTicket& changeRealmTicket);
1874 void HandleBattlenetRequest(WorldPackets::Battlenet::Request& request);
1875
1876 void SendBattlenetResponse(uint32 serviceHash, uint32 methodId, uint32 token, pb::Message const* response);
1877 void SendBattlenetResponse(uint32 serviceHash, uint32 methodId, uint32 token, uint32 status);
1878 void SendBattlenetRequest(uint32 serviceHash, uint32 methodId, pb::Message const* request, std::function<void(MessageBuffer)> callback);
1879 void SendBattlenetRequest(uint32 serviceHash, uint32 methodId, pb::Message const* request);
1880
1881 std::array<uint8, 32> const& GetRealmListSecret() const { return _realmListSecret; }
1882 void SetRealmListSecret(std::array<uint8, 32> const& secret) { _realmListSecret = secret; }
1883
1884 std::unordered_map<uint32, uint8> const& GetRealmCharacterCounts() const { return _realmCharacterCounts; }
1885
1886 void HandleQueryRealmName(WorldPackets::Query::QueryRealmName& queryRealmName);
1887
1888 // Artifact
1889 void HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPower& artifactAddPower);
1890 void HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactSetAppearance& artifactSetAppearance);
1891 void HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmArtifactRespec& confirmArtifactRespec);
1892
1893 // Scenario
1894 void HandleQueryScenarioPOI(WorldPackets::Scenario::QueryScenarioPOI& queryScenarioPOI);
1895
1896 // Azerite
1897 void HandleAzeriteEssenceUnlockMilestone(WorldPackets::Azerite::AzeriteEssenceUnlockMilestone& azeriteEssenceUnlockMilestone);
1898 void HandleAzeriteEssenceActivateEssence(WorldPackets::Azerite::AzeriteEssenceActivateEssence& azeriteEssenceActivateEssence);
1899 void HandleAzeriteEmpoweredItemViewed(WorldPackets::Azerite::AzeriteEmpoweredItemViewed& azeriteEmpoweredItemViewed);
1900 void HandleAzeriteEmpoweredItemSelectPower(WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower& azeriteEmpoweredItemSelectPower);
1901 void SendAzeriteRespecNPC(ObjectGuid npc);
1902
1903 void HandleRequestLatestSplashScreen(WorldPackets::Misc::RequestLatestSplashScreen& requestLatestSplashScreen);
1904
1905 void HandleSocialContractRequest(WorldPackets::Social::SocialContractRequest& socialContractRequest);
1906
1908 {
1909 struct
1910 {
1914 } Fields;
1915
1917 };
1918
1919 uint64 GetConnectToInstanceKey() const { return _instanceConnectKey.Raw; }
1920 static void AddInstanceConnection(WorldSession* session, std::weak_ptr<WorldSocket> sockRef, ConnectToKey key);
1921
1922 public:
1923 QueryCallbackProcessor& GetQueryProcessor() { return _queryProcessor; }
1924 TransactionCallback& AddTransactionCallback(TransactionCallback&& callback);
1925 SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback);
1926
1927 private:
1928 void ProcessQueryCallbacks();
1929
1933
1934 friend class World;
1935 protected:
1937 {
1938 friend class World;
1939 public:
1941 bool EvaluateOpcode(WorldPacket& p, time_t time) const;
1942 protected:
1949
1950 uint32 GetMaxPacketCounterAllowed(uint32 opcode) const;
1951
1953
1954 private:
1956 typedef std::unordered_map<uint32, PacketCounter> PacketThrottlingMap;
1957 // mark this member as "mutable" so it can be modified even in const functions
1959
1960 DosProtection(DosProtection const& right) = delete;
1961 DosProtection& operator=(DosProtection const& right) = delete;
1962 } AntiDOS;
1963
1964 private:
1965 // private trade methods
1966 void moveItems(Item* myItems[], Item* hisItems[]);
1967
1968 bool CanUseBank(ObjectGuid bankerGUID = ObjectGuid::Empty) const;
1969
1970 // logging helper
1971 void LogUnexpectedOpcode(WorldPacket* packet, char const* status, const char *reason);
1972
1973 // EnumData helpers
1975 {
1976 return _legitCharacters.find(lowGUID) != _legitCharacters.end();
1977 }
1978
1979 // this stores the GUIDs of the characters who can login
1980 // characters who failed on Player::BuildEnumData shouldn't login
1982
1983 ObjectGuid::LowType m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
1985 std::array<std::shared_ptr<WorldSocket>, MAX_CONNECTION_TYPES> m_Socket;
1986 std::string m_Address; // Current Remote Address
1987 // std::string m_LAddress; // Last Attempted Remote Adress - we can not set attempted ip for a non-existing session!
1988
1991 std::string _accountName;
1992 std::unique_ptr<Battlenet::Account> _battlenetAccount;
1995 std::string _os;
1998
1999 std::array<uint8, 32> _realmListSecret;
2000 std::unordered_map<uint32 /*realmAddress*/, uint8> _realmCharacterCounts;
2001 std::unordered_map<uint32, std::function<void(MessageBuffer)>> _battlenetResponseCallbacks;
2003
2005 bool m_inQueue; // session wait in auth.queue
2006 ObjectGuid m_playerLoading; // code processed in LoginPlayer
2007 bool m_playerLogout; // code processed in LogoutPlayer
2013 std::atomic<uint32> m_latency;
2015 std::array<uint32, MAX_ACCOUNT_TUTORIAL_VALUES> _tutorials;
2018 std::vector<std::string> _registeredAddonPrefixes;
2026
2027 std::unique_ptr<boost::circular_buffer<std::pair<int64, uint32>>> _timeSyncClockDeltaQueue; // first member: clockDelta. Second member: latency of the packet exchange that was used to compute that clockDelta.
2029 void ComputeNewClockDelta();
2030
2031 std::map<uint32, int64> _pendingTimeSyncRequests; // key: counter. value: server time when packet with that counter was sent.
2034
2035 // Packets cooldown
2037
2038 std::unique_ptr<BattlePets::BattlePetMgr> _battlePetMgr;
2039
2040 std::unique_ptr<CollectionMgr> _collectionMgr;
2041
2043
2044 WorldSession(WorldSession const& right) = delete;
2045 WorldSession& operator=(WorldSession const& right) = delete;
2046};
2047
2048#endif
AuctionResult
AuctionCommand
LocaleConstant
Definition Common.h:51
AccountTypes
Definition Common.h:42
InstanceInfo
PlayerInteractionType
Definition DBCEnums.h:2211
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int64_t int64
Definition Define.h:149
#define ATTR_PRINTF(F, V)
COREDEBUG.
Definition Define.h:78
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
std::chrono::steady_clock::time_point TimePoint
time_point shorthand typedefs
Definition Duration.h:40
std::chrono::minutes Minutes
Minutes shorthand typedef.
Definition Duration.h:32
InventoryResult
Definition ItemDefines.h:25
TabardVendorType
std::set< ObjectGuid > GuidSet
Definition ObjectGuid.h:432
@ MAX_CONNECTION_TYPES
Definition Opcodes.h:30
OpcodeClient
Definition Opcodes.h:38
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
StableResult
Definition PetDefines.h:121
Spells
Definition PlayerAI.cpp:32
Races
Definition RaceMask.h:27
Classes
Language
ChatMessageResult
Gender
ResponseCodes
TradeStatus
CharacterUndeleteResult
ActivateTaxiReply
ChatMsg
PartyResult
ChatRestrictionType
@ ERR_CHAT_THROTTLED
@ ERR_YELL_RESTRICTED
@ ERR_CHAT_RESTRICTED
@ ERR_USER_SQUELCHED
@ ERR_CHAT_RAID_RESTRICTED
TutorialsFlag
@ TUTORIALS_FLAG_LOADED_FROM_DB
@ TUTORIALS_FLAG_CHANGED
@ TUTORIALS_FLAG_NONE
DeclinedNameResult
@ DECLINED_NAMES_RESULT_SUCCESS
@ DECLINED_NAMES_RESULT_ERROR
PartyOperation
@ PARTY_OP_INVITE
@ PARTY_OP_SWAP
@ PARTY_OP_UNINVITE
@ PARTY_OP_LEAVE
AccountDataType
@ PER_CHARACTER_MACROS_CACHE
@ PER_CHARACTER_FLAGGED_CACHE
@ GLOBAL_MACROS_CACHE
@ PER_CHARACTER_EDIT_MODE_CACHE
@ PER_CHARACTER_CONFIG_CACHE
@ PER_CHARACTER_TTS_CACHE
@ GLOBAL_SHOP2_PENDING_ORDERS
@ GLOBAL_FRONTEND_CHAT_SETTINGS
@ GLOBAL_BINDINGS_CACHE
@ PER_CHARACTER_CHAT_CACHE
@ PER_CHARACTER_CLICK_BINDINGS_CACHE
@ PER_CHARACTER_COOLDOWN_MANAGER2
@ GLOBAL_EDIT_MODE_CACHE
@ PER_CHARACTER_LAYOUT_CACHE
@ GLOBAL_FLAGGED_CACHE
@ PER_CHARACTER_BINDINGS_CACHE
@ GLOBAL_CONFIG_CACHE
@ GLOBAL_COOLDOWN_MANAGER
@ GLOBAL_CHARACTER_LIST_ORDER
@ GLOBAL_TTS_CACHE
#define NUM_ACCOUNT_DATA_TYPES
Achievement
Definition Guild.h:329
Definition Item.h:179
MapSessionFilter(WorldSession *pSession)
virtual bool ProcessUnsafe() const override
static ObjectGuid const Empty
Definition ObjectGuid.h:314
uint64 LowType
Definition ObjectGuid.h:321
virtual bool Process(WorldPacket *)
PacketFilter & operator=(PacketFilter const &right)=delete
virtual bool ProcessUnsafe() const
PacketFilter(PacketFilter const &right)=delete
PacketFilter(WorldSession *pSession)
WorldSession *const m_pSession
virtual ~PacketFilter()
Definition Pet.h:40
Definition Totem.h:31
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition Unit.h:635
WorldSessionFilter(WorldSession *pSession)
bool ProcessUnsafe() const override
std::unordered_map< uint32, PacketCounter > PacketThrottlingMap
DosProtection(DosProtection const &right)=delete
DosProtection & operator=(DosProtection const &right)=delete
PacketThrottlingMap _PacketThrottlingMap
Player session in the World.
PlayerDataAccount const & GetPlayerDataAccount() const
GuidSet _legitCharacters
bool m_playerRecentlyLogout
std::unique_ptr< Battlenet::Account > _battlenetAccount
uint8 _tutorialsChanged
std::string m_Address
time_t GetCalendarEventCreationCooldown() const
std::array< uint8, 32 > _realmListSecret
bool isLogingOut() const
Is the user engaged in a log out process?
LocaleConstant m_sessionDbLocaleIndex
std::array< std::shared_ptr< WorldSocket >, MAX_CONNECTION_TYPES > m_Socket
AsyncCallbackProcessor< SQLQueryHolderCallback > _queryHolderProcessor
QueryCallbackProcessor _queryProcessor
std::array< uint32, MAX_ACCOUNT_TUTORIAL_VALUES > _tutorials
LocaleConstant GetSessionDbLocaleIndex() const
int64 _timeSyncClockDelta
Battlenet::Account & GetBattlenetAccount() const
uint32 _clientBuild
time_t _calendarEventCreationCooldown
std::array< uint8, 32 > const & GetRealmListSecret() const
bool PlayerRecentlyLoggedOut() const
std::atomic< time_t > m_timeOutTime
bool PlayerLogout() const
uint64 GetConnectToInstanceKey() const
ObjectGuid GetAccountGUID() const
uint32 _timeSyncTimer
std::unordered_map< uint32, uint8 > _realmCharacterCounts
Minutes GetTimezoneOffset() const
LocaleConstant GetSessionDbcLocale() const
uint32 GetRecruiterId() const
std::string _os
Player * GetPlayer() const
rbac::RBACData * _RBACData
std::unique_ptr< CollectionMgr > _collectionMgr
bool PlayerLogoutWithSave() const
bool PlayerLoading() const
bool IsARecruiter() const
void SetLogoutStartTime(time_t requestTime)
Engage the logout process for the user.
std::string const & GetOS() const
void SetRealmListSecret(std::array< uint8, 32 > const &secret)
std::string _accountName
std::string const & GetAccountName() const
ClientBuild::VariantId const & GetClientBuildVariant() const
AccountData const * GetAccountData(AccountDataType type) const
QueryCallbackProcessor & GetQueryProcessor()
uint32 _timeSyncNextCounter
ObjectGuid m_playerLoading
bool IsLegitCharacterForAccount(ObjectGuid lowGUID)
std::string const & GetRemoteAddress() const
void SetCalendarEventCreationCooldown(time_t cooldown)
void SetInQueue(bool state)
Session in auth.queue currently.
ObjectGuid::LowType m_GUIDLow
WorldSession(WorldSession const &right)=delete
uint32 GetClientBuild() const
PlayerDataAccount _playerDataAccount
std::unordered_map< uint32, uint8 > const & GetRealmCharacterCounts() const
uint32 GetAccountId() const
uint8 GetAccountExpansion() const
ConnectToKey _instanceConnectKey
Player * _player
uint32 GetTutorialInt(uint8 index) const
uint32 _battlenetRequestToken
CollectionMgr * GetCollectionMgr() const
AccountTypes _security
uint32 GetLatency() const
uint8 GetExpansion() const
uint8 m_accountExpansion
WorldSession & operator=(WorldSession const &right)=delete
std::vector< std::string > _registeredAddonPrefixes
ClientBuild::VariantId _clientBuildVariant
std::unordered_map< uint32, std::function< void(MessageBuffer)> > _battlenetResponseCallbacks
LocaleConstant m_sessionDbcLocale
std::unique_ptr< boost::circular_buffer< std::pair< int64, uint32 > > > _timeSyncClockDeltaQueue
LockedQueue< WorldPacket * > _recvQueue
std::atomic< uint32 > m_latency
void SetSecurity(AccountTypes security)
void SetLatency(uint32 latency)
void SetTutorialInt(uint8 index, uint32 value)
bool ShouldLogOut(time_t currTime) const
Is logout cooldown expired?
AsyncCallbackProcessor< TransactionCallback > _transactionCallbacks
BattlePets::BattlePetMgr * GetBattlePetMgr() const
Minutes _timezoneOffset
std::unique_ptr< BattlePets::BattlePetMgr > _battlePetMgr
bool _filterAddonMessages
std::map< uint32, int64 > _pendingTimeSyncRequests
The World.
Definition World.h:555
boost::beast::http::request< RequestBody > Request
Definition HttpCommon.h:30
UF::ChrCustomizationChoice ChrCustomizationChoice
Definition LFG.cpp:24
LfgTeleportResult
Teleport errors.
Definition LFGMgr.h:96
STL namespace.
std::string Data
Definition Loot.h:286
Definition Mail.h:175
uint32 amountCounter
time_t lastReceiveTime
std::vector< Element > Elements
Stores information of a current vote to kick someone from a group.
Definition LFGMgr.h:288
Stores group data related to proposal to join.
Definition LFGMgr.h:257
Stores all rolecheck info of a group that wants to join.
Definition LFGMgr.h:277