TrinityCore
Loading...
Searching...
No Matches
Player.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef _PLAYER_H
19#define _PLAYER_H
20
21#include "GridObject.h"
22#include "Unit.h"
23#include "CUFProfile.h"
24#include "DatabaseEnvFwd.h"
25#include "DBCEnums.h"
26#include "EquipmentSet.h"
27#include "GroupReference.h"
28#include "Hash.h"
29#include "ItemDefines.h"
30#include "ItemEnchantmentMgr.h"
31#include "MapReference.h"
32#include "PetDefines.h"
33#include "PlayerTaxi.h"
34#include "QuestDef.h"
35#include "SceneMgr.h"
36#include <variant>
37
39struct AchievementEntry;
40struct AreaTableEntry;
41struct AreaTriggerEntry;
48struct BonusData;
49struct CharTitlesEntry;
52struct CreatureTemplate;
54struct FactionEntry;
58struct ItemSetEffect;
59struct ItemTemplate;
60struct Loot;
61struct Mail;
62struct MapEntry;
63struct PvpTalentEntry;
65struct RewardPackEntry;
67struct SpellCastRequest;
68struct TalentEntry;
69struct TrainerSpell;
71struct VendorItem;
73
74class AELootResult;
75class Bag;
76class Battleground;
77class Channel;
78class CinematicMgr;
79class Creature;
80class DynamicObject;
81class Garrison;
82class Group;
83class Guild;
84class Item;
85class LootRoll;
86class LootStore;
87class OutdoorPvP;
88class Pet;
89class PetAura;
90class PlayerAI;
92class PlayerMenu;
93class PlayerSocial;
95class ReputationMgr;
96class RestMgr;
98class TradeData;
99
100enum class ChrSpecialization : uint32;
101enum GroupCategory : uint8;
102enum class InstanceResetMethod : uint8;
103enum class InstanceResetResult : uint8;
104enum InventoryType : uint8;
105enum ItemClass : uint8;
106enum LootError : uint8;
107enum LootType : uint8;
108enum class MovementStopReason : uint8;
110enum class PlayerCreateMode : int8;
111enum RestTypes : uint8;
112enum class SpawnTrackingState : uint8;
114
115namespace BattlePets
116{
117 struct BattlePet;
118}
119
120namespace WorldPackets
121{
122 namespace Character
123 {
124 struct CharacterCreateInfo;
125 struct CustomTabardInfo;
126 }
127
128 namespace Movement
129 {
131 }
132
133 namespace Traits
134 {
135 struct TraitConfig;
136 struct TraitEntry;
137 }
138
139 namespace Transmogrification
140 {
144 }
145}
146
147TC_GAME_API uint32 GetBagSize(Bag const* bag);
148TC_GAME_API Item* GetItemInBag(Bag const* bag, uint8 slot);
149
150typedef std::deque<Mail*> PlayerMails;
151
153{
154 PLAYER_MAX_SKILLS = UF::size<decltype(UF::SkillInfo::SkillLineID)>()
156
174
176{
177 SPELLMOD_FLAT = 0, // SPELL_AURA_ADD_FLAT_MODIFIER
178 SPELLMOD_PCT = 1, // SPELL_AURA_ADD_PCT_MODIFIER
179 SPELLMOD_LABEL_FLAT = 2, // SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL
180 SPELLMOD_LABEL_PCT = 3, // SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL
183
184// 2^n values, Player::m_isunderwater is a bitmask. These are Trinity internal values, they are never send to any client
186{
188 UNDERWATER_INWATER = 0x01, // terrain type is water and player is afflicted by it
189 UNDERWATER_INLAVA = 0x02, // terrain type is lava and player is afflicted by it
190 UNDERWATER_INSLIME = 0x04, // terrain type is lava and player is afflicted by it
191 UNDERWATER_INDARKWATER = 0x08, // terrain type is dark water and player is afflicted by it
192
195
203
212
214{
217
218 friend bool operator==(PlayerSpellTrait const&, PlayerSpellTrait const&) noexcept = default;
219};
220
222{
224 bool active : 1; // show in spellbook
225 bool dependent : 1; // learned as result another spell learn, skill grow, quest reward, etc
226 bool disabled : 1; // first rank has been learned in result talent learn but currently talent unlearned, save max learned ranks
227 bool favorite : 1;
229};
230
242
250
251// Spell modifier (used for modify other spells)
253{
254 SpellModifier(SpellModOp _op, SpellModType _type, uint32 _spellId, Aura* _ownerAura)
255 : op(_op), type(_type), spellId(_spellId), ownerAura(_ownerAura) { }
256 virtual ~SpellModifier() = default;
257
260
263};
264
266{
267 SpellModifierByClassMask(SpellModOp _op, SpellModType _type, uint32 _spellId, Aura* _ownerAura, flag128 const& _mask)
268 : SpellModifier(_op, _type, _spellId, _ownerAura), mask(_mask) { }
269
271};
272
274{
275 SpellFlatModifierByClassMask(SpellModOp _op, uint32 _spellId, Aura* _ownerAura, flag128 _mask)
276 : SpellModifierByClassMask(_op, SPELLMOD_FLAT, _spellId, _ownerAura, _mask) { }
277
279};
280
282{
283 SpellPctModifierByClassMask(SpellModOp _op, uint32 _spellId, Aura* _ownerAura, flag128 _mask)
284 : SpellModifierByClassMask(_op, SPELLMOD_PCT, _spellId, _ownerAura, _mask) { }
285
286 float value = { };
287};
288
290{
291 SpellFlatModifierByLabel(SpellModOp _op, uint32 _spellId, Aura* _ownerAura, uint32 _label)
292 : SpellModifier(_op, SPELLMOD_LABEL_FLAT, _spellId, _ownerAura)
293 {
294 value.ModIndex = int32(_op);
296 value.LabelID = _label;
297 }
298
300};
301
303{
304 SpellPctModifierByLabel(SpellModOp _op, uint32 _spellId, Aura* _ownerAura, int32 _label)
305 : SpellModifier(_op, SPELLMOD_LABEL_PCT, _spellId, _ownerAura)
306 {
307 value.ModIndex = int32(_op);
308 value.ModifierValue = 0.0f;
309 value.LabelID = _label;
310 }
311
313};
314
316{
317 bool operator()(SpellModifier const* left, SpellModifier const* right) const
318 {
319 // first sort by SpellModOp
320 if (left->op != right->op)
321 return left->op < right->op;
322
323 // then by type (flat/pct)
324 if (left->type != right->type)
325 return left->type < right->type;
326
327 return left < right;
328 }
329};
330
338
349
350typedef std::unordered_map<uint32, PlayerSpellState> PlayerTalentMap;
351typedef std::array<uint32, MAX_PVP_TALENT_SLOTS> PlayerPvpTalentMap;
352typedef std::unordered_map<uint32, PlayerSpell> PlayerSpellMap;
354typedef std::unordered_map<uint32, PlayerCurrency> PlayerCurrenciesMap;
355
356typedef std::unordered_map<uint32 /*instanceId*/, time_t/*releaseTime*/> InstanceTimeMap;
357
365
379
381{
382 Kill = 0,
383 Quest = 1,
384 ArenaCompletion = 2,
385 BGCompletion = 3,
386 LFG = 4,
393 Spell = 11,
394};
395
406
407#define ACTION_BUTTON_ACTION(X) (uint64(X) & 0x00FFFFFFFFFFFFFF)
408#define ACTION_BUTTON_TYPE(X) ((uint64(X) & 0xFF00000000000000) >> 56)
409#define MAX_ACTION_BUTTON_ACTION_VALUE UI64LIT(0xFFFFFFFFFFFFFF)
410
412{
414
417
418 // helpers
422 {
423 uint64 newData = uint64(action) | (uint64(type) << 56);
424 if (newData != packedData || uState == ACTIONBUTTON_DELETED)
425 {
426 packedData = newData;
429 }
430 }
431};
432
433#define MAX_ACTION_BUTTONS 180
434
435typedef std::map<uint8, ActionButton> ActionButtonList;
436
438{
439 PvPInfo() : IsHostile(false), IsInHostileArea(false), IsInNoPvPArea(false), IsInFFAPvPArea(false), EndTimer(0) { }
440
445 time_t EndTimer;
446};
447
456{
457 DuelInfo(Player* opponent, Player* initiator, bool isMounted) : Opponent(opponent), Initiator(initiator), IsMounted(isMounted) {}
458
461 bool const IsMounted;
463 time_t StartTime = 0;
464 time_t OutOfBoundsTime = 0;
465};
466
467struct Areas
468{
471 float x1;
472 float x2;
473 float y1;
474 float y2;
475};
476
477#define MAX_RUNES 7
478#define MAX_RECHARGING_RUNES 3
479
481{
482 RUNE_BASE_COOLDOWN = 10000
484
485struct Runes
486{
487 std::deque<uint8> CooldownOrder;
489 uint8 RuneState; // mask of available runes
490
491 void SetRuneState(uint8 index, bool set = true);
492};
493
495{
497 EnchantDuration(Item* _item, EnchantmentSlot _slot, uint32 _leftduration) : item(_item), slot(_slot),
498 leftduration(_leftduration){ ASSERT(item); }
499
503};
504
505typedef std::list<EnchantDuration> EnchantDurationList;
506typedef std::list<Item*> ItemDurationList;
507
515
516#define MAX_DRUNKEN 4
517
519{
521 PLAYER_FLAGS_AFK = 0x00000002,
522 PLAYER_FLAGS_DND = 0x00000004,
523 PLAYER_FLAGS_GM = 0x00000008,
524 PLAYER_FLAGS_GHOST = 0x00000010,
527 PLAYER_FLAGS_UNK7 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state
528 PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards
532 PLAYER_FLAGS_PLAYED_LONG_TIME = 0x00001000, // played long time
533 PLAYER_FLAGS_PLAYED_TOO_LONG = 0x00002000, // played too long time
535 PLAYER_FLAGS_DEVELOPER = 0x00008000, // <Dev> prefix for something?
536 PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary
537 PLAYER_FLAGS_TAXI_BENCHMARK = 0x00020000, // taxi benchmark mode (on/off) (2.0.1)
538 PLAYER_FLAGS_PVP_TIMER = 0x00040000, // 3.0.2, pvp timer active (after you disable pvp manually)
539 PLAYER_FLAGS_UBER = 0x00080000,
540 PLAYER_FLAGS_UNK20 = 0x00100000,
541 PLAYER_FLAGS_UNK21 = 0x00200000,
543 PLAYER_FLAGS_HIDE_ACCOUNT_ACHIEVEMENTS = 0x00800000, // do not send account achievments in inspect packets
544 PLAYER_FLAGS_PET_BATTLES_UNLOCKED = 0x01000000, // enables pet battles
546 PLAYER_FLAGS_UNK26 = 0x04000000,
547 PLAYER_FLAGS_AUTO_DECLINE_GUILD = 0x08000000, // Automatically declines guild invites
548 PLAYER_FLAGS_GUILD_LEVEL_ENABLED = 0x10000000, // Lua_GetGuildLevelEnabled() - enables guild leveling related UI
549 PLAYER_FLAGS_VOID_UNLOCKED = 0x20000000, // void storage
553
555
568
570
593
595
596// used in PLAYER_FIELD_BYTES2 values
603
605{
608 FIRE_TIMER = 2 // feign death
610#define MAX_TIMERS 3
611#define DISABLED_MIRROR_TIMER -1
612
613// 2^n values
615{
616 // gm abilities
621 PLAYER_EXTRA_GM_CHAT = 0x0020, // Show GM badge in chat messages
622
623 // other states
624 PLAYER_EXTRA_PVP_DEATH = 0x0100, // store PvP death status until corpse creating.
625
626 // Character services markers
630
632};
633
634// 2^n values
648
649typedef std::map<uint32, QuestStatusData> QuestStatusMap;
650
652{
653 QuestStatusMap::iterator QuestStatusItr;
655};
656
657using QuestObjectiveStatusMap = std::unordered_multimap<std::pair<QuestObjectiveType, int32>, QuestObjectiveStatusData>;
658
659typedef std::set<uint32> RewardedQuestSet;
660
667
668// quest
669typedef std::map<uint32, QuestSaveType> QuestStatusSaveMap;
670
671// Size of client completed quests bit map
673{
674 QUESTS_COMPLETED_BITS_PER_BLOCK = UF::size_of_value_type<decltype(UF::BitVector::Values)>() * 8
676
678{
679 MAX_QUEST_COUNTS = UF::size<decltype(UF::QuestLog::ObjectiveProgress)>()
681
688
696
698{
699 SkillStatusData(uint32 _pos, SkillUpdateState _uState) : pos(_pos), uState(_uState)
700 {
701 }
704};
705
706typedef std::unordered_map<uint32, SkillStatusData> SkillStatusMap;
707
708class Quest;
709class Spell;
710class WorldSession;
711
713{
714 // first slot for item stored (in any way in player m_items data)
716 // last+1 slot for item stored (in any way in player m_items data)
720
721static_assert(UF::size<decltype(UF::ActivePlayerData::InvSlots)>() == PLAYER_SLOT_END);
722
723#define INVENTORY_SLOT_BAG_0 255
724#define INVENTORY_DEFAULT_SIZE 16
725
750
770
776
782
788
789enum BankBagSlots // 6 slots
790{
794
795enum BuyBackSlots // 12 slots
796{
797 // stored in m_buybackitems
801
807
827
833
835{
836 ItemPosCount(uint16 _pos, uint32 _count) : pos(_pos), count(_count) { }
837 bool isContainedIn(std::vector<ItemPosCount> const& vec) const;
840};
841typedef std::vector<ItemPosCount> ItemPosCountVec;
842
844{
845 Equipment = 0x01,
846 Inventory = 0x02,
847 Bank = 0x04,
848 ReagentBank = 0x08,
849 AccountBank = 0x10, // NYI
850
853};
854
856
858{
859 Stop,
861};
862
864{
865 None = 0x0000,
866 DisableAutoSort = 0x0001,
867 PriorityEquipment = 0x0002,
868 PriorityConsumables = 0x0004,
869 PriorityTradeGoods = 0x0008,
870 PriorityJunk = 0x0010,
871 PriorityQuestItems = 0x0020,
872 ExcludeJunkSell = 0x0040,
873 PriorityReagents = 0x0080,
874 ExpansionCurrent = 0x0100,
875 ExpansionLegacy = 0x0200,
876};
877
879
881{
882 NEW_WORLD_NORMAL = 16, // Normal map change
883 NEW_WORLD_SEAMLESS = 21, // Teleport to another map without a loading screen, used for outdoor scenarios
884};
885
887{
888 RAID_INSTANCE_WELCOME = 1, // Welcome to %s. Instance locks are scheduled to expire in %s.
889 RAID_INSTANCE_EXPIRED = 2, // Your instance lock for %s has expired.
890 RAID_INSTANCE_WELCOME_DAILY = 3, // Welcome to %s. The daily reset is scheduled to occur in %s and will reset this instance.
891 RAID_INSTANCE_WARNING_TIME = 4, // any GlobalStrings tag that has 1 formattable argument, like DELVES_INSTANCE_RESET_WARNING
892};
893
894// PLAYER_FIELD_ARENA_TEAM_INFO_1_1 offsets
906
908{
910 Initiated,
911 // destination is on same map and instance
914 // destination is on different map or different instance of the same map
918};
919
932
934
937{
944 DAMAGE_FALL_TO_VOID = 6 // custom case for fall without durability loss
946
952
953#define MAX_PLAYED_TIME_INDEX 2
954
955// used at player loading query list preparing, and later result selection
957{
1029
1040
1041// Player summoning auto-decline time (in secs)
1042#define MAX_PLAYER_SUMMON_DELAY (2*MINUTE)
1043// Maximum money amount : 2^31 - 1
1044inline constexpr uint64 MAX_MONEY_AMOUNT = 99999999999ULL;
1045
1047{
1048 CHAR_DELETE_REMOVE = 0, // Completely remove from the database
1049 CHAR_DELETE_UNLINK = 1 // The character gets unlinked from the account,
1050 // the name gets freed up and appears as deleted ingame
1052
1072
1082
1088
1090{
1091 NewItem = 0,
1092 NewCurrency = 1,
1093 Money = 2,
1094 Honor = 3
1095};
1096
1098{
1099 DoNotDisplay = 0,
1100 Loot = 1,
1101 PetBattle = 2,
1102 PersonalLoot = 3,
1104 QuestUpgrade = 5,
1105 QuestUpgradeEpic = 6,
1106 Shipment = 7,
1108 PvPFactionReward = 9,
1109 GarrisonCurrency = 10,
1110 LessAwesomeLoot = 11,
1111 UpgradedLoot = 12,
1112 LegendaryLoot = 13,
1113 InvasionLoot = 14,
1114 Default = 15,
1115 QuestComplete = 16,
1116 RatedPvPReward = 17,
1117 CorruptedLoot = 19
1118};
1119
1121{
1122 Base = 0,
1123 EquippedBase = 1,
1125 Pvp = 3,
1126 PvpWeighted = 4,
1128};
1129
1130class Player;
1131
1157
1166
1172
1187
1189{
1190 SpecializationInfo() : PvpTalents(), ResetTalentsCost(0), ResetTalentsTime(0), ActiveGroup(0)
1191 {
1192 for (PlayerPvpTalentMap& pvpTalents : PvpTalents)
1193 pvpTalents.fill(0);
1194 }
1195
1198 std::vector<uint32> Glyphs[MAX_SPECIALIZATIONS];
1202
1203private:
1206};
1207
1211float constexpr MAX_AREA_SPIRIT_HEALER_RANGE = 20.0f;
1212
1214{
1215 None = 0,
1216 Friendly = 1,
1217 Hostile = 2,
1218 Contested = 3,
1219 Combat = 4
1220};
1221
1222float constexpr TELEPORT_MIN_LOAD_SCREEN_DISTANCE = 200.0f;
1223
1231
1232class TC_GAME_API Player final : public Unit, public GridObject<Player>
1233{
1234 friend class WorldSession;
1235 friend class CinematicMgr;
1236 friend class RestMgr;
1237 friend void AddItemToUpdateQueueOf(Item* item, Player* player);
1238 friend void RemoveItemFromUpdateQueueOf(Item* item, Player* player);
1239 public:
1240 explicit Player(WorldSession* session);
1241 ~Player();
1242
1243 PlayerAI* AI() const { return reinterpret_cast<PlayerAI*>(GetAI()); }
1244
1245 void CleanupsBeforeDelete(bool finalCleanup = true) override;
1246
1247 void AddToWorld() override;
1248 void RemoveFromWorld() override;
1249
1250 void SetObjectScale(float scale) override;
1251
1252 bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options = TELE_TO_NONE, Optional<uint32> instanceId = {}, uint32 teleportSpellId = 0);
1253 bool TeleportTo(WorldLocation const& loc, TeleportToOptions options = TELE_TO_NONE, Optional<uint32> instanceId = {}, uint32 teleportSpellId = 0);
1254 bool TeleportTo(TeleportLocation const& teleportLocation, TeleportToOptions options = TELE_TO_NONE, uint32 teleportSpellId = 0);
1255 bool TeleportToBGEntryPoint();
1256
1257 bool HasSummonPending() const;
1258 void SendSummonRequestFrom(Unit* summoner);
1259 void SummonIfPossible(bool agree);
1260
1262
1263 void Update(uint32 time) override;
1264
1265 void Heartbeat() override;
1266
1267 bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, SpellEffectInfo const& spellEffectInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const override;
1268
1269 bool IsInAreaTrigger(AreaTriggerEntry const* areaTrigger) const;
1270
1271 void SendInitialPacketsBeforeAddToMap();
1272 void SendInitialPacketsAfterAddToMap();
1273 void SendSupercededSpell(uint32 oldSpell, uint32 newSpell) const;
1274 void SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8 arg = 0, int32 mapDifficultyXConditionID = 0) const;
1275
1276 bool CanInteractWithQuestGiver(Object* questGiver) const;
1277 Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, NPCFlags npcFlags, NPCFlags2 npcFlags2) const;
1278 GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid) const;
1279 GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const;
1280
1281 void ToggleAFK();
1282 void ToggleDND();
1283 bool isAFK() const { return HasPlayerFlag(PLAYER_FLAGS_AFK); }
1284 bool isDND() const { return HasPlayerFlag(PLAYER_FLAGS_DND); }
1285 uint16 GetChatFlags() const;
1286 std::string autoReplyMsg;
1287
1288 int64 GetBarberShopCost(Trinity::IteratorPair<UF::ChrCustomizationChoice const*> newCustomizations) const;
1289
1290 PlayerSocial* GetSocial() const { return m_social; }
1291 void RemoveSocial();
1292
1294 void InitTaxiNodesForLevel() { m_taxi.InitTaxiNodesForLevel(GetRace(), GetClass(), GetLevel()); }
1295 bool ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc = nullptr, uint32 spellid = 0, uint32 preferredMountDisplay = 0, Optional<float> speed = {},
1297 bool ActivateTaxiPathTo(uint32 taxi_path_id, uint32 spellid = 0, Optional<float> speed = {},
1299 void FinishTaxiFlight();
1300 void CleanupAfterTaxiFlight();
1301 void ContinueTaxiFlight();
1302 void StartTaxiMovement(uint32 mountDisplayId, uint32 path, uint32 pathNode, Optional<float> speed,
1304
1305 bool IsDeveloper() const { return HasPlayerFlag(PLAYER_FLAGS_DEVELOPER); }
1306 void SetDeveloper(bool on) { if (on) SetPlayerFlag(PLAYER_FLAGS_DEVELOPER); else RemovePlayerFlag(PLAYER_FLAGS_DEVELOPER); }
1307 bool isAcceptWhispers() const { return (m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS) != 0; }
1308 void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
1309 bool IsGameMaster() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_ON) != 0; }
1310 bool IsGameMasterAcceptingWhispers() const { return IsGameMaster() && isAcceptWhispers(); }
1311 bool CanBeGameMaster() const;
1312 void SetGameMaster(bool on);
1313 bool isGMChat() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT) != 0; }
1314 void SetGMChat(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; }
1315 bool isTaxiCheater() const { return (m_ExtraFlags & PLAYER_EXTRA_TAXICHEAT) != 0; }
1316 void SetTaxiCheater(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_TAXICHEAT; else m_ExtraFlags &= ~PLAYER_EXTRA_TAXICHEAT; }
1317 bool isGMVisible() const { return !(m_ExtraFlags & PLAYER_EXTRA_GM_INVISIBLE); }
1318 void SetGMVisible(bool on);
1319 void SetPvPDeath(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_PVP_DEATH; else m_ExtraFlags &= ~PLAYER_EXTRA_PVP_DEATH; }
1320 bool HasRaceChanged() const { return (m_ExtraFlags & PLAYER_EXTRA_HAS_RACE_CHANGED) != 0; }
1322 bool HasBeenGrantedLevelsFromRaF() const { return (m_ExtraFlags & PLAYER_EXTRA_GRANTED_LEVELS_FROM_RAF) != 0; }
1324 bool HasLevelBoosted() const { return (m_ExtraFlags & PLAYER_EXTRA_LEVEL_BOOSTED) != 0; }
1326 bool HasClaimedFreeTransmog() const { return (m_ExtraFlags & PLAYER_EXTRA_FLAG_FREE_TRANSMOG_CLAIMED) != 0; }
1328
1329 uint32 GetXP() const { return m_activePlayerData->XP; }
1330 uint32 GetXPForNextLevel() const { return m_activePlayerData->NextLevelXP; }
1331 void SetXP(uint32 xp);
1332 void GiveXP(uint32 xp, Unit* victim, float group_rate=1.0f);
1333 void GiveLevel(uint8 level);
1334 bool IsMaxLevel() const;
1335
1336 void InitStatsForLevel(bool reapplyMods = false);
1337
1338 // .cheat command related
1339 bool GetCommandStatus(uint32 command) const { return (_activeCheats & command) != 0; }
1340 void SetCommandStatusOn(uint32 command) { _activeCheats |= command; }
1341 void SetCommandStatusOff(uint32 command) { _activeCheats &= ~command; }
1342
1343 // Played Time Stuff
1346 std::array<uint32, MAX_PLAYED_TIME_INDEX> m_Played_time;
1347 uint32 GetTotalPlayedTime() const { return m_Played_time[PLAYED_TIME_TOTAL]; }
1348 uint32 GetLevelPlayedTime() const { return m_Played_time[PLAYED_TIME_LEVEL]; }
1349
1350 Gender GetNativeGender() const override { return Gender(*m_playerData->NativeSex); }
1351 void SetNativeGender(Gender gender) override { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::NativeSex), gender); }
1352
1353 void setDeathState(DeathState s) override; // overwrite Unit::setDeathState
1354
1355 PetStable* GetPetStable() { return m_petStable.get(); }
1356 PetStable& GetOrInitPetStable();
1357 PetStable const* GetPetStable() const { return m_petStable.get(); }
1358 void AddPetToUpdateFields(PetStable::PetInfo const& pet, PetSaveMode slot, PetStableFlags flags);
1359 void SetPetSlot(uint32 petNumber, PetSaveMode dstPetSlot);
1360 ObjectGuid GetStableMaster() const;
1361 void SetStableMaster(ObjectGuid stableMaster);
1362
1363 Pet* GetPet() const;
1364 Pet* SummonPet(uint32 entry, Optional<PetSaveMode> slot, float x, float y, float z, float ang, uint32 despwtime, bool* isNew = nullptr);
1365 void RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent = false);
1366 void DeletePetFromDB(uint32 petNumber);
1367 void SendTameFailure(PetTameResult result);
1368
1369 // pet auras
1370 std::unordered_set<PetAura const*> m_petAuras;
1371 void AddPetAura(PetAura const* petSpell);
1372 void RemovePetAura(PetAura const* petSpell);
1373
1374 Creature* GetSummonedBattlePet() const;
1375 void SetBattlePetData(BattlePets::BattlePet const* pet = nullptr);
1376
1378 void Say(std::string_view text, Language language, WorldObject const* = nullptr) override;
1379 void Say(uint32 textId, WorldObject const* target = nullptr) override;
1381 void Yell(std::string_view text, Language language, WorldObject const* = nullptr) override;
1382 void Yell(uint32 textId, WorldObject const* target = nullptr) override;
1384 void TextEmote(std::string_view text, WorldObject const* = nullptr, bool = false) override;
1385 void TextEmote(uint32 textId, WorldObject const* target = nullptr, bool isBossEmote = false) override;
1387 void Whisper(std::string_view text, Language language, Player* receiver, bool = false) override;
1388 void Whisper(uint32 textId, Player* target, bool isBossWhisper = false) override;
1389 void WhisperAddon(std::string const& text, std::string const& prefix, bool isLogged, Player* receiver);
1390
1391 bool CanUnderstandLanguage(Language language) const;
1392
1393 /*********************************************************/
1394 /*** STORAGE SYSTEM ***/
1395 /*********************************************************/
1396
1403 template <typename T>
1404 bool ForEachItem(ItemSearchLocation location, T callback) const
1405 {
1406 EnumFlag<ItemSearchLocation> flag = location;
1407
1409 {
1411 if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
1412 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1413 return false;
1414
1416 if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
1417 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1418 return false;
1419 }
1420
1422 {
1423 uint8 inventoryEnd = INVENTORY_SLOT_ITEM_START + GetInventorySlotCount();
1424 for (uint8 i = INVENTORY_SLOT_BAG_START; i < inventoryEnd; ++i)
1425 if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
1426 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1427 return false;
1428
1430 if (Item* pItem = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
1431 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1432 return false;
1433
1435 if (Bag* pBag = GetBagByPos(i))
1436 for (uint32 j = 0; j < GetBagSize(pBag); ++j)
1437 if (Item* pItem = GetItemInBag(pBag, j))
1438 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1439 return false;
1440 }
1441
1443 {
1444 for (uint8 i = BANK_SLOT_BAG_START; i < BANK_SLOT_BAG_END; ++i)
1445 if (Bag* pBag = GetBagByPos(i))
1446 for (uint32 j = 0; j < GetBagSize(pBag); ++j)
1447 if (Item* pItem = GetItemInBag(pBag, j))
1448 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1449 return false;
1450 }
1451
1453 {
1455 if (Bag* bag = GetBagByPos(i))
1456 for (uint32 j = 0; j < GetBagSize(bag); ++j)
1457 if (Item* pItem = GetItemInBag(bag, j))
1458 if (callback(pItem) == ItemSearchCallbackResult::Stop)
1459 return false;
1460 }
1461
1462 return true;
1463 }
1464
1465 public:
1466 void UpdateAverageItemLevelTotal();
1467 void UpdateAverageItemLevelEquipped();
1468
1469 uint8 FindEquipSlot(Item const* item, uint8 slot, bool swap) const;
1470 uint32 GetFreeInventorySlotCount(EnumFlag<ItemSearchLocation> location = ItemSearchLocation::Inventory) const;
1471 uint32 GetItemCount(uint32 item, bool inBankAlso = false, Item* skipItem = nullptr) const;
1472 uint32 GetItemCountWithLimitCategory(uint32 limitCategory, Item* skipItem = nullptr) const;
1473 Item* GetItemByGuid(ObjectGuid guid) const;
1474 Item* GetItemByEntry(uint32 entry, ItemSearchLocation where = ItemSearchLocation::Default) const;
1475 std::vector<Item*> GetItemListByEntry(uint32 entry, bool inBankAlso = false) const;
1476 Item* GetItemByPos(uint16 pos) const;
1477 Item* GetItemByPos(uint8 bag, uint8 slot) const;
1478 Item* GetUseableItemByPos(uint8 bag, uint8 slot) const;
1479 Bag* GetBagByPos(uint8 slot) const;
1480 std::vector<Item*> GetCraftingReagentItemsToDeposit();
1481 Item* GetWeaponForAttack(WeaponAttackType attackType, bool useable = false) const;
1482 Item* GetShield(bool useable = false) const;
1483 Item* GetChildItemByGuid(ObjectGuid guid) const;
1484 static WeaponAttackType GetAttackBySlot(uint8 slot, InventoryType inventoryType); // MAX_ATTACK if not weapon slot
1485 std::vector<Item*>& GetItemUpdateQueue() { return m_itemUpdateQueue; }
1486 static bool IsInventoryPos(uint16 pos) { return IsInventoryPos(pos >> 8, pos & 255); }
1487 static bool IsInventoryPos(uint8 bag, uint8 slot);
1488 static bool IsEquipmentPos(uint16 pos) { return IsEquipmentPos(pos >> 8, pos & 255); }
1489 static bool IsEquipmentPos(uint8 bag, uint8 slot);
1490 static bool IsBagPos(uint16 pos);
1491 static bool IsBankPos(uint16 pos) { return IsBankPos(pos >> 8, pos & 255); }
1492 static bool IsBankPos(uint8 bag, uint8 slot);
1493 static bool IsChildEquipmentPos(uint16 pos) { return IsChildEquipmentPos(pos >> 8, pos & 255); }
1494 static bool IsChildEquipmentPos(uint8 bag, uint8 slot);
1495 static bool IsAccountBankPos(uint16 pos) { return IsBankPos(pos >> 8, pos & 255); }
1496 static bool IsAccountBankPos(uint8 bag, uint8 slot);
1497 bool IsValidPos(uint16 pos, bool explicit_pos) const { return IsValidPos(pos >> 8, pos & 255, explicit_pos); }
1498 bool IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const;
1499 uint8 GetInventorySlotCount() const { return m_activePlayerData->NumBackpackSlots; }
1500 void SetInventorySlotCount(uint8 slots);
1501 uint8 GetBankBagSlotCount() const { return m_activePlayerData->NumBankSlots; }
1502 void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBankSlots), count); }
1503 uint8 GetCharacterBankTabCount() const { return m_activePlayerData->NumCharacterBankTabs; }
1504 void SetCharacterBankTabCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumCharacterBankTabs), count); }
1505 uint8 GetAccountBankTabCount() const { return m_activePlayerData->NumAccountBankTabs; }
1506 void SetAccountBankTabCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumAccountBankTabs), count); }
1507 void SetCharacterBankTabSettings(uint32 tabId, std::string const& name, std::string const& icon, std::string const& description, BagSlotFlags depositFlags)
1508 {
1509 auto setter = m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterBankTabSettings, tabId);
1510 SetBankTabSettings(setter, name, icon, description, depositFlags);
1511 }
1512 void SetAccountBankTabSettings(uint32 tabId, std::string const& name, std::string const& icon, std::string const& description, BagSlotFlags depositFlags)
1513 {
1514 auto setter = m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AccountBankTabSettings, tabId);
1515 SetBankTabSettings(setter, name, icon, description, depositFlags);
1516 }
1517 void SetBankTabSettings(UF::MutableFieldReferenceWithChangesMask<UF::BankTabSettings, false> setter, std::string const& name, std::string const& icon, std::string const& description, BagSlotFlags depositFlags)
1518 {
1519 SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Name), name);
1520 SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Icon), icon);
1521 SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::Description), description);
1522 SetUpdateFieldValue(setter.ModifyValue(&UF::BankTabSettings::DepositFlags), int32(depositFlags));
1523 }
1524 bool IsBackpackAutoSortDisabled() const { return m_activePlayerData->BackpackAutoSortDisabled; }
1525 void SetBackpackAutoSortDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BackpackAutoSortDisabled), disabled); }
1526 bool IsBackpackSellJunkDisabled() const { return m_activePlayerData->BackpackSellJunkDisabled; }
1527 void SetBackpackSellJunkDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BackpackSellJunkDisabled), disabled); }
1528 bool IsBankAutoSortDisabled() const { return m_activePlayerData->BankAutoSortDisabled; }
1529 void SetBankAutoSortDisabled(bool disabled) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BankAutoSortDisabled), disabled); }
1530 EnumFlag<BagSlotFlags> GetBagSlotFlags(uint32 bagIndex) const { return static_cast<BagSlotFlags>(m_activePlayerData->BagSlotFlags[bagIndex]); }
1531 void SetBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
1532 void RemoveBagSlotFlag(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
1533 void ReplaceAllBagSlotFlags(uint32 bagIndex, EnumFlag<BagSlotFlags> flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BagSlotFlags, bagIndex), flags.AsUnderlyingType()); }
1534 bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const;
1535 bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = nullptr) const;
1536 bool CanNoReagentCast(SpellInfo const* spellInfo) const;
1538 {
1539 for (uint8 i = 0; i < 4; ++i)
1540 SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NoReagentCostMask, i), mask[i]);
1541 }
1542 bool HasItemOrGemWithIdEquipped(uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const;
1543 bool HasItemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;
1544 bool HasGemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const;
1545 InventoryResult CanTakeMoreSimilarItems(Item* pItem, uint32* offendingItemId = nullptr) const;
1546 InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, uint32* offendingItemId = nullptr) const { return CanTakeMoreSimilarItems(entry, count, nullptr, nullptr, offendingItemId); }
1547 InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 item, uint32 count, uint32* no_space_count = nullptr) const;
1548 InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, Item* pItem, bool swap = false) const;
1549 InventoryResult CanStoreItems(Item** items, int count, uint32* offendingItemId) const;
1550 InventoryResult CanEquipNewItem(uint8 slot, uint16& dest, uint32 item, bool swap) const;
1551 InventoryResult CanEquipItem(uint8 slot, uint16& dest, Item* pItem, bool swap, bool not_loading = true) const;
1552
1553 // This method must be called before equipping parent item!
1554 InventoryResult CanEquipChildItem(Item* parentItem) const;
1555
1556 InventoryResult CanEquipUniqueItem(Item* pItem, uint8 except_slot = NULL_SLOT, uint32 limit_count = 1) const;
1557 InventoryResult CanEquipUniqueItem(ItemTemplate const* itemProto, BonusData const& itemBonus, uint8 except_slot = NULL_SLOT, uint32 limit_count = 1) const;
1558 InventoryResult CanUnequipItems(uint32 item, uint32 count) const;
1559 InventoryResult CanUnequipItem(uint16 src, bool swap) const;
1560 InventoryResult CanBankItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, Item* pItem, bool swap, bool not_loading = true, bool reagentBankOnly = false) const;
1561 InventoryResult CanUseItem(Item* pItem, bool not_loading = true) const;
1562 bool HasItemTotemCategory(uint32 TotemCategory) const;
1563 InventoryResult CanUseItem(ItemTemplate const* pItem, bool skipRequiredLevelCheck = false) const;
1564 InventoryResult CanRollNeedForItem(ItemTemplate const* item, Map const* map, bool restrictOnlyLfg) const;
1565 Item* StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool update, ItemRandomBonusListId randomBonusListId = 0, GuidSet const& allowedLooters = GuidSet(),
1566 ItemContext context = ItemContext::NONE, std::vector<int32> const* bonusListIDs = nullptr, bool addToCollection = true);
1567 Item* StoreItem(ItemPosCountVec const& pos, Item* pItem, bool update);
1568 Item* EquipNewItem(uint16 pos, uint32 item, ItemContext context, bool update);
1569 Item* EquipItem(uint16 pos, Item* pItem, bool update);
1570 void AutoUnequipOffhandIfNeed(bool force = false);
1571 void EquipChildItem(uint8 parentBag, uint8 parentSlot, Item* parentItem);
1572 void AutoUnequipChildItem(Item* parentItem);
1573 bool StoreNewItemInBestSlots(uint32 itemId, uint32 amount, ItemContext context);
1574 void AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore const& store, ItemContext context = ItemContext::NONE, bool broadcast = false, bool createdByPlayer = false);
1575 void AutoStoreLoot(uint32 loot_id, LootStore const& store, ItemContext context = ItemContext::NONE, bool broadcast = false, bool createdByPlayer = false) { AutoStoreLoot(NULL_BAG, NULL_SLOT, loot_id, store, context, broadcast, createdByPlayer); }
1576 void StoreLootItem(ObjectGuid lootWorldObjectGuid, uint8 lootSlot, Loot* loot, AELootResult* aeResult = nullptr);
1577
1578 InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, uint32* no_space_count = nullptr, uint32* offendingItemId = nullptr) const;
1579 InventoryResult CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec& dest, uint32 entry, uint32 count, Item* pItem = nullptr, bool swap = false, uint32* no_space_count = nullptr) const;
1580
1581 void AddRefundReference(ObjectGuid it);
1582 void DeleteRefundReference(ObjectGuid it);
1583
1585 void SendCurrencies() const;
1587 void SendPvpRewards() const;
1589 void SetCreateCurrency(uint32 id, uint32 amount);
1591 void ModifyCurrency(uint32 id, int32 amount, CurrencyGainSource gainSource = CurrencyGainSource::Cheat, CurrencyDestroyReason destroyReason = CurrencyDestroyReason::Cheat);
1592 void AddCurrency(uint32 id, uint32 amount, CurrencyGainSource gainSource = CurrencyGainSource::Cheat);
1593 void RemoveCurrency(uint32 id, int32 amount, CurrencyDestroyReason destroyReason = CurrencyDestroyReason::Cheat);
1595 void IncreaseCurrencyCap(uint32 id, uint32 amount);
1597 void ResetCurrencyWeekCap();
1598
1599 uint32 GetCurrencyQuantity(uint32 id) const;
1600 uint32 GetCurrencyWeeklyQuantity(uint32 id) const;
1601 uint32 GetCurrencyTrackedQuantity(uint32 id) const;
1602 uint32 GetCurrencyIncreasedCapQuantity(uint32 id) const;
1603 uint32 GetCurrencyMaxQuantity(CurrencyTypesEntry const* currency, bool onLoad = false, bool onUpdateVersion = false) const;
1604 uint32 GetCurrencyWeeklyCap(uint32 id) const;
1605 uint32 GetCurrencyWeeklyCap(CurrencyTypesEntry const* currency) const;
1606 bool HasCurrency(uint32 id, uint32 amount) const;
1607 void SetCurrencyFlagsFromClient(uint32 id, CurrencyDbFlags flags);
1608
1609 void SetInvSlot(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::InvSlots, slot), guid); }
1610
1611 void ApplyEquipCooldown(Item* pItem);
1612 void QuickEquipItem(uint16 pos, Item* pItem);
1613 void VisualizeItem(uint8 slot, Item* pItem);
1614 void SetVisibleItemSlot(uint8 slot, Item const* item);
1615 Item* BankItem(ItemPosCountVec const& dest, Item* pItem, bool update);
1616 void RemoveItem(uint8 bag, uint8 slot, bool update);
1617 void MoveItemFromInventory(uint8 bag, uint8 slot, bool update);
1618 // in trade, auction, guild bank, mail....
1619 void MoveItemToInventory(ItemPosCountVec const& dest, Item* pItem, bool update, bool in_characterInventoryDB = false);
1620 // in trade, guild bank, mail....
1621 void RemoveItemDependentAurasAndCasts(Item* pItem);
1622 void DestroyItem(uint8 bag, uint8 slot, bool update);
1623 uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check = false);
1624 void DestroyItemCount(Item* item, uint32& count, bool update);
1625 void DestroyConjuredItems(bool update);
1626 void DestroyZoneLimitedItem(bool update, uint32 new_zone);
1627 void SplitItem(uint16 src, uint16 dst, uint32 count);
1628 void SwapItem(uint16 src, uint16 dst);
1629 void AddItemToBuyBackSlot(Item* pItem);
1630 void SetBuybackPrice(uint32 slot, uint32 price) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BuybackPrice, slot), price); }
1631 void SetBuybackTimestamp(uint32 slot, time_t timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BuybackTimestamp, slot), timestamp); }
1632 Item* GetItemFromBuyBackSlot(uint32 slot);
1633 void RemoveItemFromBuyBackSlot(uint32 slot, bool del);
1634 void SendEquipError(InventoryResult msg, Item const* item1 = nullptr, Item const* item2 = nullptr, uint32 itemId = 0) const;
1635 void SendBuyError(BuyResult msg, Creature* creature, uint32 item, uint32 param) const;
1636 void SendSellError(SellResult msg, Creature* creature, ObjectGuid guid) const;
1637 void AddWeaponProficiency(uint32 newflag) { m_WeaponProficiency |= newflag; }
1638 void AddArmorProficiency(uint32 newflag) { m_ArmorProficiency |= newflag; }
1639 uint32 GetWeaponProficiency() const { return m_WeaponProficiency; }
1640 uint32 GetArmorProficiency() const { return m_ArmorProficiency; }
1641 bool IsUseEquipedWeapon(bool mainhand) const;
1642 bool IsTwoHandUsed() const;
1643 bool IsUsingTwoHandedWeaponInOneHand() const;
1644 void SendNewItem(Item* item, uint32 quantity, bool received, bool created, bool broadcast = false, uint32 dungeonEncounterId = 0);
1645 bool BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uint32 item, uint32 count, uint8 bag, uint8 slot);
1646 Optional<SellResult> CanSellItemToVendor(Item const* item, uint32 amount) const;
1647 Optional<SellResult> SellItemToVendor(Item* item, uint32 amount);
1648 bool BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, uint32 currency, uint32 count);
1649 bool _StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int64 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore);
1650
1651 float GetReputationPriceDiscount(Creature const* creature) const;
1652 float GetReputationPriceDiscount(FactionTemplateEntry const* factionTemplate) const;
1653
1654 Player* GetTrader() const;
1655 TradeData* GetTradeData() const { return m_trade; }
1656 void TradeCancel(bool sendback);
1657
1658 CinematicMgr* GetCinematicMgr() const { return _cinematicMgr.get(); }
1659
1660 void UpdateEnchantTime(uint32 time);
1661 void UpdateSoulboundTradeItems();
1662 void AddTradeableItem(Item* item);
1663 void RemoveTradeableItem(Item* item);
1664 void UpdateItemDuration(uint32 time, bool realtimeonly = false);
1665 void AddEnchantmentDurations(Item* item);
1666 void RemoveEnchantmentDurations(Item* item);
1667 void RemoveEnchantmentDurationsReferences(Item* item);
1668 void RemoveArenaEnchantments(EnchantmentSlot slot);
1669 void AddEnchantmentDuration(Item* item, EnchantmentSlot slot, uint32 duration);
1670 void ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool apply_dur = true, bool ignore_condition = false);
1671 void ApplyEnchantment(Item* item, bool apply);
1672 void UpdateSkillEnchantments(uint16 skill_id, uint16 curr_value, uint16 new_value);
1673 void SendEnchantmentDurations();
1674 void AddItemDurations(Item* item);
1675 void RemoveItemDurations(Item* item);
1676 void SendItemDurations();
1677 void SendItemPassives();
1678 void LoadCorpse(PreparedQueryResult result);
1679
1680 bool AddItem(uint32 itemId, uint32 count);
1681
1682 /*********************************************************/
1683 /*** GOSSIP SYSTEM ***/
1684 /*********************************************************/
1685
1686 void PrepareGossipMenu(WorldObject* source, uint32 menuId, bool showQuests = false);
1687 void SendPreparedGossip(WorldObject* source);
1688 void OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 menuId);
1689
1690 uint32 GetGossipTextId(uint32 menuId, WorldObject* source);
1691 uint32 GetGossipTextId(WorldObject* source);
1692 uint32 GetGossipMenuForSource(WorldObject const* source) const;
1693
1694 /*********************************************************/
1695 /*** QUEST SYSTEM ***/
1696 /*********************************************************/
1697
1698 int32 GetQuestMinLevel(Quest const* quest) const;
1699 int32 GetQuestMinLevel(uint32 contentTuningId) const;
1700 int32 GetQuestLevel(Quest const* quest) const;
1701 int32 GetQuestLevel(uint32 contentTuningId) const;
1702 void PrepareQuestMenu(ObjectGuid guid);
1703 void SendPreparedQuest(WorldObject* source);
1704 bool IsActiveQuest(uint32 quest_id) const;
1705 Quest const* GetNextQuest(Object const* questGiver, Quest const* quest) const;
1706 bool CanSeeStartQuest(Quest const* quest) const;
1707 bool CanTakeQuest(Quest const* quest, bool msg) const;
1708 bool CanAddQuest(Quest const* quest, bool msg) const;
1709 bool CanCompleteQuest(uint32 quest_id, uint32 ignoredQuestObjectiveId = 0);
1710 bool CanCompleteRepeatableQuest(Quest const* quest);
1711 bool CanRewardQuest(Quest const* quest, bool msg) const;
1712 bool CanRewardQuest(Quest const* quest, LootItemType rewardType, uint32 rewardId, bool msg) const;
1713 void AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver);
1714 void AddQuest(Quest const* quest, Object* questGiver);
1715 void AbandonQuest(uint32 quest_id);
1716 void CompleteQuest(uint32 quest_id);
1717 void IncompleteQuest(uint32 quest_id);
1718 uint32 GetQuestMoneyReward(Quest const* quest) const;
1719 uint32 GetQuestXPReward(Quest const* quest);
1720 bool CanSelectQuestPackageItem(QuestPackageItemEntry const* questPackageItem) const;
1721 void RewardQuestPackage(uint32 questPackageId, ItemContext context, uint32 onlyItemId = 0);
1722 void RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rewardId, Object* questGiver, bool announce = true);
1723 void SetRewardedQuest(uint32 quest_id);
1724 void FailQuest(uint32 quest_id);
1725 void FailQuestsWithFlag(QuestFlags flag);
1726 bool SatisfyQuestSkill(Quest const* qInfo, bool msg) const;
1727 bool SatisfyQuestLevel(Quest const* qInfo, bool msg) const;
1728 bool SatisfyQuestMinLevel(Quest const* qInfo, bool msg) const;
1729 bool SatisfyQuestMaxLevel(Quest const* qInfo, bool msg) const;
1730 bool SatisfyQuestLog(bool msg) const;
1731 bool SatisfyQuestDependentQuests(Quest const* qInfo, bool msg) const;
1732 bool SatisfyQuestPreviousQuest(Quest const* qInfo, bool msg) const;
1733 bool SatisfyQuestDependentPreviousQuests(Quest const* qInfo, bool msg) const;
1734 bool SatisfyQuestBreadcrumbQuest(Quest const* qInfo, bool msg) const;
1735 bool SatisfyQuestDependentBreadcrumbQuests(Quest const* qInfo, bool msg) const;
1736 bool SatisfyQuestClass(Quest const* qInfo, bool msg) const;
1737 bool SatisfyQuestRace(Quest const* qInfo, bool msg) const;
1738 bool SatisfyQuestMinReputation(Quest const* qInfo, bool msg) const;
1739 bool SatisfyQuestMaxReputation(Quest const* qInfo, bool msg) const;
1740 bool SatisfyQuestReputation(Quest const* qInfo, bool msg) const;
1741 bool SatisfyQuestStatus(Quest const* qInfo, bool msg) const;
1742 bool SatisfyQuestConditions(Quest const* qInfo, bool msg) const;
1743 bool SatisfyQuestTimed(Quest const* qInfo, bool msg) const;
1744 bool SatisfyQuestExclusiveGroup(Quest const* qInfo, bool msg) const;
1745 bool SatisfyQuestDay(Quest const* qInfo, bool msg) const;
1746 bool SatisfyQuestWeek(Quest const* qInfo, bool msg) const;
1747 bool SatisfyQuestMonth(Quest const* qInfo, bool msg) const;
1748 bool SatisfyQuestSeasonal(Quest const* qInfo, bool msg) const;
1749 bool SatisfyQuestExpansion(Quest const* qInfo, bool msg) const;
1750 bool GiveQuestSourceItem(Quest const* quest);
1751 bool TakeQuestSourceItem(uint32 questId, bool msg);
1752 bool GetQuestRewardStatus(uint32 quest_id) const;
1753 QuestStatus GetQuestStatus(uint32 quest_id) const;
1754 void SetQuestStatus(uint32 questId, QuestStatus status, bool update = true);
1755 void RemoveActiveQuest(uint32 questId, bool update = true);
1756 void RemoveRewardedQuest(uint32 questId, bool update = true);
1757 void SendQuestUpdate(uint32 questId, bool updateInteractions = true, bool updateGameObjectQuestGiverStatus = false);
1758 QuestGiverStatus GetQuestDialogStatus(Object const* questGiver) const;
1759 void SkipQuests(std::span<uint32 const> questIds); // removes quest from log, flags rewarded, but does not give any rewards to player
1760 void DespawnPersonalSummonsForQuest(uint32 questId);
1761
1762 void SetDailyQuestStatus(uint32 quest_id);
1763 bool IsDailyQuestDone(uint32 quest_id) const;
1764 void SetWeeklyQuestStatus(uint32 quest_id);
1765 void SetMonthlyQuestStatus(uint32 quest_id);
1766 void SetSeasonalQuestStatus(uint32 quest_id);
1767 void DailyReset();
1768 void ResetWeeklyQuestStatus();
1769 void ResetMonthlyQuestStatus();
1770 void ResetSeasonalQuestStatus(uint16 event_id, time_t eventStartTime);
1771
1772 uint16 FindQuestSlot(uint32 quest_id) const;
1773 uint32 GetQuestSlotQuestId(uint16 slot) const;
1774 uint32 GetQuestSlotState(uint16 slot) const;
1775 uint16 GetQuestSlotCounter(uint16 slot, uint8 counter) const;
1776 int64 GetQuestSlotEndTime(uint16 slot) const;
1777 bool GetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) const;
1778 int32 GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objective) const;
1779 int32 GetQuestObjectiveData(uint32 questId, uint32 objectiveId) const;
1780 void SetQuestSlot(uint16 slot, uint32 quest_id);
1781 void SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count);
1782 void SetQuestSlotState(uint16 slot, uint32 state);
1783 void RemoveQuestSlotState(uint16 slot, uint32 state);
1784 void SetQuestSlotEndTime(uint16 slot, time_t endTime);
1785 void SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex);
1786 void RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex);
1787 bool IsQuestCompletedBitSet(uint32 questId) const;
1788 void SetQuestCompletedBit(uint32 questId, bool completed);
1789
1790 uint16 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const;
1791 void AreaExploredOrEventHappens(uint32 questId);
1792 void GroupEventHappens(uint32 questId, WorldObject const* pEventObject);
1793 void ItemAddedQuestCheck(uint32 entry, uint32 count, Optional<bool> boundItemFlagRequirement = {}, bool* hadBoundItemObjective = nullptr);
1794 void ItemRemovedQuestCheck(uint32 entry, uint32 count);
1795 void KilledMonster(Creature const* creature);
1796 void KilledMonsterCredit(uint32 entry, ObjectGuid guid = ObjectGuid::Empty);
1797 void KilledPlayerCredit(ObjectGuid victimGuid);
1798 void KillCreditGO(uint32 entry, ObjectGuid guid = ObjectGuid::Empty);
1799 void TalkedToCreature(uint32 entry, ObjectGuid guid);
1800 void KillCreditCriteriaTreeObjective(QuestObjective const& questObjective);
1801 void MoneyChanged(uint64 value);
1802 void ReputationChanged(FactionEntry const* factionEntry, int32 change);
1803 void CurrencyChanged(uint32 currencyId, int32 change);
1804 void UpdateQuestObjectiveProgress(QuestObjectiveType objectiveType, int32 objectId, int64 addCount, ObjectGuid victimGuid = ObjectGuid::Empty,
1805 std::vector<QuestObjective const*>* updatedObjectives = nullptr, std::function<bool(QuestObjective const*)> const* objectiveFilter = nullptr);
1806 bool HasQuestForItem(uint32 itemId) const;
1807 QuestObjective const* GetQuestObjectiveForItem(uint32 itemId, bool onlyIncomplete) const;
1808 bool HasQuestForGO(int32 goId) const;
1809 bool HasQuestForCurrency(uint32 currencyId) const;
1810 void UpdateVisibleObjectInteractions(bool allUnits, bool onlySpellClicks, bool gameObjectQuestGiverStatus, bool questObjectiveGameObjects);
1811 bool CanShareQuest(uint32 questId) const;
1812
1813 int32 GetQuestObjectiveData(QuestObjective const& objective) const;
1814 void SetQuestObjectiveData(QuestObjective const& objective, int32 data);
1815 bool IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestObjective const& objective) const;
1816 bool IsQuestObjectiveCompletable(uint32 questId, uint32 objectiveId) const;
1817 bool IsQuestObjectiveComplete(uint16 slot, Quest const* quest, QuestObjective const& objective) const;
1818 bool IsQuestObjectiveComplete(uint32 questId, uint32 objectiveId) const;
1819 bool IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest) const;
1820 void SendQuestComplete(uint32 questId) const;
1821 void SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp, bool hideChatMessage) const;
1822 void SendQuestFailed(uint32 questId, InventoryResult reason = EQUIP_ERR_OK) const;
1823 void SendQuestTimerFailed(uint32 questId) const;
1824 void SendCanTakeQuestResponse(QuestFailedReason reason, bool sendErrorMessage = true, std::string reasonText = "") const;
1825 void SendQuestConfirmAccept(Quest const* quest, Player* receiver) const;
1826 void SendPushToPartyResponse(Player const* player, QuestPushReason reason, Quest const* quest = nullptr) const;
1827 void SendQuestUpdateAddCredit(Quest const* quest, ObjectGuid guid, QuestObjective const& obj, uint16 count) const;
1828 void SendQuestUpdateAddCreditSimple(QuestObjective const& obj) const;
1829 void SendQuestUpdateAddItem(ItemTemplate const* itemTemplate, QuestObjective const& obj, uint16 count) const;
1830 void SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) const;
1831 void SendQuestGiverStatusMultiple();
1832 void SendDisplayToast(uint32 entry, DisplayToastType type, bool isBonusRoll, uint32 quantity, DisplayToastMethod method, uint32 questId = 0, Item* item = nullptr) const;
1833
1834 uint32 GetSharedQuestID() const { return m_sharedQuestId; }
1835 ObjectGuid GetPlayerSharingQuest() const { return m_playerSharingQuest; }
1836 void SetQuestSharingInfo(ObjectGuid guid, uint32 id) { m_playerSharingQuest = guid; m_sharedQuestId = id; }
1837 void ClearQuestSharingInfo() { m_playerSharingQuest = ObjectGuid::Empty; m_sharedQuestId = 0; }
1838
1839 uint32 GetInGameTime() const { return m_ingametime; }
1840 void SetInGameTime(uint32 time) { m_ingametime = time; }
1841
1842 void AddTimedQuest(uint32 questId);
1843 void RemoveTimedQuest(uint32 questId);
1844
1845 void SaveCUFProfile(uint8 id, std::nullptr_t) { _CUFProfiles[id] = nullptr; }
1846 void SaveCUFProfile(uint8 id, std::unique_ptr<CUFProfile> profile) { _CUFProfiles[id] = std::move(profile); }
1847 CUFProfile* GetCUFProfile(uint8 id) const { return _CUFProfiles[id].get(); }
1849 {
1850 uint8 count = 0;
1851 for (uint8 i = 0; i < MAX_CUF_PROFILES; ++i)
1852 if (_CUFProfiles[i])
1853 ++count;
1854 return count;
1855 }
1856
1857 bool HasPvPForcingQuest() const;
1858
1859 void SendForceSpawnTrackingUpdate(uint32 questId) const;
1860 QuestObjective const* GetActiveQuestObjectiveForSpawnTracking(uint32 spawnTrackingId) const;
1861 SpawnTrackingState GetSpawnTrackingStateByObjectives(uint32 spawnTrackingId, std::vector<uint32> const& questObjectives) const;
1862 SpawnTrackingState GetSpawnTrackingStateByObjective(uint32 spawnTrackingId, uint32 questObjectiveId) const;
1863
1864 /*********************************************************/
1865 /*** LOAD SYSTEM ***/
1866 /*********************************************************/
1867
1868 bool LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& holder);
1869 bool IsLoading() const override;
1870
1871 static uint32 GetZoneIdFromDB(ObjectGuid guid);
1872 static bool LoadPositionFromDB(uint32& mapid, float& x, float& y, float& z, float& o, bool& in_flight, ObjectGuid guid);
1873
1874 static bool IsValidGender(uint8 Gender) { return Gender <= GENDER_FEMALE; }
1875 static bool IsValidClass(uint8 Class) { return ((1 << (Class - 1)) & CLASSMASK_ALL_PLAYABLE) != 0; }
1877
1878 /*********************************************************/
1879 /*** SAVE SYSTEM ***/
1880 /*********************************************************/
1881
1882 void SaveToDB(bool create = false);
1883 void SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDatabaseTransaction trans, bool create = false);
1884 void SaveInventoryAndGoldToDB(CharacterDatabaseTransaction trans); // fast save function for item/money cheating preventing
1885
1886 static void SaveCustomizations(CharacterDatabaseTransaction trans, ObjectGuid::LowType guid,
1888 static void SavePositionInDB(WorldLocation const& loc, uint16 zoneId, ObjectGuid guid, CharacterDatabaseTransaction trans);
1889
1890 static void DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRealmChars = true, bool deleteFinally = false);
1891 static void DeleteOldCharacters();
1892 static void DeleteOldCharacters(uint32 keepDays);
1893
1895
1896 void SetBindPoint(ObjectGuid guid) const;
1897 void SendRespecWipeConfirm(ObjectGuid const& guid, uint32 cost, SpecResetType respecType) const;
1898 void RegenerateAll();
1899 void Regenerate(Powers power);
1900 void InterruptPowerRegen(Powers power);
1901 void RegenerateHealth();
1902 void setRegenTimerCount(uint32 time) {m_regenTimerCount = time;}
1903 void setWeaponChangeTimer(uint32 time) {m_weaponChangeTimer = time;}
1904
1905 uint64 GetMoney() const { return m_activePlayerData->Coinage; }
1906 bool ModifyMoney(int64 amount, bool sendError = true);
1907 bool HasEnoughMoney(uint64 amount) const { return (GetMoney() >= amount); }
1908 bool HasEnoughMoney(int64 amount) const{ return (amount < 0) || HasEnoughMoney(uint64(amount)); }
1909 void SetMoney(uint64 value);
1910
1911 RewardedQuestSet const& getRewardedQuests() const { return m_RewardedQuests; }
1912 QuestStatusMap& getQuestStatusMap() { return m_QuestStatus; }
1913
1914 size_t GetRewardedQuestCount() const { return m_RewardedQuests.size(); }
1915 bool IsQuestRewarded(uint32 quest_id) const;
1916
1917 Unit* GetSelectedUnit() const;
1918 Player* GetSelectedPlayer() const;
1919
1920 void SetTarget(ObjectGuid const& /*guid*/) override { }
1921 void SetSelection(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), guid); }
1922
1923 void SendMailResult(uint64 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, ObjectGuid::LowType itemGuid = UI64LIT(0), uint32 itemCount = 0) const;
1924 void SendNewMail() const;
1925 void UpdateNextMailTimeAndUnreads();
1926 void AddNewMailDeliverTime(time_t deliver_time);
1927
1928 void RemoveMail(uint64 id);
1929
1930 void AddMail(Mail* mail); // for call from WorldSession::SendMailTo
1931 uint32 GetMailSize() const { return uint32(m_mail.size()); }
1932 Mail* GetMail(uint64 id);
1933
1934 PlayerMails const& GetMails() const { return m_mail; }
1935
1936 void SendItemRetrievalMail(uint32 itemEntry, uint32 count, ItemContext context); // Item retrieval mails sent by The Postmaster (34337), used in multiple places.
1937
1938 /*********************************************************/
1939 /*** MAILED ITEMS SYSTEM ***/
1940 /*********************************************************/
1941
1944
1945 typedef std::unordered_map<ObjectGuid::LowType, Item*> ItemMap;
1946
1947 ItemMap mMitems; //template defined in objectmgr.cpp
1948
1949 Item* GetMItem(ObjectGuid::LowType id);
1950 void AddMItem(Item* it);
1951 bool RemoveMItem(ObjectGuid::LowType id);
1952
1953 void SendOnCancelExpectedVehicleRideAura() const;
1954 void PetSpellInitialize();
1955 void CharmSpellInitialize();
1956 void PossessSpellInitialize();
1957 void VehicleSpellInitialize();
1958 void SendRemoveControlBar() const;
1959 bool HasSpell(uint32 spell) const override;
1960 bool HasActiveSpell(uint32 spell) const; // show in spellbook
1961 SpellInfo const* GetCastSpellInfo(SpellInfo const* spellInfo, TriggerCastFlags& triggerFlag, GetCastSpellInfoContext* context) const override;
1962 bool IsSpellFitByClassAndRace(uint32 spell_id) const;
1963 bool HandlePassiveSpellLearn(SpellInfo const* spellInfo);
1964
1965 void SendProficiency(ItemClass itemClass, uint32 itemSubclassMask) const;
1966 void SendKnownSpells();
1967 void SendUnlearnSpells();
1968 bool AddSpell(uint32 spellId, bool active, bool learning, bool dependent, bool disabled, bool loading = false, int32 fromSkill = 0, bool favorite = false, Optional<PlayerSpellTrait> trait = {});
1969 void LearnSpell(uint32 spell_id, bool dependent, int32 fromSkill = 0, bool suppressMessaging = false, Optional<PlayerSpellTrait> trait = {});
1970 void RemoveSpell(uint32 spell_id, bool disabled = false, bool learn_low_rank = true, bool suppressMessaging = false);
1971 void ResetSpells(bool myClassOnly = false);
1972 void LearnCustomSpells();
1973 void LearnDefaultSkills();
1974 void LearnDefaultSkill(SkillRaceClassInfoEntry const* rcInfo);
1975 void LearnQuestRewardedSpells();
1976 void LearnQuestRewardedSpells(Quest const* quest);
1977 void AddTemporarySpell(uint32 spellId);
1978 void RemoveTemporarySpell(uint32 spellId);
1979 void SetOverrideSpellsId(int32 overrideSpellsId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellsID), overrideSpellsId); }
1980 void AddOverrideSpell(uint32 overridenSpellId, uint32 newSpellId);
1981 void RemoveOverrideSpell(uint32 overridenSpellId, uint32 newSpellId);
1982 void LearnSpecializationSpells();
1983 void RemoveSpecializationSpells();
1984 void AddSpellCategoryCooldownMod(int32 spellCategoryId, int32 mod);
1985 void RemoveSpellCategoryCooldownMod(int32 spellCategoryId, int32 mod);
1986 void SetSpellFavorite(uint32 spellId, bool favorite);
1987
1988 void AddStoredAuraTeleportLocation(uint32 spellId);
1989 void RemoveStoredAuraTeleportLocation(uint32 spellId);
1990 WorldLocation const* GetStoredAuraTeleportLocation(uint32 spellId) const;
1991
1992 void SetReputation(uint32 factionentry, int32 value);
1993 int32 GetReputation(uint32 factionentry) const;
1994 std::string GetGuildName() const;
1995
1996 // Loot Spec
1997 void SetLootSpecId(uint32 id) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LootSpecID), id); }
1998 uint32 GetLootSpecId() const { return m_activePlayerData->LootSpecID; }
1999
2000 ZonePVPTypeOverride GetOverrideZonePVPType() const { return ZonePVPTypeOverride(*m_activePlayerData->OverrideZonePVPType); }
2001 void SetOverrideZonePVPType(ZonePVPTypeOverride type) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideZonePVPType), uint32(type)); }
2002
2003 // Talents
2004 uint32 GetTalentResetCost() const { return _specializationInfo.ResetTalentsCost; }
2005 void SetTalentResetCost(uint32 cost) { _specializationInfo.ResetTalentsCost = cost; }
2006 time_t GetTalentResetTime() const { return _specializationInfo.ResetTalentsTime; }
2007 void SetTalentResetTime(time_t time_) { _specializationInfo.ResetTalentsTime = time_; }
2008 ChrSpecialization GetPrimarySpecialization() const { return ChrSpecialization(*m_playerData->CurrentSpecID); }
2009 void SetPrimarySpecialization(uint32 spec) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CurrentSpecID), spec); }
2010 uint8 GetActiveTalentGroup() const { return _specializationInfo.ActiveGroup; }
2011 void SetActiveTalentGroup(uint8 group){ _specializationInfo.ActiveGroup = group; }
2012 uint32 GetDefaultSpecId() const;
2013 ChrSpecializationEntry const* GetPrimarySpecializationEntry() const;
2014
2015 bool ResetTalents(bool noCost = false);
2016 void ResetPvpTalents();
2017 uint32 GetNextResetTalentsCost() const;
2018 void InitTalentForLevel();
2019 void SendTalentsInfoData();
2020 TalentLearnResult LearnTalent(uint32 talentId, int32* spellOnCooldown);
2021 bool AddTalent(TalentEntry const* talent, uint8 spec, bool learning);
2022 bool HasTalent(uint32 spell_id, uint8 spec) const;
2023 void RemoveTalent(TalentEntry const* talent);
2024 void ResetTalentSpecialization();
2025
2026 TalentLearnResult LearnPvpTalent(uint32 talentID, uint8 slot, int32* spellOnCooldown);
2027 bool AddPvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup, uint8 slot);
2028 void RemovePvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup);
2029 void TogglePvpTalents(bool enable);
2030 bool HasPvpTalent(uint32 talentID, uint8 activeTalentGroup) const;
2031 void EnablePvpRules(bool dueToCombat = false);
2032 void DisablePvpRules();
2033 bool HasPvpRulesEnabled() const;
2034 bool IsInAreaThatActivatesPvpTalents() const;
2035 bool IsAreaThatActivatesPvpTalents(uint32 areaID) const;
2036
2037 // Dual Spec
2038 void ActivateTalentGroup(ChrSpecializationEntry const* spec);
2039
2040 PlayerTalentMap const* GetTalentMap(uint8 spec) const { return &_specializationInfo.Talents[spec]; }
2041 PlayerTalentMap* GetTalentMap(uint8 spec) { return &_specializationInfo.Talents[spec]; }
2042 PlayerPvpTalentMap const& GetPvpTalentMap(uint8 spec) const { return _specializationInfo.PvpTalents[spec]; }
2043 PlayerPvpTalentMap& GetPvpTalentMap(uint8 spec) { return _specializationInfo.PvpTalents[spec]; }
2044 std::vector<uint32> const& GetGlyphs(uint8 spec) const { return _specializationInfo.Glyphs[spec]; }
2045 std::vector<uint32>& GetGlyphs(uint8 spec) { return _specializationInfo.Glyphs[spec]; }
2046 ActionButtonList const& GetActionButtons() const { return m_actionButtons; }
2047 void StartLoadingActionButtons(std::function<void()>&& callback = nullptr);
2048 void LoadActions(PreparedQueryResult result);
2049
2050 // Traits
2051 void CreateTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig);
2052 void AddTraitConfig(WorldPackets::Traits::TraitConfig const& traitConfig);
2053 UF::TraitConfig const* GetTraitConfig(int32 configId) const;
2054 void UpdateTraitConfig(WorldPackets::Traits::TraitConfig&& newConfig, int32 savedConfigId, bool withCastTime);
2055 void ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits::TraitConfig const& newConfig, bool applyTraits, bool consumeCurrencies);
2056 void RenameTraitConfig(int32 editedConfigId, std::string&& newName);
2057 void DeleteTraitConfig(int32 deletedConfigId);
2058 void ApplyTraitConfig(int32 configId, bool apply);
2059 void ApplyTraitEntry(int32 traitNodeEntryId, int32 rank, int32 grantedRanks, bool apply);
2060 void SetActiveCombatTraitConfigID(int32 traitConfigId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ActiveCombatTraitConfigID), traitConfigId); }
2061 void SetCurrentCombatTraitConfigSubTreeID(int32 traitSubTreeId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CurrentCombatTraitConfigSubTreeID), traitSubTreeId); }
2062 void SetTraitConfigUseStarterBuild(int32 traitConfigId, bool useStarterBuild);
2063 void SetTraitConfigUseSharedActionBars(int32 traitConfigId, bool usesSharedActionBars, bool isLastSelectedSavedConfig);
2064 Optional<PlayerSpellTrait> GetTraitInfoForSpell(uint32 spellId) const;
2065
2066 uint32 GetFreePrimaryProfessionPoints() const { return m_activePlayerData->CharacterPoints; }
2067 void SetFreePrimaryProfessions(uint16 profs) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterPoints), profs); }
2068 void InitPrimaryProfessions();
2069
2070 PlayerSpellMap const& GetSpellMap() const { return m_spells; }
2071 PlayerSpellMap & GetSpellMap() { return m_spells; }
2072
2073 void AddSpellMod(SpellModifier* mod, bool apply);
2074 static int32 IsAffectedBySpellmod(SpellInfo const* spellInfo, SpellModifier const* mod, Spell const* spell = nullptr);
2075 void GetSpellModValues(SpellInfo const* spellInfo, SpellModOp op, Spell* spell, double base, int32* flat, float* pct) const;
2076 template <class T>
2077 void ApplySpellMod(SpellInfo const* spellInfo, SpellModOp op, T& basevalue, Spell* spell = nullptr) const;
2078 static void ApplyModToSpell(SpellModifier* mod, Spell* spell);
2079 void SetSpellModTakingSpell(Spell* spell, bool apply);
2080 void SendSpellModifiers() const;
2081
2082 void RemoveArenaSpellCooldowns(bool removeActivePetCooldowns = false);
2083 uint32 GetLastPotionId() const { return m_lastPotionId; }
2084 void SetLastPotionId(uint32 item_id) { m_lastPotionId = item_id; }
2085 void UpdatePotionCooldown(Spell* spell = nullptr);
2086
2087 float GetEmpowerMinHoldStagePercent() const { return m_empowerMinHoldStagePercent; }
2088 void SetEmpowerMinHoldStagePercent(float empowerMinHoldStagePercent) { m_empowerMinHoldStagePercent = empowerMinHoldStagePercent; }
2089
2090 void SetResurrectRequestData(WorldObject const* caster, uint32 health, uint32 mana, uint32 appliedAura);
2092 {
2093 _resurrectionData.reset();
2094 }
2095
2096 bool IsResurrectRequestedBy(ObjectGuid const& guid) const
2097 {
2098 if (!IsResurrectRequested())
2099 return false;
2100
2101 return !_resurrectionData->GUID.IsEmpty() && _resurrectionData->GUID == guid;
2102 }
2103
2104 bool IsResurrectRequested() const { return _resurrectionData.get() != nullptr; }
2105 void ResurrectUsingRequestData();
2106 void ResurrectUsingRequestDataImpl();
2107
2108 PlayerCreateMode GetCreateMode() const { return m_createMode; }
2109
2110 uint8 getCinematic() const { return m_cinematic; }
2111 void setCinematic(uint8 cine) { m_cinematic = cine; }
2112
2113 uint32 GetMovie() const { return m_movie; }
2114 void SetMovie(uint32 movie) { m_movie = movie; }
2115
2116 ActionButton* AddActionButton(uint8 button, uint64 action, uint8 type);
2117 void RemoveActionButton(uint8 button);
2118 ActionButton const* GetActionButton(uint8 button);
2119 void SendInitialActionButtons() const { SendActionButtons(0); }
2120 void SendActionButtons(uint32 state) const;
2121 bool IsActionButtonDataValid(uint8 button, uint64 action, uint8 type) const;
2122 void SetMultiActionBars(uint8 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MultiActionBars), mask); }
2123
2125 void InitPvP();
2126 void UpdatePvPState(bool onlyFFA = false);
2127 void SetPvP(bool state) override;
2128 void UpdatePvP(bool state, bool override = false);
2129 void UpdateZone(uint32 newZone, uint32 newArea);
2130 void UpdateArea(uint32 newArea);
2131 void UpdateHostileAreaState(AreaTableEntry const* area);
2132 void UpdateZoneDependentAuras(uint32 zone_id); // zones
2133 void UpdateAreaDependentAuras(uint32 area_id); // subzones
2134
2135 void UpdateAfkReport(time_t currTime);
2136 void UpdatePvPFlag(time_t currTime);
2137 void SetContestedPvP(Player* attackedPlayer = nullptr);
2138 void UpdateContestedPvP(uint32 currTime);
2139 void SetContestedPvPTimer(uint32 newTime) {m_contestedPvPTimer = newTime;}
2140 void ResetContestedPvP();
2141
2143 std::unique_ptr<DuelInfo> duel;
2144 void UpdateDuelFlag(time_t currTime);
2145 void CheckDuelDistance(time_t currTime);
2146 void DuelComplete(DuelCompleteType type);
2147 void SetDuelArbiter(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DuelArbiter), guid); }
2148 void SetDuelTeam(uint32 duelTeam) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DuelTeam), duelTeam); }
2149
2150 bool IsGroupVisibleFor(Player const* p) const;
2151 bool IsInSameGroupWith(Player const* p) const;
2152 bool IsInSameRaidWith(Player const* p) const;
2153 void UninviteFromGroup();
2154 static void RemoveFromGroup(Group* group, ObjectGuid guid, RemoveMethod method = GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker = ObjectGuid::Empty, char const* reason = nullptr);
2155 void RemoveFromGroup(RemoveMethod method = GROUP_REMOVEMETHOD_DEFAULT) { RemoveFromGroup(GetGroup(), GetGUID(), method); }
2156 void SendUpdateToOutOfRangeGroupMembers();
2157
2158 void SetInGuild(ObjectGuid::LowType guildId);
2159 void SetGuildRank(uint8 rankId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::GuildRankID), rankId); }
2160 uint8 GetGuildRank() const { return uint8(m_playerData->GuildRankID); }
2161 void SetGuildLevel(uint32 level) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::GuildLevel), level); }
2162 uint32 GetGuildLevel() const { return m_playerData->GuildLevel; }
2163 void SetGuildIdInvited(ObjectGuid::LowType GuildId) { m_GuildIdInvited = GuildId; }
2164 ObjectGuid::LowType GetGuildId() const { return m_unitData->GuildGUID->GetCounter(); /* return only lower part */ }
2165 Guild* GetGuild();
2166 Guild const* GetGuild() const;
2167 ObjectGuid::LowType GetGuildIdInvited() const { return m_GuildIdInvited; }
2168 static void RemovePetitionsAndSigns(ObjectGuid guid);
2169 void SetPersonalTabard(uint32 style, uint32 color, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
2170
2171 // Arena Team
2172 void SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type);
2173 void SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value);
2174 static void LeaveAllArenaTeams(ObjectGuid guid);
2175 uint32 GetArenaTeamId(uint8 /*slot*/) const { return 0; }
2176 uint32 GetArenaPersonalRating(uint8 slot) const;
2177 void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }
2178 uint32 GetArenaTeamIdInvited() const { return m_ArenaTeamIdInvited; }
2179 uint32 GetRBGPersonalRating() const { return GetArenaPersonalRating(3); }
2180 UF::PVPInfo const* GetPvpInfoForBracket(int8 bracket) const;
2181
2182 Difficulty GetDifficultyID(MapEntry const* mapEntry) const;
2183 Difficulty GetDungeonDifficultyID() const { return m_dungeonDifficulty; }
2184 Difficulty GetRaidDifficultyID() const { return m_raidDifficulty; }
2185 Difficulty GetLegacyRaidDifficultyID() const { return m_legacyRaidDifficulty; }
2186 void SetDungeonDifficultyID(Difficulty dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; }
2187 void SetRaidDifficultyID(Difficulty raid_difficulty) { m_raidDifficulty = raid_difficulty; }
2188 void SetLegacyRaidDifficultyID(Difficulty raid_difficulty) { m_legacyRaidDifficulty = raid_difficulty; }
2189 static Difficulty CheckLoadedDungeonDifficultyID(Difficulty difficulty);
2190 static Difficulty CheckLoadedRaidDifficultyID(Difficulty difficulty);
2191 static Difficulty CheckLoadedLegacyRaidDifficultyID(Difficulty difficulty);
2192 void SendRaidGroupOnlyMessage(RaidGroupReason reason, int32 delay) const;
2193
2194 bool UpdateSkillPro(uint16 skillId, int32 chance, uint32 step);
2195 bool UpdateCraftSkill(SpellInfo const* spellInfo);
2196 bool UpdateGatherSkill(uint32 skillId, uint32 skillValue, uint32 redLevel, uint32 multiplicator = 1, WorldObject const* object = nullptr);
2197 bool UpdateFishingSkill(int32 expansion);
2198
2199 float GetHealthBonusFromStamina() const;
2200 Stats GetPrimaryStat() const;
2201
2202 bool UpdateStats(Stats stat) override;
2203 bool UpdateAllStats() override;
2204 void ApplySpellPenetrationBonus(int32 amount, bool apply);
2205 void ApplyModTargetResistance(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetResistance), mod, apply); }
2206 void ApplyModTargetPhysicalResistance(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetPhysicalResistance), mod, apply); }
2207 void UpdateResistances(uint32 school) override;
2208 void UpdateArmor() override;
2209 void UpdateMaxHealth() override;
2210 void UpdateMaxPower(Powers power) override;
2211 uint32 GetPowerIndex(Powers power) const override;
2212 void UpdateAttackPowerAndDamage(bool ranged = false) override;
2213 void ApplySpellPowerBonus(int32 amount, bool apply);
2214 void UpdateSpellDamageAndHealingBonus();
2215 void ApplyModDamageDonePos(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, school), mod, apply); }
2216 void ApplyModDamageDoneNeg(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, school), mod, apply); }
2217 void ApplyModDamageDonePercent(SpellSchools school, float pct, bool apply) { ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, school), pct, apply); }
2218 void SetModDamageDonePercent(uint8 school, float pct) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, school), pct); }
2219 void ApplyRatingMod(CombatRating cr, int32 value, bool apply);
2220 void UpdateRating(CombatRating cr);
2221 void UpdateAllRatings();
2222 void UpdateMastery();
2223 void UpdateVersatilityDamageDone();
2224 void UpdateHealingDonePercentMod();
2225 bool CanUseMastery() const;
2226
2227 void CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage) const override;
2228
2229 void RecalculateRating(CombatRating cr) { ApplyRatingMod(cr, 0, true);}
2230 void GetDodgeFromAgility(float &diminishing, float &nondiminishing) const;
2231 float GetRatingMultiplier(CombatRating cr) const;
2232 float GetRatingBonusValue(CombatRating cr) const;
2233 float ApplyRatingDiminishing(CombatRating cr, float bonusValue) const;
2234
2236 uint32 GetBaseSpellPowerBonus() const { return m_baseSpellPower; }
2237 int32 GetSpellPenetrationItemMod() const { return m_spellPenetrationItemMod; }
2238
2239 bool CanApplyResilience() const override { return true; }
2240
2241 float GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const;
2242 void UpdateBlockPercentage();
2243 void UpdateCritPercentage(WeaponAttackType attType);
2244 void UpdateAllCritPercentages();
2245 void UpdateParryPercentage();
2246 void UpdateDodgePercentage();
2247 void UpdateMeleeHitChances();
2248 void UpdateRangedHitChances();
2249 void UpdateSpellHitChances();
2250
2251 void UpdateSpellCritChance();
2252 void UpdateCorruption();
2253 void UpdateArmorPenetration(int32 amount);
2254 void UpdateExpertise(WeaponAttackType attType);
2255 void ApplyManaRegenBonus(int32 amount, bool apply);
2256 void ApplyHealthRegenBonus(int32 amount, bool apply);
2257 void UpdateManaRegen();
2258 void UpdateAllRunesRegen();
2259
2260 void SetPetSpellPower(uint32 spellPower) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::PetSpellPower), spellPower); }
2261
2262 ObjectGuid const& GetLootGUID() const { return m_playerData->LootTargetGUID; }
2263 void SetLootGUID(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::LootTargetGUID), guid); }
2264 Loot* GetLootByWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const;
2265 std::unordered_map<ObjectGuid, Loot*> const& GetAELootView() const { return m_AELootView; }
2266 LootRoll* GetLootRoll(ObjectGuid const& lootObjectGuid, uint8 lootListId);
2267 void AddLootRoll(LootRoll* roll);
2268 void RemoveLootRoll(LootRoll* roll);
2269
2270 void RemovedInsignia(Player* looterPlr);
2271
2272 WorldSession* GetSession() const { return m_session; }
2273
2274 protected:
2275 UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override;
2276 void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
2277 void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
2278 void ClearValuesChangesMask() override;
2279
2280 public:
2281 void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
2282 void BuildValuesUpdateWithFlag(UF::UpdateFieldFlag flags, ByteBuffer& data, Player const* target) const override;
2283 void BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask, UF::UnitData::Mask const& requestedUnitMask,
2284 UF::PlayerData::Mask const& requestedPlayerMask, UF::ActivePlayerData::Mask const& requestedActivePlayerMask,
2285 Player const* target, bool ignoreNestedChangesMask) const;
2286
2287 struct ValuesUpdateForPlayerWithMaskSender // sender compatible with MessageDistDeliverer
2288 {
2289 explicit ValuesUpdateForPlayerWithMaskSender(Player const* owner) : Owner(owner), IgnoreNestedChangesMask(false) { }
2290
2297
2298 void operator()(Player const* player) const;
2299 };
2300
2301 void DestroyForPlayer(Player const* target) const override;
2302
2303 // notifiers
2304 void SendAttackSwingCancelAttack() const;
2305 void SetAttackSwingError(Optional<AttackSwingErr> err);
2306 void SendAutoRepeatCancel(Unit* target);
2307 void SendExplorationExperience(uint32 Area, uint32 Experience) const;
2308
2309 void SendDungeonDifficulty(int32 forcedDifficulty = -1) const;
2310 void SendRaidDifficulty(bool legacy, int32 forcedDifficulty = -1) const;
2311 void ResetInstances(InstanceResetMethod method);
2312 void SendResetInstanceSuccess(uint32 MapId) const;
2313 void SendResetInstanceFailed(ResetFailedReason reason, uint32 mapID) const;
2314 void SendResetFailedNotify(uint32 mapid) const;
2315 bool IsLockedToDungeonEncounter(uint32 dungeonEncounterId) const;
2316 bool IsLockedToDungeonEncounter(uint32 dungeonEncounterId, Difficulty difficulty) const;
2317
2318 bool UpdatePosition(float x, float y, float z, float orientation, bool teleport = false) override;
2319 bool UpdatePosition(Position const& pos, bool teleport = false) override { return UpdatePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teleport); }
2320 void ProcessPositionDataChanged(PositionFullTerrainStatus const& data) override;
2321 void UpdateLiquidMirrorTimerFlagsOnPositionChange(Optional<LiquidData> const& newLiquidData);
2322 void AtEnterCombat() override;
2323 void AtExitCombat() override;
2324
2325 void SendMessageToSet(WorldPacket const* data, bool self) const override { SendMessageToSetInRange(data, GetVisibilityRange(), self); }
2326 void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self) const override;
2327 void SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only, bool required3dDist = false) const;
2328 void SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr) const override;
2329
2330 void SendChatMessageToSetInRange(ChatMsg chatMsg, Language lanugageId, std::string&& text, float range);
2331
2332 Corpse* GetCorpse() const;
2333 void SpawnCorpseBones(bool triggerSave = true);
2334 Corpse* CreateCorpse();
2335 void KillPlayer();
2336 static void OfflineResurrect(ObjectGuid const& guid, CharacterDatabaseTransaction trans);
2337 bool HasCorpse() const { return _corpseLocation.GetMapId() != MAPID_INVALID; }
2338 WorldLocation const& GetCorpseLocation() const { return _corpseLocation; }
2339 void InitializeSelfResurrectionSpells();
2340 void ResurrectPlayer(float restore_percent, bool applySickness = false);
2341 void BuildPlayerRepop();
2342 void RepopAtGraveyard();
2343
2344 void DurabilityLossAll(double percent, bool inventory);
2345 void DurabilityLoss(Item* item, double percent);
2346 void DurabilityPointsLossAll(int32 points, bool inventory);
2347 void DurabilityPointsLoss(Item* item, int32 points);
2348 void DurabilityPointLossForEquipSlot(EquipmentSlots slot);
2349 void DurabilityRepairAll(bool takeCost, float discountMod, bool guildBank);
2350 void DurabilityRepair(uint16 pos, bool takeCost, float discountMod);
2351
2352 void UpdateMirrorTimers();
2353 void StopMirrorTimers();
2354 bool IsMirrorTimerActive(MirrorTimerType type) const;
2355
2356 bool CanJoinConstantChannelInZone(ChatChannelsEntry const* channel, AreaTableEntry const* zone) const;
2357
2358 void JoinedChannel(Channel* c);
2359 void LeftChannel(Channel* c);
2360 void CleanupChannels();
2361 void UpdateLocalChannels(uint32 newZone);
2362 void LeaveLFGChannel();
2363
2364 typedef std::list<Channel*> JoinedChannelsList;
2365 JoinedChannelsList const& GetJoinedChannels() const { return m_channels; }
2366
2367 void InitializeSkillFields();
2368 void SetSkill(uint32 id, uint16 step, uint16 newVal, uint16 maxVal);
2369 uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus + temp bonus
2370 uint16 GetPureMaxSkillValue(uint32 skill) const; // max
2371 uint16 GetSkillValue(uint32 skill) const; // skill value + perm. bonus + temp bonus
2372 uint16 GetBaseSkillValue(uint32 skill) const; // skill value + perm. bonus
2373 uint16 GetPureSkillValue(uint32 skill) const; // skill value
2374 int16 GetSkillPermBonusValue(uint32 skill) const;
2375 int16 GetSkillTempBonusValue(uint32 skill) const;
2376 uint16 GetSkillStep(uint32 skill) const; // 0...6
2377 uint32 GetProfessionSkillForExp(uint32 skill, int32 expansion) const;
2378 bool HasSkill(uint32 skill) const;
2379 void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue, Races race);
2380 int32 GetProfessionSlotFor(uint32 skillId) const;
2381 int32 FindEmptyProfessionSlotFor(uint32 skillId) const;
2382 uint16 GetSkillLineIdByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillLineID[pos]; }
2383 void SetSkillLineId(uint32 pos, uint16 skillLineId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillLineID, pos), skillLineId); }
2384 uint16 GetSkillStepByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillStep[pos]; }
2385 void SetSkillStep(uint32 pos, uint16 step) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillStep, pos), step); }
2386 uint16 GetSkillRankByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillRank[pos]; }
2387 void SetSkillRank(uint32 pos, uint16 rank) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillRank, pos), rank); }
2388 uint16 GetSkillStartingRankByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillStartingRank[pos]; }
2389 void SetSkillStartingRank(uint32 pos, uint16 starting) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillStartingRank, pos), starting); }
2390 uint16 GetSkillMaxRankByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillMaxRank[pos]; }
2391 void SetSkillMaxRank(uint32 pos, uint16 max) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillMaxRank, pos), max); }
2392 int16 GetSkillTempBonusByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillTempBonus[pos]; }
2393 void SetSkillTempBonus(uint32 pos, uint16 bonus) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillTempBonus, pos), bonus); }
2394 uint16 GetSkillPermBonusByPos(uint32 pos) const { return m_activePlayerData->Skill->SkillPermBonus[pos]; }
2395 void SetSkillPermBonus(uint32 pos, uint16 bonus) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillPermBonus, pos), bonus); }
2396
2397 TeleportLocation& GetTeleportDest() { return m_teleport_dest; }
2398 TeleportState GetTeleportState() const { return m_teleport_state; }
2399 void SetTeleportState(TeleportState state) { m_teleport_state = state; }
2400 EnumFlag<TeleportToOptions> GetTeleportOptions() const { return m_teleport_options; }
2401 int32 GetNewWorldCounter() const { return m_newWorldCounter; }
2402 bool IsBeingTeleported() const { return m_teleport_state != TeleportState::NotTeleporting; }
2403 bool IsBeingTeleportedNear() const { return m_teleport_state == TeleportState::DelayedTeleport
2404 || m_teleport_state == TeleportState::WaitingForTeleportAck; }
2405 bool IsBeingTeleportedFar() const { return m_teleport_state == TeleportState::DelayedWorldPort
2407 || m_teleport_state == TeleportState::WaitingForWorldPortAck; }
2408 void ProcessDelayedOperations();
2409
2410 void CheckAreaExplore();
2411 void AddExploredZones(uint32 pos, uint64 mask);
2412 void RemoveExploredZones(uint32 pos, uint64 mask);
2413 bool HasExploredZone(uint32 areaId) const;
2414
2415 // These methods are used to periodically update certain area and aura based mechanics used in Heartbeat and Movement
2416 void UpdateZoneAndAreaId();
2417 void UpdateIndoorsOutdoorsAuras();
2418 void UpdateTavernRestingState();
2419
2420 static Team TeamForRace(uint8 race);
2421 static TeamId TeamIdForRace(uint8 race);
2422 static uint8 GetFactionGroupForRace(uint8 race);
2423 Team GetTeam() const { return m_team; }
2424 TeamId GetTeamId() const { return GetTeamIdForTeam(m_team); }
2425 void SetFactionForRace(uint8 race);
2426
2427 Team GetEffectiveTeam() const { return HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE) ? GetOtherTeam(GetTeam()) : GetTeam(); }
2428 TeamId GetEffectiveTeamId() const { return GetTeamIdForTeam(GetEffectiveTeam()); }
2429
2430 void InitDisplayIds();
2431
2432 bool IsAtGroupRewardDistance(WorldObject const* pRewardSource) const;
2433 bool IsAtRecruitAFriendDistance(WorldObject const* pOther) const;
2434 void RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject* pRewardSource);
2435 bool isHonorOrXPTarget(Unit const* victim) const;
2436
2437 bool GetsRecruitAFriendBonus(bool forXP);
2438
2439 ReputationMgr& GetReputationMgr() { return *m_reputationMgr; }
2440 ReputationMgr const& GetReputationMgr() const { return *m_reputationMgr; }
2441 ReputationRank GetReputationRank(uint32 faction_id) const;
2442 void RewardReputation(Unit* victim, float rate);
2443 void RewardReputation(Quest const* quest);
2444
2445 int32 CalculateReputationGain(ReputationSource source, uint32 creatureOrQuestLevel, int32 rep, int32 faction, bool noQuestBonus = false);
2446
2447 void SetVisibleForcedReaction(uint32 factionId, ReputationRank rank);
2448 void RemoveVisibleForcedReaction(uint32 factionId);
2449
2450 void UpdateSkillsForLevel();
2451 void ModifySkillBonus(uint32 skillid, int32 val, bool talent);
2452
2453 /*********************************************************/
2454 /*** PVP SYSTEM ***/
2455 /*********************************************************/
2456 void UpdateHonorFields();
2457 bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, HonorGainSource source = HonorGainSource::Kill);
2458 void ResetHonorStats();
2459 uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const;
2460
2461 // duel health and mana reset methods
2462 void SaveHealthBeforeDuel() { healthBeforeDuel = GetHealth(); }
2463 void SaveManaBeforeDuel() { manaBeforeDuel = GetPower(POWER_MANA); }
2464 void RestoreHealthAfterDuel() { SetHealth(healthBeforeDuel); }
2465 void RestoreManaAfterDuel() { SetPower(POWER_MANA, manaBeforeDuel); }
2466
2467 uint32 GetHonorLevel() const { return m_playerData->HonorLevel; }
2468 void AddHonorXP(uint32 xp);
2469 void SetHonorLevel(uint8 honorLevel);
2470 bool IsMaxHonorLevel() const { return GetHonorLevel() == PLAYER_MAX_HONOR_LEVEL; }
2471 // Updates PLAYER_FIELD_HONOR_NEXT_LEVEL based on PLAYER_FIELD_HONOR_LEVEL
2472 void UpdateHonorNextLevel();
2473 //End of PvP System
2474
2475 void RewardPlayerWithRewardPack(uint32 rewardPackID);
2476 void RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry);
2477
2478 void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0);
2479 uint8 GetDrunkValue() const { return m_playerData->Inebriation; }
2480 static DrunkenState GetDrunkenstateByValue(uint8 value);
2481
2482 uint32 GetDeathTimer() const { return m_deathTimer; }
2483 uint32 GetCorpseReclaimDelay(bool pvp) const;
2484 void UpdateCorpseReclaimDelay();
2485 int32 CalculateCorpseReclaimDelay(bool load = false) const;
2486 void SendCorpseReclaimDelay(uint32 delay) const;
2487
2488 float GetBlockPercent(uint8 attackerLevel) const override;
2489 bool CanParry() const { return m_canParry; }
2490 void SetCanParry(bool value);
2491 bool CanBlock() const { return m_canBlock; }
2492 void SetCanBlock(bool value);
2493 bool CanTitanGrip() const { return m_canTitanGrip; }
2494 void SetCanTitanGrip(bool value, uint32 penaltySpellId = 0);
2495 void CheckTitanGripPenalty();
2496 bool CanTameExoticPets() const { return IsGameMaster() || HasAuraType(SPELL_AURA_ALLOW_TAME_PET_TYPE); }
2497
2498 void SetRegularAttackTime();
2499
2500 void HandleBaseModFlatValue(BaseModGroup modGroup, float amount, bool apply);
2501 void ApplyBaseModPctValue(BaseModGroup modGroup, float pct);
2502
2503 void SetBaseModFlatValue(BaseModGroup modGroup, float val);
2504 void SetBaseModPctValue(BaseModGroup modGroup, float val);
2505
2506 void UpdateDamageDoneMods(WeaponAttackType attackType, int32 skipEnchantSlot = -1) override;
2507 void UpdateBaseModGroup(BaseModGroup modGroup);
2508
2509 float GetBaseModValue(BaseModGroup modGroup, BaseModType modType) const;
2510 float GetTotalBaseModValue(BaseModGroup modGroup) const;
2511
2512 void _ApplyAllStatBonuses();
2513 void _RemoveAllStatBonuses();
2514
2515 void ResetAllPowers();
2516
2517 SpellSchoolMask GetMeleeDamageSchoolMask(WeaponAttackType attackType = BASE_ATTACK) const override;
2518
2519 void CastAllObtainSpells();
2520 void ApplyItemObtainSpells(Item* item, bool apply);
2521
2522 void UpdateWeaponDependentCritAuras(WeaponAttackType attackType);
2523 void UpdateAllWeaponDependentCritAuras();
2524
2525 void UpdateWeaponDependentAuras(WeaponAttackType attackType);
2526 void ApplyItemDependentAuras(Item* item, bool apply);
2527
2528 bool CheckAttackFitToAuraRequirement(WeaponAttackType attackType, AuraEffect const* aurEff) const override;
2529
2530 void _ApplyItemMods(Item* item, uint8 slot, bool apply, bool updateItemAuras = true);
2531 void _RemoveAllItemMods();
2532 void _ApplyAllItemMods();
2533 void _ApplyAllLevelScaleItemMods(bool apply);
2534 void ApplyAllAzeriteItemMods(bool apply);
2535 void ApplyAllAzeriteEmpoweredItemMods(bool apply);
2536 void _ApplyItemBonuses(Item* item, uint8 slot, bool apply);
2537 void _ApplyWeaponDamage(uint8 slot, Item* item, bool apply);
2538 bool EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot) const;
2539 void ToggleMetaGemsActive(uint8 exceptslot, bool apply);
2540 void CorrectMetaGemEnchants(uint8 slot, bool apply);
2541 void InitDataForForm(bool reapplyMods = false);
2542
2543 void ApplyItemEquipSpell(Item* item, bool apply, bool formChange = false);
2544 void ApplyEquipSpell(SpellInfo const* spellInfo, Item* item, bool apply, bool formChange = false);
2545 void UpdateEquipSpellsAtFormChange();
2546 void ApplyArtifactPowers(Item* item, bool apply);
2547 void ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const* artifactPowerRank, bool apply);
2548 void ApplyAzeritePowers(Item* item, bool apply);
2549 void ApplyAzeriteItemMilestonePower(AzeriteItem* item, AzeriteItemMilestonePowerEntry const* azeriteItemMilestonePower, bool apply);
2550 void ApplyAzeriteEssence(AzeriteItem* item, uint32 azeriteEssenceId, uint32 rank, bool major, bool apply);
2551 void ApplyAzeriteEssencePower(AzeriteItem* item, AzeriteEssencePowerEntry const* azeriteEssencePower, bool major, bool apply);
2552 void ApplyAzeritePower(AzeriteEmpoweredItem* item, AzeritePowerEntry const* azeritePower, bool apply);
2553
2554 void CastItemCombatSpell(DamageInfo const& damageInfo);
2555 void CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemTemplate const* proto);
2556 void CastItemUseSpell(Item* item, SpellCastTargets const& targets, ObjectGuid castCount, std::array<int32, 3> const& misc);
2557 void ApplyItemLootedSpell(Item* item, bool apply);
2558 void ApplyItemLootedSpell(ItemTemplate const* itemTemplate);
2559
2560 void SendEquipmentSetList();
2561 void SetEquipmentSet(EquipmentSetInfo::EquipmentSetData const& newEqSet);
2562 void DeleteEquipmentSet(uint64 id);
2563
2564 void SendInitWorldStates(uint32 zoneId, uint32 areaId) const;
2565 void SendUpdateWorldState(uint32 variable, uint32 value, bool hidden = false) const;
2566 void SendDirectMessage(WorldPacket const* data) const;
2567
2568 void SendAurasForTarget(Unit* target) const;
2569
2570 std::unique_ptr<PlayerMenu> PlayerTalkClass;
2571 std::vector<ItemSetEffect*> ItemSetEff;
2572
2573 void SendLoot(Loot& loot, bool aeLooting = false);
2574 void SendLootError(ObjectGuid const& lootObj, ObjectGuid const& owner, LootError error) const;
2575 void SendLootRelease(ObjectGuid guid) const;
2576 void SendLootReleaseAll() const;
2577 void SendNotifyLootItemRemoved(ObjectGuid lootObj, ObjectGuid owner, uint8 lootListId) const;
2578 void SendNotifyLootMoneyRemoved(ObjectGuid lootObj) const;
2579
2580 /*********************************************************/
2581 /*** BATTLEGROUND SYSTEM ***/
2582 /*********************************************************/
2583
2584 bool InBattleground() const { return m_bgData.bgInstanceID != 0; }
2585 bool InArena() const;
2586 uint32 GetBattlegroundId() const { return m_bgData.bgInstanceID; }
2587 BattlegroundTypeId GetBattlegroundTypeId() const { return m_bgData.bgTypeID; }
2588 Battleground* GetBattleground() const;
2589
2590 uint32 GetBattlegroundQueueJoinTime(BattlegroundQueueTypeId bgQueueTypeId) const;
2591 bool InBattlegroundQueue(bool ignoreArena = false) const;
2592 bool IsDeserter() const { return HasAura(26013); }
2593
2594 BattlegroundQueueTypeId GetBattlegroundQueueTypeId(uint32 index) const;
2595 uint32 GetBattlegroundQueueIndex(BattlegroundQueueTypeId bgQueueTypeId) const;
2596 bool IsInvitedForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const;
2597 bool InBattlegroundQueueForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const;
2598
2599 void SetBattlegroundId(uint32 val, BattlegroundTypeId bgTypeId, BattlegroundQueueTypeId queueId);
2600 uint32 AddBattlegroundQueueId(BattlegroundQueueTypeId val);
2601 bool HasFreeBattlegroundQueueId() const;
2602 void RemoveBattlegroundQueueId(BattlegroundQueueTypeId val);
2603 void SetInviteForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, uint32 instanceId);
2604 bool IsInvitedForBattlegroundInstance(uint32 instanceId) const;
2605 void SetMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId, bool mercenary);
2606 bool IsMercenaryForBattlegroundQueueType(BattlegroundQueueTypeId bgQueueTypeId) const;
2607 WorldLocation const& GetBattlegroundEntryPoint() const { return m_bgData.joinPos; }
2608 void SetBattlegroundEntryPoint();
2609
2610 void SetBGTeam(Team team);
2611 Team GetBGTeam() const;
2612
2613 void LeaveBattleground(bool teleportToEntryPoint = true);
2614 bool CanJoinToBattleground(BattlegroundTemplate const* bg) const;
2615 bool CanReportAfkDueToLimit();
2616 void ReportedAfkBy(Player* reporter);
2617 void ClearAfkReports() { m_bgData.bgAfkReporter.clear(); }
2618
2619 bool GetBGAccessByLevel(BattlegroundTypeId bgTypeId) const;
2620 bool CanUseBattlegroundObject(GameObject* gameobject) const;
2621 bool isTotalImmune() const;
2622 bool CanCaptureTowerPoint() const;
2623
2624 bool GetRandomWinner() const { return m_IsBGRandomWinner; }
2625 void SetRandomWinner(bool isWinner);
2626
2627 /*********************************************************/
2628 /*** OUTDOOR PVP SYSTEM ***/
2629 /*********************************************************/
2630
2631 OutdoorPvP* GetOutdoorPvP() const;
2632 // returns true if the player is in active state for outdoor pvp objective capturing, false otherwise
2633 bool IsOutdoorPvPActive() const;
2634
2635 /*********************************************************/
2636 /*** ENVIROMENTAL SYSTEM ***/
2637 /*********************************************************/
2638
2639 bool IsImmuneToEnvironmentalDamage() const;
2640 uint32 EnvironmentalDamage(EnviromentalDamage type, uint32 damage);
2641
2642 /*********************************************************/
2643 /*** FLOOD FILTER SYSTEM ***/
2644 /*********************************************************/
2645
2647 {
2649 {
2650 REGULAR = 0,
2651 ADDON = 1,
2652 MAX
2654
2655 time_t Time = 0;
2657 };
2658
2659 void UpdateSpeakTime(ChatFloodThrottle::Index index);
2660
2661 /*********************************************************/
2662 /*** VARIOUS SYSTEMS ***/
2663 /*********************************************************/
2664 void UpdateFallInformationIfNeed(MovementInfo const& minfo, uint32 opcode);
2665 // only changed for direct client control (possess, vehicle etc.), not stuff you control using pet commands
2667 void SetFallInformation(uint32 time, float z);
2668 void HandleFall(MovementInfo const& movementInfo);
2669
2670 void SetClientControl(Unit* target, bool allowMove);
2671
2672 void SetSeer(WorldObject* target) { m_seer = target; }
2673 void SetViewpoint(WorldObject* target, bool apply);
2674 WorldObject* GetViewpoint() const;
2675 void StopCastingCharm();
2676 void StopCastingBindSight() const;
2677
2678 uint32 GetSaveTimer() const { return m_nextSave; }
2679 void SetSaveTimer(uint32 timer) { m_nextSave = timer; }
2680
2682 {
2683 m_recall_location.Location.WorldRelocate(*this);
2684 m_recall_location.InstanceId = GetInstanceId();
2685 }
2686 void Recall() { TeleportTo(m_recall_location, TELE_TO_NONE); }
2687
2688 void SetHomebind(WorldLocation const& loc, uint32 areaId);
2689 void SendBindPointUpdate() const;
2690 void SendPlayerBound(ObjectGuid const& binderGuid, uint32 areaId) const;
2691
2692 // Homebind coordinates
2695
2696 uint8 GetStartLevel(uint8 race, uint8 playerClass, Optional<int32> characterTemplateId) const;
2697
2698 // currently visible objects at player client
2701
2702 bool HaveAtClient(BaseEntity const* u) const;
2703
2704 bool IsNeverVisibleFor(WorldObject const* seer, bool allowServersideObjects = false) const override;
2705
2706 bool IsVisibleGloballyFor(Player const* player) const;
2707
2708 void SendInitialVisiblePackets(WorldObject* target) const;
2709 void OnPhaseChange() override;
2710 void UpdateObjectVisibility(bool forced = true) override;
2711 void UpdateVisibilityForPlayer();
2712 void UpdateVisibilityOf(WorldObject* target);
2713 void UpdateVisibilityOf(Trinity::IteratorPair<WorldObject**> targets);
2714 void UpdateTriggerVisibility();
2715
2716 template<class T>
2717 void UpdateVisibilityOf(T* target, UpdateData& data, std::set<WorldObject*>& visibleNow);
2718
2719 std::array<uint8, MAX_MOVE_TYPE> m_forced_speed_changes;
2721
2722 bool HasAtLoginFlag(AtLoginFlags f) const { return (m_atLoginFlags & f) != 0; }
2723 void SetAtLoginFlag(AtLoginFlags f) { m_atLoginFlags |= f; }
2724 void RemoveAtLoginFlag(AtLoginFlags flags, bool persist = false);
2725
2726 bool isUsingLfg() const;
2727 bool inRandomLfgDungeon() const;
2728
2729 typedef std::set<uint32> DFQuestsDoneList;
2731
2732 // Temporarily removed pet cache
2733 uint32 GetTemporaryUnsummonedPetNumber() const { return m_temporaryUnsummonedPetNumber; }
2734 void SetTemporaryUnsummonedPetNumber(uint32 petnumber) { m_temporaryUnsummonedPetNumber = petnumber; }
2735 Optional<ReactStates> GetTemporaryPetReactState() const { return m_temporaryPetReactState; }
2736 void DisablePetControlsOnMount(ReactStates reactState, CommandStates commandState);
2737 void EnablePetControlsOnDismount();
2738 void UnsummonPetTemporaryIfAny();
2739 void ResummonPetTemporaryUnSummonedIfAny();
2740 void UnsummonBattlePetTemporaryIfAny(bool onFlyingMount = false);
2741 void ResummonBattlePetTemporaryUnSummonedIfAny();
2742 bool IsPetNeedBeTemporaryUnsummoned() const;
2743
2744 void SendCinematicStart(uint32 CinematicSequenceId) const;
2745 void SendMovieStart(uint32 movieId);
2746
2747 uint32 DoRandomRoll(uint32 minimum, uint32 maximum);
2748 uint8 GetItemLimitCategoryQuantity(ItemLimitCategoryEntry const* limitEntry) const;
2749
2750 void UpdateItemLevelAreaBasedScaling();
2751 void ActivatePvpItemLevels(bool activate) { _usePvpItemLevels = activate; }
2752 bool IsUsingPvpItemLevels() const { return _usePvpItemLevels; }
2753
2754 /*********************************************************/
2755 /*** INSTANCE SYSTEM ***/
2756 /*********************************************************/
2757
2758 void UpdateHomebindTime(uint32 time);
2759
2762 // permanent binds and solo binds by difficulty
2764 {
2765 auto itr = m_recentInstances.find(mapId);
2766 return itr != m_recentInstances.end() ? itr->second : 0;
2767 }
2768
2769 void SetRecentInstance(uint32 mapId, uint32 instanceId)
2770 {
2771 m_recentInstances[mapId] = instanceId;
2772 }
2773
2774 std::unordered_map<uint32 /*mapId*/, uint32 /*instanceId*/> m_recentInstances;
2775 void ConfirmPendingBind();
2776 void SetPendingBind(uint32 instanceId, uint32 bindTimer);
2777 bool HasPendingBind() const { return _pendingBindId > 0; }
2778 void SendRaidInfo();
2779 bool Satisfy(AccessRequirement const* ar, uint32 target_map, TransferAbortParams* params = nullptr, bool report = false);
2780 bool CheckInstanceValidity(bool /*isLogin*/);
2781 bool CheckInstanceCount(uint32 instanceId) const;
2782 void AddInstanceEnterTime(uint32 instanceId, time_t enterTime);
2783 WorldSafeLocsEntry const* GetInstanceEntrance(uint32 targetMapId);
2784
2785 // last used pet number (for BG's)
2786 uint32 GetLastPetNumber() const { return m_lastpetnumber; }
2787 void SetLastPetNumber(uint32 petnumber) { m_lastpetnumber = petnumber; }
2788
2789 /*********************************************************/
2790 /*** GROUP SYSTEM ***/
2791 /*********************************************************/
2792
2793 bool IsInGroup(ObjectGuid groupGuid) const;
2794 Group* GetGroupInvite() const { return m_groupInvite; }
2795 void SetGroupInvite(Group* group) { m_groupInvite = group; }
2796 Group* GetGroup(Optional<uint8> partyIndex) { return const_cast<Group*>(const_cast<Player const*>(this)->GetGroup(partyIndex)); }
2797 Group const* GetGroup(Optional<uint8> partyIndex) const;
2798 Group* GetGroup() { return m_group.getTarget(); }
2799 Group const* GetGroup() const { return const_cast<Group const*>(m_group.getTarget()); }
2800 GroupReference& GetGroupRef() { return m_group; }
2801 void SetGroup(Group* group, int8 subgroup = -1);
2802 uint8 GetSubGroup() const { return m_group.getSubGroup(); }
2803 uint32 GetGroupUpdateFlag() const { return m_groupUpdateMask; }
2804 void SetGroupUpdateFlag(uint32 flag) { m_groupUpdateMask |= flag; }
2805 void RemoveGroupUpdateFlag(uint32 flag) { m_groupUpdateMask &= ~flag; }
2806 void SetPartyType(GroupCategory category, uint8 type);
2807 void ResetGroupUpdateSequenceIfNeeded(Group const* group);
2808 int32 NextGroupUpdateSequenceNumber(GroupCategory category);
2809 Player* GetNextRandomRaidMember(float radius);
2810 PartyResult CanUninviteFromGroup(ObjectGuid guidMember, Optional<uint8> partyIndex) const;
2811
2812 // Battleground / Battlefield Group System
2813 void SetBattlegroundOrBattlefieldRaid(Group* group, int8 subgroup = -1);
2814 void RemoveFromBattlegroundOrBattlefieldRaid();
2815 Group* GetOriginalGroup() const { return m_originalGroup.getTarget(); }
2816 GroupReference& GetOriginalGroupRef() { return m_originalGroup; }
2817 uint8 GetOriginalSubGroup() const { return m_originalGroup.getSubGroup(); }
2818 void SetOriginalGroup(Group* group, int8 subgroup = -1);
2819
2820 void SetPassOnGroupLoot(bool bPassOnGroupLoot) { m_bPassOnGroupLoot = bPassOnGroupLoot; }
2821 bool GetPassOnGroupLoot() const { return m_bPassOnGroupLoot; }
2822
2823 MapReference &GetMapRef() { return m_mapRef; }
2824
2825 // Set map to player and add reference
2826 void SetMap(Map* map) override;
2827 void ResetMap() override;
2828
2829 bool isAllowedToLoot(Creature const* creature) const;
2830
2831 UF::DeclinedNames const* GetDeclinedNames() const { return m_playerData->DeclinedNames.has_value() ? &*m_playerData->DeclinedNames : nullptr; }
2832 uint8 GetRunesState() const;
2833 uint32 GetRuneCooldown(uint8 index) const { return m_runes->Cooldown[index]; }
2834 uint32 GetRuneBaseCooldown() const;
2835 void SetRuneCooldown(uint8 index, uint32 cooldown);
2836 void ResyncRunes() const;
2837 void InitRunes();
2838
2839 void SendRespondInspectAchievements(Player* player) const;
2840 uint32 GetAchievementPoints() const;
2841 std::vector<uint32> GetCompletedAchievementIds() const;
2842 bool HasAchieved(uint32 achievementId) const;
2843 void ResetAchievements();
2844 void FailCriteria(CriteriaFailEvent condition, int32 failAsset);
2845 void UpdateCriteria(CriteriaType type, uint64 miscValue1 = 0, uint64 miscValue2 = 0, uint64 miscValue3 = 0, WorldObject* ref = nullptr);
2846 void StartCriteria(CriteriaStartEvent startEvent, uint32 entry, Milliseconds timeLost = Milliseconds::zero());
2847 void CompletedAchievement(AchievementEntry const* entry);
2848 bool ModifierTreeSatisfied(uint32 modifierTreeId) const;
2849
2850 bool HasTitle(uint32 bitIndex) const;
2851 bool HasTitle(CharTitlesEntry const* title) const;
2852 void SetTitle(CharTitlesEntry const* title, bool lost = false);
2853 void SetChosenTitle(int32 title) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerTitle), title); }
2854 void SetKnownTitles(uint32 index, uint64 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, index), mask); }
2855
2856 //bool isActiveObject() const { return true; }
2857 bool CanSeeGossipOn(Creature const* creature) const;
2858 bool CanSeeSpellClickOn(Creature const* creature) const;
2859
2860 uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
2861 void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
2863
2864 float GetAverageItemLevel() const;
2866
2867 void ClearWhisperWhiteList() { WhisperList.clear(); }
2868 void AddWhisperWhiteList(ObjectGuid guid) { WhisperList.push_back(guid); }
2869 bool IsInWhisperWhiteList(ObjectGuid guid);
2870 void RemoveFromWhisperWhiteList(ObjectGuid guid) { WhisperList.remove(guid); }
2871
2872 void SendMovementSetCollisionHeight(float height, WorldPackets::Movement::UpdateCollisionHeightReason reason);
2873
2874 bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
2875 bool CanEnterWater() const override { return true; }
2876
2877 // Reagent Bank
2878 bool IsReagentBankUnlocked() const { return HasPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED); }
2880
2881 void CreateGarrison(uint32 garrSiteId);
2882 void DeleteGarrison();
2883 Garrison* GetGarrison() const { return _garrison.get(); }
2884
2885 bool IsAdvancedCombatLoggingEnabled() const { return _advancedCombatLoggingEnabled; }
2886 void SetAdvancedCombatLogging(bool enabled) { _advancedCombatLoggingEnabled = enabled; }
2887
2888 SceneMgr& GetSceneMgr() { return m_sceneMgr; }
2889 SceneMgr const& GetSceneMgr() const { return m_sceneMgr; }
2890 RestMgr& GetRestMgr() const { return *_restMgr; }
2892 {
2893 SetUpdateFieldValue(m_values
2894 .ModifyValue(&Player::m_activePlayerData)
2895 .ModifyValue(&UF::ActivePlayerData::RestInfo, type)
2896 .ModifyValue(&UF::RestInfo::StateID), state);
2897 }
2898 void SetRestThreshold(RestTypes type, uint32 threshold)
2899 {
2900 SetUpdateFieldValue(m_values
2901 .ModifyValue(&Player::m_activePlayerData)
2902 .ModifyValue(&UF::ActivePlayerData::RestInfo, type)
2903 .ModifyValue(&UF::RestInfo::Threshold), threshold);
2904 }
2905
2906 void SendPlayerChoice(ObjectGuid sender, int32 choiceId);
2907
2908 bool MeetPlayerCondition(uint32 conditionId) const;
2909
2910 bool HasPlayerFlag(PlayerFlags flags) const { return (*m_playerData->PlayerFlags & flags) != 0; }
2911 void SetPlayerFlag(PlayerFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); }
2912 void RemovePlayerFlag(PlayerFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); }
2913 void ReplaceAllPlayerFlags(PlayerFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); }
2914
2915 bool HasPlayerFlagEx(PlayerFlagsEx flags) const { return (*m_playerData->PlayerFlagsEx & flags) != 0; }
2916 void SetPlayerFlagEx(PlayerFlagsEx flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); }
2917 void RemovePlayerFlagEx(PlayerFlagsEx flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); }
2918 void ReplaceAllPlayerFlagsEx(PlayerFlagsEx flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); }
2919
2920 void SetAverageItemLevel(float newItemLevel, AvgItemLevelCategory category) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::AvgItemLevel, uint32(category)), newItemLevel); }
2921
2922 uint32 GetCustomizationChoice(uint32 chrCustomizationOptionId) const
2923 {
2924 int32 choiceIndex = m_playerData->Customizations.FindIndexIf([chrCustomizationOptionId](UF::ChrCustomizationChoice choice)
2925 {
2926 return choice.ChrCustomizationOptionID == chrCustomizationOptionId;
2927 });
2928
2929 if (choiceIndex >= 0)
2930 return m_playerData->Customizations[choiceIndex].ChrCustomizationChoiceID;
2931
2932 return 0;
2933 }
2934
2935 template<typename Iter>
2936 void SetCustomizations(Trinity::IteratorPair<Iter> customizations, bool markChanged = true)
2937 {
2938 if (markChanged)
2939 m_customizationsChanged = true;
2940
2941 ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Customizations));
2942 for (auto&& customization : customizations)
2943 {
2944 UF::ChrCustomizationChoice& newChoice = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Customizations));
2945 newChoice.ChrCustomizationOptionID = customization.ChrCustomizationOptionID;
2946 newChoice.ChrCustomizationChoiceID = customization.ChrCustomizationChoiceID;
2947 }
2948 }
2949 void SetPvpTitle(uint8 pvpTitle) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PvpTitle), pvpTitle); }
2950 void SetArenaFaction(uint8 arenaFaction) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::ArenaFaction), arenaFaction); }
2951 void ApplyModFakeInebriation(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FakeInebriation), mod, apply); }
2952 void SetVirtualPlayerRealm(uint32 virtualRealmAddress) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VirtualPlayerRealm), virtualRealmAddress); }
2953 void SetCurrentBattlePetBreedQuality(uint8 battlePetBreedQuality) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CurrentBattlePetBreedQuality), battlePetBreedQuality); }
2954
2956 {
2957 AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms)) = itemId;
2958 AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags)) = flags;
2959 }
2960 void SetHeirloom(uint32 slot, int32 itemId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms, slot), itemId); }
2961 void SetHeirloomFlags(uint32 slot, uint32 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags, slot), flags); }
2962
2963 void AddToy(int32 itemId, uint32 flags)
2964 {
2965 AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Toys)) = itemId;
2966 AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ToyFlags)) = flags;
2967 }
2968
2969 void AddTransmogBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog)) = blockValue; }
2970 void AddTransmogFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog, slot), flag); }
2971
2972 void AddConditionalTransmog(uint32 itemModifiedAppearanceId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog)) = itemModifiedAppearanceId; }
2973 void RemoveConditionalTransmog(uint32 itemModifiedAppearanceId)
2974 {
2975 int32 index = m_activePlayerData->ConditionalTransmog.FindIndex(itemModifiedAppearanceId);
2976 if (index >= 0)
2977 RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog), uint32(index));
2978 }
2979
2980 void AddIllusionBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransmogIllusions)) = blockValue; }
2981 void AddIllusionFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransmogIllusions, slot), flag); }
2982
2983 void AddWarbandScenesBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WarbandScenes)) = blockValue; }
2984 void AddWarbandScenesFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WarbandScenes, slot), flag); }
2985
2986 void AddSelfResSpell(int32 spellId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)) = spellId; }
2988 {
2989 int32 index = m_activePlayerData->SelfResSpells.FindIndex(spellId);
2990 if (index >= 0)
2991 RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells), uint32(index));
2992 }
2993 void ClearSelfResSpell() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)); }
2994
2995 ObjectGuid GetSummonedBattlePetGUID() const { return m_activePlayerData->SummonedBattlePetGUID; }
2996 void SetSummonedBattlePetGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SummonedBattlePetGUID), guid); }
2997
2998 void SetTrackCreatureFlag(uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); }
2999 void RemoveTrackCreatureFlag(uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); }
3000
3001 void SetVersatilityBonus(float value) { SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::VersatilityBonus), value); }
3002
3003 void ApplyModOverrideSpellPowerByAPPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellPowerByAPPercent), mod, apply); }
3004
3005 void ApplyModOverrideAPBySpellPowerPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideAPBySpellPowerPercent), mod, apply); }
3006
3007 bool HasPlayerLocalFlag(PlayerLocalFlags flags) const { return (*m_activePlayerData->LocalFlags & flags) != 0; }
3008 void SetPlayerLocalFlag(PlayerLocalFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); }
3009 void RemovePlayerLocalFlag(PlayerLocalFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); }
3011
3012 uint8 GetNumRespecs() const { return m_activePlayerData->NumRespecs; }
3013 void SetNumRespecs(uint8 numRespecs) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumRespecs), numRespecs); }
3014
3015 void SetWatchedFactionIndex(int32 index) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WatchedFactionIndex), index); }
3016
3017 void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
3018 void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); }
3019
3020 void SetTransportServerTime(int32 transportServerTime) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TransportServerTime), transportServerTime); }
3021
3022 void SetRequiredMountCapabilityFlag(uint8 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RequiredMountCapabilityFlags), flag); }
3024
3025 std::variant<int64, float> GetDataElementAccount(uint32 dataElementId) const;
3026 void SetDataElementAccount(uint32 dataElementId, std::variant<int64, float> value);
3027
3028 std::variant<int64, float> GetDataElementCharacter(uint32 dataElementId) const;
3029 void SetDataElementCharacter(uint32 dataElementId, std::variant<int64, float> value);
3030
3031 bool HasDataFlagAccount(uint32 dataFlagId) const;
3032 void SetDataFlagAccount(uint32 dataFlagId, bool on);
3033
3034 bool HasDataFlagCharacter(uint32 dataFlagId) const;
3035 void SetDataFlagCharacter(uint32 dataFlagId, bool on);
3036
3037 bool IsInFriendlyArea() const;
3038 bool IsFriendlyArea(AreaTableEntry const* inArea) const;
3039
3040 void SetWarModeDesired(bool enabled);
3041 bool IsWarModeDesired() const { return HasPlayerFlag(PLAYER_FLAGS_WAR_MODE_DESIRED); }
3042 bool IsWarModeActive() const { return HasPlayerFlag(PLAYER_FLAGS_WAR_MODE_ACTIVE); }
3043 bool IsWarModeLocalActive() const { return HasPlayerLocalFlag(PLAYER_LOCAL_FLAG_WAR_MODE); }
3044 void SetWarModeLocal(bool enabled);
3045 bool CanEnableWarModeInArea() const;
3046 void UpdateWarModeAuras();
3047
3048 void AddUnlockedTransmogOutfits(std::span<int32 const> transmogOutfitIds);
3049 void AddUnlockedTransmogOutfit(int32 transmogOutfitIds) { AddUnlockedTransmogOutfits(std::span(&transmogOutfitIds, 1)); }
3050
3051 void CreateTransmogOutfit(uint32 id, WorldPackets::Transmogrification::TransmogOutfitDataInfo const& outfitData);
3052 void InitializeNewTransmogOutfit(UF::MutableFieldReference<UF::TransmogOutfitData, false> outfit,
3054 bool UpdateTransmogOutfit(uint32 id, WorldPackets::Transmogrification::TransmogOutfitDataInfo const& outfitData);
3055 void UpdateTransmogOutfitSituations(uint32 id, bool situationsEnabled, std::span<WorldPackets::Transmogrification::TransmogOutfitSituationInfo const> situations);
3056 void UpdateTransmogOutfitSlots(uint32 id, std::span<WorldPackets::Transmogrification::TransmogOutfitSlotData const> slots);
3057 void EquipTransmogOutfit(uint32 id, TransmogSituationTrigger trigger, Optional<bool> locked);
3058
3059 std::string GetDebugInfo() const override;
3060
3063
3064 void SetAreaSpiritHealer(Creature* creature);
3065 ObjectGuid const& GetSpiritHealerGUID() const { return _areaSpiritHealerGUID; }
3066 bool CanAcceptAreaSpiritHealFrom(Unit* spiritHealer) const { return spiritHealer->GetGUID() == _areaSpiritHealerGUID; }
3067 void SendAreaSpiritHealerTime(Unit* spiritHealer) const;
3068 void SendAreaSpiritHealerTime(ObjectGuid const& spiritHealerGUID, int32 timeLeft) const;
3069
3070 protected:
3071 // Gamemaster whisper whitelist
3075 std::array<float, MAX_POWERS_PER_CLASS> m_powerFraction;
3077
3078 /*********************************************************/
3079 /*** BATTLEGROUND SYSTEM ***/
3080 /*********************************************************/
3081
3082 /*
3083 this is an array of BG queues (BgTypeIDs) in which is player
3084 */
3092
3095
3097
3098 /*********************************************************/
3099 /*** QUEST SYSTEM ***/
3100 /*********************************************************/
3101
3102 void PushQuests();
3103
3104 //We allow only one timed quest active at the same time. Below can then be simple value instead of set.
3105 typedef std::set<uint32> QuestSet;
3106 typedef std::unordered_map<uint32, time_t> SeasonalQuestMapByQuest;
3107 typedef std::unordered_map<uint32, SeasonalQuestMapByQuest> SeasonalQuestMapByEvent;
3112
3116
3117 /*********************************************************/
3118 /*** LOAD SYSTEM ***/
3119 /*********************************************************/
3120
3121 void _LoadActions(PreparedQueryResult result);
3122 void _LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effectResult, uint32 timediff);
3123 void _LoadGlyphAuras();
3124 void _LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, PreparedQueryResult azeriteResult,
3125 PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult,
3126 PreparedQueryResult azeriteEmpoweredItemResult, uint32 timeDiff);
3127 void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult,
3128 PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult);
3129 static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData);
3130 void _LoadQuestStatus(PreparedQueryResult result);
3131 void _LoadQuestStatusObjectives(PreparedQueryResult result);
3132 void _LoadQuestStatusObjectiveSpawnTrackings(PreparedQueryResult result);
3133 void _LoadQuestStatusRewarded(PreparedQueryResult result);
3134 void _LoadDailyQuestStatus(PreparedQueryResult result);
3135 void _LoadWeeklyQuestStatus(PreparedQueryResult result);
3136 void _LoadMonthlyQuestStatus(PreparedQueryResult result);
3137 void _LoadSeasonalQuestStatus(PreparedQueryResult result);
3138 void _LoadRandomBGStatus(PreparedQueryResult result);
3139 void _LoadGroup(PreparedQueryResult result);
3140 void _LoadSkills(PreparedQueryResult result);
3141 void _LoadSpells(PreparedQueryResult result, PreparedQueryResult favoritesResult);
3142 void _LoadStoredAuraTeleportLocations(PreparedQueryResult result);
3143 bool _LoadHomeBind(PreparedQueryResult result);
3144 void _LoadDeclinedNames(PreparedQueryResult result);
3145 void _LoadArenaTeamInfo(PreparedQueryResult result);
3146 void _LoadEquipmentSets(PreparedQueryResult result);
3147 void _LoadTransmogCustomSets(PreparedQueryResult result);
3148 void _LoadTransmogOutfits(PreparedQueryResult setsResult, PreparedQueryResult situationsResult, PreparedQueryResult slotsResult,
3149 int32 equippedTransmogOutfitId, bool locked);
3150 void _LoadBGData(PreparedQueryResult result);
3151 void _LoadGlyphs(PreparedQueryResult result);
3152 void _LoadTalents(PreparedQueryResult result);
3153 void _LoadPvpTalents(PreparedQueryResult result);
3154 void _LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult entriesResult);
3155 void _LoadInstanceTimeRestrictions(PreparedQueryResult result);
3156 void _LoadPetStable(uint32 summonedPetNumber, PreparedQueryResult result);
3157 void _LoadCurrency(PreparedQueryResult result);
3158 void _LoadCUFProfiles(PreparedQueryResult result);
3159 void _LoadPlayerData(PreparedQueryResult elementsResult, PreparedQueryResult flagsResult);
3160 void _LoadCharacterBankTabSettings(PreparedQueryResult result);
3161
3162 /*********************************************************/
3163 /*** SAVE SYSTEM ***/
3164 /*********************************************************/
3165
3166 void _SaveCustomizations(CharacterDatabaseTransaction trans);
3167 void _SaveActions(CharacterDatabaseTransaction trans);
3168 void _SaveAuras(CharacterDatabaseTransaction trans);
3169 void _SaveInventory(CharacterDatabaseTransaction trans);
3170 void _SaveMail(CharacterDatabaseTransaction trans);
3171 void _SaveQuestStatus(CharacterDatabaseTransaction trans);
3172 void _SaveDailyQuestStatus(CharacterDatabaseTransaction trans);
3173 void _SaveWeeklyQuestStatus(CharacterDatabaseTransaction trans);
3174 void _SaveMonthlyQuestStatus(CharacterDatabaseTransaction trans);
3175 void _SaveSeasonalQuestStatus(CharacterDatabaseTransaction trans);
3176 void _SaveSkills(CharacterDatabaseTransaction trans);
3177 void _SaveSpells(CharacterDatabaseTransaction trans);
3178 void _SaveStoredAuraTeleportLocations(CharacterDatabaseTransaction trans);
3179 void _SaveEquipmentSets(CharacterDatabaseTransaction trans);
3180 void _SaveTransmogOutfits(CharacterDatabaseTransaction trans);
3181 void _SaveCharacterSelectOutfit(CharacterDatabaseTransaction trans) const;
3182 void _SaveBGData(CharacterDatabaseTransaction trans);
3183 void _SaveGlyphs(CharacterDatabaseTransaction trans) const;
3184 void _SaveTalents(CharacterDatabaseTransaction trans);
3185 void _SaveTraits(CharacterDatabaseTransaction trans);
3186 void _SaveStats(CharacterDatabaseTransaction trans) const;
3187 void _SaveInstanceTimeRestrictions(CharacterDatabaseTransaction trans);
3188 void _SaveCurrency(CharacterDatabaseTransaction trans);
3189 void _SaveCUFProfiles(CharacterDatabaseTransaction trans);
3190 void _SavePlayerData(CharacterDatabaseTransaction trans);
3191 void _SaveCharacterBankTabSettings(CharacterDatabaseTransaction trans) const;
3192
3193 /*********************************************************/
3194 /*** ENVIRONMENTAL SYSTEM ***/
3195 /*********************************************************/
3196 void HandleSobering();
3197 void SendMirrorTimer(MirrorTimerType Type, uint32 MaxValue, uint32 CurrentValue, int32 Regen);
3198 void StopMirrorTimer(MirrorTimerType Type);
3199 void HandleDrowning(uint32 time_diff);
3200 int32 getMaxTimer(MirrorTimerType timer) const;
3201
3202 /*********************************************************/
3203 /*** HONOR SYSTEM ***/
3204 /*********************************************************/
3206
3207 void outDebugValues() const;
3208
3212 std::array<ChatFloodThrottle, ChatFloodThrottle::MAX> m_chatFloodData;
3216
3218
3221
3223
3224 std::vector<Item*> m_itemUpdateQueue;
3226
3228
3232
3235
3237
3240
3243 std::unordered_map<uint32 /*overridenSpellId*/, std::unordered_set<uint32> /*newSpellId*/> m_overrideSpells;
3244 uint32 m_lastPotionId; // last used health/mana potion in combat, that block next potion use
3245 std::unordered_map<uint32, StoredAuraTeleportLocation> m_storedAuraTeleportLocations;
3247
3249
3250 std::unordered_map<int32, PlayerSpellState> m_traitConfigStates;
3251
3253
3254 std::array<float, BASEMOD_END> m_auraBaseFlatMod;
3255 std::array<float, BASEMOD_END> m_auraBasePctMod;
3256 std::array<int16, MAX_COMBAT_RATING> m_baseRatingValue;
3261
3263
3266 std::forward_list<int32> m_itemPassives;
3268
3269 std::unique_ptr<ResurrectionData> _resurrectionData;
3270
3272
3274
3278
3280
3282
3288
3292
3295
3298
3306
3307 // Social
3309
3310 // Groups
3316 std::array<GroupUpdateCounter, 2> m_groupUpdateSequences;
3317
3318 // last used pet number (for BG's)
3320
3321 // Player summoning
3324
3325 // Recall position
3327
3328 std::unique_ptr<Runes> m_runes;
3331
3332 bool CanNeverSee(WorldObject const* obj, bool ignorePhaseShift = false) const override;
3333 bool CanAlwaysSee(WorldObject const* obj) const override;
3334
3335 bool IsAlwaysDetectableFor(WorldObject const* seer) const override;
3336
3338
3339 std::array<std::unique_ptr<CUFProfile>, MAX_CUF_PROFILES> _CUFProfiles;
3340
3341 private:
3342 // internal common parts for CanStore/StoreItem functions
3343 InventoryResult CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool swap, Item* pSrcItem) const;
3344 InventoryResult CanStoreItem_InBag(uint8 bag, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool merge, bool non_specialized, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const;
3345 InventoryResult CanStoreItem_InInventorySlots(uint8 slot_begin, uint8 slot_end, ItemPosCountVec& dest, ItemTemplate const* pProto, uint32& count, bool merge, Item* pSrcItem, uint8 skip_bag, uint8 skip_slot) const;
3346 Item* _StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool update);
3347 Item* _LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint32 timeDiff, Field* fields);
3348
3349 std::unique_ptr<CinematicMgr> _cinematicMgr;
3350
3352 void SendRefundInfo(Item* item);
3353 void RefundItem(Item* item);
3354 void SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece, uint8 error) const;
3355
3356 void AdjustQuestObjectiveProgress(Quest const* quest);
3357
3358 bool IsCanDelayTeleport() const { return m_bCanDelayTeleport; }
3359 void SetCanDelayTeleport(bool setting) { m_bCanDelayTeleport = setting; }
3360 void ScheduleDelayedOperation(uint32 operation) { if (operation < DELAYED_END) m_DelayedOperations |= operation; }
3361
3362 bool IsInstanceLoginGameMasterException() const;
3363
3365
3368
3369 std::array<int32, MAX_TIMERS> m_MirrorTimer;
3372
3373 // Current teleport data
3379
3382
3383 std::unique_ptr<PetStable> m_petStable;
3384
3385 // Temporary removed pet cache
3390
3391 std::unique_ptr<PlayerAchievementMgr> m_achievementMgr;
3392 std::unique_ptr<ReputationMgr> m_reputationMgr;
3393 std::unique_ptr<QuestObjectiveCriteriaMgr> m_questObjectiveCriteriaMgr;
3394
3396
3400
3402
3403 std::unique_ptr<Garrison> _garrison;
3404
3406
3407 // variables to save health and mana before duel and restore them after duel
3410
3412
3414
3415 std::unordered_map<ObjectGuid /*LootObject*/, Loot*> m_AELootView;
3416 std::vector<LootRoll*> m_lootRolls; // loot rolls waiting for answer
3417
3418 void _InitHonorLevelOnLoadFromDB(uint32 honor, uint32 honorLevel);
3419 std::unique_ptr<RestMgr> _restMgr;
3420
3423
3424 // Spell cast request handling
3425 public:
3426 // Queues up a spell cast request that has been received via packet and processes it whenever possible.
3427 void RequestSpellCast(std::unique_ptr<SpellCastRequest> castRequest);
3428 void CancelPendingCastRequest();
3429 bool CanRequestSpellCast(SpellInfo const* spell, Unit const* castingUnit) const;
3430
3431 private:
3432 std::unique_ptr<SpellCastRequest> _pendingSpellCastRequest;
3433 void ExecutePendingSpellCastRequest();
3434 bool ProcessItemCast(SpellCastRequest& castRequest, SpellCastTargets const& targets);
3435 bool CanExecutePendingSpellCastRequest();
3436
3439};
3440
3441TC_GAME_API void AddItemsSetItem(Player* player, Item const* item);
3442TC_GAME_API void RemoveItemsSetItem(Player* player, Item const* item);
3443TC_GAME_API void UpdateItemSetAuras(Player* player, bool formChange);
3445
3446// Transforms a container of customization choices with continuous storage into iterator pair that does not depend on container
3447// and doesn't force implementations in header files
3448template<typename Container>
3450{
3451 static_assert(std::is_same<typename Container::value_type, UF::ChrCustomizationChoice>::value,
3452 "MakeChrCustomizationChoiceRange must be used with containers of UF::ChrCustomizationChoice");
3453
3454 return { container.data(), container.data() + container.size() };
3455}
3456
3457#endif
uint32 GetBagSize(Bag const *bag)
Definition Bag.cpp:289
Item * GetItemInBag(Bag const *bag, uint8 slot)
Definition Bag.cpp:294
#define MAX_CUF_PROFILES
Maximum number of CompactUnitFrames profiles.
Definition CUFProfile.h:26
ItemContext
Definition DBCEnums.h:1315
TransmogSituationTrigger
Definition DBCEnums.h:2700
ChrSpecialization
Definition DBCEnums.h:398
Difficulty
Definition DBCEnums.h:932
CriteriaStartEvent
Definition DBCEnums.h:513
CriteriaFailEvent
Definition DBCEnums.h:492
CriteriaType
Definition DBCEnums.h:546
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int64_t int64
Definition Define.h:149
int16_t int16
Definition Define.h:151
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
#define UI64LIT(N)
Definition Define.h:139
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
std::unordered_set< uint32 > params[2]
uint16 flags
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
std::chrono::steady_clock::time_point TimePoint
time_point shorthand typedefs
Definition Duration.h:40
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
std::map< uint64, EquipmentSetInfo > EquipmentSetContainer
std::string GetDebugInfo()
Definition Errors.cpp:170
#define ASSERT
Definition Errors.h:80
GroupCategory
Definition Group.h:112
EnchantmentSlot
@ MAX_ENCHANTMENT_SLOT
InventoryResult
Definition ItemDefines.h:25
@ EQUIP_ERR_OK
Definition ItemDefines.h:26
BuyResult
SellResult
uint32 ItemRandomBonusListId
ItemClass
InventoryType
void RemoveItemFromUpdateQueueOf(Item *item, Player *player)
Definition Item.cpp:1310
void AddItemToUpdateQueueOf(Item *item, Player *player)
Definition Item.cpp:1289
LootItemType
LootType
Definition Loot.h:99
LootError
Definition Loot.h:138
InstanceResetMethod
Definition Map.h:864
InstanceResetResult
Definition Map.h:871
TransferAbortReason
Definition Map.h:90
MovementStopReason
std::list< ObjectGuid > GuidList
Definition ObjectGuid.h:433
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition ObjectGuid.h:435
@ TYPEID_ACTIVE_PLAYER
Definition ObjectGuid.h:45
@ TYPEID_PLAYER
Definition ObjectGuid.h:44
std::set< ObjectGuid > GuidSet
Definition ObjectGuid.h:432
PlayerCreateMode
Definition ObjectMgr.h:613
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
PetTameResult
Definition PetDefines.h:102
PetStableFlags
Definition PetDefines.h:62
PetSaveMode
Definition PetDefines.h:41
EquipmentSlots
Definition Player.h:727
@ EQUIPMENT_SLOT_SHOULDERS
Definition Player.h:731
@ EQUIPMENT_SLOT_BODY
Definition Player.h:732
@ EQUIPMENT_SLOT_HANDS
Definition Player.h:738
@ EQUIPMENT_SLOT_FINGER1
Definition Player.h:739
@ EQUIPMENT_SLOT_NECK
Definition Player.h:730
@ EQUIPMENT_SLOT_FINGER2
Definition Player.h:740
@ EQUIPMENT_SLOT_MAINHAND
Definition Player.h:744
@ EQUIPMENT_SLOT_TABARD
Definition Player.h:747
@ EQUIPMENT_SLOT_TRINKET1
Definition Player.h:741
@ EQUIPMENT_SLOT_END
Definition Player.h:748
@ EQUIPMENT_SLOT_HEAD
Definition Player.h:729
@ EQUIPMENT_SLOT_LEGS
Definition Player.h:735
@ EQUIPMENT_SLOT_BACK
Definition Player.h:743
@ EQUIPMENT_SLOT_OFFHAND
Definition Player.h:745
@ EQUIPMENT_SLOT_WAIST
Definition Player.h:734
@ EQUIPMENT_SLOT_FEET
Definition Player.h:736
@ EQUIPMENT_SLOT_CHEST
Definition Player.h:733
@ EQUIPMENT_SLOT_WRISTS
Definition Player.h:737
@ EQUIPMENT_SLOT_TRINKET2
Definition Player.h:742
@ EQUIPMENT_SLOT_START
Definition Player.h:728
@ EQUIPMENT_SLOT_RANGED
Definition Player.h:746
std::deque< Mail * > PlayerMails
Definition Player.h:150
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:841
TC_GAME_API void DeleteItemSetEffects(ItemSetEffect *itemSetEffect)
Definition Item.cpp:245
ArenaTeamInfoType
Definition Player.h:896
@ ARENA_TEAM_GAMES_WEEK
Definition Player.h:900
@ ARENA_TEAM_TYPE
Definition Player.h:898
@ ARENA_TEAM_ID
Definition Player.h:897
@ ARENA_TEAM_END
Definition Player.h:904
@ ARENA_TEAM_PERSONAL_RATING
Definition Player.h:903
@ ARENA_TEAM_MEMBER
Definition Player.h:899
@ ARENA_TEAM_WINS_SEASON
Definition Player.h:902
@ ARENA_TEAM_GAMES_SEASON
Definition Player.h:901
EnviromentalDamage
Type of environmental damages.
Definition Player.h:937
@ DAMAGE_SLIME
Definition Player.h:942
@ DAMAGE_FALL
Definition Player.h:940
@ DAMAGE_LAVA
Definition Player.h:941
@ DAMAGE_FALL_TO_VOID
Definition Player.h:944
@ DAMAGE_DROWNING
Definition Player.h:939
@ DAMAGE_FIRE
Definition Player.h:943
@ DAMAGE_EXHAUSTED
Definition Player.h:938
uint32 constexpr PLAYER_MAX_HONOR_LEVEL
Definition Player.h:1208
NewWorldReason
Definition Player.h:881
@ NEW_WORLD_NORMAL
Definition Player.h:882
@ NEW_WORLD_SEAMLESS
Definition Player.h:883
ReferAFriendError
Definition Player.h:1054
@ ERR_REFER_A_FRIEND_TARGET_TOO_HIGH
Definition Player.h:1057
@ ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S
Definition Player.h:1068
@ ERR_REFER_A_FRIEND_DIFFERENT_FACTION
Definition Player.h:1060
@ ERR_REFER_A_FRIEND_NONE
Definition Player.h:1055
@ ERR_REFER_A_FRIEND_NO_TARGET
Definition Player.h:1063
@ ERR_REFER_A_FRIEND_NOT_NOW
Definition Player.h:1061
@ ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL
Definition Player.h:1067
@ ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS
Definition Player.h:1058
@ ERR_REFER_A_FRIEND_NOT_REFERRED_BY
Definition Player.h:1056
@ ERR_REFER_A_FRIEND_TOO_FAR
Definition Player.h:1059
@ ERR_REFER_A_FRIEND_SUMMON_LEVEL_MAX_I
Definition Player.h:1065
@ ERR_REFER_A_FRIEND_NOT_IN_GROUP
Definition Player.h:1064
@ ERR_REFER_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED
Definition Player.h:1070
@ ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I
Definition Player.h:1062
@ ERR_REFER_A_FRIEND_SUMMON_COOLDOWN
Definition Player.h:1066
@ ERR_REFER_A_FRIEND_NO_XREALM
Definition Player.h:1069
InventorySlots
Definition Player.h:772
@ INVENTORY_SLOT_BAG_START
Definition Player.h:773
@ INVENTORY_SLOT_BAG_END
Definition Player.h:774
TeleportToOptions
Definition Player.h:921
@ TELE_TO_SEAMLESS
Definition Player.h:930
@ TELE_TO_TRANSPORT_TELEPORT
Definition Player.h:928
@ TELE_TO_SPELL
Definition Player.h:927
@ TELE_TO_NOT_LEAVE_COMBAT
Definition Player.h:925
@ TELE_TO_NOT_UNSUMMON_PET
Definition Player.h:926
@ TELE_TO_GM_MODE
Definition Player.h:923
@ TELE_REVIVE_AT_TELEPORT
Definition Player.h:929
@ TELE_TO_NONE
Definition Player.h:922
@ TELE_TO_NOT_LEAVE_TRANSPORT
Definition Player.h:924
std::array< uint32, MAX_PVP_TALENT_SLOTS > PlayerPvpTalentMap
Definition Player.h:351
PlayerCurrencyState
Definition Player.h:332
@ PLAYERCURRENCY_CHANGED
Definition Player.h:334
@ PLAYERCURRENCY_UNCHANGED
Definition Player.h:333
@ PLAYERCURRENCY_NEW
Definition Player.h:335
@ PLAYERCURRENCY_REMOVED
Definition Player.h:336
DuelState
Definition Player.h:449
@ DUEL_STATE_CHALLENGED
Definition Player.h:450
@ DUEL_STATE_COUNTDOWN
Definition Player.h:451
@ DUEL_STATE_COMPLETED
Definition Player.h:453
@ DUEL_STATE_IN_PROGRESS
Definition Player.h:452
PlayerFieldByte2Flags
Definition Player.h:598
@ PLAYER_FIELD_BYTE2_STEALTH
Definition Player.h:600
@ PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW
Definition Player.h:601
@ PLAYER_FIELD_BYTE2_NONE
Definition Player.h:599
#define MAX_RUNES
Definition Player.h:477
QuestSlotStateMask
Definition Player.h:683
@ QUEST_STATE_COMPLETE
Definition Player.h:685
@ QUEST_STATE_FAIL
Definition Player.h:686
@ QUEST_STATE_NONE
Definition Player.h:684
PlayerExtraFlags
Definition Player.h:615
@ PLAYER_EXTRA_GM_ON
Definition Player.h:617
@ PLAYER_EXTRA_LEVEL_BOOSTED
Definition Player.h:629
@ PLAYER_EXTRA_ACCEPT_WHISPERS
Definition Player.h:618
@ PLAYER_EXTRA_GM_INVISIBLE
Definition Player.h:620
@ PLAYER_EXTRA_TAXICHEAT
Definition Player.h:619
@ PLAYER_EXTRA_GRANTED_LEVELS_FROM_RAF
Definition Player.h:628
@ PLAYER_EXTRA_PVP_DEATH
Definition Player.h:624
@ PLAYER_EXTRA_HAS_RACE_CHANGED
Definition Player.h:627
@ PLAYER_EXTRA_FLAG_FREE_TRANSMOG_CLAIMED
Definition Player.h:631
@ PLAYER_EXTRA_GM_CHAT
Definition Player.h:621
HonorGainSource
Definition Player.h:381
std::unordered_map< uint32, PlayerSpell > PlayerSpellMap
Definition Player.h:352
float constexpr MAX_AREA_SPIRIT_HEALER_RANGE
Definition Player.h:1211
PlayerFlags
Definition Player.h:519
@ PLAYER_FLAGS_WAR_MODE_ACTIVE
Definition Player.h:530
@ PLAYER_FLAGS_DND
Definition Player.h:522
@ PLAYER_FLAGS_AUTO_DECLINE_GUILD
Definition Player.h:547
@ PLAYER_FLAGS_HIDE_ACCOUNT_ACHIEVEMENTS
Definition Player.h:543
@ PLAYER_FLAGS_VOID_UNLOCKED
Definition Player.h:549
@ PLAYER_FLAGS_IN_PVP
Definition Player.h:529
@ PLAYER_FLAGS_PLAYED_LONG_TIME
Definition Player.h:532
@ PLAYER_FLAGS_CONTESTED_PVP
Definition Player.h:528
@ PLAYER_FLAGS_NO_XP_GAIN
Definition Player.h:545
@ PLAYER_FLAGS_UNK26
Definition Player.h:546
@ PLAYER_FLAGS_GUILD_LEVEL_ENABLED
Definition Player.h:548
@ PLAYER_FLAGS_GROUP_LEADER
Definition Player.h:520
@ PLAYER_FLAGS_RESTING
Definition Player.h:525
@ PLAYER_FLAGS_IS_OUT_OF_BOUNDS
Definition Player.h:534
@ PLAYER_FLAGS_VOICE_CHAT
Definition Player.h:526
@ PLAYER_FLAGS_WAR_MODE_DESIRED
Definition Player.h:531
@ PLAYER_FLAGS_GHOST
Definition Player.h:524
@ PLAYER_FLAGS_AFK
Definition Player.h:521
@ PLAYER_FLAGS_UNK20
Definition Player.h:540
@ PLAYER_FLAGS_GM
Definition Player.h:523
@ PLAYER_FLAGS_TAXI_BENCHMARK
Definition Player.h:537
@ PLAYER_FLAGS_LOW_LEVEL_RAID_ENABLED
Definition Player.h:536
@ PLAYER_FLAGS_COMMENTATOR2
Definition Player.h:542
@ PLAYER_FLAGS_TIMEWALKING
Definition Player.h:550
@ PLAYER_FLAGS_UNK21
Definition Player.h:541
@ PLAYER_FLAGS_UNK7
Definition Player.h:527
@ PLAYER_FLAGS_DEVELOPER
Definition Player.h:535
@ PLAYER_FLAGS_COMMENTATOR_CAMERA
Definition Player.h:551
@ PLAYER_FLAGS_PET_BATTLES_UNLOCKED
Definition Player.h:544
@ PLAYER_FLAGS_PVP_TIMER
Definition Player.h:538
@ PLAYER_FLAGS_UBER
Definition Player.h:539
@ PLAYER_FLAGS_PLAYED_TOO_LONG
Definition Player.h:533
uint8 constexpr PLAYER_LEVEL_MIN_HONOR
Definition Player.h:1209
ActionButtonUpdateState
Definition Player.h:359
@ ACTIONBUTTON_NEW
Definition Player.h:362
@ ACTIONBUTTON_UNCHANGED
Definition Player.h:360
@ ACTIONBUTTON_DELETED
Definition Player.h:363
@ ACTIONBUTTON_CHANGED
Definition Player.h:361
std::unordered_map< uint32, time_t > InstanceTimeMap
Definition Player.h:356
std::map< uint32, QuestSaveType > QuestStatusSaveMap
Definition Player.h:669
SpellModType
Definition Player.h:176
@ SPELLMOD_LABEL_PCT
Definition Player.h:180
@ SPELLMOD_FLAT
Definition Player.h:177
@ SPELLMOD_PCT
Definition Player.h:178
@ SPELLMOD_LABEL_FLAT
Definition Player.h:179
@ SPELLMOD_END
Definition Player.h:181
RuneCooldowns
Definition Player.h:481
@ RUNE_BASE_COOLDOWN
Definition Player.h:482
DisplayToastType
Definition Player.h:1090
AvgItemLevelCategory
Definition Player.h:1121
InventoryPackSlots
Definition Player.h:784
@ INVENTORY_SLOT_ITEM_START
Definition Player.h:785
@ INVENTORY_SLOT_ITEM_END
Definition Player.h:786
PlayerCommandStates
Definition Player.h:1074
@ CHEAT_COOLDOWN
Definition Player.h:1078
@ CHEAT_POWER
Definition Player.h:1079
@ CHEAT_GOD
Definition Player.h:1076
@ CHEAT_NONE
Definition Player.h:1075
@ CHEAT_WATERWALK
Definition Player.h:1080
@ CHEAT_CASTTIME
Definition Player.h:1077
PlayerDelayedOperations
Definition Player.h:1031
@ DELAYED_BG_GROUP_RESTORE
Flag to restore group state after teleport from BG.
Definition Player.h:1037
@ DELAYED_END
Definition Player.h:1038
@ DELAYED_SAVE_PLAYER
Definition Player.h:1032
@ DELAYED_BG_MOUNT_RESTORE
Flag to restore mount state after teleport from BG.
Definition Player.h:1035
@ DELAYED_BG_TAXI_RESTORE
Flag to restore taxi state after teleport from BG.
Definition Player.h:1036
@ DELAYED_SPELL_CAST_DESERTER
Definition Player.h:1034
@ DELAYED_RESURRECT_PLAYER
Definition Player.h:1033
BagSlotFlags
Definition Player.h:864
ItemSearchLocation
Definition Player.h:844
ActionButtonType
Definition Player.h:367
@ ACTION_BUTTON_MOUNT
Definition Player.h:375
@ ACTION_BUTTON_COMPANION
Definition Player.h:374
@ ACTION_BUTTON_DROPDOWN
Definition Player.h:371
@ ACTION_BUTTON_EQSET
Definition Player.h:370
@ ACTION_BUTTON_C
Definition Player.h:369
@ ACTION_BUTTON_MACRO
Definition Player.h:372
@ ACTION_BUTTON_ITEM
Definition Player.h:376
@ ACTION_BUTTON_CMACRO
Definition Player.h:373
@ ACTION_BUTTON_SPELL
Definition Player.h:368
@ ACTION_BUTTON_OUTFIT
Definition Player.h:377
PlayerSkillsConstants
Definition Player.h:153
@ PLAYER_MAX_SKILLS
Definition Player.h:154
std::unordered_map< uint32, PlayerSpellState > PlayerTalentMap
Definition Player.h:350
BuyBackSlots
Definition Player.h:796
@ BUYBACK_SLOT_END
Definition Player.h:799
@ BUYBACK_SLOT_START
Definition Player.h:798
std::map< uint8, ActionButton > ActionButtonList
Definition Player.h:435
PlayerQuestLogConstants
Definition Player.h:678
@ MAX_QUEST_COUNTS
Definition Player.h:679
EquipableSpellSlots
Definition Player.h:809
@ EQUIPABLE_SPELL_OFFENSIVE_SLOT3
Definition Player.h:812
@ EQUIPABLE_SPELL_DEFENSIVE_SLOT1
Definition Player.h:818
@ EQUIPABLE_SPELL_UTILITY_SLOT3
Definition Player.h:816
@ EQUIPABLE_SPELL_OFFENSIVE_SLOT1
Definition Player.h:810
@ EQUIPABLE_SPELL_WEAPON_SLOT3
Definition Player.h:824
@ EQUIPABLE_SPELL_WEAPON_SLOT4
Definition Player.h:825
@ EQUIPABLE_SPELL_WEAPON_SLOT1
Definition Player.h:822
@ EQUIPABLE_SPELL_DEFENSIVE_SLOT4
Definition Player.h:821
@ EQUIPABLE_SPELL_WEAPON_SLOT2
Definition Player.h:823
@ EQUIPABLE_SPELL_UTILITY_SLOT2
Definition Player.h:815
@ EQUIPABLE_SPELL_DEFENSIVE_SLOT3
Definition Player.h:820
@ EQUIPABLE_SPELL_UTILITY_SLOT1
Definition Player.h:814
@ EQUIPABLE_SPELL_OFFENSIVE_SLOT2
Definition Player.h:811
@ EQUIPABLE_SPELL_DEFENSIVE_SLOT2
Definition Player.h:819
@ EQUIPABLE_SPELL_OFFENSIVE_SLOT4
Definition Player.h:813
@ EQUIPABLE_SPELL_UTILITY_SLOT4
Definition Player.h:817
PlayerSpellState
Definition Player.h:205
@ PLAYERSPELL_REMOVED
Definition Player.h:209
@ PLAYERSPELL_UNCHANGED
Definition Player.h:206
@ PLAYERSPELL_CHANGED
Definition Player.h:207
@ PLAYERSPELL_NEW
Definition Player.h:208
@ PLAYERSPELL_TEMPORARY
Definition Player.h:210
SpecResetType
Definition Player.h:244
@ SPEC_RESET_GLYPHS
Definition Player.h:247
@ SPEC_RESET_TALENTS
Definition Player.h:245
@ SPEC_RESET_SPECIALIZATION
Definition Player.h:246
@ SPEC_RESET_PET_TALENTS
Definition Player.h:248
std::unordered_map< uint32, SkillStatusData > SkillStatusMap
Definition Player.h:706
#define ACTION_BUTTON_TYPE(X)
Definition Player.h:408
BankBagSlots
Definition Player.h:790
@ BANK_SLOT_BAG_END
Definition Player.h:792
@ BANK_SLOT_BAG_START
Definition Player.h:791
PlayerLocalFlags
Definition Player.h:572
@ PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED
Definition Player.h:581
@ PLAYER_LOCAL_FLAG_USING_PARTY_GARRISON
Definition Player.h:580
@ PLAYER_LOCAL_FLAG_TRACK_STEALTHED
Definition Player.h:574
@ PLAYER_LOCAL_FLAG_CHARACTER_BANK_CONVERSION_FAILED
Definition Player.h:589
@ PLAYER_LOCAL_FLAG_NO_PET_BAR
Definition Player.h:577
@ PLAYER_LOCAL_FLAG_WAR_MODE
Definition Player.h:583
@ PLAYER_LOCAL_FLAG_ACCOUNT_BANK_DISABLED
Definition Player.h:590
@ PLAYER_LOCAL_FLAG_ACCOUNT_SECURED
Definition Player.h:584
@ PLAYER_LOCAL_FLAG_RELEASE_TIMER
Definition Player.h:575
@ PLAYER_LOCAL_FLAG_HAS_ACCOUNT_BANK_LOCK
Definition Player.h:587
@ PLAYER_LOCAL_FLAG_NO_RELEASE_WINDOW
Definition Player.h:576
@ PLAYER_LOCAL_FLAG_CONTROLLING_PET
Definition Player.h:573
@ PLAYER_LOCAL_FLAG_MENTOR_RESTRICTED
Definition Player.h:586
@ PLAYER_LOCAL_FLAG_NEWLY_BOOSTED_CHARACTER
Definition Player.h:579
@ PLAYER_LOCAL_FLAG_CHARACTER_BANK_DISABLED
Definition Player.h:588
@ PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME
Definition Player.h:585
@ PLAYER_LOCAL_FLAG_CAN_VISIT_PARTY_GARRISON
Definition Player.h:582
@ PLAYER_LOCAL_FLAG_FREE_TRANSMOG_CLAIMED
Definition Player.h:591
@ PLAYER_LOCAL_FLAG_OVERRIDE_CAMERA_MIN_HEIGHT
Definition Player.h:578
AccountBankBagSlots
Definition Player.h:829
@ ACCOUNT_BANK_SLOT_BAG_END
Definition Player.h:831
@ ACCOUNT_BANK_SLOT_BAG_START
Definition Player.h:830
BuyBankSlotResult
Definition Player.h:197
@ ERR_BANKSLOT_NOTBANKER
Definition Player.h:200
@ ERR_BANKSLOT_FAILED_TOO_MANY
Definition Player.h:198
@ ERR_BANKSLOT_OK
Definition Player.h:201
@ ERR_BANKSLOT_INSUFFICIENT_FUNDS
Definition Player.h:199
TC_GAME_API void UpdateItemSetAuras(Player *player, bool formChange)
Definition Item.cpp:221
PlayedTimeIndex
Definition Player.h:948
@ PLAYED_TIME_TOTAL
Definition Player.h:949
@ PLAYED_TIME_LEVEL
Definition Player.h:950
TC_GAME_API void RemoveItemsSetItem(Player *player, Item const *item)
Definition Item.cpp:169
PlayerUnderwaterState
Definition Player.h:186
@ UNDERWATER_INDARKWATER
Definition Player.h:191
@ UNDERWATER_NONE
Definition Player.h:187
@ UNDERWATER_INSLIME
Definition Player.h:190
@ UNDERWATER_EXIST_TIMERS
Definition Player.h:193
@ UNDERWATER_INWATER
Definition Player.h:188
@ UNDERWATER_INLAVA
Definition Player.h:189
InstanceResetWarningType
Definition Player.h:887
@ RAID_INSTANCE_EXPIRED
Definition Player.h:889
@ RAID_INSTANCE_WARNING_TIME
Definition Player.h:891
@ RAID_INSTANCE_WELCOME_DAILY
Definition Player.h:890
@ RAID_INSTANCE_WELCOME
Definition Player.h:888
TC_GAME_API uint32 GetBagSize(Bag const *bag)
Definition Bag.cpp:289
PlayerDataFlagConstants
Definition Player.h:158
@ PLAYER_DATA_FLAG_VALUE_BITS
Definition Player.h:159
@ PLAYER_DATA_FLAG_CHARACTER_TAXI_NODES_INDEX
Definition Player.h:165
@ PLAYER_DATA_FLAG_ACCOUNT_DATA_INDEX
Definition Player.h:164
@ PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX
Definition Player.h:170
@ PLAYER_DATA_FLAG_CHARACTER_CONTENTPUSH_INDEX
Definition Player.h:169
@ PLAYER_DATA_FLAG_ACCOUNT_COMBINED_QUESTS_INDEX
Definition Player.h:167
@ PLAYER_EXPLORED_ZONES_BITS
Definition Player.h:160
@ PLAYER_DATA_FLAG_CHARACTER_DATA_INDEX
Definition Player.h:163
@ PLAYER_DATA_FLAG_ACCOUNT_COMBINED_QUEST_REWARDS_INDEX
Definition Player.h:168
@ PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX
Definition Player.h:162
@ PLAYER_DATA_FLAG_ACCOUNT_TAXI_NODES_INDEX
Definition Player.h:166
AtLoginFlags
Definition Player.h:636
@ AT_LOGIN_RESET_TALENTS
Definition Player.h:640
@ AT_LOGIN_RESET_SPELLS
Definition Player.h:639
@ AT_LOGIN_NONE
Definition Player.h:637
@ AT_LOGIN_RESET_PET_TALENTS
Definition Player.h:642
@ AT_LOGIN_FIRST
Definition Player.h:643
@ AT_LOGIN_RESURRECT
Definition Player.h:646
@ AT_LOGIN_CUSTOMIZE
Definition Player.h:641
@ AT_LOGIN_RENAME
Definition Player.h:638
@ AT_LOGIN_CHANGE_RACE
Definition Player.h:645
@ AT_LOGIN_CHANGE_FACTION
Definition Player.h:644
float constexpr TELEPORT_MIN_LOAD_SCREEN_DISTANCE
Definition Player.h:1222
CharDeleteMethod
Definition Player.h:1047
@ CHAR_DELETE_REMOVE
Definition Player.h:1048
@ CHAR_DELETE_UNLINK
Definition Player.h:1049
DisplayToastMethod
Definition Player.h:1098
#define ACTION_BUTTON_ACTION(X)
Definition Player.h:407
std::list< EnchantDuration > EnchantDurationList
Definition Player.h:505
std::unordered_multimap< std::pair< QuestObjectiveType, int32 >, QuestObjectiveStatusData > QuestObjectiveStatusMap
Definition Player.h:657
ProfessionSlots
Definition Player.h:752
@ PROFESSION_SLOT_MAX_COUNT
Definition Player.h:768
@ PROFESSION_SLOT_FISHING_TOOL
Definition Player.h:761
@ PROFESSION_SLOT_PROFESSION2_GEAR1
Definition Player.h:757
@ PROFESSION_SLOT_FISHING_GEAR2
Definition Player.h:763
@ PROFESSION_SLOT_PROFESSION1_GEAR1
Definition Player.h:754
@ PROFESSION_SLOT_PROFESSION2_TOOL
Definition Player.h:756
@ PROFESSION_SLOT_PROFESSION1_TOOL
Definition Player.h:753
@ PROFESSION_SLOT_PROFESSION2_GEAR2
Definition Player.h:758
@ PROFESSION_SLOT_START
Definition Player.h:766
@ PROFESSION_SLOT_FISHING_GEAR1
Definition Player.h:762
@ PROFESSION_SLOT_COOKING_GEAR1
Definition Player.h:760
@ PROFESSION_SLOT_COOKING_TOOL
Definition Player.h:759
@ PROFESSION_SLOT_END
Definition Player.h:765
@ PROFESSION_SLOT_PROFESSION1_GEAR2
Definition Player.h:755
ChildEquipmentSlots
Definition Player.h:803
@ CHILD_EQUIPMENT_SLOT_END
Definition Player.h:805
@ CHILD_EQUIPMENT_SLOT_START
Definition Player.h:804
PlayerFlagsEx
Definition Player.h:557
@ PLAYER_FLAGS_EX_IN_PVP_COMBAT
Definition Player.h:562
@ PLAYER_FLAGS_EX_AUTO_DECLINE_NEIGHBORHOOD
Definition Player.h:566
@ PLAYER_FLAGS_EX_ARTIFACT_FORGE_CHEAT
Definition Player.h:560
@ PLAYER_FLAGS_EX_MENTOR
Definition Player.h:563
@ PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED
Definition Player.h:558
@ PLAYER_FLAGS_EX_UNLOCKED_AOE_LOOT
Definition Player.h:565
@ PLAYER_FLAGS_EX_ITEM_LEVEL_SQUISH
Definition Player.h:561
@ PLAYER_FLAGS_EX_NEWCOMER
Definition Player.h:564
@ PLAYER_FLAGS_EX_MERCENARY_MODE
Definition Player.h:559
TeleportState
Definition Player.h:908
@ WaitingForSuspendTokenResponse
ItemSearchCallbackResult
Definition Player.h:858
TC_GAME_API Item * GetItemInBag(Bag const *bag, uint8 slot)
Definition Bag.cpp:294
MirrorTimerType
Definition Player.h:605
@ FIRE_TIMER
Definition Player.h:608
@ FATIGUE_TIMER
Definition Player.h:606
@ BREATH_TIMER
Definition Player.h:607
uint32 constexpr SPELL_PVP_RULES_ENABLED
Definition Player.h:1210
#define INVENTORY_SLOT_BAG_0
Definition Player.h:723
TC_GAME_API void AddItemsSetItem(Player *player, Item const *item)
Definition Item.cpp:76
SkillUpdateState
Definition Player.h:690
@ SKILL_DELETED
Definition Player.h:694
@ SKILL_CHANGED
Definition Player.h:692
@ SKILL_UNCHANGED
Definition Player.h:691
@ SKILL_NEW
Definition Player.h:693
QuestSaveType
Definition Player.h:662
@ QUEST_DELETE_SAVE_TYPE
Definition Player.h:664
@ QUEST_FORCE_DELETE_SAVE_TYPE
Definition Player.h:665
@ QUEST_DEFAULT_SAVE_TYPE
Definition Player.h:663
DrunkenState
Definition Player.h:509
@ DRUNKEN_TIPSY
Definition Player.h:511
@ DRUNKEN_DRUNK
Definition Player.h:512
@ DRUNKEN_SOBER
Definition Player.h:510
@ DRUNKEN_SMASHED
Definition Player.h:513
ZonePVPTypeOverride
Definition Player.h:1214
ReputationSource
Definition Player.h:397
@ REPUTATION_SOURCE_KILL
Definition Player.h:398
@ REPUTATION_SOURCE_SPELL
Definition Player.h:404
@ REPUTATION_SOURCE_QUEST
Definition Player.h:399
@ REPUTATION_SOURCE_MONTHLY_QUEST
Definition Player.h:402
@ REPUTATION_SOURCE_REPEATABLE_QUEST
Definition Player.h:403
@ REPUTATION_SOURCE_WEEKLY_QUEST
Definition Player.h:401
@ REPUTATION_SOURCE_DAILY_QUEST
Definition Player.h:400
Trinity::IteratorPair< UF::ChrCustomizationChoice const * > MakeChrCustomizationChoiceRange(Container const &container)
Definition Player.h:3449
PlayerQuestCompletedConstants
Definition Player.h:673
@ QUESTS_COMPLETED_BITS_PER_BLOCK
Definition Player.h:674
std::map< uint32, QuestStatusData > QuestStatusMap
Definition Player.h:649
std::set< uint32 > RewardedQuestSet
Definition Player.h:659
constexpr uint64 MAX_MONEY_AMOUNT
Definition Player.h:1044
ReagentBagSlots
Definition Player.h:778
@ REAGENT_BAG_SLOT_END
Definition Player.h:780
@ REAGENT_BAG_SLOT_START
Definition Player.h:779
std::unordered_map< uint32, PlayerCurrency > PlayerCurrenciesMap
Definition Player.h:354
PlayerSlots
Definition Player.h:713
@ PLAYER_SLOTS_COUNT
Definition Player.h:718
@ PLAYER_SLOT_START
Definition Player.h:715
@ PLAYER_SLOT_END
Definition Player.h:717
PlayerLoginQueryIndex
Definition Player.h:957
@ PLAYER_LOGIN_QUERY_LOAD_SPELL_COOLDOWNS
Definition Player.h:988
@ PLAYER_LOGIN_QUERY_LOAD_CUSTOMIZATIONS
Definition Player.h:959
@ PLAYER_LOGIN_QUERY_LOAD_CURRENCY
Definition Player.h:1013
@ PLAYER_LOGIN_QUERY_LOAD_GLYPHS
Definition Player.h:1001
@ PLAYER_LOGIN_QUERY_LOAD_DECLINED_NAMES
Definition Player.h:990
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS_REW
Definition Player.h:1009
@ MAX_PLAYER_LOGIN_QUERY
Definition Player.h:1027
@ PLAYER_LOGIN_QUERY_LOAD_DAILY_QUEST_STATUS
Definition Player.h:971
@ PLAYER_LOGIN_QUERY_LOAD_AURA_EFFECTS
Definition Player.h:962
@ PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES
Definition Player.h:1010
@ PLAYER_LOGIN_QUERY_LOAD_SEASONAL_QUEST_STATUS
Definition Player.h:1011
@ PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST
Definition Player.h:986
@ PLAYER_LOGIN_QUERY_LOAD_GARRISON_FOLLOWERS
Definition Player.h:1020
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS_OBJECTIVES_CRITERIA
Definition Player.h:968
@ PLAYER_LOGIN_QUERY_LOAD_TRAIT_CONFIGS
Definition Player.h:1023
@ PLAYER_LOGIN_QUERY_LOAD_SKILLS
Definition Player.h:1005
@ PLAYER_LOGIN_QUERY_LOAD_BG_DATA
Definition Player.h:1000
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS_OBJECTIVES_CRITERIA_PROGRESS
Definition Player.h:969
@ PLAYER_LOGIN_QUERY_LOAD_TRANSMOG_OUTFITS
Definition Player.h:999
@ PLAYER_LOGIN_QUERY_LOAD_GARRISON_FOLLOWER_ABILITIES
Definition Player.h:1021
@ PLAYER_LOGIN_QUERY_LOAD_TRANSMOG_OUTFIT_SLOT
Definition Player.h:998
@ PLAYER_LOGIN_QUERY_LOAD_ACCOUNT_DATA
Definition Player.h:1004
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS
Definition Player.h:980
@ PLAYER_LOGIN_QUERY_LOAD_PET_SLOTS
Definition Player.h:1016
@ PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS
Definition Player.h:974
@ PLAYER_LOGIN_QUERY_LOAD_INVENTORY
Definition Player.h:973
@ PLAYER_LOGIN_QUERY_LOAD_REPUTATION
Definition Player.h:972
@ PLAYER_LOGIN_QUERY_LOAD_AZERITE_MILESTONE_POWERS
Definition Player.h:976
@ PLAYER_LOGIN_QUERY_LOAD_GARRISON_BLUEPRINTS
Definition Player.h:1018
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE
Definition Player.h:982
@ PLAYER_LOGIN_QUERY_LOAD_BANK_TAB_SETTINGS
Definition Player.h:1026
@ PLAYER_LOGIN_QUERY_LOAD_FROM
Definition Player.h:958
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS
Definition Player.h:966
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS_OBJECTIVES
Definition Player.h:967
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_UNLOCKED_ESSENCE
Definition Player.h:984
@ PLAYER_LOGIN_QUERY_LOAD_GARRISON_BUILDINGS
Definition Player.h:1019
@ PLAYER_LOGIN_QUERY_LOAD_DATA_FLAGS
Definition Player.h:1025
@ PLAYER_LOGIN_QUERY_LOAD_WEEKLY_QUEST_STATUS
Definition Player.h:1006
@ PLAYER_LOGIN_QUERY_LOAD_SPELL_CHARGES
Definition Player.h:989
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_MILESTONE_POWER
Definition Player.h:983
@ PLAYER_LOGIN_QUERY_LOAD_AZERITE
Definition Player.h:975
@ PLAYER_LOGIN_QUERY_LOAD_MONTHLY_QUEST_STATUS
Definition Player.h:1012
@ PLAYER_LOGIN_QUERY_LOAD_GUILD
Definition Player.h:991
@ PLAYER_LOGIN_QUERY_LOAD_EQUIPMENT_SETS
Definition Player.h:995
@ PLAYER_LOGIN_QUERY_LOAD_MAILS
Definition Player.h:979
@ PLAYER_LOGIN_QUERY_LOAD_AURAS
Definition Player.h:961
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_AZERITE_EMPOWERED
Definition Player.h:985
@ PLAYER_LOGIN_QUERY_LOAD_TALENTS
Definition Player.h:1002
@ PLAYER_LOGIN_QUERY_LOAD_AZERITE_UNLOCKED_ESSENCES
Definition Player.h:977
@ PLAYER_LOGIN_QUERY_LOAD_GARRISON
Definition Player.h:1017
@ PLAYER_LOGIN_QUERY_LOAD_BANNED
Definition Player.h:1008
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT
Definition Player.h:981
@ PLAYER_LOGIN_QUERY_LOAD_ARENA_INFO
Definition Player.h:992
@ PLAYER_LOGIN_QUERY_LOAD_GROUP
Definition Player.h:960
@ PLAYER_LOGIN_QUERY_LOAD_CRITERIA_PROGRESS
Definition Player.h:994
@ PLAYER_LOGIN_QUERY_LOAD_HOME_BIND
Definition Player.h:987
@ PLAYER_LOGIN_QUERY_LOAD_CORPSE_LOCATION
Definition Player.h:1015
@ PLAYER_LOGIN_QUERY_LOAD_SPELLS
Definition Player.h:964
@ PLAYER_LOGIN_QUERY_LOAD_SPELL_FAVORITES
Definition Player.h:965
@ PLAYER_LOGIN_QUERY_LOAD_TRANSMOG_OUTFIT
Definition Player.h:996
@ PLAYER_LOGIN_QUERY_LOAD_DATA_ELEMENTS
Definition Player.h:1024
@ PLAYER_LOGIN_QUERY_LOAD_TRAIT_ENTRIES
Definition Player.h:1022
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS_OBJECTIVES_SPAWN_TRACKING
Definition Player.h:970
@ PLAYER_LOGIN_QUERY_LOAD_TRANSMOG_OUTFIT_SITUATION
Definition Player.h:997
@ PLAYER_LOGIN_QUERY_LOAD_AZERITE_EMPOWERED
Definition Player.h:978
@ PLAYER_LOGIN_QUERY_LOAD_PVP_TALENTS
Definition Player.h:1003
@ PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES
Definition Player.h:1014
@ PLAYER_LOGIN_QUERY_LOAD_RANDOM_BG
Definition Player.h:1007
@ PLAYER_LOGIN_QUERY_LOAD_AURA_STORED_LOCATIONS
Definition Player.h:963
@ PLAYER_LOGIN_QUERY_LOAD_ACHIEVEMENTS
Definition Player.h:993
PlayerLogXPReason
Definition Player.h:1084
@ LOG_XP_REASON_NO_KILL
Definition Player.h:1086
@ LOG_XP_REASON_KILL
Definition Player.h:1085
TalentLearnResult
Definition Player.h:1174
@ TALENT_FAILED_UNKNOWN
Definition Player.h:1176
@ TALENT_FAILED_AFFECTING_COMBAT
Definition Player.h:1180
@ TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE
Definition Player.h:1177
@ TALENT_FAILED_NO_PRIMARY_TREE_SELECTED
Definition Player.h:1178
@ TALENT_FAILED_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE
Definition Player.h:1182
@ TALENT_FAILED_REST_AREA
Definition Player.h:1183
@ TALENT_LEARN_OK
Definition Player.h:1175
@ TALENT_FAILED_UNSPENT_TALENT_POINTS
Definition Player.h:1184
@ TALENT_FAILED_CANT_REMOVE_TALENT
Definition Player.h:1181
@ TALENT_FAILED_IN_PVP_MATCH
Definition Player.h:1185
@ TALENT_FAILED_CANT_DO_THAT_RIGHT_NOW
Definition Player.h:1179
std::list< Item * > ItemDurationList
Definition Player.h:506
Trinity::Containers::FlatSet< SpellModifier *, SpellModifierCompare > SpellModContainer
Definition Player.h:353
#define MAPID_INVALID
Definition Position.h:189
QuestFailedReason
Definition QuestDef.h:59
QuestPushReason
Definition QuestDef.h:78
QuestObjectiveType
Definition QuestDef.h:357
QuestGiverStatus
Definition QuestDef.h:158
QuestStatus
Definition QuestDef.h:146
QuestFlags
Definition QuestDef.h:216
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
constexpr Trinity::RaceMask< uint64 > RACEMASK_ALL_PLAYABLE
Definition RaceMask.h:289
Races
Definition RaceMask.h:27
PlayerRestState
Definition RestMgr.h:46
RestTypes
Definition RestMgr.h:28
RaidGroupReason
Language
ResetFailedReason
GameobjectTypes
MailResponseType
Gender
@ GENDER_FEMALE
constexpr TeamId GetTeamIdForTeam(Team team)
SpellSchoolMask
CurrencyDbFlags
constexpr BattlegroundQueueTypeId BATTLEGROUND_QUEUE_NONE
#define MAX_SPECIALIZATIONS
constexpr TeamId GetOtherTeam(TeamId team)
static constexpr uint8 PLAYER_MAX_BATTLEGROUND_QUEUES
WeaponAttackType
@ BASE_ATTACK
MailResponseResult
@ TEAM_OTHER
Powers
@ POWER_MANA
ReputationRank
CurrencyDestroyReason
DuelCompleteType
TotemCategory
BattlegroundTypeId
@ BATTLEGROUND_TYPE_NONE
Stats
#define CLASSMASK_ALL_PLAYABLE
SpellSchools
CurrencyGainSource
ChatMsg
RemoveMethod
@ GROUP_REMOVEMETHOD_DEFAULT
PartyResult
SpawnTrackingState
Definition SpawnData.h:94
@ SPELL_AURA_ALLOW_TAME_PET_TYPE
SpellModOp
TriggerCastFlags
ReactStates
@ MOVEMENTFLAG_CAN_FLY
NPCFlags
Non Player Character flags.
NPCFlags2
CommandStates
BaseModType
Definition Unit.h:244
DeathState
Definition Unit.h:251
BaseModGroup
Definition Unit.h:235
CombatRating
Definition Unit.h:316
@ NULL_BAG
Definition Unit.h:63
@ NULL_SLOT
Definition Unit.h:64
Definition Bag.h:27
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
constexpr bool HasFlag(T flag) const
Definition EnumFlag.h:106
Class used to access individual fields of database query result.
Definition Field.h:94
Definition Group.h:205
Definition Guild.h:329
Definition Item.h:179
Definition Map.h:225
static ObjectGuid const Empty
Definition ObjectGuid.h:314
uint64 LowType
Definition ObjectGuid.h:321
Definition Pet.h:40
void InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level)
std::unique_ptr< QuestObjectiveCriteriaMgr > m_questObjectiveCriteriaMgr
Definition Player.h:3393
uint32 manaBeforeDuel
Definition Player.h:3409
bool m_bCanDelayTeleport
Definition Player.h:3381
void ApplyModOverrideSpellPowerByAPPercent(float mod, bool apply)
Definition Player.h:3003
bool IsValidPos(uint16 pos, bool explicit_pos) const
Definition Player.h:1497
ChrSpecialization GetPrimarySpecialization() const
Definition Player.h:2008
InstanceTimeMap _instanceResetTimes
Definition Player.h:3397
bool m_canParry
Definition Player.h:3301
void SetWatchedFactionIndex(int32 index)
Definition Player.h:3015
UF::UpdateField< UF::PlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_PLAYER > m_playerData
Definition Player.h:3061
ItemMap mMitems
Definition Player.h:1947
time_t m_summon_expire
Definition Player.h:3322
MapReference m_mapRef
Definition Player.h:3364
uint32 GetHonorLevel() const
Definition Player.h:2467
uint32 GetXP() const
Definition Player.h:1329
void ReplaceAllBagSlotFlags(uint32 bagIndex, EnumFlag< BagSlotFlags > flags)
Definition Player.h:1533
std::array< int32, MAX_TIMERS > m_MirrorTimer
Definition Player.h:3369
uint32 GetCustomizationChoice(uint32 chrCustomizationOptionId) const
Definition Player.h:2922
void ActivatePvpItemLevels(bool activate)
Definition Player.h:2751
void SetHasRaceChanged()
Definition Player.h:1321
uint32 GetArmorProficiency() const
Definition Player.h:1640
GroupReference m_originalGroup
Definition Player.h:3312
static bool IsEquipmentPos(uint16 pos)
Definition Player.h:1488
PlayerSpellMap m_spells
Definition Player.h:3242
uint8 GetNumRespecs() const
Definition Player.h:3012
uint32 m_teleportSpellId
Definition Player.h:3377
void SetTalentResetTime(time_t time_)
Definition Player.h:2007
uint32 m_temporaryUnsummonedPetNumber
Definition Player.h:3386
uint16 GetSkillLineIdByPos(uint32 pos) const
Definition Player.h:2382
QuestStatusMap m_QuestStatus
Definition Player.h:3229
uint32 m_ChampioningFaction
Definition Player.h:3395
std::vector< uint32 > & GetGlyphs(uint8 spec)
Definition Player.h:2045
void SetCharacterBankTabSettings(uint32 tabId, std::string const &name, std::string const &icon, std::string const &description, BagSlotFlags depositFlags)
Definition Player.h:1507
WorldLocation const & GetCorpseLocation() const
Definition Player.h:2338
void ScheduleDelayedOperation(uint32 operation)
Definition Player.h:3360
bool HasClaimedFreeTransmog() const
Definition Player.h:1326
bool m_InstanceValid
Definition Player.h:2761
void SaveHealthBeforeDuel()
Definition Player.h:2462
std::unique_ptr< RestMgr > _restMgr
Definition Player.h:3419
uint16 GetSkillRankByPos(uint32 pos) const
Definition Player.h:2386
time_t m_deathExpireTime
Definition Player.h:3297
void SetLastPotionId(uint32 item_id)
Definition Player.h:2084
bool IsGameMasterAcceptingWhispers() const
Definition Player.h:1310
void SetSkillMaxRank(uint32 pos, uint16 max)
Definition Player.h:2391
std::vector< Item * > m_itemUpdateQueue
Definition Player.h:3224
uint16 GetSkillPermBonusByPos(uint32 pos) const
Definition Player.h:2394
uint8 GetCUFProfilesCount() const
‍Retrieves a CUF profile at position 0-4
Definition Player.h:1848
TeamId GetEffectiveTeamId() const
Definition Player.h:2428
uint64 healthBeforeDuel
Definition Player.h:3408
uint32 GetSaveTimer() const
Definition Player.h:2678
void SetPlayerFlag(PlayerFlags flags)
Definition Player.h:2911
bool IsBackpackAutoSortDisabled() const
Definition Player.h:1524
bool isGMVisible() const
Definition Player.h:1317
void SetArenaFaction(uint8 arenaFaction)
Definition Player.h:2950
void SetPlayerFlagEx(PlayerFlagsEx flags)
Definition Player.h:2916
BattlegroundTypeId GetBattlegroundTypeId() const
Definition Player.h:2587
bool HasPlayerFlagEx(PlayerFlagsEx flags) const
Definition Player.h:2915
void ApplyModTargetResistance(int32 mod, bool apply)
Definition Player.h:2205
bool IsBeingTeleportedFar() const
Definition Player.h:2405
std::unordered_map< ObjectGuid, Loot * > m_AELootView
Definition Player.h:3415
PlayerSocial * GetSocial() const
Definition Player.h:1290
std::array< int16, MAX_COMBAT_RATING > m_baseRatingValue
Definition Player.h:3256
void SetPlayerLocalFlag(PlayerLocalFlags flags)
Definition Player.h:3008
void RemovePlayerFlag(PlayerFlags flags)
Definition Player.h:2912
uint32 m_lastFallTime
Definition Player.h:3366
ItemDurationList m_itemDuration
Definition Player.h:3265
std::unique_ptr< Garrison > _garrison
Definition Player.h:3403
uint32 m_lastPotionId
Definition Player.h:3244
ObjectGuid GetSummonedBattlePetGUID() const
Definition Player.h:2995
QuestStatusMap & getQuestStatusMap()
Definition Player.h:1912
uint8 GetGuildRank() const
Definition Player.h:2160
void SetSkillLineId(uint32 pos, uint16 skillLineId)
Definition Player.h:2383
void SetGroupUpdateFlag(uint32 flag)
Definition Player.h:2804
uint32 m_titanGripPenaltySpellId
Definition Player.h:3304
uint32 GetTemporaryUnsummonedPetNumber() const
Definition Player.h:2733
void SetSeer(WorldObject *target)
Definition Player.h:2672
bool CanParry() const
Definition Player.h:2489
bool ForEachItem(ItemSearchLocation location, T callback) const
Iterate over each item in the player storage.
Definition Player.h:1404
std::string autoReplyMsg
Definition Player.h:1286
uint32 GetTotalPlayedTime() const
Definition Player.h:1347
PetStable const * GetPetStable() const
Definition Player.h:1357
bool m_MonthlyQuestChanged
Definition Player.h:3285
bool _advancedCombatLoggingEnabled
Definition Player.h:3405
void SetModDamageDonePercent(uint8 school, float pct)
Definition Player.h:2218
RewardedQuestSet const & getRewardedQuests() const
Definition Player.h:1911
uint8 GetDrunkValue() const
Definition Player.h:2479
void RemoveBagSlotFlag(uint32 bagIndex, EnumFlag< BagSlotFlags > flags)
Definition Player.h:1532
void SetNativeGender(Gender gender) override
Definition Player.h:1351
Gender GetNativeGender() const override
Definition Player.h:1350
PlayerSocial * m_social
Definition Player.h:3308
SkillStatusMap mSkillStatus
Definition Player.h:3236
void SetCharacterBankTabCount(uint8 count)
Definition Player.h:1504
std::unordered_map< uint32, SeasonalQuestMapByQuest > SeasonalQuestMapByEvent
Definition Player.h:3107
WorldLocation _corpseLocation
Definition Player.h:3411
void SetRestThreshold(RestTypes type, uint32 threshold)
Definition Player.h:2898
void SetAcceptWhispers(bool on)
Definition Player.h:1308
std::array< ChatFloodThrottle, ChatFloodThrottle::MAX > m_chatFloodData
Definition Player.h:3212
UF::UpdateField< UF::ActivePlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_ACTIVE_PLAYER > m_activePlayerData
Definition Player.h:3062
void ClearAfkReports()
Definition Player.h:2617
bool HasRaceChanged() const
Definition Player.h:1320
ObjectGuid::LowType m_GuildIdInvited
Definition Player.h:3238
time_t m_lastHonorUpdateTime
Definition Player.h:3205
bool IsWarModeDesired() const
Definition Player.h:3041
std::unordered_map< ObjectGuid::LowType, Item * > ItemMap
Definition Player.h:1945
void SetSkillPermBonus(uint32 pos, uint16 bonus)
Definition Player.h:2395
static bool IsValidClass(uint8 Class)
Definition Player.h:1875
void SetInvSlot(uint32 slot, ObjectGuid guid)
Definition Player.h:1609
GroupReference & GetGroupRef()
Definition Player.h:2800
GroupReference & GetOriginalGroupRef()
Definition Player.h:2816
bool CanTameExoticPets() const
Definition Player.h:2496
uint32 _activeCheats
Definition Player.h:3401
bool CanFly() const override
Definition Player.h:2874
Difficulty m_legacyRaidDifficulty
Definition Player.h:3215
Group const * GetGroup() const
Definition Player.h:2799
uint32 GetArenaTeamIdInvited() const
Definition Player.h:2178
void SetTemporaryUnsummonedPetNumber(uint32 petnumber)
Definition Player.h:2734
bool IsBackpackSellJunkDisabled() const
Definition Player.h:1526
Trinity::Containers::FlatSet< uint32 > _playerDataElementsNeedSave
Definition Player.h:3437
void SetNoRegentCostMask(flag128 mask)
Definition Player.h:1537
GuidSet m_refundableItems
Definition Player.h:3351
bool CanBlock() const
Definition Player.h:2491
uint8 m_MirrorTimerFlags
Definition Player.h:3370
uint32 m_atLoginFlags
Definition Player.h:3217
uint32 m_ExtraFlags
Definition Player.h:3227
DFQuestsDoneList m_DFQuests
Definition Player.h:2730
bool UpdatePosition(Position const &pos, bool teleport=false) override
Definition Player.h:2319
void ApplyModDamageDonePos(SpellSchools school, int32 mod, bool apply)
Definition Player.h:2215
uint8 m_movementForceModMagnitudeChanges
Definition Player.h:2720
uint32 m_ingametime
Definition Player.h:3115
void SetBackpackSellJunkDisabled(bool disabled)
Definition Player.h:1527
uint32 GetDeathTimer() const
Definition Player.h:2482
bool m_WeeklyQuestChanged
Definition Player.h:3284
Group * m_groupInvite
Definition Player.h:3313
void RemoveGroupUpdateFlag(uint32 flag)
Definition Player.h:2805
uint8 GetCharacterBankTabCount() const
Definition Player.h:1503
std::unordered_map< uint32, uint32 > m_recentInstances
Definition Player.h:2774
uint8 GetBankBagSlotCount() const
Definition Player.h:1501
bool InBattleground() const
Definition Player.h:2584
uint32 m_sharedQuestId
Definition Player.h:3114
void SetDeveloper(bool on)
Definition Player.h:1306
uint8 unReadMails
Definition Player.h:1942
void RemovePlayerFlagEx(PlayerFlagsEx flags)
Definition Player.h:2917
std::set< uint32 > DFQuestsDoneList
Definition Player.h:2729
uint32 m_movie
Definition Player.h:3279
void SetGroupInvite(Group *group)
Definition Player.h:2795
uint32 m_DelayedOperations
Definition Player.h:3380
void SetPvpTitle(uint8 pvpTitle)
Definition Player.h:2949
QuestSet m_timedquests
Definition Player.h:3108
void AddTransmogFlag(uint32 slot, uint32 flag)
Definition Player.h:2970
void setWeaponChangeTimer(uint32 time)
Definition Player.h:1903
std::vector< uint32 > const & GetGlyphs(uint8 spec) const
Definition Player.h:2044
void SetSelection(ObjectGuid const &guid)
Used for serverside target changes, does not apply to players.
Definition Player.h:1921
PetStable * GetPetStable()
Definition Player.h:1355
void SetRaidDifficultyID(Difficulty raid_difficulty)
Definition Player.h:2187
Group * GetOriginalGroup() const
Definition Player.h:2815
QuestSet m_weeklyquests
Definition Player.h:3109
ObjectGuid const & GetLootGUID() const
Definition Player.h:2262
void SetLootGUID(ObjectGuid const &guid)
Definition Player.h:2263
SceneMgr & GetSceneMgr()
Definition Player.h:2888
void SetBackpackAutoSortDisabled(bool disabled)
Definition Player.h:1525
bool HasCorpse() const
Definition Player.h:2337
uint32 GetBaseSpellPowerBonus() const
Returns base spellpower bonus from spellpower stat on items, without spellpower from intellect stat.
Definition Player.h:2236
GuidUnorderedSet m_clientGUIDs
Definition Player.h:2699
void SetKnownTitles(uint32 index, uint64 mask)
Definition Player.h:2854
SeasonalQuestMapByEvent m_seasonalquests
Definition Player.h:3111
void RemovePlayerLocalFlag(PlayerLocalFlags flags)
Definition Player.h:3009
void setRegenTimerCount(uint32 time)
Definition Player.h:1902
TradeData * m_trade
Definition Player.h:3281
bool HasEnoughMoney(int64 amount) const
Definition Player.h:1908
void SetAdvancedCombatLogging(bool enabled)
Definition Player.h:2886
QuestObjectiveStatusMap m_questObjectiveStatus
Definition Player.h:3230
QuestSet m_monthlyquests
Definition Player.h:3110
std::unordered_map< uint32, std::unordered_set< uint32 > > m_overrideSpells
Definition Player.h:3243
bool HasPendingBind() const
Definition Player.h:2777
uint32 m_nextSave
Definition Player.h:3210
uint8 GetInventorySlotCount() const
Definition Player.h:1499
std::forward_list< int32 > m_itemPassives
Definition Player.h:3266
bool m_mailsUpdated
Definition Player.h:1894
void SetTalentResetCost(uint32 cost)
Definition Player.h:2005
void RecalculateRating(CombatRating cr)
Definition Player.h:2229
void SetPrimarySpecialization(uint32 spec)
Definition Player.h:2009
void SetPetSpellPower(uint32 spellPower)
Definition Player.h:2260
Trinity::Containers::FlatSet< uint32 > _playerDataFlagsNeedSave
Definition Player.h:3438
void SetCurrentCombatTraitConfigSubTreeID(int32 traitSubTreeId)
Definition Player.h:2061
void SetRecentInstance(uint32 mapId, uint32 instanceId)
Definition Player.h:2769
EnumFlag< BagSlotFlags > GetBagSlotFlags(uint32 bagIndex) const
Definition Player.h:1530
WorldLocation m_homebind
Definition Player.h:2693
std::array< uint32, MAX_PLAYED_TIME_INDEX > m_Played_time
Definition Player.h:1346
bool CanTitanGrip() const
Definition Player.h:2493
time_t GetTalentResetTime() const
Definition Player.h:2006
ObjectGuid m_playerSharingQuest
Definition Player.h:3113
bool IsWarModeActive() const
Definition Player.h:3042
WorldObject * m_seer
Definition Player.h:2666
ActionButtonList const & GetActionButtons() const
Definition Player.h:2046
std::set< uint32 > m_changedTransmogOutfits
Definition Player.h:3330
PlayerPvpTalentMap & GetPvpTalentMap(uint8 spec)
Definition Player.h:2043
std::unordered_map< uint32, StoredAuraTeleportLocation > m_storedAuraTeleportLocations
Definition Player.h:3245
PlayerCurrenciesMap _currencyStorage
Definition Player.h:3222
void SetNumRespecs(uint8 numRespecs)
Definition Player.h:3013
Optional< AttackSwingErr > m_swingErrorMsg
Definition Player.h:3305
int32 GetNewWorldCounter() const
Definition Player.h:2401
bool m_SeasonalQuestChanged
Definition Player.h:3286
void SetCurrentBattlePetBreedQuality(uint8 battlePetBreedQuality)
Definition Player.h:2953
std::array< float, BASEMOD_END > m_auraBaseFlatMod
Definition Player.h:3254
void ReplaceAllRequiredMountCapabilityFlags(uint8 flags)
Definition Player.h:3023
GuidList WhisperList
Definition Player.h:3072
uint32 m_areaUpdateId
Definition Player.h:3294
void SetAtLoginFlag(AtLoginFlags f)
Definition Player.h:2723
bool IsDeserter() const
Definition Player.h:2592
bool GetCommandStatus(uint32 command) const
Definition Player.h:1339
WorldSession * GetSession() const
Definition Player.h:2272
GroupReference m_group
Definition Player.h:3311
void SetBankTabSettings(UF::MutableFieldReferenceWithChangesMask< UF::BankTabSettings, false > setter, std::string const &name, std::string const &icon, std::string const &description, BagSlotFlags depositFlags)
Definition Player.h:1517
ZonePVPTypeOverride GetOverrideZonePVPType() const
Definition Player.h:2000
std::unique_ptr< ReputationMgr > m_reputationMgr
Definition Player.h:3392
PlayerMails const & GetMails() const
Definition Player.h:1934
std::unique_ptr< SpellCastRequest > _pendingSpellCastRequest
Definition Player.h:3432
void SetCommandStatusOn(uint32 command)
Definition Player.h:1340
UF::DeclinedNames const * GetDeclinedNames() const
Definition Player.h:2831
int32 GetSpellPenetrationItemMod() const
Definition Player.h:2237
uint32 GetSharedQuestID() const
Definition Player.h:1834
JoinedChannelsList m_channels
Definition Player.h:3273
InventoryResult CanTakeMoreSimilarItems(uint32 entry, uint32 count, uint32 *offendingItemId=nullptr) const
Definition Player.h:1546
RestMgr & GetRestMgr() const
Definition Player.h:2890
uint32 m_oldpetspell
Definition Player.h:3388
TeleportState GetTeleportState() const
Definition Player.h:2398
uint32 m_currentBuybackSlot
Definition Player.h:3220
std::unordered_map< int32, PlayerSpellState > m_traitConfigStates
Definition Player.h:3250
void RemoveFromGroup(RemoveMethod method=GROUP_REMOVEMETHOD_DEFAULT)
Definition Player.h:2155
void SaveRecallPosition()
Definition Player.h:2681
uint32 m_deathTimer
Definition Player.h:3296
uint32 m_regenTimerCount
Definition Player.h:3074
bool GetRandomWinner() const
Definition Player.h:2624
uint8 GetAccountBankTabCount() const
Definition Player.h:1505
uint32 GetInGameTime() const
Definition Player.h:1839
void SaveCUFProfile(uint8 id, std::unique_ptr< CUFProfile > profile)
‍Empties a CUF profile at position 0-4
Definition Player.h:1846
void SetPassOnGroupLoot(bool bPassOnGroupLoot)
Definition Player.h:2820
TeleportLocation m_teleport_dest
Definition Player.h:3374
void ClearWhisperWhiteList()
Definition Player.h:2867
uint32 GetRecentInstanceId(uint32 mapId) const
Definition Player.h:2763
std::array< float, MAX_POWERS_PER_CLASS > m_powerFraction
Definition Player.h:3075
ReputationMgr const & GetReputationMgr() const
Definition Player.h:2440
bool IsResurrectRequested() const
Definition Player.h:2104
Difficulty GetDungeonDifficultyID() const
Definition Player.h:2183
time_t m_nextMailDelivereTime
Definition Player.h:1943
TeamId GetTeamId() const
Definition Player.h:2424
bool _usePvpItemLevels
Definition Player.h:3421
PlayerSpellMap const & GetSpellMap() const
Definition Player.h:2070
CinematicMgr * GetCinematicMgr() const
Definition Player.h:1658
int16 GetSkillTempBonusByPos(uint32 pos) const
Definition Player.h:2392
static bool IsInventoryPos(uint16 pos)
Definition Player.h:1486
void SetGMChat(bool on)
Definition Player.h:1314
bool m_bPassOnGroupLoot
Definition Player.h:3315
ObjectGuid m_temporaryUnsummonedBattlePet
Definition Player.h:3389
int32 m_newWorldCounter
Definition Player.h:3378
void SetLegacyRaidDifficultyID(Difficulty raid_difficulty)
Definition Player.h:2188
PlayerTalentMap * GetTalentMap(uint8 spec)
Definition Player.h:2041
std::set< uint32 > QuestSet
Definition Player.h:3105
bool m_DailyQuestChanged
Definition Player.h:3283
void ClearResurrectRequestData()
Definition Player.h:2091
Difficulty m_dungeonDifficulty
Definition Player.h:3213
uint32 m_weaponChangeTimer
Definition Player.h:3291
void AddConditionalTransmog(uint32 itemModifiedAppearanceId)
Definition Player.h:2972
std::unordered_map< ObjectGuid, Loot * > const & GetAELootView() const
Definition Player.h:2265
void RemoveTrackCreatureFlag(uint32 flags)
Definition Player.h:2999
void ReplaceAllPlayerLocalFlags(PlayerLocalFlags flags)
Definition Player.h:3010
uint32 m_WeaponProficiency
Definition Player.h:3299
uint32 GetRuneCooldown(uint8 index) const
Definition Player.h:2833
float GetEmpowerMinHoldStagePercent() const
Definition Player.h:2087
void ApplyModOverrideAPBySpellPowerPercent(float mod, bool apply)
Definition Player.h:3005
void ApplyModTargetPhysicalResistance(int32 mod, bool apply)
Definition Player.h:2206
void SetActiveCombatTraitConfigID(int32 traitConfigId)
Definition Player.h:2060
time_t m_createTime
Definition Player.h:3275
void RestoreManaAfterDuel()
Definition Player.h:2465
void RemoveFromWhisperWhiteList(ObjectGuid guid)
Definition Player.h:2870
uint32 m_hostileReferenceCheckTimer
Definition Player.h:3289
PlayerAI * AI() const
Definition Player.h:1243
void ReplaceAllPlayerFlagsEx(PlayerFlagsEx flags)
Definition Player.h:2918
void InitTaxiNodesForLevel()
Definition Player.h:1294
std::array< float, BASEMOD_END > m_auraBasePctMod
Definition Player.h:3255
static bool IsChildEquipmentPos(uint16 pos)
Definition Player.h:1493
void RestoreHealthAfterDuel()
Definition Player.h:2464
void AddAuraVision(PlayerFieldByte2Flags flags)
Definition Player.h:3017
void SetEmpowerMinHoldStagePercent(float empowerMinHoldStagePercent)
Definition Player.h:2088
bool m_IsBGRandomWinner
Definition Player.h:3096
uint32 GetWeaponProficiency() const
Definition Player.h:1639
void SetHasLevelBoosted()
Definition Player.h:1325
ObjectGuid _areaSpiritHealerGUID
Definition Player.h:3422
uint32 m_drunkTimer
Definition Player.h:3290
bool CanAcceptAreaSpiritHealFrom(Unit *spiritHealer) const
Definition Player.h:3066
bool HasPlayerLocalFlag(PlayerLocalFlags flags) const
Definition Player.h:3007
std::unique_ptr< ResurrectionData > _resurrectionData
Definition Player.h:3269
uint8 m_fishingSteps
Definition Player.h:3337
RewardedQuestSet m_RewardedQuests
Definition Player.h:3233
void SetBankAutoSortDisabled(bool disabled)
Definition Player.h:1529
SceneMgr const & GetSceneMgr() const
Definition Player.h:2889
uint32 GetGuildLevel() const
Definition Player.h:2162
TeleportToOptions m_teleport_options
Definition Player.h:3376
uint32 m_contestedPvPTimer
Definition Player.h:3076
void SetActiveTalentGroup(uint8 group)
Definition Player.h:2011
uint32 GetTalentResetCost() const
Definition Player.h:2004
void Recall()
Definition Player.h:2686
void ClearSelfResSpell()
Definition Player.h:2993
void AddUnlockedTransmogOutfit(int32 transmogOutfitIds)
Definition Player.h:3049
bool IsUsingPvpItemLevels() const
Definition Player.h:2752
void ApplyModDamageDoneNeg(SpellSchools school, int32 mod, bool apply)
Definition Player.h:2216
EnchantDurationList m_enchantDuration
Definition Player.h:3264
void AddIllusionBlock(uint32 blockValue)
Definition Player.h:2980
void SetCommandStatusOff(uint32 command)
Definition Player.h:1341
TradeData * GetTradeData() const
Definition Player.h:1655
ObjectGuid::LowType GetGuildId() const
Definition Player.h:2164
bool IsReagentBankUnlocked() const
Definition Player.h:2878
Group * GetGroup()
Definition Player.h:2798
float m_empowerMinHoldStagePercent
Definition Player.h:3246
CUFProfile * GetCUFProfile(uint8 id) const
‍Replaces a CUF profile at position 0-4
Definition Player.h:1847
bool isGMChat() const
Definition Player.h:1313
void SetChampioningFaction(uint32 faction)
Definition Player.h:2861
void SetMovie(uint32 movie)
Definition Player.h:2114
bool IsBankAutoSortDisabled() const
Definition Player.h:1528
uint32 m_baseSpellPower
Definition Player.h:3257
TeleportLocation m_recall_location
Definition Player.h:3326
bool IsGameMaster() const
Definition Player.h:1309
void SetGuildRank(uint8 rankId)
Definition Player.h:2159
void AddSelfResSpell(int32 spellId)
Definition Player.h:2986
bool CanApplyResilience() const override
Definition Player.h:2239
void SetDuelArbiter(ObjectGuid guid)
Definition Player.h:2147
PvPInfo pvpInfo
Definition Player.h:2124
void SetPvPDeath(bool on)
Definition Player.h:1319
void SetOverrideZonePVPType(ZonePVPTypeOverride type)
Definition Player.h:2001
void SaveCUFProfile(uint8 id, std::nullptr_t)
Definition Player.h:1845
ObjectGuid::LowType GetGuildIdInvited() const
Definition Player.h:2167
Optional< ReactStates > GetTemporaryPetReactState() const
Definition Player.h:2735
TimePoint m_regenInterruptTimestamp
Definition Player.h:3073
void SetAccountBankTabCount(uint8 count)
Definition Player.h:1506
uint32 GetLastPetNumber() const
Definition Player.h:2786
uint8 getCinematic() const
Definition Player.h:2110
uint16 m_homebindAreaId
Definition Player.h:2694
void SetCanDelayTeleport(bool setting)
Definition Player.h:3359
void SetTarget(ObjectGuid const &) override
Definition Player.h:1920
uint32 GetXPForNextLevel() const
Definition Player.h:1330
std::unique_ptr< Runes > m_runes
Definition Player.h:3328
uint32 m_zoneUpdateId
Definition Player.h:3293
void RemoveConditionalTransmog(uint32 itemModifiedAppearanceId)
Definition Player.h:2973
uint32 GetRBGPersonalRating() const
Definition Player.h:2179
SpecializationInfo _specializationInfo
Definition Player.h:3248
PlayerTaxi m_taxi
Definition Player.h:1293
uint8 m_MirrorTimerFlagsLast
Definition Player.h:3371
std::array< uint8, MAX_MOVE_TYPE > m_forced_speed_changes
Definition Player.h:2719
std::vector< ItemSetEffect * > ItemSetEff
Definition Player.h:2571
uint32 GetLootSpecId() const
Definition Player.h:1998
bool IsMaxHonorLevel() const
Definition Player.h:2470
bool IsBeingTeleportedNear() const
Definition Player.h:2403
void SetTransportServerTime(int32 transportServerTime)
Definition Player.h:3020
time_t m_lastDailyQuestTime
Definition Player.h:3287
uint32 GetMailSize() const
Definition Player.h:1931
void SaveManaBeforeDuel()
Definition Player.h:2463
void SetQuestSharingInfo(ObjectGuid guid, uint32 id)
Definition Player.h:1836
void AddIllusionFlag(uint32 slot, uint32 flag)
Definition Player.h:2981
uint32 m_baseHealthRegen
Definition Player.h:3259
void ClearQuestSharingInfo()
Definition Player.h:1837
void AddWarbandScenesFlag(uint32 slot, uint32 flag)
Definition Player.h:2984
std::unordered_set< PetAura const * > m_petAuras
Definition Player.h:1370
void AddWarbandScenesBlock(uint32 blockValue)
Definition Player.h:2983
Difficulty m_raidDifficulty
Definition Player.h:3214
uint8 GetActiveTalentGroup() const
Definition Player.h:2010
void SetHeirloom(uint32 slot, int32 itemId)
Definition Player.h:2960
PlayerPvpTalentMap const & GetPvpTalentMap(uint8 spec) const
Definition Player.h:2042
void SetTrackCreatureFlag(uint32 flags)
Definition Player.h:2998
bool isDND() const
Definition Player.h:1284
void SetDungeonDifficultyID(Difficulty dungeon_difficulty)
Definition Player.h:2186
float m_lastFallZ
Definition Player.h:3367
EquipmentSetContainer _equipmentSets
Definition Player.h:3329
void ApplyModDamageDonePercent(SpellSchools school, float pct, bool apply)
Definition Player.h:2217
std::vector< Item * > & GetItemUpdateQueue()
Definition Player.h:1485
uint32 m_baseManaRegen
Definition Player.h:3258
time_t m_logintime
Definition Player.h:1344
SceneMgr m_sceneMgr
Definition Player.h:3413
GuidUnorderedSet m_visibleTransports
Definition Player.h:2700
Difficulty GetRaidDifficultyID() const
Definition Player.h:2184
TeleportState m_teleport_state
Definition Player.h:3375
std::unique_ptr< PlayerAchievementMgr > m_achievementMgr
Definition Player.h:3391
bool m_customizationsChanged
Definition Player.h:3211
void SetOverrideSpellsId(int32 overrideSpellsId)
Definition Player.h:1979
MapReference & GetMapRef()
Definition Player.h:2823
Garrison * GetGarrison() const
Definition Player.h:2883
void SetBuybackTimestamp(uint32 slot, time_t timestamp)
Definition Player.h:1631
PlayerTalentMap const * GetTalentMap(uint8 spec) const
Definition Player.h:2040
uint32 m_ArenaTeamIdInvited
Definition Player.h:3239
bool HasLevelBoosted() const
Definition Player.h:1324
std::unique_ptr< PetStable > m_petStable
Definition Player.h:3383
uint32 GetBattlegroundId() const
Definition Player.h:2586
uint64 GetMoney() const
Definition Player.h:1905
static bool IsValidGender(uint8 Gender)
Definition Player.h:1874
void AddArmorProficiency(uint32 newflag)
Definition Player.h:1638
std::list< Channel * > JoinedChannelsList
Definition Player.h:2364
uint32 GetGroupUpdateFlag() const
Definition Player.h:2803
PlayerSpellMap & GetSpellMap()
Definition Player.h:2071
bool IsDeveloper() const
Definition Player.h:1305
bool IsAdvancedCombatLoggingEnabled() const
Definition Player.h:2885
std::unordered_map< uint32, time_t > SeasonalQuestMapByQuest
Definition Player.h:3106
void SetSaveTimer(uint32 timer)
Definition Player.h:2679
void AddWhisperWhiteList(ObjectGuid guid)
Definition Player.h:2868
bool GetPassOnGroupLoot() const
Definition Player.h:2821
void ReplaceAllPlayerFlags(PlayerFlags flags)
Definition Player.h:2913
uint16 GetSkillMaxRankByPos(uint32 pos) const
Definition Player.h:2390
void SetChosenTitle(int32 title)
Definition Player.h:2853
void UnlockReagentBank()
Definition Player.h:2879
bool HasAtLoginFlag(AtLoginFlags f) const
Definition Player.h:2722
uint32 m_HomebindTimer
Definition Player.h:2760
void RemoveSelfResSpell(int32 spellId)
Definition Player.h:2987
static bool IsBankPos(uint16 pos)
Definition Player.h:1491
static bool IsValidRace(uint8 Race)
Definition Player.h:1876
bool m_canTitanGrip
Definition Player.h:3303
Group * GetGroup(Optional< uint8 > partyIndex)
Definition Player.h:2796
TeleportLocation m_summon_location
Definition Player.h:3323
ActionButtonList m_actionButtons
Definition Player.h:3252
bool HasPlayerFlag(PlayerFlags flags) const
Definition Player.h:2910
std::unique_ptr< DuelInfo > duel
Definition Player.h:2143
bool m_canBlock
Definition Player.h:3302
uint8 GetSubGroup() const
Definition Player.h:2802
bool IsResurrectRequestedBy(ObjectGuid const &guid) const
Definition Player.h:2096
bool isAFK() const
Definition Player.h:1283
void SetGuildLevel(uint32 level)
Definition Player.h:2161
uint8 m_cinematic
Definition Player.h:3277
TeleportLocation & GetTeleportDest()
Definition Player.h:2397
Team m_team
Definition Player.h:3209
void SetRestState(RestTypes type, PlayerRestState state)
Definition Player.h:2891
void AutoStoreLoot(uint32 loot_id, LootStore const &store, ItemContext context=ItemContext::NONE, bool broadcast=false, bool createdByPlayer=false)
Definition Player.h:1575
int32 m_spellPenetrationItemMod
Definition Player.h:3260
void AddToy(int32 itemId, uint32 flags)
Definition Player.h:2963
void SetFreePrimaryProfessions(uint16 profs)
Definition Player.h:2067
void SendInitialActionButtons() const
Definition Player.h:2119
bool isAcceptWhispers() const
Definition Player.h:1307
size_t GetRewardedQuestCount() const
Definition Player.h:1914
ObjectGuid GetPlayerSharingQuest() const
Definition Player.h:1835
std::array< std::unique_ptr< CUFProfile >, MAX_CUF_PROFILES > _CUFProfiles
Definition Player.h:3339
void SetTaxiCheater(bool on)
Definition Player.h:1316
uint32 GetChampioningFaction() const
Definition Player.h:2860
WorldSession * m_session
Definition Player.h:3271
void ApplyModFakeInebriation(int32 mod, bool apply)
Definition Player.h:2951
Team GetEffectiveTeam() const
Definition Player.h:2427
uint16 GetSkillStartingRankByPos(uint32 pos) const
Definition Player.h:2388
void SetArenaTeamIdInvited(uint32 ArenaTeamId)
Definition Player.h:2177
void SendMessageToSet(WorldPacket const *data, bool self) const override
Definition Player.h:2325
void SetVirtualPlayerRealm(uint32 virtualRealmAddress)
Definition Player.h:2952
uint32 GetLevelPlayedTime() const
Definition Player.h:1348
void SetSkillRank(uint32 pos, uint16 rank)
Definition Player.h:2387
void SetLootSpecId(uint32 id)
Definition Player.h:1997
uint32 m_ArmorProficiency
Definition Player.h:3300
std::array< GroupUpdateCounter, 2 > m_groupUpdateSequences
Definition Player.h:3316
bool IsCanDelayTeleport() const
Definition Player.h:3358
std::unique_ptr< CinematicMgr > _cinematicMgr
Definition Player.h:3349
bool HasBeenGrantedLevelsFromRaF() const
Definition Player.h:1322
ObjectGuid const & GetSpiritHealerGUID() const
Definition Player.h:3065
void SetTeleportState(TeleportState state)
Definition Player.h:2399
bool isDebugAreaTriggers
Definition Player.h:2865
bool CanEnterWater() const override
Definition Player.h:2875
void AddWeaponProficiency(uint32 newflag)
Definition Player.h:1637
void SetBuybackPrice(uint32 slot, uint32 price)
Definition Player.h:1630
void SetMultiActionBars(uint8 mask)
Definition Player.h:2122
uint32 GetFreePrimaryProfessionPoints() const
Definition Player.h:2066
void RemoveAuraVision(PlayerFieldByte2Flags flags)
Definition Player.h:3018
PlayerCreateMode GetCreateMode() const
Definition Player.h:2108
GuidUnorderedSet m_itemSoulboundTradeable
Definition Player.h:3267
void SetSkillStep(uint32 pos, uint16 step)
Definition Player.h:2385
Group * GetGroupInvite() const
Definition Player.h:2794
void SetRequiredMountCapabilityFlag(uint8 flag)
Definition Player.h:3022
void SetContestedPvPTimer(uint32 newTime)
Definition Player.h:2139
void SetAverageItemLevel(float newItemLevel, AvgItemLevelCategory category)
Definition Player.h:2920
PlayerMails m_mail
Definition Player.h:3241
void SetSkillStartingRank(uint32 pos, uint16 starting)
Definition Player.h:2389
void SetSkillTempBonus(uint32 pos, uint16 bonus)
Definition Player.h:2393
void SetInGameTime(uint32 time)
Definition Player.h:1840
void SetGuildIdInvited(ObjectGuid::LowType GuildId)
Definition Player.h:2163
uint32 m_groupUpdateMask
Definition Player.h:3314
BGData m_bgData
Definition Player.h:3094
uint32 GetArenaTeamId(uint8) const
Definition Player.h:2175
Difficulty GetLegacyRaidDifficultyID() const
Definition Player.h:2185
void SetDuelTeam(uint32 duelTeam)
Definition Player.h:2148
Spell * m_spellModTakingSpell
Definition Player.h:2862
SpellModContainer m_spellMods
Definition Player.h:3262
void SetBankBagSlotCount(uint8 count)
Definition Player.h:1502
uint16 GetSkillStepByPos(uint32 pos) const
Definition Player.h:2384
QuestStatusSaveMap m_QuestStatusSave
Definition Player.h:3231
uint32 GetMovie() const
Definition Player.h:2113
void setCinematic(uint8 cine)
Definition Player.h:2111
uint32 GetLastPotionId() const
Definition Player.h:2083
void AddHeirloom(int32 itemId, uint32 flags)
Definition Player.h:2955
uint32 m_lastpetnumber
Definition Player.h:3319
void SetLastPetNumber(uint32 petnumber)
Definition Player.h:2787
QuestStatusSaveMap m_RewardedQuestsSave
Definition Player.h:3234
std::unique_ptr< PlayerMenu > PlayerTalkClass
Definition Player.h:2570
bool isTaxiCheater() const
Definition Player.h:1315
uint32 _pendingBindTimer
Definition Player.h:3399
bool IsWarModeLocalActive() const
Definition Player.h:3043
void SetBeenGrantedLevelsFromRaF()
Definition Player.h:1323
JoinedChannelsList const & GetJoinedChannels() const
Definition Player.h:2365
WorldLocation const & GetBattlegroundEntryPoint() const
Definition Player.h:2607
time_t m_Last_tick
Definition Player.h:1345
ReputationMgr & GetReputationMgr()
Definition Player.h:2439
bool IsBeingTeleported() const
Definition Player.h:2402
uint8 GetOriginalSubGroup() const
Definition Player.h:2817
std::vector< LootRoll * > m_lootRolls
Definition Player.h:3416
void SetCustomizations(Trinity::IteratorPair< Iter > customizations, bool markChanged=true)
Definition Player.h:2936
static bool IsAccountBankPos(uint16 pos)
Definition Player.h:1495
void SetBagSlotFlag(uint32 bagIndex, EnumFlag< BagSlotFlags > flags)
Definition Player.h:1531
Team GetTeam() const
Definition Player.h:2423
Optional< ReactStates > m_temporaryPetReactState
Definition Player.h:3387
bool HasEnoughMoney(uint64 amount) const
Definition Player.h:1907
void SetVersatilityBonus(float value)
Definition Player.h:3001
EnumFlag< TeleportToOptions > GetTeleportOptions() const
Definition Player.h:2400
void AddTransmogBlock(uint32 blockValue)
Definition Player.h:2969
bool m_itemUpdateQueueBlocked
Definition Player.h:3225
void SetAccountBankTabSettings(uint32 tabId, std::string const &name, std::string const &icon, std::string const &description, BagSlotFlags depositFlags)
Definition Player.h:1512
void SetHasClaimedFreeTransmog()
Definition Player.h:1327
PlayerCreateMode m_createMode
Definition Player.h:3276
uint32 _pendingBindId
Definition Player.h:3398
void SetHeirloomFlags(uint32 slot, uint32 flags)
Definition Player.h:2961
void SetSummonedBattlePetGUID(ObjectGuid guid)
Definition Player.h:2996
Definition Spell.h:277
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition Unit.h:635
UF::UpdateField< UF::UnitData, int32(WowCS::EntityFragment::CGObject), TYPEID_UNIT > m_unitData
Definition Unit.h:1881
Player session in the World.
UpdateFieldFlag
Definition UpdateField.h:37
std::conditional_t< std::is_base_of_v< HasChangesMaskTag, T >, MutableFieldReferenceWithChangesMask< T, PublicSet >, MutableFieldReferenceNoChangesMask< T, PublicSet > > MutableFieldReference
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
Definition Vignette.cpp:81
void Update(VignetteData &vignette, WorldObject const *owner)
Definition Vignette.cpp:101
void SetActionAndType(uint64 action, ActionButtonType type)
Definition Player.h:421
uint64 packedData
Definition Player.h:415
ActionButtonUpdateState uState
Definition Player.h:416
uint64 GetAction() const
Definition Player.h:420
ActionButtonType GetType() const
Definition Player.h:419
float y1
Definition Player.h:473
uint32 areaID
Definition Player.h:469
float x1
Definition Player.h:471
float y2
Definition Player.h:474
uint32 areaFlag
Definition Player.h:470
float x2
Definition Player.h:472
Holder for Battleground data.
Definition Player.h:1134
Team bgTeam
What side the player will be added to.
Definition Player.h:1146
BattlegroundTypeId bgTypeID
Definition Player.h:1140
time_t bgAfkReportedTimer
Definition Player.h:1144
uint32 taxiPath[2]
Definition Player.h:1149
void ClearTaxiPath()
Definition Player.h:1154
uint32 bgInstanceID
Definition Player.h:1138
GuidSet bgAfkReporter
Definition Player.h:1142
BattlegroundQueueTypeId queueId
Definition Player.h:1152
bool HasTaxiPath() const
Definition Player.h:1155
WorldLocation joinPos
From where player entered BG.
Definition Player.h:1151
uint8 bgAfkReportedCount
Definition Player.h:1143
BGData()
Definition Player.h:1135
uint32 mountSpell
Definition Player.h:1148
Represents a CompactUnitFrame profile.
Definition CUFProfile.h:64
DuelInfo(Player *opponent, Player *initiator, bool isMounted)
Definition Player.h:457
time_t StartTime
Definition Player.h:463
Player *const Opponent
Definition Player.h:459
time_t OutOfBoundsTime
Definition Player.h:464
bool const IsMounted
Definition Player.h:461
Player *const Initiator
Definition Player.h:460
DuelState State
Definition Player.h:462
EnchantmentSlot slot
Definition Player.h:501
uint32 leftduration
Definition Player.h:502
EnchantDuration(Item *_item, EnchantmentSlot _slot, uint32 _leftduration)
Definition Player.h:497
Item * item
Definition Player.h:500
Data sent in EquipmentSet related packets.
int32 UpdateSequenceNumber
Definition Player.h:1170
ObjectGuid GroupGuid
Definition Player.h:1169
ItemPosCount(uint16 _pos, uint32 _count)
Definition Player.h:836
uint32 count
Definition Player.h:839
bool isContainedIn(std::vector< ItemPosCount > const &vec) const
Definition Player.cpp:26905
uint16 pos
Definition Player.h:838
Definition Loot.h:286
Definition Mail.h:175
uint32 TrackedQuantity
Definition Player.h:344
uint32 EarnedQuantity
Definition Player.h:346
uint32 IncreasedCapQuantity
Definition Player.h:345
uint32 WeeklyQuantity
Definition Player.h:343
CurrencyDbFlags Flags
Definition Player.h:347
uint32 Quantity
Definition Player.h:342
PlayerCurrencyState state
Definition Player.h:341
int32 DefinitionId
Definition Player.h:215
friend bool operator==(PlayerSpellTrait const &, PlayerSpellTrait const &) noexcept=default
bool favorite
Definition Player.h:227
bool active
Definition Player.h:224
bool disabled
Definition Player.h:226
bool dependent
Definition Player.h:225
PlayerSpellState state
Definition Player.h:223
Optional< PlayerSpellTrait > Trait
Definition Player.h:228
BattlegroundQueueTypeId bgQueueTypeId
Definition Player.h:3087
ValuesUpdateForPlayerWithMaskSender(Player const *owner)
Definition Player.h:2289
UF::ActivePlayerData::Base ActivePlayerMask
Definition Player.h:2295
constexpr float GetPositionX() const
Definition Position.h:87
constexpr float GetPositionY() const
Definition Position.h:88
constexpr float GetOrientation() const
Definition Position.h:90
constexpr float GetPositionZ() const
Definition Position.h:89
bool IsHostile
Definition Player.h:441
bool IsInNoPvPArea
‍Marks if player is in an area which forces PvP flag
Definition Player.h:443
bool IsInFFAPvPArea
‍Marks if player is in a sanctuary or friendly capital city
Definition Player.h:444
bool IsInHostileArea
Definition Player.h:442
PvPInfo()
Definition Player.h:439
time_t EndTimer
‍Marks if player is in an FFAPvP area (such as Gurubashi Arena)
Definition Player.h:445
QuestStatusMap::iterator QuestStatusItr
Definition Player.h:653
ObjectGuid GUID
Definition Player.h:1160
WorldLocation Location
Definition Player.h:1161
std::deque< uint8 > CooldownOrder
Definition Player.h:487
void SetRuneState(uint8 index, bool set=true)
Definition Player.cpp:27128
uint8 RuneState
Definition Player.h:489
uint32 Cooldown[MAX_RUNES]
Definition Player.h:488
SkillStatusData(uint32 _pos, SkillUpdateState _uState)
Definition Player.h:699
SkillUpdateState uState
Definition Player.h:703
SpecializationInfo(SpecializationInfo const &)=delete
uint32 ResetTalentsCost
Definition Player.h:1199
time_t ResetTalentsTime
Definition Player.h:1200
SpecializationInfo & operator=(SpecializationInfo const &)=delete
SpellFlatModifierByClassMask(SpellModOp _op, uint32 _spellId, Aura *_ownerAura, flag128 _mask)
Definition Player.h:275
SpellFlatModifierByLabel(SpellModOp _op, uint32 _spellId, Aura *_ownerAura, uint32 _label)
Definition Player.h:291
UF::SpellFlatModByLabel value
Definition Player.h:299
SpellModifierByClassMask(SpellModOp _op, SpellModType _type, uint32 _spellId, Aura *_ownerAura, flag128 const &_mask)
Definition Player.h:267
bool operator()(SpellModifier const *left, SpellModifier const *right) const
Definition Player.h:317
SpellModOp op
Definition Player.h:258
SpellModType type
Definition Player.h:259
uint32 spellId
Definition Player.h:261
Aura *const ownerAura
Definition Player.h:262
virtual ~SpellModifier()=default
SpellModifier(SpellModOp _op, SpellModType _type, uint32 _spellId, Aura *_ownerAura)
Definition Player.h:254
SpellPctModifierByClassMask(SpellModOp _op, uint32 _spellId, Aura *_ownerAura, flag128 _mask)
Definition Player.h:283
SpellPctModifierByLabel(SpellModOp _op, uint32 _spellId, Aura *_ownerAura, int32 _label)
Definition Player.h:304
UF::SpellPctModByLabel value
Definition Player.h:312
enum StoredAuraTeleportLocation::@268 State
Optional< uint32 > InstanceId
Definition Player.h:1228
WorldLocation Location
Definition Player.h:1226
Optional< uint32 > LfgDungeonsId
Definition Player.h:1229
Optional< ObjectGuid > TransportGuid
Definition Player.h:1227
constexpr bool HasRace(uint32 raceId) const
Definition RaceMask.h:96
UpdateField< uint32, 32, 66 > TrackCreatureMask
UpdateField< int32, 102, 111 > WatchedFactionIndex
UpdateField< uint8, 102, 132 > NumBankSlots
DynamicUpdateField< uint64, 0, 7 > KnownTitles
DynamicUpdateField< uint32, 0, 15 > HeirloomFlags
UpdateField< bool, 0, 3 > BankAutoSortDisabled
DynamicUpdateField< uint32, 0, 17 > ToyFlags
UpdateField< int32, 70, 99 > ModTargetResistance
UpdateField< bool, 0, 2 > BackpackSellJunkDisabled
UpdateFieldArray< uint32, 4, 365, 366 > NoReagentCostMask
UpdateField< ObjectGuid, 32, 57 > SummonedBattlePetGUID
UpdateFieldArray< uint32, 5, 373, 374 > BagSlotFlags
UpdateField< uint32, 70, 101 > LocalFlags
DynamicUpdateField< UF::BankTabSettings, 32, 48 > CharacterBankTabSettings
UpdateField< int32, 134, 142 > TransportServerTime
UpdateFieldArray< int32, 7, 271, 279 > ModDamageDoneNeg
UpdateFieldArray< int32, 7, 271, 272 > ModDamageDonePos
UpdateFieldArray< uint32, 12, 307, 308 > BuybackPrice
DynamicUpdateField< int32, 0, 19 > ConditionalTransmog
DynamicUpdateField< uint32, 0, 23 > WarbandScenes
UpdateFieldArray< float, 7, 271, 286 > ModDamageDonePercent
UpdateFieldArray< int64, 12, 307, 320 > BuybackTimestamp
UpdateField< uint8, 134, 155 > RequiredMountCapabilityFlags
DynamicUpdateField< int32, 0, 16 > Toys
UpdateField< uint8, 102, 133 > NumCharacterBankTabs
DynamicUpdateField< uint32, 0, 18 > Transmog
UpdateField< UF::SkillInfo, 32, 63 > Skill
UpdateField< int32, 70, 100 > ModTargetPhysicalResistance
UpdateField< float, 70, 88 > VersatilityBonus
UpdateField< uint32, 134, 147 > ActiveCombatTraitConfigID
UpdateFieldArray< ObjectGuid, 105, 162, 163 > InvSlots
UpdateField< uint16, 102, 127 > LootSpecID
UpdateField< uint32, 102, 128 > OverrideZonePVPType
UpdateField< int32, 32, 64 > CharacterPoints
UpdateField< uint8, 134, 135 > NumAccountBankTabs
UpdateField< float, 70, 97 > OverrideSpellPowerByAPPercent
UpdateField< bool, 0, 1 > BackpackAutoSortDisabled
UpdateField< uint8, 102, 104 > MultiActionBars
DynamicUpdateField< uint32, 0, 22 > TransmogIllusions
DynamicUpdateField< UF::BankTabSettings, 32, 49 > AccountBankTabSettings
DynamicUpdateField< int32, 0, 14 > Heirlooms
UpdateField< float, 70, 98 > OverrideAPBySpellPowerPercent
UpdateField< uint8, 102, 124 > AuraVision
UpdateFieldArray< UF::RestInfo, 2, 268, 269 > RestInfo
UpdateField< uint8, 102, 106 > NumRespecs
DynamicUpdateField< int32, 0, 20 > SelfResSpells
UpdateField< int32, 102, 116 > PetSpellPower
UpdateField< int32, 102, 126 > OverrideSpellsID
UpdateField< int32, -1, 3 > DepositFlags
UpdateField< std::string, -1, 1 > Icon
UpdateField< std::string, -1, 2 > Description
UpdateField< std::string, -1, 0 > Name
std::conditional_t< std::is_base_of_v< IsUpdateFieldStructureTag, V >, MutableFieldReference< V, PublicSet >, std::conditional_t< std::is_base_of_v< IsUpdateFieldHolderTag, V >, MutableNestedFieldReference< V, PublicSet >, UpdateFieldSetter< V, PublicSet > > > ModifyValue(UpdateField< V, BlockBit, Bit >(T::*field))
UpdateField< uint8, 32, 33 > CurrentBattlePetBreedQuality
UpdateField< ObjectGuid, 0, 13 > LootTargetGUID
UpdateField< int32, 0, 18 > GuildLevel
UpdateField< uint32, 0, 29 > CurrentSpecID
UpdateField< int32, 0, 26 > PlayerTitle
DynamicUpdateField< UF::ChrCustomizationChoice, 0, 3 > Customizations
UpdateField< int32, 0, 27 > FakeInebriation
UpdateField< uint8, 0, 21 > PvpTitle
UpdateField< ObjectGuid, 0, 9 > DuelArbiter
UpdateFieldArray< float, 6, 249, 250 > AvgItemLevel
UpdateField< uint32, 0, 14 > PlayerFlags
UpdateField< uint8, 0, 22 > ArenaFaction
UpdateField< uint32, 0, 16 > GuildRankID
UpdateField< uint32, 0, 23 > DuelTeam
UpdateField< int32, 0, 30 > CurrentCombatTraitConfigSubTreeID
UpdateField< uint32, 0, 15 > PlayerFlagsEx
UpdateField< uint8, 0, 19 > NativeSex
UpdateField< uint32, 0, 28 > VirtualPlayerRealm
UpdateField< uint32, 0, 1 > Threshold
UpdateField< uint8, 0, 2 > StateID
UpdateFieldArray< uint16, 300, 0, 1201 > SkillMaxRank
UpdateFieldArray< uint16, 300, 0, 1801 > SkillPermBonus
UpdateFieldArray< uint16, 300, 0, 1 > SkillLineID
UpdateFieldArray< int16, 300, 0, 1501 > SkillTempBonus
UpdateFieldArray< uint16, 300, 0, 301 > SkillStep
UpdateFieldArray< uint16, 300, 0, 901 > SkillStartingRank
UpdateFieldArray< uint16, 300, 0, 601 > SkillRank
UpdateField< ObjectGuid, 0, 22 > Target