Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
DB2Stores.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "BattlePet.h"
7#include "Common.h"
8#include "DB2fmt.h"
9#include "DB2Stores.h"
10#include "DB2Utility.h"
11#include "DBCStores.h"
12#include "Log.h"
13#include "World.h"
14
26//DB2Storage<BattlePetVisualEntry> sBattlePetVisualStore(BattlePetVisualfmt);
27DB2Storage<BroadcastTextEntry> sBroadcastTextStore(BroadcastTextfmt/*, &DB2Utilities::HasBroadcastTextEntry, &DB2Utilities::WriteBroadcastTextDbReply*/);
28//DB2Storage<CreatureDifficultyEntry> sCreatureDifficultyStore(CreatureDifficultyfmt);
29//DB2Storage<CreatureEntry> sCreatureStore(Creaturefmt);
30//DB2Storage<GameObjectsEntry> sGameObjectsStore(GameObjectsfmt);
36//DB2Storage<ItemToMountSpellEntry> sItemToMountSpellStore(ItemToMountSpellfmt);
37//DB2Storage<ItemUpgradeEntry> sItemUpgradeStore(ItemUpgradefmt);
39//DB2Storage<QuestPackageItemEntry> sQuestPackageItemStore(QuestPackageItemfmt);
40//DB2Storage<RulesetItemUpgradeEntry> sRulesetItemUpgradeStore(RulesetItemUpgradefmt);
41//DB2Storage<RulesetRaidLootUpgradeEntry> sRulesetRaidLootUpgradeStore(RulesetRaidLootUpgradefmt);
42//DB2Storage<SceneScriptEntry> sSceneScriptStore(SceneScriptfmt);
44//DB2Storage<SceneScriptPackageMemberEntry> sSceneScriptPackageMemberStore(SceneScriptPackageMemberfmt);
46
53
54typedef std::list<std::string> DB2StoreProblemList;
55
56typedef std::map<uint32 /*hash*/, DB2StorageBase*> DB2StorageMap;
58
60
61static bool LoadDB2_assert_print(uint32 fsize, uint32 rsize, std::string const& filename)
62{
63 SF_LOG_ERROR("misc", "Size of '%s' setted by format string (%u) not equal size of C++ structure (%u).", filename.c_str(), fsize, rsize);
64
65 // ASSERT must fail after function call
66 return false;
67}
68
69template<class T>
70inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, DB2Storage<T>& storage, std::string const& db2_path, std::string const& filename)
71{
72 // compatibility format and C++ structure sizes
74
76
77 std::string db2_filename = db2_path + filename;
78 if (storage.Load(db2_filename.c_str(), uint32(sWorld->GetDefaultDbcLocale())))
79 {
80 for (uint32 i = 0; i < TOTAL_LOCALES; ++i)
81 {
82 if (!(availableDb2Locales & (1 << i)))
83 continue;
84
85 if (uint32(sWorld->GetDefaultDbcLocale()) == i)
86 continue;
87
88 std::string localizedName(db2_path);
89 localizedName.append(localeNames[i]);
90 localizedName.push_back('/');
91 localizedName.append(filename);
92
93 if (!storage.LoadStringsFrom(localizedName.c_str(), i))
94 availableDb2Locales &= ~(1 << i); // mark as not available for speedup next checks
95 }
96 }
97 else
98 {
99 // sort problematic db2 to (1) non compatible and (2) nonexistent
100 if (FILE* f = fopen(db2_filename.c_str(), "rb"))
101 {
102 std::ostringstream stream;
103 stream << db2_filename << " exists, and has " << storage.GetFieldCount() << " field(s) (expected " << strlen(storage.GetFormat()) << "). Extracted file might be from wrong client version or a database-update has been forgotten.";
104 std::string buf = stream.str();
105 errlist.push_back(buf);
106 fclose(f);
107 }
108 else
109 errlist.push_back(db2_filename);
110 }
111
112 DB2Stores[storage.GetHash()] = &storage;
113}
114
115void LoadDB2Stores(std::string const& dataPath)
116{
117 std::string db2Path = dataPath + "db2/";
118
119 DB2StoreProblemList bad_db2_files;
120 uint32 availableDb2Locales = 0xFF;
121
122 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetAbilityEffectStore, db2Path, "BattlePetAbilityEffect.db2");
123 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetAbilityStateStore, db2Path, "BattlePetAbilityState.db2");
124 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetAbilityStore, db2Path, "BattlePetAbility.db2");
125 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetAbilityTurnStore, db2Path, "BattlePetAbilityTurn.db2");
126 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetBreedQualityStore, db2Path, "BattlePetBreedQuality.db2");
127 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetBreedStateStore, db2Path, "BattlePetBreedState.db2");
128 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetEffectPropertiesStore, db2Path, "BattlePetEffectProperties.db2");
129 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetSpeciesStateStore, db2Path, "BattlePetSpeciesState.db2");
130 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetSpeciesStore, db2Path, "BattlePetSpecies.db2");
131 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetSpeciesXAbilityStore, db2Path, "BattlePetSpeciesXAbility.db2");
132 LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetStateStore, db2Path, "BattlePetState.db2");
133 //LoadDB2(availableDb2Locales, bad_db2_files, sBattlePetVisualStore, db2Path, "BattlePetVisual.db2");
134 LoadDB2(availableDb2Locales, bad_db2_files, sBroadcastTextStore, db2Path, "BroadcastText.db2");
135 //LoadDB2(availableDb2Locales, bad_db2_files, sCreatureDifficultyStore, db2Path, "CreatureDifficulty.db2");
136 //LoadDB2(availableDb2Locales, bad_db2_files, sCreatureStore, db2Path, "Creature.db2");
137 //LoadDB2(availableDb2Locales, bad_db2_files, sGameObjectsStore, db2Path, "GameObjects.db2");
138 LoadDB2(availableDb2Locales, bad_db2_files, sItemCurrencyCostStore, db2Path, "ItemCurrencyCost.db2");
139 LoadDB2(availableDb2Locales, bad_db2_files, sItemExtendedCostStore, db2Path, "ItemExtendedCost.db2");
140 LoadDB2(availableDb2Locales, bad_db2_files, sItemSparseStore, db2Path, "Item-sparse.db2");
141 LoadDB2(availableDb2Locales, bad_db2_files, sItemStore, db2Path, "Item.db2");
142 LoadDB2(availableDb2Locales, bad_db2_files, sItemToBattlePetStore, db2Path, "ItemToBattlePet.db2");
143 //LoadDB2(availableDb2Locales, bad_db2_files, sItemToMountSpellStore, db2Path, "ItemToMountSpell.db2");
144 //LoadDB2(availableDb2Locales, bad_db2_files, sItemUpgradeStore, db2Path, "ItemUpgrade.db2");
145 LoadDB2(availableDb2Locales, bad_db2_files, sKeyChainStore, db2Path, "KeyChain.db2");
146 //LoadDB2(availableDb2Locales, bad_db2_files, sQuestPackageItemStore, db2Path, "QuestPackageItem.db2");
147 //LoadDB2(availableDb2Locales, bad_db2_files, sRulesetItemUpgradeStore, db2Path, "RulesetItemUpgrade.db2");
148 //LoadDB2(availableDb2Locales, bad_db2_files, sRulesetRaidLootUpgradeStore, db2Path, "RulesetRaidLootUpgrade.db2");
149 //LoadDB2(availableDb2Locales, bad_db2_files, sSceneScriptPackageMemberStore, db2Path, "SceneScriptPackageMember.db2");
150 LoadDB2(availableDb2Locales, bad_db2_files, sSceneScriptPackageStore, db2Path, "SceneScriptPackage.db2");
151 //LoadDB2(availableDb2Locales, bad_db2_files, sSceneScriptStore, db2Path, "SceneScript.db2");
152 LoadDB2(availableDb2Locales, bad_db2_files, sSpellReagentsStore, db2Path, "SpellReagents.db2");
153
154 for (uint32 i = 0; i < sBattlePetBreedStateStore.GetNumRows(); i++)
155 if (BattlePetBreedStateEntry const* breedStateEntry = sBattlePetBreedStateStore.LookupEntry(i))
156 if (sBattlePetBreedSet.find(breedStateEntry->BreedId) == sBattlePetBreedSet.end())
157 sBattlePetBreedSet.insert(breedStateEntry->BreedId);
158
160 for (uint32 i = 0; i < sBattlePetBreedQualityStore.GetNumRows(); i++)
161 if (BattlePetBreedQualityEntry const* qualityEntry = sBattlePetBreedQualityStore.LookupEntry(i))
162 sBattlePetQualityMultiplierStore[uint8(qualityEntry->Quality)] = qualityEntry->QualityModifier;
163
164 for (uint32 i = 0; i < sItemToBattlePetStore.GetNumRows(); i++)
165 if (ItemToBattlePetEntry const* itemEntry = sItemToBattlePetStore.LookupEntry(i))
166 sBattlePetItemXSpeciesStore.insert(std::make_pair(itemEntry->ItemId, itemEntry->SpeciesId));
167
169 for (uint32 i = 0; i < sBattlePetAbilityTurnStore.GetNumRows(); i++)
170 {
171 BattlePetAbilityTurnEntry const* turnEntry = sBattlePetAbilityTurnStore.LookupEntry(i);
172 if (!turnEntry)
173 continue;
174
175 sBattlePetAbilityTurnByAbilityStore.insert(std::make_pair(turnEntry->AbilityId,
176 std::make_pair(turnEntry->Id, uint8(turnEntry->TurnIndex))));
177 }
178
180 for (uint32 i = 0; i < sBattlePetAbilityEffectStore.GetNumRows(); i++)
181 {
182 BattlePetAbilityEffectEntry const* effectEntry = sBattlePetAbilityEffectStore.LookupEntry(i);
183 if (!effectEntry)
184 continue;
185
186 sBattlePetAbilityEffectByTurnStore[effectEntry->TurnEntryId] = effectEntry;
187 }
188
190 for (uint32 i = 0; i < sBattlePetSpeciesXAbilityStore.GetNumRows(); i++)
191 {
192 BattlePetSpeciesXAbilityEntry const* abilityEntry = sBattlePetSpeciesXAbilityStore.LookupEntry(i);
193 if (!abilityEntry)
194 continue;
195
196 sBattlePetSpeciesXAbilityBySpeciesStore.insert(std::make_pair(uint16(abilityEntry->SpeciesId), abilityEntry));
197 }
198
199 // error checks
200 if (bad_db2_files.size() >= DB2FilesCount)
201 {
202 SF_LOG_ERROR("misc", "\nIncorrect DataDir value in worldserver.conf or ALL required *.db2 files (%d) not found by path: %sdb2", DB2FilesCount, dataPath.c_str());
203 exit(1);
204 }
205 else if (!bad_db2_files.empty())
206 {
207 std::string str;
208 for (std::list<std::string>::iterator i = bad_db2_files.begin(); i != bad_db2_files.end(); ++i)
209 str += *i + "\n";
210
211 SF_LOG_ERROR("misc", "\nSome required *.db2 files (%u from %d) not found or not compatible:\n%s", (uint32)bad_db2_files.size(), DB2FilesCount, str.c_str());
212 exit(1);
213 }
214
215 SF_LOG_INFO("misc", ">> Initialized %d DB2 data stores.", DB2FilesCount);
216}
217
219{
220 DB2StorageMap::const_iterator itr = DB2Stores.find(type);
221 if (itr != DB2Stores.end())
222 return itr->second;
223
224 return NULL;
225}
226
227#define BATTLE_PET_MAIN_STAT_VALUE 8.0f
228#define BATTLE_PET_MAIN_STAT_DIV 200.0f
229#define BATTLE_PET_MAIN_STAT_OFFSET 1600.0f
230
231float BattlePetSpeciesMainStat(uint16 stateId, uint16 speciesId)
232{
233 if (stateId != BATTLE_PET_STATE_STAT_POWER
235 && stateId != BATTLE_PET_STATE_STAT_SPEED)
236 return 0;
237
238 for (uint32 i = 0; i < sBattlePetSpeciesStateStore.GetNumRows(); i++)
239 {
240 BattlePetSpeciesStateEntry const* stateEntry = sBattlePetSpeciesStateStore.LookupEntry(i);
241 if (!stateEntry)
242 continue;
243
244 if (stateEntry->StateId == stateId && stateEntry->SpeciesId == speciesId)
245 return BATTLE_PET_MAIN_STAT_VALUE + ((float)stateEntry->Modifier / BATTLE_PET_MAIN_STAT_DIV);
246 }
247
249}
250
252{
253 if (stateId != BATTLE_PET_STATE_STAT_POWER
255 && stateId != BATTLE_PET_STATE_STAT_SPEED)
256 return 0;
257
258 for (uint32 i = 0; i < sBattlePetBreedStateStore.GetNumRows(); i++)
259 {
260 BattlePetBreedStateEntry const* stateEntry = sBattlePetBreedStateStore.LookupEntry(i);
261 if (!stateEntry)
262 continue;
263
264 if (stateEntry->StateId == stateId && stateEntry->BreedId == breedId)
265 return ((float)stateEntry->Value - BATTLE_PET_MAIN_STAT_OFFSET) / BATTLE_PET_MAIN_STAT_DIV;
266 }
267
268 return 0;
269}
270
272{
273 BattlePetQualityMultiplierStore::const_iterator itr = sBattlePetQualityMultiplierStore.find(quality);
274 if (itr != sBattlePetQualityMultiplierStore.end() && itr->second > 0.0f)
275 return itr->second;
276
277 switch (quality)
278 {
280 return 1.1f;
282 return 1.2f;
284 return 1.3f;
286 return 1.4f;
288 return 1.5f;
289 default:
290 return 1.0f;
291 }
292}
293
295{
296 BattlePetSpeciesEntry const* speciesEntry = sBattlePetSpeciesStore.LookupEntry(speciesId);
297 if (!speciesEntry)
298 return 0;
299
300 return speciesEntry->SpellId;
301}
302
304{
305 BattlePetSpeciesEntry const* speciesEntry = sBattlePetSpeciesStore.LookupEntry(speciesId);
306 if (!speciesEntry)
307 return false;
308
309 return (speciesEntry->Flags & flag) != 0;
310}
311
312bool BattlePetHasSpeciesAbility(uint16 speciesId, uint8 abilitySlot, bool alternateAbility, uint8 level)
313{
314 if (abilitySlot >= BATTLE_PET_ABILITY_SLOT_COUNT)
315 return false;
316
317 std::pair<BattlePetSpeciesXAbilityBySpeciesStore::const_iterator, BattlePetSpeciesXAbilityBySpeciesStore::const_iterator> bounds =
318 sBattlePetSpeciesXAbilityBySpeciesStore.equal_range(speciesId);
319
320 for (BattlePetSpeciesXAbilityBySpeciesStore::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
321 {
322 BattlePetSpeciesXAbilityEntry const* abilityEntry = itr->second;
323 if (!abilityEntry || abilityEntry->SlotId != abilitySlot || !abilityEntry->AbilityId || abilityEntry->RequiredLevel > level)
324 continue;
325
326 bool const isAlternateAbility = abilityEntry->RequiredLevel >= 10;
327 if (isAlternateAbility == alternateAbility)
328 return true;
329 }
330
331 return false;
332}
333
334uint32 BattlePetGetSpeciesAbility(uint16 speciesId, uint8 abilitySlot, uint16 flags, uint8 level)
335{
336 if (abilitySlot >= BATTLE_PET_ABILITY_SLOT_COUNT)
337 return 0;
338
339 uint16 const selectedFlag = uint16(BATTLE_PET_JOURNAL_FLAG_ABILITY_1 << abilitySlot);
340 bool const useAlternateAbility = (flags & selectedFlag) != 0;
341
342 uint32 defaultAbilityId = 0;
343 std::pair<BattlePetSpeciesXAbilityBySpeciesStore::const_iterator, BattlePetSpeciesXAbilityBySpeciesStore::const_iterator> bounds =
344 sBattlePetSpeciesXAbilityBySpeciesStore.equal_range(speciesId);
345
346 for (BattlePetSpeciesXAbilityBySpeciesStore::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
347 {
348 BattlePetSpeciesXAbilityEntry const* abilityEntry = itr->second;
349 if (!abilityEntry || abilityEntry->SlotId != abilitySlot || abilityEntry->RequiredLevel > level)
350 continue;
351
352 bool const alternateAbility = abilityEntry->RequiredLevel >= 10;
353 if (!alternateAbility && !defaultAbilityId)
354 defaultAbilityId = abilityEntry->AbilityId;
355
356 if (alternateAbility == useAlternateAbility)
357 return abilityEntry->AbilityId;
358 }
359
360 return defaultAbilityId;
361}
@ BATTLE_PET_STATE_STAT_STAMINA
Definition BattlePet.h:153
@ BATTLE_PET_STATE_STAT_SPEED
Definition BattlePet.h:154
@ BATTLE_PET_STATE_STAT_POWER
Definition BattlePet.h:152
constexpr uint8 BATTLE_PET_ABILITY_SLOT_COUNT
Definition BattlePet.h:15
@ BATTLE_PET_JOURNAL_FLAG_ABILITY_1
Definition BattlePet.h:174
char const * localeNames[TOTAL_LOCALES]
Definition Common.cpp:8
const uint8 TOTAL_LOCALES
Definition Common.h:153
DB2Storage< ItemEntry > sItemStore(Itemfmt, &DB2Utilities::HasItemEntry, &DB2Utilities::WriteItemDbReply)
uint32 DB2FilesCount
Definition DB2Stores.cpp:59
BattlePetSpeciesXAbilityBySpeciesStore sBattlePetSpeciesXAbilityBySpeciesStore
Definition DB2Stores.cpp:52
DB2Storage< BattlePetEffectPropertiesEntry > sBattlePetEffectPropertiesStore(BattlePetEffectPropertiesfmt)
uint32 BattlePetGetSpeciesAbility(uint16 speciesId, uint8 abilitySlot, uint16 flags, uint8 level)
bool BattlePetSpeciesHasFlag(uint16 speciesId, uint16 flag)
DB2Storage< ItemExtendedCostEntry > sItemExtendedCostStore(ItemExtendedCostEntryfmt)
BattlePetItemXSpeciesStore sBattlePetItemXSpeciesStore
Definition DB2Stores.cpp:48
DB2Storage< BattlePetAbilityEntry > sBattlePetAbilityStore(BattlePetAbilityfmt)
DB2Storage< BattlePetSpeciesStateEntry > sBattlePetSpeciesStateStore(BattlePetSpeciesStatefmt)
DB2Storage< BattlePetBreedQualityEntry > sBattlePetBreedQualityStore(BattlePetBreedQualityfmt)
std::map< uint32, DB2StorageBase * > DB2StorageMap
Definition DB2Stores.cpp:56
bool BattlePetHasSpeciesAbility(uint16 speciesId, uint8 abilitySlot, bool alternateAbility, uint8 level)
DB2Storage< KeyChainEntry > sKeyChainStore(KeyChainfmt)
#define BATTLE_PET_MAIN_STAT_VALUE
DB2Storage< SpellReagentsEntry > sSpellReagentsStore(SpellReagentsfmt)
float BattlePetSpeciesMainStat(uint16 stateId, uint16 speciesId)
void LoadDB2(uint32 &availableDb2Locales, DB2StoreProblemList &errlist, DB2Storage< T > &storage, std::string const &db2_path, std::string const &filename)
Definition DB2Stores.cpp:70
DB2Storage< BattlePetAbilityStateEntry > sBattlePetAbilityStateStore(BattlePetAbilityStatefmt)
DB2Storage< SceneScriptPackageEntry > sSceneScriptPackageStore(SceneScriptPackagefmt)
DB2StorageMap DB2Stores
Definition DB2Stores.cpp:57
DB2StorageBase const * GetDB2Storage(uint32 type)
std::list< std::string > DB2StoreProblemList
Definition DB2Stores.cpp:54
float BattlePetBreedMainStatModifier(uint16 stateId, uint8 breedId)
DB2Storage< BroadcastTextEntry > sBroadcastTextStore(BroadcastTextfmt)
void LoadDB2Stores(std::string const &dataPath)
DB2Storage< ItemSparseEntry > sItemSparseStore(ItemSparsefmt, &DB2Utilities::HasItemSparseEntry, &DB2Utilities::WriteItemSparseDbReply)
DB2Storage< ItemCurrencyCostEntry > sItemCurrencyCostStore(ItemCurrencyCostfmt)
BattlePetQualityMultiplierStore sBattlePetQualityMultiplierStore
Definition DB2Stores.cpp:51
float BattlePetQualityMultiplier(uint8 quality)
DB2Storage< ItemToBattlePetEntry > sItemToBattlePetStore(ItemToBattlePetfmt)
#define BATTLE_PET_MAIN_STAT_DIV
DB2Storage< BattlePetSpeciesEntry > sBattlePetSpeciesStore(BattlePetSpeciesfmt)
DB2Storage< BattlePetStateEntry > sBattlePetStateStore(BattlePetStatefmt)
DB2Storage< BattlePetBreedStateEntry > sBattlePetBreedStateStore(BattlePetBreedStatefmt)
DB2Storage< BattlePetAbilityTurnEntry > sBattlePetAbilityTurnStore(BattlePetAbilityTurnfmt)
BattlePetBreedSet sBattlePetBreedSet
Definition DB2Stores.cpp:47
BattlePetAbilityEffectByTurnStore sBattlePetAbilityEffectByTurnStore
Definition DB2Stores.cpp:50
BattlePetAbilityTurnByAbilityStore sBattlePetAbilityTurnByAbilityStore
Definition DB2Stores.cpp:49
DB2Storage< BattlePetAbilityEffectEntry > sBattlePetAbilityEffectStore(BattlePetAbilityEffectfmt)
#define BATTLE_PET_MAIN_STAT_OFFSET
DB2Storage< BattlePetSpeciesXAbilityEntry > sBattlePetSpeciesXAbilityStore(BattlePetSpeciesXAbilityfmt)
uint32 BattlePetGetSummonSpell(uint16 speciesId)
static bool LoadDB2_assert_print(uint32 fsize, uint32 rsize, std::string const &filename)
Definition DB2Stores.cpp:61
std::map< uint32, BattlePetAbilityEffectEntry const * > BattlePetAbilityEffectByTurnStore
Definition DB2Stores.h:33
std::multimap< uint32, std::pair< uint32, uint8 > > BattlePetAbilityTurnByAbilityStore
Definition DB2Stores.h:30
std::map< uint8, float > BattlePetQualityMultiplierStore
Definition DB2Stores.h:36
std::multimap< uint16, BattlePetSpeciesXAbilityEntry const * > BattlePetSpeciesXAbilityBySpeciesStore
Definition DB2Stores.h:39
std::map< uint32, uint16 > BattlePetItemXSpeciesStore
std::set< uint32 > BattlePetBreedSet
char const BattlePetSpeciesStatefmt[]
Definition DB2fmt.h:17
char const BattlePetEffectPropertiesfmt[]
Definition DB2fmt.h:15
char const Itemfmt[]
Definition DB2fmt.h:27
char const ItemCurrencyCostfmt[]
Definition DB2fmt.h:25
char const BattlePetBreedStatefmt[]
Definition DB2fmt.h:14
char const BattlePetAbilityStatefmt[]
Definition DB2fmt.h:11
char const BattlePetBreedQualityfmt[]
Definition DB2fmt.h:13
char const SceneScriptPackagefmt[]
Definition DB2fmt.h:37
char const BattlePetAbilityfmt[]
Definition DB2fmt.h:10
char const SpellReagentsfmt[]
Definition DB2fmt.h:39
char const BattlePetAbilityEffectfmt[]
Definition DB2fmt.h:9
char const KeyChainfmt[]
Definition DB2fmt.h:32
char const BattlePetStatefmt[]
Definition DB2fmt.h:19
char const ItemSparsefmt[]
Definition DB2fmt.h:28
char const BattlePetAbilityTurnfmt[]
Definition DB2fmt.h:12
char const BattlePetSpeciesXAbilityfmt[]
Definition DB2fmt.h:18
char const ItemToBattlePetfmt[]
Definition DB2fmt.h:29
char const BattlePetSpeciesfmt[]
Definition DB2fmt.h:16
char const BroadcastTextfmt[]
Definition DB2fmt.h:21
char const ItemExtendedCostEntryfmt[]
Definition DB2fmt.h:26
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint16_t uint16
Definition Define.h:78
#define ASSERT
Definition Errors.h:29
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
#define SF_LOG_INFO(filterType__,...)
Definition Log.h:137
@ ITEM_QUALITY_UNCOMMON
@ ITEM_QUALITY_RARE
@ ITEM_QUALITY_NORMAL
@ ITEM_QUALITY_LEGENDARY
@ ITEM_QUALITY_EPIC
static uint32 GetFormatRecordSize(std::string format, int32 *index_pos=NULL)
Interface class for common access.
Definition DB2Store.h:16
uint32 GetHash() const
Definition DB2Store.h:20
bool LoadStringsFrom(char const *fn, uint32 locale)
Definition DB2Store.h:163
uint32 GetFieldCount() const
Definition DB2Store.h:110
bool Load(char const *fn, uint32 locale)
Definition DB2Store.h:140
char const * GetFormat() const
Definition DB2Store.h:109
#define sWorld
Definition World.h:910
bool HasItemSparseEntry(DB2Storage< ItemSparseEntry > const &store, uint32 id)
void WriteItemDbReply(DB2Storage< ItemEntry > const &store, uint32 id, uint32 locale, ByteBuffer &buffer)
bool HasItemEntry(DB2Storage< ItemEntry > const &store, uint32 id)
void WriteItemSparseDbReply(DB2Storage< ItemSparseEntry > const &store, uint32 id, uint32 locale, ByteBuffer &buffer)
uint32 TurnEntryId
uint32 TurnIndex
uint32 Id
uint32 AbilityId
uint32 BreedId
uint32 StateId
uint32 Value
uint32 Flags
uint32 SpellId
int32 Modifier
uint32 SpeciesId
uint32 StateId
uint32 AbilityId
uint32 RequiredLevel
uint32 SpeciesId
uint32 SlotId