diff --git a/.gitignore b/.gitignore index b8f5809..5bca2d7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ data/ backups/ local-data-tools/ storage/ +.claude/ *custom.env diff --git a/docker-compose-azerothcore-modules.env b/docker-compose-azerothcore-modules.env index 2720ba1..6a97c63 100644 --- a/docker-compose-azerothcore-modules.env +++ b/docker-compose-azerothcore-modules.env @@ -173,4 +173,5 @@ IMAGE_PULL_POLICY=if_not_present # Optional service container names # Reference to core services (for external linking) -CONTAINER_WORLDSERVER=ac-worldserver \ No newline at end of file +CONTAINER_WORLDSERVER=ac-worldserver + diff --git a/docker-compose-azerothcore-modules.yml b/docker-compose-azerothcore-modules.yml index 61e0b30..80d4806 100644 --- a/docker-compose-azerothcore-modules.yml +++ b/docker-compose-azerothcore-modules.yml @@ -720,14 +720,14 @@ services: # 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; do - eval "value=\$$module_var" - CURRENT_STATE="$CURRENT_STATE$module_var=$value|" + eval "value=\$$${module_var}" + CURRENT_STATE="$${CURRENT_STATE}$${module_var}=$${value}|" done # Check if state has changed - if [ -f "$MODULES_STATE_FILE" ]; then - PREVIOUS_STATE=$(cat "$MODULES_STATE_FILE") - if [ "$CURRENT_STATE" != "$PREVIOUS_STATE" ]; then + if [ -f "$${MODULES_STATE_FILE}" ]; then + PREVIOUS_STATE=$$(cat "$${MODULES_STATE_FILE}") + if [ "$${CURRENT_STATE}" != "$${PREVIOUS_STATE}" ]; then echo "🔄 Module configuration has changed - rebuild required" REBUILD_REQUIRED=1 else @@ -739,47 +739,48 @@ services: fi # Save current state - echo "$CURRENT_STATE" > "$MODULES_STATE_FILE" + echo "$${CURRENT_STATE}" > "$${MODULES_STATE_FILE}" - # Check if any C++ modules are enabled (all current modules require compilation) + # Check if any C++ modules are enabled (modules requiring source compilation) + # NOTE: mod-playerbots uses pre-built images and doesn't require rebuild ENABLED_MODULES="" - [ "$MODULE_PLAYERBOTS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-playerbots" - [ "$MODULE_AOE_LOOT" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-aoe-loot" - [ "$MODULE_LEARN_SPELLS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-learn-spells" - [ "$MODULE_FIREWORKS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-fireworks-on-level" - [ "$MODULE_INDIVIDUAL_PROGRESSION" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-individual-progression" - [ "$MODULE_AHBOT" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-ahbot" - [ "$MODULE_AUTOBALANCE" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-autobalance" - [ "$MODULE_TRANSMOG" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-transmog" - [ "$MODULE_NPC_BUFFER" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-npc-buffer" - [ "$MODULE_DYNAMIC_XP" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-dynamic-xp" - [ "$MODULE_SOLO_LFG" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-solo-lfg" - [ "$MODULE_1V1_ARENA" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-1v1-arena" - [ "$MODULE_PHASED_DUELS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-phased-duels" - [ "$MODULE_BREAKING_NEWS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-breaking-news-override" - [ "$MODULE_BOSS_ANNOUNCER" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-boss-announcer" - [ "$MODULE_ACCOUNT_ACHIEVEMENTS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-account-achievements" - [ "$MODULE_AUTO_REVIVE" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-auto-revive" - [ "$MODULE_GAIN_HONOR_GUARD" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-gain-honor-guard" - [ "$MODULE_ELUNA" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-eluna" - [ "$MODULE_TIME_IS_TIME" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-time-is-time" - [ "$MODULE_POCKET_PORTAL" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-pocket-portal" - [ "$MODULE_RANDOM_ENCHANTS" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-random-enchants" - [ "$MODULE_SOLOCRAFT" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-solocraft" - [ "$MODULE_PVP_TITLES" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-pvp-titles" - [ "$MODULE_NPC_BEASTMASTER" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-npc-beastmaster" - [ "$MODULE_NPC_ENCHANTER" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-npc-enchanter" - [ "$MODULE_INSTANCE_RESET" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-instance-reset" - [ "$MODULE_LEVEL_GRANT" = "1" ] && ENABLED_MODULES="$ENABLED_MODULES mod-quest-count-level" + # [ "$MODULE_PLAYERBOTS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-playerbots" # Uses pre-built images + [ "$MODULE_AOE_LOOT" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-aoe-loot" + [ "$MODULE_LEARN_SPELLS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-learn-spells" + [ "$MODULE_FIREWORKS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-fireworks-on-level" + [ "$MODULE_INDIVIDUAL_PROGRESSION" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-individual-progression" + [ "$MODULE_AHBOT" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-ahbot" + [ "$MODULE_AUTOBALANCE" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-autobalance" + [ "$MODULE_TRANSMOG" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-transmog" + [ "$MODULE_NPC_BUFFER" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-npc-buffer" + [ "$MODULE_DYNAMIC_XP" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-dynamic-xp" + [ "$MODULE_SOLO_LFG" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-solo-lfg" + [ "$MODULE_1V1_ARENA" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-1v1-arena" + [ "$MODULE_PHASED_DUELS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-phased-duels" + [ "$MODULE_BREAKING_NEWS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-breaking-news-override" + [ "$MODULE_BOSS_ANNOUNCER" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-boss-announcer" + [ "$MODULE_ACCOUNT_ACHIEVEMENTS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-account-achievements" + [ "$MODULE_AUTO_REVIVE" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-auto-revive" + [ "$MODULE_GAIN_HONOR_GUARD" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-gain-honor-guard" + [ "$MODULE_ELUNA" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-eluna" + [ "$MODULE_TIME_IS_TIME" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-time-is-time" + [ "$MODULE_POCKET_PORTAL" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-pocket-portal" + [ "$MODULE_RANDOM_ENCHANTS" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-random-enchants" + [ "$MODULE_SOLOCRAFT" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-solocraft" + [ "$MODULE_PVP_TITLES" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-pvp-titles" + [ "$MODULE_NPC_BEASTMASTER" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-npc-beastmaster" + [ "$MODULE_NPC_ENCHANTER" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-npc-enchanter" + [ "$MODULE_INSTANCE_RESET" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-instance-reset" + [ "$MODULE_LEVEL_GRANT" = "1" ] && ENABLED_MODULES="$${ENABLED_MODULES} mod-quest-count-level" - if [ -n "$ENABLED_MODULES" ]; then - ENABLED_COUNT=$(echo $ENABLED_MODULES | wc -w) - echo "🔧 Detected $ENABLED_COUNT enabled C++ modules requiring compilation:" - for mod in $ENABLED_MODULES; do - echo " â€ĸ $mod" + if [ -n "$${ENABLED_MODULES}" ]; then + ENABLED_COUNT=$$(echo $${ENABLED_MODULES} | wc -w) + echo "🔧 Detected $${ENABLED_COUNT} enabled C++ modules requiring compilation:" + for mod in $${ENABLED_MODULES}; do + echo " â€ĸ $${mod}" done - if [ "$REBUILD_REQUIRED" = "1" ]; then + if [ "$${REBUILD_REQUIRED}" = "1" ]; then echo "" echo "🚨 REBUILD REQUIRED 🚨" echo "Module configuration has changed. To integrate C++ modules into AzerothCore:" diff --git a/docker-compose-azerothcore-services.env b/docker-compose-azerothcore-services.env index a469478..48dd383 100644 --- a/docker-compose-azerothcore-services.env +++ b/docker-compose-azerothcore-services.env @@ -62,11 +62,13 @@ DB_CHARACTERS_NAME=acore_characters # ============================================== # DOCKER IMAGES # ============================================== -# Core service images - mod-playerbots compatible builds -AC_AUTHSERVER_IMAGE_DISABLED=uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot +# Core service images - TO ENABLE PLAYERBOTS: swap _PLAYERBOTS with standard images +# STANDARD IMAGES (currently active): AC_AUTHSERVER_IMAGE=acore/ac-wotlk-authserver:14.0.0-dev -AC_WORLDSERVER_IMAGE_DISABLED=uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot AC_WORLDSERVER_IMAGE=acore/ac-wotlk-worldserver:14.0.0-dev +# PLAYERBOTS IMAGES (to enable, swap with lines above): +AC_AUTHSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot +AC_WORLDSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot ALPINE_IMAGE=alpine:latest # Optional service images (from combined optional layer) @@ -124,6 +126,12 @@ PLAYERBOT_MAX_BOTS=40 # Module configuration - ENABLED MODULES # Selected modules for enhanced gameplay experience +# +# TO ENABLE PLAYERBOTS: +# 1. Change MODULE_PLAYERBOTS=1 +# 2. Swap the image lines below (move _PLAYERBOTS to active, move standard to _STANDARD) +# 3. Redeploy services: docker compose -f docker-compose-azerothcore-services.yml up -d +# 4. No rebuild required - uses pre-built playerbots images! MODULE_PLAYERBOTS=0 MODULE_AOE_LOOT=0 MODULE_LEARN_SPELLS=0 diff --git a/docker-compose-azerothcore-services.env.bak b/docker-compose-azerothcore-services.env.bak new file mode 100644 index 0000000..2154e1a --- /dev/null +++ b/docker-compose-azerothcore-services.env.bak @@ -0,0 +1,190 @@ +# ============================================== +# AZEROTHCORE SERVICES ENVIRONMENT +# ============================================== +# Environment variables for auth server, world server, client data, modules, and optional services + +# ============================================== +# DEPLOYMENT CONFIGURATION +# ============================================== +# Storage root path - local: ./storage, production: /nfs/azerothcore or custom mount +STORAGE_ROOT=/nfs/azerothcore +# Storage configuration (must match database layer) +STORAGE_PATH=${STORAGE_ROOT} + +# ============================================== +# USER MAPPING CONFIGURATION (for NFS compatibility) +# ============================================== +# User and group IDs for container processes (PUID/PGID pattern) +# Set these to match your NFS server's user mapping +# Default: 1001:1000 (matches 'sharing' user on most systems) +PUID=1001 +PGID=1000 +SHARING_USER=${PUID}:${PGID} +# Legacy compatibility +CONTAINER_USER_ID=${PUID} +CONTAINER_GROUP_ID=${PGID} +CONTAINER_USER=${CONTAINER_USER_ID}:${CONTAINER_GROUP_ID} + +# ============================================== +# NETWORK CONFIGURATION +# ============================================== +# External ports for game services +AUTH_EXTERNAL_PORT=3784 +WORLD_EXTERNAL_PORT=8215 +SOAP_EXTERNAL_PORT=7778 + +# Server address for client connections (production) +# SERVER_ADDRESS=192.168.0.188 +# Server address for client connections (local) +SERVER_ADDRESS=192.168.0.188 +# Use WORLD_EXTERNAL_PORT for realmlist (client connection port) +REALM_PORT=8215 + +# Internal ports (container side) +AUTH_PORT=3724 +WORLD_PORT=8085 +SOAP_PORT=7878 + +# ============================================== +# DATABASE CONNECTION +# ============================================== +# Connect to database layer (must match database layer settings) +MYSQL_HOST=ac-mysql +MYSQL_PORT=3306 +MYSQL_USER=root +MYSQL_ROOT_PASSWORD=azerothcore123 + +# Database names (must match database layer) +DB_AUTH_NAME=acore_auth +DB_WORLD_NAME=acore_world +DB_CHARACTERS_NAME=acore_characters + +# ============================================== +# DOCKER IMAGES +# ============================================== +# Core service images - TO ENABLE PLAYERBOTS: swap _PLAYERBOTS with standard images +# STANDARD IMAGES (currently active): +AC_AUTHSERVER_IMAGE=uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot +AC_WORLDSERVER_IMAGE=uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot +# PLAYERBOTS IMAGES (to enable, swap with lines above): +AC_AUTHSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot +AC_WORLDSERVER_IMAGE_PLAYERBOTS=uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot +ALPINE_IMAGE=alpine:latest + +# Optional service images (from combined optional layer) +AC_ELUNA_IMAGE=acore/eluna-ts:master +ALPINE_GIT_IMAGE=alpine/git:latest + +# mod-playerbots compatible client data image +AC_CLIENT_DATA_IMAGE_DISABLED=uprightbass360/azerothcore-wotlk-playerbots:client-data-Playerbot +AC_CLIENT_DATA_IMAGE=alpine:latest + +# ============================================== +# IMAGE PULL POLICY +# ============================================== +IMAGE_PULL_POLICY=if_not_present + +# ============================================== +# CONTAINER HEALTH CHECKS +# ============================================== +# Auth server health check +AUTH_HEALTHCHECK_INTERVAL=30s +AUTH_HEALTHCHECK_TIMEOUT=10s +AUTH_HEALTHCHECK_RETRIES=3 +AUTH_HEALTHCHECK_START_PERIOD=60s + +# World server health check +WORLD_HEALTHCHECK_INTERVAL=30s +WORLD_HEALTHCHECK_TIMEOUT=10s +WORLD_HEALTHCHECK_RETRIES=3 +WORLD_HEALTHCHECK_START_PERIOD=120s + +# ============================================== +# CONTAINER NAMES +# ============================================== +# Core service container names +CONTAINER_AUTHSERVER=ac-authserver +CONTAINER_WORLDSERVER=ac-worldserver +CONTAINER_CLIENT_DATA=ac-client-data + +# Database container name (for external linking) +CONTAINER_MYSQL=ac-mysql + +# ============================================== +# NETWORK SETTINGS +# ============================================== +# Network must already exist from database layer +NETWORK_NAME=azerothcore + +# ============================================== +# CUSTOM MODULE SETTINGS +# ============================================== + +# Playerbot settings +PLAYERBOT_ENABLED=1 +PLAYERBOT_MAX_BOTS=40 + +# Module configuration - ENABLED MODULES +# Selected modules for enhanced gameplay experience +# +# TO ENABLE PLAYERBOTS: +# 1. Change MODULE_PLAYERBOTS=1 +# 2. Swap the image lines below (move _PLAYERBOTS to active, move standard to _STANDARD) +# 3. Redeploy services: docker compose -f docker-compose-azerothcore-services.yml up -d +# 4. No rebuild required - uses pre-built playerbots images! +MODULE_PLAYERBOTS=1 +MODULE_AOE_LOOT=0 +MODULE_LEARN_SPELLS=0 +MODULE_FIREWORKS=0 +MODULE_INDIVIDUAL_PROGRESSION=0 + +# Quality of Life Modules +# NOTE: mod-ahbot has linking issues - undefined reference to 'Addmod_ahbotScripts()' +MODULE_AHBOT=0 +MODULE_AUTOBALANCE=0 +MODULE_TRANSMOG=0 +MODULE_NPC_BUFFER=0 + +# Gameplay Enhancement Modules +MODULE_DYNAMIC_XP=0 +MODULE_SOLO_LFG=0 +MODULE_1V1_ARENA=0 +MODULE_PHASED_DUELS=0 + +# Server Management Modules +MODULE_BREAKING_NEWS=0 +MODULE_BOSS_ANNOUNCER=0 +MODULE_ACCOUNT_ACHIEVEMENTS=0 + +# Additional Modules Found in Config +MODULE_AUTO_REVIVE=0 +MODULE_GAIN_HONOR_GUARD=0 +MODULE_ELUNA=0 +MODULE_ARAC=0 +MODULE_TIME_IS_TIME=0 +MODULE_POCKET_PORTAL=0 +MODULE_RANDOM_ENCHANTS=0 +MODULE_SOLOCRAFT=0 +MODULE_PVP_TITLES=0 +MODULE_NPC_BEASTMASTER=0 +MODULE_NPC_ENCHANTER=0 +MODULE_INSTANCE_RESET=0 +MODULE_LEVEL_GRANT=0 +MODULE_ASSISTANT=0 +MODULE_REAGENT_BANK=0 +MODULE_BLACK_MARKET_AUCTION_HOUSE=0 + +# ============================================== +# ADDITIONAL CONTAINER NAMES +# ============================================== +# Optional service container names +CONTAINER_ELUNA=ac-eluna +CONTAINER_MODULES=ac-modules +CONTAINER_POST_INSTALL=ac-post-install + +# ============================================== +# MODULE MANAGEMENT +# ============================================== +GIT_USERNAME= +GIT_EMAIL= +GIT_PAT= \ No newline at end of file diff --git a/scripts/auto-post-install.sh b/scripts/auto-post-install.sh old mode 100755 new mode 100644 diff --git a/scripts/backup-daily.sh b/scripts/backup-daily.sh old mode 100755 new mode 100644 diff --git a/scripts/backup-hourly.sh b/scripts/backup-hourly.sh old mode 100755 new mode 100644 diff --git a/scripts/backup.sh b/scripts/backup.sh old mode 100755 new mode 100644 diff --git a/scripts/cleanup.sh b/scripts/cleanup.sh old mode 100755 new mode 100644 diff --git a/scripts/configure-modules.sh b/scripts/configure-modules.sh old mode 100755 new mode 100644 diff --git a/scripts/db-import-conditional.sh b/scripts/db-import-conditional.sh old mode 100755 new mode 100644 index 1c41a2a..d415f7d --- a/scripts/db-import-conditional.sh +++ b/scripts/db-import-conditional.sh @@ -153,6 +153,34 @@ if [ -z "$backup_path" ] && [ -d "$BACKUP_DIRS" ]; then fi else echo "📅 No daily backup directory found" + # Check for timestamped backup directories (legacy format: YYYYMMDD_HHMMSS) + echo "🔍 Checking for timestamped backup directories..." + timestamped_backups=$(ls -1t $BACKUP_DIRS 2>/dev/null | grep -E '^[0-9]{8}_[0-9]{6}$' | head -n 1) + if [ -n "$timestamped_backups" ]; then + latest_timestamped="$timestamped_backups" + echo "đŸ“Ļ Found timestamped backup: $latest_timestamped" + if [ -d "$BACKUP_DIRS/$latest_timestamped" ]; then + # Check if directory has .sql.gz files + if ls "$BACKUP_DIRS/$latest_timestamped"/*.sql.gz >/dev/null 2>&1; then + # Validate at least one backup file has content + echo "🔍 Validating timestamped backup content..." + for backup_file in "$BACKUP_DIRS/$latest_timestamped"/*.sql.gz; do + if [ -f "$backup_file" ] && [ -s "$backup_file" ]; then + # Use timeout to prevent hanging on zcat + if timeout 10 zcat "$backup_file" 2>/dev/null | head -20 | grep -q "CREATE DATABASE\|INSERT INTO\|CREATE TABLE"; then + echo "✅ Valid timestamped backup found: $(basename $backup_file)" + backup_path="$BACKUP_DIRS/$latest_timestamped" + break + fi + fi + done + else + echo "âš ī¸ No .sql.gz files found in timestamped backup directory" + fi + fi + else + echo "📅 No timestamped backup directories found" + fi fi else echo "📁 Backup directory is empty" diff --git a/scripts/db-init-enhanced.sh b/scripts/db-init-enhanced.sh old mode 100755 new mode 100644 diff --git a/scripts/deploy-and-check-distrobox.sh b/scripts/deploy-and-check-distrobox.sh old mode 100755 new mode 100644 diff --git a/scripts/deploy-and-check.sh b/scripts/deploy-and-check.sh old mode 100755 new mode 100644 diff --git a/scripts/post-install-setup.sh b/scripts/post-install-setup.sh old mode 100755 new mode 100644 diff --git a/scripts/rebuild-with-modules.sh b/scripts/rebuild-with-modules.sh old mode 100755 new mode 100644 diff --git a/scripts/restore.sh b/scripts/restore.sh old mode 100755 new mode 100644 diff --git a/scripts/setup-eluna.sh b/scripts/setup-eluna.sh old mode 100755 new mode 100644 diff --git a/scripts/setup-server.sh b/scripts/setup-server.sh old mode 100755 new mode 100644 diff --git a/scripts/status.sh b/scripts/status.sh old mode 100755 new mode 100644 diff --git a/scripts/test-backup-detection-enhanced.sh b/scripts/test-backup-detection-enhanced.sh old mode 100755 new mode 100644 diff --git a/scripts/test-backup-detection.sh b/scripts/test-backup-detection.sh old mode 100755 new mode 100644 diff --git a/scripts/test-local-worldserver.sh b/scripts/test-local-worldserver.sh old mode 100755 new mode 100644 diff --git a/scripts/toggle-playerbots.sh b/scripts/toggle-playerbots.sh new file mode 100644 index 0000000..baedf8b --- /dev/null +++ b/scripts/toggle-playerbots.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# ============================================== +# Playerbots Toggle Script +# ============================================== +# Simple script to enable/disable playerbots without rebuilding + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Function to print colored output +print_status() { + local status=$1 + local message=$2 + case $status in + "INFO") + echo -e "${BLUE}â„šī¸ ${message}${NC}" + ;; + "SUCCESS") + echo -e "${GREEN}✅ ${message}${NC}" + ;; + "WARNING") + echo -e "${YELLOW}âš ī¸ ${message}${NC}" + ;; + "ERROR") + echo -e "${RED}❌ ${message}${NC}" + ;; + esac +} + +# Change to project root +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +cd "$PROJECT_ROOT" + +ENV_FILE="docker-compose-azerothcore-services.env" + +if [ ! -f "$ENV_FILE" ]; then + print_status "ERROR" "Environment file not found: $ENV_FILE" + exit 1 +fi + +# Check current state +current_state=$(grep "^MODULE_PLAYERBOTS=" "$ENV_FILE" | cut -d'=' -f2) +current_authserver=$(grep "^AC_AUTHSERVER_IMAGE=" "$ENV_FILE" | cut -d'=' -f2) + +if [[ "$current_authserver" == *"playerbots"* ]]; then + is_playerbots_active=true +else + is_playerbots_active=false +fi + +print_status "INFO" "CURRENT PLAYERBOTS STATUS" +echo "Module Setting: MODULE_PLAYERBOTS=$current_state" +echo "Active Images: $(if $is_playerbots_active; then echo "Playerbots"; else echo "Standard AzerothCore"; fi)" +echo "" + +if [ "$1" = "status" ]; then + exit 0 +fi + +# Toggle logic +if $is_playerbots_active; then + print_status "WARNING" "Disabling playerbots (switching to standard AzerothCore images)" + + # Switch to standard images + sed -i.bak \ + -e 's/^AC_AUTHSERVER_IMAGE=uprightbass360.*/AC_AUTHSERVER_IMAGE=acore\/ac-wotlk-authserver:14.0.0-dev/' \ + -e 's/^AC_WORLDSERVER_IMAGE=uprightbass360.*/AC_WORLDSERVER_IMAGE=acore\/ac-wotlk-worldserver:14.0.0-dev/' \ + -e 's/^MODULE_PLAYERBOTS=1/MODULE_PLAYERBOTS=0/' \ + "$ENV_FILE" + + print_status "SUCCESS" "Playerbots disabled" +else + print_status "INFO" "Enabling playerbots (switching to pre-built playerbots images)" + + # Switch to playerbots images + sed -i.bak \ + -e 's/^AC_AUTHSERVER_IMAGE=acore.*/AC_AUTHSERVER_IMAGE=uprightbass360\/azerothcore-wotlk-playerbots:authserver-Playerbot/' \ + -e 's/^AC_WORLDSERVER_IMAGE=acore.*/AC_WORLDSERVER_IMAGE=uprightbass360\/azerothcore-wotlk-playerbots:worldserver-Playerbot/' \ + -e 's/^MODULE_PLAYERBOTS=0/MODULE_PLAYERBOTS=1/' \ + "$ENV_FILE" + + print_status "SUCCESS" "Playerbots enabled" +fi + +print_status "INFO" "To apply changes, redeploy the services:" +echo " docker compose --env-file $ENV_FILE -f docker-compose-azerothcore-services.yml up -d" +echo "" +print_status "INFO" "No rebuild required - using pre-built images!" \ No newline at end of file diff --git a/scripts/update-config.sh b/scripts/update-config.sh old mode 100755 new mode 100644 diff --git a/scripts/update-realmlist.sh b/scripts/update-realmlist.sh old mode 100755 new mode 100644 diff --git a/scripts/wait-and-start-worldserver.sh b/scripts/wait-and-start-worldserver.sh old mode 100755 new mode 100644