TrinityCore
Loading...
Searching...
No Matches
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 TRINITYCORE_COLLECTION_MGR_H
19#define TRINITYCORE_COLLECTION_MGR_H
20
21#include "Define.h"
22#include "DatabaseEnvFwd.h"
23#include "EnumFlag.h"
24#include "FlatSet.h"
25#include "ObjectGuid.h"
26#include <boost/dynamic_bitset_fwd.hpp>
27#include <map>
28#include <unordered_map>
29#include <unordered_set>
30
31class Item;
32class WorldSession;
34
36{
38 New,
39 Changed,
41};
42
53
60
62{
63 HeirloomData(uint32 _flags = 0, uint32 _bonusId = 0) : flags(_flags), bonusId(_bonusId) { }
64
67};
68
69enum class ToyFlags : uint32
70{
71 None = 0,
72 Favorite = 0x01,
73 HasFanfare = 0x02
74};
75
77
78typedef std::map<uint32, EnumFlag<ToyFlags>> ToyBoxContainer;
79typedef std::map<uint32, HeirloomData> HeirloomContainer;
80
87
88typedef std::map<uint32, MountStatusFlags> MountContainer;
89typedef std::unordered_map<uint32, uint32> MountDefinitionMap;
90
92{
93 None = 0x00,
94 Favorite = 0x01,
95 HasFanfare = 0x02
96};
97
99
105
106using WarbandSceneCollectionContainer = std::map<uint32, WarbandSceneCollectionItem>;
107
109{
110public:
111 explicit CollectionMgr(WorldSession* owner);
112 CollectionMgr(CollectionMgr const&) = delete;
117
118 static void LoadMountDefinitions();
119 static void LoadWarbandSceneDefinitions();
120
121 void LoadCharacterData();
123
124 // Account-wide toys
125 void LoadToys();
126 void LoadAccountToys(PreparedQueryResult result);
127 void SaveAccountToys(LoginDatabaseTransaction trans);
128 void ToySetFavorite(uint32 itemId, bool favorite);
129 void ToyClearFanfare(uint32 itemId);
130
131 bool AddToy(uint32 itemId, bool isFavourite, bool hasFanfare);
132 bool UpdateAccountToys(uint32 itemId, bool isFavourite, bool hasFanfare);
133 bool HasToy(uint32 itemId) const { return _toys.contains(itemId); }
134
135 ToyBoxContainer const& GetAccountToys() const { return _toys; }
136
137 void OnItemAdded(Item* item);
138
139 // Account-wide heirlooms
140 void LoadHeirlooms();
141 void LoadAccountHeirlooms(PreparedQueryResult result);
142 void SaveAccountHeirlooms(LoginDatabaseTransaction trans);
143 void AddHeirloom(uint32 itemId, uint32 flags);
144 bool HasHeirloom(uint32 itemId) const { return _heirlooms.contains(itemId); }
145 void UpgradeHeirloom(uint32 itemId, int32 castItem);
146 void CheckHeirloomUpgrades(Item* item);
147
148 bool UpdateAccountHeirlooms(uint32 itemId, uint32 flags);
149 uint32 GetHeirloomBonus(uint32 itemId) const;
150 HeirloomContainer const& GetAccountHeirlooms() const { return _heirlooms; }
151
152 // Account-wide mounts
153 void LoadMounts();
154 void LoadAccountMounts(PreparedQueryResult result);
155 void SaveAccountMounts(LoginDatabaseTransaction trans);
156 bool AddMount(uint32 spellId, MountStatusFlags flags, bool factionMount = false, bool learned = false);
157 void MountSetFavorite(uint32 spellId, bool favorite);
158 void SendSingleMountUpdate(std::pair<uint32, MountStatusFlags> mount);
159 MountContainer const& GetAccountMounts() const { return _mounts; }
160
161 // Appearances
162 void LoadItemAppearances();
163 void LoadAccountItemAppearances(PreparedQueryResult knownAppearances, PreparedQueryResult favoriteAppearances);
164 void SaveAccountItemAppearances(LoginDatabaseTransaction trans);
165 void AddItemAppearance(Item* item);
166 void AddItemAppearance(uint32 itemId, uint32 appearanceModId = 0);
167 void AddTransmogSet(uint32 transmogSetId);
168 bool IsSetCompleted(uint32 transmogSetId) const;
169 void RemoveTemporaryAppearance(Item* item);
170 // returns pair<hasAppearance, isTemporary>
171 std::pair<bool, bool> HasItemAppearance(uint32 itemModifiedAppearanceId) const;
172 std::unordered_set<ObjectGuid> GetItemsProvidingTemporaryAppearance(uint32 itemModifiedAppearanceId) const;
173 // returns ItemAppearance::ID, not ItemModifiedAppearance::ID
174 std::unordered_set<uint32> GetAppearanceIds() const;
175
176 void SetAppearanceIsFavorite(uint32 itemModifiedAppearanceId, bool apply);
177 void SendFavoriteAppearances() const;
178
179 // Illusions
180 void LoadTransmogIllusions();
181 void LoadAccountTransmogIllusions(PreparedQueryResult knownTransmogIllusions);
182 void SaveAccountTransmogIllusions(LoginDatabaseTransaction trans);
183 void AddTransmogIllusion(uint32 transmogIllusionId);
184 bool HasTransmogIllusion(uint32 transmogIllusionId) const;
185
186 void LoadTransmogOutfits();
187 void LoadAccountTransmogOutfits(PreparedQueryResult unlockedTransmogOutfits);
188 void SaveAccountTransmogOutfits(LoginDatabaseTransaction trans);
189 void AddTransmogOutfit(int32 transmogOutfitId);
190 bool HasTransmogOutfit(int32 transmogOutfitId) const;
191
192 // Warband Scenes
193 void LoadWarbandScenes();
194 void LoadAccountWarbandScenes(PreparedQueryResult knownWarbandScenes);
195 void SaveAccountWarbandScenes(LoginDatabaseTransaction trans);
196 void AddWarbandScene(uint32 warbandSceneId);
197 bool HasWarbandScene(uint32 warbandSceneId) const;
198 void SetWarbandSceneIsFavorite(uint32 warbandSceneId, bool apply);
199 WarbandSceneCollectionContainer const& GetWarbandScenes() const { return _warbandScenes; }
200
201 void SendWarbandSceneCollectionData() const;
202
203private:
204 bool CanAddAppearance(ItemModifiedAppearanceEntry const* itemModifiedAppearance) const;
205 void AddItemAppearance(ItemModifiedAppearanceEntry const* itemModifiedAppearance);
206 void AddTemporaryAppearance(ObjectGuid const& itemGuid, ItemModifiedAppearanceEntry const* itemModifiedAppearance);
207
209
213 std::unique_ptr<boost::dynamic_bitset<uint32>> _appearances;
214 std::unordered_map<uint32, std::unordered_set<ObjectGuid>> _temporaryAppearances;
215 std::unordered_map<uint32, CollectionItemState> _favoriteAppearances;
216 std::unique_ptr<boost::dynamic_bitset<uint32>> _transmogIllusions;
219};
220
221#endif // TRINITYCORE_COLLECTION_MGR_H
HeirloomItemFlags
@ HEIRLOOM_ITEM_FLAG_PVP
@ HEIRLOOM_ITEM_FLAG_SHOW_ONLY_IF_KNOWN
@ HEIRLOOM_ITEM_FLAG_NONE
ToyFlags
std::map< uint32, HeirloomData > HeirloomContainer
HeirloomPlayerFlags
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_2
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_6
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_3
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_5
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_1
@ HEIRLOOM_FLAG_UPGRADE_LEVEL_4
@ HEIRLOOM_FLAG_NONE
std::map< uint32, WarbandSceneCollectionItem > WarbandSceneCollectionContainer
MountStatusFlags
@ MOUNT_IS_FAVORITE
@ MOUNT_NEEDS_FANFARE
@ MOUNT_STATUS_NONE
std::map< uint32, EnumFlag< ToyFlags > > ToyBoxContainer
std::map< uint32, MountStatusFlags > MountContainer
CollectionItemState
std::unordered_map< uint32, uint32 > MountDefinitionMap
WarbandSceneCollectionFlags
SQLTransaction< LoginDatabaseConnection > LoginDatabaseTransaction
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
uint16 flags
#define DEFINE_ENUM_FLAG(enumType)
Definition EnumFlag.h:26
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
CollectionMgr & operator=(CollectionMgr const &)=delete
CollectionMgr(CollectionMgr const &)=delete
HeirloomContainer const & GetAccountHeirlooms() const
WorldSession * _owner
bool HasToy(uint32 itemId) const
HeirloomContainer _heirlooms
std::unordered_map< uint32, std::unordered_set< ObjectGuid > > _temporaryAppearances
MountContainer _mounts
std::unordered_map< uint32, CollectionItemState > _favoriteAppearances
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
WarbandSceneCollectionContainer _warbandScenes
Trinity::Containers::FlatSet< int32 > _transmogOutfits
CollectionMgr(CollectionMgr &&)=delete
ToyBoxContainer _toys
CollectionMgr & operator=(CollectionMgr &&)=delete
WarbandSceneCollectionContainer const & GetWarbandScenes() const
Definition Item.h:179
Player session in the World.
HeirloomData(uint32 _flags=0, uint32 _bonusId=0)
CollectionItemState State
EnumFlag< WarbandSceneCollectionFlags > Flags