diff --git a/scripts/bash/manage-modules.sh b/scripts/bash/manage-modules.sh index 946e8f0..44c215c 100755 --- a/scripts/bash/manage-modules.sh +++ b/scripts/bash/manage-modules.sh @@ -174,7 +174,18 @@ install_enabled_modules(){ continue fi if [ -d "$dir/.git" ]; then - info "$dir already present; skipping clone" + info "$dir already present; checking for updates" + (cd "$dir" && git fetch origin >/dev/null 2>&1 || warn "Failed to fetch updates for $dir") + local current_branch + current_branch=$(cd "$dir" && git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "master") + if (cd "$dir" && git pull origin "$current_branch" 2>&1 | grep -q "Already up to date"); then + info "$dir is already up to date" + else + ok "$dir updated from remote" + fi + if [ -n "$ref" ]; then + (cd "$dir" && git checkout "$ref") || warn "Unable to checkout ref $ref for $dir" + fi elif [ -d "$dir" ]; then warn "$dir exists but is not a git repository; leaving in place" else diff --git a/scripts/hooks/mod-ale-patches b/scripts/hooks/mod-ale-patches index 755e921..f0cc8b7 100755 --- a/scripts/hooks/mod-ale-patches +++ b/scripts/hooks/mod-ale-patches @@ -1,5 +1,6 @@ #!/bin/bash # Module-specific hook for mod-ale compatibility patches +# NOTE: These patches are primarily needed for the AzerothCore playerbots fork set -e # Hook environment @@ -7,12 +8,34 @@ MODULE_KEY="${MODULE_KEY:-}" MODULE_DIR="${MODULE_DIR:-}" MODULE_NAME="${MODULE_NAME:-}" +# Detect if we're building with playerbots fork +IS_PLAYERBOTS_FORK=0 +if [ -n "$MODULE_DIR" ]; then + # Check if the parent directory structure indicates playerbots fork + if echo "$MODULE_DIR" | grep -q "azerothcore-playerbots"; then + IS_PLAYERBOTS_FORK=1 + fi +fi + +# Feature flags (set to 0 to disable specific patches) +APPLY_MOVEPATH_PATCH="${APPLY_MOVEPATH_PATCH:-0}" # Disabled by default - appears unnecessary +# SendTrainerList patch: auto-detect based on fork, but can be overridden +if [ -z "${APPLY_SENDTRAINERLIST_PATCH:-}" ]; then + APPLY_SENDTRAINERLIST_PATCH="$IS_PLAYERBOTS_FORK" # Only needed for playerbots fork +else + APPLY_SENDTRAINERLIST_PATCH="${APPLY_SENDTRAINERLIST_PATCH}" +fi + if [ -z "$MODULE_DIR" ] || [ ! -d "$MODULE_DIR" ]; then echo "❌ mod-ale-patches: Invalid module directory: $MODULE_DIR" exit 2 fi -echo "🔧 mod-ale-patches: Applying compatibility fixes to $MODULE_NAME" +if [ "$IS_PLAYERBOTS_FORK" = "1" ]; then + echo "🔧 mod-ale-patches: Applying playerbots fork compatibility fixes to $MODULE_NAME" +else + echo "🔧 mod-ale-patches: Checking compatibility fixes for $MODULE_NAME" +fi # Apply MovePath compatibility patch apply_movepath_patch() { @@ -37,10 +60,42 @@ apply_movepath_patch() { fi } +# Apply SendTrainerList compatibility patch +apply_sendtrainerlist_patch() { + local target_file="$MODULE_DIR/src/LuaEngine/methods/PlayerMethods.h" + + if [ ! -f "$target_file" ]; then + echo " ⚠️ SendTrainerList patch target file missing: $target_file" + return 1 + fi + + # Check if the buggy code exists (without GET_GUID()) + if grep -q 'player->GetSession()->SendTrainerList(obj);' "$target_file"; then + # Apply the fix by adding ->GET_GUID() + if sed -i 's/player->GetSession()->SendTrainerList(obj);/player->GetSession()->SendTrainerList(obj->GET_GUID());/' "$target_file"; then + echo " ✅ Applied SendTrainerList compatibility fix" + return 0 + else + echo " ❌ Failed to apply SendTrainerList compatibility fix" + return 2 + fi + else + echo " ✅ SendTrainerList compatibility fix already present" + return 0 + fi +} + # Apply all patches patch_count=0 -if apply_movepath_patch; then - patch_count=$((patch_count + 1)) +if [ "$APPLY_MOVEPATH_PATCH" = "1" ]; then + if apply_movepath_patch; then + patch_count=$((patch_count + 1)) + fi +fi +if [ "$APPLY_SENDTRAINERLIST_PATCH" = "1" ]; then + if apply_sendtrainerlist_patch; then + patch_count=$((patch_count + 1)) + fi fi if [ $patch_count -eq 0 ]; then