Files
TCPlayerbotCore/src/server/game/Server/WorldSession.h
T

1386 lines
59 KiB
C++
Raw Normal View History

2010-10-07 15:54:07 +02:00
/*
2015-01-01 00:27:46 +01:00
* Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
2010-10-07 15:54:07 +02:00
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
2009-10-17 15:51:44 -07:00
/// \addtogroup u2w
/// @{
/// \file
2009-10-17 15:51:44 -07:00
#ifndef __WORLDSESSION_H
#define __WORLDSESSION_H
2009-10-17 15:51:44 -07:00
#include "Common.h"
2010-06-08 13:05:47 -06:00
#include "SharedDefines.h"
#include "AddonMgr.h"
2010-09-03 00:04:14 +02:00
#include "DatabaseEnv.h"
2010-06-08 13:05:47 -06:00
#include "World.h"
#include "Opcodes.h"
#include "WorldPacket.h"
#include "Cryptography/BigNumber.h"
2012-08-01 23:36:41 +01:00
#include "Opcodes.h"
#include "AccountMgr.h"
#include <unordered_set>
2009-10-17 15:51:44 -07:00
class Channel;
class Creature;
class GameObject;
class InstanceSave;
class Item;
class LoginQueryHolder;
class Object;
class Player;
class Quest;
class SpellCastTargets;
class Unit;
class Warden;
class WorldPacket;
class WorldSession;
class WorldSocket;
2009-09-24 14:27:20 -07:00
struct AreaTableEntry;
struct AuctionEntry;
struct DeclinedName;
struct ItemTemplate;
struct MovementInfo;
struct TradeStatusInfo;
namespace lfg
{
struct LfgJoinResultData;
struct LfgPlayerBoot;
struct LfgProposal;
2012-10-17 14:19:59 +02:00
struct LfgQueueStatusData;
struct LfgPlayerRewardData;
struct LfgRoleCheck;
struct LfgUpdateData;
}
2010-08-29 20:28:14 -07:00
2013-09-27 12:46:01 +02:00
namespace rbac
{
class RBACData;
}
namespace WorldPackets
{
namespace Achievement
{
class GuildSetFocusedAchievement;
}
namespace AuctionHouse
{
2015-01-17 03:55:29 +01:00
class AuctionHelloRequest;
}
namespace BlackMarket
{
class BlackMarketOpen;
}
namespace Character
{
struct CharacterCreateInfo;
struct CharacterRenameInfo;
struct CharCustomizeInfo;
struct CharRaceOrFactionChangeInfo;
struct CharacterUndeleteInfo;
class EnumCharacters;
class CreateChar;
class DeleteChar;
class CharacterRenameRequest;
class CharCustomize;
class CharRaceOrFactionChange;
class GenerateRandomCharacterName;
class GetUndeleteCooldownStatus;
class ReorderCharacters;
class UndeleteCharacter;
class PlayerLogin;
class LogoutRequest;
class LogoutCancel;
class LoadingScreenNotify;
class SetActionBarToggles;
}
2014-11-16 06:08:46 +01:00
namespace ClientConfig
{
class RequestAccountData;
class UserClientUpdateAccountData;
}
namespace Channel
{
class ChannelPlayerCommand;
class JoinChannel;
2014-11-23 04:25:47 +01:00
class LeaveChannel;
}
namespace Chat
{
class ChatMessage;
class ChatMessageWhisper;
class ChatMessageChannel;
class ChatAddonMessage;
class ChatAddonMessageWhisper;
class ChatMessageAFK;
class ChatMessageDND;
class ChatMessageEmote;
class CTextEmote;
}
namespace Combat
{
class AttackSwing;
class AttackStop;
}
namespace Duel
{
class DuelResponse;
}
namespace EquipmentSet
{
class SaveEquipmentSet;
}
2014-12-29 02:54:44 +02:00
namespace GameObject
{
2014-12-29 02:54:44 +02:00
class GameObjectReportUse;
class GameObjectUse;
}
2014-12-29 02:54:44 +02:00
namespace Guild
2014-11-30 15:37:11 +01:00
{
2014-12-29 02:54:44 +02:00
class QueryGuildInfo;
2014-11-30 15:37:11 +01:00
}
2015-02-01 20:52:05 +01:00
namespace Inspect
{
class Inspect;
class InspectPVPRequest;
class QueryInspectAchievements;
class RequestHonorStats;
}
2014-12-29 02:54:44 +02:00
namespace Item
2014-11-16 00:05:42 +02:00
{
class AutoEquipItem;
class AutoStoreBagItem;
class BuyBackItem;
class DestroyItem;
2015-02-01 20:52:05 +01:00
class GetItemPurchaseData;
class RepairItem;
class SellItem;
2014-12-29 02:54:44 +02:00
class SplitItem;
class SwapInvItem;
class SwapItem;
2014-11-16 00:05:42 +02:00
}
2014-11-10 05:08:29 +00:00
2014-12-29 02:54:44 +02:00
namespace Loot
2014-11-10 05:08:29 +00:00
{
2014-12-29 02:54:44 +02:00
class LootUnit;
class AutoStoreLootItem;
class LootRelease;
class LootMoney;
2014-11-10 05:08:29 +00:00
}
2014-11-10 05:14:35 +00:00
namespace Mail
{
class MailCreateTextItem;
class MailDelete;
class MailGetList;
class MailMarkAsRead;
class MailQueryNextMailTime;
class MailReturnToSender;
class MailTakeItem;
class MailTakeMoney;
class SendMail;
}
2014-11-10 05:14:35 +00:00
namespace Misc
{
2014-12-30 03:09:57 +02:00
class AreaTrigger;
2014-11-23 04:25:47 +01:00
class SetSelection;
2014-11-10 05:14:35 +00:00
class ViolenceLevel;
class TimeSyncResponse;
2014-11-23 04:25:47 +01:00
class TutorialSetFlag;
2015-01-10 01:35:47 +01:00
class SetDungeonDifficulty;
class SetRaidDifficulty;
class PortGraveyard;
class ReclaimCorpse;
class RepopRequest;
class RequestCemeteryList;
class ResurrectResponse;
class StandStateChange;
class UITimeRequest;
2014-11-10 05:14:35 +00:00
}
namespace Movement
{
class ClientPlayerMovement;
class WorldPortAck;
class MoveTeleportAck;
}
2014-11-24 20:50:19 +02:00
namespace NPC
{
class Hello;
}
namespace Query
{
class QueryCreature;
class QueryPlayerName;
class QueryPageText;
2014-11-24 20:50:19 +02:00
class QueryNPCText;
class DBQueryBulk;
2014-12-28 16:01:53 +00:00
class QueryGameObject;
class QueryCorpseLocationFromClient;
class QueryCorpseTransport;
class QueryTime;
}
2014-11-19 00:30:31 +02:00
namespace Quest
{
class QuestGiverStatusQuery;
class QuestGiverStatusMultipleQuery;
class QuestGiverHello;
class QueryQuestInfo;
class QuestGiverChooseReward;
class QuestGiverCompleteQuest;
class QuestGiverRequestReward;
class QuestGiverQueryQuest;
2014-11-19 00:30:31 +02:00
}
namespace Social
{
class AddFriend;
class AddIgnore;
class DelFriend;
class DelIgnore;
class SendContactList;
class SetContactNotes;
}
2014-12-29 02:54:44 +02:00
namespace Spells
{
class CancelAura;
class CastSpell;
class PetCastSpell;
2014-12-29 02:54:44 +02:00
class SetActionButton;
}
2014-12-28 16:01:53 +00:00
2014-12-29 02:54:44 +02:00
namespace Talent
2014-12-28 16:01:53 +00:00
{
2014-12-29 02:54:44 +02:00
class SetSpecialization;
class LearnTalents;
2014-12-29 02:54:44 +02:00
}
namespace Ticket
{
class GMTicketGetSystemStatus;
class GMTicketGetCaseStatus;
class GMTicketGetTicket;
class GMTicketAcknowledgeSurvey;
}
2014-12-29 02:54:44 +02:00
namespace Trade
{
class CancelTrade;
2014-12-28 16:01:53 +00:00
}
2015-02-05 20:18:32 +01:00
namespace Who
{
class WhoIsRequest;
class WhoRequestPkt;
}
}
enum AccountDataType
{
GLOBAL_CONFIG_CACHE = 0, // 0x01 g
PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p
GLOBAL_BINDINGS_CACHE = 2, // 0x04 g
PER_CHARACTER_BINDINGS_CACHE = 3, // 0x08 p
GLOBAL_MACROS_CACHE = 4, // 0x10 g
PER_CHARACTER_MACROS_CACHE = 5, // 0x20 p
PER_CHARACTER_LAYOUT_CACHE = 6, // 0x40 p
PER_CHARACTER_CHAT_CACHE = 7 // 0x80 p
};
2009-10-17 15:51:44 -07:00
#define NUM_ACCOUNT_DATA_TYPES 8
2009-10-17 15:51:44 -07:00
#define GLOBAL_CACHE_MASK 0x15
#define PER_CHARACTER_CACHE_MASK 0xEA
2009-10-17 15:51:44 -07:00
#define REGISTERED_ADDON_PREFIX_SOFTCAP 64
2014-11-23 04:25:47 +01:00
enum TutorialAction
{
TUTORIAL_ACTION_UPDATE = 0,
TUTORIAL_ACTION_CLEAR = 1,
TUTORIAL_ACTION_RESET = 2
};
/*
enum Tutorials
{
2014-11-23 04:25:47 +01:00
TUTORIAL_TALENT = 0,
TUTORIAL_SPEC = 1,
TUTORIAL_GLYPH = 2,
TUTORIAL_SPELLBOOK = 3,
TUTORIAL_PROFESSIONS = 4,
TUTORIAL_CORE_ABILITITES = 5,
TUTORIAL_PET_JOURNAL = 6,
TUTORIAL_WHAT_HAS_CHANGED = 7,
TUTORIAL_GARRISON_BUILDING = 8,
TUTORIAL_GARRISON_MISSION_LIST = 9,
TUTORIAL_GARRISON_MISSION_PAGE = 10,
TUTORIAL_GARRISON_LANDING = 11,
TUTORIAL_GARRISON_ZONE_ABILITY = 12,
TUTORIAL_WORLD_MAP_FRAME = 13,
TUTORIAL_CLEAN_UP_BAGS = 14,
TUTORIAL_BAG_SETTINGS = 15,
TUTORIAL_REAGENT_BANK_UNLOCK = 16,
TUTORIAL_TOYBOX_FAVORITE = 17,
TUTORIAL_TOYBOX_MOUSEWHEEL_PAGING = 18,
TUTORIAL_LFG_LIST = 19
};
2014-11-23 04:25:47 +01:00
*/
#define MAX_ACCOUNT_TUTORIAL_VALUES 8
struct AccountData
{
2014-11-16 06:08:46 +01:00
time_t Time = 0;
std::string Data;
};
2009-10-17 15:51:44 -07:00
enum PartyOperation
{
PARTY_OP_INVITE = 0,
PARTY_OP_UNINVITE = 1,
PARTY_OP_LEAVE = 2,
PARTY_OP_SWAP = 4
};
enum BarberShopResult
{
BARBER_SHOP_RESULT_SUCCESS = 0,
BARBER_SHOP_RESULT_NO_MONEY = 1,
BARBER_SHOP_RESULT_NOT_ON_CHAIR = 2,
BARBER_SHOP_RESULT_NO_MONEY_2 = 3
};
2009-10-17 15:51:44 -07:00
enum BFLeaveReason
{
BF_LEAVE_REASON_CLOSE = 0x00000001,
//BF_LEAVE_REASON_UNK1 = 0x00000002, (not used)
//BF_LEAVE_REASON_UNK2 = 0x00000004, (not used)
BF_LEAVE_REASON_EXITED = 0x00000008,
BF_LEAVE_REASON_LOW_LEVEL = 0x00000010
};
2010-04-11 11:18:20 +04:00
enum ChatRestrictionType
{
ERR_CHAT_RESTRICTED = 0,
ERR_CHAT_THROTTLED = 1,
ERR_USER_SQUELCHED = 2,
ERR_YELL_RESTRICTED = 3
};
2009-10-17 15:51:44 -07:00
enum CharterTypes
{
GUILD_CHARTER_TYPE = 4,
ARENA_TEAM_CHARTER_2v2_TYPE = 2,
ARENA_TEAM_CHARTER_3v3_TYPE = 3,
ARENA_TEAM_CHARTER_5v5_TYPE = 5,
};
enum DeclinedNameResult
{
DECLINED_NAMES_RESULT_SUCCESS = 0,
DECLINED_NAMES_RESULT_ERROR = 1
};
2011-11-25 23:24:40 +01:00
#define DB2_REPLY_SPARSE 2442913102
#define DB2_REPLY_ITEM 1344507586
//class to deal with packet processing
//allows to determine if next packet is safe to be processed
class PacketFilter
{
public:
explicit PacketFilter(WorldSession* pSession) : m_pSession(pSession) { }
virtual ~PacketFilter() { }
virtual bool Process(WorldPacket* /*packet*/) { return true; }
virtual bool ProcessLogout() const { return true; }
protected:
WorldSession* const m_pSession;
2014-04-20 16:48:35 +02:00
private:
PacketFilter(PacketFilter const& right) = delete;
PacketFilter& operator=(PacketFilter const& right) = delete;
};
//process only thread-safe packets in Map::Update()
class MapSessionFilter : public PacketFilter
{
public:
explicit MapSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
~MapSessionFilter() { }
2014-08-09 20:17:40 +01:00
virtual bool Process(WorldPacket* packet) override;
//in Map::Update() we do not process player logout!
2014-08-09 20:17:40 +01:00
virtual bool ProcessLogout() const override { return false; }
};
//class used to filer only thread-unsafe packets from queue
//in order to update only be used in World::UpdateSessions()
class WorldSessionFilter : public PacketFilter
{
public:
explicit WorldSessionFilter(WorldSession* pSession) : PacketFilter(pSession) { }
~WorldSessionFilter() { }
2014-08-09 20:17:40 +01:00
virtual bool Process(WorldPacket* packet) override;
};
struct PacketCounter
{
time_t lastReceiveTime;
uint32 amountCounter;
};
/// Player session in the World
2010-02-05 00:31:28 +01:00
class WorldSession
{
public:
WorldSession(uint32 id, uint32 battlenetAccountId, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
~WorldSession();
2009-10-17 15:51:44 -07:00
bool PlayerLoading() const { return !m_playerLoading.IsEmpty(); }
bool PlayerLogout() const { return m_playerLogout; }
bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
bool PlayerRecentlyLoggedOut() const { return m_playerRecentlyLogout; }
2009-10-17 15:51:44 -07:00
void ReadAddonsInfo(ByteBuffer& data);
void SendAddonsInfo();
bool IsAddonRegistered(const std::string& prefix) const;
2009-10-17 15:51:44 -07:00
void SendPacket(WorldPacket const* packet, bool forced = false);
void AddInstanceConnection(std::shared_ptr<WorldSocket> sock) { m_Socket[1] = sock; }
2014-10-31 22:36:43 +01:00
void SendNotification(char const* format, ...) ATTR_PRINTF(2, 3);
void SendNotification(uint32 stringId, ...);
void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName *declinedName);
void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0);
2011-04-29 20:47:02 +02:00
void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2, 3);
void SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps, std::set<uint32> const& worldMapAreaSwaps);
void SendQueryTimeResponse();
2009-10-17 15:51:44 -07:00
void SendAuthResponse(uint8 code, bool queued, uint32 queuePos = 0);
void SendClientCacheVersion(uint32 version);
2013-09-27 12:46:01 +02:00
rbac::RBACData* GetRBACData();
2013-02-04 08:21:25 +01:00
bool HasPermission(uint32 permissionId);
void LoadPermissions();
void InvalidateRBACData(); // Used to force LoadPermissions at next HasPermission check
2013-02-04 08:21:25 +01:00
AccountTypes GetSecurity() const { return _security; }
uint32 GetAccountId() const { return _accountId; }
ObjectGuid GetAccountGUID() const { return ObjectGuid::Create<HighGuid::WowAccount>(GetAccountId()); }
uint32 GetBattlenetAccountId() const { return _battlenetAccountId; }
ObjectGuid GetBattlenetAccountGUID() const { return ObjectGuid::Create<HighGuid::BNetAccount>(GetBattlenetAccountId()); }
Player* GetPlayer() const { return _player; }
std::string const& GetPlayerName() const;
std::string GetPlayerInfo() const;
void SetSecurity(AccountTypes security) { _security = security; }
std::string const& GetRemoteAddress() { return m_Address; }
2011-11-07 11:06:39 -06:00
void SetPlayer(Player* player);
2014-12-29 01:00:16 +01:00
uint8 GetExpansion() const { return m_expansion; }
2009-10-17 15:51:44 -07:00
void InitWarden(BigNumber* k, std::string const& os);
2008-11-30 12:47:26 -06:00
/// Session in auth.queue currently
void SetInQueue(bool state) { m_inQueue = state; }
2009-10-17 15:51:44 -07:00
/// Is the user engaged in a log out process?
bool isLogingOut() const { return _logoutTime || m_playerLogout; }
2009-10-17 15:51:44 -07:00
/// Engage the logout process for the user
void SetLogoutStartTime(time_t requestTime)
{
_logoutTime = requestTime;
}
2009-10-17 15:51:44 -07:00
/// Is logout cooldown expired?
bool ShouldLogOut(time_t currTime) const
{
return (_logoutTime > 0 && currTime >= _logoutTime + 20);
}
2009-10-17 15:51:44 -07:00
void LogoutPlayer(bool save);
void KickPlayer();
2009-10-17 15:51:44 -07:00
void QueuePacket(WorldPacket* new_packet);
bool Update(uint32 diff, PacketFilter& updater);
2009-10-17 15:51:44 -07:00
/// Handle the authentication waiting queue (to be completed)
void SendAuthWaitQue(uint32 position);
2009-10-17 15:51:44 -07:00
void SendSetTimeZoneInformation();
void SendFeatureSystemStatus();
void SendFeatureSystemStatusGlueScreen();
void SendNameQueryOpcode(ObjectGuid guid);
void SendTrainerList(ObjectGuid guid);
void SendTrainerList(ObjectGuid guid, std::string const& strTitle);
void SendListInventory(ObjectGuid guid);
void SendShowBank(ObjectGuid guid);
bool CanOpenMailBox(ObjectGuid guid);
void SendShowMailBox(ObjectGuid guid);
void SendTabardVendorActivate(ObjectGuid guid);
void SendSpiritResurrect();
void SendBindPoint(Creature* npc);
2009-10-17 15:51:44 -07:00
void SendAttackStop(Unit const* enemy);
2009-10-17 15:51:44 -07:00
void SendBattleGroundList(ObjectGuid guid, BattlegroundTypeId bgTypeId = BATTLEGROUND_RB);
2009-10-17 15:51:44 -07:00
void SendTradeStatus(TradeStatusInfo const& status);
void SendUpdateTrade(bool trader_data = true);
void SendCancelTrade();
2009-10-17 15:51:44 -07:00
void SendPetitionQueryOpcode(ObjectGuid petitionguid);
2009-10-17 15:51:44 -07:00
// Spell
void HandleClientCastFlags(WorldPacket& recvPacket, uint8 castFlags, SpellCastTargets& targets);
// Pet
void SendPetNameQuery(ObjectGuid guid, uint32 petnumber);
void SendStablePet(ObjectGuid guid);
void SendStablePetCallback(PreparedQueryResult result, ObjectGuid guid);
2015-01-17 03:55:29 +01:00
void SendPetStableResult(uint8 guid);
bool CheckStableMaster(ObjectGuid guid);
2009-10-17 15:51:44 -07:00
// Account Data
AccountData const* GetAccountData(AccountDataType type) const { return &_accountData[type]; }
void SetAccountData(AccountDataType type, uint32 time, std::string const& data);
void LoadGlobalAccountData();
void LoadAccountData(PreparedQueryResult result, uint32 mask);
2009-06-11 00:45:59 -05:00
void LoadTutorialsData();
void SendTutorialsData();
2010-08-21 03:19:25 +02:00
void SaveTutorialsData(SQLTransaction& trans);
uint32 GetTutorialInt(uint8 index) const { return _tutorials[index]; }
void SetTutorialInt(uint8 index, uint32 value)
2009-06-11 00:45:59 -05:00
{
if (_tutorials[index] != value)
2009-06-11 00:45:59 -05:00
{
_tutorials[index] = value;
_tutorialsChanged = true;
2009-06-11 00:45:59 -05:00
}
}
//used with item_page table
2010-04-07 22:59:46 +02:00
bool SendItemInfo(uint32 itemid, WorldPacket data);
//auction
void SendAuctionHello(ObjectGuid guid, Creature* unit);
/**
* @fn void WorldSession::SendAuctionCommandResult(AuctionEntry* auction, uint32 Action, uint32 ErrorCode, uint32 bidError = 0);
*
* @brief Notifies the client of the result of his last auction operation. It is called when the player bids, creates, or deletes an auction
*
* @param auction The relevant auction object
* @param Action The action that was performed.
* @param ErrorCode The resulting error code.
* @param bidError (Optional) the bid error.
*/
void SendAuctionCommandResult(AuctionEntry* auction, uint32 Action, uint32 ErrorCode, uint32 bidError = 0);
void SendAuctionBidderNotification(uint32 location, uint32 auctionId, ObjectGuid bidder, uint32 bidSum, uint32 diff, uint32 item_template);
void SendAuctionOwnerNotification(AuctionEntry* auction);
void SendAuctionRemovedNotification(uint32 auctionId, uint32 itemEntry, int32 randomPropertyId);
2009-10-17 15:51:44 -07:00
// Black Market
void SendBlackMarketOpenResult(ObjectGuid guid, Creature* auctioneer);
//Item Enchantment
void SendEnchantmentLog(ObjectGuid target, ObjectGuid caster, uint32 itemId, uint32 enchantId);
void SendItemEnchantTimeUpdate(ObjectGuid Playerguid, ObjectGuid Itemguid, uint32 slot, uint32 Duration);
2009-10-17 15:51:44 -07:00
//Taxi
void SendTaxiStatus(ObjectGuid guid);
2010-04-07 22:59:46 +02:00
void SendTaxiMenu(Creature* unit);
void SendDoFlight(uint32 mountDisplayId, uint32 path, uint32 pathNode = 0);
bool SendLearnNewTaxiNode(Creature* unit);
2010-07-20 18:27:18 +02:00
void SendDiscoverNewTaxiNode(uint32 nodeid);
2009-10-17 15:51:44 -07:00
// Guild/Arena Team
void SendArenaTeamCommandResult(uint32 team_action, std::string const& team, std::string const& player, uint32 error_id = 0);
void SendNotInArenaTeamPacket(uint8 type);
void SendPetitionShowList(ObjectGuid guid);
2009-10-17 15:51:44 -07:00
void BuildPartyMemberStatsChangedPacket(Player* player, WorldPacket* data);
2009-10-17 15:51:44 -07:00
void DoLootRelease(ObjectGuid lguid);
2009-10-17 15:51:44 -07:00
// Account mute time
time_t m_muteTime;
2009-10-17 15:51:44 -07:00
// Locales
LocaleConstant GetSessionDbcLocale() const { return m_sessionDbcLocale; }
2010-09-17 07:04:29 +02:00
LocaleConstant GetSessionDbLocaleIndex() const { return m_sessionDbLocaleIndex; }
char const* GetTrinityString(uint32 entry) const;
2009-10-17 15:51:44 -07:00
uint32 GetLatency() const { return m_latency; }
void SetLatency(uint32 latency) { m_latency = latency; }
void ResetClientTimeDelay() { m_clientTimeDelay = 0; }
2010-04-29 23:12:16 +02:00
std::atomic<int32> m_timeOutTime;
void UpdateTimeOutTime(uint32 diff)
{
m_timeOutTime -= int32(diff);
}
void ResetTimeOutTime()
{
m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME));
}
bool IsConnectionIdle() const
{
return m_timeOutTime <= 0 && !m_inQueue;
}
2010-04-29 23:12:16 +02:00
// Recruit-A-Friend Handling
2012-06-21 21:05:45 +03:00
uint32 GetRecruiterId() const { return recruiterId; }
bool IsARecruiter() const { return isRecruiter; }
2009-10-17 15:51:44 -07:00
public: // opcodes handlers
2009-10-17 15:51:44 -07:00
void Handle_NULL(WorldPacket& recvPacket); // not used
void Handle_EarlyProccess(WorldPacket& recvPacket); // just mark packets processed in WorldSocket::OnRead
void Handle_ServerSide(WorldPacket& recvPacket); // sever side only, can't be accepted from client
2009-10-17 15:51:44 -07:00
void HandleCharEnum(PreparedQueryResult result);
void HandleCharEnumOpcode(WorldPackets::Character::EnumCharacters& /*enumCharacters*/);
void HandleCharUndeleteEnum(PreparedQueryResult result);
void HandleCharUndeleteEnumOpcode(WorldPackets::Character::EnumCharacters& /*enumCharacters*/);
void HandleCharDeleteOpcode(WorldPackets::Character::DeleteChar& charDelete);
void HandleCharCreateOpcode(WorldPackets::Character::CreateChar& charCreate);
void HandleCharCreateCallback(PreparedQueryResult result, WorldPackets::Character::CharacterCreateInfo* createInfo);
void HandlePlayerLoginOpcode(WorldPackets::Character::PlayerLogin& playerLogin);
void HandleContinuePlayerLogin();
void HandleLoadScreenOpcode(WorldPackets::Character::LoadingScreenNotify& loadingScreenNotify);
void HandlePlayerLogin(LoginQueryHolder * holder);
void HandleCharRenameOpcode(WorldPackets::Character::CharacterRenameRequest& request);
void HandleCharRenameCallBack(PreparedQueryResult result, WorldPackets::Character::CharacterRenameInfo* renameInfo);
void HandleSetPlayerDeclinedNames(WorldPacket& recvData);
void HandleAlterAppearance(WorldPacket& recvData);
void HandleCharCustomizeOpcode(WorldPackets::Character::CharCustomize& packet);
void HandleCharCustomizeCallback(PreparedQueryResult result, WorldPackets::Character::CharCustomizeInfo* customizeInfo);
void HandleCharRaceOrFactionChangeOpcode(WorldPackets::Character::CharRaceOrFactionChange& packet);
void HandleCharRaceOrFactionChangeCallback(PreparedQueryResult result, WorldPackets::Character::CharRaceOrFactionChangeInfo* factionChangeInfo);
void HandleRandomizeCharNameOpcode(WorldPackets::Character::GenerateRandomCharacterName& packet);
void HandleReorderCharacters(WorldPackets::Character::ReorderCharacters& reorderChars);
void HandleOpeningCinematic(WorldPacket& recvData);
void HandleGetUndeleteCooldownStatus(WorldPackets::Character::GetUndeleteCooldownStatus& /*getCooldown*/);
void HandleUndeleteCooldownStatusCallback(PreparedQueryResult result);
void HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCharacter& undeleteInfo);
void HandleCharUndeleteCallback(PreparedQueryResult result, WorldPackets::Character::CharacterUndeleteInfo* undeleteInfo);
void SendCharCreate(ResponseCodes result);
void SendCharDelete(ResponseCodes result);
void SendCharRename(ResponseCodes result, WorldPackets::Character::CharacterRenameInfo const* renameInfo);
void SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo);
void SendCharFactionChange(ResponseCodes result, WorldPackets::Character::CharRaceOrFactionChangeInfo const* factionChangeInfo);
void SendSetPlayerDeclinedNamesResult(DeclinedNameResult result, ObjectGuid guid);
void SendBarberShopResult(BarberShopResult result);
void SendUndeleteCooldownStatusResponse(uint32 currentCooldown, uint32 maxCooldown);
void SendUndeleteCharacterResponse(CharacterUndeleteResult result, WorldPackets::Character::CharacterUndeleteInfo const* undeleteInfo);
// played time
void HandlePlayedTime(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
// new
void HandleMoveUnRootAck(WorldPacket& recvPacket);
void HandleMoveRootAck(WorldPacket& recvPacket);
void HandleLookingForGroup(WorldPacket& recvPacket);
// cemetery/graveyard related
void HandlePortGraveyard(WorldPackets::Misc::PortGraveyard& packet);
void HandleRequestCemeteryList(WorldPackets::Misc::RequestCemeteryList& packet);
2009-10-17 15:51:44 -07:00
2015-02-01 20:52:05 +01:00
// Inspect
void HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect);
void HandleRequestHonorStatsOpcode(WorldPackets::Inspect::RequestHonorStats& request);
void HandleInspectPVP(WorldPackets::Inspect::InspectPVPRequest& request);
void HandleQueryInspectAchievements(WorldPackets::Inspect::QueryInspectAchievements& inspect);
2009-10-17 15:51:44 -07:00
void HandleMoveWaterWalkAck(WorldPacket& recvPacket);
void HandleFeatherFallAck(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
void HandleMoveHoverAck(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2011-10-18 14:59:23 +02:00
void HandleMountSpecialAnimOpcode(WorldPacket& recvdata);
2009-10-17 15:51:44 -07:00
// character view
void HandleShowingHelmOpcode(WorldPacket& recvData);
void HandleShowingCloakOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
// repair
void HandleRepairItemOpcode(WorldPackets::Item::RepairItem& packet);
2009-10-17 15:51:44 -07:00
// Knockback
void HandleMoveKnockBackAck(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck& packet);
void HandleForceSpeedChangeAck(WorldPacket& recvData);
2013-04-09 17:24:39 +02:00
void HandleSetCollisionHeightAck(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandlePingOpcode(WorldPacket& recvPacket);
void HandleRepopRequest(WorldPackets::Misc::RepopRequest& packet);
void HandleAutostoreLootItemOpcode(WorldPackets::Loot::AutoStoreLootItem& packet);
void HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& packet);
2014-12-29 02:54:44 +02:00
void HandleLootOpcode(WorldPackets::Loot::LootUnit& packet);
void HandleLootReleaseOpcode(WorldPackets::Loot::LootRelease& packet);
void HandleLootMasterGiveOpcode(WorldPacket& recvPacket);
2015-02-05 20:18:32 +01:00
void HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest);
void HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequest& logoutRequest);
void HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& logoutCancel);
2009-10-17 15:51:44 -07:00
2009-02-09 08:16:34 -05:00
// GM Ticket opcodes
2009-05-31 15:56:51 -05:00
void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
void HandleGMTicketGetCaseStatusOpcode(WorldPackets::Ticket::GMTicketGetCaseStatus& packet);
void HandleGMTicketGetTicketOpcode(WorldPackets::Ticket::GMTicketGetTicket& packet);
void HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTicketGetSystemStatus& packet);
2010-08-29 20:28:14 -07:00
void HandleGMSurveySubmit(WorldPacket& recvPacket);
void HandleReportLag(WorldPacket& recvPacket);
void HandleGMResponseResolve(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleTogglePvP(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleZoneUpdateOpcode(WorldPacket& recvPacket);
2014-11-23 04:25:47 +01:00
void HandleSetSelectionOpcode(WorldPackets::Misc::SetSelection& packet);
void HandleStandStateChangeOpcode(WorldPackets::Misc::StandStateChange& packet);
void HandleEmoteOpcode(WorldPacket& recvPacket);
// Social
void HandleContactListOpcode(WorldPackets::Social::SendContactList& packet);
void HandleAddFriendOpcode(WorldPackets::Social::AddFriend& packet);
void HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std::string const& friendNote);
void HandleDelFriendOpcode(WorldPackets::Social::DelFriend& packet);
void HandleAddIgnoreOpcode(WorldPackets::Social::AddIgnore& packet);
void HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result);
void HandleDelIgnoreOpcode(WorldPackets::Social::DelIgnore& packet);
void HandleSetContactNotesOpcode(WorldPackets::Social::SetContactNotes& packet);
2015-01-17 03:55:29 +01:00
void HandleBugReportOpcode(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
2014-12-30 03:09:57 +02:00
void HandleAreaTriggerOpcode(WorldPackets::Misc::AreaTrigger& packet);
2009-10-17 15:51:44 -07:00
void HandleSetFactionAtWar(WorldPacket& recvData);
void HandleSetFactionCheat(WorldPacket& recvData);
void HandleSetWatchedFactionOpcode(WorldPacket& recvData);
void HandleSetFactionInactiveOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2014-11-16 06:08:46 +01:00
void HandleUpdateAccountData(WorldPackets::ClientConfig::UserClientUpdateAccountData& packet);
void HandleRequestAccountData(WorldPackets::ClientConfig::RequestAccountData& request);
void HandleSetActionButtonOpcode(WorldPackets::Spells::SetActionButton& packet);
2009-10-17 15:51:44 -07:00
2014-12-28 16:01:53 +00:00
void HandleGameObjectUseOpcode(WorldPackets::GameObject::GameObjectUse& packet);
void HandleMeetingStoneInfo(WorldPacket& recPacket);
2014-12-28 16:01:53 +00:00
void HandleGameobjectReportUse(WorldPackets::GameObject::GameObjectReportUse& packet);
2009-10-17 15:51:44 -07:00
void HandleNameQueryOpcode(WorldPackets::Query::QueryPlayerName& packet);
void HandleQueryTimeOpcode(WorldPackets::Query::QueryTime& queryTime);
void HandleCreatureQuery(WorldPackets::Query::QueryCreature& packet);
2014-11-24 20:50:19 +02:00
void HandleDBQueryBulk(WorldPackets::Query::DBQueryBulk& packet);
2009-10-17 15:51:44 -07:00
2014-12-28 16:01:53 +00:00
void HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObject& packet);
2009-10-17 15:51:44 -07:00
void HandleMoveWorldportAckOpcode(WorldPackets::Movement::WorldPortAck& packet);
void HandleMoveWorldportAckOpcode(); // for server-side calls
2009-10-17 15:51:44 -07:00
void HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMovement& packet);
void HandleSetActiveMoverOpcode(WorldPacket& recvData);
void HandleMoveNotActiveMover(WorldPacket& recvData);
void HandleDismissControlledVehicle(WorldPacket& recvData);
void HandleRequestVehicleExit(WorldPacket& recvData);
void HandleChangeSeatsOnControlledVehicle(WorldPacket& recvData);
void HandleMoveTimeSkippedOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
void HandleRequestRaidInfoOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2015-01-25 21:08:54 +01:00
void HandleRequestBattlefieldStatusOpcode(WorldPacket& recvData);
void HandleBattleMasterHelloOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
void HandleGroupInviteOpcode(WorldPacket& recvPacket);
//void HandleGroupCancelOpcode(WorldPacket& recvPacket);
void HandleGroupInviteResponseOpcode(WorldPacket& recvPacket);
2009-05-31 15:56:51 -05:00
void HandleGroupUninviteOpcode(WorldPacket& recvPacket);
void HandleGroupSetLeaderOpcode(WorldPacket& recvPacket);
void HandleGroupSetRolesOpcode(WorldPacket& recvData);
2009-05-31 15:56:51 -05:00
void HandleGroupDisbandOpcode(WorldPacket& recvPacket);
void HandleOptOutOfLootOpcode(WorldPacket& recvData);
void HandleLootMethodOpcode(WorldPacket& recvPacket);
void HandleLootRoll(WorldPacket& recvData);
void HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData);
void HandleRaidTargetUpdateOpcode(WorldPacket& recvData);
void HandleRaidReadyCheckOpcode(WorldPacket& recvData);
void HandleGroupRaidConvertOpcode(WorldPacket& recvData);
void HandleGroupRequestJoinUpdates(WorldPacket& recvData);
void HandleGroupChangeSubGroupOpcode(WorldPacket& recvData);
void HandleGroupSwapSubGroupOpcode(WorldPacket& recvData);
void HandleGroupAssistantLeaderOpcode(WorldPacket& recvData);
void HandlePartyAssignmentOpcode(WorldPacket& recvData);
void HandleRolePollBeginOpcode(WorldPacket& recvData);
void HandlePetitionBuyOpcode(WorldPacket& recvData);
void HandlePetitionShowSignOpcode(WorldPacket& recvData);
void HandlePetitionQueryOpcode(WorldPacket& recvData);
void HandlePetitionRenameGuildOpcode(WorldPacket& recvData);
void HandlePetitionSignOpcode(WorldPacket& recvData);
void HandlePetitionDeclineOpcode(WorldPacket& recvData);
void HandleOfferPetitionOpcode(WorldPacket& recvData);
void HandleTurnInPetitionOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
void HandleGuildQueryOpcode(WorldPackets::Guild::QueryGuildInfo& query);
void HandleGuildInviteOpcode(WorldPacket& recvPacket);
2015-01-25 21:08:54 +01:00
void HandleGuildOfficerRemoveMemberOpcode(WorldPacket& recvPacket);
void HandleGuildAcceptOpcode(WorldPacket& recvPacket);
void HandleGuildDeclineOpcode(WorldPacket& recvPacket);
2009-05-31 15:56:51 -05:00
void HandleGuildEventLogQueryOpcode(WorldPacket& recvPacket);
void HandleGuildRosterOpcode(WorldPacket& recvPacket);
void HandleGuildRewardsQueryOpcode(WorldPacket& recvPacket);
void HandleGuildPromoteOpcode(WorldPacket& recvPacket);
void HandleGuildDemoteOpcode(WorldPacket& recvPacket);
void HandleGuildAssignRankOpcode(WorldPacket& recvPacket);
void HandleGuildLeaveOpcode(WorldPacket& recvPacket);
void HandleGuildDisbandOpcode(WorldPacket& recvPacket);
void HandleGuildSetAchievementTracking(WorldPacket& recvPacket);
void HandleGuildSetGuildMaster(WorldPacket& recvPacket);
void HandleGuildMOTDOpcode(WorldPacket& recvPacket);
void HandleGuildNewsUpdateStickyOpcode(WorldPacket& recvPacket);
void HandleGuildSetNoteOpcode(WorldPacket& recvPacket);
2015-01-25 21:08:54 +01:00
void HandleGuildGetRanksOpcode(WorldPacket& recvPacket);
void HandleGuildQueryNewsOpcode(WorldPacket& recvPacket);
void HandleGuildSetRankPermissionsOpcode(WorldPacket& recvPacket);
void HandleGuildAddRankOpcode(WorldPacket& recvPacket);
2015-01-25 21:08:54 +01:00
void HandleGuildDeleteRankOpcode(WorldPacket& recvPacket);
2009-05-31 15:56:51 -05:00
void HandleGuildChangeInfoTextOpcode(WorldPacket& recvPacket);
void HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket);
2012-08-10 14:25:04 +02:00
void HandleGuildRequestPartyState(WorldPacket& recvPacket);
void HandleGuildRequestChallengeUpdate(WorldPacket& recvPacket);
void HandleGuildRequestMaxDailyXP(WorldPacket& recvPacket);
2012-09-10 00:31:15 +01:00
void HandleAutoDeclineGuildInvites(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
2012-09-09 11:32:14 +02:00
void HandleGuildFinderAddRecruit(WorldPacket& recvPacket);
void HandleGuildFinderBrowse(WorldPacket& recvPacket);
void HandleGuildFinderDeclineRecruit(WorldPacket& recvPacket);
void HandleGuildFinderGetApplications(WorldPacket& recvPacket);
void HandleGuildFinderGetRecruits(WorldPacket& recvPacket);
void HandleGuildFinderPostRequest(WorldPacket& recvPacket);
void HandleGuildFinderRemoveRecruit(WorldPacket& recvPacket);
void HandleGuildFinderSetGuildPost(WorldPacket& recvPacket);
void HandleTaxiNodeStatusQueryOpcode(WorldPacket& recvPacket);
void HandleTaxiQueryAvailableNodes(WorldPacket& recvPacket);
void HandleActivateTaxiOpcode(WorldPacket& recvPacket);
2009-05-31 15:56:51 -05:00
void HandleActivateTaxiExpressOpcode(WorldPacket& recvPacket);
void HandleMoveSplineDoneOpcode(WorldPacket& recvPacket);
void SendActivateTaxiReply(ActivateTaxiReply reply);
2009-10-17 15:51:44 -07:00
void HandleTabardVendorActivateOpcode(WorldPacket& recvPacket);
2014-11-24 20:50:19 +02:00
void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet);
void HandleBuyBankSlotOpcode(WorldPacket& recvPacket);
2014-11-24 20:50:19 +02:00
void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
void HandleTrainerBuySpellOpcode(WorldPacket& recvPacket);
void HandlePetitionShowListOpcode(WorldPacket& recvPacket);
2014-11-24 20:50:19 +02:00
void HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet);
void HandleGossipSelectOptionOpcode(WorldPacket& recvPacket);
void HandleSpiritHealerActivateOpcode(WorldPacket& recvPacket);
2014-11-24 20:50:19 +02:00
void HandleNpcTextQueryOpcode(WorldPackets::Query::QueryNPCText& packet);
void HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet);
void HandleListStabledPetsOpcode(WorldPacket& recvPacket);
void HandleStablePet(WorldPacket& recvPacket);
void HandleStablePetCallback(PreparedQueryResult result);
void HandleUnstablePet(WorldPacket& recvPacket);
void HandleUnstablePetCallback(PreparedQueryResult result, uint32 petId);
void HandleBuyStableSlot(WorldPacket& recvPacket);
void HandleStableRevivePet(WorldPacket& recvPacket);
void HandleStableSwapPet(WorldPacket& recvPacket);
void HandleStableSwapPetCallback(PreparedQueryResult result, uint32 petId);
void SendTrainerBuyFailed(ObjectGuid guid, uint32 spellId, uint32 reason);
2009-10-17 15:51:44 -07:00
void HandleDuelResponseOpcode(WorldPackets::Duel::DuelResponse& duelResponse);
void HandleDuelAccepted();
void HandleDuelCancelled();
2009-10-17 15:51:44 -07:00
void HandleAcceptTradeOpcode(WorldPacket& recvPacket);
void HandleBeginTradeOpcode(WorldPacket& recvPacket);
void HandleBusyTradeOpcode(WorldPacket& recvPacket);
2014-11-10 05:08:29 +00:00
void HandleCancelTradeOpcode(WorldPackets::Trade::CancelTrade& cancelTrade);
void HandleClearTradeItemOpcode(WorldPacket& recvPacket);
void HandleIgnoreTradeOpcode(WorldPacket& recvPacket);
void HandleInitiateTradeOpcode(WorldPacket& recvPacket);
void HandleSetTradeGoldOpcode(WorldPacket& recvPacket);
void HandleSetTradeItemOpcode(WorldPacket& recvPacket);
void HandleUnacceptTradeOpcode(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
2015-01-17 03:55:29 +01:00
void HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& packet);
void HandleAuctionListItems(WorldPacket& recvData);
void HandleAuctionListBidderItems(WorldPacket& recvData);
void HandleAuctionSellItem(WorldPacket& recvData);
void HandleAuctionRemoveItem(WorldPacket& recvData);
void HandleAuctionListOwnerItems(WorldPacket& recvData);
void HandleAuctionPlaceBid(WorldPacket& recvData);
void HandleAuctionListPendingSales(WorldPacket& recvData);
// Black Market
void HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& packet);
void HandleGetMailList(WorldPackets::Mail::MailGetList& packet);
void HandleSendMail(WorldPackets::Mail::SendMail& packet);
void HandleMailTakeMoney(WorldPackets::Mail::MailTakeMoney& packet);
void HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& packet);
void HandleMailMarkAsRead(WorldPackets::Mail::MailMarkAsRead& packet);
void HandleMailReturnToSender(WorldPackets::Mail::MailReturnToSender& packet);
void HandleMailDelete(WorldPackets::Mail::MailDelete& packet);
void HandleItemTextQuery(WorldPacket& recvData);
void HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextItem& packet);
void HandleQueryNextMailTime(WorldPackets::Mail::MailQueryNextMailTime& packet);
void HandleCancelChanneling(WorldPacket& recvData);
2010-04-07 22:59:46 +02:00
void SendItemPageInfo(ItemTemplate* itemProto);
void HandleSplitItemOpcode(WorldPackets::Item::SplitItem& splitItem);
void HandleSwapInvItemOpcode(WorldPackets::Item::SwapInvItem& swapInvItem);
void HandleDestroyItemOpcode(WorldPackets::Item::DestroyItem& destroyItem);
void HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem& autoEquipItem);
void HandleSellItemOpcode(WorldPackets::Item::SellItem& packet);
void HandleBuyItemInSlotOpcode(WorldPacket& recvPacket);
void HandleBuyItemOpcode(WorldPacket& recvPacket);
2014-11-24 20:50:19 +02:00
void HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet);
void HandleAutoStoreBagItemOpcode(WorldPackets::Item::AutoStoreBagItem& packet);
void HandleReadItem(WorldPacket& recvPacket);
2011-10-18 14:59:23 +02:00
void HandleAutoEquipItemSlotOpcode(WorldPacket& recvPacket);
void HandleSwapItem(WorldPackets::Item::SwapItem& swapItem);
void HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet);
void HandleAutoBankItemOpcode(WorldPacket& recvPacket);
void HandleAutoStoreBankItemOpcode(WorldPacket& recvPacket);
void HandleWrapItemOpcode(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleAttackSwingOpcode(WorldPackets::Combat::AttackSwing& packet);
void HandleAttackStopOpcode(WorldPackets::Combat::AttackStop& packet);
void HandleSetSheathedOpcode(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleUseItemOpcode(WorldPacket& recvPacket);
void HandleOpenItemOpcode(WorldPacket& recvPacket);
void HandleCastSpellOpcode(WorldPackets::Spells::CastSpell& castRequest);
void HandleCancelCastOpcode(WorldPacket& recvPacket);
void HandleCancelAuraOpcode(WorldPackets::Spells::CancelAura& cancelAura);
void HandleCancelGrowthAuraOpcode(WorldPacket& recvPacket);
void HandleCancelAutoRepeatSpellOpcode(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet);
2015-01-17 03:55:29 +01:00
void HandleConfirmRespecWipeOpcode(WorldPacket& recvPacket);
void HandleUnlearnSkillOpcode(WorldPacket& recvPacket);
2014-11-16 00:05:42 +02:00
void HandleSetSpecializationOpcode(WorldPackets::Talent::SetSpecialization& packet);
2009-10-17 15:51:44 -07:00
2014-11-19 00:30:31 +02:00
void HandleQuestgiverStatusQueryOpcode(WorldPackets::Quest::QuestGiverStatusQuery& packet);
void HandleQuestgiverStatusMultipleQuery(WorldPackets::Quest::QuestGiverStatusMultipleQuery& packet);
void HandleQuestgiverHelloOpcode(WorldPackets::Quest::QuestGiverHello& packet);
void HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvPacket);
void HandleQuestgiverQueryQuestOpcode(WorldPackets::Quest::QuestGiverQueryQuest& packet);
void HandleQuestgiverChooseRewardOpcode(WorldPackets::Quest::QuestGiverChooseReward& packet);
void HandleQuestgiverRequestRewardOpcode(WorldPackets::Quest::QuestGiverRequestReward& packet);
void HandleQuestQueryOpcode(WorldPackets::Quest::QueryQuestInfo& packet);
void HandleQuestgiverCancel(WorldPacket& recvData);
void HandleQuestLogSwapQuest(WorldPacket& recvData);
void HandleQuestLogRemoveQuest(WorldPacket& recvData);
void HandleQuestConfirmAccept(WorldPacket& recvData);
void HandleQuestgiverCompleteQuest(WorldPackets::Quest::QuestGiverCompleteQuest& packet);
2009-05-31 15:56:51 -05:00
void HandleQuestgiverQuestAutoLaunch(WorldPacket& recvPacket);
void HandlePushQuestToParty(WorldPacket& recvPacket);
void HandleQuestPushResult(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& packet);
void HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& packet);
void HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& packet);
void HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, std::string target = "");
void HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& packet);
void HandleChatAddonMessageWhisperOpcode(WorldPackets::Chat::ChatAddonMessageWhisper& packet);
void HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, std::string target = "");
void HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK& packet);
void HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND& packet);
void HandleChatMessageEmoteOpcode(WorldPackets::Chat::ChatMessageEmote& packet);
void SendPlayerNotFoundNotice(std::string const& name);
void SendPlayerAmbiguousNotice(std::string const& name);
2010-04-11 11:18:20 +04:00
void SendWrongFactionNotice();
void SendChatRestrictedNotice(ChatRestrictionType restriction);
void HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet);
void HandleChatIgnoredOpcode(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleUnregisterAddonPrefixesOpcode(WorldPacket& recvPacket);
void HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket);
void HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& packet);
void HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& packet);
void HandleQueryCorpseTransport(WorldPackets::Query::QueryCorpseTransport& packet);
void HandleResurrectResponse(WorldPackets::Misc::ResurrectResponse& packet);
void HandleSummonResponseOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2014-11-23 04:25:47 +01:00
void HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet);
void HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packet);
template<void(Channel::*CommandFunction)(Player const*)>
void HandleChannelCommand(WorldPackets::Channel::ChannelPlayerCommand& packet);
template<void(Channel::*CommandFunction)(Player const*, std::string const&)>
void HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlayerCommand& packet);
void HandleVoiceSessionEnableOpcode(WorldPacket& recvData);
void HandleSetActiveVoiceChannel(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2009-05-31 15:56:51 -05:00
void HandleCompleteCinematic(WorldPacket& recvPacket);
void HandleNextCinematicCamera(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandlePageTextQueryOpcode(WorldPackets::Query::QueryPageText& packet);
2009-10-17 15:51:44 -07:00
2014-11-23 04:25:47 +01:00
void HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packet);
2009-10-17 15:51:44 -07:00
//Pet
void HandlePetAction(WorldPacket& recvData);
void HandlePetStopAttack(WorldPacket& recvData);
void HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spellid, uint16 flag, ObjectGuid guid2, float x, float y, float z);
void HandlePetNameQuery(WorldPacket& recvData);
void HandlePetSetAction(WorldPacket& recvData);
void HandlePetAbandon(WorldPacket& recvData);
void HandlePetRename(WorldPacket& recvData);
2010-04-07 22:59:46 +02:00
void HandlePetCancelAuraOpcode(WorldPacket& recvPacket);
void HandlePetSpellAutocastOpcode(WorldPacket& recvPacket);
void HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell& castRequest);
2010-04-07 22:59:46 +02:00
void HandlePetLearnTalent(WorldPacket& recvPacket);
2009-10-17 15:51:44 -07:00
void HandleSetActionBarToggles(WorldPackets::Character::SetActionBarToggles& packet);
2009-10-17 15:51:44 -07:00
void HandleTotemDestroyed(WorldPacket& recvData);
void HandleDismissCritter(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2010-08-08 04:37:24 +02:00
//Battleground
void HandleBattlemasterHelloOpcode(WorldPacket& recvData);
void HandleBattlemasterJoinOpcode(WorldPacket& recvData);
void HandleBattlegroundPlayerPositionsOpcode(WorldPacket& recvData);
void HandlePVPLogDataOpcode(WorldPacket& recvData);
void HandleBattleFieldPortOpcode(WorldPacket& recvData);
void HandleBattlefieldListOpcode(WorldPacket& recvData);
2012-09-02 12:17:38 +02:00
void HandleBattlefieldLeaveOpcode(WorldPacket& recvData);
void HandleBattlemasterJoinArena(WorldPacket& recvData);
void HandleReportPvPAFK(WorldPacket& recvData);
2015-02-01 20:52:05 +01:00
void HandleRequestRatedBattlefieldInfo(WorldPacket& recvData);
void HandleRequestPvpOptions(WorldPacket& recvData);
void HandleRequestPvpReward(WorldPacket& recvData);
void HandleRequestRatedBgStats(WorldPacket& recvData);
2014-01-10 17:42:08 +01:00
// Battlefield
void SendBfInvitePlayerToWar(ObjectGuid guid, uint32 zoneId, uint32 time);
void SendBfInvitePlayerToQueue(ObjectGuid guid);
void SendBfQueueInviteResponse(ObjectGuid guid, uint32 zoneId, bool canQueue = true, bool full = false);
void SendBfEntered(ObjectGuid guid);
void SendBfLeaveMessage(ObjectGuid guid, BFLeaveReason reason = BF_LEAVE_REASON_EXITED);
2014-01-10 17:42:08 +01:00
void HandleBfQueueInviteResponse(WorldPacket& recvData);
void HandleBfEntryInviteResponse(WorldPacket& recvData);
void HandleBfExitRequest(WorldPacket& recvData);
void HandleWardenDataOpcode(WorldPacket& recvData);
void HandleWorldTeleportOpcode(WorldPacket& recvData);
void HandleMinimapPingOpcode(WorldPacket& recvData);
void HandleRandomRollOpcode(WorldPacket& recvData);
void HandleFarSightOpcode(WorldPacket& recvData);
2015-01-10 01:35:47 +01:00
void HandleSetDungeonDifficultyOpcode(WorldPackets::Misc::SetDungeonDifficulty& setDungeonDifficulty);
void HandleSetRaidDifficultyOpcode(WorldPackets::Misc::SetRaidDifficulty& setRaidDifficulty);
void HandleMoveSetCanFlyAckOpcode(WorldPacket& recvData);
void HandleSetTitleOpcode(WorldPacket& recvData);
void HandleRealmSplitOpcode(WorldPacket& recvData);
void HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse& packet);
2015-02-05 20:18:32 +01:00
void HandleWhoisOpcode(WorldPackets::Who::WhoIsRequest& packet);
void HandleResetInstancesOpcode(WorldPacket& recvData);
void HandleHearthAndResurrect(WorldPacket& recvData);
void HandleInstanceLockResponse(WorldPacket& recvPacket);
2012-02-21 14:26:46 -05:00
// Looking for Dungeon/Raid
void HandleLfgSetCommentOpcode(WorldPacket& recvData);
void HandleLfgGetLockInfoOpcode(WorldPacket& recvData);
void SendLfgPlayerLockInfo();
void SendLfgPartyLockInfo();
void HandleLfgJoinOpcode(WorldPacket& recvData);
void HandleLfgLeaveOpcode(WorldPacket& recvData);
void HandleLfgSetRolesOpcode(WorldPacket& recvData);
void HandleLfgProposalResultOpcode(WorldPacket& recvData);
void HandleLfgSetBootVoteOpcode(WorldPacket& recvData);
void HandleLfgTeleportOpcode(WorldPacket& recvData);
2012-10-19 14:24:11 +02:00
void HandleLfrJoinOpcode(WorldPacket& recvData);
void HandleLfrLeaveOpcode(WorldPacket& recvData);
2012-10-30 10:30:05 +01:00
void HandleLfgGetStatus(WorldPacket& recvData);
void SendLfgUpdateStatus(lfg::LfgUpdateData const& updateData, bool party);
void SendLfgRoleChosen(ObjectGuid guid, uint8 roles);
void SendLfgRoleCheckUpdate(lfg::LfgRoleCheck const& pRoleCheck);
2012-10-17 14:19:59 +02:00
void SendLfgLfrList(bool update);
void SendLfgJoinResult(lfg::LfgJoinResultData const& joinData);
void SendLfgQueueStatus(lfg::LfgQueueStatusData const& queueData);
void SendLfgPlayerReward(lfg::LfgPlayerRewardData const& lfgPlayerRewardData);
void SendLfgBootProposalUpdate(lfg::LfgPlayerBoot const& boot);
void SendLfgUpdateProposal(lfg::LfgProposal const& proposal);
void SendLfgDisabled();
void SendLfgOfferContinue(uint32 dungeonEntry);
void SendLfgTeleportError(uint8 err);
// Arena Team
void HandleInspectArenaTeamsOpcode(WorldPacket& recvData);
void HandleArenaTeamQueryOpcode(WorldPacket& recvData);
void HandleArenaTeamRosterOpcode(WorldPacket& recvData);
void HandleArenaTeamCreateOpcode(WorldPacket& recvData);
void HandleArenaTeamInviteOpcode(WorldPacket& recvData);
void HandleArenaTeamAcceptOpcode(WorldPacket& recvData);
void HandleArenaTeamDeclineOpcode(WorldPacket& recvData);
void HandleArenaTeamLeaveOpcode(WorldPacket& recvData);
void HandleArenaTeamRemoveOpcode(WorldPacket& recvData);
void HandleArenaTeamDisbandOpcode(WorldPacket& recvData);
void HandleArenaTeamLeaderOpcode(WorldPacket& recvData);
void HandleAreaSpiritHealerQueryOpcode(WorldPacket& recvData);
void HandleAreaSpiritHealerQueueOpcode(WorldPacket& recvData);
void HandleCancelMountAuraOpcode(WorldPacket& recvData);
void HandleSelfResOpcode(WorldPacket& recvData);
void HandleComplainOpcode(WorldPacket& recvData);
void HandleRequestPetInfoOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
// Socket gem
void HandleSocketOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
void HandleCancelTempEnchantmentOpcode(WorldPacket& recvData);
2015-02-01 20:52:05 +01:00
void HandleGetItemPurchaseData(WorldPackets::Item::GetItemPurchaseData& packet);
void HandleItemRefund(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
void HandleSetTaxiBenchmarkOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
// Guild Bank
void HandleGuildPermissions(WorldPacket& recvData);
void HandleGuildBankMoneyWithdrawn(WorldPacket& recvData);
void HandleGuildBankerActivate(WorldPacket& recvData);
void HandleGuildBankQueryTab(WorldPacket& recvData);
void HandleGuildBankLogQuery(WorldPacket& recvData);
void HandleGuildBankDepositMoney(WorldPacket& recvData);
void HandleGuildBankWithdrawMoney(WorldPacket& recvData);
void HandleGuildBankSwapItems(WorldPacket& recvData);
void HandleGuildBankUpdateTab(WorldPacket& recvData);
void HandleGuildBankBuyTab(WorldPacket& recvData);
void HandleQueryGuildBankTabText(WorldPacket& recvData);
void HandleSetGuildBankTabText(WorldPacket& recvData);
void HandleGuildQueryXPOpcode(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
// Refer-a-Friend
void HandleGrantLevel(WorldPacket& recvData);
void HandleAcceptGrantLevel(WorldPacket& recvData);
// Calendar
void HandleCalendarGetCalendar(WorldPacket& recvData);
void HandleCalendarGetEvent(WorldPacket& recvData);
void HandleCalendarGuildFilter(WorldPacket& recvData);
void HandleCalendarArenaTeam(WorldPacket& recvData);
void HandleCalendarAddEvent(WorldPacket& recvData);
void HandleCalendarUpdateEvent(WorldPacket& recvData);
void HandleCalendarRemoveEvent(WorldPacket& recvData);
void HandleCalendarCopyEvent(WorldPacket& recvData);
void HandleCalendarEventInvite(WorldPacket& recvData);
void HandleCalendarEventRsvp(WorldPacket& recvData);
void HandleCalendarEventRemoveInvite(WorldPacket& recvData);
void HandleCalendarEventStatus(WorldPacket& recvData);
void HandleCalendarEventModeratorStatus(WorldPacket& recvData);
void HandleCalendarComplain(WorldPacket& recvData);
void HandleCalendarGetNumPending(WorldPacket& recvData);
void HandleCalendarEventSignup(WorldPacket& recvData);
void SendCalendarRaidLockout(InstanceSave const* save, bool add);
void SendCalendarRaidLockoutUpdated(InstanceSave const* save);
void HandleSetSavedInstanceExtend(WorldPacket& recvData);
2009-10-17 15:51:44 -07:00
2012-07-30 16:39:46 +01:00
// Void Storage
void HandleVoidStorageUnlock(WorldPacket& recvData);
void HandleVoidStorageQuery(WorldPacket& recvData);
void HandleVoidStorageTransfer(WorldPacket& recvData);
void HandleVoidSwapItem(WorldPacket& recvData);
void SendVoidStorageTransferResult(VoidTransferError result);
// Transmogrification
void HandleTransmogrifyItems(WorldPacket& recvData);
// Miscellaneous
void HandleSpellClick(WorldPacket& recvData);
void HandleMirrorImageDataRequest(WorldPacket& recvData);
void HandleRemoveGlyph(WorldPacket& recvData);
void HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement);
void HandleEquipmentSetSave(WorldPackets::EquipmentSet::SaveEquipmentSet& packet);
void HandleEquipmentSetDelete(WorldPacket& recvData);
void HandleEquipmentSetUse(WorldPacket& recvData);
void HandleUITimeRequest(WorldPackets::Misc::UITimeRequest& /*request*/);
void HandleQuestNPCQuery(WorldPacket& recvData);
void HandleQuestPOIQuery(WorldPacket& recvData);
2011-10-18 14:59:23 +02:00
void HandleEjectPassenger(WorldPacket& data);
void HandleEnterPlayerVehicle(WorldPacket& data);
void HandleUpdateProjectilePosition(WorldPacket& recvPacket);
void HandleUpdateMissileTrajectory(WorldPacket& recvPacket);
2014-11-10 05:14:35 +00:00
void HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& violenceLevel);
void HandleObjectUpdateFailedOpcode(WorldPacket& recvPacket);
void HandleRequestCategoryCooldowns(WorldPacket& recvPacket);
void SendSpellCategoryCooldowns();
int32 HandleEnableNagleAlgorithm();
2010-08-18 19:48:51 +02:00
// Compact Unit Frames (4.x)
void HandleSaveCUFProfiles(WorldPacket& recvPacket);
void SendLoadCUFProfiles();
2010-08-18 19:48:51 +02:00
private:
void InitializeQueryCallbackParameters();
2010-08-18 19:48:51 +02:00
void ProcessQueryCallbacks();
PreparedQueryResultFuture _addIgnoreCallback;
PreparedQueryResultFuture _stablePetCallback;
QueryCallback<PreparedQueryResult, bool> _charEnumCallback;
QueryCallback<PreparedQueryResult, std::string> _addFriendCallback;
QueryCallback<PreparedQueryResult, uint32> _unstablePetCallback;
QueryCallback<PreparedQueryResult, uint32> _stableSwapCallback;
QueryCallback<PreparedQueryResult, ObjectGuid> _sendStabledPetCallback;
QueryCallback<PreparedQueryResult, std::shared_ptr<WorldPackets::Character::CharacterCreateInfo>, true> _charCreateCallback;
QueryCallback<PreparedQueryResult, std::shared_ptr<WorldPackets::Character::CharacterRenameInfo>> _charRenameCallback;
QueryCallback<PreparedQueryResult, std::shared_ptr<WorldPackets::Character::CharCustomizeInfo>> _charCustomizeCallback;
QueryCallback<PreparedQueryResult, std::shared_ptr<WorldPackets::Character::CharRaceOrFactionChangeInfo>> _charFactionChangeCallback;
QueryCallback<PreparedQueryResult, bool, true> _undeleteCooldownStatusCallback;
QueryCallback<PreparedQueryResult, std::shared_ptr<WorldPackets::Character::CharacterUndeleteInfo>, true> _charUndeleteCallback;
QueryResultHolderFuture _charLoginCallback;
2010-08-18 19:48:51 +02:00
friend class World;
protected:
class DosProtection
{
friend class World;
public:
DosProtection(WorldSession* s) : Session(s), _policy((Policy)sWorld->getIntConfig(CONFIG_PACKET_SPOOF_POLICY)) { }
bool EvaluateOpcode(WorldPacket& p, time_t time) const;
protected:
enum Policy
{
POLICY_LOG,
POLICY_KICK,
POLICY_BAN,
};
uint32 GetMaxPacketCounterAllowed(uint16 opcode) const;
WorldSession* Session;
private:
Policy _policy;
typedef std::unordered_map<uint16, PacketCounter> PacketThrottlingMap;
// mark this member as "mutable" so it can be modified even in const functions
mutable PacketThrottlingMap _PacketThrottlingMap;
2014-04-20 16:48:35 +02:00
DosProtection(DosProtection const& right) = delete;
DosProtection& operator=(DosProtection const& right) = delete;
} AntiDOS;
private:
// private trade methods
void moveItems(Item* myItems[], Item* hisItems[]);
2009-10-17 15:51:44 -07:00
bool CanUseBank(ObjectGuid bankerGUID = ObjectGuid::Empty) const;
2014-06-07 22:47:50 +02:00
// logging helper
2011-06-12 02:06:07 +02:00
void LogUnexpectedOpcode(WorldPacket* packet, const char* status, const char *reason);
void LogUnprocessedTail(WorldPacket* packet);
2009-10-17 15:51:44 -07:00
2011-04-01 03:11:57 +02:00
// EnumData helpers
bool IsLegitCharacterForAccount(ObjectGuid lowGUID)
2011-04-01 03:11:57 +02:00
{
return _legitCharacters.find(lowGUID) != _legitCharacters.end();
2011-04-01 03:11:57 +02:00
}
2011-04-01 03:11:57 +02:00
// this stores the GUIDs of the characters who can login
// characters who failed on Player::BuildEnumData shouldn't login
GuidSet _legitCharacters;
2011-04-01 03:11:57 +02:00
ObjectGuid::LowType m_GUIDLow; // set logined or recently logout player (while m_playerRecentlyLogout set)
Player* _player;
std::shared_ptr<WorldSocket> m_Socket[MAX_CONNECTION_TYPES];
2014-05-02 03:44:21 +02:00
std::string m_Address; // Current Remote Address
// std::string m_LAddress; // Last Attempted Remote Adress - we can not set attempted ip for a non-existing session!
2009-10-17 15:51:44 -07:00
AccountTypes _security;
uint32 _accountId;
uint32 _battlenetAccountId;
uint8 m_expansion;
2009-10-17 15:51:44 -07:00
typedef std::list<AddonInfo> AddonsList;
// Warden
Warden* _warden; // Remains NULL if Warden system is not enabled by config
time_t _logoutTime;
2008-11-30 12:47:26 -06:00
bool m_inQueue; // session wait in auth.queue
ObjectGuid m_playerLoading; // code processed in LoginPlayer
bool m_playerLogout; // code processed in LogoutPlayer
bool m_playerRecentlyLogout;
bool m_playerSave;
LocaleConstant m_sessionDbcLocale;
2010-09-17 07:04:29 +02:00
LocaleConstant m_sessionDbLocaleIndex;
2014-07-09 11:32:49 -05:00
std::atomic<uint32> m_latency;
std::atomic<uint32> m_clientTimeDelay;
AccountData _accountData[NUM_ACCOUNT_DATA_TYPES];
uint32 _tutorials[MAX_ACCOUNT_TUTORIAL_VALUES];
bool _tutorialsChanged;
AddonsList m_addonsList;
std::vector<std::string> _registeredAddonPrefixes;
bool _filterAddonMessages;
uint32 recruiterId;
bool isRecruiter;
LockedQueue<WorldPacket*> _recvQueue;
2013-09-27 12:46:01 +02:00
rbac::RBACData* _RBACData;
uint32 expireTime;
bool forceExit;
ObjectGuid m_currentBankerGUID;
2014-04-20 16:48:35 +02:00
WorldSession(WorldSession const& right) = delete;
WorldSession& operator=(WorldSession const& right) = delete;
};
#endif
/// @}