TrinityCore
Loading...
Searching...
No Matches
WorldSession.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
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 "LockedQueue.h"
31#include "ObjectGuid.h"
32#include "Packet.h"
33#include "SharedDefines.h"
34#include <boost/circular_buffer_fwd.hpp>
35#include <string>
36#include <map>
37#include <memory>
38#include <unordered_map>
39
40class Creature;
41class GameClient;
42class GameObject;
43class InstanceSave;
44class Item;
46class Object;
47class Player;
48class Quest;
50class Unit;
51class Warden;
52class WorldPacket;
53class WorldSocket;
54struct AreaTableEntry;
55struct AuctionEntry;
56struct DeclinedName;
57struct ItemTemplate;
58struct MovementInfo;
59struct Petition;
60struct TradeStatusInfo;
61enum AuctionAction : uint8;
62enum AuctionError : uint8;
64
65namespace lfg
66{
67 struct LfgJoinResultData;
68 struct LfgPlayerBoot;
69 struct LfgProposal;
70 struct LfgQueueStatusData;
71 struct LfgPlayerRewardData;
72 struct LfgRoleCheck;
73 struct LfgUpdateData;
74}
75
76namespace rbac
77{
78class RBACData;
79}
80
81namespace WorldPackets
82{
83 namespace Bank
84 {
85 class AutoBankItem;
86 class AutoStoreBankItem;
87 class BuyBankSlot;
88 }
89
90 namespace Battleground
91 {
92 class AreaSpiritHealerQuery;
93 class AreaSpiritHealerQueue;
94 class HearthAndResurrect;
95 class PVPLogDataRequest;
96 class BattlemasterJoin;
97 class BattlemasterJoinArena;
98 class BattlefieldLeave;
99 class BattlefieldPort;
100 class BattlefieldListRequest;
101 class RequestBattlefieldStatus;
102 class ReportPvPPlayerAFK;
103 class BattlegroundPlayerPositionsRequest;
104 }
105
106 namespace Calendar
107 {
108 class CalendarAddEvent;
109 class CalendarCopyEvent;
110 class CalendarInvite;
111 class CalendarModeratorStatusQuery;
112 class CalendarRSVP;
113 class CalendarEventSignUp;
114 class CalendarStatus;
115 class CalendarGetCalendar;
116 class CalendarGetEvent;
117 class CalendarGetNumPending;
118 class CalendarGuildFilter;
119 class CalendarArenaTeam;
120 class CalendarRemoveEvent;
121 class CalendarRemoveInvite;
122 class CalendarUpdateEvent;
123 class SetSavedInstanceExtend;
124 class CalendarComplain;
125 }
126
127 namespace Character
128 {
129 struct CharacterCreateInfo;
130 struct CharacterRenameInfo;
131 struct CharCustomizeInfo;
132 struct CharRaceOrFactionChangeInfo;
133
134 class CreateCharacter;
135 class CharDelete;
136 class CharacterRenameRequest;
137 class CharCustomize;
138 class CharRaceOrFactionChange;
139 class LogoutCancel;
140 class LogoutRequest;
141 class ShowingCloak;
142 class ShowingHelm;
143 class PlayerLogout;
144 class PlayedTimeClient;
145 }
146
147 namespace Chat
148 {
149 class EmoteClient;
150 }
151
152 namespace Combat
153 {
154 class AttackSwing;
155 class AttackStop;
156 class SetSheathed;
157 }
158
159 namespace Guild
160 {
161 class QueryGuildInfo;
162 class GuildCreate;
163 class GuildInviteByName;
164 class AcceptGuildInvite;
165 class GuildDeclineInvitation;
166 class GuildGetInfo;
167 class GuildGetRoster;
168 class GuildPromoteMember;
169 class GuildDemoteMember;
170 class GuildOfficerRemoveMember;
171 class GuildLeave;
172 class GuildDelete;
173 class GuildUpdateMotdText;
174 class GuildAddRank;
175 class GuildDeleteRank;
176 class GuildUpdateInfoText;
177 class GuildSetMemberNote;
178 class GuildEventLogQuery;
179 class GuildBankRemainingWithdrawMoneyQuery;
180 class GuildPermissionsQuery;
181 class GuildSetRankPermissions;
182 class GuildBankActivate;
183 class GuildBankQueryTab;
184 class GuildBankDepositMoney;
185 class GuildBankWithdrawMoney;
186 class GuildBankSwapItems;
187 class GuildBankBuyTab;
188 class GuildBankUpdateTab;
189 class GuildBankLogQuery;
190 class GuildBankTextQuery;
191 class GuildBankSetTabText;
192 class GuildSetGuildMaster;
193 class SaveGuildEmblem;
194 }
195
196 namespace Inspect
197 {
198 class Inspect;
199 }
200
201 namespace LFG
202 {
203 class LFGJoin;
204 class LFGLeave;
205 }
206
207 namespace Mail
208 {
209 class MailCreateTextItem;
210 class MailDelete;
211 class MailGetList;
212 class MailMarkAsRead;
213 class MailQueryNextMailTime;
214 class MailReturnToSender;
215 class MailTakeItem;
216 class MailTakeMoney;
217 class SendMail;
218 }
219
220 namespace Misc
221 {
222 class CompleteCinematic;
223 class CompleteMovie;
224 class NextCinematicCamera;
225 class OpeningCinematic;
226 class RandomRollClient;
227 class TogglePvP;
228 class WorldTeleport;
229 class ReclaimCorpse;
230 class RepopRequest;
231 class ResurrectResponse;
232 }
233
234 namespace Movement
235 {
236 class ClientPlayerMovement;
237 }
238
239 namespace NPC
240 {
241 class Hello;
242 class TrainerBuySpell;
243 }
244
245 namespace Party
246 {
247 class PartyInviteClient;
248 }
249
250 namespace Pet
251 {
252 class DismissCritter;
253 class PetAbandon;
254 class PetStopAttack;
255 class PetSpellAutocast;
256 class RequestPetInfo;
257 }
258
259 namespace Query
260 {
261 class QueryCreature;
262 class QueryPlayerName;
263 class QueryGameObject;
264 class QueryCorpseLocationFromClient;
265 class QueryCorpseTransport;
266 class QueryItemSingle;
267 class QuestPOIQuery;
268 }
269
270 namespace Quest
271 {
272 class QueryQuestInfo;
273 }
274
275 namespace Spells
276 {
277 class CancelCast;
278 class CancelAura;
279 class PetCancelAura;
280 class CancelGrowthAura;
281 class CancelMountAura;
282 class CancelAutoRepeatSpell;
283 class CancelChannelling;
284 }
285
286 namespace Talent
287 {
288 class ConfirmRespecWipe;
289 }
290
291 namespace Totem
292 {
293 class TotemDestroyed;
294 }
295
296 namespace Trade
297 {
298 class CancelTrade;
299 }
300}
301
313
314#define NUM_ACCOUNT_DATA_TYPES 8
315
316#define GLOBAL_CACHE_MASK 0x15
317#define PER_CHARACTER_CACHE_MASK 0xEA
318
319uint32 constexpr MAX_CHARACTERS_PER_REALM = 10; // max supported by client in char enum
320
322{
323 AccountData() : Time(0), Data("") { }
324
325 time_t Time;
326 std::string Data;
327};
328
336
344
346{
348 //BF_LEAVE_REASON_UNK1 = 0x00000002, (not used)
349 //BF_LEAVE_REASON_UNK2 = 0x00000004, (not used)
351 BF_LEAVE_REASON_LOW_LEVEL = 0x00000010
353
361
367
374
375//class to deal with packet processing
376//allows to determine if next packet is safe to be processed
378{
379public:
380 explicit PacketFilter(WorldSession* pSession) : m_pSession(pSession) { }
381 virtual ~PacketFilter() { }
382
383 virtual bool Process(WorldPacket* /*packet*/) { return true; }
384 virtual bool ProcessUnsafe() const { return true; }
385
386protected:
388
389private:
390 PacketFilter(PacketFilter const& right) = delete;
391 PacketFilter& operator=(PacketFilter const& right) = delete;
392};
393//process only thread-safe packets in Map::Update()
395{
396public:
397 explicit MapSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
399
400 virtual bool Process(WorldPacket* packet) override;
401 //in Map::Update() we do not process player logout!
402 virtual bool ProcessUnsafe() const override { return false; }
403};
404
405//class used to filer only thread-unsafe packets from queue
406//in order to update only be used in World::UpdateSessions()
408{
409public:
410 explicit WorldSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
412
413 virtual bool Process(WorldPacket* packet) override;
414};
415
421
423{
430
431 std::string Name;
433 bool HasKey = false;
434};
435
438{
439 public:
440 WorldSession(uint32 id, std::string&& name, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time,
441 Minutes timezoneOffset, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
443
444 bool PlayerLoading() const { return m_playerLoading; }
445 bool PlayerLogout() const { return m_playerLogout; }
446 bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
447 bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; }
448 bool PlayerDisconnected() const { return !m_Socket; }
449
450 void ReadAddonsInfo(ByteBuffer& data);
451 void SendAddonsInfo();
452
453 void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
454 void static WriteMovementInfo(WorldPacket* data, MovementInfo* mi);
455
456 void SendPacket(WorldPacket const* packet);
457 void SendNotification(const char *format, ...) ATTR_PRINTF(2, 3);
458 void SendNotification(uint32 string_id, ...);
459 void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName *declinedName);
460 void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0);
461 void SendAreaTriggerMessage(char const* Text, ...) ATTR_PRINTF(2, 3);
462 void SendSetPhaseShift(uint32 phaseShift);
463 void SendQueryTimeResponse();
464
465 void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos = 0);
466 void SendClientCacheVersion(uint32 version);
467
468 void InitializeSession();
469 void InitializeSessionCallback(CharacterDatabaseQueryHolder const& realmHolder);
470
471 GameClient* GetGameClient() const { return _gameClient; };
472
473 rbac::RBACData* GetRBACData() const;
474 bool HasPermission(uint32 permissionId);
475 void LoadPermissions();
476 QueryCallback LoadPermissionsAsync();
477 void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check
478
479 AccountTypes GetSecurity() const { return _security; }
480 uint32 GetAccountId() const { return _accountId; }
481 std::string const& GetAccountName() const { return _accountName; }
482 Player* GetPlayer() const { return _player; }
483 std::string const& GetPlayerName() const;
484 std::string GetPlayerInfo() const;
485
486 void SetSecurity(AccountTypes security) { _security = security; }
487 std::string const& GetRemoteAddress() const { return m_Address; }
488 void SetPlayer(Player* player);
489 uint8 Expansion() const { return m_expansion; }
490
491 void InitWarden(SessionKey const& k, std::string const& os);
492 Warden* GetWarden() { return _warden.get(); }
493 Warden const* GetWarden() const { return _warden.get(); }
494
496 void SetInQueue(bool state) { m_inQueue = state; }
497
499 bool isLogingOut() const { return _logoutTime || m_playerLogout; }
500
502 void SetLogoutStartTime(time_t requestTime)
503 {
504 _logoutTime = requestTime;
505 }
506
508 bool ShouldLogOut(time_t currTime) const
509 {
510 return (_logoutTime > 0 && currTime >= _logoutTime + 20);
511 }
512
513 void LogoutPlayer(bool save);
514 void KickPlayer(std::string const& reason);
515 // Returns true if all contained hyperlinks are valid
516 // May kick player on false depending on world config (handler should abort)
517 bool ValidateHyperlinksAndMaybeKick(std::string const& str);
518 // Returns true if the message contains no hyperlinks
519 // May kick player on false depending on world config (handler should abort)
520 bool DisallowHyperlinksAndMaybeKick(std::string const& str);
521
522 void QueuePacket(WorldPacket* new_packet);
523 bool Update(uint32 diff, PacketFilter& updater);
524
526 void SendAuthWaitQueue(uint32 position);
527
528 void SendFeatureSystemStatus();
529
530 void SendNameQueryOpcode(ObjectGuid guid);
531
532 void SendTrainerList(Creature* npc);
533 void SendListInventory(ObjectGuid guid);
534 void SendShowBank(ObjectGuid guid);
535 bool CanOpenMailBox(ObjectGuid guid);
536 void SendShowMailBox(ObjectGuid guid);
537 void SendTabardVendorActivate(ObjectGuid guid);
538 void SendSpiritResurrect();
539 void SendBindPoint(Creature* npc);
540
541 void SendAttackStop(Unit const* enemy);
542
543 void SendTradeStatus(TradeStatusInfo const& status);
544 void SendUpdateTrade(bool trader_data = true);
545 void SendCancelTrade(TradeStatus status);
546
547 void SendPetitionQueryOpcode(ObjectGuid petitionguid);
548
549 // Spell
550 void HandleClientCastFlags(WorldPacket& recvPacket, uint8 castFlags, SpellCastTargets& targets);
551
552 // Pet
553 void SendQueryPetNameResponse(ObjectGuid guid, uint32 petnumber);
554 void SendStablePet(ObjectGuid guid);
555 void SendPetStableResult(uint8 guid);
556 bool CheckStableMaster(ObjectGuid guid);
557
558 // Account Data
559 AccountData* GetAccountData(AccountDataType type) { return &m_accountData[type]; }
560 void SetAccountData(AccountDataType type, time_t tm, std::string const& data);
561 void SendAccountDataTimes(uint32 mask);
562 void LoadAccountData(PreparedQueryResult result, uint32 mask);
563
564 void LoadTutorialsData(PreparedQueryResult result);
565 void SendTutorialsData();
566 void SaveTutorialsData(CharacterDatabaseTransaction trans);
567 uint32 GetTutorialInt(uint8 index) const { return m_Tutorials[index]; }
568 void SetTutorialInt(uint8 index, uint32 value)
569 {
570 if (m_Tutorials[index] != value)
571 {
572 m_Tutorials[index] = value;
573 m_TutorialsChanged |= TUTORIALS_FLAG_CHANGED;
574 }
575 }
576 void LoadInstanceTimeRestrictions(PreparedQueryResult result);
577 void SaveInstanceTimeRestrictions(CharacterDatabaseTransaction trans);
578 bool UpdateAndCheckInstanceCount(uint32 instanceId);
579 void AddInstanceEnterTime(uint32 instanceId, SystemTimePoint enterTime);
580 void UpdateInstanceEnterTimes();
581 //auction
582 void SendAuctionHello(ObjectGuid guid, Unit const* unit);
583
594 void SendAuctionCommandResult(AuctionEntry const* auction, AuctionAction command, AuctionError errorCode, InventoryResult bagResult = InventoryResult(0));
595 void SendAuctionBidderNotification(uint32 location, uint32 auctionId, ObjectGuid bidder, uint32 bidSum, uint32 diff, uint32 item_template);
596 void SendAuctionOwnerNotification(AuctionEntry* auction);
597 void SendAuctionRemovedNotification(uint32 auctionId, uint32 itemEntry, int32 randomPropertyId);
598
599 //Item Enchantment
600 void SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId);
601 void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration);
602
603 //Taxi
604 void SendTaxiStatus(ObjectGuid guid);
605 void SendTaxiMenu(Creature* unit);
606 void SendDoFlight(uint32 mountDisplayId, uint32 path, uint32 pathNode = 0);
607 bool SendLearnNewTaxiNode(Creature* unit);
608 void SendDiscoverNewTaxiNode(uint32 nodeid);
609
610 // Guild/Arena Team
611 void SendArenaTeamCommandResult(uint32 team_action, std::string const& team, std::string const& player, uint32 error_id = 0);
612 void SendNotInArenaTeamPacket(uint8 type);
613 void SendPetitionShowList(ObjectGuid guid);
614
615 void BuildPartyMemberStatsChangedPacket(Player* player, WorldPacket* data);
616
617 void DoLootRelease(ObjectGuid lguid);
618
619 // Account mute time
620 bool CanSpeak() const;
622
623 // Locales
624 LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
625 LocaleConstant GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
626
627 Minutes GetTimezoneOffset() const { return _timezoneOffset; }
628
629 char const* GetTrinityString(uint32 entry) const;
630
631 uint32 GetLatency() const { return m_latency; }
632 void SetLatency(uint32 latency) { m_latency = latency; }
633
634 std::atomic<time_t> m_timeOutTime;
635
636 void ResetTimeOutTime(bool onlyActive);
637
638 bool IsConnectionIdle() const;
639
640 // Recruit-A-Friend Handling
641 uint32 GetRecruiterId() const { return recruiterId; }
642 bool IsARecruiter() const { return isRecruiter; }
643
644 // Time Synchronisation
645 void ResetTimeSync();
646 void SendTimeSync();
647 uint32 AdjustClientMovementTime(uint32 time) const;
648
649 // Packets cooldown
650 time_t GetCalendarEventCreationCooldown() const { return _calendarEventCreationCooldown; }
651 void SetCalendarEventCreationCooldown(time_t cooldown) { _calendarEventCreationCooldown = cooldown; }
652
653 public: // opcodes handlers
654
655 void Handle_NULL(WorldPacket& recvPacket); // not used
656 void Handle_EarlyProccess(WorldPacket& recvPacket); // just mark packets processed in WorldSocket::ReadDataHandler
657 void Handle_ServerSide(WorldPacket& recvPacket); // sever side only, can't be accepted from client
658 void Handle_Deprecated(WorldPacket& recvPacket); // never used anymore by client
659
660 void HandleCharEnumOpcode(WorldPacket& recvPacket);
661 void HandleCharDeleteOpcode(WorldPackets::Character::CharDelete& charDelete);
662 void HandleCharCreateOpcode(WorldPackets::Character::CreateCharacter& charCreate);
663 void HandlePlayerLoginOpcode(WorldPacket& recvPacket);
664 void HandleCharEnum(PreparedQueryResult result);
665 void HandlePlayerLogin(LoginQueryHolder const& holder);
666 void HandleCharRaceOrFactionChange(WorldPackets::Character::CharRaceOrFactionChange& packet);
667 void HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPackets::Character::CharRaceOrFactionChangeInfo> factionChangeInfo, PreparedQueryResult result);
668 void HandleCharRenameOpcode(WorldPackets::Character::CharacterRenameRequest& request);
669 void HandleCharRenameCallBack(std::shared_ptr<WorldPackets::Character::CharacterRenameInfo> renameInfo, PreparedQueryResult result);
670 void HandleSetPlayerDeclinedNames(WorldPacket& recvData);
671 void HandleAlterAppearance(WorldPacket& recvData);
672 void HandleCharCustomize(WorldPackets::Character::CharCustomize& packet);
673 void HandleCharCustomizeCallback(std::shared_ptr<WorldPackets::Character::CharCustomizeInfo> customizeInfo, PreparedQueryResult result);
674 void HandleOpeningCinematic(WorldPackets::Misc::OpeningCinematic& packet);
675
676 void SendCharCreate(ResponseCodes result);
677 void SendCharDelete(ResponseCodes result);
678 void SendCharRename(ResponseCodes result, WorldPackets::Character::CharacterRenameInfo const* renameInfo);
679 void SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo);
680 void SendCharFactionChange(ResponseCodes result, WorldPackets::Character::CharRaceOrFactionChangeInfo const* factionChangeInfo);
681 void SendSetPlayerDeclinedNamesResult(DeclinedNameResult result, ObjectGuid guid);
682 void SendBarberShopResult(BarberShopResult result);
683
684 // played time
685 void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet);
686
687 // new inspect
688 void HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect);
689
690 // new party stats
691 void HandleInspectHonorStatsOpcode(WorldPacket& recvPacket);
692
693 void HandleForceSpeedChangeAck(WorldPacket& recvData);
694 void HandleMoveKnockBackAck(WorldPacket& recvPacket);
695 void HandleMoveTeleportAck(WorldPacket& recvPacket);
696 void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
697 void HandleFeatherFallAck(WorldPacket& recvData);
698 void HandleMoveHoverAck(WorldPacket& recvData);
699 void HandleMoveUnRootAck(WorldPacket& recvPacket);
700 void HandleMoveRootAck(WorldPacket& recvPacket);
701 void HandleMoveSetCanFlyAckOpcode(WorldPacket& recvData);
702 void HandleMoveSetCanTransitionBetweenSwinAndFlyAck(WorldPacket& recvData);
703 void HandleMoveGravityDisableAck(WorldPacket& recvData);
704 void HandleMoveGravityEnableAck(WorldPacket& recvData);
705 void HandleMoveSetCollisionHgtAck(WorldPacket& recvData);
706
707 void HandleMountSpecialAnimOpcode(WorldPacket& recvdata);
708
709 // character view
710 void HandleShowingHelmOpcode(WorldPackets::Character::ShowingHelm& packet);
711 void HandleShowingCloakOpcode(WorldPackets::Character::ShowingCloak& packet);
712
713 // repair
714 void HandleRepairItemOpcode(WorldPacket& recvPacket);
715
716 void HandleRepopRequest(WorldPackets::Misc::RepopRequest& packet);
717 void HandleAutostoreLootItemOpcode(WorldPacket& recvPacket);
718 void HandleLootMoneyOpcode(WorldPacket& recvPacket);
719 void HandleLootOpcode(WorldPacket& recvPacket);
720 void HandleLootReleaseOpcode(WorldPacket& recvPacket);
721 void HandleLootMasterGiveOpcode(WorldPacket& recvPacket);
722 void HandleWhoOpcode(WorldPacket& recvPacket);
723 void HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& logoutRequest);
724 void HandlePlayerLogoutOpcode(WorldPackets::Character::PlayerLogout& playerLogout);
725 void HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& logoutCancel);
726
727 // GM Ticket opcodes
728 void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
729 void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
730 void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
731 void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
732 void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
733 void HandleGMSurveySubmit(WorldPacket& recvPacket);
734 void HandleReportLag(WorldPacket& recvPacket);
735 void HandleGMResponseResolve(WorldPacket& recvPacket);
736
737 void HandleTogglePvP(WorldPackets::Misc::TogglePvP& togglePvP);
738
739 void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
740 void HandleSetSelectionOpcode(WorldPacket& recvPacket);
741 void HandleStandStateChangeOpcode(WorldPacket& recvPacket);
742 void HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& packet);
743
744 // Social
745 void HandleContactListOpcode(WorldPacket& recvPacket);
746 void HandleAddFriendOpcode(WorldPacket& recvPacket);
747 void HandleDelFriendOpcode(WorldPacket& recvPacket);
748 void HandleAddIgnoreOpcode(WorldPacket& recvPacket);
749 void HandleDelIgnoreOpcode(WorldPacket& recvPacket);
750 void HandleSetContactNotesOpcode(WorldPacket& recvPacket);
751 void HandleBugOpcode(WorldPacket& recvPacket);
752 void HandleSetAmmoOpcode(WorldPacket& recvPacket);
753 void HandleItemNameQueryOpcode(WorldPacket& recvPacket);
754
755 void HandleAreaTriggerOpcode(WorldPacket& recvPacket);
756
757 void HandleSetFactionAtWar(WorldPacket& recvData);
758 void HandleSetFactionCheat(WorldPacket& recvData);
759 void HandleSetWatchedFactionOpcode(WorldPacket& recvData);
760 void HandleSetFactionInactiveOpcode(WorldPacket& recvData);
761
762 void HandleUpdateAccountData(WorldPacket& recvPacket);
763 void HandleRequestAccountData(WorldPacket& recvPacket);
764 void HandleSetActionButtonOpcode(WorldPacket& recvPacket);
765
766 void HandleGameObjectUseOpcode(WorldPacket& recPacket);
767 void HandleGameobjectReportUse(WorldPacket& recvPacket);
768
769 void HandleNameQueryOpcode(WorldPackets::Query::QueryPlayerName& queryPlayerName);
770
771 void HandleQueryTimeOpcode(WorldPacket& recvPacket);
772
773 void HandleCreatureQueryOpcode(WorldPackets::Query::QueryCreature& query);
774
775 void HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObject& query);
776
777 void HandleMoveWorldportAckOpcode(WorldPacket& recvPacket);
778 void HandleMoveWorldportAck(); // for server-side calls
779
780 // Validates that correct unit is moved, coords are in valid range and movement flags
781 bool ValidateMovementInfo(Unit const* mover, MovementInfo* mi) const;
782
783 void HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMovement& packet);
784 void HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movementInfo);
785 void HandleSetActiveMoverOpcode(WorldPacket& recvData);
786 void HandleMoveNotActiveMover(WorldPacket& recvData);
787 void HandleDismissControlledVehicle(WorldPacket& recvData);
788 void HandleRequestVehicleExit(WorldPacket& recvData);
789 void HandleChangeSeatsOnControlledVehicle(WorldPacket& recvData);
790 void HandleMoveTimeSkippedOpcode(WorldPacket& recvData);
791
792 void HandleRequestRaidInfoOpcode(WorldPacket& recvData);
793
794 void HandleGroupInviteOpcode(WorldPackets::Party::PartyInviteClient& packet);
795 void HandleGroupAcceptOpcode(WorldPacket& recvPacket);
796 void HandleGroupDeclineOpcode(WorldPacket& recvPacket);
797 void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
798 void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
799 void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
800 void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
801 void HandleOptOutOfLootOpcode(WorldPacket& recvData);
802 void HandleLootMethodOpcode(WorldPacket& recvPacket);
803 void HandleLootRoll(WorldPacket& recvData);
804 void HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData);
805 void HandleRaidTargetUpdateOpcode(WorldPacket& recvData);
806 void HandleRaidReadyCheckOpcode(WorldPacket& recvData);
807 void HandleRaidReadyCheckFinishedOpcode(WorldPacket& recvData);
808 void HandleGroupRaidConvertOpcode(WorldPacket& recvData);
809 void HandleGroupChangeSubGroupOpcode(WorldPacket& recvData);
810 void HandleGroupAssistantLeaderOpcode(WorldPacket& recvData);
811 void HandlePartyAssignmentOpcode(WorldPacket& recvData);
812
813 void HandlePetitionBuyOpcode(WorldPacket& recvData);
814 void HandlePetitionShowSignatures(WorldPacket& recvData);
815 void SendPetitionSigns(Petition const* petition, Player* sendTo);
816 void HandleQueryPetition(WorldPacket& recvData);
817 void HandlePetitionRenameGuild(WorldPacket& recvData);
818 void HandleSignPetition(WorldPacket& recvData);
819 void HandleDeclinePetition(WorldPacket& recvData);
820 void HandleOfferPetitionOpcode(WorldPacket& recvData);
821 void HandleTurnInPetitionOpcode(WorldPacket& recvData);
822
823 void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query);
824 void HandleGuildCreateOpcode(WorldPackets::Guild::GuildCreate& packet);
825 void HandleGuildInviteOpcode(WorldPackets::Guild::GuildInviteByName& packet);
826 void HandleGuildRemoveOpcode(WorldPackets::Guild::GuildOfficerRemoveMember& packet);
827 void HandleGuildAcceptOpcode(WorldPackets::Guild::AcceptGuildInvite& invite);
828 void HandleGuildDeclineOpcode(WorldPackets::Guild::GuildDeclineInvitation& decline);
829 void HandleGuildInfoOpcode(WorldPackets::Guild::GuildGetInfo& packet);
830 void HandleGuildEventLogQueryOpcode(WorldPackets::Guild::GuildEventLogQuery& packet);
831 void HandleGuildRosterOpcode(WorldPackets::Guild::GuildGetRoster& packet);
832 void HandleGuildPromoteOpcode(WorldPackets::Guild::GuildPromoteMember& promote);
833 void HandleGuildDemoteOpcode(WorldPackets::Guild::GuildDemoteMember& demote);
834 void HandleGuildLeaveOpcode(WorldPackets::Guild::GuildLeave& leave);
835 void HandleGuildDelete(WorldPackets::Guild::GuildDelete& packet);
836 void HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet);
837 void HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet);
838 void HandleGuildSetPublicNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet);
839 void HandleGuildSetOfficerNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet);
840 void HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet);
841 void HandleGuildAddRankOpcode(WorldPackets::Guild::GuildAddRank& packet);
842 void HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet);
843 void HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet);
844 void HandleSaveGuildEmblemOpcode(WorldPackets::Guild::SaveGuildEmblem& packet);
845
846 void HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvPacket);
847 void HandleTaxiQueryAvailableNodes(WorldPacket& recvPacket);
848 void HandleActivateTaxiOpcode(WorldPacket& recvPacket);
849 void HandleActivateTaxiExpressOpcode(WorldPacket& recvPacket);
850 void HandleMoveSplineDoneOpcode(WorldPacket& recvPacket);
851 void SendActivateTaxiReply(ActivateTaxiReply reply);
852
853 void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket);
854 void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
855 void HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpell& packet);
856 void HandlePetitionShowListOpcode(WorldPacket& recvPacket);
857 void HandleGossipHelloOpcode(WorldPacket& recvPacket);
858 void HandleGossipSelectOptionOpcode(WorldPacket& recvPacket);
859 void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket);
860 void HandleNpcTextQueryOpcode(WorldPacket& recvPacket);
861 void HandleBinderActivateOpcode(WorldPacket& recvPacket);
862 void HandleRequestStabledPets(WorldPacket& recvPacket);
863 void HandleStablePet(WorldPacket& recvPacket);
864 void HandleUnstablePet(WorldPacket& recvPacket);
865 void HandleBuyStableSlot(WorldPacket& recvPacket);
866 void HandleStableRevivePet(WorldPacket& recvPacket);
867 void HandleStableSwapPet(WorldPacket& recvPacket);
868
869 void HandleDuelAcceptedOpcode(WorldPacket& recvPacket);
870 void HandleDuelCancelledOpcode(WorldPacket& recvPacket);
871
872 void HandleAcceptTradeOpcode(WorldPacket& recvPacket);
873 void HandleBeginTradeOpcode(WorldPacket& recvPacket);
874 void HandleBusyTradeOpcode(WorldPacket& recvPacket);
875 void HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade& cancelTrade);
876 void HandleClearTradeItemOpcode(WorldPacket& recvPacket);
877 void HandleIgnoreTradeOpcode(WorldPacket& recvPacket);
878 void HandleInitiateTradeOpcode(WorldPacket& recvPacket);
879 void HandleSetTradeGoldOpcode(WorldPacket& recvPacket);
880 void HandleSetTradeItemOpcode(WorldPacket& recvPacket);
881 void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
882
883 void HandleAuctionHelloOpcode(WorldPacket& recvPacket);
884 void HandleAuctionListItems(WorldPacket& recvData);
885 void HandleAuctionListBidderItems(WorldPacket& recvData);
886 void HandleAuctionSellItem(WorldPacket& recvData);
887 void HandleAuctionRemoveItem(WorldPacket& recvData);
888 void HandleAuctionListOwnerItems(WorldPacket& recvData);
889 void HandleAuctionPlaceBid(WorldPacket& recvData);
890 void HandleAuctionListPendingSales(WorldPacket& recvData);
891
892 // Bank
893 void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet);
894 void HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet);
895 void HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet);
896 void HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& buyBankSlot);
897
898 void HandleGetMailList(WorldPackets::Mail::MailGetList& getList);
899 void HandleSendMail(WorldPackets::Mail::SendMail& sendMail);
900 void HandleMailTakeMoney(WorldPackets::Mail::MailTakeMoney& takeMoney);
901 void HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& takeItem);
902 void HandleMailMarkAsRead(WorldPackets::Mail::MailMarkAsRead& markAsRead);
903 void HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSender& returnToSender);
904 void HandleMailDelete(WorldPackets::Mail::MailDelete& mailDelete);
905 void HandleItemTextQuery(WorldPacket& recvData);
906 void HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextItem& createTextItem);
907 void HandleQueryNextMailTime(WorldPackets::Mail::MailQueryNextMailTime& queryNextMailTime);
908
909 void HandleSplitItemOpcode(WorldPacket& recvPacket);
910 void HandleSwapInvItemOpcode(WorldPacket& recvPacket);
911 void HandleDestroyItemOpcode(WorldPacket& recvPacket);
912 void HandleAutoEquipItemOpcode(WorldPacket& recvPacket);
913 void HandleItemQuerySingleOpcode(WorldPackets::Query::QueryItemSingle& query);
914 void HandleSellItemOpcode(WorldPacket& recvPacket);
915 void HandleBuyItemInSlotOpcode(WorldPacket& recvPacket);
916 void HandleBuyItemOpcode(WorldPacket& recvPacket);
917 void HandleListInventoryOpcode(WorldPacket& recvPacket);
918 void HandleAutoStoreBagItemOpcode(WorldPacket& recvPacket);
919 void HandleReadItem(WorldPacket& recvPacket);
920 void HandleAutoEquipItemSlotOpcode(WorldPacket& recvPacket);
921 void HandleSwapItem(WorldPacket& recvPacket);
922 void HandleBuybackItem(WorldPacket& recvPacket);
923 void HandleWrapItemOpcode(WorldPacket& recvPacket);
924
925 void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
926 void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);
927 void HandleSetSheathedOpcode(WorldPackets::Combat::SetSheathed& packet);
928
929 void HandleUseItemOpcode(WorldPacket& recvPacket);
930 void HandleOpenItemOpcode(WorldPacket& recvPacket);
931 void HandleOpenWrappedItemCallback(uint16 pos, ObjectGuid itemGuid, PreparedQueryResult result);
932 void HandleCastSpellOpcode(WorldPacket& recvPacket);
933 void HandleCancelCastOpcode(WorldPackets::Spells::CancelCast& cancelCast);
934 void HandleCancelAuraOpcode(WorldPackets::Spells::CancelAura& cancelAura);
935 void HandleCancelGrowthAuraOpcode(WorldPackets::Spells::CancelGrowthAura& cancelGrowthAura);
936 void HandleCancelMountAuraOpcode(WorldPackets::Spells::CancelMountAura& cancelMountAura);
937 void HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::CancelAutoRepeatSpell& cancelAutoRepeatSpell);
938 void HandleCancelChanneling(WorldPackets::Spells::CancelChannelling& cancelChanneling);
939
940 void HandleLearnTalentOpcode(WorldPacket& recvPacket);
941 void HandleLearnPreviewTalents(WorldPacket& recvPacket);
942 void HandleTalentWipeConfirmOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe);
943 void HandleUnlearnSkillOpcode(WorldPacket& recvPacket);
944
945 void HandleQuestgiverStatusQueryOpcode(WorldPacket& recvPacket);
946 void HandleQuestgiverStatusMultipleQuery(WorldPacket& recvPacket);
947 void HandleQuestgiverHelloOpcode(WorldPacket& recvPacket);
948 void HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvPacket);
949 void HandleQuestgiverQueryQuestOpcode(WorldPacket& recvPacket);
950 void HandleQuestgiverChooseRewardOpcode(WorldPacket& recvPacket);
951 void HandleQuestgiverRequestRewardOpcode(WorldPacket& recvPacket);
952 void HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& query);
953 void HandleQuestgiverCancel(WorldPacket& recvData);
954 void HandleQuestLogSwapQuest(WorldPacket& recvData);
955 void HandleQuestLogRemoveQuest(WorldPacket& recvData);
956 void HandleQuestConfirmAccept(WorldPacket& recvData);
957 void HandleQuestgiverCompleteQuest(WorldPacket& recvData);
958 void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket);
959 void HandlePushQuestToParty(WorldPacket& recvPacket);
960 void HandleQuestPushResult(WorldPacket& recvPacket);
961
962 void HandleMessagechatOpcode(WorldPacket& recvPacket);
963 void SendPlayerNotFoundNotice(std::string const& name);
964 void SendPlayerAmbiguousNotice(std::string const& name);
965 void SendWrongFactionNotice();
966 void SendChatRestrictedNotice(ChatRestrictionType restriction);
967 void HandleTextEmoteOpcode(WorldPacket& recvPacket);
968 void HandleChatIgnoredOpcode(WorldPacket& recvPacket);
969
970 void HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& packet);
971 void HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& packet);
972 void HandleQueryCorpseTransport(WorldPackets::Query::QueryCorpseTransport& packet);
973 void HandleResurrectResponse(WorldPackets::Misc::ResurrectResponse& packet);
974 void HandleSummonResponseOpcode(WorldPacket& recvData);
975
976 void HandleJoinChannel(WorldPacket& recvPacket);
977 void HandleLeaveChannel(WorldPacket& recvPacket);
978 void HandleChannelList(WorldPacket& recvPacket);
979 void HandleChannelPassword(WorldPacket& recvPacket);
980 void HandleChannelSetOwner(WorldPacket& recvPacket);
981 void HandleChannelOwner(WorldPacket& recvPacket);
982 void HandleChannelModerator(WorldPacket& recvPacket);
983 void HandleChannelUnmoderator(WorldPacket& recvPacket);
984 void HandleChannelMute(WorldPacket& recvPacket);
985 void HandleChannelUnmute(WorldPacket& recvPacket);
986 void HandleChannelInvite(WorldPacket& recvPacket);
987 void HandleChannelKick(WorldPacket& recvPacket);
988 void HandleChannelBan(WorldPacket& recvPacket);
989 void HandleChannelUnban(WorldPacket& recvPacket);
990 void HandleChannelAnnouncements(WorldPacket& recvPacket);
991 void HandleChannelDeclineInvite(WorldPacket& recvPacket);
992 void HandleChannelDisplayListQuery(WorldPacket& recvPacket);
993 void HandleGetChannelMemberCount(WorldPacket& recvPacket);
994 void HandleSetChannelWatch(WorldPacket& recvPacket);
995
996 void HandleCompleteCinematic(WorldPackets::Misc::CompleteCinematic& packet);
997 void HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCamera& packet);
998 void HandleCompleteMovie(WorldPackets::Misc::CompleteMovie& packet);
999
1000 void HandleQueryPageText(WorldPacket& recvPacket);
1001
1002 void HandleTutorialFlag (WorldPacket& recvData);
1003 void HandleTutorialClear(WorldPacket& recvData);
1004 void HandleTutorialReset(WorldPacket& recvData);
1005
1006 //Pet
1007 void HandlePetAction(WorldPacket& recvData);
1008 void HandlePetStopAttack(WorldPackets::Pet::PetStopAttack& packet);
1009 void HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spellid, uint16 flag, ObjectGuid guid2);
1010 void HandleQueryPetName(WorldPacket& recvData);
1011 void HandlePetSetAction(WorldPacket& recvData);
1012 void HandlePetAbandon(WorldPackets::Pet::PetAbandon& packet);
1013 void HandlePetRename(WorldPacket& recvData);
1014 void HandlePetCancelAuraOpcode(WorldPackets::Spells::PetCancelAura& packet);
1015 void HandlePetSpellAutocastOpcode(WorldPackets::Pet::PetSpellAutocast& packet);
1016 void HandlePetCastSpellOpcode(WorldPacket& recvPacket);
1017 void HandlePetLearnTalent(WorldPacket& recvPacket);
1018 void HandleLearnPreviewTalentsPet(WorldPacket& recvPacket);
1019
1020 void HandleSetActionBarToggles(WorldPacket& recvData);
1021
1022 void HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& totemDestroyed);
1023 void HandleDismissCritter(WorldPackets::Pet::DismissCritter& dismissCritter);
1024
1025 //Battleground
1026 void HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello);
1027 void HandleBattlemasterJoinOpcode(WorldPackets::Battleground::BattlemasterJoin& battlemasterJoin);
1028 void HandleBattlegroundPlayerPositionsOpcode(WorldPackets::Battleground::BattlegroundPlayerPositionsRequest& battlegroundPlayerPositionsRequest);
1029 void HandlePVPLogDataOpcode(WorldPackets::Battleground::PVPLogDataRequest& pvpLogDataRequest);
1030 void HandleBattleFieldPortOpcode(WorldPackets::Battleground::BattlefieldPort& battlefieldPort);
1031 void HandleBattlefieldListOpcode(WorldPackets::Battleground::BattlefieldListRequest& battlefieldList);
1032 void HandleBattlefieldLeaveOpcode(WorldPackets::Battleground::BattlefieldLeave& battlefieldLeave);
1033 void HandleBattlemasterJoinArena(WorldPackets::Battleground::BattlemasterJoinArena& packet);
1034 void HandleReportPvPAFK(WorldPackets::Battleground::ReportPvPPlayerAFK& reportPvPPlayerAFK);
1035 void HandleAreaSpiritHealerQueryOpcode(WorldPackets::Battleground::AreaSpiritHealerQuery& areaSpiritHealerQuery);
1036 void HandleAreaSpiritHealerQueueOpcode(WorldPackets::Battleground::AreaSpiritHealerQueue& areaSpiritHealerQueue);
1037 void HandleHearthAndResurrect(WorldPackets::Battleground::HearthAndResurrect& hearthAndResurrect);
1038 void HandleRequestBattlefieldStatusOpcode(WorldPackets::Battleground::RequestBattlefieldStatus& requestBattlefieldStatus);
1039
1040 // Battlefield
1041 void SendBfInvitePlayerToWar(uint32 battleId, uint32 zoneId, uint32 time);
1042 void SendBfInvitePlayerToQueue(uint32 battleId);
1043 void SendBfQueueInviteResponse(uint32 battleId, uint32 zoneId, bool canQueue = true, bool full = false);
1044 void SendBfEntered(uint32 battleId);
1045 void SendBfLeaveMessage(uint32 battleId, BFLeaveReason reason = BF_LEAVE_REASON_EXITED);
1046 void HandleBfQueueInviteResponse(WorldPacket& recvData);
1047 void HandleBfEntryInviteResponse(WorldPacket& recvData);
1048 void HandleBfQueueExitRequest(WorldPacket& recvData);
1049
1050 void HandleWardenDataOpcode(WorldPacket& recvData);
1051 void HandleWorldTeleportOpcode(WorldPackets::Misc::WorldTeleport& worldTeleport);
1052 void HandleMinimapPingOpcode(WorldPacket& recvData);
1053 void HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet);
1054 void HandleFarSightOpcode(WorldPacket& recvData);
1055 void HandleSetDungeonDifficultyOpcode(WorldPacket& recvData);
1056 void HandleSetRaidDifficultyOpcode(WorldPacket& recvData);
1057 void HandleSetTitleOpcode(WorldPacket& recvData);
1058 void HandleRealmSplitOpcode(WorldPacket& recvData);
1059 void HandleTimeSyncResponse(WorldPacket& recvData);
1060 void HandleWhoIsOpcode(WorldPacket& recvData);
1061 void HandleResetInstancesOpcode(WorldPacket& recvData);
1062 void HandleInstanceLockResponse(WorldPacket& recvPacket);
1063
1064 // Looking for Dungeon/Raid
1065 void HandleLfgSetCommentOpcode(WorldPacket& recvData);
1066 void HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& recvData);
1067 void HandleLfgPartyLockInfoRequestOpcode(WorldPacket& recvData);
1068 void SendLfgPlayerLockInfo();
1069 void SendLfgPartyLockInfo();
1070 void HandleLfgJoinOpcode(WorldPackets::LFG::LFGJoin& lfgJoin);
1071 void HandleLfgLeaveOpcode(WorldPackets::LFG::LFGLeave& lfgleave);
1072 void HandleLfgSetRolesOpcode(WorldPacket& recvData);
1073 void HandleLfgProposalResultOpcode(WorldPacket& recvData);
1074 void HandleLfgSetBootVoteOpcode(WorldPacket& recvData);
1075 void HandleLfgTeleportOpcode(WorldPacket& recvData);
1076 void HandleLfrJoinOpcode(WorldPacket& recvData);
1077 void HandleLfrLeaveOpcode(WorldPacket& recvData);
1078 void HandleLfgGetStatus(WorldPacket& recvData);
1079
1080 void SendLfgUpdatePlayer(lfg::LfgUpdateData const& updateData);
1081 void SendLfgUpdateParty(lfg::LfgUpdateData const& updateData);
1082 void SendLfgRoleChosen(ObjectGuid guid, uint8 roles);
1083 void SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& pRoleCheck);
1084 void SendLfgLfrList(bool update);
1085 void SendLfgJoinResult(lfg::LfgJoinResultData const& joinData);
1086 void SendLfgQueueStatus(lfg::LfgQueueStatusData const& queueData);
1087 void SendLfgPlayerReward(lfg::LfgPlayerRewardData const& lfgPlayerRewardData);
1088 void SendLfgBootProposalUpdate(lfg::LfgPlayerBoot const& boot);
1089 void SendLfgUpdateProposal(lfg::LfgProposal const& proposal);
1090 void SendLfgDisabled();
1091 void SendLfgOfferContinue(uint32 dungeonEntry);
1092 void SendLfgTeleportError(uint8 err);
1093
1094 // Arena Team
1095 void HandleInspectArenaTeamsOpcode(WorldPacket& recvData);
1096 void HandleArenaTeamQueryOpcode(WorldPacket& recvData);
1097 void HandleArenaTeamRosterOpcode(WorldPacket& recvData);
1098 void HandleArenaTeamInviteOpcode(WorldPacket& recvData);
1099 void HandleArenaTeamAcceptOpcode(WorldPacket& recvData);
1100 void HandleArenaTeamDeclineOpcode(WorldPacket& recvData);
1101 void HandleArenaTeamLeaveOpcode(WorldPacket& recvData);
1102 void HandleArenaTeamRemoveOpcode(WorldPacket& recvData);
1103 void HandleArenaTeamDisbandOpcode(WorldPacket& recvData);
1104 void HandleArenaTeamLeaderOpcode(WorldPacket& recvData);
1105
1106 void HandleSelfResOpcode(WorldPacket& recvData);
1107 void HandleComplainOpcode(WorldPacket& recvData);
1108 void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& packet);
1109
1110 // Socket gem
1111 void HandleSocketOpcode(WorldPacket& recvData);
1112
1113 void HandleCancelTempEnchantmentOpcode(WorldPacket& recvData);
1114
1115 void HandleItemRefundInfoRequest(WorldPacket& recvData);
1116 void HandleItemRefund(WorldPacket& recvData);
1117
1118 void HandleChannelVoiceOnOpcode(WorldPacket& recvData);
1119 void HandleVoiceSessionEnableOpcode(WorldPacket& recvData);
1120 void HandleSetActiveVoiceChannel(WorldPacket& recvData);
1121 void HandleSetTaxiBenchmarkOpcode(WorldPacket& recvData);
1122
1123 // Guild Bank
1124 void HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery& packet);
1125 void HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& packet);
1126 void HandleGuildBankActivate(WorldPackets::Guild::GuildBankActivate& packet);
1127 void HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet);
1128 void HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet);
1129 void HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet);
1130 void HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet);
1131 void HandleGuildBankSwapItems(WorldPackets::Guild::GuildBankSwapItems& packet);
1132
1133 void HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet);
1134 void HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet);
1135 void HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery& packet);
1136 void HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet);
1137
1138 // Refer-a-Friend
1139 void HandleGrantLevel(WorldPacket& recvData);
1140 void HandleAcceptGrantLevel(WorldPacket& recvData);
1141
1142 // Calendar
1143 void HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGetCalendar& calendarGetCalendar);
1144 void HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEvent& calendarGetEvent);
1145 void HandleCalendarGuildFilter(WorldPackets::Calendar::CalendarGuildFilter& calendarGuildFilter);
1146 void HandleCalendarArenaTeam(WorldPackets::Calendar::CalendarArenaTeam& calendarArenaTeam);
1147 void HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent);
1148 void HandleCalendarUpdateEvent(WorldPackets::Calendar::CalendarUpdateEvent& calendarUpdateEvent);
1149 void HandleCalendarRemoveEvent(WorldPackets::Calendar::CalendarRemoveEvent& calendarRemoveEvent);
1150 void HandleCalendarCopyEvent(WorldPackets::Calendar::CalendarCopyEvent& calendarCopyEvent);
1151 void HandleCalendarEventInvite(WorldPackets::Calendar::CalendarInvite& calendarEventInvite);
1152 void HandleCalendarEventRsvp(WorldPackets::Calendar::CalendarRSVP& calendarRSVP);
1153 void HandleCalendarEventRemoveInvite(WorldPackets::Calendar::CalendarRemoveInvite& calendarRemoveInvite);
1154 void HandleCalendarEventStatus(WorldPackets::Calendar::CalendarStatus& calendarStatus);
1155 void HandleCalendarEventModeratorStatus(WorldPackets::Calendar::CalendarModeratorStatusQuery& calendarModeratorStatus);
1156 void HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& calendarComplain);
1157 void HandleCalendarGetNumPending(WorldPackets::Calendar::CalendarGetNumPending& calendarGetNumPending);
1158 void HandleCalendarEventSignup(WorldPackets::Calendar::CalendarEventSignUp& calendarEventSignUp);
1159
1160 void SendCalendarRaidLockoutAdded(InstanceSave const* save);
1161 void SendCalendarRaidLockoutRemoved(InstanceSave const* save);
1162 void SendCalendarRaidLockoutUpdated(InstanceSave const* save);
1163 void HandleSetSavedInstanceExtend(WorldPackets::Calendar::SetSavedInstanceExtend& setSavedInstanceExtend);
1164
1165 void HandleSpellClick(WorldPacket& recvData);
1166 void HandleMirrorImageDataRequest(WorldPacket& recvData);
1167 void HandleRemoveGlyph(WorldPacket& recvData);
1168 void HandleQueryInspectAchievements(WorldPacket& recvData);
1169 void HandleEquipmentSetSave(WorldPacket& recvData);
1170 void HandleEquipmentSetDelete(WorldPacket& recvData);
1171 void HandleEquipmentSetUse(WorldPacket& recvData);
1172 void HandleWorldStateUITimerUpdate(WorldPacket& recvData);
1173 void HandleReadyForAccountDataTimes(WorldPacket& recvData);
1174 void HandleQueryQuestsCompleted(WorldPacket& recvData);
1175 void HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& query);
1176 void HandleEjectPassenger(WorldPacket& data);
1177 void HandleEnterPlayerVehicle(WorldPacket& data);
1178 void HandleUpdateProjectilePosition(WorldPacket& recvPacket);
1179 void HandleUpdateMissileTrajectory(WorldPacket& recvPacket);
1180
1181 public:
1182 QueryCallbackProcessor& GetQueryProcessor() { return _queryProcessor; }
1183 TransactionCallback& AddTransactionCallback(TransactionCallback&& callback);
1184 SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback);
1185
1186 private:
1187 void ProcessQueryCallbacks();
1188
1192
1193 friend class World;
1194 protected:
1196 {
1197 friend class World;
1198 public:
1200 bool EvaluateOpcode(WorldPacket& p, time_t time) const;
1201 protected:
1208
1209 uint32 GetMaxPacketCounterAllowed(uint16 opcode) const;
1210
1212
1213 private:
1215 typedef std::unordered_map<uint16, PacketCounter> PacketThrottlingMap;
1216 // mark this member as "mutable" so it can be modified even in const functions
1218
1219 DosProtection(DosProtection const& right) = delete;
1220 DosProtection& operator=(DosProtection const& right) = delete;
1221 } AntiDOS;
1222
1223 private:
1224 // private trade methods
1225 void moveItems(Item* myItems[], Item* hisItems[]);
1226
1227 bool CanUseBank(ObjectGuid bankerGUID = ObjectGuid::Empty) const;
1228
1229 // logging helper
1230 void LogUnexpectedOpcode(WorldPacket* packet, char const* status, const char *reason);
1231 void LogUnprocessedTail(WorldPacket* packet);
1232
1233 // EnumData helpers
1235 {
1236 return _legitCharacters.find(lowGUID) != _legitCharacters.end();
1237 }
1238
1239 // Movement helpers
1240 Unit* ValidateAndGetUnitBeingMoved(ObjectGuid guid, bool forStatusAck) const;
1241
1242 // this stores the GUIDs of the characters who can login
1243 // characters who failed on Player::BuildEnumData shouldn't login
1245
1246 ObjectGuid::LowType m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
1248 std::shared_ptr<WorldSocket> m_Socket;
1249 std::string m_Address; // Current Remote Address
1250 // std::string m_LAddress; // Last Attempted Remote Adress - we can not set attempted ip for a non-existing session!
1251
1254 std::string _accountName;
1256
1257 // Warden
1258 std::unique_ptr<Warden> _warden; // Remains NULL if Warden system is not enabled by config
1259
1261 bool m_inQueue; // session wait in auth.queue
1262 bool m_playerLoading; // code processed in LoginPlayer
1263 bool m_playerLogout; // code processed in LogoutPlayer
1269 std::atomic<uint32> m_latency;
1273
1274 std::unordered_map<uint32 /*instanceId*/, SystemTimePoint/*releaseTime*/> _instanceResetTimes;
1275
1276 struct Addons
1277 {
1278 static uint32 constexpr MaxSecureAddons = 25;
1279
1280 std::vector<SecureAddonInfo> SecureAddons;
1281 uint32 LastBannedAddOnTimestamp = 0;
1282 } _addons;
1290
1291 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.
1293 void ComputeNewClockDelta();
1294
1295 std::map<uint32, uint32> _pendingTimeSyncRequests; // key: counter. value: server time when packet with that counter was sent.
1298
1299 // Packets cooldown
1302
1303 WorldSession(WorldSession const& right) = delete;
1304 WorldSession& operator=(WorldSession const& right) = delete;
1305};
1306#endif
AuctionAction
AuctionError
std::array< uint8, SESSION_KEY_LENGTH > SessionKey
Definition AuthDefines.h:25
LocaleConstant
Definition Common.h:48
AccountTypes
Definition Common.h:39
#define MAX_ACCOUNT_TUTORIAL_VALUES
Definition Common.h:65
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition Define.h:114
uint8_t uint8
Definition Define.h:135
int64_t int64
Definition Define.h:128
#define ATTR_PRINTF(F, V)
COREDEBUG.
Definition Define.h:75
int32_t int32
Definition Define.h:129
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
std::chrono::system_clock::time_point SystemTimePoint
Definition Duration.h:37
std::chrono::minutes Minutes
Minutes shorthand typedef.
Definition Duration.h:30
InventoryResult
Definition ItemDefines.h:25
std::set< ObjectGuid > GuidSet
Definition ObjectGuid.h:260
Spells
Definition PlayerAI.cpp:32
ResponseCodes
TradeStatus
ActivateTaxiReply
PartyResult
Data
Definition Guild.h:284
Definition Item.h:62
virtual bool Process(WorldPacket *packet) override
MapSessionFilter(WorldSession *pSession)
virtual bool ProcessUnsafe() const override
static ObjectGuid const Empty
Definition ObjectGuid.h:140
uint32 LowType
Definition ObjectGuid.h:142
virtual bool Process(WorldPacket *)
PacketFilter & operator=(PacketFilter const &right)=delete
virtual bool ProcessUnsafe() const
PacketFilter(PacketFilter const &right)=delete
PacketFilter(WorldSession *pSession)
WorldSession *const m_pSession
virtual ~PacketFilter()
Definition Pet.h:40
Definition Totem.h:39
Definition Unit.h:769
virtual bool Process(WorldPacket *packet) override
WorldSessionFilter(WorldSession *pSession)
DosProtection(DosProtection const &right)=delete
DosProtection & operator=(DosProtection const &right)=delete
std::unordered_map< uint16, PacketCounter > PacketThrottlingMap
PacketThrottlingMap _PacketThrottlingMap
Player session in the World.
GuidSet _legitCharacters
bool m_playerRecentlyLogout
AccountData * GetAccountData(AccountDataType type)
uint8 Expansion() const
std::string m_Address
time_t GetCalendarEventCreationCooldown() const
bool isLogingOut() const
Is the user engaged in a log out process?
LocaleConstant m_sessionDbLocaleIndex
AsyncCallbackProcessor< SQLQueryHolderCallback > _queryHolderProcessor
QueryCallbackProcessor _queryProcessor
AccountTypes GetSecurity() const
LocaleConstant GetSessionDbLocaleIndex() const
bool PlayerDisconnected() const
int64 _timeSyncClockDelta
std::shared_ptr< WorldSocket > m_Socket
std::map< uint32, uint32 > _pendingTimeSyncRequests
time_t _calendarEventCreationCooldown
bool PlayerRecentlyLoggedOut() const
std::atomic< time_t > m_timeOutTime
bool PlayerLogout() const
uint32 _timeSyncTimer
Minutes GetTimezoneOffset() const
LocaleConstant GetSessionDbcLocale() const
uint32 GetRecruiterId() const
Player * GetPlayer() const
rbac::RBACData * _RBACData
bool PlayerLogoutWithSave() const
bool PlayerLoading() const
bool IsARecruiter() const
Warden * GetWarden()
ObjectGuid m_currentBankerGUID
void SetLogoutStartTime(time_t requestTime)
Engage the logout process for the user.
std::string _accountName
std::string const & GetAccountName() const
QueryCallbackProcessor & GetQueryProcessor()
uint32 _timeSyncNextCounter
bool IsLegitCharacterForAccount(ObjectGuid lowGUID)
std::string const & GetRemoteAddress() const
void SetCalendarEventCreationCooldown(time_t cooldown)
void SetInQueue(bool state)
Session in auth.queue currently.
ObjectGuid::LowType m_GUIDLow
WorldSession(WorldSession const &right)=delete
uint32 GetAccountId() const
std::unordered_map< uint32, SystemTimePoint > _instanceResetTimes
Player * _player
Warden const * GetWarden() const
uint8 m_TutorialsChanged
uint32 GetTutorialInt(uint8 index) const
GameClient * _gameClient
AccountTypes _security
uint32 GetLatency() const
WorldSession & operator=(WorldSession const &right)=delete
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
Minutes _timezoneOffset
The World.
Definition World.h:569
Opcodes
Definition Opcodes.h:29
uint32 constexpr MAX_CHARACTERS_PER_REALM
ChatRestrictionType
TutorialsFlag
BarberShopResult
DeclinedNameResult
PartyOperation
AccountDataType
BFLeaveReason
#define NUM_ACCOUNT_DATA_TYPES
@ ERR_CHAT_THROTTLED
@ ERR_YELL_RESTRICTED
@ ERR_CHAT_RESTRICTED
@ ERR_USER_SQUELCHED
@ TUTORIALS_FLAG_LOADED_FROM_DB
@ TUTORIALS_FLAG_CHANGED
@ TUTORIALS_FLAG_NONE
@ BARBER_SHOP_RESULT_NO_MONEY_2
@ BARBER_SHOP_RESULT_SUCCESS
@ BARBER_SHOP_RESULT_NO_MONEY
@ BARBER_SHOP_RESULT_NOT_ON_CHAIR
@ DECLINED_NAMES_RESULT_SUCCESS
@ DECLINED_NAMES_RESULT_ERROR
@ PARTY_OP_INVITE
@ PARTY_OP_SWAP
@ PARTY_OP_UNINVITE
@ PARTY_OP_LEAVE
@ PER_CHARACTER_MACROS_CACHE
@ GLOBAL_MACROS_CACHE
@ PER_CHARACTER_CONFIG_CACHE
@ GLOBAL_BINDINGS_CACHE
@ PER_CHARACTER_CHAT_CACHE
@ PER_CHARACTER_LAYOUT_CACHE
@ PER_CHARACTER_BINDINGS_CACHE
@ GLOBAL_CONFIG_CACHE
@ BF_LEAVE_REASON_LOW_LEVEL
@ BF_LEAVE_REASON_CLOSE
@ BF_LEAVE_REASON_EXITED
Definition LFG.cpp:24
STL namespace.
std::string Data
Definition Mail.h:167
uint32 amountCounter
time_t lastReceiveTime
std::string Name
SecureAddonStatus Status
std::vector< SecureAddonInfo > SecureAddons
Stores information of a current vote to kick someone from a group.
Definition LFGMgr.h:274
Stores group data related to proposal to join.
Definition LFGMgr.h:243
Stores all rolecheck info of a group that wants to join.
Definition LFGMgr.h:263