diff --git a/src/db/Db.cpp b/src/db/Db.cpp index c54ebb7..ae9d7b5 100644 --- a/src/db/Db.cpp +++ b/src/db/Db.cpp @@ -5,6 +5,7 @@ WowClientDB g_achievementDB; WowClientDB g_cfg_CategoriesDB; WowClientDB g_cfg_ConfigsDB; WowClientDB g_chrRacesDB; +WowClientDB g_mapDB; void LoadDB(WowClientDB_Base* db, const char* filename, int32_t linenumber) { db->Load(filename, linenumber); @@ -15,6 +16,7 @@ void StaticDBLoadAll(void (*loadFn)(WowClientDB_Base*, const char*, int32_t)) { loadFn(&g_cfg_CategoriesDB, __FILE__, __LINE__); loadFn(&g_cfg_ConfigsDB, __FILE__, __LINE__); loadFn(&g_chrRacesDB, __FILE__, __LINE__); + loadFn(&g_mapDB, __FILE__, __LINE__); }; void ClientDBInitialize() { diff --git a/src/db/Db.hpp b/src/db/Db.hpp index 0c5d172..319722e 100644 --- a/src/db/Db.hpp +++ b/src/db/Db.hpp @@ -1,16 +1,18 @@ #ifndef DB_DB_HPP #define DB_DB_HPP +#include "db/WowClientDB.hpp" #include "db/rec/AchievementRec.hpp" #include "db/rec/Cfg_CategoriesRec.hpp" #include "db/rec/Cfg_ConfigsRec.hpp" #include "db/rec/ChrRacesRec.hpp" -#include "db/WowClientDB.hpp" +#include "db/rec/MapRec.hpp" extern WowClientDB g_achievementDB; extern WowClientDB g_cfg_CategoriesDB; extern WowClientDB g_cfg_ConfigsDB; extern WowClientDB g_chrRacesDB; +extern WowClientDB g_mapDB; void ClientDBInitialize(); diff --git a/src/db/rec/MapRec.cpp b/src/db/rec/MapRec.cpp new file mode 100644 index 0000000..6148ff7 --- /dev/null +++ b/src/db/rec/MapRec.cpp @@ -0,0 +1,121 @@ +#include "db/rec/MapRec.hpp" +#include "util/SFile.hpp" + +const char* MapRec::GetFilename() { + return "DBFilesClient\\Map.dbc"; +} + +uint32_t MapRec::GetNumColumns() { + return 66; +} + +uint32_t MapRec::GetRowSize() { + return 264; +} + +bool MapRec::NeedIDAssigned() { + return false; +} + +int32_t MapRec::GetID() { + return this->m_ID; +} + +void MapRec::SetID(int32_t id) { + this->m_ID = id; +} + +bool MapRec::Read(SFile* f, const char* stringBuffer) { + uint32_t directoryOfs; + uint32_t mapNameOfs[16]; + uint32_t mapNameMask; + uint32_t mapDescription0Ofs[16]; + uint32_t mapDescription0Mask; + uint32_t mapDescription1Ofs[16]; + uint32_t mapDescription1Mask; + + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &directoryOfs, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_instanceType, sizeof(this->m_instanceType), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_flags, sizeof(this->m_flags), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_pvp, sizeof(this->m_pvp), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[0], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[1], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[2], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[3], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[4], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[5], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[6], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[7], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[8], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[9], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[10], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[11], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[12], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[13], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[14], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameOfs[15], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapNameMask, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_areaTableID, sizeof(this->m_areaTableID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[0], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[1], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[2], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[3], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[4], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[5], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[6], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[7], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[8], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[9], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[10], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[11], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[12], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[13], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[14], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Ofs[15], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription0Mask, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[0], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[1], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[2], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[3], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[4], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[5], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[6], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[7], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[8], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[9], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[10], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[11], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[12], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[13], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[14], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Ofs[15], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &mapDescription1Mask, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_loadingScreenID, sizeof(this->m_loadingScreenID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_minimapIconScale, sizeof(this->m_minimapIconScale), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_corpseMapID, sizeof(this->m_corpseMapID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_corpse[0], sizeof(m_corpse[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_corpse[1], sizeof(m_corpse[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_timeOfDayOverride, sizeof(this->m_timeOfDayOverride), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_expansionID, sizeof(this->m_expansionID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_raidOffset, sizeof(this->m_raidOffset), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_maxPlayers, sizeof(this->m_maxPlayers), nullptr, nullptr, nullptr) + ) { + return false; + } + + if (stringBuffer) { + this->m_directory = &stringBuffer[directoryOfs]; + this->m_mapName = &stringBuffer[mapNameOfs[0]]; + this->m_mapDescription0 = &stringBuffer[mapDescription0Ofs[0]]; + this->m_mapDescription1 = &stringBuffer[mapDescription1Ofs[0]]; + } else { + this->m_directory = ""; + this->m_mapName = ""; + this->m_mapDescription0 = ""; + this->m_mapDescription1 = ""; + } + + return true; +} diff --git a/src/db/rec/MapRec.hpp b/src/db/rec/MapRec.hpp new file mode 100644 index 0000000..cc4bd2c --- /dev/null +++ b/src/db/rec/MapRec.hpp @@ -0,0 +1,37 @@ +#ifndef DB_REC_MAP_REC_HPP +#define DB_REC_MAP_REC_HPP + +#include + +class SFile; + +class MapRec { + public: + int32_t m_ID; + const char* m_directory; + int32_t m_instanceType; + int32_t m_flags; // unconfirmed + int32_t m_pvp; + const char* m_mapName; + int32_t m_areaTableID; + const char* m_mapDescription0; + const char* m_mapDescription1; + int32_t m_loadingScreenID; + float m_minimapIconScale; + int32_t m_corpseMapID; + float m_corpse[2]; + int32_t m_timeOfDayOverride; + int32_t m_expansionID; + int32_t m_raidOffset; + int32_t m_maxPlayers; + + static const char* GetFilename(); + static uint32_t GetNumColumns(); + static uint32_t GetRowSize(); + static bool NeedIDAssigned(); + int32_t GetID(); + void SetID(int32_t id); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif