277 lines
8.4 KiB
Bash
277 lines
8.4 KiB
Bash
#!/bin/sh
|
|
#
|
|
# shellcheck disable=1090,2034,2011
|
|
#
|
|
# "should check code directly not $?"
|
|
# shellcheck disable=2181
|
|
# ---------------------------------------------------
|
|
|
|
# ===================================================
|
|
# 01. Attempt to load global DayZ values
|
|
# ===================================================
|
|
echo "Starting, attempting to load globals.sh"
|
|
|
|
GLOBALS_FILE="$PWD/lib/globals.sh"
|
|
if [ -e "$GLOBALS_FILE" ] ; then
|
|
chmod +x "$GLOBALS_FILE"
|
|
. "$GLOBALS_FILE"
|
|
else
|
|
die "Could not load: $GLOBALS_FILE"
|
|
fi
|
|
|
|
# ===================================================
|
|
# 02. Local script variables
|
|
# ===================================================
|
|
export STEAMCMD_USER=steam
|
|
export MODLISTS="$PWD/modlists"
|
|
|
|
export LOCAL_STOCK="$HOME/stock"
|
|
export LOCAL_STOCK_GAME="$LOCAL_STOCK/DayZ"
|
|
export LOCAL_STOCK_SERVER="$LOCAL_STOCK/DayZServer"
|
|
export LOCAL_MODS="$HOME/mods"
|
|
|
|
# ===================================================
|
|
# 03. Mount network drive
|
|
# ===================================================
|
|
if ! is_network_drive_mounted ; then
|
|
mount_dayz_network_drive
|
|
|
|
if ! is_network_drive_mounted ; then
|
|
die "Could not mount network drive"
|
|
fi
|
|
fi
|
|
|
|
# ===================================================
|
|
# 04. Checks
|
|
# ===================================================
|
|
mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER" "$LOCAL_MODS"
|
|
|
|
if [ "$USER" != "$STEAMCMD_USER" ] ; then
|
|
die "Current user: '$USER' does not match '$STEAMCMD_USER'"
|
|
fi
|
|
|
|
if [ ! -d "$MODLISTS" ] ; then
|
|
die "Could not find modlists at: $MODLISTS"
|
|
fi
|
|
|
|
if [ ! -d "$REMOTE_MODS" ] ; then
|
|
die "Could not find remote mods at: $REMOTE_MODS"
|
|
fi
|
|
|
|
if [ ! -d "$REMOTE_MAPS" ] ; then
|
|
die "Could not find remote maps at: $REMOTE_MAPS"
|
|
fi
|
|
|
|
# ===================================================
|
|
# 05. Begin functions
|
|
# ===================================================
|
|
update_server() {
|
|
msg "============== UPDATING DAYZ SERVER ================="
|
|
steamcmd -tcp \
|
|
+force_install_dir "$LOCAL_STOCK_SERVER" \
|
|
+@sSteamCmdForcePlatformType windows \
|
|
+@ShutdownOnFailedCommand 1 \
|
|
+login "$STEAM_USER" \
|
|
+app_update "$DAYZ_SERVER_ID" \
|
|
+quit
|
|
|
|
is_network_drive_mounted &&
|
|
do_sync "$LOCAL_STOCK_SERVER"/ "$REMOTE_STOCK_SERVER"
|
|
msg "============ DONE UPDATING SERVER ====================="
|
|
}
|
|
|
|
update_game() {
|
|
msg "========== UPDATING DAYZ GAME ================"
|
|
steamcmd -tcp \
|
|
+force_install_dir "$LOCAL_STOCK_GAME" \
|
|
+@sSteamCmdForcePlatformType windows \
|
|
+@ShutdownOnFailedCommand 1 \
|
|
+login "$STEAM_USER" \
|
|
+app_update "$DAYZ_GAME_ID" \
|
|
+quit
|
|
|
|
is_network_drive_mounted &&
|
|
do_sync "$LOCAL_STOCK_GAME"/ "$REMOTE_STOCK_GAME"
|
|
msg "============= DONE UPDATING GAME ==================="
|
|
}
|
|
|
|
# args: $1 = server_modlist.txt to update
|
|
update_mods_for_server() {
|
|
msg "======= UPDATING MODS FOR: $1 ========"
|
|
|
|
mods_file="$MODLISTS/$1"
|
|
map_name=${1%.txt}
|
|
map_mod_dir="$REMOTE_MODS/$map_name"
|
|
mkdir -p "$map_mod_dir"
|
|
|
|
# Create temporary file to list all the mod_id's we are
|
|
# going to download. This speeds up steamcmd and avoids rate limits.
|
|
tempfile="/tmp/$map_name-mods_to_download.txt"
|
|
:> "$tempfile"
|
|
|
|
# load the server_modlist.txt, copying the mod id's we need to update
|
|
# to the temp file, while skipping comments and blank lines
|
|
#
|
|
# format should be: "mod_id^nickname"
|
|
#
|
|
# # Dabs Framework
|
|
# # https://steamcommunity.com/sharedfiles/filedetails/?id=2545327648
|
|
# 2545327648^dabsframework
|
|
#
|
|
while read -r mod ; do
|
|
case "$mod" in
|
|
\#*|''|' ')
|
|
;;
|
|
return)
|
|
# add keyword to stop reading for mods (for testing)
|
|
return
|
|
;;
|
|
*)
|
|
mod=${mod%%^*}
|
|
|
|
# check validity of syntax
|
|
if [ -z "$mod" ] ; then
|
|
die "mod for $map_name appears to be empty - syntax error"
|
|
fi
|
|
|
|
printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile"
|
|
esac
|
|
done <"$mods_file"
|
|
unset mod
|
|
|
|
# shellcheck disable=2046
|
|
steamcmd \
|
|
-tcp \
|
|
+force_install_dir "$LOCAL_MODS" \
|
|
+@sSteamCmdForcePlatformType windows \
|
|
+@ShutdownOnFailedCommand 1 \
|
|
+login "$STEAM_USER" \
|
|
$(xargs < "$tempfile") \
|
|
+quit
|
|
|
|
if [ $? -ne 0 ] ; then
|
|
die "Problem downloading mods for $map_name"
|
|
fi
|
|
|
|
msg "------------ RENAMING MODS -------------"
|
|
mods_to_copy="$LOCAL_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##*^}
|
|
if [ ! -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id" ] ; then
|
|
die "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id does not exist"
|
|
fi
|
|
do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$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"/ "$map_mod_dir"
|
|
|
|
rm -f "$tempfile" 2>/dev/null ||:
|
|
unset tempfile mod map_name mods_file mods_to_copy mod_name mod_id map_mod_dir
|
|
|
|
msg "======= DONE UPDATING MODS FOR: $1 ========"
|
|
}
|
|
|
|
update_stock_maps() {
|
|
msg "----------- UPDATING MAPS -------------"
|
|
|
|
msg "Copying Stock Chernarus"
|
|
do_sync \
|
|
"$LOCAL_STOCK_SERVER/mpmissions/$CHERNARUS_MAP_NAME"/ \
|
|
"$REMOTE_MAPS/$CHERNARUS_MAP_NAME"
|
|
|
|
msg "Updating Namalsk Survival"
|
|
steamcmd \
|
|
-tcp \
|
|
+force_install_dir "$LOCAL_MODS" \
|
|
+@sSteamCmdForcePlatformType windows \
|
|
+@ShutdownOnFailedCommand 1 \
|
|
+login "$STEAM_USER" \
|
|
+workshop_download_item \
|
|
"$DAYZ_GAME_ID" \
|
|
"$NAMALSK_SURVIVAL_MOD_ID" \
|
|
+quit
|
|
|
|
if [ $? -ne 0 ] ; then
|
|
die "Failed to update Namalsk Survival"
|
|
fi
|
|
|
|
if [ -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$NAMALSK_SURVIVAL_MOD_ID/Extras/Regular/$NAMALSK_MAP_NAME" ] ; then
|
|
do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$NAMALSK_SURVIVAL_MOD_ID/Extras/Regular/$NAMALSK_MAP_NAME"/ \
|
|
"$REMOTE_MAPS/$NAMALSK_MAP_NAME" || \
|
|
die "failed to copy Namalsk map files"
|
|
fi
|
|
|
|
msg "Updating Namalsk Island"
|
|
steamcmd \
|
|
-tcp \
|
|
+force_install_dir "$LOCAL_MODS" \
|
|
+@sSteamCmdForcePlatformType windows \
|
|
+@ShutdownOnFailedCommand 1 \
|
|
+login "$STEAM_USER" \
|
|
+workshop_download_item \
|
|
"$DAYZ_GAME_ID" \
|
|
"$NAMALSK_ISLAND_MOD_ID" \
|
|
+quit
|
|
|
|
if [ $? -ne 0 ] ; then
|
|
die "Failed to update Namalsk Island"
|
|
fi
|
|
|
|
####################TODO: # msg "Updating Optimized Namalsk Server PBOs"
|
|
|
|
# --------------------------------------------------------------------------------------------------------------------
|
|
# TAKISTAN
|
|
# --------------------------------------------------------------------------------------------------------------------
|
|
# msg "Updating TakistanPlus"
|
|
# steamcmd \
|
|
# -tcp \
|
|
# +force_install_dir "$LOCAL_MODS" \
|
|
# +@sSteamCmdForcePlatformType windows \
|
|
# +@ShutdownOnFailedCommand 1 \
|
|
# +login "$STEAM_USER" \
|
|
# +workshop_download_item \
|
|
# "$DAYZ_GAME_ID" \
|
|
# "$TAKISTAN_MOD_ID" \
|
|
# +quit
|
|
|
|
# if [ $? -ne 0 ] ; then
|
|
# die "Failed to update TakistanPlus"
|
|
# fi
|
|
|
|
# if [ -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$TAKISTAN_MOD_ID/Mission/$TAKISTAN_MAP_NAME" ] ; then
|
|
# do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$TAKISTAN_MOD_ID/Mission/$TAKISTAN_MAP_NAME"/ \
|
|
# "$REMOTE_MAPS/$TAKISTAN_MAP_NAME" || \
|
|
# die "failed to copy Takistan map files"
|
|
# fi
|
|
# --------------------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
main() {
|
|
update_server
|
|
update_game
|
|
update_stock_maps
|
|
|
|
for server in $(ls "$MODLISTS" | xargs) ; do
|
|
[ -f "$MODLISTS/$server" ] || continue
|
|
update_mods_for_server "$server"
|
|
unset server
|
|
# rm -rf "$HOME/.steam/debian-installation/steamapps/workshop/downloads"
|
|
# mkdir -p "$HOME/.steam/debian-installation/steamapps/workshop/downloads"
|
|
done
|
|
}
|
|
|
|
main "$@"
|