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;
62enum AuctionResult : 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 AreaTrigger
84 {
85 class AreaTrigger;
86 }
87
88 namespace AuctionHouse
89 {
90 class AuctionHelloRequest;
91 }
92
93 namespace Bank
94 {
95 class AutoBankItem;
96 class AutoStoreBankItem;
97 class BuyBankSlot;
98 }
99
100 namespace Battleground
101 {
102 class AreaSpiritHealerQuery;
103 class AreaSpiritHealerQueue;
104 class HearthAndResurrect;
105 class PVPLogDataRequest;
106 class BattlemasterJoin;
107 class BattlemasterJoinArena;
108 class BattlefieldLeave;
109 class BattlefieldPort;
110 class BattlefieldListRequest;
111 class RequestBattlefieldStatus;
112 class ReportPvPPlayerAFK;
113 class BattlegroundPlayerPositionsRequest;
114 }
115
116 namespace Calendar
117 {
118 class CalendarAddEvent;
119 class CalendarCopyEvent;
120 class CalendarInvite;
121 class CalendarModeratorStatusQuery;
122 class CalendarRSVP;
123 class CalendarEventSignUp;
124 class CalendarStatus;
125 class CalendarGetCalendar;
126 class CalendarGetEvent;
127 class CalendarGetNumPending;
128 class CalendarGuildFilter;
129 class CalendarArenaTeam;
130 class CalendarRemoveEvent;
131 class CalendarRemoveInvite;
132 class CalendarUpdateEvent;
133 class SetSavedInstanceExtend;
134 class CalendarComplain;
135 }
136
137 namespace Character
138 {
139 struct CharacterCreateInfo;
140 struct CharacterRenameInfo;
141 struct CharCustomizeInfo;
142 struct CharRaceOrFactionChangeInfo;
143
144 class EnumCharacters;
145 class CreateCharacter;
146 class CharDelete;
147 class CharacterRenameRequest;
148 class CharCustomize;
149 class CharRaceOrFactionChange;
150 class LogoutCancel;
151 class LogoutRequest;
152 class ShowingCloak;
153 class ShowingHelm;
154 class PlayerLogout;
155 class PlayedTimeClient;
156 class SetActionBarToggles;
157 }
158
159 namespace ClientConfig
160 {
161 class RequestAccountData;
162 class UserClientUpdateAccountData;
163 }
164
165 namespace Channel
166 {
167 class ChannelCommand;
168 class ChannelPlayerCommand;
169 class ChannelPassword;
170 class JoinChannel;
171 class LeaveChannel;
172 }
173
174 namespace Chat
175 {
176 class ChatMessage;
177 class CTextEmote;
178 class EmoteClient;
179 }
180
181 namespace Combat
182 {
183 class AttackSwing;
184 class AttackStop;
185 class SetSheathed;
186 }
187
188 namespace Duel
189 {
190 class DuelResponse;
191 }
192
193 namespace EquipmentSet
194 {
195 class SaveEquipmentSet;
196 }
197
198 namespace GameObject
199 {
200 class GameObjReportUse;
201 class GameObjUse;
202 }
203
204 namespace Guild
205 {
206 class QueryGuildInfo;
207 class GuildCreate;
208 class GuildInviteByName;
209 class AcceptGuildInvite;
210 class GuildDeclineInvitation;
211 class GuildGetInfo;
212 class GuildGetRoster;
213 class GuildPromoteMember;
214 class GuildDemoteMember;
215 class GuildOfficerRemoveMember;
216 class GuildLeave;
217 class GuildDelete;
218 class GuildUpdateMotdText;
219 class GuildAddRank;
220 class GuildDeleteRank;
221 class GuildUpdateInfoText;
222 class GuildSetMemberNote;
223 class GuildEventLogQuery;
224 class GuildBankRemainingWithdrawMoneyQuery;
225 class GuildPermissionsQuery;
226 class GuildSetRankPermissions;
227 class GuildBankActivate;
228 class GuildBankQueryTab;
229 class GuildBankDepositMoney;
230 class GuildBankWithdrawMoney;
231 class GuildBankSwapItems;
232 class GuildBankBuyTab;
233 class GuildBankUpdateTab;
234 class GuildBankLogQuery;
235 class GuildBankTextQuery;
236 class GuildBankSetTabText;
237 class GuildSetGuildMaster;
238 class SaveGuildEmblem;
239 }
240
241 namespace Inspect
242 {
243 class Inspect;
244 class QueryInspectAchievements;
245 class RequestHonorStats;
246 }
247
248 namespace Item
249 {
250 class AutoEquipItem;
251 class AutoStoreBagItem;
252 class BuyBackItem;
253 class DestroyItem;
254 class GetItemPurchaseData;
255 class RepairItem;
256 class SellItem;
257 class SplitItem;
258 class SwapInvItem;
259 class SwapItem;
260 }
261
262 namespace LFG
263 {
264 class LFGJoin;
265 class LFGLeave;
266 }
267
268 namespace Loot
269 {
270 class LootUnit;
271 class LootItem;
272 class LootRelease;
273 class LootMoney;
274 }
275
276 namespace Mail
277 {
278 class MailCreateTextItem;
279 class MailDelete;
280 class MailGetList;
281 class MailMarkAsRead;
282 class MailQueryNextMailTime;
283 class MailReturnToSender;
284 class MailTakeItem;
285 class MailTakeMoney;
286 class SendMail;
287 }
288
289 namespace Misc
290 {
291 class SetSelection;
292 class TimeSyncResponse;
293 class TutorialSetFlag;
294 class TutorialClear;
295 class TutorialReset;
296 class SetDungeonDifficulty;
297 class SetRaidDifficulty;
298 class ReclaimCorpse;
299 class RepopRequest;
300 class ResurrectResponse;
301 class StandStateChange;
302 class UITimeRequest;
303 class RandomRollClient;
304 class CompleteCinematic;
305 class CompleteMovie;
306 class NextCinematicCamera;
307 class OpeningCinematic;
308 class TogglePvP;
309 class WorldTeleport;
310 }
311
312 namespace Movement
313 {
314 class ClientPlayerMovement;
315 class WorldPortResponse;
316 class MoveTeleportAck;
317 }
318
319 namespace NPC
320 {
321 class Hello;
322 class TrainerBuySpell;
323 }
324
325 namespace Party
326 {
327 class PartyInviteClient;
328 }
329
330 namespace Pet
331 {
332 class DismissCritter;
333 class PetAbandon;
334 class PetStopAttack;
335 class PetSpellAutocast;
336 class RequestPetInfo;
337 }
338
339 namespace Query
340 {
341 class QueryCreature;
342 class QueryPlayerName;
343 class QueryPageText;
344 class QueryNPCText;
345 class QueryGameObject;
346 class QueryCorpseLocationFromClient;
347 class QueryCorpseTransport;
348 class QueryTime;
349 class QueryItemSingle;
350 class QuestPOIQuery;
351 }
352
353 namespace Quest
354 {
355 class QuestGiverStatusQuery;
356 class QuestGiverStatusMultipleQuery;
357 class QueryQuestInfo;
358 class QuestGiverRequestReward;
359 class QuestGiverQueryQuest;
360 class QueryQuestsCompleted;
361 }
362
363 namespace Social
364 {
365 class AddFriend;
366 class AddIgnore;
367 class DelFriend;
368 class DelIgnore;
369 class SendContactList;
370 class SetContactNotes;
371 }
372
373 namespace Spells
374 {
375 class CancelAura;
376 class CancelAutoRepeatSpell;
377 class CancelChannelling;
378 class CancelGrowthAura;
379 class CancelMountAura;
380 class PetCancelAura;
381 class CancelCast;
382 class CastSpell;
383 class PetCastSpell;
384 class SetActionButton;
385 }
386
387 namespace Talent
388 {
389 class LearnTalent;
390 class LearnPreviewTalents;
391 class ConfirmRespecWipe;
392 }
393
394 namespace Totem
395 {
396 class TotemDestroyed;
397 }
398
399 namespace Ticket
400 {
401 class GMTicketGetSystemStatus;
402 class GMTicketGetTicket;
403 }
404
405 namespace Trade
406 {
407 class CancelTrade;
408 }
409
410 namespace Who
411 {
412 class WhoIsRequest;
413 class WhoRequestPkt;
414 }
415}
416
428
429#define NUM_ACCOUNT_DATA_TYPES 8
430
431#define GLOBAL_CACHE_MASK 0x15
432#define PER_CHARACTER_CACHE_MASK 0xEA
433
434uint32 constexpr MAX_CHARACTERS_PER_REALM = 10; // max supported by client in char enum
435
437{
438 time_t Time = 0;
439 std::string Data;
440};
441
449
457
459{
461 //BF_LEAVE_REASON_UNK1 = 0x00000002, (not used)
462 //BF_LEAVE_REASON_UNK2 = 0x00000004, (not used)
464 BF_LEAVE_REASON_LOW_LEVEL = 0x00000010
466
474
480
487
488//class to deal with packet processing
489//allows to determine if next packet is safe to be processed
491{
492public:
493 explicit PacketFilter(WorldSession* pSession) : m_pSession(pSession) { }
494 virtual ~PacketFilter() { }
495
496 virtual bool Process(WorldPacket* /*packet*/) { return true; }
497 virtual bool ProcessUnsafe() const { return true; }
498
499protected:
501
502private:
503 PacketFilter(PacketFilter const& right) = delete;
504 PacketFilter& operator=(PacketFilter const& right) = delete;
505};
506//process only thread-safe packets in Map::Update()
508{
509public:
510 explicit MapSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
512
513 virtual bool Process(WorldPacket* packet) override;
514 //in Map::Update() we do not process player logout!
515 virtual bool ProcessUnsafe() const override { return false; }
516};
517
518//class used to filer only thread-unsafe packets from queue
519//in order to update only be used in World::UpdateSessions()
521{
522public:
523 explicit WorldSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
525
526 virtual bool Process(WorldPacket* packet) override;
527};
528
534
536{
543
544 std::string Name;
546 bool HasKey = false;
547};
548
551{
552 public:
553 WorldSession(uint32 id, std::string&& name, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time,
554 Minutes timezoneOffset, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
556
557 bool PlayerLoading() const { return m_playerLoading; }
558 bool PlayerLogout() const { return m_playerLogout; }
559 bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
560 bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; }
561 bool PlayerDisconnected() const { return !m_Socket; }
562
563 void ReadAddonsInfo(ByteBuffer& data);
564 void SendAddonsInfo();
565
566 void ReadMovementInfo(WorldPacket& data, MovementInfo* mi);
567 void static WriteMovementInfo(WorldPacket* data, MovementInfo* mi);
568
569 void SendPacket(WorldPacket const* packet);
570 void SendNotification(char const* format, ...) ATTR_PRINTF(2, 3);
571 void SendNotification(uint32 stringId, ...);
572 void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName *declinedName);
573 void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0);
574 void SendAreaTriggerMessage(char const* Text, ...) ATTR_PRINTF(2, 3);
575 void SendSetPhaseShift(uint32 phaseShift);
576 void SendQueryTimeResponse();
577
578 void SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos = 0);
579 void SendClientCacheVersion(uint32 version);
580
581 void InitializeSession();
582 void InitializeSessionCallback(CharacterDatabaseQueryHolder const& realmHolder);
583
584 GameClient* GetGameClient() const { return _gameClient; };
585
586 rbac::RBACData* GetRBACData() const;
587 bool HasPermission(uint32 permissionId);
588 void LoadPermissions();
589 QueryCallback LoadPermissionsAsync();
590 void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check
591
592 AccountTypes GetSecurity() const { return _security; }
593 uint32 GetAccountId() const { return _accountId; }
594 std::string const& GetAccountName() const { return _accountName; }
595 Player* GetPlayer() const { return _player; }
596 std::string const& GetPlayerName() const;
597 std::string GetPlayerInfo() const;
598
599 void SetSecurity(AccountTypes security) { _security = security; }
600 std::string const& GetRemoteAddress() const { return m_Address; }
601 void SetPlayer(Player* player);
602 uint8 GetExpansion() const { return m_expansion; }
603
604 void InitWarden(SessionKey const& k, std::string const& os);
605 Warden* GetWarden() { return _warden.get(); }
606 Warden const* GetWarden() const { return _warden.get(); }
607
609 void SetInQueue(bool state) { m_inQueue = state; }
610
612 bool isLogingOut() const { return _logoutTime || m_playerLogout; }
613
615 void SetLogoutStartTime(time_t requestTime)
616 {
617 _logoutTime = requestTime;
618 }
619
621 bool ShouldLogOut(time_t currTime) const
622 {
623 return (_logoutTime > 0 && currTime >= _logoutTime + 20);
624 }
625
626 void LogoutPlayer(bool save);
627 void KickPlayer(std::string const& reason);
628 // Returns true if all contained hyperlinks are valid
629 // May kick player on false depending on world config (handler should abort)
630 bool ValidateHyperlinksAndMaybeKick(std::string const& str);
631 // Returns true if the message contains no hyperlinks
632 // May kick player on false depending on world config (handler should abort)
633 bool DisallowHyperlinksAndMaybeKick(std::string const& str);
634
635 void QueuePacket(WorldPacket* new_packet);
636 bool Update(uint32 diff, PacketFilter& updater);
637
639 void SendAuthWaitQueue(uint32 position);
640
641 void SendFeatureSystemStatus();
642
643 void SendNameQueryOpcode(ObjectGuid guid);
644
645 void SendTrainerList(Creature* npc);
646 void SendListInventory(ObjectGuid guid);
647 void SendShowBank(ObjectGuid guid);
648 bool CanOpenMailBox(ObjectGuid guid);
649 void SendShowMailBox(ObjectGuid guid);
650 void SendTabardVendorActivate(ObjectGuid guid);
651 void SendSpiritResurrect();
652 void SendBindPoint(Creature* npc);
653
654 void SendTradeStatus(TradeStatusInfo const& status);
655 void SendUpdateTrade(bool trader_data = true);
656 void SendCancelTrade(TradeStatus status);
657
658 void SendPetitionQueryOpcode(ObjectGuid petitionguid);
659
660 // Spell
661 void HandleClientCastFlags(WorldPacket& recvPacket, uint8 castFlags, SpellCastTargets& targets);
662
663 // Pet
664 void SendQueryPetNameResponse(ObjectGuid guid, uint32 petnumber);
665 void SendStablePet(ObjectGuid guid);
666 void SendPetStableResult(uint8 guid);
667 bool CheckStableMaster(ObjectGuid guid);
668
669 // Account Data
670 AccountData const* GetAccountData(AccountDataType type) const { return &_accountData[type]; }
671 void SetAccountData(AccountDataType type, time_t time, std::string const& data);
672 void SendAccountDataTimes(uint32 mask);
673 void LoadAccountData(PreparedQueryResult result, uint32 mask);
674
675 void LoadTutorialsData(PreparedQueryResult result);
676 void SendTutorialsData();
677 void SaveTutorialsData(CharacterDatabaseTransaction trans);
678 uint32 GetTutorialInt(uint8 index) const { return _tutorials[index]; }
679 void SetTutorialInt(uint8 index, uint32 value)
680 {
681 if (_tutorials[index] != value)
682 {
683 _tutorials[index] = value;
684 _tutorialsChanged |= TUTORIALS_FLAG_CHANGED;
685 }
686 }
687 void LoadInstanceTimeRestrictions(PreparedQueryResult result);
688 void SaveInstanceTimeRestrictions(CharacterDatabaseTransaction trans);
689 bool UpdateAndCheckInstanceCount(uint32 instanceId);
690 void AddInstanceEnterTime(uint32 instanceId, SystemTimePoint enterTime);
691 void UpdateInstanceEnterTimes();
692 //auction
693 void SendAuctionHello(ObjectGuid guid, Unit const* unit);
694
705 void SendAuctionCommandResult(AuctionEntry const* auction, AuctionCommand command, AuctionResult errorCode, InventoryResult bagResult = InventoryResult(0));
706 void SendAuctionBidderNotification(uint32 location, uint32 auctionId, ObjectGuid bidder, uint32 bidSum, uint32 diff, uint32 item_template);
707 void SendAuctionOwnerNotification(AuctionEntry* auction);
708 void SendAuctionRemovedNotification(uint32 auctionId, uint32 itemEntry, int32 randomPropertyId);
709
710 //Item Enchantment
711 void SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId);
712 void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration);
713
714 //Taxi
715 void SendTaxiStatus(ObjectGuid guid);
716 void SendTaxiMenu(Creature* unit);
717 void SendDoFlight(uint32 mountDisplayId, uint32 path, uint32 pathNode = 0);
718 bool SendLearnNewTaxiNode(Creature* unit);
719 void SendDiscoverNewTaxiNode(uint32 nodeid);
720
721 // Guild/Arena Team
722 void SendArenaTeamCommandResult(uint32 team_action, std::string const& team, std::string const& player, uint32 error_id = 0);
723 void SendNotInArenaTeamPacket(uint8 type);
724 void SendPetitionShowList(ObjectGuid guid);
725
726 void BuildPartyMemberStatsChangedPacket(Player* player, WorldPacket* data);
727
728 void DoLootRelease(ObjectGuid lguid);
729
730 // Account mute time
731 bool CanSpeak() const;
733
734 // Locales
735 LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
736 LocaleConstant GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
737
738 Minutes GetTimezoneOffset() const { return _timezoneOffset; }
739
740 char const* GetTrinityString(uint32 entry) const;
741
742 uint32 GetLatency() const { return m_latency; }
743 void SetLatency(uint32 latency) { m_latency = latency; }
744
745 std::atomic<time_t> m_timeOutTime;
746
747 void ResetTimeOutTime(bool onlyActive);
748
749 bool IsConnectionIdle() const;
750
751 // Recruit-A-Friend Handling
752 uint32 GetRecruiterId() const { return recruiterId; }
753 bool IsARecruiter() const { return isRecruiter; }
754
755 // Time Synchronisation
756 void ResetTimeSync();
757 void SendTimeSync();
758 uint32 AdjustClientMovementTime(uint32 time) const;
759
760 // Packets cooldown
761 time_t GetCalendarEventCreationCooldown() const { return _calendarEventCreationCooldown; }
762 void SetCalendarEventCreationCooldown(time_t cooldown) { _calendarEventCreationCooldown = cooldown; }
763
764 public: // opcodes handlers
765
766 void Handle_NULL(WorldPacket& recvPacket); // not used
767 void Handle_EarlyProccess(WorldPacket& recvPacket); // just mark packets processed in WorldSocket::ReadDataHandler
768 void Handle_ServerSide(WorldPacket& recvPacket); // sever side only, can't be accepted from client
769
770 void HandleCharEnumOpcode(WorldPackets::Character::EnumCharacters& enumCharacters);
771 void HandleCharDeleteOpcode(WorldPackets::Character::CharDelete& charDelete);
772 void HandleCharCreateOpcode(WorldPackets::Character::CreateCharacter& charCreate);
773 void HandlePlayerLoginOpcode(WorldPacket& recvPacket);
774 void HandleCharEnum(PreparedQueryResult result);
775 void HandlePlayerLogin(LoginQueryHolder const& holder);
776 void HandleCharRaceOrFactionChange(WorldPackets::Character::CharRaceOrFactionChange& packet);
777 void HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPackets::Character::CharRaceOrFactionChangeInfo> factionChangeInfo, PreparedQueryResult result);
778 void HandleCharRenameOpcode(WorldPackets::Character::CharacterRenameRequest& request);
779 void HandleCharRenameCallBack(std::shared_ptr<WorldPackets::Character::CharacterRenameInfo> renameInfo, PreparedQueryResult result);
780 void HandleSetPlayerDeclinedNames(WorldPacket& recvData);
781 void HandleAlterAppearance(WorldPacket& recvData);
782 void HandleCharCustomize(WorldPackets::Character::CharCustomize& packet);
783 void HandleCharCustomizeCallback(std::shared_ptr<WorldPackets::Character::CharCustomizeInfo> customizeInfo, PreparedQueryResult result);
784 void HandleOpeningCinematic(WorldPackets::Misc::OpeningCinematic& packet);
785
786 void SendCharCreate(ResponseCodes result);
787 void SendCharDelete(ResponseCodes result);
788 void SendCharRename(ResponseCodes result, WorldPackets::Character::CharacterRenameInfo const* renameInfo);
789 void SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo);
790 void SendCharFactionChange(ResponseCodes result, WorldPackets::Character::CharRaceOrFactionChangeInfo const* factionChangeInfo);
791 void SendSetPlayerDeclinedNamesResult(DeclinedNameResult result, ObjectGuid guid);
792 void SendBarberShopResult(BarberShopResult result);
793
794 // played time
795 void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet);
796
797 // Inspect
798 void HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect);
799 void HandleRequestHonorStats(WorldPackets::Inspect::RequestHonorStats& request);
800 void HandleQueryInspectAchievements(WorldPackets::Inspect::QueryInspectAchievements& inspect);
801
802 void HandleForceSpeedChangeAck(WorldPacket& recvData);
803 void HandleMoveKnockBackAck(WorldPacket& recvPacket);
804 void HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet);
805 void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
806 void HandleFeatherFallAck(WorldPacket& recvData);
807 void HandleMoveHoverAck(WorldPacket& recvData);
808 void HandleMoveUnRootAck(WorldPacket& recvPacket);
809 void HandleMoveRootAck(WorldPacket& recvPacket);
810 void HandleMoveSetCanFlyAckOpcode(WorldPacket& recvData);
811 void HandleMoveSetCanTransitionBetweenSwinAndFlyAck(WorldPacket& recvData);
812 void HandleMoveGravityDisableAck(WorldPacket& recvData);
813 void HandleMoveGravityEnableAck(WorldPacket& recvData);
814 void HandleMoveSetCollisionHgtAck(WorldPacket& recvData);
815
816 void HandleMountSpecialAnimOpcode(WorldPacket& recvdata);
817
818 // character view
819 void HandleShowingHelmOpcode(WorldPackets::Character::ShowingHelm& packet);
820 void HandleShowingCloakOpcode(WorldPackets::Character::ShowingCloak& packet);
821
822 // repair
823 void HandleRepairItemOpcode(WorldPackets::Item::RepairItem& packet);
824
825 void HandleRepopRequest(WorldPackets::Misc::RepopRequest& packet);
826 void HandleAutostoreLootItemOpcode(WorldPackets::Loot::LootItem& packet);
827 void HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& packet);
828 void HandleLootOpcode(WorldPackets::Loot::LootUnit& packet);
829 void HandleLootReleaseOpcode(WorldPackets::Loot::LootRelease& packet);
830 void HandleLootMasterGiveOpcode(WorldPacket& recvPacket);
831 void HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest);
832 void HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& logoutRequest);
833 void HandlePlayerLogoutOpcode(WorldPackets::Character::PlayerLogout& playerLogout);
834 void HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& logoutCancel);
835
836 // GM Ticket opcodes
837 void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
838 void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
839 void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
840 void HandleGMTicketGetTicketOpcode(WorldPackets::Ticket::GMTicketGetTicket& packet);
841 void HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTicketGetSystemStatus& packet);
842 void HandleGMSurveySubmit(WorldPacket& recvPacket);
843 void HandleReportLag(WorldPacket& recvPacket);
844 void HandleGMResponseResolve(WorldPacket& recvPacket);
845
846 void HandleTogglePvP(WorldPackets::Misc::TogglePvP& togglePvP);
847
848 void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
849 void HandleSetSelectionOpcode(WorldPackets::Misc::SetSelection& packet);
850 void HandleStandStateChangeOpcode(WorldPackets::Misc::StandStateChange& packet);
851 void HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& packet);
852
853 // Social
854 void HandleContactListOpcode(WorldPackets::Social::SendContactList& packet);
855 void HandleAddFriendOpcode(WorldPackets::Social::AddFriend& packet);
856 void HandleDelFriendOpcode(WorldPackets::Social::DelFriend& packet);
857 void HandleAddIgnoreOpcode(WorldPackets::Social::AddIgnore& packet);
858 void HandleDelIgnoreOpcode(WorldPackets::Social::DelIgnore& packet);
859 void HandleSetContactNotesOpcode(WorldPackets::Social::SetContactNotes& packet);
860 void HandleBugOpcode(WorldPacket& recvPacket);
861 void HandleSetAmmoOpcode(WorldPacket& recvPacket);
862 void HandleItemNameQueryOpcode(WorldPacket& recvPacket);
863
864 void HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigger& packet);
865
866 void HandleSetFactionAtWar(WorldPacket& recvData);
867 void HandleSetFactionCheat(WorldPacket& recvData);
868 void HandleSetWatchedFactionOpcode(WorldPacket& recvData);
869 void HandleSetFactionInactiveOpcode(WorldPacket& recvData);
870
871 void HandleUpdateAccountData(WorldPackets::ClientConfig::UserClientUpdateAccountData& packet);
872 void HandleRequestAccountData(WorldPackets::ClientConfig::RequestAccountData& request);
873 void HandleSetActionButtonOpcode(WorldPackets::Spells::SetActionButton& packet);
874
875 void HandleGameObjectUseOpcode(WorldPackets::GameObject::GameObjUse& packet);
876 void HandleGameobjectReportUse(WorldPackets::GameObject::GameObjReportUse& packet);
877
878 void HandleNameQueryOpcode(WorldPackets::Query::QueryPlayerName& queryPlayerName);
879 void HandleQueryTimeOpcode(WorldPackets::Query::QueryTime& queryTime);
880 void HandleCreatureQueryOpcode(WorldPackets::Query::QueryCreature& query);
881
882 void HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObject& query);
883
884 void HandleMoveWorldportAckOpcode(WorldPackets::Movement::WorldPortResponse& packet);
885 void HandleMoveWorldportAck(); // for server-side calls
886
887 // Validates that correct unit is moved, coords are in valid range and movement flags
888 bool ValidateMovementInfo(Unit const* mover, MovementInfo* mi) const;
889
890 void HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMovement& packet);
891 void HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movementInfo);
892 void HandleSetActiveMoverOpcode(WorldPacket& recvData);
893 void HandleMoveNotActiveMover(WorldPacket& recvData);
894 void HandleDismissControlledVehicle(WorldPacket& recvData);
895 void HandleRequestVehicleExit(WorldPacket& recvData);
896 void HandleChangeSeatsOnControlledVehicle(WorldPacket& recvData);
897 void HandleMoveTimeSkippedOpcode(WorldPacket& recvData);
898
899 void HandleRequestRaidInfoOpcode(WorldPacket& recvData);
900
901 void HandleGroupInviteOpcode(WorldPackets::Party::PartyInviteClient& packet);
902 void HandleGroupAcceptOpcode(WorldPacket& recvPacket);
903 void HandleGroupDeclineOpcode(WorldPacket& recvPacket);
904 void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
905 void HandleGroupUninviteGuidOpcode(WorldPacket& recvPacket);
906 void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
907 void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
908 void HandleOptOutOfLootOpcode(WorldPacket& recvData);
909 void HandleLootMethodOpcode(WorldPacket& recvPacket);
910 void HandleLootRoll(WorldPacket& recvData);
911 void HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData);
912 void HandleRaidTargetUpdateOpcode(WorldPacket& recvData);
913 void HandleRaidReadyCheckOpcode(WorldPacket& recvData);
914 void HandleRaidReadyCheckFinishedOpcode(WorldPacket& recvData);
915 void HandleGroupRaidConvertOpcode(WorldPacket& recvData);
916 void HandleGroupChangeSubGroupOpcode(WorldPacket& recvData);
917 void HandleGroupAssistantLeaderOpcode(WorldPacket& recvData);
918 void HandlePartyAssignmentOpcode(WorldPacket& recvData);
919
920 void HandlePetitionBuyOpcode(WorldPacket& recvData);
921 void HandlePetitionShowSignatures(WorldPacket& recvData);
922 void SendPetitionSigns(Petition const* petition, Player* sendTo);
923 void HandleQueryPetition(WorldPacket& recvData);
924 void HandlePetitionRenameGuild(WorldPacket& recvData);
925 void HandleSignPetition(WorldPacket& recvData);
926 void HandleDeclinePetition(WorldPacket& recvData);
927 void HandleOfferPetitionOpcode(WorldPacket& recvData);
928 void HandleTurnInPetitionOpcode(WorldPacket& recvData);
929
930 void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query);
931 void HandleGuildCreateOpcode(WorldPackets::Guild::GuildCreate& packet);
932 void HandleGuildInviteOpcode(WorldPackets::Guild::GuildInviteByName& packet);
933 void HandleGuildOfficerRemoveMember(WorldPackets::Guild::GuildOfficerRemoveMember& packet);
934 void HandleGuildAcceptOpcode(WorldPackets::Guild::AcceptGuildInvite& invite);
935 void HandleGuildDeclineOpcode(WorldPackets::Guild::GuildDeclineInvitation& decline);
936 void HandleGuildInfoOpcode(WorldPackets::Guild::GuildGetInfo& packet);
937 void HandleGuildEventLogQueryOpcode(WorldPackets::Guild::GuildEventLogQuery& packet);
938 void HandleGuildRosterOpcode(WorldPackets::Guild::GuildGetRoster& packet);
939 void HandleGuildPromoteOpcode(WorldPackets::Guild::GuildPromoteMember& promote);
940 void HandleGuildDemoteOpcode(WorldPackets::Guild::GuildDemoteMember& demote);
941 void HandleGuildLeaveOpcode(WorldPackets::Guild::GuildLeave& leave);
942 void HandleGuildDelete(WorldPackets::Guild::GuildDelete& packet);
943 void HandleGuildSetGuildMaster(WorldPackets::Guild::GuildSetGuildMaster& packet);
944 void HandleGuildUpdateMotdText(WorldPackets::Guild::GuildUpdateMotdText& packet);
945 void HandleGuildSetPublicNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet);
946 void HandleGuildSetOfficerNoteOpcode(WorldPackets::Guild::GuildSetMemberNote& packet);
947 void HandleGuildSetRankPermissions(WorldPackets::Guild::GuildSetRankPermissions& packet);
948 void HandleGuildAddRankOpcode(WorldPackets::Guild::GuildAddRank& packet);
949 void HandleGuildDeleteRank(WorldPackets::Guild::GuildDeleteRank& packet);
950 void HandleGuildUpdateInfoText(WorldPackets::Guild::GuildUpdateInfoText& packet);
951 void HandleSaveGuildEmblemOpcode(WorldPackets::Guild::SaveGuildEmblem& packet);
952
953 void HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvPacket);
954 void HandleTaxiQueryAvailableNodes(WorldPacket& recvPacket);
955 void HandleActivateTaxiOpcode(WorldPacket& recvPacket);
956 void HandleActivateTaxiExpressOpcode(WorldPacket& recvPacket);
957 void HandleMoveSplineDoneOpcode(WorldPacket& recvPacket);
958 void SendActivateTaxiReply(ActivateTaxiReply reply);
959
960 void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket);
961 void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
962 void HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpell& packet);
963 void HandlePetitionShowListOpcode(WorldPacket& recvPacket);
964 void HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet);
965 void HandleGossipSelectOptionOpcode(WorldPacket& recvPacket);
966 void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket);
967 void HandleNpcTextQueryOpcode(WorldPackets::Query::QueryNPCText& packet);
968 void HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet);
969 void HandleRequestStabledPets(WorldPacket& recvPacket);
970 void HandleStablePet(WorldPacket& recvPacket);
971 void HandleUnstablePet(WorldPacket& recvPacket);
972 void HandleBuyStableSlot(WorldPacket& recvPacket);
973 void HandleStableRevivePet(WorldPacket& recvPacket);
974 void HandleStableSwapPet(WorldPacket& recvPacket);
975
976 void HandleDuelAccepted(WorldPackets::Duel::DuelResponse& duelResponse);
977 void HandleDuelCancelled(WorldPackets::Duel::DuelResponse& duelResponse);
978
979 void HandleAcceptTradeOpcode(WorldPacket& recvPacket);
980 void HandleBeginTradeOpcode(WorldPacket& recvPacket);
981 void HandleBusyTradeOpcode(WorldPacket& recvPacket);
982 void HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade& cancelTrade);
983 void HandleClearTradeItemOpcode(WorldPacket& recvPacket);
984 void HandleIgnoreTradeOpcode(WorldPacket& recvPacket);
985 void HandleInitiateTradeOpcode(WorldPacket& recvPacket);
986 void HandleSetTradeGoldOpcode(WorldPacket& recvPacket);
987 void HandleSetTradeItemOpcode(WorldPacket& recvPacket);
988 void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
989
990 void HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& packet);
991 void HandleAuctionListItems(WorldPacket& recvData);
992 void HandleAuctionListBidderItems(WorldPacket& recvData);
993 void HandleAuctionSellItem(WorldPacket& recvData);
994 void HandleAuctionRemoveItem(WorldPacket& recvData);
995 void HandleAuctionListOwnerItems(WorldPacket& recvData);
996 void HandleAuctionPlaceBid(WorldPacket& recvData);
997 void HandleAuctionListPendingSales(WorldPacket& recvData);
998
999 // Bank
1000 void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet);
1001 void HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet);
1002 void HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet);
1003 void HandleBuyBankSlotOpcode(WorldPackets::Bank::BuyBankSlot& buyBankSlot);
1004
1005 void HandleGetMailList(WorldPackets::Mail::MailGetList& getList);
1006 void HandleSendMail(WorldPackets::Mail::SendMail& sendMail);
1007 void HandleMailTakeMoney(WorldPackets::Mail::MailTakeMoney& takeMoney);
1008 void HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& takeItem);
1009 void HandleMailMarkAsRead(WorldPackets::Mail::MailMarkAsRead& markAsRead);
1010 void HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSender& returnToSender);
1011 void HandleMailDelete(WorldPackets::Mail::MailDelete& mailDelete);
1012 void HandleItemTextQuery(WorldPacket& recvData);
1013 void HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextItem& createTextItem);
1014 void HandleQueryNextMailTime(WorldPackets::Mail::MailQueryNextMailTime& queryNextMailTime);
1015
1016 void HandleSplitItemOpcode(WorldPackets::Item::SplitItem& splitItem);
1017 void HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem& swapInvItem);
1018 void HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem& destroyItem);
1019 void HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem& autoEquipItem);
1020 void HandleItemQuerySingleOpcode(WorldPackets::Query::QueryItemSingle& query);
1021 void HandleSellItemOpcode(WorldPackets::Item::SellItem& packet);
1022 void HandleBuyItemInSlotOpcode(WorldPacket& recvPacket);
1023 void HandleBuyItemOpcode(WorldPacket& recvPacket);
1024 void HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet);
1025 void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem& packet);
1026 void HandleReadItem(WorldPacket& recvPacket);
1027 void HandleAutoEquipItemSlotOpcode(WorldPacket& recvPacket);
1028 void HandleSwapItem(WorldPackets::Item::SwapItem& swapItem);
1029 void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
1030 void HandleWrapItemOpcode(WorldPacket& recvPacket);
1031
1032 void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
1033 void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);
1034 void HandleSetSheathedOpcode(WorldPackets::Combat::SetSheathed& packet);
1035
1036 void HandleUseItemOpcode(WorldPacket& recvPacket);
1037 void HandleOpenItemOpcode(WorldPacket& recvPacket);
1038 void HandleOpenWrappedItemCallback(uint16 pos, ObjectGuid itemGuid, PreparedQueryResult result);
1039 void HandleCastSpellOpcode(WorldPackets::Spells::CastSpell& castRequest);
1040 void HandleCancelCastOpcode(WorldPackets::Spells::CancelCast& cancelCast);
1041 void HandleCancelAuraOpcode(WorldPackets::Spells::CancelAura& cancelAura);
1042 void HandleCancelGrowthAuraOpcode(WorldPackets::Spells::CancelGrowthAura& cancelGrowthAura);
1043 void HandleCancelMountAuraOpcode(WorldPackets::Spells::CancelMountAura& cancelMountAura);
1044 void HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::CancelAutoRepeatSpell& cancelAutoRepeatSpell);
1045 void HandleCancelChanneling(WorldPackets::Spells::CancelChannelling& cancelChanneling);
1046
1047 void HandleLearnTalentOpcode(WorldPackets::Talent::LearnTalent& packet);
1048 void HandleLearnPreviewTalents(WorldPackets::Talent::LearnPreviewTalents& learnPreviewTalents);
1049 void HandleTalentWipeConfirmOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe);
1050 void HandleUnlearnSkillOpcode(WorldPacket& recvPacket);
1051
1052 void HandleQuestgiverStatusQueryOpcode(WorldPackets::Quest::QuestGiverStatusQuery& packet);
1053 void HandleQuestgiverStatusMultipleQuery(WorldPackets::Quest::QuestGiverStatusMultipleQuery& packet);
1054 void HandleQuestgiverHelloOpcode(WorldPacket& recvPacket);
1055 void HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvPacket);
1056 void HandleQuestgiverQueryQuestOpcode(WorldPackets::Quest::QuestGiverQueryQuest& packet);
1057 void HandleQuestgiverChooseRewardOpcode(WorldPacket& recvPacket);
1058 void HandleQuestgiverRequestRewardOpcode(WorldPackets::Quest::QuestGiverRequestReward& packet);
1059 void HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& query);
1060 void HandleQuestgiverCancel(WorldPacket& recvData);
1061 void HandleQuestLogSwapQuest(WorldPacket& recvData);
1062 void HandleQuestLogRemoveQuest(WorldPacket& recvData);
1063 void HandleQuestConfirmAccept(WorldPacket& recvData);
1064 void HandleQuestgiverCompleteQuest(WorldPacket& recvData);
1065 void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket);
1066 void HandlePushQuestToParty(WorldPacket& recvPacket);
1067 void HandleQuestPushResult(WorldPacket& recvPacket);
1068
1069 void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chatMessage);
1070 void HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target);
1071 void SendPlayerNotFoundNotice(std::string const& name);
1072 void SendPlayerAmbiguousNotice(std::string const& name);
1073 void SendWrongFactionNotice();
1074 void SendChatRestrictedNotice(ChatRestrictionType restriction);
1075 void HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet);
1076 void HandleChatIgnoredOpcode(WorldPacket& recvPacket);
1077
1078 void HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& packet);
1079 void HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& packet);
1080 void HandleQueryCorpseTransport(WorldPackets::Query::QueryCorpseTransport& packet);
1081 void HandleResurrectResponse(WorldPackets::Misc::ResurrectResponse& packet);
1082 void HandleSummonResponseOpcode(WorldPacket& recvData);
1083
1084 void HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet);
1085 void HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packet);
1086 void HandleChannelCommand(WorldPackets::Channel::ChannelCommand& packet);
1087 void HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlayerCommand& packet);
1088 void HandleChannelPassword(WorldPackets::Channel::ChannelPassword& packet);
1089
1090 void HandleCompleteCinematic(WorldPackets::Misc::CompleteCinematic& packet);
1091 void HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCamera& packet);
1092 void HandleCompleteMovie(WorldPackets::Misc::CompleteMovie& packet);
1093
1094 void HandleQueryPageText(WorldPackets::Query::QueryPageText& packet);
1095
1096 void HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packet);
1097 void HandleTutorialClear(WorldPackets::Misc::TutorialClear& tutorialClear);
1098 void HandleTutorialReset(WorldPackets::Misc::TutorialReset& tutorialReset);
1099
1100 //Pet
1101 void HandlePetAction(WorldPacket& recvData);
1102 void HandlePetStopAttack(WorldPackets::Pet::PetStopAttack& packet);
1103 void HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spellid, uint16 flag, ObjectGuid guid2);
1104 void HandleQueryPetName(WorldPacket& recvData);
1105 void HandlePetSetAction(WorldPacket& recvData);
1106 void HandlePetAbandon(WorldPackets::Pet::PetAbandon& packet);
1107 void HandlePetRename(WorldPacket& recvData);
1108 void HandlePetCancelAuraOpcode(WorldPackets::Spells::PetCancelAura& packet);
1109 void HandlePetSpellAutocastOpcode(WorldPackets::Pet::PetSpellAutocast& packet);
1110 void HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell& petCastSpell);
1111 void HandlePetLearnTalent(WorldPacket& recvPacket);
1112 void HandleLearnPreviewTalentsPet(WorldPacket& recvPacket);
1113
1114 void HandleSetActionBarToggles(WorldPackets::Character::SetActionBarToggles& packet);
1115
1116 void HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& totemDestroyed);
1117 void HandleDismissCritter(WorldPackets::Pet::DismissCritter& dismissCritter);
1118
1119 //Battleground
1120 void HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello);
1121 void HandleBattlemasterJoinOpcode(WorldPackets::Battleground::BattlemasterJoin& battlemasterJoin);
1122 void HandleBattlegroundPlayerPositionsOpcode(WorldPackets::Battleground::BattlegroundPlayerPositionsRequest& battlegroundPlayerPositionsRequest);
1123 void HandlePVPLogDataOpcode(WorldPackets::Battleground::PVPLogDataRequest& pvpLogDataRequest);
1124 void HandleBattleFieldPortOpcode(WorldPackets::Battleground::BattlefieldPort& battlefieldPort);
1125 void HandleBattlefieldListOpcode(WorldPackets::Battleground::BattlefieldListRequest& battlefieldList);
1126 void HandleBattlefieldLeaveOpcode(WorldPackets::Battleground::BattlefieldLeave& battlefieldLeave);
1127 void HandleBattlemasterJoinArena(WorldPackets::Battleground::BattlemasterJoinArena& packet);
1128 void HandleReportPvPAFK(WorldPackets::Battleground::ReportPvPPlayerAFK& reportPvPPlayerAFK);
1129 void HandleAreaSpiritHealerQueryOpcode(WorldPackets::Battleground::AreaSpiritHealerQuery& areaSpiritHealerQuery);
1130 void HandleAreaSpiritHealerQueueOpcode(WorldPackets::Battleground::AreaSpiritHealerQueue& areaSpiritHealerQueue);
1131 void HandleHearthAndResurrect(WorldPackets::Battleground::HearthAndResurrect& hearthAndResurrect);
1132 void HandleRequestBattlefieldStatusOpcode(WorldPackets::Battleground::RequestBattlefieldStatus& requestBattlefieldStatus);
1133
1134 // Battlefield
1135 void SendBfInvitePlayerToWar(uint32 battleId, uint32 zoneId, uint32 time);
1136 void SendBfInvitePlayerToQueue(uint32 battleId);
1137 void SendBfQueueInviteResponse(uint32 battleId, uint32 zoneId, bool canQueue = true, bool full = false);
1138 void SendBfEntered(uint32 battleId);
1139 void SendBfLeaveMessage(uint32 battleId, BFLeaveReason reason = BF_LEAVE_REASON_EXITED);
1140 void HandleBfQueueInviteResponse(WorldPacket& recvData);
1141 void HandleBfEntryInviteResponse(WorldPacket& recvData);
1142 void HandleBfQueueExitRequest(WorldPacket& recvData);
1143
1144 void HandleWardenDataOpcode(WorldPacket& recvData);
1145 void HandleWorldTeleportOpcode(WorldPackets::Misc::WorldTeleport& worldTeleport);
1146 void HandleMinimapPingOpcode(WorldPacket& recvData);
1147 void HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet);
1148 void HandleFarSightOpcode(WorldPacket& recvData);
1149 void HandleSetDungeonDifficultyOpcode(WorldPackets::Misc::SetDungeonDifficulty& setDungeonDifficulty);
1150 void HandleSetRaidDifficultyOpcode(WorldPackets::Misc::SetRaidDifficulty& setRaidDifficulty);
1151 void HandleSetTitleOpcode(WorldPacket& recvData);
1152 void HandleRealmSplitOpcode(WorldPacket& recvData);
1153 void HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse& packet);
1154 void HandleWhoIsOpcode(WorldPackets::Who::WhoIsRequest& packet);
1155 void HandleResetInstancesOpcode(WorldPacket& recvData);
1156 void HandleInstanceLockResponse(WorldPacket& recvPacket);
1157
1158 // Looking for Dungeon/Raid
1159 void HandleLfgSetCommentOpcode(WorldPacket& recvData);
1160 void HandleLfgPlayerLockInfoRequestOpcode(WorldPacket& recvData);
1161 void HandleLfgPartyLockInfoRequestOpcode(WorldPacket& recvData);
1162 void SendLfgPlayerLockInfo();
1163 void SendLfgPartyLockInfo();
1164 void HandleLfgJoinOpcode(WorldPackets::LFG::LFGJoin& lfgJoin);
1165 void HandleLfgLeaveOpcode(WorldPackets::LFG::LFGLeave& lfgleave);
1166 void HandleLfgSetRolesOpcode(WorldPacket& recvData);
1167 void HandleLfgProposalResultOpcode(WorldPacket& recvData);
1168 void HandleLfgSetBootVoteOpcode(WorldPacket& recvData);
1169 void HandleLfgTeleportOpcode(WorldPacket& recvData);
1170 void HandleLfrJoinOpcode(WorldPacket& recvData);
1171 void HandleLfrLeaveOpcode(WorldPacket& recvData);
1172 void HandleLfgGetStatus(WorldPacket& recvData);
1173
1174 void SendLfgUpdatePlayer(lfg::LfgUpdateData const& updateData);
1175 void SendLfgUpdateParty(lfg::LfgUpdateData const& updateData);
1176 void SendLfgRoleChosen(ObjectGuid guid, uint8 roles);
1177 void SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& pRoleCheck);
1178 void SendLfgLfrList(bool update);
1179 void SendLfgJoinResult(lfg::LfgJoinResultData const& joinData);
1180 void SendLfgQueueStatus(lfg::LfgQueueStatusData const& queueData);
1181 void SendLfgPlayerReward(lfg::LfgPlayerRewardData const& lfgPlayerRewardData);
1182 void SendLfgBootProposalUpdate(lfg::LfgPlayerBoot const& boot);
1183 void SendLfgUpdateProposal(lfg::LfgProposal const& proposal);
1184 void SendLfgDisabled();
1185 void SendLfgOfferContinue(uint32 dungeonEntry);
1186 void SendLfgTeleportError(uint8 err);
1187
1188 // Arena Team
1189 void HandleInspectArenaTeamsOpcode(WorldPacket& recvData);
1190 void HandleArenaTeamQueryOpcode(WorldPacket& recvData);
1191 void HandleArenaTeamRosterOpcode(WorldPacket& recvData);
1192 void HandleArenaTeamInviteOpcode(WorldPacket& recvData);
1193 void HandleArenaTeamAcceptOpcode(WorldPacket& recvData);
1194 void HandleArenaTeamDeclineOpcode(WorldPacket& recvData);
1195 void HandleArenaTeamLeaveOpcode(WorldPacket& recvData);
1196 void HandleArenaTeamRemoveOpcode(WorldPacket& recvData);
1197 void HandleArenaTeamDisbandOpcode(WorldPacket& recvData);
1198 void HandleArenaTeamLeaderOpcode(WorldPacket& recvData);
1199
1200 void HandleSelfResOpcode(WorldPacket& recvData);
1201 void HandleComplainOpcode(WorldPacket& recvData);
1202 void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& packet);
1203
1204 // Socket gem
1205 void HandleSocketOpcode(WorldPacket& recvData);
1206
1207 void HandleCancelTempEnchantmentOpcode(WorldPacket& recvData);
1208
1209 void HandleGetItemPurchaseData(WorldPackets::Item::GetItemPurchaseData& packet);
1210 void HandleItemRefund(WorldPacket& recvData);
1211
1212 void HandleVoiceSessionEnableOpcode(WorldPacket& recvData);
1213 void HandleSetActiveVoiceChannel(WorldPacket& recvData);
1214 void HandleSetTaxiBenchmarkOpcode(WorldPacket& recvData);
1215
1216 // Guild Bank
1217 void HandleGuildPermissionsQuery(WorldPackets::Guild::GuildPermissionsQuery& packet);
1218 void HandleGuildBankMoneyWithdrawn(WorldPackets::Guild::GuildBankRemainingWithdrawMoneyQuery& packet);
1219 void HandleGuildBankActivate(WorldPackets::Guild::GuildBankActivate& packet);
1220 void HandleGuildBankQueryTab(WorldPackets::Guild::GuildBankQueryTab& packet);
1221 void HandleGuildBankLogQuery(WorldPackets::Guild::GuildBankLogQuery& packet);
1222 void HandleGuildBankDepositMoney(WorldPackets::Guild::GuildBankDepositMoney& packet);
1223 void HandleGuildBankWithdrawMoney(WorldPackets::Guild::GuildBankWithdrawMoney& packet);
1224 void HandleGuildBankSwapItems(WorldPackets::Guild::GuildBankSwapItems& packet);
1225
1226 void HandleGuildBankUpdateTab(WorldPackets::Guild::GuildBankUpdateTab& packet);
1227 void HandleGuildBankBuyTab(WorldPackets::Guild::GuildBankBuyTab& packet);
1228 void HandleGuildBankTextQuery(WorldPackets::Guild::GuildBankTextQuery& packet);
1229 void HandleGuildBankSetTabText(WorldPackets::Guild::GuildBankSetTabText& packet);
1230
1231 // Refer-a-Friend
1232 void HandleGrantLevel(WorldPacket& recvData);
1233 void HandleAcceptGrantLevel(WorldPacket& recvData);
1234
1235 // Calendar
1236 void HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGetCalendar& calendarGetCalendar);
1237 void HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEvent& calendarGetEvent);
1238 void HandleCalendarGuildFilter(WorldPackets::Calendar::CalendarGuildFilter& calendarGuildFilter);
1239 void HandleCalendarArenaTeam(WorldPackets::Calendar::CalendarArenaTeam& calendarArenaTeam);
1240 void HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent);
1241 void HandleCalendarUpdateEvent(WorldPackets::Calendar::CalendarUpdateEvent& calendarUpdateEvent);
1242 void HandleCalendarRemoveEvent(WorldPackets::Calendar::CalendarRemoveEvent& calendarRemoveEvent);
1243 void HandleCalendarCopyEvent(WorldPackets::Calendar::CalendarCopyEvent& calendarCopyEvent);
1244 void HandleCalendarEventInvite(WorldPackets::Calendar::CalendarInvite& calendarEventInvite);
1245 void HandleCalendarEventRsvp(WorldPackets::Calendar::CalendarRSVP& calendarRSVP);
1246 void HandleCalendarEventRemoveInvite(WorldPackets::Calendar::CalendarRemoveInvite& calendarRemoveInvite);
1247 void HandleCalendarEventStatus(WorldPackets::Calendar::CalendarStatus& calendarStatus);
1248 void HandleCalendarEventModeratorStatus(WorldPackets::Calendar::CalendarModeratorStatusQuery& calendarModeratorStatus);
1249 void HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& calendarComplain);
1250 void HandleCalendarGetNumPending(WorldPackets::Calendar::CalendarGetNumPending& calendarGetNumPending);
1251 void HandleCalendarEventSignup(WorldPackets::Calendar::CalendarEventSignUp& calendarEventSignUp);
1252
1253 void SendCalendarRaidLockoutAdded(InstanceSave const* save);
1254 void SendCalendarRaidLockoutRemoved(InstanceSave const* save);
1255 void SendCalendarRaidLockoutUpdated(InstanceSave const* save);
1256 void HandleSetSavedInstanceExtend(WorldPackets::Calendar::SetSavedInstanceExtend& setSavedInstanceExtend);
1257
1258 void HandleSpellClick(WorldPacket& recvData);
1259 void HandleMirrorImageDataRequest(WorldPacket& recvData);
1260 void HandleRemoveGlyph(WorldPacket& recvData);
1261 void HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& saveEquipmentSet);
1262 void HandleEquipmentSetDelete(WorldPacket& recvData);
1263 void HandleEquipmentSetUse(WorldPacket& recvData);
1264 void HandleUITimeRequest(WorldPackets::Misc::UITimeRequest& recvData);
1265 void HandleReadyForAccountDataTimes(WorldPacket& recvData);
1266 void HandleQueryQuestsCompleted(WorldPackets::Quest::QueryQuestsCompleted& queryQuestsCompleted);
1267 void HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& query);
1268 void HandleEjectPassenger(WorldPacket& data);
1269 void HandleEnterPlayerVehicle(WorldPacket& data);
1270 void HandleUpdateProjectilePosition(WorldPacket& recvPacket);
1271 void HandleUpdateMissileTrajectory(WorldPacket& recvPacket);
1272
1273 public:
1274 QueryCallbackProcessor& GetQueryProcessor() { return _queryProcessor; }
1275 TransactionCallback& AddTransactionCallback(TransactionCallback&& callback);
1276 SQLQueryHolderCallback& AddQueryHolderCallback(SQLQueryHolderCallback&& callback);
1277
1278 private:
1279 void ProcessQueryCallbacks();
1280
1284
1285 friend class World;
1286 protected:
1288 {
1289 friend class World;
1290 public:
1292 bool EvaluateOpcode(WorldPacket& p, time_t time) const;
1293 protected:
1300
1301 uint32 GetMaxPacketCounterAllowed(uint16 opcode) const;
1302
1304
1305 private:
1307 typedef std::unordered_map<uint16, PacketCounter> PacketThrottlingMap;
1308 // mark this member as "mutable" so it can be modified even in const functions
1310
1311 DosProtection(DosProtection const& right) = delete;
1312 DosProtection& operator=(DosProtection const& right) = delete;
1313 } AntiDOS;
1314
1315 private:
1316 // private trade methods
1317 void moveItems(Item* myItems[], Item* hisItems[]);
1318
1319 bool CanUseBank(ObjectGuid bankerGUID = ObjectGuid::Empty) const;
1320
1321 // logging helper
1322 void LogUnexpectedOpcode(WorldPacket* packet, char const* status, const char *reason);
1323 void LogUnprocessedTail(WorldPacket* packet);
1324
1325 // EnumData helpers
1327 {
1328 return _legitCharacters.find(lowGUID) != _legitCharacters.end();
1329 }
1330
1331 // Movement helpers
1332 Unit* ValidateAndGetUnitBeingMoved(ObjectGuid guid, OpcodeClient opcode, bool forStatusAck) const;
1333
1334 // this stores the GUIDs of the characters who can login
1335 // characters who failed on Player::BuildEnumData shouldn't login
1337
1338 ObjectGuid::LowType m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
1340 std::shared_ptr<WorldSocket> m_Socket;
1341 std::string m_Address; // Current Remote Address
1342 // std::string m_LAddress; // Last Attempted Remote Adress - we can not set attempted ip for a non-existing session!
1343
1346 std::string _accountName;
1348
1349 // Warden
1350 std::unique_ptr<Warden> _warden; // Remains NULL if Warden system is not enabled by config
1351
1353 bool m_inQueue; // session wait in auth.queue
1354 bool m_playerLoading; // code processed in LoginPlayer
1355 bool m_playerLogout; // code processed in LogoutPlayer
1361 std::atomic<uint32> m_latency;
1363 std::array<uint32, MAX_ACCOUNT_TUTORIAL_VALUES> _tutorials;
1365
1366 std::unordered_map<uint32 /*instanceId*/, SystemTimePoint/*releaseTime*/> _instanceResetTimes;
1367
1368 struct Addons
1369 {
1370 static uint32 constexpr MaxSecureAddons = 25;
1371
1372 std::vector<SecureAddonInfo> SecureAddons;
1373 uint32 LastBannedAddOnTimestamp = 0;
1374 } _addons;
1382
1383 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.
1385 void ComputeNewClockDelta();
1386
1387 std::map<uint32, uint32> _pendingTimeSyncRequests; // key: counter. value: server time when packet with that counter was sent.
1390
1391 // Packets cooldown
1394
1395 WorldSession(WorldSession const& right) = delete;
1396 WorldSession& operator=(WorldSession const& right) = delete;
1397};
1398
1399#endif
AuctionCommand
AuctionResult
std::array< uint8, SESSION_KEY_LENGTH > SessionKey
Definition AuthDefines.h:25
LocaleConstant
Definition Common.h:48
AccountTypes
Definition Common.h:39
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
Language
ResponseCodes
TradeStatus
ChatMsg
ActivateTaxiReply
PartyResult
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:783
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
uint8 _tutorialsChanged
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
std::array< uint32, MAX_ACCOUNT_TUTORIAL_VALUES > _tutorials
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
AccountData const * GetAccountData(AccountDataType type) 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
uint32 GetTutorialInt(uint8 index) const
GameClient * _gameClient
AccountTypes _security
uint32 GetLatency() const
uint8 GetExpansion() 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:570
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 Loot.h:226
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