diff --git a/src/db/Db.cpp b/src/db/Db.cpp index 3454533..7485e1c 100644 --- a/src/db/Db.cpp +++ b/src/db/Db.cpp @@ -2,6 +2,7 @@ #include "db/WowClientDB_Base.hpp" WowClientDB g_achievementDB; +WowClientDB g_cfg_CategoriesDB; void LoadDB(WowClientDB_Base* db, const char* filename, int32_t linenumber) { db->Load(filename, linenumber); @@ -9,6 +10,7 @@ void LoadDB(WowClientDB_Base* db, const char* filename, int32_t linenumber) { void StaticDBLoadAll(void (*loadFn)(WowClientDB_Base*, const char*, int32_t)) { loadFn(&g_achievementDB, __FILE__, __LINE__); + loadFn(&g_cfg_CategoriesDB, __FILE__, __LINE__); }; void ClientDBInitialize() { diff --git a/src/db/Db.hpp b/src/db/Db.hpp index 3dbc2fb..13bee54 100644 --- a/src/db/Db.hpp +++ b/src/db/Db.hpp @@ -2,9 +2,11 @@ #define DB_DB_HPP #include "db/rec/AchievementRec.hpp" +#include "db/rec/Cfg_CategoriesRec.hpp" #include "db/WowClientDB.hpp" extern WowClientDB g_achievementDB; +extern WowClientDB g_cfg_CategoriesDB; void ClientDBInitialize(); diff --git a/src/db/rec/Cfg_CategoriesRec.cpp b/src/db/rec/Cfg_CategoriesRec.cpp new file mode 100644 index 0000000..d4da728 --- /dev/null +++ b/src/db/rec/Cfg_CategoriesRec.cpp @@ -0,0 +1,45 @@ +#include "db/rec/Cfg_CategoriesRec.hpp" +#include "util/SFile.hpp" + +const char* Cfg_CategoriesRec::GetFilename() { + return "DBFilesClient\\Cfg_Categories.dbc"; +} + +bool Cfg_CategoriesRec::Read(SFile* f, const char* stringBuffer) { + uint32_t nameOfs[16]; + uint32_t nameMask; + + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_localeMask, sizeof(this->m_localeMask), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_createCharsetMask, sizeof(this->m_createCharsetMask), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_flags, sizeof(this->m_flags), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[0], sizeof(nameOfs[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[1], sizeof(nameOfs[1]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[2], sizeof(nameOfs[2]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[3], sizeof(nameOfs[3]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[4], sizeof(nameOfs[4]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[5], sizeof(nameOfs[5]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[6], sizeof(nameOfs[6]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[7], sizeof(nameOfs[7]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[8], sizeof(nameOfs[8]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[9], sizeof(nameOfs[9]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[10], sizeof(nameOfs[10]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[11], sizeof(nameOfs[11]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[12], sizeof(nameOfs[12]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[13], sizeof(nameOfs[13]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[14], sizeof(nameOfs[14]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[15], sizeof(nameOfs[15]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameMask, sizeof(nameMask), nullptr, nullptr, nullptr) + ) { + return false; + } + + if (stringBuffer) { + this->m_name = &stringBuffer[nameOfs[0]]; + } else { + this->m_name = ""; + } + + return true; +} diff --git a/src/db/rec/Cfg_CategoriesRec.hpp b/src/db/rec/Cfg_CategoriesRec.hpp new file mode 100644 index 0000000..734569b --- /dev/null +++ b/src/db/rec/Cfg_CategoriesRec.hpp @@ -0,0 +1,23 @@ +#ifndef DB_REC_CFG_CATEGORIES_REC_HPP +#define DB_REC_CFG_CATEGORIES_REC_HPP + +#include + +class SFile; + +class Cfg_CategoriesRec { + public: + static constexpr uint32_t columnCount = 21; + static constexpr uint32_t rowSize = 84; + + uint32_t m_ID; + uint32_t m_localeMask; + uint32_t m_createCharsetMask; + uint32_t m_flags; + const char *m_name; + + static const char* GetFilename(); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif