Procházet zdrojové kódy

Merge branch 'release/v23.7.0'

Daniel Gibbs před 2 roky
rodič
revize
2e0d053c84
82 změnil soubory, kde provedl 500 přidání a 335 odebrání
  1. 2 3
      lgsm/config-default/config-lgsm/arkserver/_default.cfg
  2. 1 1
      lgsm/config-default/config-lgsm/arma3server/_default.cfg
  3. 3 3
      lgsm/config-default/config-lgsm/btlserver/_default.cfg
  4. 1 1
      lgsm/config-default/config-lgsm/cod2server/_default.cfg
  5. 1 1
      lgsm/config-default/config-lgsm/cod4server/_default.cfg
  6. 1 1
      lgsm/config-default/config-lgsm/codserver/_default.cfg
  7. 1 1
      lgsm/config-default/config-lgsm/coduoserver/_default.cfg
  8. 1 1
      lgsm/config-default/config-lgsm/codwawserver/_default.cfg
  9. 1 1
      lgsm/config-default/config-lgsm/colserver/_default.cfg
  10. 1 1
      lgsm/config-default/config-lgsm/ctserver/_default.cfg
  11. 1 1
      lgsm/config-default/config-lgsm/dayzserver/_default.cfg
  12. 1 3
      lgsm/config-default/config-lgsm/gmodserver/_default.cfg
  13. 2 2
      lgsm/config-default/config-lgsm/hcuserver/_default.cfg
  14. 4 4
      lgsm/config-default/config-lgsm/inssserver/_default.cfg
  15. 1 1
      lgsm/config-default/config-lgsm/jk2server/_default.cfg
  16. 1 1
      lgsm/config-default/config-lgsm/kfserver/_default.cfg
  17. 2 1
      lgsm/config-default/config-lgsm/mhserver/_default.cfg
  18. 1 1
      lgsm/config-default/config-lgsm/mohaaserver/_default.cfg
  19. 2 1
      lgsm/config-default/config-lgsm/momserver/_default.cfg
  20. 2 2
      lgsm/config-default/config-lgsm/ns2cserver/_default.cfg
  21. 6 5
      lgsm/config-default/config-lgsm/ns2server/_default.cfg
  22. 2 2
      lgsm/config-default/config-lgsm/ohdserver/_default.cfg
  23. 1 0
      lgsm/config-default/config-lgsm/onsetserver/_default.cfg
  24. 1 5
      lgsm/config-default/config-lgsm/psserver/_default.cfg
  25. 3 2
      lgsm/config-default/config-lgsm/pvrserver/_default.cfg
  26. 1 1
      lgsm/config-default/config-lgsm/q3server/_default.cfg
  27. 22 14
      lgsm/config-default/config-lgsm/q4server/_default.cfg
  28. 2 1
      lgsm/config-default/config-lgsm/rustserver/_default.cfg
  29. 2 2
      lgsm/config-default/config-lgsm/sampserver/_default.cfg
  30. 1 1
      lgsm/config-default/config-lgsm/sbotsserver/_default.cfg
  31. 4 3
      lgsm/config-default/config-lgsm/sfserver/_default.cfg
  32. 2 2
      lgsm/config-default/config-lgsm/squadserver/_default.cfg
  33. 2 1
      lgsm/config-default/config-lgsm/tiserver/_default.cfg
  34. 1 1
      lgsm/config-default/config-lgsm/tuserver/_default.cfg
  35. 1 1
      lgsm/config-default/config-lgsm/ut3server/_default.cfg
  36. 3 3
      lgsm/config-default/config-lgsm/wurmserver/_default.cfg
  37. 1 1
      lgsm/data/almalinux-8.csv
  38. 1 1
      lgsm/data/almalinux-9.csv
  39. 1 1
      lgsm/data/centos-7.csv
  40. 1 1
      lgsm/data/centos-8.csv
  41. 1 1
      lgsm/data/centos-9.csv
  42. 1 1
      lgsm/data/debian-10.csv
  43. 1 1
      lgsm/data/debian-11.csv
  44. 1 1
      lgsm/data/debian-12.csv
  45. 1 1
      lgsm/data/debian-9.csv
  46. binární
      lgsm/data/gameicons/cd-icon.png
  47. binární
      lgsm/data/gameicons/q4-icon.png
  48. 1 1
      lgsm/data/rhel-7.csv
  49. 1 1
      lgsm/data/rhel-8.csv
  50. 1 1
      lgsm/data/rhel-9.csv
  51. 1 1
      lgsm/data/rocky-8.csv
  52. 1 1
      lgsm/data/rocky-9.csv
  53. 1 1
      lgsm/data/serverlist.csv
  54. 1 1
      lgsm/data/ubuntu-16.04.csv
  55. 1 1
      lgsm/data/ubuntu-18.04.csv
  56. 1 1
      lgsm/data/ubuntu-20.04.csv
  57. 1 1
      lgsm/data/ubuntu-22.04.csv
  58. 1 1
      lgsm/data/ubuntu-23.04.csv
  59. 1 1
      lgsm/data/ubuntu-23.10.csv
  60. 9 2
      lgsm/modules/check_config.sh
  61. 3 3
      lgsm/modules/check_deps.sh
  62. 38 21
      lgsm/modules/check_system_requirements.sh
  63. 1 1
      lgsm/modules/command_backup.sh
  64. 1 1
      lgsm/modules/command_debug.sh
  65. 11 35
      lgsm/modules/command_start.sh
  66. 1 1
      lgsm/modules/core_getopt.sh
  67. 1 1
      lgsm/modules/core_modules.sh
  68. 3 1
      lgsm/modules/core_steamcmd.sh
  69. 2 2
      lgsm/modules/fix.sh
  70. 1 1
      lgsm/modules/fix_armar.sh
  71. 105 24
      lgsm/modules/fix_kf.sh
  72. 21 7
      lgsm/modules/fix_nmrih.sh
  73. 18 0
      lgsm/modules/fix_rust.sh
  74. 6 0
      lgsm/modules/fix_vh.sh
  75. 88 96
      lgsm/modules/info_distro.sh
  76. 33 18
      lgsm/modules/info_game.sh
  77. 23 8
      lgsm/modules/info_messages.sh
  78. 12 6
      lgsm/modules/info_stats.sh
  79. 8 8
      lgsm/modules/install_config.sh
  80. 8 1
      lgsm/modules/install_server_files.sh
  81. 1 1
      lgsm/modules/mods_list.sh
  82. 1 1
      linuxgsm.sh

+ 2 - 3
lgsm/config-default/config-lgsm/arkserver/_default.cfg

@@ -12,14 +12,13 @@
 ip="0.0.0.0"
 port="7777"
 queryport="27015"
-rconport="27020"
 # Default Map: TheIsland, Ragnarok, CrystalIsles, Aberration_P, ScorchedEarth_P, TheCenter, Extinction, Valguero_P, Genesis, Gen2
 defaultmap="TheIsland"
 altsavedirectoryname="${defaultmap}"
-maxplayers="70"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="${defaultmap}?AltSaveDirectoryName=${altsavedirectoryname}?listen?MultiHome=${ip}?MaxPlayers=${maxplayers}?QueryPort=${queryport}?RCONPort=${rconport}?Port=${port} -automanagedmods -crossplay -PublicIPForEpic=${publicip}"
+## Game Server Docs | https://ark.wiki.gg/wiki/Server_configuration
+startparameters="${defaultmap}?AltSaveDirectoryName=${altsavedirectoryname} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -AutoManagedMods -Crossplay -PublicIPForEpic=${publicip}"
 
 #### LinuxGSM Settings ####
 

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

@@ -32,7 +32,7 @@ servermods=""
 bepath=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-ip=${ip} -port=${port} -cfg=${networkcfgfullpath} -config=${servercfgfullpath} -mod='${mods}' -servermod=${servermods} -bepath=${bepath} -autoinit -loadmissiontomemory"
+startparameters="-ip=${ip} -port=${port} -cfg=${networkcfgfullpath} -config=${servercfgfullpath} -mod=${mods} -servermod=${servermods} -bepath=${bepath} -autoinit -loadmissiontomemory"
 
 #### LinuxGSM Settings ####
 

+ 3 - 3
lgsm/config-default/config-lgsm/btlserver/_default.cfg

@@ -14,7 +14,7 @@ port="7777"
 queryport="7780"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="/Game/Maps/Final_Maps/Derailed?Game=/Script/ShooterGame.WartideGameMode?listen -log -broadcastip=\"${publicip}\" -PORT=${port} -QueryPort=${queryport} -defgameini=\"${servercfgfullpath}\""
+startparameters="-Port=${port} -QueryPort=${queryport} -BroadcastIp=${publicip} -log"
 
 #### LinuxGSM Settings ####
 
@@ -157,8 +157,8 @@ systemdir="${serverfiles}/Battalion"
 executabledir="${systemdir}/Binaries/Linux"
 executable="./BattalionServer-Linux-Shipping"
 servercfgdir="${systemdir}/Saved/Config/LinuxServer"
-servercfg="${selfname}.ini"
-servercfgdefault="DefaultGame.ini"
+servercfg="Game.ini"
+servercfgdefault="Game.ini"
 servercfgfullpath="${servercfgdir}/${servercfg}"
 
 ## Backup Directory

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

@@ -15,7 +15,7 @@ defaultmap="mp_leningrad"
 maxplayers="20"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

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

@@ -15,7 +15,7 @@ defaultmap="mp_crossfire"
 maxplayers="32"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set fs_homepath ${serverfiles} +set sv_authorizemode "-1" +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set fs_homepath ${serverfiles} +set sv_authorizemode "-1" +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

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

@@ -15,7 +15,7 @@ defaultmap="mp_neuville"
 maxplayers="20"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

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

@@ -15,7 +15,7 @@ defaultmap="mp_cassino"
 maxplayers="20"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

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

@@ -15,7 +15,7 @@ defaultmap="mp_castle"
 maxplayers="20"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

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

@@ -136,7 +136,7 @@ querymode="2"
 querytype="protocol-valve"
 
 ## Console type
-consoleverbose="no"
+consoleverbose="yes"
 consoleinteract="no"
 
 ## Game Server Details

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

@@ -135,7 +135,7 @@ querymode="1"
 querytype=""
 
 ## Console type
-consoleverbose="no"
+consoleverbose="yes"
 consoleinteract="yes"
 
 ## Game Server Details

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

@@ -128,7 +128,7 @@ steamcmdforcewindows="no"
 branch=""
 betapassword=""
 # Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
-steammaster="false"
+steammaster="true"
 
 ## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
 # 1: tmux kill

+ 1 - 3
lgsm/config-default/config-lgsm/gmodserver/_default.cfg

@@ -19,8 +19,6 @@ tickrate="66"
 gamemode="sandbox"
 
 ## Workshop Parameters | https://wiki.facepunch.com/gmod/Workshop_for_Dedicated_Servers
-# To get an API key visit - https://steamcommunity.com/dev/apikey
-wsapikey=""
 wscollectionid=""
 
 ## Game Server Login Token (GSLT): Optional
@@ -29,7 +27,7 @@ wscollectionid=""
 gslt=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-game garrysmod -strictportbind -ip ${ip} -port ${port} -tickrate ${tickrate} +host_workshop_collection ${wscollectionid} -authkey ${wsapikey} +clientport ${clientport} +tv_port ${sourcetvport} +gamemode ${gamemode} +map ${defaultmap} +sv_setsteamaccount ${gslt} +servercfgfile ${servercfg} -maxplayers ${maxplayers} -disableluarefresh"
+startparameters="-game garrysmod -strictportbind -ip ${ip} -port ${port} -tickrate ${tickrate} +host_workshop_collection ${wscollectionid} +clientport ${clientport} +tv_port ${sourcetvport} +gamemode ${gamemode} +map ${defaultmap} +sv_setsteamaccount ${gslt} +servercfgfile ${servercfg} -maxplayers ${maxplayers} -disableluarefresh"
 
 #### LinuxGSM Settings ####
 

+ 2 - 2
lgsm/config-default/config-lgsm/hcuserver/_default.cfg

@@ -17,7 +17,7 @@ queryport="27015"
 servername="LinuxGSM"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="${defaultmap}?Difficulty=1?Game=DM?MapList=KidsBedroom,Playground,Garden,Hallway_Simple,Bathroom,Hallway_Hard,Attic_Daytime,Shed,ToyPalace,Kitchen,Garage?MaxPlayers=${maxplayers}?WeaponTypes=7?TimeLimit=600?ScoreLimit=30?Teamplay -ServerName='${servername}' -Port=${port} -QueryPort=${queryport} -NOCONSOLE -unattended"
+startparameters="${defaultmap}?MaxPlayers=${maxplayers} -ServerName='${servername}' -Port=${port} -QueryPort=${queryport}"
 
 ## Server Parameters for Plague mode
 #startparameters="${defaultmap}?Game=PL?MapList=KidsBedroom,Garden,Hallway_Simple,Attic_Daytime,Garage,Shed,Kitchen,Hallway_Hard,ToyPalace,Bathroom?MaxPlayers=${maxplayers}?WeaponTypes=7?TimeLimit=600 -ServerName='${servername}' -Port=${port} -QueryPort=${queryport} -NOCONSOLE -unattended"
@@ -150,7 +150,7 @@ querymode="1"
 querytype=""
 
 ## Console type
-consoleverbose="no"
+consoleverbose="yes"
 consoleinteract="no"
 
 ## Game Server Details

+ 4 - 4
lgsm/config-default/config-lgsm/inssserver/_default.cfg

@@ -13,10 +13,10 @@ ip="0.0.0.0"
 port="27102"
 queryport="27131"
 rconport="27015"
-rconpassword=""
+rconpassword="CHANGE_ME"
 servername="LinuxGSM"
-defaultmap="Canyon"
-defaultscenario="Scenario_Crossing_Push_Security"
+defaultmap="Oilfield"
+defaultscenario="Scenario_Refinery_Push_Security"
 maxplayers="28"
 
 ## Game Server Login Token (GSLT): Optional
@@ -25,7 +25,7 @@ maxplayers="28"
 gslt=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-## Parameter Docs | https://mod.io/g/insurgencysandstorm/r/server-admin-guide
+## Game Server Docs | https://mod.io/g/insurgencysandstorm/r/server-admin-guide
 startparameters="${defaultmap}?Scenario=${defaultscenario}?MaxPlayers=${maxplayers} -Port=${port} -QueryPort=${queryport} -hostname='${servername}' -Rcon -RconPassword=${rconpassword} -RconListenPort=${rconport} -GSLTToken=${gslt} -log"
 
 #### LinuxGSM Settings ####

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

@@ -18,7 +18,7 @@ port="27960"
 defaultmap="ffa_bespin"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set net_ip ${ip} +set net_port ${port} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set net_ip ${ip} +set net_port ${port} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

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

@@ -121,7 +121,7 @@ steamcmdforcewindows="no"
 branch=""
 betapassword=""
 # Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
-steammaster="false"
+steammaster="true"
 
 ## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
 # 1: tmux kill

+ 2 - 1
lgsm/config-default/config-lgsm/mhserver/_default.cfg

@@ -17,7 +17,8 @@ queryport="27015"
 defaultmap="FFA_ThePit"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="Mordhau ${defaultmap} -log -MultiHome=${ip} -Port=${port} -BeaconPort=${beaconport} -QueryPort=${queryport} -GameIni=${servercfgfullpath}"
+## Game Server Docs | https://mordhau.fandom.com/wiki/Dedicated_Server_Hosting_Guide
+startparameters="Mordhau ${defaultmap} -MultiHome=${ip} -Port=${port} -BeaconPort=${beaconport} -QueryPort=${queryport} -GameIni=${servercfgfullpath} -log"
 
 #### LinuxGSM Settings ####
 

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

@@ -14,7 +14,7 @@ port="12203"
 defaultmap="dm/mohdm1"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set fs_outputpath ${gamelogdir} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set fs_outputpath ${gamelogdir} +set dedicated 2 +set net_ip ${ip} +set net_port ${port} +map ${defaultmap} +exec ${servercfg} "
 
 #### LinuxGSM Settings ####
 

+ 2 - 1
lgsm/config-default/config-lgsm/momserver/_default.cfg

@@ -14,7 +14,8 @@ port="7777"
 beaconport="15000"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-port="${port}" -beaconport="${beaconport}" -MULTIHOME="${ip}""
+## Game Server Docs | https://memoriesofmars.fandom.com/wiki/Dedicated_Servers
+startparameters="-MultiHome=${ip} -Port=${port} -BeaconPort=${beaconport} -log"
 
 #### LinuxGSM Settings ####
 

+ 2 - 2
lgsm/config-default/config-lgsm/ns2cserver/_default.cfg

@@ -15,7 +15,7 @@ defaultmap="co_core"
 maxplayers="24"
 servername="LinuxGSM"
 httpuser="admin"
-httppassword="admin"
+httppassword="CHANGE_ME"
 httpport="8080"
 mods=""
 serverpassword=""
@@ -24,7 +24,7 @@ serverpassword=""
 # -password \"${serverpassword}\"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-name \"${servername}\" -port ${port} -webadmin -webdomain ${ip} -webuser ${httpuser} -webpassword \"${httppassword}\" -webport ${httpport} -map ${defaultmap} -limit ${maxplayers} -config_path \"${servercfgdir}\" -modstorage \"${modstoragedir}\" -mods \"${mods}\""
+startparameters="-name '${servername}' -port ${port} -webadmin -webdomain ${ip} -webuser ${httpuser} -webpassword '${httppassword}' -webport ${httpport} -map ${defaultmap} -limit ${maxplayers} -config_path '${servercfgdir}' -modstorage '${modstoragedir}' -mods '${mods}'"
 
 #### LinuxGSM Settings ####
 

+ 6 - 5
lgsm/config-default/config-lgsm/ns2server/_default.cfg

@@ -12,19 +12,20 @@
 ip="0.0.0.0"
 port="27015"
 defaultmap="ns2_summit"
-maxplayers="24"
+maxplayers="20"
+maxspectators="5"
 servername="LinuxGSM"
 httpuser="admin"
-httppassword="admin"
+httppassword="CHANGE_ME"
 httpport="8080"
-mods=""
+modserverport="27031"
 serverpassword=""
 # Add the following line to the parms if you want a private server. Ensuring
 # that the password variable above is not left empty.
-# -password \"${serverpassword}\"
+# -password '${serverpassword}'
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-name \"${servername}\" -port ${port} -webadmin -webdomain ${ip} -webuser ${httpuser} -webpassword \"${httppassword}\" -webport ${httpport} -map ${defaultmap} -limit ${maxplayers} -config_path \"${servercfgdir}\" -logdir \"${gamelogdir}\" -modstorage \"${modstoragedir}\" -mods2 \"${mods}\""
+startparameters="-name '${servername}' -port ${port} -webadmin -webdomain ${ip} -webuser ${httpuser} -webpassword '${httppassword}' -webport ${httpport} -startmodserver -modserverport ${modserverport} -map ${defaultmap} -limit ${maxplayers} -speclimit ${maxspectators} -config_path '${servercfgdir}' -logdir '${gamelogdir}' -modstorage '${modstoragedir}'"
 
 #### LinuxGSM Settings ####
 

+ 2 - 2
lgsm/config-default/config-lgsm/ohdserver/_default.cfg

@@ -12,14 +12,14 @@
 ip="0.0.0.0"
 port="7777"
 queryport="27005"
+rconport="7778"
 servername="LinuxGSM"
-serverpassword=""
 # Maps: risala, khafji_p, lamdong, montecassino, argonne
 defaultmap="AAS-TestMap"
 maxplayers="16"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="${defaultmap}?MaxPlayers=${maxplayers}?Password=${serverpassword} -Port=${port} -QueryPort=${queryport} -SteamServerName='${servername}' -log"
+startparameters="${defaultmap}?MaxPlayers=${maxplayers} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -RconPort=${rconport} -SteamServerName='${servername}' -log"
 
 #### LinuxGSM Settings ####
 

+ 1 - 0
lgsm/config-default/config-lgsm/onsetserver/_default.cfg

@@ -9,6 +9,7 @@
 #### Game Server Settings ####
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
+## Game Server Docs | https://dev.playonset.com/wiki/DedicatedServer
 startparameters="--config ${servercfgfullpath}"
 
 #### LinuxGSM Settings ####

+ 1 - 5
lgsm/config-default/config-lgsm/psserver/_default.cfg

@@ -10,15 +10,11 @@
 
 ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
 ip="0.0.0.0"
-maxplayers="40"
 port="10027"
 queryport="10037"
-randommap="NONE"
-reservedslots="0"
-tickrate="50"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="MULTIHOME=${ip} RANDOM=${randommap} Port=${port} QueryPort=${queryport} FIXEDMAXPLAYERS=${maxplayers} FIXEDMAXTICKRATE=${tickrate} NumReservedSlots=${reservedslots}"
+startparameters="-MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -log"
 
 #### LinuxGSM Settings ####
 

+ 3 - 2
lgsm/config-default/config-lgsm/pvrserver/_default.cfg

@@ -17,7 +17,8 @@ defaultmap="datacenter"
 apikey=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="Pavlov ${defaultmap} -log -MultiHome=${ip} -Port=${port} ApiKey=${apikey}"
+## Game Server Docs | http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server
+startparameters="Pavlov ${defaultmap} -MultiHome=${ip} -Port=${port} ApiKey=${apikey} -log"
 
 #### LinuxGSM Settings ####
 
@@ -149,7 +150,7 @@ consoleinteract="no"
 ## Game Server Details
 # Do not edit
 gamename="Pavlov VR"
-engine="unreal4"
+engine="unreal5"
 glibc="2.17"
 
 #### Directories ####

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

@@ -14,7 +14,7 @@ port="27960"
 defaultmap="q3dm17"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set com_hunkMegs 32 +set net_ip ${ip} +set net_port ${port} +exec ${servercfg} +map ${defaultmap}"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 2 +set com_hunkMegs 32 +set net_ip ${ip} +set net_port ${port} +map ${defaultmap} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 

+ 22 - 14
lgsm/config-default/config-lgsm/cdserver/_default.cfg → lgsm/config-default/config-lgsm/q4server/_default.cfg

@@ -8,8 +8,15 @@
 
 #### Game Server Settings ####
 
+## SteamCMD Login | https://docs.linuxgsm.com/steamcmd#steamcmd-login
+steamuser="username"
+steampass='password'
+
+## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
+port="28004"
+
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-batchmode -nographics"
+startparameters="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set net_port ${port} +exec ${servercfg}"
 
 #### LinuxGSM Settings ####
 
@@ -103,8 +110,8 @@ sleeptime="0.5"
 
 ## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
 # Server appid
-appid="685100"
-steamcmdforcewindows="no"
+appid="2210"
+steamcmdforcewindows="yes"
 # SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
 branch=""
 betapassword=""
@@ -123,7 +130,7 @@ steammaster="false"
 # 9: GoldSrc
 # 10: Avorion
 # 11: end
-stopmode="2"
+stopmode="3"
 
 ## Query mode
 # 1: session only
@@ -131,17 +138,17 @@ stopmode="2"
 # 3: gamedig
 # 4: gsquery
 # 5: tcp
-querymode="1"
-querytype=""
+querymode="2"
+querytype="quake4"
 
 ## Console type
 consoleverbose="yes"
-consoleinteract="no"
+consoleinteract="yes"
 
 ## Game Server Details
 # Do not edit
-gamename="Crafting Dead"
-engine="unity3d"
+gamename="Quake 4"
+engine="idtech3_ql"
 glibc="2.15"
 
 #### Directories ####
@@ -150,10 +157,10 @@ glibc="2.15"
 ## Game Server Directories
 systemdir="${serverfiles}"
 executabledir="${serverfiles}"
-executable="./crafting_dead.x86_64"
-servercfgdir="${systemdir}"
-servercfg="properties.json"
-servercfgdefault="properties.json"
+executable="./quake4-dedicated"
+servercfgdir="${systemdir}/q4base"
+servercfg="${selfname}.cfg"
+servercfgdefault="server.cfg"
 servercfgfullpath="${servercfgdir}/${servercfg}"
 
 ## Backup Directory
@@ -161,9 +168,10 @@ backupdir="${lgsmdir}/backup"
 
 ## Logging Directories
 [ -n "${LGSM_LOGDIR}" ] && logdir="${LGSM_LOGDIR}" || logdir="${rootdir}/log"
-gamelogdir="${systemdir}/logs"
+gamelogdir="${logdir}/server"
 lgsmlogdir="${logdir}/script"
 consolelogdir="${logdir}/console"
+gamelog="${gamelogdir}/${selfname}-game.log"
 lgsmlog="${lgsmlogdir}/${selfname}-script.log"
 consolelog="${consolelogdir}/${selfname}-console.log"
 alertlog="${lgsmlogdir}/${selfname}-alert.log"

+ 2 - 1
lgsm/config-default/config-lgsm/rustserver/_default.cfg

@@ -28,7 +28,7 @@ saveinterval="300" # Auto-save in seconds.
 tickrate="30"      # default: 30, range: 15-100.
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-batchmode +app.listenip ${ip} +app.port ${appport} +server.ip ${ip} +server.port ${port} +server.queryport ${queryport} +server.tickrate ${tickrate} +server.hostname \"${servername}\" +server.identity \"${selfname}\" +server.gamemode ${gamemode} +server.level \"${serverlevel}\" +server.seed ${seed} +server.salt ${salt} +server.maxplayers ${maxplayers} +server.worldsize ${worldsize} +server.saveinterval ${saveinterval} +rcon.web ${rconweb} +rcon.ip ${ip} +rcon.port ${rconport} +rcon.password \"${rconpassword}\" -logfile"
+startparameters="-batchmode +app.listenip ${ip} +app.port ${appport} +server.ip ${ip} +server.port ${port} +server.queryport ${queryport} +server.tickrate ${tickrate} +server.hostname \"${servername}\" +server.identity \"${selfname}\" +server.gamemode ${gamemode} +server.level \"${serverlevel}\" +server.seed ${seed} +server.salt ${salt} +server.maxplayers ${maxplayers} +server.worldsize ${worldsize} +server.saveinterval ${saveinterval} +rcon.web ${rconweb} +rcon.ip ${ip} +rcon.port ${rconport} +rcon.password \"${rconpassword}\" -logfile ${gamelog}"
 
 #### LinuxGSM Settings ####
 
@@ -184,6 +184,7 @@ backupdir="${lgsmdir}/backup"
 gamelogdir="${logdir}/server"
 lgsmlogdir="${logdir}/script"
 consolelogdir="${logdir}/console"
+gamelog="${gamelogdir}/${selfname}-game.log"
 lgsmlog="${lgsmlogdir}/${selfname}-script.log"
 consolelog="${consolelogdir}/${selfname}-console.log"
 alertlog="${lgsmlogdir}/${selfname}-alert.log"

+ 2 - 2
lgsm/config-default/config-lgsm/sampserver/_default.cfg

@@ -126,8 +126,8 @@ querymode="3"
 querytype="samp"
 
 ## Console type
-consoleverbose=""
-consoleinteract=""
+consoleverbose="no"
+consoleinteract="no"
 
 ## Game Server Details
 # Do not edit

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

@@ -15,7 +15,7 @@ defaultmap="StationKappa"
 servername="LinuxGSM"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="Port=${port}?QueryPort=${queryport} -startup_map ${defaultmap} -server_name \"${servername}\""
+startparameters="-MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -startup_map ${defaultmap} -server_name '${servername}'"
 
 #### LinuxGSM Settings ####
 

+ 4 - 3
lgsm/config-default/config-lgsm/sfserver/_default.cfg

@@ -15,7 +15,8 @@ beaconport="15000"
 port="7777"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="FactoryGame -multihome=${ip} -ServerQueryPort=${queryport} -BeaconPort=${beaconport} -Port=${port} -log -unattended"
+## Game Server Docs | https://satisfactory.fandom.com/wiki/Dedicated_servers
+startparameters="FactoryGame -MultiHome=${ip} -Port=${port} -ServerQueryPort=${queryport} -BeaconPort=${beaconport} -log"
 
 #### LinuxGSM Settings ####
 
@@ -147,7 +148,7 @@ consoleinteract="no"
 ## Game Server Details
 # Do not edit
 gamename="Satisfactory"
-engine="unreal4"
+engine="unreal5"
 glibc="2.17"
 
 #### Directories ####
@@ -156,7 +157,7 @@ glibc="2.17"
 ## Game Server Directories
 systemdir="${serverfiles}/FactoryGame"
 executabledir="${serverfiles}/Engine/Binaries/Linux"
-executable="./UE4Server-Linux-Shipping"
+executable="./UnrealServer-Linux-Shipping"
 servercfgdir="${systemdir}/Saved/Config/LinuxServer"
 servercfg="GameUserSettings.ini"
 servercfgdefault="GameUserSettings.ini"

+ 2 - 2
lgsm/config-default/config-lgsm/squadserver/_default.cfg

@@ -11,10 +11,10 @@
 ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
 port="7787"
 queryport="27165"
-randommap="ALWAYS"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="MULTIHOME=${ip} RANDOM=${randommap} Port=${port} QueryPort=${queryport}"
+## Game Server Docs | https://squad.fandom.com/wiki/Dedicated_server
+startparameters="-MultiHome=${ip} -Port=${port} -QueryPort=${queryport}"
 
 #### LinuxGSM Settings ####
 

+ 2 - 1
lgsm/config-default/config-lgsm/tiserver/_default.cfg

@@ -14,6 +14,7 @@ port="7777"
 defaultmap="/Game/TheIsle/Maps/Game/Isla_Spiro/Isla_Spiro"
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
+## Game Server Docs | https://isle.fandom.com/wiki/The_Isle_Server_Settings_and_Configuration
 startparameters="${defaultmap} -Port=${port} -log"
 
 #### LinuxGSM Settings ####
@@ -146,7 +147,7 @@ consoleinteract="no"
 ## Game Server Details
 # Do not edit
 gamename="The Isle"
-engine="unreal4"
+engine="unreal5"
 glibc="2.17"
 
 #### Directories ####

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

@@ -19,7 +19,7 @@ queryport="27015"
 gslt=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
-startparameters="-log -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -TowerServerINI=${selfname}.ini"
+startparameters="-MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -TowerServerINI=${selfname}.ini -log"
 
 #### LinuxGSM Settings ####
 

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

@@ -29,7 +29,7 @@ gspassword=""
 
 ## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
 # List of game types and mutators: https://docs.linuxgsm.com/game-servers/unreal-tournament-3
-startparameters="server ${defaultmap}?Game=${game}?bIsDedicated=${isdedicated}?bIsLanMatch=${islanmatch}?bUsesStats=${usesstats}?bShouldAdvertise=${shouldadvertise}?PureServer=${pureserver}?bAllowJoinInProgress=${allowjoininprogress}?Mutator=${mutators}?ConfigSubDir=${selfname} -login=${gsusername} -password=${gspassword} -port=${port} -queryport=${queryport} -multihome=${ip} -nohomedir -unattended -log=${gamelog}"
+startparameters="server ${defaultmap}?Game=${game}?bIsDedicated=${isdedicated}?bIsLanMatch=${islanmatch}?bUsesStats=${usesstats}?bShouldAdvertise=${shouldadvertise}?PureServer=${pureserver}?bAllowJoinInProgress=${allowjoininprogress}?Mutator=${mutators}?ConfigSubDir=${selfname} -login=${gsusername} -password=${gspassword} -multihome=${ip} -port=${port} -queryport=${queryport} -nohomedir -unattended -log=${gamelog}"
 
 #### LinuxGSM Settings ####
 

+ 3 - 3
lgsm/config-default/config-lgsm/wurmserver/_default.cfg

@@ -27,7 +27,7 @@ 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"
+adminpassword="CHANGE_ME"
 
 # If true the server will follow the rules from the Epic servers in Wurm Online.
 # For instance it will use the skill curve.
@@ -179,8 +179,8 @@ querymode="2"
 querytype="protocol-valve"
 
 ## Console type
-consoleverbose=""
-consoleinteract=""
+consoleverbose="yes"
+consoleinteract="no"
 
 ## Game Server Details
 # Do not edit

+ 1 - 1
lgsm/data/almalinux-8.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/almalinux-9.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/centos-7.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/centos-8.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/centos-9.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/debian-10.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-11-jre,rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/debian-11.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-17-jre,rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/debian-12.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-17-jre,rng-tools5
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/debian-9.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-8-jre,rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

binární
lgsm/data/gameicons/cd-icon.png


binární
lgsm/data/gameicons/q4-icon.png


+ 1 - 1
lgsm/data/rhel-7.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/rhel-8.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/rhel-9.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/rocky-8.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/rocky-9.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu,dos2unix,libxml2
 btl
 cc
-cd
 ck,xorg-x11-server-Xvfb
 cmw
 cod,compat-libstdc++-33.i686
@@ -89,6 +88,7 @@ pvr,libcxx
 pz,java-11-openjdk rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/serverlist.csv

@@ -18,7 +18,6 @@ bs,bsserver,Blade Symphony,ubuntu-22.04
 bt,btserver,Barotrauma,ubuntu-22.04
 btl,btlserver,BATTALION: Legacy,ubuntu-20.04
 cc,ccserver,Codename CURE,ubuntu-22.04
-cd,cdserver,Crafting Dead,ubuntu-22.04
 ck,ckserver,Core Keeper,ubuntu-22.04
 cmw,cmwserver,Chivalry: Medieval Warfare,ubuntu-22.04
 cod,codserver,Call of Duty,ubuntu-22.04
@@ -88,6 +87,7 @@ pvr,pvrserver,Pavlov VR,ubuntu-22.04
 pz,pzserver,Project Zomboid,ubuntu-22.04
 q2,q2server,Quake 2,ubuntu-22.04
 q3,q3server,Quake 3: Arena,ubuntu-22.04
+q4,q4server,Quake 4,ubuntu-22.04
 ql,qlserver,Quake Live,ubuntu-22.04
 qw,qwserver,Quake World,ubuntu-22.04
 ricochet,ricochetserver,Ricochet,ubuntu-22.04

+ 1 - 1
lgsm/data/ubuntu-16.04.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-8-jre,rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/ubuntu-18.04.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-11-jre,rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/ubuntu-20.04.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-17-jre,rng-tools
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/ubuntu-22.04.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-17-jre,rng-tools5
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/ubuntu-23.04.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-17-jre,rng-tools5
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 1 - 1
lgsm/data/ubuntu-23.10.csv

@@ -19,7 +19,6 @@ bs
 bt,libicu-dev,dos2unix,libxml2-utils
 btl
 cc
-cd
 ck,xvfb,libxi6
 cmw
 cod,libstdc++5:i386
@@ -89,6 +88,7 @@ pvr,libc++1
 pz,openjdk-17-jre,rng-tools5
 q2
 q3
+q4
 ql
 qw
 ricochet

+ 9 - 2
lgsm/modules/check_config.sh

@@ -19,8 +19,15 @@ if [ "${shortname}" == "rust" ] && [ -v rconpassword ] && [ -z "${rconpassword}"
 	fn_print_fail_nl "RCON password is not set"
 	fn_script_log_warn "RCON password is not set"
 elif [ -v rconpassword ] && [ "${rconpassword}" == "CHANGE_ME" ]; then
-	fn_print_warn_nl "Default RCON Password detected"
-	fn_script_log_warn "Default RCON Password detected"
+	fn_print_warn_nl "Default RCON password detected"
+	fn_script_log_warn "Default RCON password detected"
+elif [ -v httppassword ] && [ "${httppassword}" == "CHANGE_ME" ]; then
+	fn_print_warn_nl "Default Web password detected"
+	fn_script_log_warn "Default Web password detected"
+elif [ -v adminpassword ] && [ "${adminpassword}" == "CHANGE_ME" ]; then
+	fn_print_warn_nl "Default Admin password detected"
+	fn_script_log_warn "Default Admin password detected"
+
 fi
 
 if [ "${shortname}" == "vh" ] && [ -z "${serverpassword}" ]; then

+ 3 - 3
lgsm/modules/check_deps.sh

@@ -252,7 +252,7 @@ fn_deps_detector() {
 	elif [ "${deptocheck}" == "steamcmd" ] && [ -z "${appid}" ]; then
 		array_deps_required=("${array_deps_required[@]/steamcmd/}")
 		steamcmdstatus=1
-	elif [ "${deptocheck}" == "steamcmd" ] && [ "${distroid}" == "debian" ] && ! grep -qE "^deb .*non-free" /etc/apt/sources.list; then
+	elif [ "${deptocheck}" == "steamcmd" ] && [ "${distroid}" == "debian" ] && ! grep -qE '[^deb]+non-free([^-]|$)' /etc/apt/sources.list; then
 		array_deps_required=("${array_deps_required[@]/steamcmd/}")
 		steamcmdstatus=1
 	# Java: Added for users using Oracle JRE to bypass check.
@@ -349,8 +349,8 @@ fi
 # Will warn user if their distro is no longer supported by the vendor.
 if [ -n "${distrosupport}" ]; then
 	if [ "${distrosupport}" == "unsupported" ]; then
-		fn_print_warning_nl "${distroname} is no longer supported by the vendor. Upgrading is recommended."
-		fn_script_log_warn "${distroname} is no longer supported by the vendor. Upgrading is recommended."
+		fn_print_warning_nl "${distroname} is no longer supported by the vendor or LinuxGSM. Upgrading is recommended."
+		fn_script_log_warn "${distroname} is no longer supported by the vendor or LinuxGSM. Upgrading is recommended."
 	fi
 fi
 

+ 38 - 21
lgsm/modules/check_system_requirements.sh

@@ -12,42 +12,59 @@ info_distro.sh
 # RAM requirements in megabytes for each game or engine.
 
 if [ "${shortname}" == "ark" ]; then
-	ramrequirementmb="4000"
-	ramrequirementgb="4"
+	ramrequirementgb="7"
+elif [ "${shortname}" == "arma3" ]; then
+	ramrequirementgb="2"
+elif [ "${shortname}" == "armar" ]; then
+	ramrequirementgb="3"
 elif [ "${shortname}" == "bt" ]; then
-	ramrequirementmb="1000"
 	ramrequirementgb="1"
-elif [ "${shortname}" == "mh" ]; then
-	ramrequirementmb="4000"
-	ramrequirementgb="4"
-elif [ "${shortname}" == "arma3" ]; then
-	ramrequirementmb="1000"
+elif [ "${shortname}" == "cc" ]; then
 	ramrequirementgb="1"
-elif [ "${shortname}" == "rust" ]; then
-	ramrequirementmb="4000"
+elif [ "${shortname}" == "dayz" ]; then
+	ramrequirementgb="5"
+elif [ "${shortname}" == "dodr" ]; then
+	ramrequirementgb="2"
+elif [ "${shortname}" == "hw" ]; then
+	ramrequirementgb="3"
+elif [ "${shortname}" == "mc" ]; then
+	ramrequirementgb="1"
+elif [ "${shortname}" == "pmc" ]; then
+	ramrequirementgb="2"
+elif [ "${shortname}" == "mh" ]; then
 	ramrequirementgb="4"
-elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "wmc" ]; then
-	ramrequirementmb="1000"
+elif [ "${shortname}" == "ns2" ] || [ "${shortname}" == "ns2c" ]; then
 	ramrequirementgb="1"
 elif [ "${shortname}" == "ps" ]; then
-	ramrequirementmb="2000"
 	ramrequirementgb="2"
-elif [ "${shortname}" == "ns2" ] || [ "${shortname}" == "ns2c" ]; then
-	ramrequirementmb="1000"
+elif [ "${shortname}" == "pvr" ]; then
 	ramrequirementgb="1"
+elif [ "${shortname}" == "pz" ]; then
+	ramrequirementgb="3"
+elif [ "${shortname}" == "rust" ]; then
+	ramrequirementgb="9"
+elif [ "${shortname}" == "sdtd" ]; then
+	ramrequirementgb="4"
+elif [ "${shortname}" == "sf" ]; then
+	ramrequirementgb="12"
+elif [ "${shortname}" == "squad" ]; then
+	ramrequirementgb="2"
 elif [ "${shortname}" == "st" ]; then
-	ramrequirementmb="1000"
 	ramrequirementgb="1"
-elif [ "${shortname}" == "pvr" ]; then
-	ramrequirementmb="2000"
+elif [ "${shortname}" == "stn" ]; then
+	ramrequirementgb="3"
+elif [ "${shortname}" == "tu" ]; then
+	ramrequirementgb="2"
+elif [ "${shortname}" == "vh" ]; then
 	ramrequirementgb="2"
+else
+	ramrequirementgb="0.5"
 fi
 
 # If the game or engine has a minimum RAM Requirement, compare it to system's available RAM.
-if [ "${ramrequirementmb}" ]; then
-	if [ "${physmemtotalmb}" -lt "${ramrequirementmb}" ]; then
+if [ "${ramrequirementgb}" ]; then
+	if [ "${physmemtotalgb}" -lt "${ramrequirementgb}" ]; then
 		fn_print_dots "Checking RAM"
-		# Warn the user.
 		fn_print_warn_nl "Checking RAM: ${ramrequirementgb}G required, ${physmemtotal} available"
 		echo "* ${gamename} server may fail to run or experience poor performance."
 		fn_sleep_time_5

+ 1 - 1
lgsm/modules/command_backup.sh

@@ -126,7 +126,7 @@ fn_backup_compression() {
 		core_exit.sh
 	fi
 
-	tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" ./.
+	tar -czf "${backupdir}/${backupname}.tar.gz" -C "${rootdir}" --exclude "${excludedir}" --exclude "${lockdir}" --exclude "${tmpdir}" ./.
 	local exitcode=$?
 	if [ "${exitcode}" != 0 ]; then
 		fn_print_fail_eol

+ 1 - 1
lgsm/modules/command_debug.sh

@@ -34,7 +34,7 @@ fn_print_header
 	echo -e "${lightblue}Architecture:\t\t${default}${arch}"
 	echo -e "${lightblue}Kernel:\t\t${default}${kernel}"
 	echo -e "${lightblue}Hostname:\t\t${default}${HOSTNAME}"
-	echo -e "${lightblue}tmux:\t\t${default}${tmuxv}"
+	echo -e "${lightblue}tmux:\t\t${default}${tmuxversion}"
 	echo -e "${lightblue}Avg Load:\t\t${default}${load}"
 	echo -e "${lightblue}Free Memory:\t\t${default}${physmemfree}"
 	echo -e "${lightblue}Free Disk:\t\t${default}${availspace}"

+ 11 - 35
lgsm/modules/command_start.sh

@@ -73,47 +73,23 @@ fn_start_tmux() {
 	touch "${consolelog}"
 
 	# tmux compiled from source will return "master", therefore ignore it.
-	if [ "${tmuxv}" == "master" ]; then
+	if [ "${tmuxversion}" == "master" ]; then
 		fn_script_log "tmux version: master (user compiled)"
 		echo -e "tmux version: master (user compiled)" >> "${consolelog}"
-		if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
-			if [ "${logtimestamp}" == "on" ]; then
-				tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
-			else
-				tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
-			fi
-		fi
+	fi
 
-	elif [ -n "${tmuxv}" ]; then
-		# tmux pipe-pane not supported in tmux versions < 1.6.
-		if [ "${tmuxvdigit}" -lt "16" ]; then
-			echo -e "Console logging disabled: tmux => 1.6 required
-			https://linuxgsm.com/tmux-upgrade
-			Currently installed: $(tmux -V)" > "${consolelog}"
-
-		# Console logging disabled: Bug in tmux 1.8 breaks logging.
-		elif [ "${tmuxvdigit}" -eq "18" ]; then
-			echo -e "Console logging disabled: Bug in tmux 1.8 breaks logging
-			https://linuxgsm.com/tmux-upgrade
-			Currently installed: $(tmux -V)" > "${consolelog}"
-		# Console logging enable or not set.
-		elif [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
-			if [ "${logtimestamp}" == "on" ]; then
-				tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
-			else
-				tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
-			fi
+	# Enable console logging.
+	if [ "${consolelogging}" == "on" ] || [ -z "${consolelogging}" ]; then
+		if [ "${logtimestamp}" == "on" ]; then
+			tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec bash -c \"cat | $addtimestamp\" >> '${consolelog}'"
+		else
+			tmux -L "${socketname}" pipe-pane -o -t "${sessionname}" "exec cat >> '${consolelog}'"
 		fi
 	else
-		echo -e "Unable to detect tmux version" >> "${consolelog}"
-		fn_script_log_warn "Unable to detect tmux version"
-	fi
-
-	# Console logging disabled.
-	if [ "${consolelogging}" == "off" ]; then
 		echo -e "Console logging disabled in settings" >> "${consolelog}"
-		fn_script_log_info "Console logging disabled by user"
+		fn_script_log_info "Console logging disabled in settings"
 	fi
+
 	fn_sleep_time_1
 
 	# If the server fails to start.
@@ -123,7 +99,7 @@ fn_start_tmux() {
 		fn_script_log_fail "Unable to start ${servername}"
 		if [ -s "${lgsmlogdir}/.${selfname}-tmux-error.tmp" ]; then
 			fn_print_fail_nl "Unable to start ${servername}: tmux error:"
-			fn_script_log_fail "Unable to start ${servername}: tmux error:"
+			fn_script_log_fail "Unable to start ${servername}: tmux error"
 			echo -e ""
 			echo -e "Command"
 			fn_messages_separator

+ 1 - 1
lgsm/modules/core_getopt.sh

@@ -22,7 +22,7 @@ cmd_update_linuxgsm=("ul;update-lgsm;uf;update-modules" "command_update_linuxgsm
 cmd_test_alert=("ta;test-alert" "command_test_alert.sh" "Send a test alert.")
 cmd_monitor=("m;monitor" "command_monitor.sh" "Check server status and restart if crashed.")
 cmd_skeleton=("sk;skeleton" "command_skeleton.sh" "Create a skeleton directory.")
-cmd_sponsor=("s;sponsor" "command_sponsor.sh" "Donation options.")
+cmd_sponsor=("s;sponsor" "command_sponsor.sh" "Sponsorship options.")
 cmd_send=("sd;send" "command_send.sh" "Send command to game server console.")
 # Console servers only.
 cmd_console=("c;console" "command_console.sh" "Access server console.")

+ 1 - 1
lgsm/modules/core_modules.sh

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

+ 3 - 1
lgsm/modules/core_steamcmd.sh

@@ -179,7 +179,9 @@ fn_update_steamcmd_remotebuild() {
 	fi
 
 	# added as was failing GitHub Actions test. Running SteamCMD twice seems to fix it.
-	${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +quit > /dev/null 2>&1
+	if [ "${CI}" ]; then
+		${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +quit > /dev/null 2>&1
+	fi
 	# password for branch not needed to check the buildid
 	remotebuildversion=$(${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +quit | sed -e '/"branches"/,/^}/!d' | sed -n "/\"${branch}\"/,/}/p" | grep -m 1 buildid | tr -cd '[:digit:]')
 

+ 2 - 2
lgsm/modules/fix.sh

@@ -52,8 +52,8 @@ fn_apply_fix() {
 	fi
 }
 
-apply_pre_start_fix=(arma3 armar ark av bt bo csgo cmw dst hw ins nmrih onset pvr rust rw sdtd sfc sof2 squad st tf2 terraria ts3 mcb mta unt vh wurm zmr)
-apply_post_install_fix=(av kf kf2 ro samp ut2k4 ut ut3)
+apply_pre_start_fix=(arma3 armar ark av bt bo csgo cmw dst hw ins kf nmrih onset pvr rust rw samp sdtd sfc sof2 squad st tf2 terraria ts3 mcb mta unt vh wurm zmr)
+apply_post_install_fix=(av kf kf2 ro ut2k4 ut ut3)
 
 # validate registered fixes for safe development
 for fix in "${apply_pre_start_fix[@]}" "${apply_post_install_fix[@]}"; do

+ 1 - 1
lgsm/modules/fix_armar.sh

@@ -5,7 +5,7 @@
 # Website: https://linuxgsm.com
 # Description: Resolves issues with Arma Reforger.
 
-module_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
+moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
 # Fixes: Profile directory doesn't exist.
 # Issue Link: https://feedback.bistudio.com/T164845

+ 105 - 24
lgsm/modules/fix_kf.sh

@@ -7,30 +7,111 @@
 
 moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-echo -e "applying WebAdmin ROOst.css fix."
-echo -e "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13"
+# echo -e "applying WebAdmin ROOst.css fix."
+# echo -e "http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13"
 sed -i 's/none}/none;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
 sed -i 's/underline}/underline;/g' "${serverfiles}/Web/ServerAdmin/ROOst.css"
-fn_sleep_time
-echo -e "applying WebAdmin CharSet fix."
-echo -e "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1"
+# echo -e "applying WebAdmin CharSet fix."
+# echo -e "http://forums.tripwireinteractive.com/showpost.php?p=442340&postcount=1"
 sed -i 's/CharSet="iso-8859-1"/CharSet="utf-8"/g' "${systemdir}/UWeb.int"
-fn_sleep_time
-echo -e "applying server name fix."
-fn_sleep_time
-echo -e "forcing server restart..."
-fn_sleep_time
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-fn_sleep_time_5
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset
-exitbypass=1
-command_start.sh
-fn_firstcommand_reset
-fn_sleep_time_5
-exitbypass=1
-command_stop.sh
-fn_firstcommand_reset
+
+# get md5sum of steamclient.so
+if [ -f "${serverfiles}/System/steamclient.so" ]; then
+	steamclientmd5=$(md5sum "${serverfiles}/System/steamclient.so" | awk '{print $1;}')
+fi
+#get md5sum of libtier0_s.so
+if [ -f "${serverfiles}/System/libtier0_s.so" ]; then
+	libtier0_smd5=$(md5sum "${serverfiles}/System/libtier0_s.so" | awk '{print $1;}')
+fi
+#get md5sum of libvstdlib_s.so
+if [ -f "${serverfiles}/System/libvstdlib_s.so" ]; then
+	libvstdlib_smd5=$(md5sum "${serverfiles}/System/libvstdlib_s.so" | awk '{print $1;}')
+fi
+
+# get md5sum of steamclient.so from steamcmd
+if [ -f "${HOME}/.steam/steamcmd/linux32/steamclient.so" ]; then
+	steamcmdsteamclientmd5=$(md5sum "${HOME}/.steam/steamcmd/linux32/steamclient.so" | awk '{print $1;}')
+elif [ -f "${steamcmddir}/linux32/steamclient.so" ]; then
+	steamcmdsteamclientmd5=$(md5sum "${steamcmddir}/linux32/steamclient.so" | awk '{print $1;}')
+elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" ]; then
+	steamcmdsteamclientmd5=$(md5sum "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" | awk '{print $1;}')
+fi
+
+# get md5sum of libtier0_s.so from steamcmd
+if [ -f "${HOME}/.steam/steamcmd/linux32/libtier0_s.so" ]; then
+	steamcmdlibtier0_smd5=$(md5sum "${HOME}/.steam/steamcmd/linux32/libtier0_s.so" | awk '{print $1;}')
+elif [ -f "${steamcmddir}/linux32/libtier0_s.so" ]; then
+	steamcmdlibtier0_smd5=$(md5sum "${steamcmddir}/linux32/libtier0_s.so" | awk '{print $1;}')
+elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/libtier0_s.so" ]; then
+	steamcmdlibtier0_smd5=$(md5sum "${HOME}/.local/share/Steam/steamcmd/linux32/libtier0_s.so" | awk '{print $1;}')
+fi
+
+# get md5sum of libvstdlib_s.so from steamcmd
+if [ -f "${HOME}/.steam/steamcmd/linux32/libvstdlib_s.so" ]; then
+	steamcmdlibvstdlib_smd5=$(md5sum "${HOME}/.steam/steamcmd/linux32/libvstdlib_s.so" | awk '{print $1;}')
+elif [ -f "${steamcmddir}/linux32/libvstdlib_s.so" ]; then
+	steamcmdlibvstdlib_smd5=$(md5sum "${steamcmddir}/linux32/libvstdlib_s.so" | awk '{print $1;}')
+elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/libvstdlib_s.so" ]; then
+	steamcmdlibvstdlib_smd5=$(md5sum "${HOME}/.local/share/Steam/steamcmd/linux32/libvstdlib_s.so" | awk '{print $1;}')
+fi
+
+if [ ! -f "${serverfiles}/System/steamclient.so" ] || [ "${steamcmdsteamclientmd5}" != "${steamclientmd5}" ]; then
+	fixname="steamclient.so x86"
+	fn_fix_msg_start
+	if [ -f "${HOME}/.steam/steamcmd/linux32/steamclient.so" ]; then
+		cp "${HOME}/.steam/steamcmd/linux32/steamclient.so" "${serverfiles}/System/steamclient.so"
+	elif [ -f "${steamcmddir}/linux32/steamclient.so" ]; then
+		cp "${steamcmddir}/linux32/steamclient.so" "${serverfiles}/System/steamclient.so"
+	elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" ]; then
+		cp "${HOME}/.local/share/Steam/steamcmd/linux32/steamclient.so" "${serverfiles}/System/steamclient.so"
+	fi
+	fn_fix_msg_end
+fi
+
+if [ ! -f "${serverfiles}/System/libtier0_s.so" ] || [ "${steamcmdlibtier0_smd5}" != "${libtier0_smd5}" ]; then
+	fixname="libtier0_s.so"
+	fn_fix_msg_start
+	if [ -f "${HOME}/.steam/steamcmd/linux32/libtier0_s.so" ]; then
+		cp "${HOME}/.steam/steamcmd/linux32/libtier0_s.so" "${serverfiles}/System/libtier0_s.so"
+	elif [ -f "${steamcmddir}/linux32/libtier0_s.so" ]; then
+		cp "${steamcmddir}/linux32/libtier0_s.so" "${serverfiles}/System/libtier0_s.so"
+	elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/libtier0_s.so" ]; then
+		cp "${HOME}/.local/share/Steam/steamcmd/linux32/libtier0_s.so" "${serverfiles}/System/libtier0_s.so"
+	fi
+	fn_fix_msg_end
+fi
+
+if [ ! -f "${serverfiles}/System/libvstdlib_s.so" ] || [ "${steamcmdlibvstdlib_smd5}" != "${libvstdlib_smd5}" ]; then
+	fixname="libvstdlib_s.so"
+	fn_fix_msg_start
+	if [ -f "${HOME}/.steam/steamcmd/linux32/libvstdlib_s.so" ]; then
+		cp "${HOME}/.steam/steamcmd/linux32/libvstdlib_s.so" "${serverfiles}/System/libvstdlib_s.so"
+	elif [ -f "${steamcmddir}/linux32/libvstdlib_s.so" ]; then
+		cp "${steamcmddir}/linux32/libvstdlib_s.so" "${serverfiles}/System/libvstdlib_s.so"
+	elif [ -f "${HOME}/.local/share/Steam/steamcmd/linux32/libvstdlib_s.so" ]; then
+		cp "${HOME}/.local/share/Steam/steamcmd/linux32/libvstdlib_s.so" "${serverfiles}/System/libvstdlib_s.so"
+	fi
+	fn_fix_msg_end
+fi
+
+# if running install command
+if [ "${commandname}" == "INSTALL" ]; then
+	echo -e "applying server name fix."
+	fn_sleep_time
+	echo -e "forcing server restart..."
+	fn_sleep_time
+	exitbypass=1
+	command_start.sh
+	fn_firstcommand_reset
+	fn_sleep_time_5
+	exitbypass=1
+	command_stop.sh
+	fn_firstcommand_reset
+	exitbypass=1
+	command_start.sh
+	fn_firstcommand_reset
+	fn_sleep_time_5
+	exitbypass=1
+	command_stop.sh
+	fn_firstcommand_reset
+fi

+ 21 - 7
lgsm/modules/fix_nmrih.sh

@@ -8,10 +8,24 @@
 
 moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 
-ln -s "${serverfiles}/bin/vphysics_srv.so" "${serverfiles}/bin/vphysics.so"
-ln -s "${serverfiles}/bin/studiorender_srv.so" "${serverfiles}/bin/studiorender.so"
-ln -s "${serverfiles}/bin/soundemittersystem_srv.so" "${serverfiles}/bin/soundemittersystem.so"
-ln -s "${serverfiles}/bin/shaderapiempty_srv.so" "${serverfiles}/bin/shaderapiempty.so"
-ln -s "${serverfiles}/bin/scenefilecache_srv.so" "${serverfiles}/bin/scenefilecache.so"
-ln -s "${serverfiles}/bin/replay_srv.so" "${serverfiles}/bin/replay.so"
-ln -s "${serverfiles}/bin/materialsystem_srv.so" "${serverfiles}/bin/materialsystem.so"
+if [ ! -f "${serverfiles}/bin/vphysics.so" ]; then
+	ln -s "${serverfiles}/bin/vphysics_srv.so" "${serverfiles}/bin/vphysics.so"
+fi
+if [ ! -f "${serverfiles}/bin/studiorender.so" ]; then
+	ln -s "${serverfiles}/bin/studiorender_srv.so" "${serverfiles}/bin/studiorender.so"
+fi
+if [ ! -f "${serverfiles}/bin/soundemittersystem.so" ]; then
+	ln -s "${serverfiles}/bin/soundemittersystem_srv.so" "${serverfiles}/bin/soundemittersystem.so"
+fi
+if [ ! -f "${serverfiles}/bin/shaderapiempty.so" ]; then
+	ln -s "${serverfiles}/bin/shaderapiempty_srv.so" "${serverfiles}/bin/shaderapiempty.so"
+fi
+if [ ! -f "${serverfiles}/bin/scenefilecache.so" ]; then
+	ln -s "${serverfiles}/bin/scenefilecache_srv.so" "${serverfiles}/bin/scenefilecache.so"
+fi
+if [ ! -f "${serverfiles}/bin/replay.so" ]; then
+	ln -s "${serverfiles}/bin/replay_srv.so" "${serverfiles}/bin/replay.so"
+fi
+if [ ! -f "${serverfiles}/bin/materialsystem.so" ]; then
+	ln -s "${serverfiles}/bin/materialsystem_srv.so" "${serverfiles}/bin/materialsystem.so"
+fi

+ 18 - 0
lgsm/modules/fix_rust.sh

@@ -30,3 +30,21 @@ if [ -f "${serverfiles}/carbon/tools/environment.sh" ]; then
 	# shellcheck source=/dev/null
 	source "${serverfiles}/carbon/tools/environment.sh"
 fi
+
+# fix for #4268
+# insert set -g default-terminal "screen-256color" into ~/.tmux.conf
+if [ -f "${serverfiles}/RustDedicated_Data/Managed/Oxide.Rust.dll" ]; then
+	# tmux version is 3.3 or higher
+	tmuxvdigit="$(tmux -V | sed "s/tmux //" | sed -n '1 p' | tr -cd '[:digit:]')"
+	if [ "${tmuxvdigit}" -ge "33" ]; then
+		if [ ! -f "${HOME}/.tmux.conf" ]; then
+			touch "${HOME}/.tmux.conf"
+		fi
+		if ! grep -q "set -g default-terminal \"screen-256color\"" "${HOME}/.tmux.conf"; then
+			fixname="tmux screen-256color"
+			fn_fix_msg_start
+			echo "set -g default-terminal \"screen-256color\"" >> "${HOME}/.tmux.conf"
+			fn_fix_msg_end
+		fi
+	fi
+fi

+ 6 - 0
lgsm/modules/fix_vh.sh

@@ -17,6 +17,12 @@ if [ -f "${modsinstalledlistfullpath}" ]; then
 			echo 'executable="./start_server_bepinex.sh"' >> "${configdirserver}/${selfname}.cfg"
 			executable="./start_server_bepinex.sh"
 		fi
+		if [ -d "${serverfiles}/unstripped_corlib" ]; then
+			rm -rf "${serverfiles}/unstripped_corlib"
+		fi
+		sed -i "s/^dllSearchPathOverride=unstripped_corlib/# &/" "${serverfiles}/doorstop_config.ini"
+		sed -i "s/^export DOORSTOP_CORLIB_OVERRIDE_PATH="$BASEDIR\/unstripped_corlib"/# &/" "${serverfiles}/start_game_bepinex.sh"
+		sed -i "s/^export DOORSTOP_CORLIB_OVERRIDE_PATH="${VALHEIM_PLUS_PATH}\/unstripped_corlib"/# &/" "${serverfiles}/start_server_bepinex.sh"
 	fi
 	# special exports for BepInEx if installed
 	if grep -qE "^bepinexvh" "${modsinstalledlistfullpath}"; then

+ 88 - 96
lgsm/modules/info_distro.sh

@@ -21,114 +21,107 @@ fi
 
 ## Distro
 # Returns architecture, kernel and distro/os.
-arch="$(uname -m)"
-kernel="$(uname -r)"
-
-# Distro Name - Ubuntu 16.04 LTS
-# Distro Version - 16.04
-# Distro ID - ubuntu
-# Distro Codename - xenial
+arch="$(uname -m)"   # Architecture e.g. x86_64
+kernel="$(uname -r)" # Kernel e.g. 2.6.32-042stab120.16
 
 # Gathers distro info from various sources filling in missing gaps.
 distro_info_array=(os-release lsb_release hostnamectl debian_version redhat-release)
 for distro_info in "${distro_info_array[@]}"; do
 	if [ -f "/etc/os-release" ] && [ "${distro_info}" == "os-release" ]; then
-		distroname="$(grep "PRETTY_NAME" /etc/os-release | awk -F\= '{gsub(/"/,"",$2);print $2}')"
-		distroversion="$(grep "VERSION_ID" /etc/os-release | awk -F\= '{gsub(/"/,"",$2);print $2}')"
-		# Special var for rhel like distros to removed point in number e.g 8.4 to just 8.
-		distroversionrh="$(sed -nr 's/^VERSION_ID="([0-9]*).+?"/\1/p' /etc/os-release)"
-		distroid="$(grep "ID=" /etc/os-release | grep -v _ID | awk -F\= '{gsub(/"/,"",$2);print $2}')"
-		distroidlike="$(grep "ID_LIKE=" /etc/os-release | grep -v _ID | awk -F\= '{gsub(/"/,"",$2);print $2}')"
-		distrocodename="$(grep "VERSION_CODENAME" /etc/os-release | awk -F\= '{gsub(/"/,"",$2);print $2}')"
+		distroname="$(grep "PRETTY_NAME" /etc/os-release | awk -F= '{gsub(/"/,"",$2);print $2}')"   # e.g. Ubuntu 22.04.3 LTS
+		distroversion="$(grep "VERSION_ID" /etc/os-release | awk -F= '{gsub(/"/,"",$2);print $2}')" # e.g. 22.04
+		# Special var for rhel like distros to remove point in number e.g 8.4 to just 8.
+		if [[ "${distroidlike}" == *"rhel"* ]] || [ "${distroid}" == "rhel" ]; then
+			distroversionrh="$(sed -nr 's/^VERSION_ID="([0-9]*).+?"/\1/p' /etc/os-release)" # e.g. 8
+		fi
+		distroid="$(grep "ID=" /etc/os-release | grep -v _ID | awk -F= '{gsub(/"/,"",$2);print $2}')"          # e.g. ubuntu
+		distroidlike="$(grep "ID_LIKE=" /etc/os-release | grep -v _ID | awk -F= '{gsub(/"/,"",$2);print $2}')" # e.g. debian
+		distrocodename="$(grep "VERSION_CODENAME" /etc/os-release | awk -F= '{gsub(/"/,"",$2);print $2}')"     # e.g. jammy
 	elif [ "$(command -v lsb_release 2> /dev/null)" ] && [ "${distro_info}" == "lsb_release" ]; then
 		if [ -z "${distroname}" ]; then
-			distroname="$(lsb_release -sd)"
+			distroname="$(lsb_release -sd)" # e.g. Ubuntu 22.04.3 LTS
 		elif [ -z "${distroversion}" ]; then
-			distroversion="$(lsb_release -sr)"
+			distroversion="$(lsb_release -sr)" # e.g. 22.04
 		elif [ -z "${distroid}" ]; then
-			distroid="$(lsb_release -si)"
+			distroid="$(lsb_release -si)" # e.g. Ubuntu
 		elif [ -z "${distrocodename}" ]; then
-			distrocodename="$(lsb_release -sc)"
+			distrocodename="$(lsb_release -sc)" # e.g. jammy
 		fi
 	elif [ "$(command -v hostnamectl 2> /dev/null)" ] && [ "${distro_info}" == "hostnamectl" ]; then
 		if [ -z "${distroname}" ]; then
-			distroname="$(hostnamectl | grep "Operating System" | sed 's/Operating System: //g')"
+			distroname="$(hostnamectl | grep "Operating System" | sed 's/Operating System: //g')" # e.g. Ubuntu 22.04.3 LTS
 		fi
 	elif [ -f "/etc/debian_version" ] && [ "${distro_info}" == "debian_version" ]; then
 		if [ -z "${distroname}" ]; then
-			distroname="Debian $(cat /etc/debian_version)"
+			distroname="Debian $(cat /etc/debian_version)" # e.g. Debian bookworm/sid
 		elif [ -z "${distroversion}" ]; then
-			distroversion="$(cat /etc/debian_version)"
+			distroversion="$(cat /etc/debian_version)" # e.g. bookworm/sid
 		elif [ -z "${distroid}" ]; then
 			distroid="debian"
 		fi
 	elif [ -f "/etc/redhat-release" ] && [ "${distro_info}" == "redhat-release" ]; then
 		if [ -z "${distroname}" ]; then
-			distroname="$(cat /etc/redhat-release)"
+			distroname="$(cat /etc/redhat-release)" # e.g. Rocky Linux release 9.2 (Blue Onyx)
 		elif [ -z "${distroversion}" ]; then
-			distroversion="$(rpm -qa \*-release | grep -Ei "oracle|redhat|centos|fedora" | cut -d"-" -f3)"
+			distroversion="$(rpm -qa \*-release | grep -Ei "oracle|redhat|centos|fedora|rocky|alma" | cut -d"-" -f3)" # e.g. 9.2
 		elif [ -z "${distroid}" ]; then
-			distroid="$(awk '{print $1}' /etc/redhat-release)"
+			distroid="$(awk '{print $1}' /etc/redhat-release)" # e.g. Rocky
 		fi
 	fi
 done
 
 # Get virtual environment type.
 if [ "$(command -v systemd-detect-virt 2> /dev/null)" ]; then
-	virtualenvironment="$(systemd-detect-virt)"
+	virtualenvironment="$(systemd-detect-virt)" # e.g. kvm
 fi
 
-# Some RHEL based distros use 8.4 instead of just 8.
-if [[ "${distroidlike}" == *"rhel"* ]] || [ "${distroid}" == "rhel" ]; then
-	distroversioncsv="${distroversionrh}"
+# distroversioncsv is used for selecting the correct distro csv in data directory
+if [ -n "${distroversionrh}" ]; then
+	distroversioncsv="${distroversionrh}" # e.g. 8
 else
-	distroversioncsv="${distroversion}"
+	distroversioncsv="${distroversion}" # e.g. 22.04
 fi
 
 # Check if distro supported by distro vendor.
+# distro-info available in debian based distros.
 if [ "$(command -v distro-info 2> /dev/null)" ]; then
 	distrosunsupported="$(distro-info --unsupported)"
 	distrosunsupported_array=("${distrosunsupported}")
 	for distrounsupported in "${distrosunsupported_array[@]}"; do
 		if [ "${distrounsupported}" == "${distrocodename}" ]; then
-			distrosupport=unsupported
+			distrosupport="unsupported"
 			break
 		else
-			distrosupport=supported
+			distrosupport="supported"
 		fi
 	done
-else
-	distrosupport=unknown
+elif [[ "${distroidlike}" == *"rhel"* ]] || [ "${distroid}" == "rhel" ]; then
+	# RHEL/CentOS 7 EOL 2024-06-30. Will be unsupported after this date.
+	if [ "${distroversionrh}" -lt "8" ] && [ "$(date +%s)" -lt "1719705600" ]; then
+		distrosupport="unsupported"
+	else
+		distrosupport="supported"
+	fi
 fi
 
 ## Glibc version
-# e.g: 1.17
-glibcversion="$(ldd --version | sed -n '1s/.* //p')"
+glibcversion="$(ldd --version | sed -n '1s/.* //p')" # e.g: 2.17
 
 ## tmux version
-# e.g: tmux 1.6
-if [ ! "$(command -V tmux 2> /dev/null)" ]; then
-	tmuxv="${red}NOT INSTALLED!${default}"
-	tmuxvdigit="0"
-else
-	tmuxvdigit="$(tmux -V | sed "s/tmux //" | sed -n '1 p' | tr -cd '[:digit:]')"
-	if [ "${tmuxvdigit}" -lt "16" ]; then
-		tmuxv="$(tmux -V) (>= 1.6 required for console log)"
-	else
-		tmuxv="$(tmux -V)"
-	fi
+if [ "$(command -V tmux 2> /dev/null)" ]; then
+	tmuxversion="$(tmux -V | awk '{print $2}')" # e.g: tmux 3.3
 fi
 
 if [ "$(command -V java 2> /dev/null)" ]; then
-	javaversion="$(java -version 2>&1 | grep "version")"
+	javaversion="$(java -version 2>&1 | grep "version")" # e.g: openjdk version "17.0.8.1" 2023-08-24
 fi
 
 if [ "$(command -v mono 2> /dev/null)" ]; then
-	monoversion="$(mono --version 2>&1 | grep -Po '(?<=version )\d')"
+	monoversion="$(mono --version 2>&1 | grep -Po '(?<=version )\d')" # e.g: 6
 fi
 
 if [ "$(command -v dotnet 2> /dev/null)" ]; then
-	dotnetversion="$(dotnet --list-runtimes | grep -E 'Microsoft\.NETCore\.App' | awk '{print $2}')"
+	dotnetversion="$(dotnet --list-runtimes | grep -E 'Microsoft\.NETCore\.App' | awk '{print $2}')" # e.g: 6.0.0
 fi
 
 ## Uptime
@@ -141,16 +134,16 @@ days="$((uptime / 60 / 60 / 24))"
 ### Performance information
 
 ## Average server load
-load="$(uptime | awk -F 'load average: ' '{ print $2 }')"
+load="$(uptime | awk -F 'load average: ' '{ print $2 }')" # e.g 0.01, 0.05, 0.11
 
 ## CPU information
-cpumodel="$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')"
+cpumodel="$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')" # e.g Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
 cpucores="$(awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo)"
-cpufreqency="$(awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')"
+cpufreqency="$(awk -F: '/cpu MHz/ {freq=$2} END {print freq}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')" # e.g 2394.503
 # CPU usage of the game server pid
 if [ -n "${gameserverpid}" ]; then
-	cpuused="$(ps --forest -o pcpu -g "${gameserverpid}" | awk '{s+=$1} END {print s}')"
-	cpuusedmhz="$(echo "${cpufreqency} * ${cpuused} / 100" | bc)"
+	cpuused="$(ps --forest -o pcpu -g "${gameserverpid}" | awk '{s+=$1} END {print s}')" # integer
+	cpuusedmhz="$(echo "${cpufreqency} * ${cpuused} / 100" | bc)"                        # integer
 fi
 
 ## Memory information
@@ -161,36 +154,35 @@ if [ "$(command -v numfmt 2> /dev/null)" ]; then
 	# Issue #2005 - Kernel 3.14+ contains MemAvailable which should be used. All others will be calculated.
 
 	# get the raw KB values of these fields.
-	physmemtotalkb="$(grep MemTotal /proc/meminfo | awk '{print $2}')"
-	physmemfreekb="$(grep ^MemFree /proc/meminfo | awk '{print $2}')"
-	physmembufferskb="$(grep ^Buffers /proc/meminfo | awk '{print $2}')"
-	physmemcachedkb="$(grep ^Cached /proc/meminfo | awk '{print $2}')"
-	physmemreclaimablekb="$(grep ^SReclaimable /proc/meminfo | awk '{print $2}')"
+	physmemtotalkb="$(grep MemTotal /proc/meminfo | awk '{print $2}')"            # integer
+	physmemfreekb="$(grep ^MemFree /proc/meminfo | awk '{print $2}')"             # integer
+	physmembufferskb="$(grep ^Buffers /proc/meminfo | awk '{print $2}')"          # integer
+	physmemcachedkb="$(grep ^Cached /proc/meminfo | awk '{print $2}')"            # integer
+	physmemreclaimablekb="$(grep ^SReclaimable /proc/meminfo | awk '{print $2}')" # integer
 
 	# check if MemAvailable Exists.
 	if grep -q ^MemAvailable /proc/meminfo; then
-		physmemactualfreekb="$(grep ^MemAvailable /proc/meminfo | awk '{print $2}')"
+		physmemactualfreekb="$(grep ^MemAvailable /proc/meminfo | awk '{print $2}')" # integer
 	else
-		physmemactualfreekb="$((physmemfreekb + physmembufferskb + physmemcachedkb))"
+		physmemactualfreekb="$((physmemfreekb + physmembufferskb + physmemcachedkb))" # integer
 	fi
 
 	# Available RAM and swap.
-	physmemtotalmb="$((physmemtotalkb / 1024))"
-	physmemtotal="$(numfmt --to=iec --from=iec --suffix=B "${physmemtotalkb}K")"
-	physmemfree="$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K")"
-	physmemused="$(numfmt --to=iec --from=iec --suffix=B "$((physmemtotalkb - physmemfreekb - physmembufferskb - physmemcachedkb - physmemreclaimablekb))K")"
-	physmemavailable="$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K")"
-	physmemcached="$(numfmt --to=iec --from=iec --suffix=B "$((physmemcachedkb + physmemreclaimablekb))K")"
-
-	swaptotal="$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapTotal /proc/meminfo | awk '{print $2}')K")"
-	swapfree="$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapFree /proc/meminfo | awk '{print $2}')K")"
-	swapused="$(numfmt --to=iec --from=iec --suffix=B "$(($(grep ^SwapTotal /proc/meminfo | awk '{print $2}') - $(grep ^SwapFree /proc/meminfo | awk '{print $2}')))K")"
+	physmemtotalmb="$(((physmemtotalkb + 512) / 1024))"                                                                                                       # integer                                                                                                     # integer
+	physmemtotalgb="$(((physmemtotalmb + 512) / 1024))"                                                                                                       # integer                                                                                                   # integer
+	physmemtotal="$(numfmt --to=iec --from=iec --suffix=B "${physmemtotalkb}K")"                                                                              # string
+	physmemfree="$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K")"                                                                          # string
+	physmemused="$(numfmt --to=iec --from=iec --suffix=B "$((physmemtotalkb - physmemfreekb - physmembufferskb - physmemcachedkb - physmemreclaimablekb))K")" # string
+	physmemavailable="$(numfmt --to=iec --from=iec --suffix=B "${physmemactualfreekb}K")"                                                                     # string
+	physmemcached="$(numfmt --to=iec --from=iec --suffix=B "$((physmemcachedkb + physmemreclaimablekb))K")"                                                   # string
+
+	swaptotal="$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapTotal /proc/meminfo | awk '{print $2}')K")"                                                          # string
+	swapfree="$(numfmt --to=iec --from=iec --suffix=B "$(grep ^SwapFree /proc/meminfo | awk '{print $2}')K")"                                                            # string
+	swapused="$(numfmt --to=iec --from=iec --suffix=B "$(($(grep ^SwapTotal /proc/meminfo | awk '{print $2}') - $(grep ^SwapFree /proc/meminfo | awk '{print $2}')))K")" # string
 	# RAM usage of the game server pid
-	# MB
 	if [ "${gameserverpid}" ]; then
-		memused="$(ps --forest -o rss -g "${gameserverpid}" | awk '{s+=$1} END {print s}' | awk '{$1/=1024;printf "%.0f",$1}{print $2}')"
-		# %
-		pmemused="$(ps --forest -o %mem -g "${gameserverpid}" | awk '{s+=$1} END {print s}')"
+		memusedmb="$(ps --forest -o rss -g "${gameserverpid}" | awk '{s+=$1} END {print s}' | awk '{$1/=1024;printf "%.0f",$1}{print $2}')" # integer
+		memusedpct="$(ps --forest -o %mem -g "${gameserverpid}" | awk '{s+=$1} END {print s}')"                                             # integer
 	fi
 else
 	# Older distros will need to use free.
@@ -203,32 +195,32 @@ else
 	else
 		humanreadable="-h"
 	fi
-	physmemtotalmb="$(free -m | awk '/Mem:/ {print $2}')"
-	physmemtotal="$(free ${humanreadable} | awk '/Mem:/ {print $2}')"
-	physmemfree="$(free ${humanreadable} | awk '/Mem:/ {print $4}')"
-	physmemused="$(free ${humanreadable} | awk '/Mem:/ {print $3}')"
+	physmemtotalmb="$(free -m | awk '/Mem:/ {print $2}')"             # string
+	physmemtotal="$(free ${humanreadable} | awk '/Mem:/ {print $2}')" # string
+	physmemfree="$(free ${humanreadable} | awk '/Mem:/ {print $4}')"  # string
+	physmemused="$(free ${humanreadable} | awk '/Mem:/ {print $3}')"  # string
 
 	oldfree="$(free ${humanreadable} | awk '/cache:/')"
 	if [ "${oldfree}" ]; then
 		physmemavailable="n/a"
 		physmemcached="n/a"
 	else
-		physmemavailable="$(free ${humanreadable} | awk '/Mem:/ {print $7}')"
-		physmemcached="$(free ${humanreadable} | awk '/Mem:/ {print $6}')"
+		physmemavailable="$(free ${humanreadable} | awk '/Mem:/ {print $7}')" # string
+		physmemcached="$(free ${humanreadable} | awk '/Mem:/ {print $6}')"    # string
 	fi
 
-	swaptotal="$(free ${humanreadable} | awk '/Swap:/ {print $2}')"
-	swapused="$(free ${humanreadable} | awk '/Swap:/ {print $3}')"
-	swapfree="$(free ${humanreadable} | awk '/Swap:/ {print $4}')"
+	swaptotal="$(free ${humanreadable} | awk '/Swap:/ {print $2}')" # string
+	swapused="$(free ${humanreadable} | awk '/Swap:/ {print $3}')"  # string
+	swapfree="$(free ${humanreadable} | awk '/Swap:/ {print $4}')"  # string
 fi
 
 ### Disk information
 
 ## Available disk space on the partition.
-filesystem="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $1}')"
-totalspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $2}')"
-usedspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $3}')"
-availspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $4}')"
+filesystem="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $1}')" # string e.g /dev/sda
+totalspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $2}')" # string e.g 20G
+usedspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $3}')"  # string e.g 15G
+availspace="$(LC_ALL=C df -hP "${rootdir}" | tail -n 1 | awk '{print $4}')" # string e.g 5G
 
 ## LinuxGSM used space total.
 rootdirdu="$(du -sh "${rootdir}" 2> /dev/null | awk '{print $1}')"
@@ -263,21 +255,21 @@ if [ -d "${backupdir}" ]; then
 	# If there are backups in backup dir.
 	if [ "$(find "${backupdir}" -name "*.tar.gz" | wc -l)" -ne "0" ]; then
 		# number of backups.
-		backupcount="$(find "${backupdir}"/*.tar.gz | wc -l)"
+		backupcount="$(find "${backupdir}"/*.tar.gz | wc -l)" # integer
 		# most recent backup.
-		lastbackup="$(ls -1t "${backupdir}"/*.tar.gz | head -1)"
+		lastbackup="$(ls -1t "${backupdir}"/*.tar.gz | head -1)" # string
 		# date of most recent backup.
-		lastbackupdate="$(date -r "${lastbackup}")"
+		lastbackupdate="$(date -r "${lastbackup}")" # string
 		# no of days since last backup.
-		lastbackupdaysago="$((($(date +'%s') - $(date -r "${lastbackup}" +'%s')) / 60 / 60 / 24))"
+		lastbackupdaysago="$((($(date +'%s') - $(date -r "${lastbackup}" +'%s')) / 60 / 60 / 24))" # integer
 		# size of most recent backup.
-		lastbackupsize="$(du -h "${lastbackup}" | awk '{print $1}')"
+		lastbackupsize="$(du -h "${lastbackup}" | awk '{print $1}')" # string
 	fi
 fi
 
 # Network Interface name
-netint=$(${ipcommand} -o addr | grep "${ip}" | awk '{print $2}')
-netlink=$(${ethtoolcommand} "${netint}" 2> /dev/null | grep Speed | awk '{print $2}')
+netint=$(${ipcommand} -o addr | grep "${ip}" | awk '{print $2}')                      # e.g eth0
+netlink=$(${ethtoolcommand} "${netint}" 2> /dev/null | grep Speed | awk '{print $2}') # e.g 1000Mb/s
 
 # Sets the SteamCMD glibc requirement if the game server requirement is less or not required.
 if [ "${appid}" ]; then
@@ -286,5 +278,5 @@ if [ "${appid}" ]; then
 	fi
 fi
 
-# Gather Port Info using ss
+# Gather Port Info using ss.
 ssinfo="$(ss -tuplwn)"

+ 33 - 18
lgsm/modules/info_game.sh

@@ -287,6 +287,8 @@ fn_info_game_ac() {
 fn_info_game_ark() {
 	if [ -f "${servercfgfullpath}" ]; then
 		fn_info_game_ini "adminpassword" "ServerAdminPassword"
+		fn_info_game_ini "maxplayers" "MaxPlayers"
+		fn_info_game_ini "rconport" "RCONPort"
 		fn_info_game_ini "servername" "SessionName"
 		fn_info_game_ini "serverpassword" "ServerPassword"
 	fi
@@ -487,7 +489,7 @@ fn_info_game_kf() {
 	if [ -f "${servercfgfullpath}" ]; then
 		fn_info_game_ini "adminpassword" "AdminPassword"
 		fn_info_game_ini "httpenabled" "bEnabled"
-		fn_info_game_ini "httppassword" "httppasswordword"
+		fn_info_game_ini "httppassword" "AdminPassword"
 		fn_info_game_ini "httpport" "ListenPort"
 		fn_info_game_ini "httpuser" "AdminName"
 		fn_info_game_ini "lanport" "LANServerPort"
@@ -523,11 +525,11 @@ fn_info_game_kf2() {
 	if [ -f "${servercfgfullpath}" ]; then
 		fn_info_game_ini "adminpassword" "AdminPassword"
 		fn_info_game_ini "httpport" "ListenPort" "${servercfgdir}/KFWeb.ini"
-		fn_info_game_ini "port" "Port"
+		fn_info_game_ini "port" "Port" "${servercfgdir}/LinuxServer-KFEngine.ini"
 		fn_info_game_ini "servername" "ServerName"
 		fn_info_game_ini "serverpassword" "GamePassword"
-		fn_info_game_ini "httpenabled" "bEnabled"
-		fn_info_game_ini "httppassword" "httppasswordword"
+		fn_info_game_ini "httpenabled" "bEnabled" "${servercfgdir}/KFWeb.ini"
+		fn_info_game_ini "httppassword" "AdminPassword"
 	fi
 	adminpassword="${adminpassword:-"NOT SET"}"
 	defaultmap="${defaultmap:-"NOT SET"}"
@@ -1683,6 +1685,25 @@ fn_info_game_q3() {
 	defaultmap="${defaultmap:-"NOT SET"}"
 }
 
+# Config Type: QuakeC
+# Comment: // or /* */
+# fn_info_game_quakec "SERVERNAME"
+# Filetype: cfg
+fn_info_game_q4() {
+	if [ -f "${servercfgfullpath}" ]; then
+		fn_info_game_quakec "maxplayers" "sv_maxclients"
+		fn_info_game_quakec "rconpassword" "net_serverRemoteConsolePassword"
+		fn_info_game_quakec "servername" "si_name"
+		fn_info_game_quakec "serverpassword" "g_password"
+	fi
+	maxplayers="${maxplayers:-"0"}"
+	rconpassword="${rconpassword:-"NOT SET"}"
+	servername="${servername:-"NOT SET"}"
+	port="${port:-"0"}"
+	queryport="${port}"
+	defaultmap="${defaultmap:-"NOT SET"}"
+}
+
 # Config Type: QuakeC
 # Comment: // or /* */
 # Example: set sv_hostname "SERVERNAME"
@@ -1730,7 +1751,7 @@ fn_info_game_ro() {
 	if [ -f "${servercfgfullpath}" ]; then
 		fn_info_game_ini "adminpassword" "AdminPassword"
 		fn_info_game_ini "httpenabled" "bEnabled"
-		fn_info_game_ini "httppassword" "httppasswordword"
+		fn_info_game_ini "httppassword" "AdminPassword"
 		fn_info_game_ini "httpport" "ListenPort"
 		fn_info_game_ini "httpuser" "AdminName"
 		fn_info_game_ini "lanport" "LANServerPort"
@@ -1830,14 +1851,7 @@ fn_info_game_rw() {
 # example: hostname "SERVERNAME"
 # filetypes: cfg
 fn_info_game_samp() {
-	# Config
-	if [ ! -f "${servercfgfullpath}" ]; then
-		servername="unnamed server"
-		rconpassword="${unavailable}"
-		port="7777"
-		rconport="${port}"
-		maxplayers="50"
-	else
+	if [ -f "${servercfgfullpath}" ]; then
 		servername=$(grep "hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/hostname//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]*$//')
 		port=$(grep "port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
@@ -2031,14 +2045,15 @@ fn_info_game_source() {
 
 fn_info_game_spark() {
 	defaultmap="${defaultmap:-"NOT SET"}"
+	httppassword="${httppassword:-"NOT SET"}"
+	httpport="${httpport:-"0"}"
+	httpuser="${httpuser:-"NOT SET"}"
 	maxplayers="${maxplayers:-"0"}"
+	modserverport=${modserverport:-"0"}
 	port="${port:-"0"}"
 	queryport="$((port + 1))"
 	servername="${servername:-"NOT SET"}"
 	serverpassword="${serverpassword:-"NOT SET"}"
-	httpuser="${httpuser:-"NOT SET"}"
-	httppassword="${httppassword:-"NOT SET"}"
-	httpport="${httpport:-"0"}"
 }
 
 # Config Type: Custom (key-value pairs)
@@ -2272,8 +2287,6 @@ elif [ "${shortname}" == "bt" ]; then
 	fn_info_game_bt
 elif [ "${shortname}" == "btl" ]; then
 	fn_info_game_btl
-elif [ "${shortname}" == "cd" ]; then
-	fn_info_game_cd
 elif [ "${shortname}" == "ck" ]; then
 	fn_info_game_ck
 elif [ "${shortname}" == "cmw" ]; then
@@ -2352,6 +2365,8 @@ elif [ "${shortname}" == "q2" ]; then
 	fn_info_game_q2
 elif [ "${shortname}" == "q3" ]; then
 	fn_info_game_q3
+elif [ "${shortname}" == "q4" ]; then
+	fn_info_game_q4
 elif [ "${shortname}" == "ql" ]; then
 	fn_info_game_ql
 elif [ "${shortname}" == "qw" ]; then

+ 23 - 8
lgsm/modules/info_messages.sh

@@ -95,7 +95,7 @@ fn_info_messages_distro() {
 		echo -e "${lightblue}Hostname:\t${default}${HOSTNAME}"
 		echo -e "${lightblue}Environment:\t${default}${virtualenvironment}"
 		echo -e "${lightblue}Uptime:\t${default}${days}d, ${hours}h, ${minutes}m"
-		echo -e "${lightblue}tmux:\t${default}${tmuxv}"
+		echo -e "${lightblue}tmux:\t${default}${tmuxversion}"
 		echo -e "${lightblue}glibc:\t${default}${glibcversion}"
 		if [ -n "${javaram}" ]; then
 			echo -e "${lightblue}Java:\t${default}${javaversion}"
@@ -191,10 +191,10 @@ fn_info_messages_gameserver_resource() {
 			else
 				echo -e "${lightblue}CPU Used:\t${red}unknown${default}"
 			fi
-			if [ -n "${memused}" ]; then
-				echo -e "${lightblue}Mem Used:\t${default}${pmemused}%\t${memused}MB${default}"
+			if [ -n "${memusedmb}" ]; then
+				echo -e "${lightblue}Mem Used:\t${default}${memusedpct}%\t${memusedmb}MB${default}"
 			else
-				echo -e "${lightblue}Mem Used:\t${default}${pmemused}\t${red}unknown${default}"
+				echo -e "${lightblue}Mem Used:\t${default}${memusedpct}\t${red}unknown${default}"
 			fi
 		else
 			echo -e "${lightblue}CPU Used:\t${default}0%${default}"
@@ -663,7 +663,7 @@ fn_info_messages_ports_edit() {
 
 	startparameterslocation="${red}UNKNOWN${default}"
 	# engines/games that require editing in the config file.
-	local ports_edit_array=("ac" "arma3" "armar" "bo" "bt" "cd" "ct" "dst" "eco" "idtech2" "idtech3" "idtech3_ql" "jc2" "jc3" "lwjgl2" "mcb" "nec" "pc" "pc2" "prism3d" "pz" "qw" "refractor" "renderware" "rw" "sb" "sdtd" "st" "stn" "ts3" "tw" "terraria" "unreal" "unreal2" "unreal3" "vints" "wurm")
+	local ports_edit_array=("ac" "arma3" "armar" "bo" "bt" "ct" "dst" "eco" "idtech2" "idtech3" "idtech3_ql" "jc2" "jc3" "lwjgl2" "mcb" "nec" "pc" "pc2" "prism3d" "pz" "qw" "refractor" "renderware" "rw" "sb" "sdtd" "st" "stn" "ts3" "tw" "terraria" "unreal" "unreal2" "unreal3" "vints" "wurm")
 	for port_edit in "${ports_edit_array[@]}"; do
 		if [ "${shortname}" == "ut3" ]; then
 			startparameterslocation="${servercfgdir}/UTWeb.ini"
@@ -674,7 +674,7 @@ fn_info_messages_ports_edit() {
 		fi
 	done
 	# engines/games that require editing the start parameters.
-	local ports_edit_array=("av" "ck" "col" "cs2" "fctr" "goldsrc" "hcu" "hw" "iw3.0" "ioquake3" "qfusion" "rust" "scpsl" "scpslsm" "sol" "spark" "source" "unreal4" "arma3" "dayz" "unt" "vh")
+	local ports_edit_array=("av" "ck" "col" "cs2" "fctr" "goldsrc" "hcu" "hw" "iw3.0" "ioquake3" "qfusion" "rust" "scpsl" "scpslsm" "sf" "sol" "spark" "source" "unreal4" "arma3" "dayz" "unt" "vh")
 	for port_edit in "${ports_edit_array[@]}"; do
 		if [ "${engine}" == "${port_edit}" ] || [ "${gamename}" == "${port_edit}" ] || [ "${shortname}" == "${port_edit}" ]; then
 			startparameterslocation="${configdirserver}"
@@ -692,6 +692,10 @@ fn_info_messages_ports() {
 		portcommand="ss -tuplwn | grep AvorionServer"
 	elif [ "${shortname}" == "bf1942" ]; then
 		portcommand="ss -tuplwn | grep bf1942_lnxded"
+	elif [ "${shortname}" == "dayz" ]; then
+		portcommand="ss -tuplwn | grep enfMain"
+	elif [ "${shortname}" == "q4" ]; then
+		portcommand="ss -tuplwn | grep q4ded.x86"
 	elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "nec" ] || [ "${shortname}" == "pmc" ] || [ "${shortname}" == "vpmc" ] || [ "${shortname}" == "wmc" ]; then
 		portcommand="ss -tuplwn | grep java"
 	elif [ "${shortname}" == "terraria" ]; then
@@ -1284,6 +1288,7 @@ fn_info_messages_q2() {
 	{
 		fn_port "header"
 		fn_port "Game" port udp
+		fn_port "Query" queryport udp
 	} | column -s $'\t' -t
 }
 
@@ -1291,6 +1296,15 @@ fn_info_messages_q3() {
 	{
 		fn_port "header"
 		fn_port "Game" port udp
+		fn_port "Query" queryport udp
+	} | column -s $'\t' -t
+}
+
+fn_info_messages_q4() {
+	{
+		fn_port "header"
+		fn_port "Game" port udp
+		fn_port "Query" queryport udp
 	} | column -s $'\t' -t
 }
 
@@ -1466,6 +1480,7 @@ fn_info_messages_spark() {
 		fn_port "header"
 		fn_port "Game" port udp
 		fn_port "Query" queryport udp
+		fn_port "Mod Server" modserverport tcp
 		fn_port "Web Interface" httpport tcp
 	} | column -s $'\t' -t
 	echo -e ""
@@ -1705,8 +1720,6 @@ fn_info_messages_select_engine() {
 		fn_info_messages_bt
 	elif [ "${shortname}" == "btl" ]; then
 		fn_info_messages_btl
-	elif [ "${shortname}" == "cd" ]; then
-		fn_info_messages_cd
 	elif [ "${shortname}" == "ck" ]; then
 		fn_info_messages_ck
 	elif [ "${shortname}" == "cs2" ]; then
@@ -1791,6 +1804,8 @@ fn_info_messages_select_engine() {
 		fn_info_messages_q2
 	elif [ "${shortname}" == "q3" ]; then
 		fn_info_messages_q3
+	elif [ "${shortname}" == "q4" ]; then
+		fn_info_messages_q3
 	elif [ "${shortname}" == "ql" ]; then
 		fn_info_messages_ql
 	elif [ "${shortname}" == "qw" ]; then

+ 12 - 6
lgsm/modules/info_stats.sh

@@ -54,7 +54,10 @@ uuidhardware=$(cat "/etc/machine-id")
 # nearest 100Mhz.
 cpuusedmhzroundup="$(((cpuusedmhz + 99) / 100 * 100))"
 # nearest 100MB
-memusedroundup="$(((memused + 99) / 100 * 100))"
+memusedmbroundup="$(((memusedmb + 99) / 100 * 100))"
+
+# Convert any commas to dots.
+physmemtotal="${physmemtotal//,/.}"
 
 apisecret="A-OzP02TSMWt4_vHi6ZpUw"
 measurementid="G-0CR8V7EMT5"
@@ -66,22 +69,25 @@ payload="{
 		{
 		\"name\": \"LinuxGSM\",
 		\"params\": {
-			\"cpuusedmhzroundup\": \"${cpuusedmhzroundup}MHz\",
+			\"cpuusedmhzroundup\": \"${cpuusedmhzroundup}\",
 			\"diskused\": \"${serverfilesdu}\",
 			\"distro\": \"${distroname}\",
 			\"game\": \"${gamename}\",
-			\"memusedroundup\": \"${memusedroundup}MB\",
-			\"ramused\": \"${memusedroundup}MB\",
+			\"memusedmbroundup\": \"${memusedmbroundup}\",
+			\"ramused\": \"${memusedmbroundup}\",
 			\"servercpu\": \"${cpumodel} ${cpucores} cores\",
 			\"servercpufreq\": \"${cpufreqency} x${cpucores}\",
 			\"serverdisk\": \"${totalspace}\",
 			\"serverfilesdu\": \"${serverfilesdu}\",
 			\"serverram\": \"${physmemtotal}\",
+			\"serverramgb\": \"${physmemtotalgb}\",
 			\"uuidhardware\": \"${uuidhardware}\",
 			\"uuidinstall\": \"${uuidinstall}\",
 			\"uuidinstance\": \"${uuidinstance}\",
 			\"version\": \"${version}\",
-			\"virtualenvironment\": \"${virtualenvironment}\"
+			\"virtualenvironment\": \"${virtualenvironment}\",
+			\"tmuxversion\": \"${tmuxversion}\",
+			\"java\": \"${javaversion}\"
 			}
 		}
 	]
@@ -156,7 +162,7 @@ fn_script_log_info "* uuid-hardware: ${uuidhardware}"
 fn_script_log_info "* Game Name: ${gamename}"
 fn_script_log_info "* Distro Name: ${distroname}"
 fn_script_log_info "* Game Server CPU Used: ${cpuusedmhzroundup}MHz"
-fn_script_log_info "* Game Server RAM Used: ${memusedroundup}MB"
+fn_script_log_info "* Game Server RAM Used: ${memusedmbroundup}MB"
 fn_script_log_info "* Game Server Disk Used: ${serverfilesdu}"
 fn_script_log_info "* Server CPU Model: ${cpumodel}"
 fn_script_log_info "* Server CPU Frequency: ${cpufreqency}"

+ 8 - 8
lgsm/modules/install_config.sh

@@ -245,7 +245,7 @@ elif [ "${shortname}" == "bt" ]; then
 	fn_list_config_locations
 elif [ "${shortname}" == "btl" ]; then
 	fn_check_cfgdir
-	array_configs+=(DefaultGame.ini)
+	array_configs+=(Game.ini)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
@@ -286,12 +286,6 @@ elif [ "${shortname}" == "bmdm" ]; then
 	fn_default_config_remote
 	fn_set_config_vars
 	fn_list_config_locations
-elif [ "${shortname}" == "cd" ]; then
-	array_configs+=(properties.json)
-	fn_fetch_default_config
-	fn_default_config_remote
-	fn_set_config_vars
-	fn_list_config_locations
 elif [ "${shortname}" == "ck" ]; then
 	array_configs+=(ServerConfig.json)
 	fn_fetch_default_config
@@ -484,7 +478,7 @@ elif [ "${shortname}" == "hldms" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "ohd" ]; then
-	array_configs+=(Game.ini)
+	array_configs+=(Admins.cfg Engine.ini Game.ini MapCycle.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
@@ -640,6 +634,12 @@ elif [ "${shortname}" == "q2" ]; then
 	fn_set_config_vars
 	fn_list_config_locations
 elif [ "${shortname}" == "q3" ]; then
+	array_configs+=(server.cfg)
+	fn_fetch_default_configs
+	fn_default_config_remote
+	fn_set_config_vars
+	fn_list_config_locations
+elif [ "${shortname}" == "q4" ]; then
 	array_configs+=(server.cfg)
 	fn_fetch_default_config
 	fn_default_config_remote

+ 8 - 1
lgsm/modules/install_server_files.sh

@@ -106,6 +106,13 @@ fn_install_server_files() {
 		chmodx="nochmodx" run="norun"
 		force="noforce"
 		md5="b0e26d8919fe9313fb9d8ded2360f3db"
+	elif [ "${shortname}" == "q4" ]; then
+		remote_fileurl="http://linuxgsm.download/Quake4/quake4-1.4.2-x86-linuxded.tar.xz"
+		local_filedir="${tmpdir}"
+		local_filename="quake4-1.4.2-x86-linuxded.tar.xz"
+		chmodx="nochmodx" run="norun"
+		force="noforce"
+		md5="afe30b44f23c8ae2ce6f0f464473d8ba"
 	elif [ "${shortname}" == "qw" ]; then
 		remote_fileurl="http://linuxgsm.download/QuakeWorld/nquake.server.linux.190506.full.tar.xz"
 		local_filedir="${tmpdir}"
@@ -240,7 +247,7 @@ elif [ "${shortname}" == "vints" ]; then
 elif [ "${shortname}" == "ut99" ]; then
 	fn_install_server_files
 	update_ut99.sh
-elif [ -z "${appid}" ] || [ "${shortname}" == "ahl" ] || [ "${shortname}" == "bb" ] || [ "${shortname}" == "ns" ] || [ "${shortname}" == "sfc" ] || [ "${shortname}" == "ts" ] || [ "${shortname}" == "vs" ] || [ "${shortname}" == "zmr" ]; then
+elif [ -z "${appid}" ] || [ "${shortname}" == "ahl" ] || [ "${shortname}" == "bb" ] || [ "${shortname}" == "q4" ] || [ "${shortname}" == "ns" ] || [ "${shortname}" == "sfc" ] || [ "${shortname}" == "ts" ] || [ "${shortname}" == "vs" ] || [ "${shortname}" == "zmr" ]; then
 	if [ "${shortname}" == "ut" ]; then
 		install_eula.sh
 	fi

+ 1 - 1
lgsm/modules/mods_list.sh

@@ -200,7 +200,7 @@ mod_info_hwoxide=(MOD "hwoxide" "Oxide for Hurtworld" "${oxidehurtworldlatestlin
 mod_info_sdtdoxide=(MOD "sdtdoxide" "Oxide for 7 Days To Die" "${oxidesdtdlatestlink}" "Oxide.SevenDaysToDie.zip" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "7 Days To Die;" "NOTGAMES" "https://umod.org/games/7-days-to-die" "Allows for the use of plugins")
 
 # ValheimPlus
-mod_info_valheimplus=(MOD "valheimplus" "Valheim PLUS" "${valeimpluslatestlink}" "ValheimPlus.tar.gz" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://github.com/valheimPlus/ValheimPlus" "Mod to improve Valheim gameplay")
+mod_info_valheimplus=(MOD "valheimplus" "Valheim PLUS" "${valeimpluslatestlink}" "ValheimPlus.tar.gz" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://github.com/Grantapher/ValheimPlus.git" "Mod to improve Valheim gameplay")
 
 # BepInEx Valheim
 mod_info_bepinexvh=(MOD "bepinexvh" "BepInEx Valheim" "${bepinexvhlatestlink}" "denikson-BepInExPack_Valheim.zip" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Valheim;" "NOTGAMES" "https://valheim.thunderstore.io/package/denikson/BepInExPack_Valheim/" "Unity / XNA game patcher and plugin framework")

+ 1 - 1
linuxgsm.sh

@@ -24,7 +24,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="v23.6.2"
+version="v23.7.0"
 shortname="core"
 gameservername="core"
 commandname="CORE"