Skip to content

Instantly share code, notes, and snippets.

@Daribon
Created March 19, 2026 18:40
Show Gist options
  • Select an option

  • Save Daribon/f2148639837476d7b4f02153daf2d5b7 to your computer and use it in GitHub Desktop.

Select an option

Save Daribon/f2148639837476d7b4f02153daf2d5b7 to your computer and use it in GitHub Desktop.
vmangos easy extractor windows
@echo off
setlocal EnableDelayedExpansion
echo.
echo === Easy VMaNGOS Data Extractor ===
echo.
set /p "WOW_CLIENT_INPUT=WoW client path: "
:: Sanitize path (remove quotes, single quotes, trailing slashes)
set "WOW_CLIENT_PATH=%WOW_CLIENT_INPUT:"=%"
set "WOW_CLIENT_PATH=%WOW_CLIENT_PATH:'=%"
if "%WOW_CLIENT_PATH:~-1%"=="\" (
if not "%WOW_CLIENT_PATH%"=="\" set "WOW_CLIENT_PATH=%WOW_CLIENT_PATH:~0,-1%"
)
if not exist "%WOW_CLIENT_PATH%\Data" (
echo Error: Directory does not contain a 'Data\' folder.
pause
exit /b 1
)
:: Build detection: WMIC primary, PowerShell fallback
echo Detecting client build number...
set "WMIC_PATH=%WOW_CLIENT_PATH:\=\\%\\WoW.exe"
for /f "tokens=2 delims==" %%v in ('wmic datafile where "name^='!WMIC_PATH!'" get Version /value 2^>nul ^| find "Version="') do set "VER=%%v"
if not defined VER (
for /f "usebackq tokens=*" %%v in (`powershell -NoProfile -Command "(Get-Item '%WOW_CLIENT_PATH%\WoW.exe').VersionInfo.FileVersion" 2^>nul`) do set "VER=%%v"
)
if not defined VER (
echo Error: Could not detect build number from WoW.exe
pause
exit /b 1
)
:: Parse build number
for /f "tokens=1,2,3,4 delims=." %%a in ("!VER!") do (
if not "%%d"=="" (set "BUILD_NUMBER=%%d") else if not "%%c"=="" (set "BUILD_NUMBER=%%c") else (set "BUILD_NUMBER=%%b")
)
if not defined BUILD_NUMBER (
echo Error: Failed to parse build number from version: %VER%
pause
exit /b 1
)
set "BUILD_NUMBER=%BUILD_NUMBER: =%"
echo Detected build: %BUILD_NUMBER%
echo Using client data from: %WOW_CLIENT_PATH%\Data
echo.
set /p "DATA_DIR_INPUT=Output data directory: "
set "DATA_DIR=%DATA_DIR_INPUT:"=%"
if "%DATA_DIR:~-1%"=="\" (
if not "%DATA_DIR%"=="\" set "DATA_DIR=%DATA_DIR:~0,-1%"
)
if not exist "%DATA_DIR%" mkdir "%DATA_DIR%"
set "BIN_DIR=%~dp0"
set "BIN_DIR=%BIN_DIR:~0,-1%"
for %%e in (MapExtractor.exe VMapExtractor.exe VMapAssembler.exe MoveMapGenerator.exe) do (
if not exist "%BIN_DIR%\%%e" (
echo Error: Required extractor not found: %%e
pause
exit /b 1
)
)
cd /d "%DATA_DIR%" || exit /b 1
echo.
echo Extracting maps and DBC files...
"%BIN_DIR%\MapExtractor.exe" -i "%WOW_CLIENT_PATH%" -o "%DATA_DIR%" -e 7
if errorlevel 1 (
echo Error: MapExtractor failed!
pause
exit /b 1
)
if exist "dbc" (
if exist "%BUILD_NUMBER%\dbc" (
echo Removing old DBC data...
rd /s /q "%BUILD_NUMBER%\dbc"
)
mkdir "%BUILD_NUMBER%" 2>nul
move "dbc" "%BUILD_NUMBER%\dbc" >nul
echo [OK] DBC files installed to %BUILD_NUMBER%\dbc\
) else (
echo Error: dbc folder not created by MapExtractor
pause
exit /b 1
)
echo.
echo Extracting VMaps...
"%BIN_DIR%\VMapExtractor.exe" -d "%WOW_CLIENT_PATH%\Data"
if errorlevel 1 (
echo Error: VMapExtractor failed!
pause
exit /b 1
)
echo Assembling VMaps...
"%BIN_DIR%\VMapAssembler.exe"
if errorlevel 1 (
echo Error: VMapAssembler failed!
pause
exit /b 1
)
echo.
echo Generating movement maps (this may take a while)...
"%BIN_DIR%\MoveMapGenerator.exe" --threads %NUMBER_OF_PROCESSORS% --silent --configInputPath "%BIN_DIR%\config.json" --offMeshInput "%BIN_DIR%\offmesh.txt"
if errorlevel 1 (
echo Error: MoveMapGenerator failed!
pause
exit /b 1
)
:: Cleanup temp files
rd /s /q "Buildings" 2>nul
rd /s /q "Cameras" 2>nul
echo.
echo =============================================================
echo Extraction finished successfully!
echo.
echo Data structure:
echo %DATA_DIR%\maps\ - game maps
echo %DATA_DIR%\%BUILD_NUMBER%\dbc\ - DBC files (build %BUILD_NUMBER%)
echo %DATA_DIR%\vmaps\ - visual maps
echo %DATA_DIR%\mmaps\ - movement maps
echo =============================================================
echo.
pause
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment