aboutsummaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/map_extractor/System.cpp51
-rw-r--r--src/tools/mmaps_generator/PathGenerator.cpp32
-rw-r--r--src/tools/vmap4_extractor/gameobject_extract.cpp8
-rw-r--r--src/tools/vmap4_extractor/vmapexport.cpp8
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);
}