aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Scripting/ScriptMgr.h1
-rw-r--r--src/tools/map_extractor/System.cpp89
2 files changed, 86 insertions, 4 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index b3436c4773e..a8458af987b 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -21,6 +21,7 @@
#include "Common.h"
#include <atomic>
+#include "DB2Stores.h"
#include "QuestDef.h"
#include "SharedDefines.h"
#include "World.h"
diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp
index 9005a7ba936..db5cd5da0f9 100644
--- a/src/tools/map_extractor/System.cpp
+++ b/src/tools/map_extractor/System.cpp
@@ -109,11 +109,12 @@ struct MapMeta
enum Extract
{
EXTRACT_MAP = 1,
- EXTRACT_DBC = 2
+ EXTRACT_DBC = 2,
+ EXTRACT_GT = 8
};
// Select data for extract
-int CONF_extract = EXTRACT_MAP | EXTRACT_DBC;
+int CONF_extract = EXTRACT_MAP | EXTRACT_DBC | EXTRACT_GT;
// This option allow limit minimum height to some value (Allow save some memory)
bool CONF_allow_height_limit = true;
@@ -176,7 +177,7 @@ void Usage(char const* prg)
"%s -[var] [value]\n"\
"-i set input path (max %d characters)\n"\
"-o set output path (max %d characters)\n"\
- "-e extract only MAP(1)/DBC(2) - standard: both(3)\n"\
+ "-e extract only MAP(1)/DBC(2)/gt(8) - standard: all(11)\n"\
"-f height stored as int (less map size but lost some accuracy) 1 by default\n"\
"-l dbc locale\n"\
"Example: %s -f 0 -i \"c:\\games\\game\"\n", prg, MAX_PATH_LENGTH - 1, MAX_PATH_LENGTH - 1, prg);
@@ -226,7 +227,7 @@ void HandleArgs(int argc, char* arg[])
if (c + 1 < argc) // all ok
{
CONF_extract = atoi(arg[c++ + 1]);
- if (!(CONF_extract > 0 && CONF_extract < 4))
+ if (!(CONF_extract > 0 && CONF_extract < 12))
Usage(arg[0]);
}
else
@@ -1203,6 +1204,79 @@ void ExtractDBFilesClient(int l)
printf("Extracted %u files\n\n", count);
}
+void ExtractGameTables()
+{
+ printf("Extracting game tables...\n");
+
+ std::string outputPath = output_path;
+ outputPath += "/gt/";
+
+ CreateDir(outputPath);
+
+ printf("output path %s\n", outputPath.c_str());
+
+ char const* GameTables[] =
+ {
+ "GameTables\\ArmorMitigationByLvl.txt",
+ "GameTables\\artifactLevelXP.txt",
+ "GameTables\\BarberShopCostBase.txt",
+ "GameTables\\BaseMp.txt",
+ "GameTables\\BattlePetTypeDamageMod.txt",
+ "GameTables\\battlePetXP.txt",
+ "GameTables\\ChallengeModeDamage.txt",
+ "GameTables\\ChallengeModeHealth.txt",
+ "GameTables\\CombatRatings.txt",
+ "GameTables\\CombatRatingsMultByILvl.txt",
+ "GameTables\\HonorLevel.txt",
+ "GameTables\\HpPerSta.txt",
+ "GameTables\\ItemSocketCostPerLevel.txt",
+ "GameTables\\NpcDamageByClass.txt",
+ "GameTables\\NpcDamageByClassExp1.txt",
+ "GameTables\\NpcDamageByClassExp2.txt",
+ "GameTables\\NpcDamageByClassExp3.txt",
+ "GameTables\\NpcDamageByClassExp4.txt",
+ "GameTables\\NpcDamageByClassExp5.txt",
+ "GameTables\\NpcDamageByClassExp6.txt",
+ "GameTables\\NpcManaCostScaler.txt",
+ "GameTables\\NpcTotalHp.txt",
+ "GameTables\\NpcTotalHpExp1.txt",
+ "GameTables\\NpcTotalHpExp2.txt",
+ "GameTables\\NpcTotalHpExp3.txt",
+ "GameTables\\NpcTotalHpExp4.txt",
+ "GameTables\\NpcTotalHpExp5.txt",
+ "GameTables\\NpcTotalHpExp6.txt",
+ "GameTables\\SandboxScaling.txt",
+ "GameTables\\SpellScaling.txt",
+ "GameTables\\xp.txt",
+ nullptr
+ };
+
+ uint32 index = 0;
+ uint32 count = 0;
+ char const* fileName = GameTables[index];
+ HANDLE dbcFile;
+ while (fileName)
+ {
+ std::string filename = fileName;
+ if (CascOpenFile(CascStorage, filename.c_str(), CASC_LOCALE_NONE, 0, &dbcFile))
+ {
+ filename = outputPath + filename.substr(filename.rfind('\\') + 1);
+
+ if (!boost::filesystem::exists(filename))
+ if (ExtractFile(dbcFile, filename))
+ ++count;
+
+ CascCloseFile(dbcFile);
+ }
+ else
+ printf("Unable to open file %s in the archive: %s\n", fileName, HumanReadableCASCError(GetLastError()));
+
+ fileName = GameTables[++index];
+ }
+
+ printf("Extracted %u files\n\n", count);
+}
+
bool OpenCascStorage(int locale)
{
try
@@ -1286,6 +1360,13 @@ int main(int argc, char * arg[])
return 0;
}
+ if (CONF_extract & EXTRACT_GT)
+ {
+ OpenCascStorage(FirstLocale);
+ ExtractGameTables();
+ CascCloseStorage(CascStorage);
+ }
+
if (CONF_extract & EXTRACT_MAP)
{
OpenCascStorage(FirstLocale);