Explorar o código

Merge branch 'release/v23.4.0'

Daniel Gibbs %!s(int64=2) %!d(string=hai) anos
pai
achega
c6f752be07
Modificáronse 82 ficheiros con 2162 adicións e 338 borrados
  1. 9 2
      .github/workflows/details-check.yml
  2. 1 1
      .github/workflows/detals-check-generate-matrix.sh
  3. 1 1
      .github/workflows/serverlist-validate.sh
  4. 1 1
      lgsm/config-default/config-lgsm/avserver/_default.cfg
  5. 5 9
      lgsm/config-default/config-lgsm/rwserver/_default.cfg
  6. 5 10
      lgsm/config-default/config-lgsm/tiserver/_default.cfg
  7. 44 7
      lgsm/config-default/config-lgsm/wurmserver/_default.cfg
  8. 36 0
      lgsm/data/appmanifest/ahl/appmanifest_10.acf
  9. 41 0
      lgsm/data/appmanifest/ahl/appmanifest_70.acf
  10. 49 0
      lgsm/data/appmanifest/ahl/appmanifest_90.acf
  11. 36 0
      lgsm/data/appmanifest/bb/appmanifest_10.acf
  12. 41 0
      lgsm/data/appmanifest/bb/appmanifest_70.acf
  13. 49 0
      lgsm/data/appmanifest/bb/appmanifest_90.acf
  14. 36 0
      lgsm/data/appmanifest/cscz/appmanifest_10.acf
  15. 41 0
      lgsm/data/appmanifest/cscz/appmanifest_70.acf
  16. 36 0
      lgsm/data/appmanifest/cscz/appmanifest_80.acf
  17. 50 0
      lgsm/data/appmanifest/cscz/appmanifest_90.acf
  18. 36 0
      lgsm/data/appmanifest/css/appmanifest_10.acf
  19. 41 0
      lgsm/data/appmanifest/css/appmanifest_70.acf
  20. 49 0
      lgsm/data/appmanifest/css/appmanifest_90.acf
  21. 36 0
      lgsm/data/appmanifest/dmc/appmanifest_10.acf
  22. 36 0
      lgsm/data/appmanifest/dmc/appmanifest_40.acf
  23. 41 0
      lgsm/data/appmanifest/dmc/appmanifest_70.acf
  24. 50 0
      lgsm/data/appmanifest/dmc/appmanifest_90.acf
  25. 36 0
      lgsm/data/appmanifest/dod/appmanifest_10.acf
  26. 36 0
      lgsm/data/appmanifest/dod/appmanifest_30.acf
  27. 41 0
      lgsm/data/appmanifest/dod/appmanifest_70.acf
  28. 50 0
      lgsm/data/appmanifest/dod/appmanifest_90.acf
  29. 36 0
      lgsm/data/appmanifest/hldm/appmanifest_10.acf
  30. 41 0
      lgsm/data/appmanifest/hldm/appmanifest_70.acf
  31. 47 0
      lgsm/data/appmanifest/hldm/appmanifest_90.acf
  32. 36 0
      lgsm/data/appmanifest/ns/appmanifest_10.acf
  33. 41 0
      lgsm/data/appmanifest/ns/appmanifest_70.acf
  34. 49 0
      lgsm/data/appmanifest/ns/appmanifest_90.acf
  35. 36 0
      lgsm/data/appmanifest/opfor/appmanifest_10.acf
  36. 36 0
      lgsm/data/appmanifest/opfor/appmanifest_50.acf
  37. 41 0
      lgsm/data/appmanifest/opfor/appmanifest_70.acf
  38. 50 0
      lgsm/data/appmanifest/opfor/appmanifest_90.acf
  39. 36 0
      lgsm/data/appmanifest/ricochet/appmanifest_10.acf
  40. 36 0
      lgsm/data/appmanifest/ricochet/appmanifest_60.acf
  41. 41 0
      lgsm/data/appmanifest/ricochet/appmanifest_70.acf
  42. 50 0
      lgsm/data/appmanifest/ricochet/appmanifest_90.acf
  43. 36 0
      lgsm/data/appmanifest/tfc/appmanifest_10.acf
  44. 36 0
      lgsm/data/appmanifest/tfc/appmanifest_20.acf
  45. 41 0
      lgsm/data/appmanifest/tfc/appmanifest_70.acf
  46. 50 0
      lgsm/data/appmanifest/tfc/appmanifest_90.acf
  47. 36 0
      lgsm/data/appmanifest/ts/appmanifest_10.acf
  48. 41 0
      lgsm/data/appmanifest/ts/appmanifest_70.acf
  49. 49 0
      lgsm/data/appmanifest/ts/appmanifest_90.acf
  50. 36 0
      lgsm/data/appmanifest/vs/appmanifest_10.acf
  51. 41 0
      lgsm/data/appmanifest/vs/appmanifest_70.acf
  52. 49 0
      lgsm/data/appmanifest/vs/appmanifest_90.acf
  53. 1 0
      lgsm/data/serverlist.csv
  54. 1 1
      lgsm/functions/check_status.sh
  55. 1 1
      lgsm/functions/command_console.sh
  56. 1 1
      lgsm/functions/command_send.sh
  57. 5 5
      lgsm/functions/command_start.sh
  58. 6 6
      lgsm/functions/command_stop.sh
  59. 1 1
      lgsm/functions/info_distro.sh
  60. 7 7
      lgsm/functions/info_game.sh
  61. 1 1
      lgsm/modules/check_status.sh
  62. 9 7
      lgsm/modules/check_system_dir.sh
  63. 1 1
      lgsm/modules/command_console.sh
  64. 0 19
      lgsm/modules/command_dev_query_raw.sh
  65. 3 3
      lgsm/modules/command_monitor.sh
  66. 1 1
      lgsm/modules/command_send.sh
  67. 7 7
      lgsm/modules/command_start.sh
  68. 6 6
      lgsm/modules/command_stop.sh
  69. 1 1
      lgsm/modules/core_functions.sh
  70. 1 1
      lgsm/modules/core_modules.sh
  71. 98 7
      lgsm/modules/core_steamcmd.sh
  72. 11 10
      lgsm/modules/fix_wurm.sh
  73. 1 1
      lgsm/modules/info_distro.sh
  74. 58 90
      lgsm/modules/info_game.sh
  75. 6 9
      lgsm/modules/info_messages.sh
  76. 3 114
      lgsm/modules/install_config.sh
  77. 1 0
      lgsm/modules/install_server_files.sh
  78. 3 3
      linuxgsm.sh
  79. 1 1
      tests/tests_fctrserver.sh
  80. 1 1
      tests/tests_jc2server.sh
  81. 1 1
      tests/tests_mcserver.sh
  82. 1 1
      tests/tests_ts3server.sh

+ 9 - 2
.github/workflows/details-check.yml

@@ -4,6 +4,10 @@ on:
   workflow_dispatch:
   push:
 
+concurrency:
+  group: ${{ github.ref_name }}
+  cancel-in-progress: true
+
 jobs:
   create-matrix:
     runs-on: ubuntu-latest
@@ -32,11 +36,14 @@ jobs:
       matrix: ${{ fromJSON(needs.create-matrix.outputs.matrix) }}
 
     steps:
+      - name: Download linuxgsm.sh
+        run: wget https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${GITHUB_REF#refs/heads/}/linuxgsm.sh; chmod +x linuxgsm.sh
+
       - name: Install dependencies
         run: sudo apt-get install libxml2-utils jq
 
-      - name: Download linuxgsm.sh
-        run: wget https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/${GITHUB_REF#refs/heads/}/linuxgsm.sh; chmod +x linuxgsm.sh
+      - name: Create serverfiles directory
+        run: mkdir -p serverfiles
 
       - name: Grab server
         run: LGSM_GITHUBBRANCH="${GITHUB_REF#refs/heads/}" ./linuxgsm.sh ${{ matrix.shortname }}server

+ 1 - 1
.github/workflows/detals-check-generate-matrix.sh

@@ -18,7 +18,7 @@ while read -r line; do
 	echo -n "\"shortname\":" >> "shortnamearray.json"
 	echo -n "\"${shortname}\"" >> "shortnamearray.json"
 	echo -n "}," >> "shortnamearray.json"
-done < serverlist.csv
+done < <(tail -n +2 serverlist.csv)
 sed -i '$ s/.$//' "shortnamearray.json"
 echo -n "]" >> "shortnamearray.json"
 echo -n "}" >> "shortnamearray.json"

+ 1 - 1
.github/workflows/serverlist-validate.sh

@@ -3,7 +3,7 @@ echo "Checking that all the game servers are listed in all csv files"
 echo "this check will ensure serverlist.csv has the same number of lines (-2 lines) as the other csv files"
 # count the number of lines in the serverlist.csv
 cd "lgsm/data" || exit
-serverlistcount="$(wc -l < serverlist.csv)"
+serverlistcount="$(tail -n +2 serverlist.csv | wc -l)"
 echo "serverlistcount: $serverlistcount"
 # get list of all csv files starting with ubunutu debian centos
 csvlist="$(ls -1 | grep -E '^(ubuntu|debian|centos|rhel|almalinux|rocky).*\.csv$')"

+ 1 - 1
lgsm/config-default/config-lgsm/avserver/_default.cfg

@@ -137,7 +137,7 @@ stopmode="10"
 # 3: gamedig
 # 4: gsquery
 # 5: tcp
-querymode="5"
+querymode="1"
 querytype=""
 
 ## Console type

+ 5 - 9
lgsm/config-default/config-lgsm/rwserver/_default.cfg

@@ -8,9 +8,6 @@
 
 #### Game Server Settings ####
 
-## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
-javaram="2048" # -Xmx$2048M
-
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
 startparameters=""
 
@@ -115,7 +112,7 @@ sleeptime="0.5"
 appid="339010"
 steamcmdforcewindows="no"
 # SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
-branch=""
+branch="unity"
 betapassword=""
 # Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
 steammaster="false"
@@ -145,13 +142,13 @@ querytype="protocol-valve"
 
 ## Console type
 consoleverbose="yes"
-consoleinteract="no"
+consoleinteract="yes"
 
 ## Game Server Details
 # Do not edit
 gamename="Rising World"
-engine="risingworld"
-glibc="null"
+engine="unity3d"
+glibc="2.17"
 
 #### Directories ####
 # Edit with care
@@ -159,8 +156,7 @@ glibc="null"
 ## Game Server Directories
 systemdir="${serverfiles}"
 executabledir="${serverfiles}"
-preexecutable="java -Xmx${javaram}M -jar"
-executable="./server.jar"
+executable="./RisingWorldServer.x64"
 servercfgdir="${systemdir}"
 servercfg="server.properties"
 servercfgdefault="server.properties"

+ 5 - 10
lgsm/config-default/config-lgsm/tiserver/_default.cfg

@@ -11,15 +11,10 @@
 ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
 ip="0.0.0.0"
 port="7777"
-queryport="27015"
-# Possible maps, see: https://isle.fandom.com/wiki/The_Isle_Server_Settings_and_Configuration#Optional_Maps
-map=""
-
-# EAC start parameters
-eaclaunch="-ini:Engine:[EpicOnlineServices]:DedicatedServerClientId=xyza7891gk5PRo3J7G9puCJGFJjmEguW -ini:Engine:[EpicOnlineServices]:DedicatedServerClientSecret=pKWl6t5i9NJK8gTpVlAxzENZ65P8hYzodV8Dqe5Rlc8"
+defaultmap="/Game/TheIsle/Maps/Game/Isla_Spiro/Isla_Spiro"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="${map} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -log ${eaclaunch}"
+startparameters="${defaultmap} -Port=${port} -log"
 
 #### LinuxGSM Settings ####
 
@@ -125,7 +120,7 @@ steamcmdforcewindows="no"
 branch="evrima"
 betapassword=""
 # Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
-steammaster="true"
+steammaster="false"
 
 ## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
 # 1: tmux kill
@@ -147,8 +142,8 @@ stopmode="2"
 # 3: gamedig
 # 4: gsquery
 # 5: tcp
-querymode="2"
-querytype="protocol-valve"
+querymode="1"
+querytype=""
 
 ## Console type
 consoleverbose="yes"

+ 44 - 7
lgsm/config-default/config-lgsm/wurmserver/_default.cfg

@@ -8,9 +8,52 @@
 
 #### Game Server Settings ####
 
+## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
+# https://www.wurmpedia.com/index.php/Server_administration_(Wurm_Unlimited)
+
+# Game mode (Creative|Adventure)
+gamemode="Creative"
+
+# The kingdom the server belongs to.
+# If you're using the Adventure base, use 1, 2, or 3.
+# If you're using Creative, use 4.
+# Kingdom numbers:
+#  0 - No kingdom
+#  1 - Jen-Kellon
+#  2 - Mol-Rehan
+#  3 - Horde of the Summoned
+#  4 - Freedom
+homekingdom="4"
+
+# Unlocks the admin commands from within the game, that can be used to change
+# the gameplay settings of the server, such as skill gain rate and field growth time.
+adminpassword="ADMINPASSWORD"
+
+# If true the server will follow the rules from the Epic servers in Wurm Online.
+# For instance it will use the skill curve.
+epicsettings="false"
+
+# If the server is a home server (belongs to a single kingdom).
+homeserver="true"
+
+# Defaults to true, should only be set to false if the server is intended to be
+# connected with another server that is going to act as a loginserver.
+loginserver="true"
+
+# Used for server to server communication.
+rmiport="7221"
+rmiregport="7220"
+
+maxplayers="200"
+servername="LinuxGSM"
+serverpassword=""
+ip="0.0.0.0"
+port="3724"
+queryport="27016"
+
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
 # Parameters are edited in the game server config file.
-startparameters="ADMINPWD=\"$ADMINPWD\" EPICSETTINGS=\"$EPICSETTINGS\" EXTERNALPORT=\"$EXTERNALPORT\" HOMESERVER=\"$HOMESERVER\" HOMEKINGDOM=\"$HOMEKINGDOM\" LOGINSERVER=\"$LOGINSERVER\" MAXPLAYERS=\"$MAXPLAYERS\" QUERYPORT=\"$QUERYPORT\" SERVERNAME=\"$SERVERNAME\" SERVERPASSWORD=\"$SERVERPASSWORD\" START=\"$START\" IP=\"$IP\""
+startparameters="start=${gamemode} adminpwd='${adminpassword}' epicsettings='${epicsettings}' externalport='${port}' homeserver='${homeserver}' homekingdom='${homekingdom}' loginserver='${loginserver}' maxplayers='${maxplayers}' queryport='${queryport}' rmiport='${rmiport}' rmiregport='${rmiregport}' servername='${servername}' serverpassword='${serverpassword}' ip='${ip}'"
 
 #### LinuxGSM Settings ####
 
@@ -157,13 +200,7 @@ glibc="2.14"
 ## Game Server Directories
 systemdir="${serverfiles}"
 executabledir="${systemdir}"
-preexecutable="xvfb-run"
 executable="./WurmServerLauncher"
-servercfgdir="${systemdir}"
-servercfg="${selfname}.cfg"
-servercfgdefault="server.cfg"
-servercfgfullpath="${servercfgdir}/${servercfg}"
-source "${servercfgfullpath}"
 
 ## Backup Directory
 backupdir="${lgsmdir}/backup"

+ 36 - 0
lgsm/data/appmanifest/ahl/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984402"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/ahl/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984404"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 49 - 0
lgsm/data/appmanifest/ahl/appmanifest_90.acf

@@ -0,0 +1,49 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984267"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561200949853436"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+		"mod"		"cstrike"
+	}
+	"MountedConfig"
+	{
+		"mod"		"cstrike"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/bb/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984405"
+	"SizeOnDisk"		"03"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/bb/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984407"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 49 - 0
lgsm/data/appmanifest/bb/appmanifest_90.acf

@@ -0,0 +1,49 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984269"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561200402315446"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+		"mod"		"cstrike"
+	}
+	"MountedConfig"
+	{
+		"mod"		"cstrike"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/cscz/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1666731530"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/cscz/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1666731530"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/cscz/appmanifest_80.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"80"
+	"Universe"		"1"
+	"name"		"Counter-Strike: Condition Zero"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1666731530"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"81"
+		{
+			"manifest"		"3601230779843470737"
+			"size"		"415387682"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 50 - 0
lgsm/data/appmanifest/cscz/appmanifest_90.acf

@@ -0,0 +1,50 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1666731360"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561201630089482"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+		"81"		"80"
+	}
+	"UserConfig"
+	{
+		"mod"		"czero"
+	}
+	"MountedConfig"
+	{
+		"mod"		"czero"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/css/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984302"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/css/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984304"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 49 - 0
lgsm/data/appmanifest/css/appmanifest_90.acf

@@ -0,0 +1,49 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984230"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561201379539094"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+		"mod"		"cstrike"
+	}
+	"MountedConfig"
+	{
+		"mod"		"cstrike"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/dmc/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984403"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/dmc/appmanifest_40.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"40"
+	"Universe"		"1"
+	"name"		"Deathmatch Classic"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984402"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"41"
+		{
+			"manifest"		"2010889186716175170"
+			"size"		"48239254"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/dmc/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984405"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 50 - 0
lgsm/data/appmanifest/dmc/appmanifest_90.acf

@@ -0,0 +1,50 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984269"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561201891266584"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+		"41"		"40"
+	}
+	"UserConfig"
+	{
+		"mod"		"dmc"
+	}
+	"MountedConfig"
+	{
+		"mod"		"dmc"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/dod/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688988451"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/dod/appmanifest_30.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"30"
+	"Universe"		"1"
+	"name"		"Day of Defeat"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688988451"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"31"
+		{
+			"manifest"		"3826716661969602728"
+			"size"		"391387184"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/dod/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688988452"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 50 - 0
lgsm/data/appmanifest/dod/appmanifest_90.acf

@@ -0,0 +1,50 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688988429"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561201442771088"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+		"31"		"30"
+	}
+	"UserConfig"
+	{
+		"mod"		"dod"
+	}
+	"MountedConfig"
+	{
+		"mod"		"dod"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/hldm/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984411"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/hldm/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984413"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 47 - 0
lgsm/data/appmanifest/hldm/appmanifest_90.acf

@@ -0,0 +1,47 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984301"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561199593999446"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/ns/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984412"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/ns/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984414"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 49 - 0
lgsm/data/appmanifest/ns/appmanifest_90.acf

@@ -0,0 +1,49 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984290"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561199772965246"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+		"mod"		"cstrike"
+	}
+	"MountedConfig"
+	{
+		"mod"		"cstrike"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/opfor/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984434"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/opfor/appmanifest_50.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"50"
+	"Universe"		"1"
+	"name"		"Half-Life: Opposing Force"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984434"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"51"
+		{
+			"manifest"		"789184054796507140"
+			"size"		"286265390"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/opfor/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984437"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 50 - 0
lgsm/data/appmanifest/opfor/appmanifest_90.acf

@@ -0,0 +1,50 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688984298"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561198622612838"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+		"51"		"50"
+	}
+	"UserConfig"
+	{
+		"mod"		"gearbox"
+	}
+	"MountedConfig"
+	{
+		"mod"		"gearbox"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/ricochet/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"appid_10"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688999004"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/ricochet/appmanifest_60.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"60"
+	"Universe"		"1"
+	"name"		"appid_60"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688999004"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"61"
+		{
+			"manifest"		"4560730344969588055"
+			"size"		"17605146"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/ricochet/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"appid_70"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688999004"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 50 - 0
lgsm/data/appmanifest/ricochet/appmanifest_90.acf

@@ -0,0 +1,50 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688999004"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561198882404437"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+		"61"		"60"
+	}
+	"UserConfig"
+	{
+		"mod"		"ricochet"
+	}
+	"MountedConfig"
+	{
+		"mod"		"ricochet"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/tfc/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688998186"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/tfc/appmanifest_20.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"20"
+	"Universe"		"1"
+	"name"		"Team Fortress Classic"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688998186"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"21"
+		{
+			"manifest"		"7841127166138118042"
+			"size"		"124989202"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/tfc/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688998186"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 50 - 0
lgsm/data/appmanifest/tfc/appmanifest_90.acf

@@ -0,0 +1,50 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688998186"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561201883029803"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+		"21"		"20"
+	}
+	"UserConfig"
+	{
+		"mod"		"tfc"
+	}
+	"MountedConfig"
+	{
+		"mod"		"tfc"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/ts/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688983936"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/ts/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688983937"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 49 - 0
lgsm/data/appmanifest/ts/appmanifest_90.acf

@@ -0,0 +1,49 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688983870"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561202249148738"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+		"mod"		"cstrike"
+	}
+	"MountedConfig"
+	{
+		"mod"		"cstrike"
+	}
+}

+ 36 - 0
lgsm/data/appmanifest/vs/appmanifest_10.acf

@@ -0,0 +1,36 @@
+"AppState"
+{
+	"appid"		"10"
+	"Universe"		"1"
+	"name"		"Counter-Strike"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688998186"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"11"
+		{
+			"manifest"		"4720911300072406946"
+			"size"		"292616113"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 41 - 0
lgsm/data/appmanifest/vs/appmanifest_70.acf

@@ -0,0 +1,41 @@
+"AppState"
+{
+	"appid"		"70"
+	"Universe"		"1"
+	"name"		"Half-Life"
+	"StateFlags"		"68"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688983882"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"0"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"1"
+		{
+			"manifest"		"5928322771446233610"
+			"size"		"429833890"
+		}
+		"71"
+		{
+			"manifest"		"9183617604528345869"
+			"size"		"15302314"
+		}
+	}
+	"UserConfig"
+	{
+	}
+	"MountedConfig"
+	{
+	}
+}

+ 49 - 0
lgsm/data/appmanifest/vs/appmanifest_90.acf

@@ -0,0 +1,49 @@
+"AppState"
+{
+	"appid"		"90"
+	"Universe"		"1"
+	"name"		"Half-Life Dedicated Server"
+	"StateFlags"		"4"
+	"installdir"		"Half-Life"
+	"LastUpdated"		"1688983843"
+	"SizeOnDisk"		"0"
+	"StagingSize"		"0"
+	"buildid"		"0"
+	"LastOwner"		"76561200857512115"
+	"UpdateResult"		"0"
+	"BytesToDownload"		"0"
+	"BytesDownloaded"		"0"
+	"BytesToStage"		"0"
+	"BytesStaged"		"0"
+	"TargetBuildID"		"0"
+	"AutoUpdateBehavior"		"0"
+	"AllowOtherDownloadsWhileRunning"		"0"
+	"ScheduledAutoUpdate"		"0"
+	"InstalledDepots"
+	{
+		"4"
+		{
+			"manifest"		"8690279432129063737"
+			"size"		"25737094"
+		}
+		"1006"
+		{
+			"manifest"		"6912453647411644579"
+			"size"		"72573740"
+		}
+	}
+	"SharedDepots"
+	{
+		"1"		"70"
+		"11"		"10"
+		"71"		"70"
+	}
+	"UserConfig"
+	{
+		"mod"		"cstrike"
+	}
+	"MountedConfig"
+	{
+		"mod"		"cstrike"
+	}
+}

+ 1 - 0
lgsm/data/serverlist.csv

@@ -1,3 +1,4 @@
+shortname,gameservername,gamename,os
 ac,acserver,Assetto Corsa,ubuntu-22.04
 ahl,ahlserver,Action Half-Life,ubuntu-22.04
 ahl2,ahl2server,Action: Source,ubuntu-20.04

+ 1 - 1
lgsm/functions/check_status.sh

@@ -7,4 +7,4 @@
 
 functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-status=$(tmux list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}")
+status=$(tmux -L "${sessionname}" list-sessions -F "#{session_name}" 2>/dev/null | grep -Ecx "^${sessionname}")

+ 1 - 1
lgsm/functions/command_console.sh

@@ -42,7 +42,7 @@ check_status.sh
 if [ "${status}" != "0" ]; then
 	fn_print_ok_nl "Accessing console"
 	fn_script_log_pass "Console accessed"
-	tmux attach-session -t "${sessionname}"
+	tmux -L "${sessionname}" attach-session -t "${sessionname}"
 	fn_print_ok_nl "Closing console"
 	fn_script_log_pass "Console closed"
 else

+ 1 - 1
lgsm/functions/command_send.sh

@@ -26,7 +26,7 @@ if [ "${status}" != "0" ]; then
 	fi
 	echo ""
 	fn_print_dots "Sending command to console: \"${commandtosend}\""
-	tmux send-keys -t "${servicename}" "${commandtosend}" ENTER
+	tmux -L "${sessionname}" send-keys -t "${servicename}" "${commandtosend}" ENTER
 	fn_print_ok_nl "Sending command to console: \"${commandtosend}\""
 	fn_script_log_pass "Command \"${commandtosend}\" sent to console"
 else

+ 5 - 5
lgsm/functions/command_start.sh

@@ -37,7 +37,7 @@ fn_start_teamspeak3() {
 # Used to allow update to detect JK2MV server version.
 fn_start_jk2() {
 	fn_start_tmux
-	tmux send -t "${sessionname}" version ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send -t "${sessionname}" version ENTER > /dev/null 2>&1
 }
 
 fn_start_tmux() {
@@ -80,7 +80,7 @@ fn_start_tmux() {
 		cd "${executabledir}" || exit
 	fi
 
-	tmux new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
+	tmux -L "${sessionname}" new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
 
 	# Create logfile.
 	touch "${consolelog}"
@@ -94,9 +94,9 @@ fn_start_tmux() {
 		echo -e "tmux version: master (user compiled)" >> "${consolelog}"
 		if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
 			if [ "$logtimestamp" == "on" ]; then
-				tmux pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
+				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
 			else
-				tmux pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
+				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
 			fi
 		fi
 
@@ -143,7 +143,7 @@ fn_start_tmux() {
 			echo -e ""
 			echo -e "Command"
 			echo -e "================================="
-			echo -e "tmux new-session -d -s \"${sessionname}\" \"${preexecutable} ${executable} ${startparameters}\"" | tee -a "${lgsmlog}"
+			echo -e "tmux -L \"${sessionname}\" new-session -d -s \"${sessionname}\" \"${preexecutable} ${executable} ${startparameters}\"" | tee -a "${lgsmlog}"
 			echo -e ""
 			echo -e "Error"
 			echo -e "================================="

+ 6 - 6
lgsm/functions/command_stop.sh

@@ -15,7 +15,7 @@ fn_stop_graceful_ctrlc() {
 	fn_print_dots "Graceful: CTRL+c"
 	fn_script_log_info "Graceful: CTRL+c"
 	# Sends quit.
-	tmux send-keys -t "${sessionname}" C-c > /dev/null 2>&1
+	tmux -L "${sessionname}" send-keys -t "${sessionname}" C-c  > /dev/null 2>&1
 	# Waits up to 30 seconds giving the server time to shutdown gracefuly.
 	for seconds in {1..30}; do
 		check_status.sh
@@ -43,7 +43,7 @@ fn_stop_graceful_cmd() {
 	fn_print_dots "Graceful: sending \"${1}\""
 	fn_script_log_info "Graceful: sending \"${1}\""
 	# Sends specific stop command.
-	tmux send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1
 	# Waits up to ${seconds} seconds giving the server time to shutdown gracefully.
 	for ((seconds = 1; seconds <= ${2}; seconds++)); do
 		check_status.sh
@@ -71,7 +71,7 @@ fn_stop_graceful_goldsrc() {
 	fn_print_dots "Graceful: sending \"quit\""
 	fn_script_log_info "Graceful: sending \"quit\""
 	# sends quit
-	tmux send -t "${sessionname}" quit ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send -t "${sessionname}" quit ENTER > /dev/null 2>&1
 	# Waits 3 seconds as goldsrc servers restart with the quit command.
 	for seconds in {1..3}; do
 		sleep 1
@@ -184,10 +184,10 @@ fn_stop_graceful_avorion() {
 	fn_print_dots "Graceful: /save /stop"
 	fn_script_log_info "Graceful: /save /stop"
 	# Sends /save.
-	tmux send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1
 	sleep 5
 	# Sends /quit.
-	tmux send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1
 	# Waits up to 30 seconds giving the server time to shutdown gracefuly.
 	for seconds in {1..30}; do
 		check_status.sh
@@ -240,7 +240,7 @@ fn_stop_tmux() {
 	fn_print_dots "${servername}"
 	fn_script_log_info "tmux kill-session: ${sessionname}: ${servername}"
 	# Kill tmux session.
-	tmux kill-session -t "${sessionname}" > /dev/null 2>&1
+	tmux -L "${sessionname}" kill-session -t "${sessionname}" > /dev/null 2>&1
 	sleep 0.5
 	check_status.sh
 	if [ "${status}" == "0" ]; then

+ 1 - 1
lgsm/functions/info_distro.sh

@@ -10,7 +10,7 @@ functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
 ### Game Server pid
 if [ "${status}" == "1" ]; then
-	gameserverpid="$(tmux list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')"
+	gameserverpid="$(tmux -L "${sessionname}" list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')"
 	if [ "${engine}" == "source" ]; then
 		srcdslinuxpid="$(ps -ef | grep -v grep | grep "${gameserverpid}" | grep srcds_linux | awk '{print $2}')"
 	elif [ "${engine}" == "goldsrc" ]; then

+ 7 - 7
lgsm/functions/info_game.sh

@@ -97,17 +97,17 @@ fn_info_game_armar() {
 	if [ ! -f "${servercfgfullpath}" ]; then
 		adminpassword="${unavailable}"
 		maxplayers="${zero}"
-		port=${port:-"0"}
-		queryport=
+		port="${zero}"
+		queryport="${zero}"
 		servername="${unavailable}"
 		serverpassword="${unavailable}"
 	else
-		adminpassword=$(jq -r '.adminPassword' "${servercfgfullpath}")
+		adminpassword=$(jq -r '.game.passwordAdmin' "${servercfgfullpath}")
 		battleeyeport=1376
-		configip=$(jq -r '.gameHostBindAddress' "${servercfgfullpath}")
-		maxplayers=$(jq -r '.game.playerCountLimit' "${servercfgfullpath}")
-		port=$(jq -r '.gameHostBindPort' "${servercfgfullpath}")
-		queryport=$(jq -r '.steamQueryPort' "${servercfgfullpath}")
+		configip=$(jq -r '.bindAddress' "${servercfgfullpath}")
+		maxplayers=$(jq -r '.game.maxPlayers' "${servercfgfullpath}")
+		port=$(jq -r '.bindPort' "${servercfgfullpath}")
+		queryport=$(jq -r '.a2s.port' "${servercfgfullpath}")
 		servername=$(jq -r '.game.name' "${servercfgfullpath}")
 		serverpassword=$(jq -r '.game.password' "${servercfgfullpath}")
 

+ 1 - 1
lgsm/modules/check_status.sh

@@ -7,4 +7,4 @@
 
 moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-status=$(tmux list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}")
+status=$(tmux -L "${sessionname}" list-sessions -F "#{session_name}" 2> /dev/null | grep -Ecx "^${sessionname}")

+ 9 - 7
lgsm/modules/check_system_dir.sh

@@ -7,16 +7,18 @@
 
 moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-if [ "${commandname}" != "VALIDATE" ]; then
-	checkdir="${serverfiles}"
-else
-	checkdir="${systemdir}"
+if [ ! -d "${serverfiles}" ]; then
+	fn_print_fail_nl "Cannot access ${serverfiles}: No such directory"
+	if [ -d "${lgsmlogdir}" ]; then
+		fn_script_log_fatal "Cannot access ${serverfiles}: No such directory."
+	fi
+	core_exit.sh
 fi
 
-if [ ! -d "${checkdir}" ]; then
-	fn_print_fail_nl "Cannot access ${checkdir}: No such directory"
+if [ ! -d "${systemdir}" ]; then
+	fn_print_fail_nl "Cannot access ${systemdir}: No such directory"
 	if [ -d "${lgsmlogdir}" ]; then
-		fn_script_log_fatal "Cannot access ${checkdir}: No such directory."
+		fn_script_log_fatal "Cannot access ${systemdir}: No such directory."
 	fi
 	core_exit.sh
 fi

+ 1 - 1
lgsm/modules/command_console.sh

@@ -42,7 +42,7 @@ check_status.sh
 if [ "${status}" != "0" ]; then
 	fn_print_ok_nl "Accessing console"
 	fn_script_log_pass "Console accessed"
-	tmux attach-session -t "${sessionname}"
+	tmux -L "${sessionname}" attach-session -t "${sessionname}"
 	fn_print_ok_nl "Closing console"
 	fn_script_log_pass "Console closed"
 else

+ 0 - 19
lgsm/modules/command_dev_query_raw.sh

@@ -32,25 +32,6 @@ echo -e "=================================================================="
 	else
 		echo -e "Game:"
 	fi
-	if [ "${shortname}" == "rw" ]; then
-		if [ -v port2 ]; then
-			echo -e "Game+1: \t${port2} \t$(ss -tupl | grep -c "${port}") \t$(ss -tupl | grep "${port2}" | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep "${port2}" | grep udp | awk '{ print $2 }')"
-		else
-			echo -e "Game+1:"
-		fi
-
-		if [ -v port3 ]; then
-			echo -e "Game+2: \t${port3} \t$(ss -tupl | grep -c "${port}") \t$(ss -tupl | grep "${port3}" | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep "${port3}" | grep udp | awk '{ print $2 }')"
-		else
-			echo -e "Game+2:"
-		fi
-
-		if [ -v port4 ]; then
-			echo -e "Game+3: \t${port4} \t$(ss -tupl | grep -c "${port}") \t$(ss -tupl | grep "${port4}" | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep "${port4}" | grep udp | awk '{ print $2 }')"
-		else
-			echo -e "Game+3:"
-		fi
-	fi
 	if [ "${shortname}" == "pvr" ]; then
 		if [ -v port401 ]; then
 			echo -e "Game+400: \t${port401} \t$(ss -tupl | grep -c "${port401}") \t$(ss -tupl | grep "${port401}" | grep tcp | awk '{ print $2 }') \t$(ss -tupl | grep "${port401}" | grep udp | awk '{ print $2 }')"

+ 3 - 3
lgsm/modules/command_monitor.sh

@@ -38,7 +38,7 @@ fn_monitor_check_lockfile() {
 fn_monitor_check_backup() {
 	# Monitor will check if backup is running.
 	if [ "$(pgrep "${selfname} backup" | wc -l)" != "0" ] || [ "$(pgrep "${selfname} b" | wc -l)" != "0" ]; then
-		fn_print_info_nl "Checking lockfile: LinuxGSM is currently running a backup: "
+		fn_print_info "Checking lockfile: LinuxGSM is currently running a backup: "
 		fn_print_info_eol
 		fn_script_log_info "Checking lockfile: LinuxGSM is currently running a backup"
 		core_exit.sh
@@ -48,7 +48,7 @@ fn_monitor_check_backup() {
 fn_monitor_check_debug() {
 	# Monitor will check if backup is running.
 	if [ "$(pgrep -fc "${selfname} backup")" != "0" ] || [ "$(pgrep -fc "${selfname} b")" != "0" ]; then
-		fn_print_info_nl "Checking lockfile: LinuxGSM is currently in debug mode: "
+		fn_print_info "Checking lockfile: LinuxGSM is currently in debug mode: "
 		fn_print_info_eol
 		fn_script_log_pass "Checking lockfile: LinuxGSM is currently in debug mode"
 		core_exit.sh
@@ -61,7 +61,7 @@ fn_monitor_check_install() {
 		fn_print_dots "Checking for installer: "
 		fn_print_checking_eol
 		fn_script_log_info "Checking for installer: CHECKING"
-		fn_print_info_nl "Checking for installer: LinuxGSM is currently installing: "
+		fn_print_info "Checking for installer: LinuxGSM is currently installing: "
 		fn_print_info_eol
 		fn_script_log_pass "Checking for installer: LinuxGSM is currently installing"
 		core_exit.sh

+ 1 - 1
lgsm/modules/command_send.sh

@@ -26,7 +26,7 @@ if [ "${status}" != "0" ]; then
 	fi
 	echo ""
 	fn_print_dots "Sending command to console: \"${commandtosend}\""
-	tmux send-keys -t "${servicename}" "${commandtosend}" ENTER
+	tmux -L "${sessionname}" send-keys -t "${servicename}" "${commandtosend}" ENTER
 	fn_print_ok_nl "Sending command to console: \"${commandtosend}\""
 	fn_script_log_pass "Command \"${commandtosend}\" sent to console"
 else

+ 7 - 7
lgsm/modules/command_start.sh

@@ -37,7 +37,7 @@ fn_start_teamspeak3() {
 # Used to allow update to detect JK2MV server version.
 fn_start_jk2() {
 	fn_start_tmux
-	tmux send -t "${sessionname}" version ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" end -t "${sessionname}" version ENTER > /dev/null 2>&1
 }
 
 fn_start_tmux() {
@@ -80,7 +80,7 @@ fn_start_tmux() {
 		cd "${executabledir}" || exit
 	fi
 
-	tmux new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
+	tmux -L "${sessionname}" new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${preexecutable} ${executable} ${startparameters}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
 
 	# Create logfile.
 	touch "${consolelog}"
@@ -94,9 +94,9 @@ fn_start_tmux() {
 		echo -e "tmux version: master (user compiled)" >> "${consolelog}"
 		if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
 			if [ "$logtimestamp" == "on" ]; then
-				tmux pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
+				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
 			else
-				tmux pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
+				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
 			fi
 		fi
 
@@ -115,9 +115,9 @@ fn_start_tmux() {
 		# Console logging enable or not set.
 		elif [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
 			if [ "$logtimestamp" == "on" ]; then
-				tmux pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
+				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
 			else
-				tmux pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
+				tmux -L "${sessionname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
 			fi
 		fi
 	else
@@ -143,7 +143,7 @@ fn_start_tmux() {
 			echo -e ""
 			echo -e "Command"
 			echo -e "================================="
-			echo -e "tmux new-session -d -s \"${sessionname}\" \"${preexecutable} ${executable} ${startparameters}\"" | tee -a "${lgsmlog}"
+			echo -e "tmux -L \"${sessionname}\" new-session -d -s \"${sessionname}\" \"${preexecutable} ${executable} ${startparameters}\"" | tee -a "${lgsmlog}"
 			echo -e ""
 			echo -e "Error"
 			echo -e "================================="

+ 6 - 6
lgsm/modules/command_stop.sh

@@ -15,7 +15,7 @@ fn_stop_graceful_ctrlc() {
 	fn_print_dots "Graceful: CTRL+c"
 	fn_script_log_info "Graceful: CTRL+c"
 	# Sends quit.
-	tmux send-keys -t "${sessionname}" C-c > /dev/null 2>&1
+	tmux -L "${sessionname}" send-keys -t "${sessionname}" C-c > /dev/null 2>&1
 	# Waits up to 30 seconds giving the server time to shutdown gracefuly.
 	for seconds in {1..30}; do
 		check_status.sh
@@ -43,7 +43,7 @@ fn_stop_graceful_cmd() {
 	fn_print_dots "Graceful: sending \"${1}\""
 	fn_script_log_info "Graceful: sending \"${1}\""
 	# Sends specific stop command.
-	tmux send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1
 	# Waits up to ${seconds} seconds giving the server time to shutdown gracefully.
 	for ((seconds = 1; seconds <= ${2}; seconds++)); do
 		check_status.sh
@@ -71,7 +71,7 @@ fn_stop_graceful_goldsrc() {
 	fn_print_dots "Graceful: sending \"quit\""
 	fn_script_log_info "Graceful: sending \"quit\""
 	# sends quit
-	tmux send -t "${sessionname}" quit ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send -t "${sessionname}" quit ENTER > /dev/null 2>&1
 	# Waits 3 seconds as goldsrc servers restart with the quit command.
 	for seconds in {1..3}; do
 		sleep 1
@@ -184,10 +184,10 @@ fn_stop_graceful_avorion() {
 	fn_print_dots "Graceful: /save /stop"
 	fn_script_log_info "Graceful: /save /stop"
 	# Sends /save.
-	tmux send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send-keys -t "${sessionname}" /save ENTER > /dev/null 2>&1
 	sleep 5
 	# Sends /quit.
-	tmux send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1
+	tmux -L "${sessionname}" send-keys -t "${sessionname}" /stop ENTER > /dev/null 2>&1
 	# Waits up to 30 seconds giving the server time to shutdown gracefuly.
 	for seconds in {1..30}; do
 		check_status.sh
@@ -240,7 +240,7 @@ fn_stop_tmux() {
 	fn_print_dots "${servername}"
 	fn_script_log_info "tmux kill-session: ${sessionname}: ${servername}"
 	# Kill tmux session.
-	tmux kill-session -t "${sessionname}" > /dev/null 2>&1
+	tmux -L "${sessionname}" kill-session -t "${sessionname}" > /dev/null 2>&1
 	sleep 0.5
 	check_status.sh
 	if [ "${status}" == "0" ]; then

+ 1 - 1
lgsm/modules/core_functions.sh

@@ -8,7 +8,7 @@
 
 module_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-modulesversion="v23.3.6"
+modulesversion="v23.4.0"
 
 # Core
 

+ 1 - 1
lgsm/modules/core_modules.sh

@@ -8,7 +8,7 @@
 
 moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-modulesversion="v23.3.6"
+modulesversion="v23.4.0"
 
 # Core
 

+ 98 - 7
lgsm/modules/core_steamcmd.sh

@@ -147,7 +147,7 @@ fn_check_steamcmd_exec() {
 fn_update_steamcmd_localbuild() {
 	# Gets local build info.
 	fn_print_dots "Checking local build: ${remotelocation}"
-	fn_appmanifest_check
+	fn_check_steamcmd_appmanifest
 	# Uses appmanifest to find local build.
 	localbuild=$(grep buildid "${appmanifestfile}" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -d\  -f3)
 
@@ -174,8 +174,8 @@ fn_update_steamcmd_remotebuild() {
 	fi
 
 	# Removes appinfo.vdf as a fix for not always getting up to date version info from SteamCMD.
-	if [ "$(find "${HOME}" -type f -name "appinfo.vdf" | wc -l)" -ne "0" ]; then
-		find "${HOME}" -type f -name "appinfo.vdf" -exec rm -f {} \;
+	if [ "$(find "${HOME}" -type f -name "appinfo.vdf" 2> /dev/null | wc -l)" -ne "0" ]; then
+		find "${HOME}" -type f -name "appinfo.vdf" -exec rm -f {} \; 2> /dev/null
 	fi
 
 	# password for branch not needed to check the buildid
@@ -281,14 +281,13 @@ fn_update_steamcmd_compare() {
 }
 
 fn_appmanifest_info() {
-	appmanifestfile=$(find -L "${serverfiles}" -type f -name "appmanifest_${appid}.acf")
-	appmanifestfilewc=$(find -L "${serverfiles}" -type f -name "appmanifest_${appid}.acf" | wc -l)
+	appmanifestfile=$(find -L "${serverfiles}/steamapps" -type f -name "appmanifest_${appid}.acf")
+	appmanifestfilewc=$(find -L "${serverfiles}/steamapps" -type f -name "appmanifest_${appid}.acf" | wc -l)
 }
 
-fn_appmanifest_check() {
+fn_check_steamcmd_appmanifest() {
 	fn_appmanifest_info
 	# Multiple or no matching appmanifest files may sometimes be present.
-	# This error is corrected if required.
 	if [ "${appmanifestfilewc}" -ge "2" ]; then
 		fn_print_error "Multiple appmanifest_${appid}.acf files found"
 		fn_script_log_error "Multiple appmanifest_${appid}.acf files found"
@@ -327,4 +326,96 @@ fn_appmanifest_check() {
 			core_exit.sh
 		fi
 	fi
+
+	# Checking for half completed updates.
+	bytesdownloaded=$(grep BytesDownloaded "${appmanifestfile}" | tr -cd '[:digit:]')
+	bytestodownload=$(grep BytesToDownload "${appmanifestfile}" | tr -cd '[:digit:]')
+	if [ "${bytesdownloaded}" != "${bytestodownload}" ]; then
+		fn_print_error_nl "BytesDownloaded and BytesToDownload do not match"
+		fn_script_log_error "BytesDownloaded and BytesToDownload do not match"
+		fn_print_info_nl "Forcing update to correct issue"
+		fn_script_log_info "Forcing update to correct issue"
+		fn_dl_steamcmd
+	fi
+
+	bytesstaged=$(grep BytesStaged "${appmanifestfile}" | tr -cd '[:digit:]')
+	bytestostage=$(grep BytesToStage "${appmanifestfile}" | tr -cd '[:digit:]')
+	if [ "${bytesstaged}" != "${bytestostage}" ]; then
+		fn_print_error_nl "BytesStaged and BytesToStage do not match"
+		fn_script_log_error "BytesStaged and BytesToStage do not match"
+		fn_print_info_nl "Forcing update to correct issue"
+		fn_script_log_info "Forcing update to correct issue"
+		fn_dl_steamcmd
+	fi
+
+	# if engine is GoldSrc check SharedDepots exists in appmanifest_90.acf
+	if [ "${engine}" == "goldsrc" ]; then
+		shareddepotsexists=$(grep -c SharedDepots "${serverfiles}/steamapps/appmanifest_90.acf")
+		if [ ! -f "${serverfiles}/steamapps/appmanifest_90.acf" ] || [ "${shareddepotsexists}" == "0" ]; then
+			fn_print_error_nl "SharedDepots missing from appmanifest_${appid}.acf"
+			fn_script_log_error "SharedDepots missing from appmanifest_${appid}.acf"
+			fn_print_info_nl "Forcing update to correct issue"
+			fn_script_log_info "Forcing update to correct issue"
+			if [ "${shortname}" == "ahl" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "bb" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "cscz" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_80.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "css" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "dmc" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_40.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "dod" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_30.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "hldm" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "ns" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "opfor" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_50.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "ricochet" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_60.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "tfc" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_20.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "ts" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			elif [ "${shortname}" == "vs" ]; then
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_90.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_10.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+				fn_fetch_file_github "lgsm/data/appmanifest/${shortname}" "appmanifest_70.acf" "${serverfiles}/steamapps" "nochmodx" "norun" "noforce" "nohash"
+			fi
+			fn_dl_steamcmd
+		fi
+	fi
 }

+ 11 - 10
lgsm/modules/fix_wurm.sh

@@ -10,14 +10,15 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 # First run requires start with no parms.
 # After first run new dirs are created.
 if [ ! -d "${serverfiles}/Creative" ]; then
-	parmsbypass=1
-	fixbypass=1
-	exitbypass=1
-	command_start.sh
-	fn_firstcommand_reset
-	sleep 10
-	exitbypass=1
-	command_stop.sh
-	fn_firstcommand_reset
-	unset parmsbypass
+	fixname="Copy Creative directory"
+	fn_fix_msg_start
+	cp -R "${serverfiles}/dist/Creative" "${serverfiles}/Creative"
+	fn_fix_msg_end
+fi
+
+if [ ! -d "${serverfiles}/Adventure" ]; then
+	fixname="Copy Adventure directory"
+	fn_fix_msg_start
+	cp -R "${serverfiles}/dist/Adventure" "${serverfiles}/Adventure"
+	fn_fix_msg_end
 fi

+ 1 - 1
lgsm/modules/info_distro.sh

@@ -10,7 +10,7 @@ moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
 ### Game Server pid
 if [ "${status}" == "1" ]; then
-	gameserverpid="$(tmux list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')"
+	gameserverpid="$(tmux -L "${sessionname}" list-sessions -F "#{session_name} #{pane_pid}" | grep "^${sessionname} " | awk '{print $NF}')"
 	if [ "${engine}" == "source" ]; then
 		srcdslinuxpid="$(ps -ef | grep -v grep | grep "${gameserverpid}" | grep srcds_linux | awk '{print $2}')"
 	elif [ "${engine}" == "goldsrc" ]; then

+ 58 - 90
lgsm/modules/info_game.sh

@@ -323,9 +323,8 @@ fn_info_game_av() {
 	rconenabled="${rconenabled:-"false"}"
 	rconpassword="${rconpassword:-"NOT SET"}"
 	rconport="${rconport:-"0"}"
-	# queryport is port + 3
-	# this doesnt respond to any queries, using tcp query on rconport instead.
-	queryport="${rconport:-"0"}"
+	# queryport doesnt respond to any queries, using session only.
+	queryport=""$((port + 3))""
 	servername="${servername:-"NOT SET"}"
 	serverpassword="${serverpassword:-"NOT SET"}"
 	steamport="$((port + 21))"
@@ -666,18 +665,24 @@ fn_info_game_stn() {
 fn_info_game_ti() {
 	if [ -f "${servercfgfullpath}" ]; then
 		fn_info_game_ini "maxplayers" "MaxPlayerCount"
-		fn_info_game_ini "queueenabled" "QueueEnabled"
+		fn_info_game_ini "queueenabled" "bQueueEnabled"
 		fn_info_game_ini "queueport" "QueuePort"
-		fn_info_game_ini "rconenabled" "RconEnabled"
+		fn_info_game_ini "rconenabled" "bRconEnabled"
+		fn_info_game_ini "rconpassword" "RconPassword"
 		fn_info_game_ini "rconport" "RconPort"
 		fn_info_game_ini "servername" "ServerName"
+		fn_info_game_ini "serverpassword" "ServerPassword"
+		fn_info_game_ini "serverpasswordenabled" "bServerPassword"
 	fi
 	maxplayers="${maxplayers:-"0"}"
 	queueenabled="${queueenabled:-"NOT SET"}"
 	queueport="${queueport:-"0"}"
 	rconenabled="${rconenabled:-"NOT SET"}"
+	rconpassword="${rconpassword:-"NOT SET"}"
 	rconport="${rconport:-"0"}"
 	servername="${servername:-"NOT SET"}"
+	serverpassword="${serverpassword:-"NOT SET"}"
+	serverpasswordenabled="${serverpasswordenabled:-"NOT SET"}"
 }
 
 # Config Type: ini
@@ -866,11 +871,11 @@ fn_info_game_ut2k4() {
 # Filetype: json
 fn_info_game_armar() {
 	if [ -f "${servercfgfullpath}" ]; then
-		fn_info_game_json "adminpassword" ".adminPassword"
-		fn_info_game_json "configip" ".gameHostBindAddress"
-		fn_info_game_json "maxplayers" ".game.playerCountLimit"
-		fn_info_game_json "port" ".gameHostBindPort"
-		fn_info_game_json "queryport" ".steamQueryPort"
+		fn_info_game_json "adminpassword" ".game.passwordAdmin"
+		fn_info_game_json "configip" ".bindAddress"
+		fn_info_game_json "maxplayers" ".game.maxPlayers"
+		fn_info_game_json "port" ".bindPort"
+		fn_info_game_json "queryport" ".a2s.port"
 		fn_info_game_json "servername" ".game.name"
 		fn_info_game_json "serverpassword" ".game.password"
 	fi
@@ -1441,11 +1446,11 @@ fn_info_game_mom() {
 # Filetype: conf
 fn_info_game_mta() {
 	if [ -f "${servercfgfullpath}" ]; then
-		fn_info_game_xml "port" "/config/@port"
-		fn_info_game_xml "httpport" "/config/@httpport"
-		fn_info_game_xml "servername" "/config/@servername"
-		fn_info_game_xml "maxplayers" "/config/@maxplayers"
-		fn_info_game_xml "ase" "/config/@ase"
+		fn_info_game_xml "port" "/config/serverport"
+		fn_info_game_xml "httpport" "/config/httpport"
+		fn_info_game_xml "servername" "/config/servername"
+		fn_info_game_xml "maxplayers" "/config/maxplayers"
+		fn_info_game_xml "ase" "/config/ase"
 	fi
 	if [ "${ase}" == "1" ]; then
 		ase="Enabled"
@@ -1744,52 +1749,26 @@ fn_info_game_rust() {
 }
 
 fn_info_game_rw() {
-	# Config
-	if [ ! -f "${servercfgfullpath}" ]; then
-		servername="${unavailable}"
-		serverpassword="${unavailable}"
-		rconpassword="${unavailable}"
-		rconport="${zero}"
-		maxplayers="${zero}"
-		port="${zero}"
-		port2="${zero}"
-		port3="${zero}"
-		port4="${zero}"
-		queryport="${zero}"
-		gamemode="${unavailable}"
-		worldname="${unavailable}"
-	else
-		servername=$(grep "server_name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		serverpassword=$(grep "server_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		rconpassword=$(grep "rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		rconport=$(grep "rcon_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
-		maxplayers=$(grep "settings_max_players" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
-		port=$(grep "server_port" "${servercfgfullpath}" | grep -v "database_mysql_server_port" | grep -v "#" | tr -cd '[:digit:]')
-		port2=$((port + 1))
-		port3=$((port + 2))
-		port4=$((port + 3))
-		queryport="${port}"
-		httpqueryport=$((port - 1))
-		gamemode=$(grep "settings_default_gamemode=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/settings_default_gamemode//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		worldname=$(grep "server_world_name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/server_world_name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		configip=$(grep "server_ip" "${servercfgfullpath}" | grep -v "database_mysql_server_ip" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/server_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-
-		# Not set
-		servername="${servername:-"NOT SET"}"
-		serverpassword="${serverpassword:-"NOT SET"}"
-		rconpassword="${rconpassword:-"NOT SET"}"
-		rconport="${rconport:-"0"}"
-		maxplayers="${maxplayers:-"0"}"
-		port="${port:-"0"}"
-		port2="${port2:-"0"}"
-		port3="${port3:-"0"}"
-		port4="${port4:-"0"}"
-		queryport="${queryport:-"0"}"
-		httpqueryport="${httpport:-"0"}"
-		gamemode="${gamemode:-"NOT SET"}"
-		worldname="${worldname:-"NOT SET"}"
-		configip="${configip:-"0.0.0.0"}"
+	if [ -f "${servercfgfullpath}" ]; then
+		fn_info_game_keyvalue_pairs "configip" "Server_IP"
+		fn_info_game_keyvalue_pairs "gamemode" "World_GameMode"
+		fn_info_game_keyvalue_pairs "maxplayers" "Server_MaxPlayers"
+		fn_info_game_keyvalue_pairs "port" "Server_Port"
+		fn_info_game_keyvalue_pairs "rconport" "RCON_Port"
+		fn_info_game_keyvalue_pairs "seed" "World_Seed"
+		fn_info_game_keyvalue_pairs "servername" "Server_Name"
+		fn_info_game_keyvalue_pairs "worldname" "World_Name"
 	fi
+	configip="${configip:-"0.0.0.0"}"
+	gamemode="${gamemode:-"NOT SET"}"
+	maxplayers="${maxplayers:-"0"}"
+	port="${port:-"0"}"
+	queryport="$((port - 1))"
+	rconport="${rconport:-"0"}"
+	seed="${seed:-"0"}"
+	servername="${servername:-"NOT SET"}"
+	worldname="${worldname:-"NOT SET"}"
+
 }
 
 # Config Type: custom
@@ -2143,7 +2122,7 @@ fn_info_game_wet() {
 	configip="${configip:-"0.0.0.0"}"
 	maxplayers="${maxplayers:-"0"}"
 	port="${port:-"0"}"
-	queryport="${queryport:-"0"}"
+	queryport="${port}"
 	rconpassword="${rconpassword:-"NOT SET"}"
 	servername="${servername:-"NOT SET"}"
 	serverpassword="${serverpassword:-"NOT SET"}"
@@ -2195,36 +2174,25 @@ fn_info_game_wmc() {
 	fi
 }
 
-# Config Type: custom (key-value)
-# Comment: #
-# Example: SERVERNAME=SERVERNAME
+# Config Type: parameters
+# Parameters: true
+# Comment:
+# Example: hostname='SERVERNAME'
+# Filetype: parameters
 fn_info_game_wurm() {
-	# Config
-	if [ ! -f "${servercfgfullpath}" ]; then
-		port="${zero}"
-		queryport="${zero}"
-		rconpassword="${unavailable}"
-		servername="${unavailable}"
-		serverpassword="${unavailable}"
-		adminpassword="${unavailable}"
-		maxplayers="${zero}"
-	else
-		port=$(grep "EXTERNALPORT=" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
-		queryport=$(grep "QUERYPORT=" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
-		servername=$(grep "SERVERNAME=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/SERVERNAME//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		serverpassword=$(grep "SERVERPASSWORD=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/SERVERPASSWORD//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		adminpassword=$(grep "ADMINPWD=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/ADMINPWD//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		maxplayers=$(grep "MAXPLAYERS=" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
-		configip=$(grep "IP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/IP//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-
-		# Not set
-		port="${port:-"3724"}"
-		queryport="${queryport:-"27017"}"
-		servername="${servername:-"NOT SET"}"
-		serverpassword="${serverpassword:-"NOT SET"}"
-		adminpassword="${adminpassword:-"NOT SET"}"
-		maxplayers="${maxplayers:-"0"}"
-	fi
+	gamemode="${gamemode:-"NOT SET"}"
+	homekingdom="${homekingdom:-"0"}"
+	adminpassword="${adminpassword:-"NOT SET"}"
+	epicsettings="${epicsettings:-"NOT SET"}"
+	homeserver="${homeserver:-"NOT SET"}"
+	loginserver="${loginserver:-"NOT SET"}"
+	rmiport="${rmiport:-"0"}"
+	rmiregport="${rmiregport:-"0"}"
+	maxplayers="${maxplayers:-"0"}"
+	servername="${servername:-"NOT SET"}"
+	# serverpassword="${serverpassword:-"NOT SET"}"
+	port="${port:-"0"}"
+	queryport="${queryport:-"0"}"
 }
 
 unavailable="${red}UNAVAILABLE${default}"

+ 6 - 9
lgsm/modules/info_messages.sh

@@ -698,7 +698,7 @@ fn_info_message_ports() {
 		portcommand="ss -tuplwn | grep AvorionServer"
 	elif [ "${shortname}" == "bf1942" ]; then
 		portcommand="ss -tuplwn | grep bf1942_lnxded"
-	elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "nec" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "rw" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
+	elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "nec" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
 		portcommand="ss -tuplwn | grep java"
 	elif [ "${shortname}" == "terraria" ]; then
 		portcommand="ss -tuplwn | grep Main"
@@ -1033,6 +1033,7 @@ fn_info_message_goldsrc() {
 	{
 		fn_port "header"
 		fn_port "Game" port udp
+		fn_port "Query" queryport tcp
 		fn_port "Client" clientport udp
 	} | column -s $'\t' -t
 }
@@ -1351,14 +1352,7 @@ fn_info_message_rw() {
 	{
 		fn_port "header"
 		fn_port "Game" port udp
-		fn_port "Game+1" port2 udp
-		fn_port "Game+2" port3 udp
-		fn_port "Game+3" port4 udp
-		fn_port "Game+1" port2 tcp
-		fn_port "Game+2" port3 tcp
-		fn_port "Game+3" port4 tcp
 		fn_port "Query" queryport tcp
-		fn_port "Query HTTP" httpqueryport tcp
 		fn_port "RCON" rconport tcp
 	} | column -s $'\t' -t
 }
@@ -1511,7 +1505,8 @@ fn_info_message_ti() {
 	{
 		fn_port "header"
 		fn_port "Game" port udp
-		fn_port "Query" queryport udp
+		fn_port "Queue" queueport tcp
+		fn_port "RCON" rconport tcp
 	} | column -s $'\t' -t
 }
 
@@ -1671,6 +1666,8 @@ fn_info_message_wurm() {
 		fn_port "header"
 		fn_port "Game" port tcp
 		fn_port "Query" queryport udp
+		fn_port "RMI" rmiport tcp
+		fn_port "RMI Registry" rmiregport tcp
 	} | column -s $'\t' -t
 }
 

+ 3 - 114
lgsm/modules/install_config.sh

@@ -24,9 +24,9 @@ fn_fetch_default_config() {
 	echo -e "default configs from https://github.com/GameServerManagers/Game-Server-Configs"
 	fn_sleep_time
 	mkdir -p "${lgsmdir}/config-default/config-game"
-	githuburl="https://raw.githubusercontent.com/GameServerManagers/Game-Server-Configs/master"
+	githuburl="https://raw.githubusercontent.com/GameServerManagers/Game-Server-Configs/main"
 	for config in "${array_configs[@]}"; do
-		fn_fetch_file "${githuburl}/${gamedirname}/${config}" "${remote_fileurl_backup}" "GitHub" "Bitbucket" "${lgsmdir}/config-default/config-game" "${config}" "nochmodx" "norun" "forcedl" "nohash"
+		fn_fetch_file "${githuburl}/${shortname}/${config}" "${remote_fileurl_backup}" "GitHub" "Bitbucket" "${lgsmdir}/config-default/config-game" "${config}" "nochmodx" "norun" "forcedl" "nohash"
 	done
 }
 
@@ -162,32 +162,27 @@ fn_list_config_locations() {
 }
 
 if [ "${shortname}" == "sdtd" ]; then
-	gamedirname="7DaysToDie"
 	fn_default_config_local
 	fn_list_config_locations
 elif [ "${shortname}" == "ac" ]; then
-	gamedirname="AssettoCorsa"
 	array_configs+=(server_cfg.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ahl" ]; then
-	gamedirname="ActionHalfLife"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ahl2" ]; then
-	gamedirname="ActionSource"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ark" ]; then
-	gamedirname="ARKSurvivalEvolved"
 	fn_check_cfgdir
 	array_configs+=(GameUserSettings.ini)
 	fn_fetch_default_config
@@ -195,7 +190,6 @@ elif [ "${shortname}" == "ark" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "arma3" ]; then
-	gamedirname="Arma3"
 	fn_check_cfgdir
 	array_configs+=(server.cfg network.cfg)
 	fn_fetch_default_config
@@ -203,7 +197,6 @@ elif [ "${shortname}" == "arma3" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "armar" ]; then
-	gamedirname="ArmaReforger"
 	fn_check_cfgdir
 	array_configs+=(server.json)
 	fn_fetch_default_config
@@ -211,7 +204,6 @@ elif [ "${shortname}" == "armar" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ats" ]; then
-	gamedirname="AmericanTruckSimulator"
 	fn_check_cfgdir
 	array_configs+=(server_config.sii)
 	fn_fetch_default_config
@@ -219,21 +211,18 @@ elif [ "${shortname}" == "ats" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bo" ]; then
-	gamedirname="BallisticOverkill"
 	array_configs+=(config.txt)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bd" ]; then
-	gamedirname="BaseDefense"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bt" ]; then
-	gamedirname="Barotrauma"
 	fn_check_cfgdir
 	array_configs+=(serversettings.xml)
 	fn_fetch_default_config
@@ -241,7 +230,6 @@ elif [ "${shortname}" == "bt" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "btl" ]; then
-	gamedirname="BattalionLegacy"
 	fn_check_cfgdir
 	array_configs+=(DefaultGame.ini)
 	fn_fetch_default_config
@@ -249,147 +237,126 @@ elif [ "${shortname}" == "btl" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bf1942" ]; then
-	gamedirname="Battlefield1942"
 	array_configs+=(serversettings.con)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bfv" ]; then
-	gamedirname="BattlefieldVietnam"
 	array_configs+=(serversettings.con)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bs" ]; then
-	gamedirname="BladeSymphony"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bb" ]; then
-	gamedirname="BrainBread"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bb2" ]; then
-	gamedirname="BrainBread2"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "bmdm" ]; then
-	gamedirname="BlackMesa"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cd" ]; then
-	gamedirname="CraftingDead"
 	array_configs+=(properties.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ck" ]; then
-	gamedirname="CoreKeeper"
 	array_configs+=(ServerConfig.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cod" ]; then
-	gamedirname="CallOfDuty"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "coduo" ]; then
-	gamedirname="CallOfDutyUnitedOffensive"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cod2" ]; then
-	gamedirname="CallOfDuty2"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cod4" ]; then
-	gamedirname="CallOfDuty4"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "codwaw" ]; then
-	gamedirname="CallOfDutyWorldAtWar"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cc" ]; then
-	gamedirname="CodenameCURE"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "col" ]; then
-	gamedirname="ColonySurvival"
 	array_configs+=(colserver.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cs" ]; then
-	gamedirname="CounterStrike"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "cscz" ]; then
-	gamedirname="CounterStrikeConditionZero"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "csgo" ]; then
-	gamedirname="CounterStrikeGlobalOffensive"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "css" ]; then
-	gamedirname="CounterStrikeSource"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ct" ]; then
-	gamedirname="Craftopia"
 	array_configs+=(ServerSetting.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dayz" ]; then
-	gamedirname="DayZ"
 	fn_check_cfgdir
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
@@ -397,41 +364,35 @@ elif [ "${shortname}" == "dayz" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dod" ]; then
-	gamedirname="DayOfDefeat"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dodr" ]; then
-	gamedirname="DayOfDragons"
 	array_configs+=(Game.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_list_config_locations
 elif [ "${shortname}" == "dods" ]; then
-	gamedirname="DayOfDefeatSource"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "doi" ]; then
-	gamedirname="DayOfInfamy"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dmc" ]; then
-	gamedirname="DeathmatchClassic"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dst" ]; then
-	gamedirname="DontStarveTogether"
 	fn_check_cfgdir
 	array_configs+=(cluster.ini server.ini)
 	fn_fetch_default_config
@@ -439,21 +400,18 @@ elif [ "${shortname}" == "dst" ]; then
 	fn_set_dst_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dab" ]; then
-	gamedirname="DoubleActionBoogaloo"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "dys" ]; then
-	gamedirname="Dystopia"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "eco" ]; then
-	gamedirname="Eco"
 	array_configs+=(Network.eco)
 	fn_fetch_default_config
 	fn_default_config_remote
@@ -463,14 +421,12 @@ elif [ "${shortname}" == "em" ]; then
 	fn_default_config_local
 	fn_list_config_locations
 elif [ "${shortname}" == "etl" ]; then
-	gamedirname="ETLegacy"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ets2" ]; then
-	gamedirname="EuroTruckSimulator2"
 	fn_check_cfgdir
 	array_configs+=(server_config.sii)
 	fn_fetch_default_config
@@ -478,133 +434,114 @@ elif [ "${shortname}" == "ets2" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "fctr" ]; then
-	gamedirname="Factorio"
 	array_configs+=(server-settings.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "fof" ]; then
-	gamedirname="FistfulofFrags"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "gmod" ]; then
-	gamedirname="GarrysMod"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "hldm" ]; then
-	gamedirname="HalfLifeDeathmatch"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "hldms" ]; then
-	gamedirname="HalfLifeDeathmatchSource"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ohd" ]; then
-	gamedirname="OperationHarshDoorstop"
 	array_configs+=(Game.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "opfor" ]; then
-	gamedirname="OpposingForce"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "hl2dm" ]; then
-	gamedirname="HalfLife2Deathmatch"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ins" ]; then
-	gamedirname="Insurgency"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ios" ]; then
-	gamedirname="IOSoccer"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "jc2" ]; then
-	gamedirname="JustCause2"
 	array_configs+=(config.lua)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "jc3" ]; then
-	gamedirname="JustCause3"
 	array_configs+=(config.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "kf" ]; then
-	gamedirname="KillingFloor"
 	array_configs+=(Default.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "l4d" ]; then
-	gamedirname="Left4Dead"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "l4d2" ]; then
-	gamedirname="Left4Dead2"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ]; then
-	gamedirname="Minecraft"
 	array_configs+=(server.properties)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "mcb" ]; then
-	gamedirname="MinecraftBedrock"
 	array_configs+=(server.properties)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "mohaa" ]; then
-	gamedirname="MedalOfHonorAlliedAssault"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "mh" ]; then
-	gamedirname="Mordhau"
 	fn_check_cfgdir
 	array_configs+=(Game.ini)
 	fn_fetch_default_config
@@ -612,56 +549,48 @@ elif [ "${shortname}" == "mh" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ns" ]; then
-	gamedirname="NaturalSelection"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "nmrih" ]; then
-	gamedirname="NoMoreRoominHell"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "nd" ]; then
-	gamedirname="NuclearDawn"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "mta" ]; then
-	gamedirname="MultiTheftAuto"
 	fn_check_cfgdir
 	array_configs+=(acl.xml mtaserver.conf vehiclecolors.conf)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_list_config_locations
 elif [ "${shotname}" == "mom" ]; then
-	gamedirname="MemoriesofMars"
 	array_configs+=(DedicatedServerConfig.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "pvr" ]; then
-	gamedirname="PavlovVR"
 	fn_check_cfgdir
 	array_configs+=(Game.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 elif [ "${shortname}" == "pvkii" ]; then
-	gamedirname="PiratesVikingandKnightsII"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "pz" ]; then
-	gamedirname="ProjectZomboid"
 	fn_check_cfgdir
 	array_configs+=(server.ini)
 	fn_fetch_default_config
@@ -669,7 +598,6 @@ elif [ "${shortname}" == "pz" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "nec" ]; then
-	gamedirname="Necesse"
 	fn_check_cfgdir
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
@@ -677,184 +605,157 @@ elif [ "${shortname}" == "nec" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "pc" ]; then
-	gamedirname="ProjectCars"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "pc2" ]; then
-	gamedirname="ProjectCars2"
 	fn_default_config_local
 	fn_list_config_locations
 elif [ "${shortname}" == "q2" ]; then
-	gamedirname="Quake2"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "q3" ]; then
-	gamedirname="Quake3Arena"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ql" ]; then
-	gamedirname="QuakeLive"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "jk2" ]; then
-	gamedirname="JediKnightIIJediOutcast"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 elif [ "${shortname}" == "qw" ]; then
-	gamedirname="QuakeWorld"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ricochet" ]; then
-	gamedirname="Ricochet"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "rtcw" ]; then
-	gamedirname="ReturnToCastleWolfenstein"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "rust" ]; then
-	gamedirname="Rust"
 	fn_check_cfgdir
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_list_config_locations
 elif [ "${shortname}" == "scpsl" ] || [ "${shortname}" == "scpslsm" ]; then
-	gamedirname="SCPSecretLaboratory"
 	array_configs+=(config_gameplay.txt config_localadmin.txt)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "sf" ]; then
-	gamedirname="Satisfactory"
 	array_configs+=(GameUserSettings.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "sol" ]; then
-	gamedirname="Soldat"
 	array_configs+=(soldat.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "sof2" ]; then
-	gamedirname="SoldierOfFortune2Gold"
 	array_configs+=(server.cfg mapcycle.txt)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "sfc" ]; then
-	gamedirname="SourceFortsClassic"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "squad" ]; then
-	gamedirname="Squad"
 	array_configs+=(Admins.cfg Bans.cfg License.cfg Server.cfg Rcon.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "sb" ]; then
-	gamedirname="Starbound"
 	array_configs+=(starbound_server.config)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "stn" ]; then
-	gamedirname="SurvivetheNights"
 	array_configs+=(ServerConfig.txt ServerUsers.txt TpPresets.json UserPermissions.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "sven" ]; then
-	gamedirname="SvenCoop"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "tf2" ]; then
-	gamedirname="TeamFortress2"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "tfc" ]; then
-	gamedirname="TeamFortressClassic"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ti" ]; then
-	gamedirname="TheIsle"
-	array_configs+=(Game.ini)
+	array_configs+=(Game.ini Engine.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ts" ]; then
-	gamedirname="TheSpecialists"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ts3" ]; then
-	gamedirname="TeamSpeak3"
 	array_configs+=(ts3server.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_list_config_locations
 elif [ "${shortname}" == "tw" ]; then
-	gamedirname="Teeworlds"
 	array_configs+=(server.cfg ctf.cfg dm.cfg duel.cfg tdm.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "terraria" ]; then
-	gamedirname="Terraria"
 	array_configs+=(serverconfig.txt)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "tu" ]; then
-	gamedirname="TowerUnite"
 	fn_check_cfgdir
 	array_configs+=(TowerServer.ini)
 	fn_fetch_default_config
@@ -862,83 +763,71 @@ elif [ "${shortname}" == "tu" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ut" ]; then
-	gamedirname="UnrealTournament"
 	array_configs+=(Game.ini Engine.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ut2k4" ]; then
-	gamedirname="UnrealTournament2004"
 	array_configs+=(UT2004.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ut99" ]; then
-	gamedirname="UnrealTournament99"
 	array_configs+=(Default.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "unt" ]; then
-	gamedirname="Unturned"
 	array_configs+=(Config.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "vints" ]; then
-	gamedirname="VintageStory"
 	array_configs+=(serverconfig.json)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "vs" ]; then
-	gamedirname="VampireSlayer"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "wet" ]; then
-	gamedirname="WolfensteinEnemyTerritory"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "wf" ]; then
-	gamedirname="Warfork"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "wmc" ]; then
-	gamedirname="Waterfall"
 	array_configs+=(config.yml)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 elif [ "${shortname}" == "wurm" ]; then
-	gamedirname="WurmUnlimited"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "zmr" ]; then
-	gamedirname="ZombieMasterReborn"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "zps" ]; then
-	gamedirname="ZombiePanicSource"
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote

+ 1 - 0
lgsm/modules/install_server_files.sh

@@ -214,6 +214,7 @@ if [ "${appid}" ]; then
 	remotelocation="SteamCMD"
 	forceupdate=1
 	update_steamcmd.sh
+	fn_check_steamcmd_appmanifest
 fi
 
 if [ "${shortname}" == "ts3" ]; then

+ 3 - 3
linuxgsm.sh

@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="v23.3.6"
+version="v23.4.0"
 shortname="core"
 gameservername="core"
 commandname="CORE"
@@ -347,11 +347,11 @@ if [ "${shortname}" == "core" ]; then
 
 	if [ "${userinput}" == "list" ] || [ "${userinput}" == "l" ]; then
 		{
-			tail -n +1 "${serverlist}" | awk -F "," '{print $2 "\t" $3}'
+			tail -n +2 "${serverlist}" | awk -F "," '{print $2 "\t" $3}'
 		} | column -s $'\t' -t | more
 		exit
 	elif [ "${userinput}" == "install" ] || [ "${userinput}" == "i" ]; then
-		tail -n +1 "${serverlist}" | awk -F "," '{print $1 "," $2 "," $3}' > "${serverlistmenu}"
+		tail -n +2 "${serverlist}" | awk -F "," '{print $1 "," $2 "," $3}' > "${serverlistmenu}"
 		fn_install_menu result "LinuxGSM" "Select game server to install." "${serverlistmenu}"
 		userinput="${result}"
 		fn_server_info

+ 1 - 1
tests/tests_fctrserver.sh

@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="v23.3.6"
+version="v23.4.0"
 shortname="fctr"
 gameservername="fctrserver"
 commandname="CORE"

+ 1 - 1
tests/tests_jc2server.sh

@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="v23.3.6"
+version="v23.4.0"
 shortname="jc2"
 gameservername="jc2server"
 commandname="CORE"

+ 1 - 1
tests/tests_mcserver.sh

@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="v23.3.6"
+version="v23.4.0"
 shortname="mc"
 gameservername="mcserver"
 commandname="CORE"

+ 1 - 1
tests/tests_ts3server.sh

@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="v23.3.6"
+version="v23.4.0"
 shortname="ts3"
 gameservername="ts3server"
 commandname="CORE"