Skip to content

Commit

Permalink
Merge pull request #32 from startersclan/fix/esai-fix-esai-helper-app…
Browse files Browse the repository at this point in the history
…ly-delete-subcommands-to-properly-parse-arguments-or-file

Fix (ESAI): Fix `esai-helper` [apply|delete] subcommands to properly parse arguments or `--file` flag
  • Loading branch information
leojonathanoh committed Oct 22, 2022
2 parents e62fe48 + ae0d86e commit 0995723
Show file tree
Hide file tree
Showing 7 changed files with 336 additions and 294 deletions.
252 changes: 126 additions & 126 deletions docs/examples/v1.5-esai-custom-strategies/config/strategies.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# This is a list of optimized ESAI strategies, based on 'Strategies-&-Navmesh-Credits.pdf' for BF2SP64
# Format: <level> <gamemode> <strategy>
# Format: <level> <gamemode> <size> <strategy>
# Usage:
# 1. The following level-gamemode-strategy entries may be generated (with an empty <strategy> field):
# esai-helper --mod bf2 get gamemodes
Expand All @@ -11,128 +11,128 @@
# esai-helper --mod bf2 delete -f esai-optimized-strategies-bf2.txt
# NOTE: Commented out maps do not have an optimized ESAI strategy

dalian_plant gpm_coop/16 smallMap
dalian_plant gpm_cq/16 smallMap
dalian_plant gpm_cq/32 smallMap
dalian_plant gpm_cq/64 largeMap
dalian_plant sp1/16 smallMap
daqing_oilfields gpm_coop/16 smallMap
daqing_oilfields gpm_cq/16 smallMap
daqing_oilfields gpm_cq/32 mediumMap
daqing_oilfields gpm_cq/64 largeFCAPF
daqing_oilfields sp1/16 smallMap
dragon_valley gpm_coop/16 smallMap
dragon_valley gpm_cq/16 smallMap
dragon_valley gpm_cq/32 mediumFCAPFPB
dragon_valley gpm_cq/64 largeFCAPFPB
dragon_valley gpm_cq/128 largeFCAPFPB
dragon_valley gpm_sl/16 smallMap
dragon_valley gpm_sl/32 mediumFCAPFPB
dragon_valley gpm_sl/64 largeFCAPFPB
dragon_valley gpm_sl/128 largeFCAPFPB
dragon_valley sp1/16 smallMap
dragon_valley sp1/32 mediumFCAPFPB
dragon_valley sp1/64 largeFCAPFPB
dragon_valley sp1/128 largeFCAPFPB
dragon_valley sp2/16 smallMap
dragon_valley sp2/32 mediumFCAPFPB
dragon_valley sp2/64 largeFCAPFPB
dragon_valley sp2/128 largeFCAPFPB
dragon_valley sp3/16 smallMap
dragon_valley sp3/32 mediumFCAPFPB
dragon_valley sp3/64 largeFCAPFPB
dragon_valley sp3/128 largeFCAPFPB
fushe_pass gpm_coop/16 smallMap
fushe_pass gpm_cq/16 smallMap
fushe_pass gpm_cq/32 mediumPF
fushe_pass gpm_cq/64 largePF
fushe_pass sp1/16 smallMap
# greatwall gpm_coop/16 -
# greatwall gpm_cq/16 -
# greatwall gpm_cq/32 -
# greatwall sp1/16 -
# greatwall sp1/32 -
# greatwall sp1/64 -
gulf_of_oman gpm_coop/16 smallMap
gulf_of_oman gpm_cq/16 smallMap
gulf_of_oman gpm_cq/32 smallFCA
gulf_of_oman gpm_cq/64 mediumFCA
gulf_of_oman sp1/16 smallMap
highway_tampa gpm_cq/16 smallMap
highway_tampa gpm_cq/32 mediumMap
highway_tampa gpm_cq/64 largeMap
highway_tampa gpm_cq/128 largeMap
highway_tampa gpm_cq/8 smallMap
highway_tampa gpm_sl/16 smallMap
highway_tampa gpm_sl/32 mediumMap
highway_tampa gpm_sl/64 largeMap
highway_tampa gpm_sl/128 largeMap
highway_tampa sp1/16 smallMap
highway_tampa sp1/32 mediumMap
highway_tampa sp1/64 largeMap
highway_tampa sp1/128 largeMap
highway_tampa sp2/16 smallMap
highway_tampa sp2/32 mediumMap
highway_tampa sp2/64 largeMap
highway_tampa sp2/128 largeMap
highway_tampa sp3/16 smallMap
highway_tampa sp3/32 mediumMap
highway_tampa sp3/64 largeMap
highway_tampa sp3/128 largeMap
mashtuur_city gpm_cq/16 smallMap
mashtuur_city gpm_cq/32 smallMap
mashtuur_city gpm_cq/64 mediumMap
# midnight_sun gpm_coop/16 -
# midnight_sun gpm_cq/16 -
# midnight_sun gpm_cq/32 -
# midnight_sun gpm_cq/64 -
# midnight_sun sp1/16 -`
# operation_blue_pearl gpm_cq/16 -
# operation_blue_pearl gpm_cq/32 -
# operation_blue_pearl gpm_cq/64 -
operation_clean_sweep gpm_coop/16 smallMap
operation_clean_sweep gpm_cq/16 smallMap
operation_clean_sweep gpm_cq/32 mediumFCAPF
operation_clean_sweep gpm_cq/64 mediumFCAPF
operation_clean_sweep sp1/16 smallMap
# operationharvest gpm_coop/16 -
# operationharvest gpm_cq/16 -
# operationharvest gpm_cq/32 -
# operationharvest gpm_cq/64 -
# operationharvest sp1/16 -
# operationroadrage gpm_coop/1 -6
# operationroadrage gpm_cq/16 -
# operationroadrage gpm_cq/32 -
# operationroadrage gpm_cq/64 -
# operationroadrage sp1/16 -
# operationsmokescreen gpm_coop/16 -
# operationsmokescreen gpm_cq/16 -
# operationsmokescreen gpm_cq/32 -
# operationsmokescreen sp1/16 -
# operationsmokescreen sp1/32 -
road_to_jalalabad gpm_coop/16 smallMap
road_to_jalalabad gpm_cq/16 smallMap
road_to_jalalabad gpm_cq/32 mediumFCAPF
road_to_jalalabad gpm_cq/64 mediumFCAPF
road_to_jalalabad sp1/16 smallMap
sharqi_peninsula gpm_coop/16 smallMap
sharqi_peninsula gpm_cq/16 smallMap
sharqi_peninsula gpm_cq/32 mediumFCAPF
sharqi_peninsula gpm_cq/64 mediumFCAPF
sharqi_peninsula sp1/16 smallMap
songhua_stalemate gpm_coop/16 smallMap
songhua_stalemate gpm_cq/16 smallMap
songhua_stalemate gpm_cq/32 mediumFCA
songhua_stalemate gpm_cq/64 largeFCA
songhua_stalemate sp1/16 smallMap
# taraba_quarry gpm_coop/16 -
# taraba_quarry gpm_cq/16 -
# taraba_quarry gpm_cq/32 -
# taraba_quarry sp1/16 -
# taraba_quarry sp1/32 -
wake_island_2007 gpm_cq/64 Wake-Island-64
zatar_wetlands gpm_coop/16 smallMap
zatar_wetlands gpm_cq/16 smallMap
zatar_wetlands gpm_cq/32 mediumFCA
zatar_wetlands gpm_cq/64 mediumFCAPF
zatar_wetlands sp1/16 smallMap
dalian_plant gpm_coop 16 smallmap
dalian_plant gpm_cq 16 smallmap
dalian_plant gpm_cq 32 smallmap
dalian_plant gpm_cq 64 largemap
dalian_plant sp1 16 smallmap
daqing_oilfields gpm_coop 16 smallmap
daqing_oilfields gpm_cq 16 smallmap
daqing_oilfields gpm_cq 32 mediummap
daqing_oilfields gpm_cq 64 largefcapf
daqing_oilfields sp1 16 smallmap
dragon_valley gpm_coop 16 smallmap
dragon_valley gpm_cq 16 smallmap
dragon_valley gpm_cq 32 mediumfcapfpb
dragon_valley gpm_cq 64 largefcapfpb
dragon_valley gpm_cq 128 largefcapfpb
dragon_valley gpm_sl 16 smallmap
dragon_valley gpm_sl 32 mediumfcapfpb
dragon_valley gpm_sl 64 largefcapfpb
dragon_valley gpm_sl 128 largefcapfpb
dragon_valley sp1 16 smallmap
dragon_valley sp1 32 mediumfcapfpb
dragon_valley sp1 64 largefcapfpb
dragon_valley sp1 128 largefcapfpb
dragon_valley sp2 16 smallmap
dragon_valley sp2 32 mediumfcapfpb
dragon_valley sp2 64 largefcapfpb
dragon_valley sp2 128 largefcapfpb
dragon_valley sp3 16 smallmap
dragon_valley sp3 32 mediumfcapfpb
dragon_valley sp3 64 largefcapfpb
dragon_valley sp3 128 largefcapfpb
fushe_pass gpm_coop 16 smallmap
fushe_pass gpm_cq 16 smallmap
fushe_pass gpm_cq 32 mediumpf
fushe_pass gpm_cq 64 largepf
fushe_pass sp1 16 smallmap
# greatwall gpm_coop 16 -
# greatwall gpm_cq 16 -
# greatwall gpm_cq 32 -
# greatwall sp1 16 -
# greatwall sp1 32 -
# greatwall sp1 64 -
gulf_of_oman gpm_coop 16 smallmap
gulf_of_oman gpm_cq 16 smallmap
gulf_of_oman gpm_cq 32 smallfca
gulf_of_oman gpm_cq 64 mediumfca
gulf_of_oman sp1 16 smallmap
highway_tampa gpm_cq 16 smallmap
highway_tampa gpm_cq 32 mediummap
highway_tampa gpm_cq 64 largemap
highway_tampa gpm_cq 128 largemap
highway_tampa gpm_cq 8 smallmap
highway_tampa gpm_sl 16 smallmap
highway_tampa gpm_sl 32 mediummap
highway_tampa gpm_sl 64 largemap
highway_tampa gpm_sl 128 largemap
highway_tampa sp1 16 smallmap
highway_tampa sp1 32 mediummap
highway_tampa sp1 64 largemap
highway_tampa sp1 128 largemap
highway_tampa sp2 16 smallmap
highway_tampa sp2 32 mediummap
highway_tampa sp2 64 largemap
highway_tampa sp2 128 largemap
highway_tampa sp3 16 smallmap
highway_tampa sp3 32 mediummap
highway_tampa sp3 64 largemap
highway_tampa sp3 128 largemap
mashtuur_city gpm_cq 16 smallmap
mashtuur_city gpm_cq 32 smallmap
mashtuur_city gpm_cq 64 mediummap
# midnight_sun gpm_coop 16 -
# midnight_sun gpm_cq 16 -
# midnight_sun gpm_cq 32 -
# midnight_sun gpm_cq 64 -
# midnight_sun sp1 16 -`
# operation_blue_pearl gpm_cq 16 -
# operation_blue_pearl gpm_cq 32 -
# operation_blue_pearl gpm_cq 64 -
operation_clean_sweep gpm_coop 16 smallmap
operation_clean_sweep gpm_cq 16 smallmap
operation_clean_sweep gpm_cq 32 mediumfcapf
operation_clean_sweep gpm_cq 64 mediumfcapf
operation_clean_sweep sp1 16 smallmap
# operationharvest gpm_coop 16 -
# operationharvest gpm_cq 16 -
# operationharvest gpm_cq 32 -
# operationharvest gpm_cq 64 -
# operationharvest sp1 16 -
# operationroadrage gpm_coop 1 -6
# operationroadrage gpm_cq 16 -
# operationroadrage gpm_cq 32 -
# operationroadrage gpm_cq 64 -
# operationroadrage sp1 16 -
# operationsmokescreen gpm_coop 16 -
# operationsmokescreen gpm_cq 16 -
# operationsmokescreen gpm_cq 32 -
# operationsmokescreen sp1 16 -
# operationsmokescreen sp1 32 -
road_to_jalalabad gpm_coop 16 smallmap
road_to_jalalabad gpm_cq 16 smallmap
road_to_jalalabad gpm_cq 32 mediumfcapf
road_to_jalalabad gpm_cq 64 mediumfcapf
road_to_jalalabad sp1 16 smallmap
sharqi_peninsula gpm_coop 16 smallmap
sharqi_peninsula gpm_cq 16 smallmap
sharqi_peninsula gpm_cq 32 mediumfcapf
sharqi_peninsula gpm_cq 64 mediumfcapf
sharqi_peninsula sp1 16 smallmap
songhua_stalemate gpm_coop 16 smallmap
songhua_stalemate gpm_cq 16 smallmap
songhua_stalemate gpm_cq 32 mediumfca
songhua_stalemate gpm_cq 64 largefca
songhua_stalemate sp1 16 smallmap
# taraba_quarry gpm_coop 16 -
# taraba_quarry gpm_cq 16 -
# taraba_quarry gpm_cq 32 -
# taraba_quarry sp1 16 -
# taraba_quarry sp1 32 -
wake_island_2007 gpm_cq 64 wake-island-64
zatar_wetlands gpm_coop 16 smallmap
zatar_wetlands gpm_cq 16 smallmap
zatar_wetlands gpm_cq 32 mediumfca
zatar_wetlands gpm_cq 64 mediumfcapf
zatar_wetlands sp1 16 smallmap
63 changes: 35 additions & 28 deletions variants/v1.5.3153.0-bf2hub/esai-helper
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,25 @@ set -eu
usage() {
echo "$0: Get and apply ESAI Strategies.ai in levels/<level>/server.zip"
echo "Options:"
echo " -d|--dir BF2 server installation directory. Defaults to '/server/bf2'"
echo " -m|--mod Mod. E.g. 'bf2' or 'xpack'. Defaults to 'bf2'"
echo " -d|--dir BF2 server installation directory. Defaults to '/server/bf2'"
echo " -m|--mod Mod. E.g. 'bf2' or 'xpack'. Defaults to 'bf2'"
echo "Commands:"
echo " get [subcommand]"
echo " gamemodes <level> Get all available levels' gamemodes"
echo " maplist <level> Generate a maplist"
echo " level-strategies <level> Get a level's server.zip's ESAI strategies"
echo " If <level> if omitted, all levels' strategies are shown"
echo " level-strategiescontent <level> Get file content of level's server.zip's ESAI strategies"
echo " If <level> if omitted, all levels' strategies are shown"
echo " levels Get all available levels"
echo " mods Get all available mods"
echo " strategies Get all available ESAI strategies"
echo " gamemodes <level> Get all available levels' gamemodes"
echo " maplist <level> Generate a maplist"
echo " level-strategies <level> Get a level's server.zip's ESAI strategies"
echo " If <level> if omitted, all levels' strategies are shown"
echo " level-strategiescontent <level> Get file content of level's server.zip's ESAI strategies"
echo " If <level> if omitted, all levels' strategies are shown"
echo " levels Get all available levels"
echo " mods Get all available mods"
echo " strategies Get all available ESAI strategies"
echo " apply|delete [options] [arg...]"
echo " <level> <gamemode> <strategy> Apply the specified ESAI strategy to a specified gamemode"
echo " of a specified level's server.zip"
echo " -f|--file <space_delimited_file> Apply ESAI strategies based on a space-delimited file"
echo " Format per line: <level> <gamemode> <strategy>"
echo " Use '#' for comments"
echo " <level> <gamemode> <strategy> Apply the specified ESAI strategy to a specified gamemode"
echo " of a specified level's server.zip"
echo " -f|--file <space_delimited_file> Apply ESAI strategies based on a space-delimited file"
echo " Format per line: <level> <gamemode> <strategy>"
echo " Use '#' for comments"
echo "Examples:"
echo " $0 -m bf2 get gamemodes"
echo " $0 -m xpack get gamemodes"
Expand All @@ -32,9 +32,9 @@ usage() {
echo " $0 -m bf2 get levels"
echo " $0 -m bf2 get mods"
echo " $0 -m bf2 get strategies"
echo " $0 -m bf2 apply highway_tampa gpm_cq/32 mediumFCA"
echo " $0 -m bf2 apply highway_tampa gpm_cq 32 mediumfca"
echo " $0 -m bf2 apply -f esai-optimized-strategies.txt"
echo " $0 -m bf2 delete highway_tampa gpm_cq/32 mediumFCA"
echo " $0 -m bf2 delete highway_tampa gpm_cq 32 mediumfca"
echo " $0 -m bf2 delete -f esai-optimized-strategies.txt"
}
# Exit if we got no options
Expand Down Expand Up @@ -145,13 +145,19 @@ while test $# -gt 0; do
shift
GAMEMODE="${1:-}"
if [ -z "$GAMEMODE" ]; then
echo "Please specify a gamemode as the second argument. E.g. gpm_coop/16"
echo "Please specify a gamemode as the second argument. E.g. gpm_coop"
exit 1
fi
shift
SIZE="${1:-}"
if [ -z "$SIZE" ]; then
echo "Please specify a map size as the third argument. E.g. 16"
exit 1
fi
shift
STRATEGY="${1:-}"
if [ -z "$STRATEGY" ]; then
echo "Please specify an ESAI strategy as the third argument. E.g. mediumFCAPB"
echo "Please specify an ESAI strategy as the fourth argument. E.g. mediumfcapb"
exit 1
fi
shift
Expand Down Expand Up @@ -180,6 +186,7 @@ DELETE=${DELETE:-}
FILE=${FILE:-}
LEVEL=${LEVEL:-}
GAMEMODE=${GAMEMODE:-}
SIZE=${SIZE:-}
STRATEGY=${STRATEGY:-}

# Validation
Expand Down Expand Up @@ -292,11 +299,11 @@ if [ -n "$APPLY" ] || [ -n "$DELETE" ]; then
exit 1
fi
else
CONTENT="$LEVEL $GAMEMODE $STRATEGY"
CONTENT="$LEVEL $GAMEMODE $SIZE $STRATEGY"
fi
echo "$CONTENT" | while read -r LEVEL GAMEMODE STRATEGY; do
echo "$CONTENT" | while read -r LEVEL GAMEMODE SIZE STRATEGY; do
SERVER_ZIP="$DIR/mods/$MOD/levels/$LEVEL/server.zip"
if ! unzip -l "$SERVER_ZIP" | grep "GameModes/$GAMEMODE" > /dev/null; then
if ! unzip -l "$SERVER_ZIP" | grep "GameModes/$GAMEMODE/$SIZE" > /dev/null; then
echo "The gamemode '$GAMEMODE' does not exist in $SERVER_ZIP"
echo "To get a list of available gamemodes, run:"
echo " $0 get gamemodes"
Expand All @@ -312,23 +319,23 @@ if [ -n "$APPLY" ] || [ -n "$DELETE" ]; then
done
fi
if [ -n "$APPLY" ]; then
echo "$CONTENT" | while read -r LEVEL GAMEMODE STRATEGY; do
echo "$CONTENT" | while read -r LEVEL GAMEMODE SIZE STRATEGY; do
cd "$DIR/mods/$MOD/levels/$LEVEL"
SERVER_ZIP="$PWD/server.zip"
STRATEGIES_AI=$( find $DIR | grep -E "mods/$MOD/esai/mapfiles/[^/]+/$STRATEGY/strategies.ai" | head -n1 || true )
STRATEGIES_AI_DESTINATION_IN_ZIP="GameModes/$GAMEMODE/ai/Strategies.ai"
echo "Applying strategy $STRATEGIES_AI to $SERVER_ZIP at GameModes/$GAMEMODE/ai/Strategies.ai"
STRATEGIES_AI_DESTINATION_IN_ZIP="GameModes/$GAMEMODE/$SIZE/ai/Strategies.ai"
echo "Applying strategy $STRATEGIES_AI to $SERVER_ZIP at $STRATEGIES_AI_DESTINATION_IN_ZIP"
mkdir -p "$( dirname "$STRATEGIES_AI_DESTINATION_IN_ZIP" )" # Same layout as content of server.zip
cp -f "$STRATEGIES_AI" "$STRATEGIES_AI_DESTINATION_IN_ZIP"
zip -qru server.zip GameModes
rm -rf "$DIR/mods/$MOD/levels/$LEVEL/GameModes"
done
fi
if [ -n "$DELETE" ]; then
echo "$CONTENT" | while read -r LEVEL GAMEMODE STRATEGY; do
echo "$CONTENT" | while read -r LEVEL GAMEMODE SIZE STRATEGY; do
cd "$DIR/mods/$MOD/levels/$LEVEL"
SERVER_ZIP="$PWD/server.zip"
EXISTING_STRATEGIES_AI=$( unzip -l "$SERVER_ZIP" | grep -iE "GameModes/$GAMEMODE/(ai|AI)/Strategies.ai" | awk '{print $4}' || true )
EXISTING_STRATEGIES_AI=$( unzip -l "$SERVER_ZIP" | grep -iE "GameModes/$GAMEMODE/$SIZE/(ai|AI)/Strategies.ai" | awk '{print $4}' || true )
if [ -n "$EXISTING_STRATEGIES_AI" ]; then
for i in $EXISTING_STRATEGIES_AI; do
echo "Removing existing strategy $i from $SERVER_ZIP at $i"
Expand Down
Loading

0 comments on commit 0995723

Please sign in to comment.