Files

30 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
local_dir=$(cd "$(dirname "$0")" && pwd)
client=${1:-/mnt/c/Games/Stonetavern-Classic-1.12.1-v1.8}
[[ -d "$client/Data" ]] || { echo "Client Data directory not found: $client/Data" >&2; exit 1; }
client=$(cd "$client" && pwd)
threads=${EXTRACT_THREADS:-2}
[[ "$threads" =~ ^[1-9][0-9]*$ ]] || { echo 'Invalid EXTRACT_THREADS' >&2; exit 1; }
mkdir -p "$local_dir/data"
# VMapExtractor refuses previously extracted Buildings; protect existing output.
if [[ -e "$local_dir/data/Buildings" ]]; then
echo 'data/Buildings already exists. Use a fresh output directory before extracting again.' >&2
exit 1
fi
docker build -f "$local_dir/Dockerfile.extractors" --build-arg BUILD_JOBS="${BUILD_JOBS:-2}" \
-t vmangos-extractors:local "$local_dir/../.."
docker run --rm --user "$(id -u):$(id -g)" \
--mount "type=bind,src=$client,dst=/client,readonly" \
--mount "type=bind,src=$local_dir/data,dst=/output" \
-e EXTRACT_THREADS="$threads" vmangos-extractors:local bash -euc '
/tools/MapExtractor -i /client -o /output --silent
mkdir -p 5875
if [[ ! -e 5875/dbc && ! -L 5875/dbc ]]; then ln -s ../dbc 5875/dbc; fi
/tools/VMapExtractor -d /client/Data --silent
mkdir -p vmaps mmaps
/tools/VMapAssembler Buildings vmaps --silent
python3 -u -c "import os,runpy; os.cpu_count=lambda:int(os.environ[\"EXTRACT_THREADS\"]); runpy.run_path(\"/tools/mmap_extract.py\",run_name=\"__main__\")" --configInputPath /tools/config.json --offMeshInput /tools/offmesh.txt
'
echo "Extracted server data: $local_dir/data"