TrinityCore
CollectionMgr.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 CollectionMgr_h__
19#define CollectionMgr_h__
20
21#include "Define.h"
22#include "DatabaseEnvFwd.h"
23#include "EnumFlag.h"
24#include "ObjectGuid.h"
25#include <boost/dynamic_bitset_fwd.hpp>
26#include <map>
27#include <unordered_map>
28#include <unordered_set>
29
30class Item;
31class WorldSession;
33
35{
43};
44
46{
50};
51
53{
54 HeirloomData(uint32 _flags = 0, uint32 _bonusId = 0) : flags(_flags), bonusId(_bonusId) { }
55
58};
59
60enum class ToyFlags : uint32
61{
62 None = 0,
63 Favorite = 0x01,
64 HasFanfare = 0x02
65};
66
68
69typedef std::map<uint32, EnumFlag<ToyFlags>> ToyBoxContainer;
70typedef std::map<uint32, HeirloomData> HeirloomContainer;
71
73{
77};
78
79typedef std::map<uint32, MountStatusFlags> MountContainer;
80typedef std::unordered_map<uint32, uint32> MountDefinitionMap;
81
83{
84public:
85 explicit CollectionMgr(WorldSession* owner);
87
88 static void LoadMountDefinitions();
89
90 // Account-wide toys
91 void LoadToys();
92 void LoadAccountToys(PreparedQueryResult result);
93 void SaveAccountToys(LoginDatabaseTransaction trans);
94 void ToySetFavorite(uint32 itemId, bool favorite);
95 void ToyClearFanfare(uint32 itemId);
96
97 bool AddToy(uint32 itemId, bool isFavourite, bool hasFanfare);
98 bool UpdateAccountToys(uint32 itemId, bool isFavourite, bool hasFanfare);
99 bool HasToy(uint32 itemId) const { return _toys.count(itemId) > 0; }
100
101 ToyBoxContainer const& GetAccountToys() const { return _toys; }
102
103 void OnItemAdded(Item* item);
104
105 // Account-wide heirlooms
106 void LoadHeirlooms();
107 void LoadAccountHeirlooms(PreparedQueryResult result);
108 void SaveAccountHeirlooms(LoginDatabaseTransaction trans);
109 void AddHeirloom(uint32 itemId, uint32 flags);
110 bool HasHeirloom(uint32 itemId) const { return _heirlooms.contains(itemId); }
111 void UpgradeHeirloom(uint32 itemId, int32 castItem);
112 void CheckHeirloomUpgrades(Item* item);
113
114 bool UpdateAccountHeirlooms(uint32 itemId, uint32 flags);
115 uint32 GetHeirloomBonus(uint32 itemId) const;
116 HeirloomContainer const& GetAccountHeirlooms() const { return _heirlooms; }
117
118 // Account-wide mounts
119 void LoadMounts();
120 void LoadAccountMounts(PreparedQueryResult result);
121 void SaveAccountMounts(LoginDatabaseTransaction trans);
122 bool AddMount(uint32 spellId, MountStatusFlags flags, bool factionMount = false, bool learned = false);
123 void MountSetFavorite(uint32 spellId, bool favorite);
124 void SendSingleMountUpdate(std::pair<uint32, MountStatusFlags> mount);
125 MountContainer const& GetAccountMounts() const { return _mounts; }
126
127 // Appearances
128 void LoadItemAppearances();
129 void LoadAccountItemAppearances(PreparedQueryResult knownAppearances, PreparedQueryResult favoriteAppearances);
130 void SaveAccountItemAppearances(LoginDatabaseTransaction trans);
131 void AddItemAppearance(Item* item);
132 void AddItemAppearance(uint32 itemId, uint32 appearanceModId = 0);
133 void AddTransmogSet(uint32 transmogSetId);
134 bool IsSetCompleted(uint32 transmogSetId) const;
135 void RemoveTemporaryAppearance(Item* item);
136 // returns pair<hasAppearance, isTemporary>
137 std::pair<bool, bool> HasItemAppearance(uint32 itemModifiedAppearanceId) const;
138 std::unordered_set<ObjectGuid> GetItemsProvidingTemporaryAppearance(uint32 itemModifiedAppearanceId) const;
139 // returns ItemAppearance::ID, not ItemModifiedAppearance::ID
140 std::unordered_set<uint32> GetAppearanceIds() const;
141
142 // Illusions
143 void LoadTransmogIllusions();
144 void LoadAccountTransmogIllusions(PreparedQueryResult knownTransmogIllusions);
145 void SaveAccountTransmogIllusions(LoginDatabaseTransaction trans);
146 void AddTransmogIllusion(uint32 transmogIllusionId);
147 bool HasTransmogIllusion(uint32 transmogIllusionId) const;
148
150 {
151 New,
152 Removed,
153 Unchanged
154 };
155
156 void SetAppearanceIsFavorite(uint32 itemModifiedAppearanceId, bool apply);
157 void SendFavoriteAppearances() const;
158
159private:
160 bool CanAddAppearance(ItemModifiedAppearanceEntry const* itemModifiedAppearance) const;
161 void AddItemAppearance(ItemModifiedAppearanceEntry const* itemModifiedAppearance);
162 void AddTemporaryAppearance(ObjectGuid const& itemGuid, ItemModifiedAppearanceEntry const* itemModifiedAppearance);
163
165
169 std::unique_ptr<boost::dynamic_bitset<uint32>> _appearances;
170 std::unordered_map<uint32, std::unordered_set<ObjectGuid>> _temporaryAppearances;
171 std::unordered_map<uint32, FavoriteAppearanceState> _favoriteAppearances;
172 std::unique_ptr<boost::dynamic_bitset<uint32>> _transmogIllusions;
173};
174
175#endif // CollectionMgr_h__
HeirloomItemFlags
Definition: CollectionMgr.h:46
@ HEIRLOOM_ITEM_FLAG_PVP
Definition: CollectionMgr.h:49
@ HEIRLOOM_ITEM_FLAG_SHOW_ONLY_IF_KNOWN
Definition: CollectionMgr.h:48
@ HEIRLOOM_ITEM_FLAG_NONE
Definition: CollectionMgr.h:47
DEFINE_ENUM_FLAG(ToyFlags)
ToyFlags
Definition: CollectionMgr.h:61
std::map< uint32, HeirloomData > HeirloomContainer
Definition: CollectionMgr.h:70
HeirloomPlayerFlags
Definition: CollectionMgr.h:35
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_2
Definition: CollectionMgr.h:38
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_6
Definition: CollectionMgr.h:42
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_3
Definition: CollectionMgr.h:39
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_5
Definition: CollectionMgr.h:41
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_1
Definition: CollectionMgr.h:37
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_4
Definition: CollectionMgr.h:40
@ HEIRLOOM_FLAG_NONE
Definition: CollectionMgr.h:36
MountStatusFlags
Definition: CollectionMgr.h:73
@ MOUNT_IS_FAVORITE
Definition: CollectionMgr.h:76
@ MOUNT_NEEDS_FANFARE
Definition: CollectionMgr.h:75
@ MOUNT_STATUS_NONE
Definition: CollectionMgr.h:74
std::map< uint32, EnumFlag< ToyFlags > > ToyBoxContainer
Definition: CollectionMgr.h:69
std::map< uint32, MountStatusFlags > MountContainer
Definition: CollectionMgr.h:79
std::unordered_map< uint32, uint32 > MountDefinitionMap
Definition: CollectionMgr.h:80
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition: Define.h:123
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
uint16 flags
Definition: DisableMgr.cpp:49
std::unordered_map< uint32, FavoriteAppearanceState > _favoriteAppearances
HeirloomContainer const & GetAccountHeirlooms() const
WorldSession * _owner
bool HasToy(uint32 itemId) const
Definition: CollectionMgr.h:99
HeirloomContainer _heirlooms
std::unordered_map< uint32, std::unordered_set< ObjectGuid > > _temporaryAppearances
MountContainer _mounts
std::unique_ptr< boost::dynamic_bitset< uint32 > > _appearances
ToyBoxContainer const & GetAccountToys() const
std::unique_ptr< boost::dynamic_bitset< uint32 > > _transmogIllusions
bool HasHeirloom(uint32 itemId) const
MountContainer const & GetAccountMounts() const
ToyBoxContainer _toys
Definition: Item.h:170
Player session in the World.
Definition: WorldSession.h:963
void apply(T *val)
Definition: ByteConverter.h:41
uint32 bonusId
Definition: CollectionMgr.h:57
HeirloomData(uint32 _flags=0, uint32 _bonusId=0)
Definition: CollectionMgr.h:54