aboutsummaryrefslogtreecommitdiff
path: root/src/tools/map_extractor
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-07-01 00:34:51 +0200
committerShauren <shauren.trinity@gmail.com>2020-07-01 00:34:51 +0200
commit4499f203a3ee9d6567b2af9011ee9e4378de0eab (patch)
treee2a2b2f58794edaa41886bc3ffb201a4f8c66361 /src/tools/map_extractor
parent587bf750f74245f0f7bb3b88dc599738eacb0226 (diff)
Core/DataStores: Fixed sending localized hotfixes and improved db2 loading error messages
Diffstat (limited to 'src/tools/map_extractor')
-rw-r--r--src/tools/map_extractor/System.cpp51
1 files changed, 24 insertions, 27 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;
}