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);
77 std::string db2_filename = db2_path + filename;
78 if (storage.
Load(db2_filename.c_str(),
uint32(
sWorld->GetDefaultDbcLocale())))
82 if (!(availableDb2Locales & (1 << i)))
88 std::string localizedName(db2_path);
90 localizedName.push_back(
'/');
91 localizedName.append(filename);
94 availableDb2Locales &= ~(1 << i);
100 if (FILE* f = fopen(db2_filename.c_str(),
"rb"))
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);
109 errlist.push_back(db2_filename);
117 std::string db2Path = dataPath +
"db2/";
120 uint32 availableDb2Locales = 0xFF;
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());
205 else if (!bad_db2_files.empty())
208 for (std::list<std::string>::iterator i = bad_db2_files.begin(); i != bad_db2_files.end(); ++i)
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());
220 DB2StorageMap::const_iterator itr =
DB2Stores.find(type);
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
264 if (stateEntry->
StateId == stateId && stateEntry->
BreedId == breedId)
309 return (speciesEntry->
Flags & flag) != 0;
317 std::pair<BattlePetSpeciesXAbilityBySpeciesStore::const_iterator, BattlePetSpeciesXAbilityBySpeciesStore::const_iterator> bounds =
320 for (BattlePetSpeciesXAbilityBySpeciesStore::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
326 bool const isAlternateAbility = abilityEntry->
RequiredLevel >= 10;
327 if (isAlternateAbility == alternateAbility)
340 bool const useAlternateAbility = (flags & selectedFlag) != 0;
342 uint32 defaultAbilityId = 0;
343 std::pair<BattlePetSpeciesXAbilityBySpeciesStore::const_iterator, BattlePetSpeciesXAbilityBySpeciesStore::const_iterator> bounds =
346 for (BattlePetSpeciesXAbilityBySpeciesStore::const_iterator itr = bounds.first; itr != bounds.second; ++itr)
349 if (!abilityEntry || abilityEntry->
SlotId != abilitySlot || abilityEntry->
RequiredLevel > level)
352 bool const alternateAbility = abilityEntry->
RequiredLevel >= 10;
353 if (!alternateAbility && !defaultAbilityId)
354 defaultAbilityId = abilityEntry->
AbilityId;
356 if (alternateAbility == useAlternateAbility)
360 return defaultAbilityId;
@ BATTLE_PET_STATE_STAT_STAMINA
@ BATTLE_PET_STATE_STAT_SPEED
@ BATTLE_PET_STATE_STAT_POWER
constexpr uint8 BATTLE_PET_ABILITY_SLOT_COUNT
@ BATTLE_PET_JOURNAL_FLAG_ABILITY_1
char const * localeNames[TOTAL_LOCALES]
const uint8 TOTAL_LOCALES
DB2Storage< ItemEntry > sItemStore(Itemfmt, &DB2Utilities::HasItemEntry, &DB2Utilities::WriteItemDbReply)
BattlePetSpeciesXAbilityBySpeciesStore sBattlePetSpeciesXAbilityBySpeciesStore
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
DB2Storage< BattlePetAbilityEntry > sBattlePetAbilityStore(BattlePetAbilityfmt)
DB2Storage< BattlePetSpeciesStateEntry > sBattlePetSpeciesStateStore(BattlePetSpeciesStatefmt)
DB2Storage< BattlePetBreedQualityEntry > sBattlePetBreedQualityStore(BattlePetBreedQualityfmt)
std::map< uint32, DB2StorageBase * > DB2StorageMap
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)
DB2Storage< BattlePetAbilityStateEntry > sBattlePetAbilityStateStore(BattlePetAbilityStatefmt)
DB2Storage< SceneScriptPackageEntry > sSceneScriptPackageStore(SceneScriptPackagefmt)
DB2StorageBase const * GetDB2Storage(uint32 type)
std::list< std::string > DB2StoreProblemList
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
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
BattlePetAbilityEffectByTurnStore sBattlePetAbilityEffectByTurnStore
BattlePetAbilityTurnByAbilityStore sBattlePetAbilityTurnByAbilityStore
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)
std::map< uint32, BattlePetAbilityEffectEntry const * > BattlePetAbilityEffectByTurnStore
std::multimap< uint32, std::pair< uint32, uint8 > > BattlePetAbilityTurnByAbilityStore
std::map< uint8, float > BattlePetQualityMultiplierStore
std::multimap< uint16, BattlePetSpeciesXAbilityEntry const * > BattlePetSpeciesXAbilityBySpeciesStore
std::map< uint32, uint16 > BattlePetItemXSpeciesStore
std::set< uint32 > BattlePetBreedSet
char const BattlePetSpeciesStatefmt[]
char const BattlePetEffectPropertiesfmt[]
char const ItemCurrencyCostfmt[]
char const BattlePetBreedStatefmt[]
char const BattlePetAbilityStatefmt[]
char const BattlePetBreedQualityfmt[]
char const SceneScriptPackagefmt[]
char const BattlePetAbilityfmt[]
char const SpellReagentsfmt[]
char const BattlePetAbilityEffectfmt[]
char const BattlePetStatefmt[]
char const ItemSparsefmt[]
char const BattlePetAbilityTurnfmt[]
char const BattlePetSpeciesXAbilityfmt[]
char const ItemToBattlePetfmt[]
char const BattlePetSpeciesfmt[]
char const BroadcastTextfmt[]
char const ItemExtendedCostEntryfmt[]
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
static uint32 GetFormatRecordSize(std::string format, int32 *index_pos=NULL)
Interface class for common access.
bool LoadStringsFrom(char const *fn, uint32 locale)
uint32 GetFieldCount() const
bool Load(char const *fn, uint32 locale)
char const * GetFormat() const
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)