From 323186cce22f5f30eb92a410274e53b776e4dddb Mon Sep 17 00:00:00 2001 From: uprightbass360 Date: Sun, 26 Oct 2025 03:03:02 -0400 Subject: [PATCH] fix: missing mod-playerbots module process --- .gitignore | 1 + deploy.sh | 3 ++ scripts/manage-modules.sh | 21 ++++++++---- scripts/rebuild-with-modules.sh | 8 +++-- setup.sh | 58 +++++++++++++++++++++++++++++---- 5 files changed, 76 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 3f62a5e..f048aa9 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ node_modules/ .env package-lock.json package.json +.modules_state \ No newline at end of file diff --git a/deploy.sh b/deploy.sh index 7c84d90..9c63740 100755 --- a/deploy.sh +++ b/deploy.sh @@ -61,6 +61,9 @@ Options: --keep-running Do not pre-stop runtime stack before rebuild --skip-rebuild Skip source rebuild even if modules require it --yes, -y Auto-confirm deployment and rebuild prompts + --watch-logs Tail worldserver logs even if --no-watch was set earlier + --log-tail LINES Override WORLD_LOG_TAIL (number of log lines to show) + --once Run status checks once (alias for --no-watch) -h, --help Show this help This command automates the module workflow: sync modules, rebuild source if needed, diff --git a/scripts/manage-modules.sh b/scripts/manage-modules.sh index 403d799..1433a18 100755 --- a/scripts/manage-modules.sh +++ b/scripts/manage-modules.sh @@ -225,14 +225,20 @@ fi echo 'Installing enabled modules...' -# Playerbots handling - integrated into custom AzerothCore branch -if [ "$MODULE_PLAYERBOTS" = "1" ]; then - echo '🤖 Playerbots module enabled...' - echo ' 📖 Playerbots are integrated into the uprightbass360/azerothcore-wotlk-playerbots source' - echo ' â„šī¸ No separate module repository needed - functionality built into core' - echo ' 🔧 REBUILD REQUIRED: Container must be rebuilt with playerbots source' +# Playerbots handling - integrated into uprightbass360 AzerothCore fork +if [ "$MODULE_PLAYERBOTS" = "1" ] && [ ! -d "mod-playerbots" ]; then + echo '🤖 Installing mod-playerbots module (required for uprightbass360 images)...' + echo ' 📖 Project: https://github.com/mod-playerbots/mod-playerbots' + echo ' â„šī¸ Core C++ functionality built into uprightbass360/azerothcore-wotlk-playerbots images' + echo ' đŸ—„ī¸ Installing SQL schemas, configurations, and database structure' + echo ' 🔧 Module provides: DBC tables, bot names, AI configs, travel nodes, etc.' echo ' 📋 POST-INSTALL: Requires manual account/character configuration' - # No git clone needed - playerbots are integrated into the source tree + + # Clone the official mod-playerbots module for SQL and configuration files + git clone https://github.com/mod-playerbots/mod-playerbots.git mod-playerbots + + echo ' ✅ mod-playerbots module installed successfully' + echo ' 📊 Module contains SQL for 3 databases: world, characters, playerbots' fi # Install AOE Loot if enabled @@ -723,6 +729,7 @@ REBUILD_REQUIRED=0 # Create current module state hash for module_var in MODULE_PLAYERBOTS MODULE_AOE_LOOT MODULE_LEARN_SPELLS MODULE_FIREWORKS MODULE_INDIVIDUAL_PROGRESSION MODULE_AHBOT MODULE_AUTOBALANCE MODULE_TRANSMOG MODULE_NPC_BUFFER MODULE_DYNAMIC_XP MODULE_SOLO_LFG MODULE_1V1_ARENA MODULE_PHASED_DUELS MODULE_BREAKING_NEWS MODULE_BOSS_ANNOUNCER MODULE_ACCOUNT_ACHIEVEMENTS MODULE_AUTO_REVIVE MODULE_GAIN_HONOR_GUARD MODULE_ELUNA MODULE_TIME_IS_TIME MODULE_POCKET_PORTAL MODULE_RANDOM_ENCHANTS MODULE_SOLOCRAFT MODULE_PVP_TITLES MODULE_NPC_BEASTMASTER MODULE_NPC_ENCHANTER MODULE_INSTANCE_RESET MODULE_LEVEL_GRANT MODULE_ARAC MODULE_ASSISTANT MODULE_REAGENT_BANK MODULE_BLACK_MARKET_AUCTION_HOUSE MODULE_CHALLENGE_MODES MODULE_OLLAMA_CHAT MODULE_PLAYER_BOT_LEVEL_BRACKETS MODULE_STATBOOSTER MODULE_DUNGEON_RESPAWN MODULE_SKELETON_MODULE MODULE_BG_SLAVERYVALLEY MODULE_AZEROTHSHARD MODULE_WORGOBLIN MODULE_ELUNA_TS; do eval "value=\$$module_var" + value="${value:-0}" CURRENT_STATE="$CURRENT_STATE$module_var=$value|" done diff --git a/scripts/rebuild-with-modules.sh b/scripts/rebuild-with-modules.sh index 2e271b8..69b9912 100755 --- a/scripts/rebuild-with-modules.sh +++ b/scripts/rebuild-with-modules.sh @@ -175,8 +175,12 @@ fi SOURCE_COMPOSE="$REBUILD_SOURCE_PATH/docker-compose.yml" if [ ! -f "$SOURCE_COMPOSE" ]; then - echo "❌ Source docker-compose.yml not found at $SOURCE_COMPOSE" - exit 1 + if [ -f "$REBUILD_SOURCE_PATH/apps/docker/docker-compose.yml" ]; then + SOURCE_COMPOSE="$REBUILD_SOURCE_PATH/apps/docker/docker-compose.yml" + else + echo "❌ Source docker-compose.yml not found at $REBUILD_SOURCE_PATH (checked $SOURCE_COMPOSE and apps/docker/docker-compose.yml)" + exit 1 + fi fi declare -A MODULE_REPO_MAP=( diff --git a/setup.sh b/setup.sh index 882e11f..1648fb7 100755 --- a/setup.sh +++ b/setup.sh @@ -407,6 +407,7 @@ Options: --auto-rebuild-on-deploy Enable automatic rebuild during deploys --run-rebuild-now Trigger module rebuild after setup completes --modules-rebuild-source PATH Source checkout used for module rebuilds + --deploy-after Run ./deploy.sh automatically after setup completes --force Overwrite existing .env without prompting EOF exit 0 @@ -567,6 +568,10 @@ EOF FORCE_OVERWRITE=1 shift ;; + --deploy-after) + CLI_DEPLOY_AFTER=1 + shift + ;; *) echo "Unknown argument: $1" >&2 echo "Use --help for usage" >&2 @@ -1125,7 +1130,7 @@ fi if [ ! -f "$rebuild_source_path/docker-compose.yml" ]; then say INFO "Preparing source repository via scripts/setup-source.sh (progress will stream below)" if ! ( set -o pipefail; ./scripts/setup-source.sh 2>&1 | while IFS= read -r line; do - say INFO "[setup-source] $line" + say INFO "[setup-source]" "$line" done ); then say WARNING "Source setup encountered issues; running interactively." if ! ./scripts/setup-source.sh; then @@ -1167,10 +1172,14 @@ fi # Run module staging script in local modules directory # Set environment variable to indicate we're running locally export MODULES_LOCAL_RUN=1 + if [ -n "$host_modules_dir" ]; then + mkdir -p "$host_modules_dir" + rm -f "$host_modules_dir/.modules_state" "$host_modules_dir/.requires_rebuild" 2>/dev/null || true + fi + if (cd "$local_modules_dir" && bash "$SCRIPT_DIR/scripts/manage-modules.sh"); then say SUCCESS "Module repositories staged to $local_modules_dir" if [ -n "$host_modules_dir" ]; then - mkdir -p "$host_modules_dir" if [ -f "$local_modules_dir/.modules_state" ]; then cp "$local_modules_dir/.modules_state" "$host_modules_dir/.modules_state" 2>/dev/null || true fi @@ -1366,6 +1375,32 @@ NETWORK_SUBNET=$DEFAULT_NETWORK_SUBNET NETWORK_GATEWAY=$DEFAULT_NETWORK_GATEWAY EOF + local storage_abs_path="$STORAGE_PATH" + if [[ "$storage_abs_path" != /* ]]; then + storage_abs_path="$(pwd)/${storage_abs_path#./}" + fi + local host_modules_dir="${storage_abs_path}/modules" + mkdir -p "$host_modules_dir" + + local -a MODULE_STATE_VARS=( + MODULE_PLAYERBOTS MODULE_AOE_LOOT MODULE_LEARN_SPELLS MODULE_FIREWORKS MODULE_INDIVIDUAL_PROGRESSION + MODULE_AHBOT MODULE_AUTOBALANCE MODULE_TRANSMOG MODULE_NPC_BUFFER MODULE_DYNAMIC_XP MODULE_SOLO_LFG + MODULE_1V1_ARENA MODULE_PHASED_DUELS MODULE_BREAKING_NEWS MODULE_BOSS_ANNOUNCER MODULE_ACCOUNT_ACHIEVEMENTS + MODULE_AUTO_REVIVE MODULE_GAIN_HONOR_GUARD MODULE_ELUNA MODULE_TIME_IS_TIME MODULE_POCKET_PORTAL + MODULE_RANDOM_ENCHANTS MODULE_SOLOCRAFT MODULE_PVP_TITLES MODULE_NPC_BEASTMASTER MODULE_NPC_ENCHANTER + MODULE_INSTANCE_RESET MODULE_LEVEL_GRANT MODULE_ARAC MODULE_ASSISTANT MODULE_REAGENT_BANK + MODULE_BLACK_MARKET_AUCTION_HOUSE MODULE_CHALLENGE_MODES MODULE_OLLAMA_CHAT MODULE_PLAYER_BOT_LEVEL_BRACKETS + MODULE_STATBOOSTER MODULE_DUNGEON_RESPAWN MODULE_SKELETON_MODULE MODULE_BG_SLAVERYVALLEY MODULE_AZEROTHSHARD + MODULE_WORGOBLIN MODULE_ELUNA_TS + ) + local module_state_string="" + for module_state_var in "${MODULE_STATE_VARS[@]}"; do + local module_value="${!module_state_var:-0}" + module_state_string+="${module_state_var}=${module_value}|" + done + printf '%s' "$module_state_string" > "${host_modules_dir}/.modules_state" + rm -f "${host_modules_dir}/.requires_rebuild" 2>/dev/null || true + say SUCCESS ".env written to $ENV_OUT" show_realm_configured @@ -1387,11 +1422,22 @@ EOF say INFO "Ready to bring your realm online:" if [ "$MODULE_PLAYERBOTS" = "1" ]; then - echo " 🚀 Quick deploy: ./deploy.sh" - echo " 🔧 Manual: docker compose --profile db --profile services-playerbots --profile client-data-bots --profile modules up -d" + printf ' 🚀 Quick deploy: ./deploy.sh\n' + printf ' 🔧 Manual: docker compose --profile db --profile services-playerbots --profile client-data-bots --profile modules up -d\n' else - echo " 🚀 Quick deploy: ./deploy.sh" - echo " 🔧 Manual: docker compose --profile db --profile services-standard --profile client-data --profile modules up -d" + printf ' 🚀 Quick deploy: ./deploy.sh\n' + printf ' 🔧 Manual: docker compose --profile db --profile services-standard --profile client-data --profile modules up -d\n' + fi + + if [ "${CLI_DEPLOY_AFTER:-0}" = "1" ]; then + local deploy_args=(bash "./deploy.sh" --yes) + if [ "$MODULE_PLAYERBOTS" != "1" ]; then + deploy_args+=(--profile standard) + fi + say INFO "Launching deploy after setup (--deploy-after enabled)" + if ! "${deploy_args[@]}"; then + say WARNING "Automatic deploy failed; please run ./deploy.sh manually." + fi fi }