#!/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 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 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() { local target_file="$MODULE_DIR/src/LuaEngine/methods/CreatureMethods.h" if [ ! -f "$target_file" ]; then echo " âš ī¸ MovePath patch target file missing: $target_file" return 1 fi if grep -q 'MoveWaypoint(creature->GetWaypointPath(), true);' "$target_file"; then if sed -i 's/MoveWaypoint(creature->GetWaypointPath(), true);/MovePath(creature->GetWaypointPath(), FORCED_MOVEMENT_RUN);/' "$target_file"; then echo " ✅ Applied MovePath compatibility fix" return 0 else echo " ❌ Failed to apply MovePath compatibility fix" return 2 fi else echo " ✅ MovePath compatibility fix already present" return 0 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" = "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 echo " â„šī¸ No patches needed or applied" exit 0 fi echo " ✅ Applied $patch_count compatibility patch(es)" exit 0