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