diff options
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/map_extractor/System.cpp | 51 | ||||
| -rw-r--r-- | src/tools/mmaps_generator/PathGenerator.cpp | 32 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/gameobject_extract.cpp | 8 | ||||
| -rw-r--r-- | src/tools/vmap4_extractor/vmapexport.cpp | 8 |
4 files changed, 58 insertions, 41 deletions
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index ecb4d00358e..8fb4e7f7a66 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -226,17 +226,26 @@ void HandleArgs(int argc, char* arg[]) } } +void TryLoadDB2(char const* name, DB2CascFileSource* source, DB2FileLoader* db2, DB2FileLoadInfo const* loadInfo) +{ + try + { + db2->Load(source, loadInfo); + } + catch (std::exception const& e) + { + printf("Fatal error: Invalid %s file format! %s\n%s\n", name, CASC::HumanReadableCASCError(GetLastError()), e.what()); + exit(1); + } +} + void ReadMapDBC() { printf("Read Map.db2 file...\n"); DB2CascFileSource source(CascStorage, MapLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, MapLoadInfo::Instance())) - { - printf("Fatal error: Invalid Map.db2 file format! %s\n", CASC::HumanReadableCASCError(GetLastError())); - exit(1); - } + TryLoadDB2("Map.db2", &source, &db2, MapLoadInfo::Instance()); map_ids.reserve(db2.GetRecordCount()); std::unordered_map<uint32, std::size_t> idToIndex; @@ -281,11 +290,7 @@ void ReadLiquidMaterialTable() DB2CascFileSource source(CascStorage, LiquidMaterialLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, LiquidMaterialLoadInfo::Instance())) - { - printf("Fatal error: Invalid LiquidMaterial.db2 file format!\n"); - exit(1); - } + TryLoadDB2("LiquidMaterial.db2", &source, &db2, LiquidMaterialLoadInfo::Instance()); for (uint32 x = 0; x < db2.GetRecordCount(); ++x) { @@ -309,11 +314,7 @@ void ReadLiquidObjectTable() DB2CascFileSource source(CascStorage, LiquidObjectLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, LiquidObjectLoadInfo::Instance())) - { - printf("Fatal error: Invalid LiquidObject.db2 file format!\n"); - exit(1); - } + TryLoadDB2("LiquidObject.db2", &source, &db2, LiquidObjectLoadInfo::Instance()); for (uint32 x = 0; x < db2.GetRecordCount(); ++x) { @@ -337,11 +338,7 @@ void ReadLiquidTypeTable() DB2CascFileSource source(CascStorage, LiquidTypeLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, LiquidTypeLoadInfo::Instance())) - { - printf("Fatal error: Invalid LiquidType.db2 file format!\n"); - exit(1); - } + TryLoadDB2("LiquidType.db2", &source, &db2, LiquidTypeLoadInfo::Instance()); for (uint32 x = 0; x < db2.GetRecordCount(); ++x) { @@ -366,11 +363,7 @@ bool ReadCinematicCameraDBC() DB2CascFileSource source(CascStorage, CinematicCameraLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, CinematicCameraLoadInfo::Instance())) - { - printf("Invalid CinematicCamera.db2 file format. Camera extract aborted. %s\n", CASC::HumanReadableCASCError(GetLastError())); - return false; - } + TryLoadDB2("CinematicCamera.db2", &source, &db2, CinematicCameraLoadInfo::Instance()); // get camera file list from DB2 for (size_t i = 0; i < db2.GetRecordCount(); ++i) @@ -1223,9 +1216,13 @@ bool ExtractDB2File(uint32 fileDataId, char const* cascFileName, int locale, boo } DB2FileLoader db2; - if (!db2.LoadHeaders(&source, nullptr)) + try + { + db2.LoadHeaders(&source, nullptr); + } + catch (std::exception const& e) { - printf("Can't read DB2 headers of '%s'\n", cascFileName); + printf("Can't read DB2 headers of '%s': %s\n", cascFileName, e.what()); return false; } diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 2acee4e3fbc..f9ba6a2cdb4 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -275,13 +275,14 @@ int finish(const char* message, int returnValue) return returnValue; } -std::unordered_map<uint32, uint8> LoadLiquid(std::string const& locale) +std::unordered_map<uint32, uint8> LoadLiquid(std::string const& locale, bool silent, int32 errorExitCode) { DB2FileLoader liquidDb2; std::unordered_map<uint32, uint8> liquidData; DB2FileSystemSource liquidTypeSource((boost::filesystem::path("dbc") / locale / "LiquidType.db2").string()); - if (liquidDb2.Load(&liquidTypeSource, LiquidTypeLoadInfo::Instance())) + try { + liquidDb2.Load(&liquidTypeSource, LiquidTypeLoadInfo::Instance()); for (uint32 x = 0; x < liquidDb2.GetRecordCount(); ++x) { DB2Record record = liquidDb2.GetRecord(x); @@ -291,17 +292,25 @@ std::unordered_map<uint32, uint8> LoadLiquid(std::string const& locale) liquidData[record.GetId()] = record.GetUInt8("SoundBank"); } } + catch (std::exception const& e) + { + if (silent) + exit(errorExitCode); + + exit(finish(e.what(), errorExitCode)); + } return liquidData; } -std::unordered_map<uint32, std::vector<uint32>> LoadMap(std::string const& locale) +std::unordered_map<uint32, std::vector<uint32>> LoadMap(std::string const& locale, bool silent, int32 errorExitCode) { DB2FileLoader mapDb2; std::unordered_map<uint32, std::vector<uint32>> mapData; DB2FileSystemSource mapSource((boost::filesystem::path("dbc") / locale / "Map.db2").string()); - if (mapDb2.Load(&mapSource, MapLoadInfo::Instance())) + try { + mapDb2.Load(&mapSource, MapLoadInfo::Instance()); for (uint32 x = 0; x < mapDb2.GetRecordCount(); ++x) { DB2Record record = mapDb2.GetRecord(x); @@ -314,6 +323,13 @@ std::unordered_map<uint32, std::vector<uint32>> LoadMap(std::string const& local mapData[parentMapId].push_back(record.GetId()); } } + catch (std::exception const& e) + { + if (silent) + exit(errorExitCode); + + exit(finish(e.what(), errorExitCode)); + } return mapData; } @@ -360,13 +376,9 @@ int main(int argc, char** argv) if (!checkDirectories(debugOutput, dbcLocales)) return silent ? -3 : finish("Press ENTER to close...", -3); - _liquidTypes = LoadLiquid(dbcLocales[0]); - if (_liquidTypes.empty()) - return silent ? -5 : finish("Failed to load LiquidType.db2", -5); + _liquidTypes = LoadLiquid(dbcLocales[0], silent, -5); - std::unordered_map<uint32, std::vector<uint32>> mapData = LoadMap(dbcLocales[0]); - if (mapData.empty()) - return silent ? -4 : finish("Failed to load Map.db2", -4); + std::unordered_map<uint32, std::vector<uint32>> mapData = LoadMap(dbcLocales[0], silent, -4); static_cast<VMAP::VMapManager2*>(VMAP::VMapFactory::createOrGetVMapManager())->InitializeThreadUnsafe(mapData); static_cast<VMAP::VMapManager2*>(VMAP::VMapFactory::createOrGetVMapManager())->GetLiquidFlagsPtr = [](uint32 liquidId) -> uint32 diff --git a/src/tools/vmap4_extractor/gameobject_extract.cpp b/src/tools/vmap4_extractor/gameobject_extract.cpp index db31a26bc06..7247398dd43 100644 --- a/src/tools/vmap4_extractor/gameobject_extract.cpp +++ b/src/tools/vmap4_extractor/gameobject_extract.cpp @@ -80,9 +80,13 @@ void ExtractGameobjectModels() DB2CascFileSource source(CascStorage, GameobjectDisplayInfoLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, GameobjectDisplayInfoLoadInfo::Instance())) + try { - printf("Fatal error: Invalid GameObjectDisplayInfo.db2 file format!\n"); + db2.Load(&source, GameobjectDisplayInfoLoadInfo::Instance()); + } + catch (std::exception const& e) + { + printf("Fatal error: Invalid GameObjectDisplayInfo.db2 file format!\n%s\n", e.what()); exit(1); } diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 800819fa9af..3b4ac9aba25 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -478,9 +478,13 @@ int main(int argc, char ** argv) DB2CascFileSource source(CascStorage, MapLoadInfo::Instance()->Meta->FileDataId); DB2FileLoader db2; - if (!db2.Load(&source, MapLoadInfo::Instance())) + try { - printf("Fatal error: Invalid Map.db2 file format! %s\n", CASC::HumanReadableCASCError(GetLastError())); + db2.Load(&source, MapLoadInfo::Instance()); + } + catch (std::exception const& e) + { + printf("Fatal error: Invalid Map.db2 file format! %s\n%s\n", CASC::HumanReadableCASCError(GetLastError()), e.what()); exit(1); } |
