This commit is contained in:
2023-11-20 20:44:19 -06:00
parent 366253f1f9
commit ddcfe9e2a3
3 changed files with 147 additions and 55 deletions

View File

@@ -33,6 +33,45 @@ die() {
errmsg "$*" errmsg "$*"
exit 1 exit 1
} }
isnum() {
case $1 in
''|*[!0-9]*)
exit 1
;;
*)
exit 0
esac
}
isempty() {
for arg in "$@" ; do
# exit in error if file
if [ -f "$arg" ] ; then
exit 1
elif [ -L "$arg" ] ; then
# if is a symlink, check what it points to
# note: this only checks one-link level deep
if [ -d "$(readlink "$arg")" ] ; then
exit 0
else
exit 1
fi
elif [ -d "$arg" ] ; then
:
else
# is not a directory or a link to a directory
exit 1
fi
# there should be a way to make this be builtins only
# using printf and glob expansions, look into later
if /bin/rmdir "$arg" 2>/dev/null ; then
/bin/mkdir -p "$arg"
exit 0
else
exit 1
fi
done
}
mount_dayz_network_drive() { mount_dayz_network_drive() {
if ! is_network_drive_mounted ; then if ! is_network_drive_mounted ; then
sudo mkdir -p /mnt/dayz sudo mkdir -p /mnt/dayz

View File

@@ -29,53 +29,53 @@
# } # }
# args: $1=server_name # args: $1=server_name
update_mods() { # update_mods() {
MODS_FILE="$HOME/modlists/$1" # MODS_FILE="$HOME/modlists/$1"
REMOTE_MODS_DIR="/mnt/dayz/mods/${1%.txt}" # REMOTE_MODS_DIR="/mnt/dayz/mods/${1%.txt}"
mkdir -p "$REMOTE_MODS_DIR" # mkdir -p "$REMOTE_MODS_DIR"
tempfile=/tmp/mods-to-download.txt # tempfile=/tmp/mods-to-download.txt
:> "$tempfile" # :> "$tempfile"
while read -r mod ; do # while read -r mod ; do
# skip comments, blank lines # # skip comments, blank lines
case "$mod" in # case "$mod" in
\#*|'') # \#*|'')
;; # ;;
*) # *)
mod=${mod%%^*} # mod=${mod%%^*}
printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile" # printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile"
mkdir -p "$LOCAL_MODS_DIR/$mod" # mkdir -p "$LOCAL_MODS_DIR/$mod"
esac # esac
done < "$MODS_FILE" # done < "$MODS_FILE"
msg "----------- DOWNLOAD MODS -------------" # msg "----------- DOWNLOAD MODS -------------"
steamcmd -tcp +login "$STEAM_USER" $(cat "$tempfile" | xargs) +quit || exit 1 # steamcmd -tcp +login "$STEAM_USER" $(cat "$tempfile" | xargs) +quit || exit 1
msg "----------- RENAMING MODS -------------" # msg "----------- RENAMING MODS -------------"
rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: # rm -rf "$HOME/mods_to_copy" 2>/dev/null ||:
mkdir -p "$HOME/mods_to_copy" # mkdir -p "$HOME/mods_to_copy"
:> "$HOME/mods_to_copy/mods.txt" # :> "$HOME/mods_to_copy/mods.txt"
while read -r mod ; do # while read -r mod ; do
# skip comments, blank lines # # skip comments, blank lines
case "$mod" in # case "$mod" in
\#*|'') # \#*|'')
;; # ;;
*) # *)
mod_id=${mod%%^*} # mod_id=${mod%%^*}
mod_name=${mod##*^} # mod_name=${mod##*^}
do_sync "$LOCAL_MODS_DIR/$mod_id"/ "$HOME/mods_to_copy/@${mod_name}" # do_sync "$LOCAL_MODS_DIR/$mod_id"/ "$HOME/mods_to_copy/@${mod_name}"
printf '@%s\n' "$mod_name" >> "$HOME/mods_to_copy/mods.txt" # printf '@%s\n' "$mod_name" >> "$HOME/mods_to_copy/mods.txt"
esac # esac
done < "$MODS_FILE" # done < "$MODS_FILE"
msg "----------- SYNCING MODS -------------" # msg "----------- SYNCING MODS -------------"
do_sync "$HOME/mods_to_copy"/ "$REMOTE_MODS_DIR" # do_sync "$HOME/mods_to_copy"/ "$REMOTE_MODS_DIR"
rm "$tempfile" 2>/dev/null ||: # rm "$tempfile" 2>/dev/null ||:
rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: # rm -rf "$HOME/mods_to_copy" 2>/dev/null ||:
} # }
update_stock_maps() { update_stock_maps() {
msg "----------- UPDATING MAPS -------------" msg "----------- UPDATING MAPS -------------"

View File

@@ -1,6 +1,9 @@
#!/bin/sh #!/bin/sh
# #
# shellcheck disable=1090,2034,2011 # shellcheck disable=1090,2034,2011
#
# "should check code directly not $?"
# shellcheck disable=2181
# --------------------------------------------------- # ---------------------------------------------------
# =================================================== # ===================================================
@@ -25,6 +28,7 @@ export MODLISTS="$PWD/modlists"
export LOCAL_STOCK="$HOME/stock/DayZ" export LOCAL_STOCK="$HOME/stock/DayZ"
export LOCAL_STOCK_GAME="$LOCAL_STOCK/DayZ" export LOCAL_STOCK_GAME="$LOCAL_STOCK/DayZ"
export LOCAL_STOCK_SERVER="$LOCAL_STOCK/DayZServer" export LOCAL_STOCK_SERVER="$LOCAL_STOCK/DayZServer"
export LOCAL_STOCK_MODS="$LOCAL_STOCK/mods"
# =================================================== # ===================================================
# 03. Mount network drive # 03. Mount network drive
@@ -40,7 +44,7 @@ fi
# =================================================== # ===================================================
# 04. Checks # 04. Checks
# =================================================== # ===================================================
mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER" mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER" "$LOCAL_STOCK_MODS"
if [ "$USER" != "$STEAMCMD_USER" ] ; then if [ "$USER" != "$STEAMCMD_USER" ] ; then
die "Current user: '$USER' does not match '$STEAMCMD_USER'" die "Current user: '$USER' does not match '$STEAMCMD_USER'"
@@ -93,13 +97,13 @@ update_game() {
# args: $1 = server_modlist.txt to update # args: $1 = server_modlist.txt to update
update_mods_for_server() { update_mods_for_server() {
MODS_FILE="$MODLISTS/$1" mods_file="$MODLISTS/$1"
REMOTE_MODS_DIR="$REMOTE_MODS_DIR/${1%.txt}" map_name=${1%.txt}
mkdir -p "$REMOTE_MODS_DIR/${1%.txt}" mkdir -p "$REMOTE_MODS/$map_name"
# Create temporary file to list all the mod_id's we are # Create temporary file to list all the mod_id's we are
# going to download. This speeds up steamcmd and avoids rate limits. # going to download. This speeds up steamcmd and avoids rate limits.
tempfile=/tmp/mods-to-download.txt tempfile="/tmp/$map_name-mods_to_download.txt"
:> "$tempfile" :> "$tempfile"
# load the server_modlist.txt, copying the mod id's we need to update # load the server_modlist.txt, copying the mod id's we need to update
@@ -113,20 +117,69 @@ update_mods_for_server() {
# #
while read -r mod ; do while read -r mod ; do
case "$mod" in case "$mod" in
\#*|'') \#*|''|' ')
;; ;;
*) *)
mod=${mod%%^*} mod=${mod%%^*}
if [ -z "$mod" ] ; then
die "mod for $server appears to be empty - syntax error"
fi
printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile"
mkdir -p "$LOCAL_MODS_DIR/$mod"
esac
done < "$MODS_FILE"
rm "$tempfile" 2>/dev/null ||: # check validity of syntax
unset tempfile mod if [ -z "$mod" ] ; then
die "mod for $map_name appears to be empty - syntax error"
fi
if ! isnum "$mod" ; then
die "mod $mod for $map_name does not appear to be a number"
fi
printf "%s\n" "$mod" >> "$tempfile"
mkdir -p "$LOCAL_STOCK_MODS/$mod"
esac
done <"$mods_file"
unset mod
msg "----------- DOWNLOADING MODS -------------"
# shellcheck disable=2046
steamcmd \
-tcp \
+force_install_dir "$LOCAL_MODS_DIR" \
+@sSteamCmdForcePlatformType windows \
+@ShutdownOnFailedCommand 1 \
+login "$STEAM_USER" \
+workshop_download_item \
"$DAYZ_GAME_ID" \
$(xargs < "$tempfile") \
+quit
msg "exiting - test"
exit 1
if [ $? -ne 0 ] ; then
die "Problem downloading mods for $map_name"
fi
msg "------------ RENAMING MODS -------------"
mods_to_copy="$LOCAL_STOCK_MODS/mods_to_copy"
rm -rf "$mods_to_copy" 2>/dev/null ||:
mkdir -p "$mods_to_copy"
:> "$mods_to_copy/mods.txt"
while read -r mod ; do
# skip comments, blank lines
case "$mod" in
\#*|''|' ')
;;
*)
mod_id=${mod%%^*}
mod_name=${mod##*^}
do_sync "$LOCAL_STOCK_MODS/$mod_id"/ "$mods_to_copy/@${mod_name}"
printf '@%s\n' "$mod_name" >> "$mods_to_copy/mods.txt"
esac
done < "$mods_file"
msg "----------- SYNCING MODS -------------"
do_sync "$mods_to_copy"/ "$REMOTE_MODS"
rm -f "$tempfile" 2>/dev/null ||:
unset tempfile mod map_name mods_file mods_to_copy mod_name mod_id
} }
main() { main() {