This commit is contained in:
2023-11-25 09:29:09 -06:00
parent f42faa5a2b
commit 3304edea4f
2 changed files with 173 additions and 64 deletions

View File

@@ -89,47 +89,47 @@
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
# Load Mods # Load Mods
# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
load_mods() { # load_mods() {
if [ ! -f "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt" ] ; then # if [ ! -f "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt" ] ; then
die "mods.txt list missing" # die "mods.txt list missing"
fi # fi
mkdir -p "$SERVER_HOME/mods" # mkdir -p "$SERVER_HOME/mods"
_modstring="" # _modstring=""
while read -r mod ; do # while read -r mod ; do
case $mod in # case $mod in
'@'*) # '@'*)
msg "- Found mod: $mod" # msg "- Found mod: $mod"
_modstring="$_modstring;mods/$mod" # _modstring="$_modstring;mods/$mod"
do_sync "$MOD_CACHE/$MAP_FOLDER_NAME/$mod"/ "$SERVER_HOME/mods/$mod" # do_sync "$MOD_CACHE/$MAP_FOLDER_NAME/$mod"/ "$SERVER_HOME/mods/$mod"
for addon_folder in addons Addons addon Addon ; do # for addon_folder in addons Addons addon Addon ; do
if [ -d "$SERVER_HOME/mods/$mod/$addon_folder" ] ; then # if [ -d "$SERVER_HOME/mods/$mod/$addon_folder" ] ; then
for addon in "$SERVER_HOME/mods/$mod/$addon_folder"/* ; do # for addon in "$SERVER_HOME/mods/$mod/$addon_folder"/* ; do
if [ ! -f "$SERVER_HOME/addons/${addon##*/}" ] ; then # if [ ! -f "$SERVER_HOME/addons/${addon##*/}" ] ; then
cp -f "$addon" "$SERVER_HOME/addons/" # cp -f "$addon" "$SERVER_HOME/addons/"
fi # fi
done # done
fi # fi
done # done
for key_folder in keys Keys key Key ; do # for key_folder in keys Keys key Key ; do
if [ -d "$SERVER_HOME/mods/$mod/$key_folder" ] ; then # if [ -d "$SERVER_HOME/mods/$mod/$key_folder" ] ; then
for key in "$SERVER_HOME/mods/$mod/$key_folder"/* ; do # for key in "$SERVER_HOME/mods/$mod/$key_folder"/* ; do
if [ ! -f "$SERVER_HOME/keys/${key##*/}" ] ; then # if [ ! -f "$SERVER_HOME/keys/${key##*/}" ] ; then
cp -f "$key" "$SERVER_HOME/keys/" # cp -f "$key" "$SERVER_HOME/keys/"
fi # fi
done # done
fi # fi
done # done
esac # esac
done < "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt" # done < "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt"
# trim the initial leading ';' # # trim the initial leading ';'
_modstring=${_modstring#;} # _modstring=${_modstring#;}
printf '%s\n' "$_modstring" > .modstring # printf '%s\n' "$_modstring" > .modstring
} # }
# # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* # # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
# # Load Map # # Load Map
@@ -333,12 +333,12 @@ main() {
# msg "Setting up environment" # msg "Setting up environment"
# setup_environment || die "Could not set up environment." # setup_environment || die "Could not set up environment."
msg "Loading mods" # msg "Loading mods"
load_mods || die "Could not load mods" # load_mods || die "Could not load mods"
mod_string=$(cat .modstring) # mod_string=$(cat .modstring)
msg "Loading stock map data" # msg "Loading stock map data"
load_stock_map_data || die "Could not load map" # load_stock_map_data || die "Could not load map"
msg "Patching types.xml" msg "Patching types.xml"
patch_types || die "Failed to patch types" patch_types || die "Failed to patch types"
@@ -349,10 +349,6 @@ main() {
msg "Creating custom types list" msg "Creating custom types list"
load_customtypes || die "Failed to load custom types" load_customtypes || die "Failed to load custom types"
echo '===================================='
printf '%s - Server started.\n' "$(date)"
echo '===================================='
# creating temp.bat here to avoid the arg max char limit of windows cmd.exe # creating temp.bat here to avoid the arg max char limit of windows cmd.exe
cat > temp.bat <<EOF cat > temp.bat <<EOF
:start :start
@@ -362,6 +358,10 @@ EOF
# start the server # start the server
cmd.exe /C temp.bat cmd.exe /C temp.bat
echo '===================================='
printf '%s - Server started.\n' "$(date)"
echo '===================================='
printf '\n**** Sleeping for: %s *****\n\n' "$RESTART_INTERVAL" printf '\n**** Sleeping for: %s *****\n\n' "$RESTART_INTERVAL"
count=0 count=0

View File

@@ -43,8 +43,12 @@ export CACHE="$LOCAL_DAYZ_FILES/cache"
export STOCK_SERVER_CACHE="$CACHE/stock_server" export STOCK_SERVER_CACHE="$CACHE/stock_server"
export MOD_CACHE="$CACHE/mods" export MOD_CACHE="$CACHE/mods"
export SERVERS="$LOCAL_DAYZ_FILES/servers" export SERVERS="$LOCAL_DAYZ_FILES/servers"
# (4 hours, in seconds) # (4 hours, in seconds)
export RESTART_INTERVAL=$((60 * 60 * 4)) ################################# export RESTART_INTERVAL=$((60 * 60 * 4))
# (10 minutes)
export RESTART_INTERVAL=$((10 * 60))
# =================================================== # ===================================================
# 03. Mount network drive # 03. Mount network drive
@@ -83,42 +87,60 @@ init_server() {
# =================================================== # ===================================================
# 05. Load stock files # 05. Load stock files
# =================================================== # ===================================================
# load_stock_map_data() { load_stock_map_data() {
# mkdir -p "$SERVER_HOME/mpmissions/$MAP_FOLDER_NAME" mkdir -p "$SERVER_HOME/mpmissions/$MAP_FOLDER_NAME"
# do_sync --exclude='*storage_1*' \
# "$DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME"/ \ do_sync --exclude='*storage_1*' \
# "$SERVER_HOME/mpmissions/$MAP_FOLDER_NAME" || \ "$DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME"/ \
# die "Failed to copy stock map data" "$SERVER_HOME/mpmissions/$MAP_FOLDER_NAME" || \
# } die "Failed to copy remote stock map data to local cache"
}
refresh_local_cache() { refresh_local_cache() {
msg "Refreshing local stock server cache" msg "Refreshing local stock server cache"
if ! islocked_remote_server ; then if ! islocked_remote_server ; then
do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" || die "Failed to copy remote stock server data to local cache"
else else
msg "Remote server is locked, sleeping..." msg "Remote server is locked, sleeping..."
while islocked_remote_server ; do while islocked_remote_server ; do
sleep 15 sleep 15
echo 'Sleeping...' echo 'Sleeping...'
done done
do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" do_sync "$REMOTE_STOCK_SERVER"/ "$STOCK_SERVER_CACHE" || die "Failed to copy remote stock server data to local cache"
fi fi
msg "Stock server data copied into local server cache!" msg "Sucessfully copied stock server data into local cache"
# -------------------------------------
msg "Refreshing local map data cache for: $MAP_FOLDER_NAME"
if ! islocked_remote_server ; then
do_sync "$REMOTE_MAPS/$MAP_FOLDER_NAME"/ "$DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME" || \
die "Failed to copy remote stock map data for: $MAP_FOLDER_NAME"
else
msg "Remote server is locked, sleeping..."
while islocked_remote_server ; do
sleep 15
echo 'Sleeping...'
done
do_sync "$REMOTE_MAPS/$MAP_FOLDER_NAME"/ "$DAYZ_FILES/stock/maps/$MAP_FOLDER_NAME" || \
die "Failed to copy remote stock map data for: $MAP_FOLDER_NAME"
fi
msg "Successfully copied stock map data for: $MAP_FOLDER_NAME"
# ------------------------------------- # -------------------------------------
msg "Refreshing local mods cache" msg "Refreshing local mods cache"
if ! islocked_remote_server ; then if ! islocked_remote_server ; then
do_sync "$REMOTE_MODS"/ "$MOD_CACHE" do_sync "$REMOTE_MODS"/ "$MOD_CACHE" || die "Failed to copy remote mods to local cache"
else else
msg "Remote server is locked, sleeping..." msg "Remote server is locked, sleeping..."
while islocked_remote_server ; do while islocked_remote_server ; do
sleep 15 sleep 15
echo 'Sleeping...' echo 'Sleeping...'
done done
do_sync "$REMOTE_MODS"/ "$MOD_CACHE" do_sync "$REMOTE_MODS"/ "$MOD_CACHE" || die "Failed to copy remote mods to local cache"
fi fi
msg "Mods data copied into local mod cache!" msg "Successfully copied remote mods into local cache"
} }
setup_environment() { setup_environment() {
@@ -128,19 +150,68 @@ setup_environment() {
do_sync "$STOCK_SERVER_CACHE/$folder"/ "$SERVER_HOME/$folder" || die "Failed to copy stock: $folder" do_sync "$STOCK_SERVER_CACHE/$folder"/ "$SERVER_HOME/$folder" || die "Failed to copy stock: $folder"
done done
# list of all stock server files # list of all stock server files
for file in ban.txt dayz.gproj dayzsetting.xml whitelist.txt \ for file in dayz.gproj dayzsetting.xml whitelist.txt \
DayZServer_x64.exe steam_api64.dll steamclient64.dll \ DayZServer_x64.exe steam_api64.dll steamclient64.dll \
tier0_s64.dll vstdlib_s64.dll ; do tier0_s64.dll vstdlib_s64.dll ; do
cp -fv "$STOCK_SERVER_CACHE/$file" "$SERVER_HOME/$file" || die "Failed to copy stock: $file" cp -fv "$STOCK_SERVER_CACHE/$file" "$SERVER_HOME/$file" || die "Failed to copy stock: $file"
done done
msg "Copying into $SERVER_HOME stock map data for: $MAP_FOLDER_NAME"
load_stock_map_data
msg "Copying mod files from local cache into $SERVER_HOME" msg "Copying mod files from local cache into $SERVER_HOME"
do_sync "$MOD_CACHE/$MAP_FOLDER_NAME"/ "$SERVER_HOME/mods" || die "Failed to copy mods to $SERVER_HOME" do_sync "$MOD_CACHE/$MAP_FOLDER_NAME"/ "$SERVER_HOME/mods" || die "Failed to copy mods to $SERVER_HOME"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~ TODO: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ msg "Copying DZSA executable"
# msg "Copying DZSA executable" do_sync "$REMOTE_DIR/software/DZSALModServer.exe" "$SERVER_HOME"/
# cp -f "$DAYZ_FILES/software/DZSALModServer.exe" "$SERVER_HOME/" }
# ~~~~~~~~~~~~~~~~~~~~~~~~~~ TODO: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# finds list of mods to load and stores them in .modstring file
# to be used as parameters to the server
load_mods() {
if [ ! -f "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt" ] ; then
die "mods.txt list for $MAP_FOLDER_NAME is missing"
fi
mkdir -p "$SERVER_HOME/mods"
_modstring=""
while read -r mod ; do
case $mod in
'@'*)
msg "- Found mod: $mod"
_modstring="$_modstring;mods/$mod"
# common spelling differences, check for all
for addon_folder in addons Addons addon Addon add_ons add_on Add_on Add_ons ; do
if [ -d "$SERVER_HOME/mods/$mod/$addon_folder" ] ; then
for addon in "$SERVER_HOME/mods/$mod/$addon_folder"/* ; do
if [ ! -f "$SERVER_HOME/addons/${addon##*/}" ] ; then
cp -f "$addon" "$SERVER_HOME/addons/"
fi
done
fi
done
for key_folder in keys Keys key Key ; do
if [ -d "$SERVER_HOME/mods/$mod/$key_folder" ] ; then
for key in "$SERVER_HOME/mods/$mod/$key_folder"/* ; do
if [ ! -f "$SERVER_HOME/keys/${key##*/}" ] ; then
cp -f "$key" "$SERVER_HOME/keys/"
fi
done
fi
done
esac
done < "$MOD_CACHE/$MAP_FOLDER_NAME/mods.txt"
# trim the initial leading ';'
_modstring=${_modstring#;}
printf '%s\n' "$_modstring" > .modstring
unset _modstring
msg "Mods successfully loaded. Using modstring:"
printf '"%s"\n' "$(cat .modstring)"
} }
# =================================================== # ===================================================
@@ -164,6 +235,44 @@ start_server() {
msg "Setting up environment" msg "Setting up environment"
setup_environment || die "Could not set up environment." setup_environment || die "Could not set up environment."
msg "Loading mods"
load_mods || die "Could not load mods"
mod_string=$(cat .modstring)
# creating temp.bat here to avoid the arg max char limit of windows cmd.exe
cat > temp.bat <<EOF
:start
start "DayZ Server" /min DZSALModServer.exe -config=serverDZ.cfg -port="$SERVER_PORT" -profiles=Profilesfolder -mod="$mod_string" -cpuCount="$SERVER_CPU" -dologs -adminlog -netlog -freezecheck
EOF
# start the server
cmd.exe /C temp.bat
echo '===================================='
printf '%s - Server started.\n' "$(date)"
echo '===================================='
printf '\n**** Sleeping for: %s *****\n\n' "$RESTART_INTERVAL"
count=0
while [ "$count" -lt "$RESTART_INTERVAL" ] ; do
sleep 60
count=$((count + 60))
msg "TIME LEFT BEFORE RESTART: $(( (RESTART_INTERVAL - count) / 60 )) minutes"
done
echo "==========================="
msg "Time up"
msg "Killing server"
cmd.exe /C taskkill /im DayZServer_x64.exe /F
rm -f temp.bat 2>/dev/null ||:
msg "Sleeping 10 seconds to settle"
sleep 10
msg "SERVER IS RESTARTING"
} }
# =================================================== # ===================================================