LinuxGSM icon indicating copy to clipboard operation
LinuxGSM copied to clipboard

[Feature]: DayZ Workshop Auto-Update

Open int80x0 opened this issue 1 year ago • 3 comments

User story

would be cool if the dayz server gets support for workshop mods with autoupdates

Game

DayZ

Linux distro

Ubuntu 22.04

Command

command: mods-install, command: mods-update, command: mods-remove

Further information

Mods are currently not supported

int80x0 avatar Mar 15 '24 14:03 int80x0

+1

whytf avatar Apr 07 '24 12:04 whytf

For the time being i have scripted a simple version of this feature, at this time it only handles downloading, copying files & keys, however it could help in future development:

  • it assumes LGSM defaults
  • that the actual config used is common.cfg and that username and password are enclosed in ""
  • that steamcmd is installed in default location
  • that a modlist.txt is present in serverfiles directory
  • that each line in modlist.txt looks like this: "Mod_ID,@Mod_Name"
  • it doesn't handle putting all the mods inside common.cfg to be loaded
  • yes it is similar and based on windows version of this script that is written in .bat and used by some server owners, myself included
  • same as with windows version, if you plan on having many mods it is better to use new account with dayz as logging into steamcmd is rate limited and login happens once for every mod
  • old mod folder, for example @Mod_Name directory in serverfiles is deleted and replaced each time this script runs
  • has been tested only on debian 12
#!/bin/bash

MOD_LIST="$HOME/serverfiles/modlist.txt"
KEYS_DEST="$HOME/serverfiles"
STEAMCMD_EXE="$HOME/.steam/steamcmd/steamcmd.sh"
WORKSHOP_PATH="$HOME/.local/share/Steam/steamapps/workshop/content/221100"
steamuser=$(grep "steamuser" $HOME/lgsm/config-lgsm/dayzserver/common.cfg | cut -d'"' -f2)
steampass=$(grep "steampass" $HOME/lgsm/config-lgsm/dayzserver/common.cfg | cut -d'"' -f2)

if [ ! -f "${MOD_LIST}" ]; then
    echo "Error: modlist.txt not found."
fi

while IFS= read -r line || [[ -n "$line" ]]; do
    ID=$(echo "$line" | cut -d',' -f1)
    ${STEAMCMD_EXE} +login "${steamuser}" "${steampass}" +workshop_download_item 221100 "${ID}" +quit
done < "${MOD_LIST}"

while IFS= read -r line || [[ -n "$line" ]]; do
    ID=$(echo "$line" | cut -d',' -f1)
    ModName=$(echo "$line" | cut -d',' -f2)
    
    if [ -d "$HOME/serverfiles/${ModName}" ]; then
        rm -rf "$HOME/serverfiles/${ModName}"
    fi
   
    cp -r "${WORKSHOP_PATH}/${ID}" "$HOME/serverfiles/${ModName}"

    if [ -d "$HOME/serverfiles/${ModName}/keys" ]; then
        cp -r "$HOME/serverfiles/${ModName}/keys" "${KEYS_DEST}"
    fi
done < "${MOD_LIST}"

echo "Mod folders copied and renamed successfully."

whytf avatar Apr 08 '24 18:04 whytf

fyi:

Some mods won't let you download them with an account that doesn't own the game.

and some mods are larger than 1gb which means you'll get a timeout error.

I've put together a more comprehensive tool to handle the second issue.

https://gist.github.com/airtonix/e7e6935d1ec34f8f5fbc08d8c97e8fdb

airtonix avatar Aug 10 '24 07:08 airtonix