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