Преглед изворни кода

Merged release/170212 into master

Daniel Gibbs пре 9 година
родитељ
комит
8cf81212a2

+ 2 - 2
ARKSurvivalEvolved/arkserver

@@ -104,14 +104,14 @@ executabledir="${systemdir}/Binaries/Linux"
 executable="./ShooterGameServer"
 servercfgdir="${systemdir}/Saved/Config/LinuxServer"
 servercfg="GameUserSettings.ini"
+servercfgdefault="GameUserSettings.ini"
 servercfgfullpath="${servercfgdir}/${servercfg}"
-servercfgdefault="${servercfgdir}/GameUserSettings.ini"
 
 ## Backup Directory
 backupdir="${rootdir}/backups"
 
 ## Logging Directories
-gamelogdir="${systemdir}/logs"
+gamelogdir="${systemdir}/Saved/Logs"
 scriptlogdir="${rootdir}/log/script"
 consolelogdir="${rootdir}/log/console"
 scriptlog="${scriptlogdir}/${servicename}-script.log"

+ 3 - 3
CounterStrikeGlobalOffensive/csgoserver

@@ -32,8 +32,8 @@ version="170128"
 # Deathmatch				1			2
 gametype="0"
 gamemode="0"
-defaultmap="de_dust2"
-mapgroup="random_classic"
+defaultmap="de_mirage"
+mapgroup="mg_active"
 maxplayers="16"
 tickrate="64"
 port="27015"
@@ -220,4 +220,4 @@ fi
 core_dl.sh
 core_functions.sh
 getopt=$1
-core_getopt.sh
+core_getopt.sh

+ 1 - 1
GarrysMod/gmodserver

@@ -53,7 +53,7 @@ parms="-game garrysmod -strictportbind -ip ${ip} -port ${port} -tickrate ${tickr
 #### LinuxGSM Settings ####
 
 ## Notification Alerts
-# (on|off]
+# (on|off)
 # Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Email
 emailalert="off"
 email="email@example.com"

+ 0 - 1
Minecraft/mcserver

@@ -91,7 +91,6 @@ servercfg="server.properties"
 servercfgdefault="server.properties"
 servercfgdir="${filesdir}"
 servercfgfullpath="${servercfgdir}/${servercfg}"
-servercfgdefault="${servercfgdir}/lgsm-default.ini"
 
 ## Backup Directory
 backupdir="${rootdir}/backups"

+ 5 - 2
MultiTheftAuto/mtaserver

@@ -1,7 +1,10 @@
 #!/bin/bash
-# Multi Theft Auto
-# Server Management Script
+# Project: Game Server Managers - LinuxGSM
 # Author: Daniel Gibbs
+# License: MIT License, Copyright (c) 2017 Daniel Gibbs
+# Purpose: Multi Theft Auto | Server Management Script
+# Contributors: https://github.com/GameServerManagers/LinuxGSM/graphs/contributors
+# Documentation: https://github.com/GameServerManagers/LinuxGSM/wiki
 # Website: https://gameservermanagers.com
 if [ -f ".dev-debug" ]; then
 	exec 5>dev-debug.log

+ 197 - 0
TowerUnite/tuserver

@@ -0,0 +1,197 @@
+#!/bin/bash
+# Project: Game Server Managers - LinuxGSM
+# Author: Daniel Gibbs
+# License: MIT License, Copyright (c) 2017 Daniel Gibbs
+# Purpose: Tower Unite | Server Management Script
+# Contributors: https://github.com/GameServerManagers/LinuxGSM/graphs/contributors
+# Documentation: https://github.com/GameServerManagers/LinuxGSM/wiki
+# Website: https://gameservermanagers.com
+
+# Debugging
+if [ -f ".dev-debug" ]; then
+	exec 5>dev-debug.log
+	BASH_XTRACEFD="5"
+	set -x
+fi
+
+version="170128"
+
+##########################
+######## Settings ########
+##########################
+
+#### Server Settings ####
+
+## Server Start Settings | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters
+port="7777"
+queryport="27015"
+ip="0.0.0.0"
+
+## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters
+fn_parms(){
+parms="-log -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -TowerServerINI=${servicename}.ini"
+}
+
+#### LinuxGSM Settings ####
+
+## Notification Alerts
+# (on|off)
+# Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Email
+emailalert="off"
+email="email@example.com"
+emailfrom=""
+
+# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+channeltag=""
+
+## Updating | https://github.com/GameServerManagers/LinuxGSM/wiki/Update
+updateonstart="off"
+
+## Backup | https://github.com/GameServerManagers/LinuxGSM/wiki/Backup
+maxbackups="4"
+maxbackupdays="30"
+stoponbackup="on"
+
+## Logging | https://github.com/GameServerManagers/LinuxGSM/wiki/Logging
+consolelogging="on"
+logdays="7"
+
+#### LinuxGSM Advanced Settings ####
+
+## SteamCMD Settings
+# Server appid
+appid="439660"
+# Steam App Branch Select
+# Allows to opt into the various Steam app branches. Default branch is "".
+# Example: "-beta latest_experimental"
+branch=""
+
+## Github Branch Select
+# Allows for the use of different function files
+# from a different repo and/or branch.
+githubuser="GameServerManagers"
+githubrepo="LinuxGSM"
+githubbranch="master"
+
+## LinuxGSM Server Details
+# Do not edit
+gamename="Tower Unite"
+engine="unreal4"
+
+## Service Name | https://github.com/GameServerManagers/LinuxGSM/wiki/Multiple-Servers
+servicename="tu-server"
+
+#### Directories ####
+# Edit with care
+
+## Work Directories
+rootdir="$(dirname $(readlink -f "${BASH_SOURCE[0]}"))"
+selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
+lockselfname=".${servicename}.lock"
+lgsmdir="${rootdir}/lgsm"
+functionsdir="${lgsmdir}/functions"
+libdir="${lgsmdir}/lib"
+tmpdir="${lgsmdir}/tmp"
+filesdir="${rootdir}/serverfiles"
+
+## Server Specific Directories
+systemdir="${filesdir}/Tower"
+executabledir="${systemdir}/Binaries/Linux"
+executable="./TowerServer-Linux-Shipping"
+servercfgdir="${systemdir}/Binaries/Linux"
+servercfg="${servicename}.ini"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+servercfgdefault="TowerServer.ini"
+
+## Backup Directory
+backupdir="${rootdir}/backups"
+
+## Logging Directories
+gamelogdir="${systemdir}/Saved/Logs"
+scriptlogdir="${rootdir}/log/script"
+consolelogdir="${rootdir}/log/console"
+scriptlog="${scriptlogdir}/${servicename}-script.log"
+consolelog="${consolelogdir}/${servicename}-console.log"
+emaillog="${scriptlogdir}/${servicename}-email.log"
+
+## Logs Naming
+scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
+consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"
+
+########################
+######## Script ########
+###### Do not edit #####
+########################
+
+# Fetches core_dl for file downloads
+fn_fetch_core_dl(){
+github_file_url_dir="lgsm/functions"
+github_file_url_name="${functionfile}"
+filedir="${functionsdir}"
+filename="${github_file_url_name}"
+githuburl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${github_file_url_name}"
+# If the file is missing, then download
+if [ ! -f "${filedir}/${filename}" ]; then
+	if [ ! -d "${filedir}" ]; then
+		mkdir -p "${filedir}"
+	fi
+	echo -e "    fetching ${filename}...\c"
+	# Check curl exists and use available path
+	curlpaths="$(command -v curl 2>/dev/null) $(which curl >/dev/null 2>&1) /usr/bin/curl /bin/curl /usr/sbin/curl /sbin/curl)"
+	for curlcmd in ${curlpaths}
+	do
+		if [ -x "${curlcmd}" ]; then
+			break
+		fi
+	done
+	# If curl exists download file
+	if [ "$(basename ${curlcmd})" == "curl" ]; then
+		curlfetch=$(${curlcmd} -s --fail -o "${filedir}/${filename}" "${githuburl}" 2>&1)
+		if [ $? -ne 0 ]; then
+			echo -e "\e[0;31mFAIL\e[0m\n"
+			echo "${curlfetch}"
+			echo -e "${githuburl}\n"
+			exit 1
+		else
+			echo -e "\e[0;32mOK\e[0m"
+		fi
+	else
+		echo -e "\e[0;31mFAIL\e[0m\n"
+		echo "Curl is not installed!"
+		echo -e ""
+		exit 1
+	fi
+	chmod +x "${filedir}/${filename}"
+fi
+source "${filedir}/${filename}"
+}
+
+core_dl.sh(){
+# Functions are defined in core_functions.sh.
+functionfile="${FUNCNAME}"
+fn_fetch_core_dl
+}
+
+core_functions.sh(){
+# Functions are defined in core_functions.sh.
+functionfile="${FUNCNAME}"
+fn_fetch_core_dl
+}
+
+# Prevent from running this script as root.
+if [ "$(whoami)" = "root" ]; then
+	if [ ! -f "${functionsdir}/core_functions.sh" ]||[ ! -f "${functionsdir}/check_root.sh" ]||[ ! -f "${functionsdir}/core_messages.sh" ]||[ ! -f "${functionsdir}/core_exit.sh" ]; then
+		echo "[ FAIL ] Do NOT run this script as root!"
+		exit 1
+	else
+		core_functions.sh
+		check_root.sh
+	fi
+fi
+
+core_dl.sh
+core_functions.sh
+getopt=$1
+core_getopt.sh

+ 2 - 2
lgsm/functions/check_executable.sh

@@ -1,8 +1,8 @@
 #!/bin/bash
-# LGSM check_system_dir.sh function
+# LGSM check_executable.sh function
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
-# Description: Checks if systemdir is accessible.
+# Description: Checks if executable exists.
 
 local commandname="CHECK"
 local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"

+ 6 - 2
lgsm/functions/check_system_requirements.sh

@@ -11,12 +11,16 @@ local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 info_distro.sh
 
 # RAM requirements in megabytes for each game or engine.
-if [ "${gamename}" == "Rust" ]; then
+
+if [ "${gamename}" == "ARK: Survival Evolved" ]; then
 	ramrequirementmb="4000"
-	ramrequirementgb="4"
+	ramrequirementgb="1"
 elif [ "${gamename}" == "ARMA 3" ]; then
 	ramrequirementmb="1000"
 	ramrequirementgb="1"
+elif [ "${gamename}" == "Rust" ]; then
+	ramrequirementmb="4000"
+	ramrequirementgb="4"
 elif [ "${gamename}" == "Minecraft" ]; then
 	ramrequirementmb="1000"
 	ramrequirementgb="1"

+ 3 - 0
lgsm/functions/command_debug.sh

@@ -106,6 +106,9 @@ else
 	${executable} ${parms}
 fi
 
+fn_print_dots "Stopping debug"
+sleep 1
+fn_print_ok_nl "Stopping debug"
 # remove trap.
 trap - INT
 core_exit.sh

+ 16 - 0
lgsm/functions/command_details.sh

@@ -675,6 +675,20 @@ fn_details_terraria(){
 	} | column -s $'\t' -t
 }
 
+fn_details_towerunite(){
+	echo -e "netstat -atunp | grep TowerServer"
+	echo -e ""
+	{
+		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+		echo -e "> Game\tINBOUND\t${port}\ttcp"
+		# Don't do arithmetics if ever the port wasn't a numeric value
+		if [ "${port}" -eq "${port}" ]; then 
+			echo -e "> Steam\tINBOUND\t$((port+1))\tudp"
+		fi
+		echo -e "> Query\tINBOUND\t${queryport}\tudp"
+	} | column -s $'\t' -t
+}
+
 fn_details_unreal(){
 	echo -e "netstat -atunp | grep ucc-bin"
 	echo -e ""
@@ -824,6 +838,8 @@ fn_display_details() {
 		fn_details_quakelive
 	elif [ "${gamename}" == "TeamSpeak 3" ]; then
 		fn_details_teamspeak3
+	elif [ "${gamename}" == "Tower Unite" ]; then
+		fn_details_towerunite
 	elif [ "${gamename}" == "Multi Theft Auto" ]; then
 		fn_details_mta    
 	elif [ "${gamename}" == "Mumble" ]; then

+ 1 - 1
lgsm/functions/command_install.sh

@@ -28,7 +28,7 @@ fi
 
 # Configuration
 install_config.sh
-if [ "${gamename}" == "Counter-Strike: Global Offensive" ]||[ "${gamename}" == "Team Fortress 2" ]||[ "${gamename}" == "BrainBread 2" ]; then
+if [ "${gamename}" == "BrainBread 2" ]||[ "${gamename}" == "Black Mesa: Deathmatch" ]||[ "${gamename}" == "Counter-Strike: Global Offensive" ]||[ "${gamename}" == "Empires Mod" ]||[ "${gamename}" == "Garry’s Mod" ]||[ "${gamename}" == "No more Room in Hell" ]||[ "${gamename}" == "Team Fortress 2" ]||[ "${gamename}" == "Tower Unite" ]; then
 	install_gslt.sh
 elif [ "${gamename}" == "Don't Starve Together" ]; then
 	install_dst_token.sh

+ 1 - 1
lgsm/functions/command_mods_install.sh

@@ -52,7 +52,7 @@ done
 
 # If no mods are available for a specific game
 if [ -z "${compatiblemodslist}" ]; then
-	fn_print_fail "No mods are currently available for ${gamename}."
+	fn_print_fail_nl "No mods are currently available for ${gamename}."
 	fn_script_log_info "No mods are currently available for ${gamename}."
 	core_exit.sh
 fi

+ 45 - 46
lgsm/functions/command_stop.sh

@@ -58,7 +58,7 @@ fn_stop_graceful_goldsource(){
 	fn_stop_tmux
 }
 
-fn_stop_graceful_factorio(){
+fn_stop_graceful_ctrlc(){
 	fn_print_dots "Graceful: console CTRL+c"
 	fn_script_log_info "Graceful: console CTRL+c"
 	# sends quit
@@ -221,8 +221,8 @@ fn_stop_graceful_mta(){
 fn_stop_graceful_select(){
 	if [ "${gamename}" == "7 Days To Die" ]; then
 		fn_stop_graceful_sdtd
-	elif [ "${gamename}" == "Factorio" ]; then
-		fn_stop_graceful_factorio
+	elif [ "${gamename}" == "Factorio" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]; then
+		fn_stop_graceful_ctrlc
 	elif [ "${engine}" == "source" ]; then
 		fn_stop_graceful_source
 	elif [ "${engine}" == "goldsource" ]; then
@@ -237,45 +237,45 @@ fn_stop_graceful_select(){
 }
 
 fn_stop_ark(){
-		maxpiditer=15 # The maximum number of times to check if the ark pid has closed gracefully.
-		info_config.sh
-		if [ -z "${queryport}" ]; then
-				fn_print_warn "No queryport found using info_config.sh"
-				fn_script_log_warn "No queryport found using info_config.sh"
-				userconfigfile="${filesdir}"
-				userconfigfile+="/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini"
-				queryport=$(grep ^QueryPort= ${userconfigfile} | cut -d= -f2 | sed "s/[^[:digit:].*].*//g")
-		fi
-		if [ -z "${queryport}" ]; then
-				fn_print_warn "No queryport found in the GameUsersettings.ini file"
-				fn_script_log_warn "No queryport found in the GameUsersettings.ini file"
-				return
-		fi
+	maxpiditer=15 # The maximum number of times to check if the ark pid has closed gracefully.
+	info_config.sh
+	if [ -z "${queryport}" ]; then
+		fn_print_warn "No queryport found using info_config.sh"
+		fn_script_log_warn "No queryport found using info_config.sh"
+		userconfigfile="${filesdir}"
+		userconfigfile+="/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini"
+		queryport=$(grep ^QueryPort= ${userconfigfile} | cut -d= -f2 | sed "s/[^[:digit:].*].*//g")
+	fi
+	if [ -z "${queryport}" ]; then
+		fn_print_warn "No queryport found in the GameUsersettings.ini file"
+		fn_script_log_warn "No queryport found in the GameUsersettings.ini file"
+		return
+	fi
 
-		if [[ ${#queryport} -gt 0 ]] ; then
-				for (( pidcheck=0 ; pidcheck < ${maxpiditer} ; pidcheck++ )) ; do
-						pid=$(netstat -nap 2>/dev/null | grep ^udp[[:space:]] |\
-								grep :${queryport}[[:space:]] | rev | awk '{print $1}' |\
-								rev | cut -d\/ -f1)
-						#
-						# check for a valid pid
-						pid=${pid//[!0-9]/}
-						let pid+=0 # turns an empty string into a valid number, '0',
-						# and a valid numeric pid remains unchanged.
-						if [[ ${pid} -gt 1 && $pid -le $(cat /proc/sys/kernel/pid_max) ]] ; then
-						fn_print_dots "Process still bound. Awaiting graceful exit: ${pidcheck}"
-								sleep 1
-						else
-								break # Our job is done here
-						fi # end if for pid range check
-				done
-				if [[ ${pidcheck} -eq ${maxpiditer} ]] ; then
-						# The process doesn't want to close after 20 seconds.
-						# kill it hard.
-						fn_print_error "Terminating reluctant Ark process: ${pid}"
-						kill -9 $pid
-				fi
-		fi # end if for port check
+	if [ "${#queryport}" -gt 0 ] ; then
+		for (( pidcheck=0 ; pidcheck < ${maxpiditer} ; pidcheck++ )) ; do
+			pid=$(netstat -nap 2>/dev/null | grep ^udp[[:space:]] |\
+				grep :${queryport}[[:space:]] | rev | awk '{print $1}' |\
+				rev | cut -d\/ -f1)
+			#
+			# check for a valid pid
+			pid=${pid//[!0-9]/}
+			let pid+=0 # turns an empty string into a valid number, '0',
+			# and a valid numeric pid remains unchanged.
+			if [ "${pid}" -gt 1 && "${pid}" -le $(cat /proc/sys/kernel/pid_max) ]; then
+			fn_print_dots "Process still bound. Awaiting graceful exit: ${pidcheck}"
+				sleep 1
+			else
+				break # Our job is done here
+			fi # end if for pid range check
+		done
+		if [[ ${pidcheck} -eq ${maxpiditer} ]] ; then
+			# The process doesn't want to close after 20 seconds.
+			# kill it hard.
+			fn_print_error "Terminating reluctant Ark process: ${pid}"
+			kill -9 ${pid}
+		fi
+	fi # end if for port check
 } # end of fn_stop_ark
 
 fn_stop_teamspeak3(){
@@ -325,11 +325,10 @@ fn_stop_tmux(){
 		# Remove lockfile
 		rm -f "${rootdir}/${lockselfname}"
 		# ARK doesn't clean up immediately after tmux is killed.
-				# Make certain the ports are cleared before continuing.
-				if [ "${gamename}" == "ARK: Survival Evolved" ]; then
-						fn_stop_ark
-						echo -en "\n"
-				fi
+		# Make certain the ports are cleared before continuing.
+		if [ "${gamename}" == "ARK: Survival Evolved" ]; then
+			fn_stop_ark
+		fi
 		fn_print_ok_nl "${servername}"
 		fn_script_log_pass "Stopped ${servername}"
 	else

+ 1 - 1
lgsm/functions/command_update.sh

@@ -20,7 +20,7 @@ elif [ "${engine}" == "lwjgl2" ]; then
 elif [ "${gamename}" == "Mumble" ]; then
 	update_mumble.sh
 elif [ "${gamename}" == "Factorio" ]; then
-  update_factorio.sh
+	update_factorio.sh
 elif [ "${gamename}" == "Multi Theft Auto" ]; then
 	update_mta.sh
 else

+ 2 - 2
lgsm/functions/core_messages.sh

@@ -165,9 +165,9 @@ fn_print_error(){
 
 fn_print_error_nl(){
 	if [ -n "${commandaction}" ]; then
-		echo -en "${creeol}[${red}ERROR!${default}] ${commandaction} ${servicename}: $@"
+		echo -en "${creeol}[${red}ERROR ${default}] ${commandaction} ${servicename}: $@"
 	else
-		echo -en "${creeol}[${red}ERROR!${default}] $@"
+		echo -en "${creeol}[${red}ERROR ${default}] $@"
 	fi
 	sleep 0.5
 	echo -en "\n"

+ 8 - 0
lgsm/functions/fix_steamcmd.sh

@@ -40,4 +40,12 @@ elif [ "${gamename}" == "Hurtworld" ]; then
 		cp -v "${rootdir}/steamcmd/linux32/steamclient.so" "${filesdir}/Hurtworld_Data/Plugins/x86_64/steamclient.so" >> "${scriptlog}"
 		fn_fix_msg_end
 	fi
+elif [ "${gamename}" == "Tower Unite" ]; then
+	# Fixes: [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam, or a local steamclient.so.
+	if [ ! -f "${executabledir}/steamclient.so" ]; then
+		fixname="steamclient.so"
+		fn_fix_msg_start
+		cp -v "${filesdir}/linux64/steamclient.so" "${executabledir}/steamclient.so" >> "${scriptlog}"
+		fn_fix_msg_end
+	fi
 fi

+ 17 - 0
lgsm/functions/info_config.sh

@@ -514,6 +514,20 @@ fn_info_config_terraria(){
 	fi
 }
 
+fn_info_config_towerunite(){
+	if [ ! -f "${servercfgfullpath}" ]; then
+		servername="${unavailable}"
+		maxplayers="${zero}"
+	else
+		servername=$(grep "ServerTitle" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/ServerTitle//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		maxplayers=$(grep "MaxPlayers" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
+		
+		# Not Set
+		servername=${servername:-"NOT SET"}
+		maxplayers=${maxplayers:-"0"}
+	fi
+}
+
 fn_info_config_unreal(){
 	if [ ! -f "${servercfgfullpath}" ]; then
 		servername="${unavailable}"
@@ -705,6 +719,9 @@ elif [ "${engine}" == "teeworlds" ]; then
 # Terraria
 elif [ "${engine}" == "terraria" ]; then
 	fn_info_config_terraria
+# Tower Unite
+elif [ "${gamename}" == "Tower Unite" ]; then
+	fn_info_config_towerunite
 # Unreal/Unreal 2 engine
 elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
 	fn_info_config_unreal

+ 8 - 2
lgsm/functions/info_glibc.sh

@@ -6,7 +6,10 @@
 
 local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 
-if [ "${gamename}" == "Black Mesa: Deathmatch" ]; then
+if [ "${gamename}" == "ARK: Survival Evolved" ]; then
+	glibcrequired="2.15"
+	glibcfix="no"
+elif [ "${gamename}" == "Black Mesa: Deathmatch" ]; then
 	glibcrequired="2.15"
 	glibcfix="yes"
 elif [ "${gamename}" == "Blade Symphony" ]; then
@@ -68,6 +71,9 @@ elif [ "${gamename}" == "Quake 3: Arena" ]; then
 elif [ "${gamename}" == "Quake Live" ]; then
 	glibcrequired="2.15"
 	glibcfix="no"
+elif [ "${gamename}" == "Sven Co-op" ]; then
+	glibcrequired="2.18"
+	glibcfix="no"
 elif [ "${gamename}" == "TeamSpeak 3" ]; then
 	glibcrequired="NOT REQUIRED"
 	glibcfix="no"
@@ -135,7 +141,7 @@ elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	glibcrequired="2.2.4"
 	glibcfix="no"
 elif [ "${gamename}" == "Multi Theft Auto" ]; then
-	glibcrequired="NOT REQUIRED"
+	glibcrequired="2.7"
 	glibcfix="no"
 else
 	glibcrequired="UNKNOWN"

+ 7 - 0
lgsm/functions/install_config.sh

@@ -474,6 +474,13 @@ elif [ "${gamename}" == "Terraria" ]; then
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
+elif [ "${gamename}" == "Tower Unite" ]; then
+	gamedirname="TowerUnite"
+	fn_check_cfgdir
+	array_configs+=( TowerServer.ini )
+	fn_fetch_default_config
+	fn_default_config_remote
+	fn_set_config_vars
 elif [ "${gamename}" == "Unreal Tournament" ]; then
 	gamedirname="UnrealTournament"
 	array_configs+=( Game.ini Engine.ini )

+ 13 - 6
lgsm/functions/install_gslt.sh

@@ -26,12 +26,19 @@ fn_script_log_info "Get more info and a token here:"
 fn_script_log_info "https://gameservermanagers.com/gslt"
 echo ""
 if [ -z "${autoinstall}" ]; then
-	echo "Enter token below (Can be blank)."
-	echo -n "GSLT TOKEN: "
-	read token
-	sed -i -e "s/gslt=\"\"/gslt=\"${token}\"/g" "${rootdir}/${selfname}"
+	if [ "${gamename}" != "Tower Unite" ];then
+		echo "Enter token below (Can be blank)."
+		echo -n "GSLT TOKEN: "
+		read token
+		sed -i -e "s/gslt=\"\"/gslt=\"${token}\"/g" "${rootdir}/${selfname}"
+	fi
 fi
 sleep 1
-echo "The GSLT can be changed by editing ${selfname}."
-fn_script_log_info "The GSLT can be changed by editing ${selfname}."
+if [ "${gamename}" == "Tower Unite" ];then
+	echo "The GSLT can be changed by editing ${servercfg}."
+	fn_script_log_info "The GSLT can be changed by editing ${servercfg}."
+else
+	echo "The GSLT can be changed by editing ${selfname}."
+	fn_script_log_info "The GSLT can be changed by editing ${selfname}."
+fi
 echo ""