From bce3cc7ea0761b7edf47ed63874e50764afeccb7 Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Tue, 30 Aug 2016 02:43:06 -0400
Subject: [PATCH 01/75] adding Quake 2

---
 Quake2/q2server                        | 142 +++++++++++++++++++++++++
 lgsm/functions/command_install.sh      |   2 +-
 lgsm/functions/install_server_files.sh |   2 +
 3 files changed, 145 insertions(+), 1 deletion(-)
 create mode 100644 Quake2/q2server

diff --git a/Quake2/q2server b/Quake2/q2server
new file mode 100644
index 000000000..8f84aa6c3
--- /dev/null
+++ b/Quake2/q2server
@@ -0,0 +1,142 @@
+#!/bin/bash
+# Quake 2
+# Server Management Script
+# Author: Daniel Gibbs
+# Website: https://gameservermanagers.com
+if [ -f ".dev-debug" ]; then
+	exec 5>dev-debug.log
+	BASH_XTRACEFD="5"
+	set -x
+fi
+
+version="210516"
+
+#### Variables ####
+
+# Notification Alerts
+# (on|off)
+
+# Email
+emailalert="off"
+email="email@example.com"
+
+# Pushbullet
+# https://www.pushbullet.com/#settings
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+
+# Start Variables
+defaultmap="q2dm1"
+ip="0.0.0.0"
+port="27910"
+
+fn_parms(){
+parms="+set dedicated 1 +set ip ${ip} +set port ${port} +exec ${servercfg} +set deathmatch 1 +map ${defaultmap}"
+}
+
+#### Advanced Variables ####
+
+# Github Branch Select
+# Allows for the use of different function files
+# from a different repo and/or branch.
+githubuser="GameServerManagers"
+githubrepo="LinuxGSM"
+githubbranch="master"
+
+# Server Details
+servicename="quake2-server"
+gamename="Quake2"
+engine="idtech2"
+
+# 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"
+filesdir="${rootdir}/serverfiles"
+systemdir="${filesdir}/baseq2"
+executabledir="${systemdir}"
+executable="./quake2"
+servercfg="${servicename}.cfg"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+backupdir="${rootdir}/backups"
+
+# Logging
+logdays="7"
+gamelogdir="${filesdir}/Logs"
+scriptlogdir="${rootdir}/log/script"
+consolelogdir="${rootdir}/log/console"
+consolelogging="on"
+
+scriptlog="${scriptlogdir}/${servicename}-script.log"
+consolelog="${consolelogdir}/${servicename}-console.log"
+emaillog="${scriptlogdir}/${servicename}-email.log"
+
+scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
+consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%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
+}
+
+core_dl.sh
+core_functions.sh
+
+getopt=$1
+core_getopt.sh
diff --git a/lgsm/functions/command_install.sh b/lgsm/functions/command_install.sh
index b4beceed4..6db74e805 100644
--- a/lgsm/functions/command_install.sh
+++ b/lgsm/functions/command_install.sh
@@ -18,7 +18,7 @@ check_deps.sh
 if [ "${gamename}" == "Unreal Tournament 2004" ]; then
 	install_server_files.sh
 	install_ut2k4_key.sh
-elif [ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Enemy Territory" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Mumble" ]; then
+elif [ "${gamename}" == "Quake 2" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Enemy Territory" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Mumble" ]; then
 	installer=1
 	install_server_files.sh
 elif [ -n "${appid}" ]; then
diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index 4c5f33f0d..74d0793e6 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -23,6 +23,8 @@ fn_install_server_files(){
 		fileurl="http://files.gameservermanagers.com/UnrealTournament/UnrealTournament-Server-XAN-3045522-Linux.zip"; filedir="${lgsmdir}/tmp"; filename="UnrealTournament-Server-XAN-3045522-Linux.zip";  executecmd="noexecute" run="norun"; force="noforce"; md5="553fed5645a9fc623e92563049bf79f6"
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="976cebc812cd8af01c272e97835e77ce"
+	elif [ "${gamename}" == "Quake 2" ]; then
+		fileurl="https://s3.amazonaws.com/linuxgsm/quake2-3.20-glibc-i386-full-linux2.0.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake2-3.20-glibc-i386-full-linux2.0.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="0b8c7e2d51f40b56b328c69e986e7c5f"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 	fn_dl_extract "${filedir}" "${filename}" "${filesdir}"

From 652721c37fc516855233c89e7ab9c5a48efa7d25 Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Tue, 30 Aug 2016 02:45:34 -0400
Subject: [PATCH 02/75] fix

---
 Quake2/q2server | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Quake2/q2server b/Quake2/q2server
index 8f84aa6c3..0d0d6a823 100644
--- a/Quake2/q2server
+++ b/Quake2/q2server
@@ -45,7 +45,7 @@ githubbranch="master"
 
 # Server Details
 servicename="quake2-server"
-gamename="Quake2"
+gamename="Quake 2"
 engine="idtech2"
 
 # Directories

From aedf5a9881f6fb6074cb77b0317e7d6ee424df3a Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Tue, 30 Aug 2016 02:50:11 -0400
Subject: [PATCH 03/75] folder fix

---
 Quake2/q2server | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Quake2/q2server b/Quake2/q2server
index 0d0d6a823..da38e6780 100644
--- a/Quake2/q2server
+++ b/Quake2/q2server
@@ -57,7 +57,7 @@ functionsdir="${lgsmdir}/functions"
 libdir="${lgsmdir}/lib"
 filesdir="${rootdir}/serverfiles"
 systemdir="${filesdir}/baseq2"
-executabledir="${systemdir}"
+executabledir="${filesdir}"
 executable="./quake2"
 servercfg="${servicename}.cfg"
 servercfgfullpath="${servercfgdir}/${servercfg}"

From c1bb94b8097d5c6768c843120543f086e1dcaf55 Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Tue, 30 Aug 2016 03:03:04 -0400
Subject: [PATCH 04/75] fix

---
 Quake2/q2server              | 1 +
 lgsm/functions/info_glibc.sh | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/Quake2/q2server b/Quake2/q2server
index da38e6780..c548d6ecb 100644
--- a/Quake2/q2server
+++ b/Quake2/q2server
@@ -60,6 +60,7 @@ systemdir="${filesdir}/baseq2"
 executabledir="${filesdir}"
 executable="./quake2"
 servercfg="${servicename}.cfg"
+servercfgdir="${systemdir}"
 servercfgfullpath="${servercfgdir}/${servercfg}"
 backupdir="${rootdir}/backups"
 
diff --git a/lgsm/functions/info_glibc.sh b/lgsm/functions/info_glibc.sh
index 40ed32cde..fa461b621 100644
--- a/lgsm/functions/info_glibc.sh
+++ b/lgsm/functions/info_glibc.sh
@@ -98,6 +98,9 @@ elif [ "${gamename}" == "TeamSpeak 3" ]; then
 elif [ "${gamename}" == "Mumble" ]; then
 	glibcrequired="NOT REQUIRED"
 	glibcfix="no"
+elif [ "${engine}" == "idtech2" ]; then
+	glibcrequired="2.0"
+	glibcfix="no"
 elif [ "${engine}" == "idtech3" ]; then
 	glibcrequired="2.0"
 	glibcfix="no"

From a97f7e96ed47286059218b0fbc966a80b33d44a3 Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Tue, 30 Aug 2016 03:10:13 -0400
Subject: [PATCH 05/75] adding Quake2 default config

---
 Quake2/cfg/lgsm-default.cfg      | 15 +++++++++++++++
 Quake2/q2server                  |  1 +
 lgsm/functions/install_config.sh |  6 ++++++
 3 files changed, 22 insertions(+)
 create mode 100644 Quake2/cfg/lgsm-default.cfg

diff --git a/Quake2/cfg/lgsm-default.cfg b/Quake2/cfg/lgsm-default.cfg
new file mode 100644
index 000000000..d59e3505f
--- /dev/null
+++ b/Quake2/cfg/lgsm-default.cfg
@@ -0,0 +1,15 @@
+set hostname "<hostname>"
+set rcon_password "<rconpassword>"
+set location "The Internet"
+set website "https://gameservermanagers.com/"
+set deathmatch 1
+set maxclients 8
+set timelimit 30
+set fraglimit 30
+
+map q2dm1
+
+// to advertise your server to a public "master server" add something
+// like this:
+//set public 1
+//setmaster master.q2servers.com
diff --git a/Quake2/q2server b/Quake2/q2server
index c548d6ecb..c4ed1f481 100644
--- a/Quake2/q2server
+++ b/Quake2/q2server
@@ -62,6 +62,7 @@ executable="./quake2"
 servercfg="${servicename}.cfg"
 servercfgdir="${systemdir}"
 servercfgfullpath="${servercfgdir}/${servercfg}"
+servercfgdefault="${servercfgdir}/lgsm-default.cfg"
 backupdir="${rootdir}/backups"
 
 # Logging
diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 1aafd1602..1a1d76b00 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -383,6 +383,12 @@ elif [ "${gamename}" == "Project Zomboid" ]; then
 	wget -N /dev/null ${githuburl}/ProjectZomboid/cfg/lgsm-default.ini 2>&1 | grep -F HTTP | cut -c45- | uniq
 	sleep 1
 	fn_defaultconfig
+elif [ "${gamename}" == "Quake 2" ]; then
+	echo -e "downloading lgsm-default.cfg...\c"
+	wget -N /dev/null ${githuburl}/Quake2/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
+	sleep 1
+	fn_defaultconfig
+	fn_userinputconfig
 elif [ "${gamename}" == "Quake Live" ]; then
 	echo -e "downloading lgsm-default.cfg...\c"
 	wget -N /dev/null ${githuburl}/QuakeLive/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq

From 2a413f411a30f2f0ae382e4f57d3a5cdc35f1d64 Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 00:50:05 -0400
Subject: [PATCH 06/75] adding QuakeWorld (nQuake)

---
 QuakeWorld/cfg/lgsm-default.cfg        |  26 +++++
 QuakeWorld/qwserver.sh                 | 143 +++++++++++++++++++++++++
 lgsm/functions/command_install.sh      |   2 +-
 lgsm/functions/install_server_files.sh |   2 +
 4 files changed, 172 insertions(+), 1 deletion(-)
 create mode 100644 QuakeWorld/cfg/lgsm-default.cfg
 create mode 100644 QuakeWorld/qwserver.sh

diff --git a/QuakeWorld/cfg/lgsm-default.cfg b/QuakeWorld/cfg/lgsm-default.cfg
new file mode 100644
index 000000000..e3da2497b
--- /dev/null
+++ b/QuakeWorld/cfg/lgsm-default.cfg
@@ -0,0 +1,26 @@
+// server info
+hostname                        "<hostname>" // server name shown in server browsers
+rcon_password					"<rconpassword>"
+sv_admininfo                    "lgsm <lgsm@example.com>" // admin name shown in server browsers
+
+// motd (max 15 rows) - this is the welcome message displayed when you connect to a server
+set	k_motd1                     "<hostname>"
+set	k_motd2                     " "
+set	k_motd3                     "Available game modes:"
+set	k_motd4                     "1on1, 2on2, 4on4, 10on10, ffa, ctf"
+//set k_motd5                     "line 5" // etc..
+
+set k_motd_time                 "5" // time motd is displayed in seconds
+
+
+// edit the lines below if you want different gamemodes on this port
+// matchless mode
+set k_matchless                 0               // run ktx as a regular match server or as a matchless (ffa) server (0 = regular, 1 = matchless)
+set k_use_matchless_dir         1               // use configs/usermodes/matchless instead of [...]/ffa (0 = no, 1 = yes)
+
+// free modes
+set k_defmode                   2on2            // default mode on server
+set k_allowed_free_modes        255             // allowed free modes (bit mask):
+                                                //  1=1on1, 2=2on2, 4=3on3, 8=4on4, 16=10on10, 32=ffa 64=ctf 128=hoonymode
+set k_defmap                    dm4             // server homemap. server will change to this when last player leaves the server
+set k_mode                      2               // server mode (1 = duel, 2 = team, 3 = ffa, 4 = ctf)
diff --git a/QuakeWorld/qwserver.sh b/QuakeWorld/qwserver.sh
new file mode 100644
index 000000000..2ccf69536
--- /dev/null
+++ b/QuakeWorld/qwserver.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+# Quake World (nQuake)
+# Server Management Script
+# Author: Daniel Gibbs
+# Website: https://gameservermanagers.com
+if [ -f ".dev-debug" ]; then
+	exec 5>dev-debug.log
+	BASH_XTRACEFD="5"
+	set -x
+fi
+
+version="210516"
+
+#### Variables ####
+
+# Notification Alerts
+# (on|off)
+
+# Email
+emailalert="off"
+email="email@example.com"
+
+# Pushbullet
+# https://www.pushbullet.com/#settings
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+
+# Start Variables
+ip="0.0.0.0"
+port="27500"
+
+fn_parms(){
+parms="-port ${port} -game ktx +exec ${servercfg}"
+}
+
+#### Advanced Variables ####
+
+# Github Branch Select
+# Allows for the use of different function files
+# from a different repo and/or branch.
+githubuser="GameServerManagers"
+githubrepo="LinuxGSM"
+githubbranch="master"
+
+# Server Details
+servicename="quakeworld-server"
+gamename="QuakeWorld"
+engine="quake"
+
+# 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"
+filesdir="${rootdir}/serverfiles"
+systemdir="${filesdir}/ktx"
+executabledir="${filesdir}"
+executable="./mvdsv"
+servercfg="${servicename}.cfg"
+servercfgdir="${systemdir}"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+servercfgdefault="${servercfgdir}/lgsm-default.cfg"
+backupdir="${rootdir}/backups"
+
+# Logging
+logdays="7"
+gamelogdir="${filesdir}/Logs"
+scriptlogdir="${rootdir}/log/script"
+consolelogdir="${rootdir}/log/console"
+consolelogging="on"
+
+scriptlog="${scriptlogdir}/${servicename}-script.log"
+consolelog="${consolelogdir}/${servicename}-console.log"
+emaillog="${scriptlogdir}/${servicename}-email.log"
+
+scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
+consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%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
+}
+
+core_dl.sh
+core_functions.sh
+
+getopt=$1
+core_getopt.sh
\ No newline at end of file
diff --git a/lgsm/functions/command_install.sh b/lgsm/functions/command_install.sh
index bcfe36fd2..bdd9038f7 100644
--- a/lgsm/functions/command_install.sh
+++ b/lgsm/functions/command_install.sh
@@ -18,7 +18,7 @@ check_deps.sh
 if [ "${gamename}" == "Unreal Tournament 2004" ]; then
 	install_server_files.sh
 	install_ut2k4_key.sh
-elif [ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Enemy Territory" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Mumble" ]; then
+elif [ "${gamename}" == "QuakeWorld" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Enemy Territory" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Mumble" ]; then
 	installer=1
 	install_server_files.sh
 elif [ -n "${appid}" ]; then
diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index 78057b680..7b46b4d15 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -23,6 +23,8 @@ fn_install_server_files(){
 		fileurl="http://files.gameservermanagers.com/UnrealTournament/UnrealTournament-Server-XAN-3045522-Linux.zip"; filedir="${lgsmdir}/tmp"; filename="UnrealTournament-Server-XAN-3045522-Linux.zip";  executecmd="noexecute" run="norun"; force="noforce"; md5="553fed5645a9fc623e92563049bf79f6"
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="254533d4643ad2fe6f1f3ecc4f6b5e5f"
+	elif [ "${gamename}" == "QuakeWorld" ]; then
+		fileurl="https://s3.amazonaws.com/linuxgsm/nquake.server.linux.083116.full.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="nquake.server.linux.083116.full.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="75a409cf08d808f075e4dacdc7b21b78"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 	fn_dl_extract "${filedir}" "${filename}" "${filesdir}"

From b207aeb74c72a5f01b26ac7e7a7033223d0be4ea Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 00:57:55 -0400
Subject: [PATCH 07/75] add config

---
 lgsm/functions/install_config.sh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 5a856f8e6..a5b30da18 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -389,6 +389,12 @@ elif [ "${gamename}" == "Quake Live" ]; then
 	sleep 1
 	fn_defaultconfig
 	fn_userinputconfig
+elif [ "${gamename}" == "QuakeWorld" ]; then
+	echo -e "downloading lgsm-default.cfg...\c"
+	wget -N /dev/null ${githuburl}/QuakeWOrld/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
+	sleep 1
+	fn_defaultconfig
+	fn_userinputconfig
 elif [ "${gamename}" == "Red Orchestra: Ostfront 41-45" ]; then
 	fn_unreal2config
 elif [ "${gamename}" == "Serious Sam 3: BFE" ]; then

From 1cd76f5ec6904b091c509aefa09b258ab0ed338d Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 00:58:10 -0400
Subject: [PATCH 08/75] remove script extension

---
 QuakeWorld/{qwserver.sh => qwserver} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename QuakeWorld/{qwserver.sh => qwserver} (100%)

diff --git a/QuakeWorld/qwserver.sh b/QuakeWorld/qwserver
similarity index 100%
rename from QuakeWorld/qwserver.sh
rename to QuakeWorld/qwserver

From 7b2d298d7a05bde48117131e9802952d1c4175ae Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 00:59:14 -0400
Subject: [PATCH 09/75] add glib check

---
 lgsm/functions/info_glibc.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lgsm/functions/info_glibc.sh b/lgsm/functions/info_glibc.sh
index 9bc71172d..f83d44f97 100644
--- a/lgsm/functions/info_glibc.sh
+++ b/lgsm/functions/info_glibc.sh
@@ -74,6 +74,9 @@ elif [ "${engine}" == "spark" ]; then
 elif [ "${engine}" == "starbound" ]; then
 	glibcrequired="2.12"
 	glibcfix="no"
+elif [ "${engine}" == "quake" ]; then
+	glibcrequired="2.0"
+	glibcfix="no"
 elif [ "${engine}" == "terraria" ]; then
 	glibcrequired="2.7"
 	glibcfix="no"

From ef4768823c87883b04fe6ac0a4cbfdac34723b6f Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 01:02:32 -0400
Subject: [PATCH 10/75] url fix

---
 lgsm/functions/install_config.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index a5b30da18..d9ed2c308 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -391,7 +391,7 @@ elif [ "${gamename}" == "Quake Live" ]; then
 	fn_userinputconfig
 elif [ "${gamename}" == "QuakeWorld" ]; then
 	echo -e "downloading lgsm-default.cfg...\c"
-	wget -N /dev/null ${githuburl}/QuakeWOrld/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
+	wget -N /dev/null ${githuburl}/QuakeWorld/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
 	sleep 1
 	fn_defaultconfig
 	fn_userinputconfig

From 4c963d69ce7a7f3c9062f6125a6060c805af912a Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 01:11:50 -0400
Subject: [PATCH 11/75] filename fix

---
 QuakeWorld/qwserver | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/QuakeWorld/qwserver b/QuakeWorld/qwserver
index 2ccf69536..7a43b4b56 100644
--- a/QuakeWorld/qwserver
+++ b/QuakeWorld/qwserver
@@ -43,7 +43,7 @@ githubrepo="LinuxGSM"
 githubbranch="master"
 
 # Server Details
-servicename="quakeworld-server"
+servicename="quakeworld_server"
 gamename="QuakeWorld"
 engine="quake"
 

From e037977b7cc8a44094b2b8fa9f542586cd0a35dd Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 02:17:59 -0400
Subject: [PATCH 12/75] adding Quake 3: Team Arena

---
 Quake3/cfg/lgsm-default.cfg            |  36 +++++++
 Quake3/q3server                        | 143 +++++++++++++++++++++++++
 lgsm/functions/command_install.sh      |   2 +-
 lgsm/functions/install_config.sh       |   6 ++
 lgsm/functions/install_server_files.sh |   2 +
 5 files changed, 188 insertions(+), 1 deletion(-)
 create mode 100644 Quake3/cfg/lgsm-default.cfg
 create mode 100644 Quake3/q3server

diff --git a/Quake3/cfg/lgsm-default.cfg b/Quake3/cfg/lgsm-default.cfg
new file mode 100644
index 000000000..fddb8347e
--- /dev/null
+++ b/Quake3/cfg/lgsm-default.cfg
@@ -0,0 +1,36 @@
+set sv_hostname "<hostname>"
+set sv_maxclients 10
+set g_motd "LGSM Quake3 Server"
+set g_forcerespawn 15
+set rconpassword "<rconpassword>"
+set g_gametype 1
+set fraglimit 50
+set timelimit 20
+
+//Here's the map-cycle. When fraglimit or timelimit is reached, the map is automatically changed.
+//Otherwise it would just play the same map again.
+set m1 "map q3dm1; set nextmap vstr m2"
+set m2 "map q3dm2; set nextmap vstr m3"
+set m3 "map q3dm3; set nextmap vstr m4"
+set m4 "map q3tourney1; set nextmap vstr m5"
+set m5 "map q3dm4; set nextmap vstr m6"
+set m6 "map q3dm5; set nextmap vstr m7"
+set m7 "map q3dm6; set nextmap vstr m8"
+set m8 "map q3tourney2; set nextmap vstr m9"
+set m9 "map q3dm7; set nextmap vstr m10"
+set m10 "map q3dm8; set nextmap vstr m11"
+set m11 "map q3dm9; set nextmap vstr m12"
+set m12 "map q3tourney3; set nextmap vstr m13"
+set m13 "map q3dm10; set nextmap vstr m14"
+set m14 "map q3dm11; set nextmap vstr m15"
+set m15 "map q3dm12; set nextmap vstr m16"
+set m16 "map q3tourney4; set nextmap vstr m17"
+set m17 "map q3dm13; set nextmap vstr m18"
+set m18 "map q3dm14; set nextmap vstr m19"
+set m19 "map q3dm15; set nextmap vstr m20"
+set m20 "map q3tourney5; set nextmap vstr m21"
+set m21 "map q3dm16; set nextmap vstr m22"
+set m22 "map q3dm17; set nextmap vstr m23"
+set m23 "map q3dm18; set nextmap vstr m24"
+set m24 "map q3dm19; set nextmap vstr m25"
+set m25 "map q3tourney6; set nextmap vstr m1"
\ No newline at end of file
diff --git a/Quake3/q3server b/Quake3/q3server
new file mode 100644
index 000000000..d247fa69b
--- /dev/null
+++ b/Quake3/q3server
@@ -0,0 +1,143 @@
+#!/bin/bash
+# Quake 3: Team Arena
+# Server Management Script
+# Author: Daniel Gibbs
+# Website: https://gameservermanagers.com
+if [ -f ".dev-debug" ]; then
+	exec 5>dev-debug.log
+	BASH_XTRACEFD="5"
+	set -x
+fi
+
+version="210516"
+
+#### Variables ####
+
+# Notification Alerts
+# (on|off)
+
+# Email
+emailalert="off"
+email="email@example.com"
+
+# Pushbullet
+# https://www.pushbullet.com/#settings
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+
+# Start Variables
+ip="0.0.0.0"
+port="27960"
+
+fn_parms(){
+parms="+set sv_punkbuster 1 +set fs_basepath ${filesdir} +set dedicated 1 +set com_hunkMegs 32 +set net_ip ${ip} +set net_port ${port} +exec ${servercfg}"
+}
+
+#### Advanced Variables ####
+
+# Github Branch Select
+# Allows for the use of different function files
+# from a different repo and/or branch.
+githubuser="GameServerManagers"
+githubrepo="LinuxGSM"
+githubbranch="master"
+
+# Server Details
+servicename="quake3-server"
+gamename="Quake 3: Team Arena"
+engine="idtech3"
+
+# 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"
+filesdir="${rootdir}/serverfiles"
+systemdir="${filesdir}/baseq3"
+executabledir="${filesdir}"
+executable="./q3ded"
+servercfg="${servicename}.cfg"
+servercfgdir="${systemdir}"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+servercfgdefault="${servercfgdir}/lgsm-default.cfg"
+backupdir="${rootdir}/backups"
+
+# Logging
+logdays="7"
+gamelogdir="${filesdir}/Logs"
+scriptlogdir="${rootdir}/log/script"
+consolelogdir="${rootdir}/log/console"
+consolelogging="on"
+
+scriptlog="${scriptlogdir}/${servicename}-script.log"
+consolelog="${consolelogdir}/${servicename}-console.log"
+emaillog="${scriptlogdir}/${servicename}-email.log"
+
+scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
+consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%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
+}
+
+core_dl.sh
+core_functions.sh
+
+getopt=$1
+core_getopt.sh
\ No newline at end of file
diff --git a/lgsm/functions/command_install.sh b/lgsm/functions/command_install.sh
index bcfe36fd2..32ef1a4e6 100644
--- a/lgsm/functions/command_install.sh
+++ b/lgsm/functions/command_install.sh
@@ -18,7 +18,7 @@ check_deps.sh
 if [ "${gamename}" == "Unreal Tournament 2004" ]; then
 	install_server_files.sh
 	install_ut2k4_key.sh
-elif [ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Enemy Territory" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Mumble" ]; then
+elif [ "${gamename}" == "Quake 3: Team Arena" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Enemy Territory" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Mumble" ]; then
 	installer=1
 	install_server_files.sh
 elif [ -n "${appid}" ]; then
diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 5a856f8e6..3e712e30a 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -383,6 +383,12 @@ elif [ "${gamename}" == "Project Zomboid" ]; then
 	wget -N /dev/null ${githuburl}/ProjectZomboid/cfg/lgsm-default.ini 2>&1 | grep -F HTTP | cut -c45- | uniq
 	sleep 1
 	fn_defaultconfig
+elif [ "${gamename}" == "Quake 3: Team Arena" ]; then
+	echo -e "downloading lgsm-default.cfg...\c"
+	wget -N /dev/null ${githuburl}/Quake3/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
+	sleep 1
+	fn_defaultconfig
+	fn_userinputconfig
 elif [ "${gamename}" == "Quake Live" ]; then
 	echo -e "downloading lgsm-default.cfg...\c"
 	wget -N /dev/null ${githuburl}/QuakeLive/cfg/lgsm-default.cfg 2>&1 | grep -F HTTP | cut -c45- | uniq
diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index 78057b680..38dc70b5a 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -23,6 +23,8 @@ fn_install_server_files(){
 		fileurl="http://files.gameservermanagers.com/UnrealTournament/UnrealTournament-Server-XAN-3045522-Linux.zip"; filedir="${lgsmdir}/tmp"; filename="UnrealTournament-Server-XAN-3045522-Linux.zip";  executecmd="noexecute" run="norun"; force="noforce"; md5="553fed5645a9fc623e92563049bf79f6"
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="254533d4643ad2fe6f1f3ecc4f6b5e5f"
+	elif [ "${gamename}" == "Quake 3: Team Arena" ]; then
+		fileurl="https://s3.amazonaws.com/linuxgsm/quake3-1.32b-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32b-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="8fe61809ade4f9cce24e520043afe91b"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 	fn_dl_extract "${filedir}" "${filename}" "${filesdir}"

From 3781817d46236cf1e422e31201ff524a3ca2a89b Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 02:50:42 -0400
Subject: [PATCH 13/75] update

---
 Quake3/cfg/lgsm-default.cfg | 4 ++--
 Quake3/q3server             | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/Quake3/cfg/lgsm-default.cfg b/Quake3/cfg/lgsm-default.cfg
index fddb8347e..b392ecad2 100644
--- a/Quake3/cfg/lgsm-default.cfg
+++ b/Quake3/cfg/lgsm-default.cfg
@@ -1,9 +1,9 @@
 set sv_hostname "<hostname>"
-set sv_maxclients 10
+set sv_maxclients 16
 set g_motd "LGSM Quake3 Server"
 set g_forcerespawn 15
 set rconpassword "<rconpassword>"
-set g_gametype 1
+set g_gametype 0 - Sets the type of game. 0 - Free for all, 1 - Tournament, 2 - Free for all(again), 3 - Team Deathmatch, 4 - Capture the Flag
 set fraglimit 50
 set timelimit 20
 
diff --git a/Quake3/q3server b/Quake3/q3server
index d247fa69b..4e722b08e 100644
--- a/Quake3/q3server
+++ b/Quake3/q3server
@@ -26,11 +26,12 @@ pushbulletalert="off"
 pushbullettoken="accesstoken"
 
 # Start Variables
+defaultmap="q3dm17"
 ip="0.0.0.0"
 port="27960"
 
 fn_parms(){
-parms="+set sv_punkbuster 1 +set fs_basepath ${filesdir} +set dedicated 1 +set com_hunkMegs 32 +set net_ip ${ip} +set net_port ${port} +exec ${servercfg}"
+parms="+set sv_punkbuster 0 +set fs_basepath ${filesdir} +set dedicated 1 +set com_hunkMegs 32 +set net_ip ${ip} +set net_port ${port} +exec ${servercfg} +map ${defaultmap}"
 }
 
 #### Advanced Variables ####

From f4ca76dfe086b4240aefd66bc49f60afc5d1e4eb Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Wed, 31 Aug 2016 03:07:56 -0400
Subject: [PATCH 14/75] config fix

---
 Quake3/cfg/lgsm-default.cfg | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Quake3/cfg/lgsm-default.cfg b/Quake3/cfg/lgsm-default.cfg
index b392ecad2..caccea760 100644
--- a/Quake3/cfg/lgsm-default.cfg
+++ b/Quake3/cfg/lgsm-default.cfg
@@ -3,7 +3,7 @@ set sv_maxclients 16
 set g_motd "LGSM Quake3 Server"
 set g_forcerespawn 15
 set rconpassword "<rconpassword>"
-set g_gametype 0 - Sets the type of game. 0 - Free for all, 1 - Tournament, 2 - Free for all(again), 3 - Team Deathmatch, 4 - Capture the Flag
+set g_gametype 0 //- Sets the type of game. 0 - Free for all, 1 - Tournament, 2 - Free for all(again), 3 - Team Deathmatch, 4 - Capture the Flag
 set fraglimit 50
 set timelimit 20
 

From e98e5af66e624c923cbf0a1cb00de503d463ad7e Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 13:36:57 +0200
Subject: [PATCH 15/75] Check if executable is executable

Attempt to fix it if not

Needs testing
Fixes #591
---
 lgsm/functions/check_permissions.sh | 41 +++++++++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index 3b5e52005..a7112238c 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -74,12 +74,49 @@ fn_check_permissions(){
 		if [ "${userrootdirperm}" != "7" ] && [ "${grouprootdirperm}" != "7" ]; then
 			fn_print_fail_nl "Permissions issues found"
 			fn_script_log_fatal "Permissions issues found"
-			fn_print_information_nl "The following directorys does not have the correct permissions:"
-			fn_script_log_info "The following directorys does not have the correct permissions:"
+			fn_print_information_nl "The following directory does not have the correct permissions:"
+			fn_script_log_info "The following directory does not have the correct permissions:"
+			fn_script_log_info "${rootdir}"
 			ls -l "${rootdir}"
 			core_exit.sh
 		fi
 	fi
+	# Check if executable is executable and attempt to fix it
+	if [ -f "${executabledir}/${executable}" ]; then
+		# Get permission numbers on file under the form 775
+		execperm="$(stat -c %a "${executabledir}/${executable}")"
+		# Grab the first and second digit for user and group permission
+		userexecperm="${execperm:0:1}"
+		groupexecperm="${execperm:1:1}"
+		# Check for invalid user permission
+		if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ]  || [ "${userexecperm}" == "6" ]; then
+			# If user permission is invalid, then check for invalid group permissions
+			if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ]  || [ "${groupexecperm}" == "6" ]; then
+				# If permission issues are found
+				fn_print_warning "Permissions issue found"
+				fn_script_log_warn "Permissions issue found"
+				fn_print_information_nl "The following file is not executable:"
+				ls -l "${executabledir}/${executable}"
+				fn_script_log_info "The following file is not executable:"
+				fn_script_log_info "${executabledir}/${executable}"
+				fn_print_information_nl "Applying chmod u+x,g+x ${executabledir}/${executable}"
+				fn_script_log_info "Applying chmod u+x,g+x ${execperm}"
+				# Make the executable executable
+				chmod u+x,g+x "${executabledir}/${executable}"
+				# Second check to see if it's been successfully applied
+				if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ]  || [ "${userexecperm}" == "6" ]; then
+					if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ]  || [ "${groupexecperm}" == "6" ]; then
+					# If errors are still found
+					fn_print_fail_nl "The following file could not be set executable:"
+					ls -l "${executabledir}/${executable}"
+					fn_script_log_warn "The following file could not be set executable:"
+					fn_script_log_info "${executabledir}/${executable}"
+					core_exit.sh
+					fi
+				fi
+			fi
+		fi
+	fi
 }
 
 fn_check_ownership

From f0306dbcc41d1b548e93ddd244060309c9472c3d Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 14:18:14 +0200
Subject: [PATCH 16/75] stripping ./ from executable

---
 lgsm/functions/check_permissions.sh | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index a7112238c..7cb88ac51 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -82,9 +82,11 @@ fn_check_permissions(){
 		fi
 	fi
 	# Check if executable is executable and attempt to fix it
-	if [ -f "${executabledir}/${executable}" ]; then
+	# First get executable name
+	execname="$(echo "${executable}" | awk -F "/" '{ print $2 }')"
+	if [ -f "${executabledir}/${execname}" ]; then
 		# Get permission numbers on file under the form 775
-		execperm="$(stat -c %a "${executabledir}/${executable}")"
+		execperm="$(stat -c %a "${executabledir}/${execname}")"
 		# Grab the first and second digit for user and group permission
 		userexecperm="${execperm:0:1}"
 		groupexecperm="${execperm:1:1}"
@@ -93,24 +95,24 @@ fn_check_permissions(){
 			# If user permission is invalid, then check for invalid group permissions
 			if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ]  || [ "${groupexecperm}" == "6" ]; then
 				# If permission issues are found
-				fn_print_warning "Permissions issue found"
+				fn_print_warn "Permissions issue found"
 				fn_script_log_warn "Permissions issue found"
 				fn_print_information_nl "The following file is not executable:"
-				ls -l "${executabledir}/${executable}"
+				ls -l "${executabledir}/${execname}"
 				fn_script_log_info "The following file is not executable:"
-				fn_script_log_info "${executabledir}/${executable}"
-				fn_print_information_nl "Applying chmod u+x,g+x ${executabledir}/${executable}"
+				fn_script_log_info "${executabledir}/${execname}"
+				fn_print_information_nl "Applying chmod u+x,g+x ${executabledir}/${execname}"
 				fn_script_log_info "Applying chmod u+x,g+x ${execperm}"
 				# Make the executable executable
-				chmod u+x,g+x "${executabledir}/${executable}"
+				chmod u+x,g+x "${executabledir}/${execname}"
 				# Second check to see if it's been successfully applied
 				if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ]  || [ "${userexecperm}" == "6" ]; then
 					if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ]  || [ "${groupexecperm}" == "6" ]; then
 					# If errors are still found
 					fn_print_fail_nl "The following file could not be set executable:"
-					ls -l "${executabledir}/${executable}"
+					ls -l "${executabledir}/${execname}"
 					fn_script_log_warn "The following file could not be set executable:"
-					fn_script_log_info "${executabledir}/${executable}"
+					fn_script_log_info "${executabledir}/${execname}"
 					core_exit.sh
 					fi
 				fi

From 3484854959bb69d2745d85cb916728e0413e0071 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 14:22:08 +0200
Subject: [PATCH 17/75] refresh values for second check

---
 lgsm/functions/check_permissions.sh | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index 7cb88ac51..a853a22df 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -106,6 +106,11 @@ fn_check_permissions(){
 				# Make the executable executable
 				chmod u+x,g+x "${executabledir}/${execname}"
 				# Second check to see if it's been successfully applied
+				# Get permission numbers on file under the form 775
+				execperm="$(stat -c %a "${executabledir}/${execname}")"
+				# Grab the first and second digit for user and group permission
+				userexecperm="${execperm:0:1}"
+				groupexecperm="${execperm:1:1}"
 				if [ "${userexecperm}" == "0" ] || [ "${userexecperm}" == "2" ] || [ "${userexecperm}" == "4" ]  || [ "${userexecperm}" == "6" ]; then
 					if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ]  || [ "${groupexecperm}" == "6" ]; then
 					# If errors are still found

From a36e646bf7d9d28c0558fca1062d4f4db8c65e10 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 14:25:48 +0200
Subject: [PATCH 18/75] new line, now nice output

---
 lgsm/functions/check_permissions.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index a853a22df..946ddd301 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -95,7 +95,7 @@ fn_check_permissions(){
 			# If user permission is invalid, then check for invalid group permissions
 			if [ "${groupexecperm}" == "0" ] || [ "${groupexecperm}" == "2" ] || [ "${groupexecperm}" == "4" ]  || [ "${groupexecperm}" == "6" ]; then
 				# If permission issues are found
-				fn_print_warn "Permissions issue found"
+				fn_print_warn_nl "Permissions issue found"
 				fn_script_log_warn "Permissions issue found"
 				fn_print_information_nl "The following file is not executable:"
 				ls -l "${executabledir}/${execname}"

From c2bd0cffb532127da623ef5c0479df79511506ab Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 14:34:47 +0200
Subject: [PATCH 19/75] fixed mumble port using awk instead of sed

---
 lgsm/functions/info_config.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index e3dac532f..825df0a84 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -320,7 +320,7 @@ fn_info_config_mumble(){
 		queryport="${port}"
 		servername="Mumble"
 	else
-		port=$(grep "port" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/port//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		port=$(grep "port=" "${servercfgfullpath}" | awk -F "=" '{ print $2 }' )
 		queryport="${port}"
 
 		# Not Set

From c43ac02250d1675a8a7368a69a4aa53abaed9aff Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 14:42:55 +0200
Subject: [PATCH 20/75] first fix attempt for mumble ip

---
 lgsm/functions/info_config.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index 825df0a84..7ea395dc0 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -328,7 +328,7 @@ fn_info_config_mumble(){
 		queryport=${queryport:-"64738"}
 		servername="Mumble Port ${port}"
 
-		ip=$(cat "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/voice_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ip=$(cat "${servercfgfullpath}" | grep "host=" | awk -F "=" { print $2 }' )
 		ipsetinconfig=1
 		ipinconfigvar="voice_ip"
 	fi

From 745254777ac830f9cb41edee58bb73ca569a3261 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Tue, 18 Oct 2016 18:16:39 +0200
Subject: [PATCH 21/75] more elegant execname

---
 lgsm/functions/check_permissions.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index 946ddd301..d085b5ef3 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -83,7 +83,7 @@ fn_check_permissions(){
 	fi
 	# Check if executable is executable and attempt to fix it
 	# First get executable name
-	execname="$(echo "${executable}" | awk -F "/" '{ print $2 }')"
+	execname="$(basename "${executable}"
 	if [ -f "${executabledir}/${execname}" ]; then
 		# Get permission numbers on file under the form 775
 		execperm="$(stat -c %a "${executabledir}/${execname}")"

From 05ee12038ce7faa9275a099dda8e5ce5c67d04df Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Tue, 18 Oct 2016 22:13:54 +0100
Subject: [PATCH 22/75] fixed ip for mumble #1130

---
 lgsm/functions/info_config.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index 7ea395dc0..dc7486c85 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -320,7 +320,7 @@ fn_info_config_mumble(){
 		queryport="${port}"
 		servername="Mumble"
 	else
-		port=$(grep "port=" "${servercfgfullpath}" | awk -F "=" '{ print $2 }' )
+		port=$(grep "port" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/port//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		queryport="${port}"
 
 		# Not Set
@@ -328,7 +328,7 @@ fn_info_config_mumble(){
 		queryport=${queryport:-"64738"}
 		servername="Mumble Port ${port}"
 
-		ip=$(cat "${servercfgfullpath}" | grep "host=" | awk -F "=" { print $2 }' )
+		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		ipsetinconfig=1
 		ipinconfigvar="voice_ip"
 	fi

From e370cdd4b45c1dce2deec46ac44421bbcfe7e3f8 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 18:23:33 +0200
Subject: [PATCH 23/75] ordering & matching changes

---
 lgsm/functions/info_config.sh | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index dc7486c85..66e23134e 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -321,14 +321,12 @@ fn_info_config_mumble(){
 		servername="Mumble"
 	else
 		port=$(grep "port" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/port//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		queryport="${port}"
-
+		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		# Not Set
 		port=${port:-"64738"}
 		queryport=${queryport:-"64738"}
 		servername="Mumble Port ${port}"
-
-		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		# Misc variables
 		ipsetinconfig=1
 		ipinconfigvar="voice_ip"
 	fi

From 2653e003eaadbeed5aa2a963b7f5b7547bfa4b26 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 18:28:47 +0200
Subject: [PATCH 24/75] Ordering, spacing and comments

---
 lgsm/functions/info_config.sh | 41 ++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index 66e23134e..0bc4b945b 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -26,14 +26,15 @@ fn_info_config_avalanche(){
 		serverpassword=$(grep "Password" "${servercfgfullpath}" | sed -e 's/^ *//g' -e '/^--/d' -e 's/Password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		slots=$(grep "MaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 		port=$(grep "BindPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
-
+		ip=$(grep "BindIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/BindIP//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
 		port=${port:-"0"}
-
-		ip=$(grep "BindIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/BindIP//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
+		# Misc Variables
 		ipsetinconfig=1
 		ipinconfigvar="BindIP"
 	fi
@@ -53,14 +54,15 @@ fn_info_config_bf1942(){
 		slots=$(grep "game.serverMaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 		port=$(grep "game.serverPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 		queryport="22000"
-
+		ip=$(grep "game.serverIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/game.serverIP//g' | tr -d '=\";,:' | xargs)
+		
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
 		port=${port:-"0"}
-
-		ip=$(grep "game.serverIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/game.serverIP//g' | tr -d '=\";,:' | xargs)
+		
+		# Misc Variables
 		ipsetinconfig=1
 		ipinconfigvar="game.serverIP"
 	fi
@@ -111,7 +113,8 @@ fn_info_config_minecraft(){
 		port=$(grep "server-port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 		gamemode=$(grep "gamemode" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 		gameworld=$(grep "level-name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/level-name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-
+		ip=$(grep "server-ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/server-ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		rconpassword=${rconpassword:-"NOT SET"}
@@ -120,8 +123,8 @@ fn_info_config_minecraft(){
 		port=${port:-"NOT SET"}
 		gamemode=${gamemode:-"NOT SET"}
 		gameworld=${gameworld:-"NOT SET"}
-
-		ip=$(grep "server-ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/server-ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
+		# Misc Variables
 		ipsetinconfig=1
 		ipinconfigvar="server-ip"
 	fi
@@ -164,14 +167,15 @@ fn_info_config_quakelive(){
 		servername=$(grep "sv_hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set sv_hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		serverpassword=$(grep "g_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set g_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		slots=$(grep "sv_maxClients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
+		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 
 		# Not Set
 		rconpassword=${rconpassword:-"NOT SET"}
 		servername=${servername:-"NOT SET"}
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
-
-		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
+		# Misc Variables
 		ipsetinconfig=1
 		ipinconfigvar="set net_ip"
 	fi
@@ -190,7 +194,7 @@ fn_info_config_wolfensteinenemyterritory(){
 		servername=$(grep "set sv_hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set sv_hostname //g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		serverpassword=$(grep "set g_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set g_password //g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		slots=$(grep "set sv_maxclients" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]')
-
+		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 
 		# Not Set
 		rconpassword=${rconpassword:-"NOT SET"}
@@ -198,8 +202,8 @@ fn_info_config_wolfensteinenemyterritory(){
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
 		port=${port:-"27960"}
-
-		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
+		# Misc Variables
 		ipsetinconfig=1
 		ipinconfigvar="set net_ip"
 	fi
@@ -302,13 +306,14 @@ fn_info_config_teamspeak3(){
 		port=$(grep "default_voice_port" "${servercfgfullpath}" | tr -cd '[:digit:]')
 		queryport=$(grep "query_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 		fileport=$(grep "filetransfer_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
-
+		ip=$(grep "voice_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/voice_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
 		# Not Set
 		port=${port:-"9987"}
 		queryport=${queryport:-"10011"}
 		fileport=${fileport:-"30033"}
-
-		ip=$(grep "voice_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/voice_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
+		# Misc Variables
 		ipsetinconfig=1
 		ipinconfigvar="voice_ip"
 	fi
@@ -322,10 +327,12 @@ fn_info_config_mumble(){
 	else
 		port=$(grep "port" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/port//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		
 		# Not Set
 		port=${port:-"64738"}
 		queryport=${queryport:-"64738"}
 		servername="Mumble Port ${port}"
+		
 		# Misc variables
 		ipsetinconfig=1
 		ipinconfigvar="voice_ip"

From 4b4477199df02aed84f61a46aaf23d5894f159c5 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 18:31:33 +0200
Subject: [PATCH 25/75] closing ) is better after opening

---
 lgsm/functions/check_permissions.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index d085b5ef3..e8aa53d8a 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -83,7 +83,7 @@ fn_check_permissions(){
 	fi
 	# Check if executable is executable and attempt to fix it
 	# First get executable name
-	execname="$(basename "${executable}"
+	execname="$(basename "${executable})"
 	if [ -f "${executabledir}/${execname}" ]; then
 		# Get permission numbers on file under the form 775
 		execperm="$(stat -c %a "${executabledir}/${execname}")"

From 3aa5242cc564cc877513aee6826d48bf807386bf Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 18:34:07 +0200
Subject: [PATCH 26/75] syntax

---
 lgsm/functions/check_permissions.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index e8aa53d8a..0822c160e 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -83,7 +83,7 @@ fn_check_permissions(){
 	fi
 	# Check if executable is executable and attempt to fix it
 	# First get executable name
-	execname="$(basename "${executable})"
+	execname="$(basename "${executable}")"
 	if [ -f "${executabledir}/${execname}" ]; then
 		# Get permission numbers on file under the form 775
 		execperm="$(stat -c %a "${executabledir}/${execname}")"

From 60d4e9c84eccc0e918299976d700c15bd1deae81 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 19:05:26 +0200
Subject: [PATCH 27/75] Using awk for now

fixes #1130
---
 lgsm/functions/info_config.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index 0bc4b945b..00949c73f 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -325,8 +325,8 @@ fn_info_config_mumble(){
 		queryport="${port}"
 		servername="Mumble"
 	else
-		port=$(grep "port" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/port//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		port=$(grep "port=" "${servercfgfullpath}" | awk -F "=" '{ print $2 }' )
+		ip=$(grep "host=" "${servercfgfullpath}" | awk -F "=" '{ print $2 }' )
 		
 		# Not Set
 		port=${port:-"64738"}

From dcebda85ca7e90c67c2d3e52afd7e272584a7137 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 19:31:49 +0200
Subject: [PATCH 28/75] mumble has a config file

---
 lgsm/functions/install_config.sh | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 6cd4a7dc4..310399cca 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -270,7 +270,11 @@ elif [ "${gamename}" == "No More Room in Hell" ]; then
 	fn_default_config_remote
 	fn_set_config_vars
 elif [ "${gamename}" == "Mumble" ]; then
-	:
+	gamedirname="Mumble"
+	array_configs+=( murmur.ini )
+	fn_fetch_default_config
+	fn_default_config_remote
+	fn_set_config_vars
 elif [ "${gamename}" == "Natural Selection 2" ]; then
 	:
 elif [ "${gamename}" == "NS2: Combat" ]; then

From 475fdc0523a75ce2c0042e37190cddba853fa751 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 19:58:03 +0200
Subject: [PATCH 29/75] mumble has a console

Related #1136
---
 lgsm/functions/core_getopt.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh
index e23ad3111..8c8801a29 100644
--- a/lgsm/functions/core_getopt.sh
+++ b/lgsm/functions/core_getopt.sh
@@ -300,6 +300,8 @@ case "${getopt}" in
 		command_backup.sh;;
 	dev|dev-debug)
 		command_dev_debug.sh;;
+	c|console)
+		command_console.sh;;
 	i|install)
 		command_install.sh;;
 	dd|detect-deps)
@@ -329,6 +331,7 @@ case "${getopt}" in
 		echo -e "${blue}details\t${default}dt |Displays useful information about the server."
 		echo -e "${blue}postdetails\t${default}pd |Post stripped details to pastebin (for support)"
 		echo -e "${blue}backup\t${default}b  |Create archive of the server."
+		echo -e "${blue}debug\t${default}d  |See the output of the server directly to your terminal."
 		echo -e "${blue}install\t${default}i  |Install the server."
 	} | column -s $'\t' -t
 	esac

From 36c49850d16cb9bdea5912c04a74b887537cecd4 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 20:22:02 +0200
Subject: [PATCH 30/75] port is a variable

Partially fixes #1136
dev hardcoded stuff was still being in code
---
 lgsm/functions/check_status.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/check_status.sh b/lgsm/functions/check_status.sh
index f68fd9a52..08017c301 100644
--- a/lgsm/functions/check_status.sh
+++ b/lgsm/functions/check_status.sh
@@ -23,7 +23,7 @@ if [ "${gamename}" == "TeamSpeak 3" ]; then
 elif [ "${gamename}" == "Mumble" ]; then
 	# 1: Server is listening
 	# 0: Server is not listening, considered closed
-	mumblepid=$(netstat -nap  2>/dev/null | grep udp | grep 64738 | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }')
+	mumblepid=$(netstat -nap  2>/dev/null | grep udp | grep ${port} | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }')
 	if [ -z "${mumblepid}" ]; then
 		status=0
 	else

From 8c0f2b967cc969d2b11f80d1cf0a5e487c7581d9 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 20:27:23 +0200
Subject: [PATCH 31/75] get info_config.sh to run #1136

needed to get the port
---
 lgsm/functions/check_status.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lgsm/functions/check_status.sh b/lgsm/functions/check_status.sh
index 08017c301..4a8a381b4 100644
--- a/lgsm/functions/check_status.sh
+++ b/lgsm/functions/check_status.sh
@@ -21,6 +21,8 @@ if [ "${gamename}" == "TeamSpeak 3" ]; then
 	fi
 	
 elif [ "${gamename}" == "Mumble" ]; then
+	# Get config info
+	info_config.sh
 	# 1: Server is listening
 	# 0: Server is not listening, considered closed
 	mumblepid=$(netstat -nap  2>/dev/null | grep udp | grep ${port} | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }')

From 452d014ae05dbb1b152d46a53e64fda1c6120e3b Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 20:28:53 +0200
Subject: [PATCH 32/75] Fixes #1136

---
 lgsm/functions/command_stop.sh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lgsm/functions/command_stop.sh b/lgsm/functions/command_stop.sh
index 08464b405..489013e3d 100644
--- a/lgsm/functions/command_stop.sh
+++ b/lgsm/functions/command_stop.sh
@@ -245,8 +245,10 @@ fn_stop_teamspeak3(){
 }
 
 fn_stop_mumble(){
+	# Get needed port info
+	info_config.sh
 	fn_print_dots "Stopping ${servername}"
-	mumblepid=$(netstat -nap  2>/dev/null | grep udp | grep 64738 | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }')
+	mumblepid=$(netstat -nap  2>/dev/null | grep udp | grep "${port}" | grep murmur | awk '{ print $6 }' | awk -F'/' '{ print $1 }')
 	kill ${mumblepid}
 	sleep 1
 	check_status.sh

From 6c7ceb2fddc6924adfa2b5e9abb84174b5605656 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 21:22:11 +0200
Subject: [PATCH 33/75] cfg=servicename to prevent overwrite on update

servercfg="${servicename}.ini"
---
 Mumble/mumbleserver | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Mumble/mumbleserver b/Mumble/mumbleserver
index 4057d2825..9e2b022ec 100644
--- a/Mumble/mumbleserver
+++ b/Mumble/mumbleserver
@@ -59,7 +59,7 @@ filesdir="${rootdir}/serverfiles"
 systemdir="${filesdir}"
 executabledir="${filesdir}"
 executable="./murmur.x86"
-servercfg="murmur.ini"
+servercfg="${servicename}.ini"
 servercfgdefault="murmur.ini"
 servercfgdir="${filesdir}"
 servercfgfullpath="${servercfgdir}/${servercfg}"

From ebbe3f5a61ef96efc0270baabc33b322d52a965f Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 21:45:02 +0200
Subject: [PATCH 34/75] Don't start from tmux or screen

---
 lgsm/functions/command_start.sh | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh
index f7f324bf1..cb444ab5c 100644
--- a/lgsm/functions/command_start.sh
+++ b/lgsm/functions/command_start.sh
@@ -9,6 +9,23 @@ local commandname="START"
 local commandaction="Starting"
 local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 
+fn_check_is_in_tmux(){
+	if [ -n "${TMUX}" ];then
+		fn_print_fail_nl "Can't start a tmux session inside of a tmux session."
+		fn_script_log_fail "Can't start a tmux session inside of a tmux session."
+		fn_print_information_nl "LGSM already runs the server inside of a tmux session."
+		core_exit.sh
+	fi
+}
+fn_check_is_in_screen(){
+	if [ "$TERM" = "screen" ];then
+		fn_print_fail_nl "Can't start a tmux session inside of a screen session."
+		fn_script_log_fail "Can't start a tmux session inside of a screen session."
+		fn_print_information_nl "LGSM already runs the server inside of a tmux session."
+		core_exit.sh
+	fi
+}
+
 fn_start_teamspeak3(){
 	if [ ! -e "${servercfgfullpath}" ]; then
 		fn_print_warn_nl "${servercfgfullpath} is missing"
@@ -165,6 +182,8 @@ fn_start_tmux(){
 
 fn_print_dots "${servername}"
 sleep 1
+fn_check_is_in_tmux
+fn_check_is_in_screen
 check.sh
 fix.sh
 info_config.sh

From bea59e9cd101f5130aeaf9f45d7da5a351fda275 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 21:46:49 +0200
Subject: [PATCH 35/75] right script log

Fixes #1117
---
 lgsm/functions/command_start.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh
index cb444ab5c..9f5aa295a 100644
--- a/lgsm/functions/command_start.sh
+++ b/lgsm/functions/command_start.sh
@@ -12,7 +12,7 @@ local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 fn_check_is_in_tmux(){
 	if [ -n "${TMUX}" ];then
 		fn_print_fail_nl "Can't start a tmux session inside of a tmux session."
-		fn_script_log_fail "Can't start a tmux session inside of a tmux session."
+		fn_script_log_fatal "Can't start a tmux session inside of a tmux session."
 		fn_print_information_nl "LGSM already runs the server inside of a tmux session."
 		core_exit.sh
 	fi

From 2d86a9734072f3523956cf79df8cbbe0895e7777 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Wed, 19 Oct 2016 21:48:29 +0200
Subject: [PATCH 36/75] fn_script_log_fatal & message

---
 lgsm/functions/command_start.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh
index 9f5aa295a..f3a6afdc2 100644
--- a/lgsm/functions/command_start.sh
+++ b/lgsm/functions/command_start.sh
@@ -13,15 +13,15 @@ fn_check_is_in_tmux(){
 	if [ -n "${TMUX}" ];then
 		fn_print_fail_nl "Can't start a tmux session inside of a tmux session."
 		fn_script_log_fatal "Can't start a tmux session inside of a tmux session."
-		fn_print_information_nl "LGSM already runs the server inside of a tmux session."
+		fn_print_information_nl "LGSM already runs the server inside of a tmux session whenever it's possible."
 		core_exit.sh
 	fi
 }
 fn_check_is_in_screen(){
 	if [ "$TERM" = "screen" ];then
 		fn_print_fail_nl "Can't start a tmux session inside of a screen session."
-		fn_script_log_fail "Can't start a tmux session inside of a screen session."
-		fn_print_information_nl "LGSM already runs the server inside of a tmux session."
+		fn_script_log_fatal "Can't start a tmux session inside of a screen session."
+		fn_print_information_nl "LGSM already runs the server inside of a tmux session whenever it's possible."
 		core_exit.sh
 	fi
 }

From 83fdf38410660d618be4e8d7cf31a46be7b0cd8d Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Wed, 19 Oct 2016 22:47:39 +0100
Subject: [PATCH 37/75] Tidy up

---
 lgsm/functions/info_config.sh | 56 +++++++++++++++++------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index dc7486c85..d5f283404 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -27,15 +27,15 @@ fn_info_config_avalanche(){
 		slots=$(grep "MaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 		port=$(grep "BindPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 
+		ip=$(grep "BindIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/BindIP//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="BindIP"
+
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
 		port=${port:-"0"}
-
-		ip=$(grep "BindIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/BindIP//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ipsetinconfig=1
-		ipinconfigvar="BindIP"
 	fi
 }
 
@@ -54,15 +54,15 @@ fn_info_config_bf1942(){
 		port=$(grep "game.serverPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 		queryport="22000"
 
+		ip=$(grep "game.serverIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/game.serverIP//g' | tr -d '=\";,:' | xargs)
+		ipsetinconfig=1
+		ipinconfigvar="game.serverIP"
+
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
 		port=${port:-"0"}
-
-		ip=$(grep "game.serverIP" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/game.serverIP//g' | tr -d '=\";,:' | xargs)
-		ipsetinconfig=1
-		ipinconfigvar="game.serverIP"
 	fi
 }
 
@@ -112,6 +112,10 @@ fn_info_config_minecraft(){
 		gamemode=$(grep "gamemode" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 		gameworld=$(grep "level-name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/level-name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 
+		ip=$(grep "server-ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/server-ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="server-ip"
+
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		rconpassword=${rconpassword:-"NOT SET"}
@@ -121,9 +125,6 @@ fn_info_config_minecraft(){
 		gamemode=${gamemode:-"NOT SET"}
 		gameworld=${gameworld:-"NOT SET"}
 
-		ip=$(grep "server-ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/server-ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ipsetinconfig=1
-		ipinconfigvar="server-ip"
 	fi
 }
 
@@ -165,15 +166,15 @@ fn_info_config_quakelive(){
 		serverpassword=$(grep "g_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set g_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		slots=$(grep "sv_maxClients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 
+		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="set net_ip"
+
 		# Not Set
 		rconpassword=${rconpassword:-"NOT SET"}
 		servername=${servername:-"NOT SET"}
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
-
-		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ipsetinconfig=1
-		ipinconfigvar="set net_ip"
 	fi
 }
 
@@ -191,6 +192,9 @@ fn_info_config_wolfensteinenemyterritory(){
 		serverpassword=$(grep "set g_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set g_password //g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		slots=$(grep "set sv_maxclients" "${servercfgfullpath}" | grep -v "//" | tr -cd '[:digit:]')
 
+		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="set net_ip"
 
 		# Not Set
 		rconpassword=${rconpassword:-"NOT SET"}
@@ -198,10 +202,6 @@ fn_info_config_wolfensteinenemyterritory(){
 		serverpassword=${serverpassword:-"NOT SET"}
 		slots=${slots:-"0"}
 		port=${port:-"27960"}
-
-		ip=$(grep "set net_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set net_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ipsetinconfig=1
-		ipinconfigvar="set net_ip"
 	fi
 }
 
@@ -303,14 +303,14 @@ fn_info_config_teamspeak3(){
 		queryport=$(grep "query_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 		fileport=$(grep "filetransfer_port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
 
+		ip=$(grep "voice_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/voice_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="voice_ip"
+
 		# Not Set
 		port=${port:-"9987"}
 		queryport=${queryport:-"10011"}
 		fileport=${fileport:-"30033"}
-
-		ip=$(grep "voice_ip" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/voice_ip//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ipsetinconfig=1
-		ipinconfigvar="voice_ip"
 	fi
 }
 
@@ -323,14 +323,14 @@ fn_info_config_mumble(){
 		port=$(grep "port" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/port//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		queryport="${port}"
 
+		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="voice_ip"
+
 		# Not Set
 		port=${port:-"64738"}
 		queryport=${queryport:-"64738"}
 		servername="Mumble Port ${port}"
-
-		ip=$(grep "host=" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^;/d' -e 's/host=//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
-		ipsetinconfig=1
-		ipinconfigvar="voice_ip"
 	fi
 }
 
@@ -515,4 +515,4 @@ elif [ "${gamename}" == "7 Days To Die" ]; then
 	fn_info_config_sdtd
 elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	fn_info_config_wolfensteinenemyterritory
-fi
+fi
\ No newline at end of file

From 703bd28f2df67331352aa45dbdb9898a6b10aeb3 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Wed, 19 Oct 2016 23:03:37 +0100
Subject: [PATCH 38/75] tmuxception

---
 lgsm/functions/command_start.sh | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh
index f3a6afdc2..fdb4dcfc5 100644
--- a/lgsm/functions/command_start.sh
+++ b/lgsm/functions/command_start.sh
@@ -11,17 +11,21 @@ local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 
 fn_check_is_in_tmux(){
 	if [ -n "${TMUX}" ];then
-		fn_print_fail_nl "Can't start a tmux session inside of a tmux session."
-		fn_script_log_fatal "Can't start a tmux session inside of a tmux session."
-		fn_print_information_nl "LGSM already runs the server inside of a tmux session whenever it's possible."
+		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a tmux session."
+		fn_script_log_fatal "tmuxception error: Attempted to start a tmux session inside of a tmux session."
+		fn_print_information_nl "LGSM creates a tmux session when starting the server."
+		echo "It is not possible to run a tmux session inside another tmux session"
+		echo "https://github.com/GameServerManagers/LinuxGSM/wiki/Tmux#tmuxception"
 		core_exit.sh
 	fi
 }
 fn_check_is_in_screen(){
-	if [ "$TERM" = "screen" ];then
-		fn_print_fail_nl "Can't start a tmux session inside of a screen session."
-		fn_script_log_fatal "Can't start a tmux session inside of a screen session."
-		fn_print_information_nl "LGSM already runs the server inside of a tmux session whenever it's possible."
+	if [ "$TERM" == "screen" ];then
+		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a screen session."
+		fn_script_log_fatal "tmuxception error: Attempted to start a tmux session inside of a screen session."
+		fn_print_information_nl "LGSM creates a tmux session when starting the server."
+		echo "It is not possible to run a tmux session inside screen session"
+		echo "https://github.com/GameServerManagers/LinuxGSM/wiki/Tmux#tmuxception"
 		core_exit.sh
 	fi
 }

From 1a01ece469047fc2c7f657f994a033c63434b85d Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:15:52 +0200
Subject: [PATCH 39/75] Introducing the tmuxception !

---
 lgsm/functions/check_tmuxception.sh | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 lgsm/functions/check_tmuxception.sh

diff --git a/lgsm/functions/check_tmuxception.sh b/lgsm/functions/check_tmuxception.sh
new file mode 100644
index 000000000..4dfbd2a16
--- /dev/null
+++ b/lgsm/functions/check_tmuxception.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+# LGSM check_config.sh function
+# Author: Daniel Gibbs
+# Contributor: UltimateByte
+# Website: https://gameservermanagers.com
+# Description: Checks if run from tmux or screen
+
+local commandname="check"
+
+fn_check_is_in_tmux(){
+  if [ -n "${TMUX}" ];then
+		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a tmux session."
+		fn_script_log_fatal "tmuxception error: Attempted to start a tmux session inside of a tmux session."
+		fn_print_information_nl "LGSM creates a tmux session when starting the server."
+		echo "It is not possible to run a tmux session inside another tmux session"
+		echo "https://github.com/GameServerManagers/LinuxGSM/wiki/Tmux#tmuxception"
+		core_exit.sh
+	fi
+}
+fn_check_is_in_screen(){
+	if [ "$TERM" == "screen" ];then
+		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a screen session."
+		fn_script_log_fatal "tmuxception error: Attempted to start a tmux session inside of a screen session."
+		fn_print_information_nl "LGSM creates a tmux session when starting the server."
+		echo "It is not possible to run a tmux session inside screen session"
+		echo "https://github.com/GameServerManagers/LinuxGSM/wiki/Tmux#tmuxception"
+		core_exit.sh
+	fi
+}

From 6fec42b7c18eba1862c8c6d0fba0067dbbd6cc23 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:16:44 +0200
Subject: [PATCH 40/75] tmuxception moved to check_tmuxception.sh

---
 lgsm/functions/command_start.sh | 23 -----------------------
 1 file changed, 23 deletions(-)

diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh
index fdb4dcfc5..f7f324bf1 100644
--- a/lgsm/functions/command_start.sh
+++ b/lgsm/functions/command_start.sh
@@ -9,27 +9,6 @@ local commandname="START"
 local commandaction="Starting"
 local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
 
-fn_check_is_in_tmux(){
-	if [ -n "${TMUX}" ];then
-		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a tmux session."
-		fn_script_log_fatal "tmuxception error: Attempted to start a tmux session inside of a tmux session."
-		fn_print_information_nl "LGSM creates a tmux session when starting the server."
-		echo "It is not possible to run a tmux session inside another tmux session"
-		echo "https://github.com/GameServerManagers/LinuxGSM/wiki/Tmux#tmuxception"
-		core_exit.sh
-	fi
-}
-fn_check_is_in_screen(){
-	if [ "$TERM" == "screen" ];then
-		fn_print_fail_nl "tmuxception error: Sorry Cobb you cannot start a tmux session inside of a screen session."
-		fn_script_log_fatal "tmuxception error: Attempted to start a tmux session inside of a screen session."
-		fn_print_information_nl "LGSM creates a tmux session when starting the server."
-		echo "It is not possible to run a tmux session inside screen session"
-		echo "https://github.com/GameServerManagers/LinuxGSM/wiki/Tmux#tmuxception"
-		core_exit.sh
-	fi
-}
-
 fn_start_teamspeak3(){
 	if [ ! -e "${servercfgfullpath}" ]; then
 		fn_print_warn_nl "${servercfgfullpath} is missing"
@@ -186,8 +165,6 @@ fn_start_tmux(){
 
 fn_print_dots "${servername}"
 sleep 1
-fn_check_is_in_tmux
-fn_check_is_in_screen
 check.sh
 fix.sh
 info_config.sh

From 4ff780a194eac279f289ebda640cdfb7f177c716 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:29:23 +0200
Subject: [PATCH 41/75] welcome tmuxception fixes #1117

---
 lgsm/functions/check.sh | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lgsm/functions/check.sh b/lgsm/functions/check.sh
index 751652c2f..25fead75b 100644
--- a/lgsm/functions/check.sh
+++ b/lgsm/functions/check.sh
@@ -11,6 +11,7 @@ local commandname="CHECK"
 # check.sh selects which checks to run by using arrays
 
 check_root.sh
+check_tmuxception.sh
 check_permissions.sh
 
 if [ "${function_selfname}" != "command_install.sh" ]&&[ "${function_selfname}" != "command_update_functions.sh" ]; then

From 8702431d33f6493d5989dcea6adcb0ea07a383e0 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:32:51 +0200
Subject: [PATCH 42/75] Fixes #1117

---
 lgsm/functions/core_functions.sh | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lgsm/functions/core_functions.sh b/lgsm/functions/core_functions.sh
index 987ffcde9..5a38a1183 100644
--- a/lgsm/functions/core_functions.sh
+++ b/lgsm/functions/core_functions.sh
@@ -116,7 +116,7 @@ fn_fetch_core_dl
 }
 
 
-# Command
+# Commands
 
 command_console.sh(){
 functionfile="${FUNCNAME}"
@@ -263,6 +263,11 @@ functionfile="${FUNCNAME}"
 fn_fetch_function
 }
 
+check_tmuxception.sh(){
+functionfile="${FUNCNAME}"
+fn_fetch_function
+}
+
 
 # Compress
 
@@ -299,6 +304,7 @@ functionfile="${FUNCNAME}"
 fn_fetch_function
 }
 
+
 # Fix
 
 fix.sh(){

From 4aa8544dfadeed74c1aaf62f8fe7809cf8db6d95 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Wed, 19 Oct 2016 23:32:53 +0100
Subject: [PATCH 43/75] Its called folders in Windows & directorys in Linux

---
 lgsm/functions/check_permissions.sh |  4 ++--
 lgsm/functions/command_fastdl.sh    | 24 ++++++++++++------------
 lgsm/functions/core_getopt.sh       |  2 +-
 lgsm/functions/install_config.sh    |  4 ++--
 lgsm/functions/logs.sh              |  4 ++--
 5 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index 0822c160e..a99bb0b7b 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -3,7 +3,7 @@
 # Author: Daniel Gibbs
 # Contributor: UltimateByte
 # Website: https://gameservermanagers.com
-# Description: Checks ownership & permissions of scripts, files and folders.
+# Description: Checks ownership & permissions of scripts, files and directorys.
 
 local commandname="CHECK"
 local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
@@ -66,7 +66,7 @@ fn_check_permissions(){
 
 	# Check rootdir permissions
 	if [ -n "${rootdir}" ]; then
-		# Get permission numbers on folder under the form 775
+		# Get permission numbers on directory under the form 775
 		rootdirperm="$(stat -c %a "${rootdir}")"
 		# Grab the first and second digit for user and group permission
 		userrootdirperm="${rootdirperm:0:1}"
diff --git a/lgsm/functions/command_fastdl.sh b/lgsm/functions/command_fastdl.sh
index f2728ea74..4afe3ba60 100644
--- a/lgsm/functions/command_fastdl.sh
+++ b/lgsm/functions/command_fastdl.sh
@@ -3,7 +3,7 @@
 # Author: Daniel Gibbs
 # Contributor: UltimateByte
 # Website: https://gameservermanagers.com
-# Description: Creates a FastDL folder.
+# Description: Creates a FastDL directory.
 
 local commandname="FASTDL"
 local commandaction="FastDL"
@@ -52,7 +52,7 @@ fn_fastdl_init(){
 	done
 	fn_script_log "Initiating FastDL creation"
 
-	# Check and create folders
+	# Check and create directorys
 	if [ ! -d "${webdir}" ]; then
 		echo ""
 		fn_print_info "Creating FastDL directories"
@@ -67,7 +67,7 @@ fn_fastdl_init(){
 		echo -en "\n"
 	fi
 	if [ ! -d "${fastdldir}" ]; then
-		# No folder, won't ask for removing old ones
+		# No directory, won't ask for removing old ones
 		newfastdl=1
 		fn_print_dots "Creating fastdl directory"
 		sleep 0.5
@@ -88,7 +88,7 @@ fn_fastdl_config(){
 	fn_script_log "Configuration"
 	sleep 2
 	echo -en "\n"
-	# Prompt for clearing old files if folder was already here
+	# Prompt for clearing old files if directory was already here
 	if [ -n "${newfastdl}" ] && [ "${newfastdl}" == "0" ]; then
 		fn_print_dots
 		while true; do
@@ -133,12 +133,12 @@ fn_fastdl_gmod_config(){
 fn_clear_old_fastdl(){
 	# Clearing old FastDL if user answered yes
 	if [ "${clearoldfastdl}" == "on" ]; then
-		fn_print_info "Clearing existing FastDL folder"
-		fn_script_log "Clearing existing FastDL folder"
+		fn_print_info "Clearing existing FastDL directory"
+		fn_script_log "Clearing existing FastDL directory"
 		sleep 0.5
 		rm -R "${fastdldir:?}"/*
-		fn_print_ok "Old FastDL folder cleared"
-		fn_script_log "Old FastDL folder cleared"
+		fn_print_ok "Old FastDL directory cleared"
+		fn_script_log "Old FastDL directory cleared"
 		sleep 1
 		echo -en "\n"
 	fi
@@ -152,7 +152,7 @@ fn_gmod_fastdl(){
 	sleep 1
 	echo -en "\n"
 
-	# No choice to cd to the directory, as find can't then display relative folder
+	# No choice to cd to the directory, as find can't then display relative directory
 	cd "${systemdir}"
 
 	# Map Files
@@ -221,7 +221,7 @@ fn_gmod_fastdl(){
 	# Going back to rootdir in order to prevent mistakes
 	cd "${rootdir}"
 
-	# Correct addons folder structure for FastDL
+	# Correct addons directory structure for FastDL
 	if [ -d "${fastdldir}/addons" ]; then
 		fn_print_info "Adjusting addons' file structure"
 		fn_script_log "Adjusting addon's file structure"
@@ -233,7 +233,7 @@ fn_gmod_fastdl(){
 		echo -en "\n"
 	fi
 
-	# Correct content that may be into a lua folder by mistake like some darkrpmodification addons
+	# Correct content that may be into a lua directory by mistake like some darkrpmodification addons
 	if [ -d "${fastdldir}/lua" ]; then
 		fn_print_dots "Typical DarkRP shit detected, fixing"
 		sleep 2
@@ -244,7 +244,7 @@ fn_gmod_fastdl(){
 	fi
 }
 
-# Generate lua file that will force download any file into the FastDL folder
+# Generate lua file that will force download any file into the FastDL directory
 fn_lua_fastdl(){
 	# Remove lua file if luaressource is turned off and file exists
 	echo ""
diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh
index 8c8801a29..217650dbc 100644
--- a/lgsm/functions/core_getopt.sh
+++ b/lgsm/functions/core_getopt.sh
@@ -408,7 +408,7 @@ case "${getopt}" in
 		echo -e "${blue}debug\t${default}d  |See the output of the server directly to your terminal."
 		echo -e "${blue}install\t${default}i  |Install the server."
 		echo -e "${blue}auto-install\t${default}ai |Install the server, without prompts."
-		echo -e "${blue}fastdl\t${default}fd |Generates or update a FastDL folder for your server."
+		echo -e "${blue}fastdl\t${default}fd |Generates or update a FastDL directory for your server."
 	} | column -s $'\t' -t
 	esac
 }
diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 310399cca..5c241aec5 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -39,8 +39,8 @@ fn_set_config_vars(){
 # Checks if cfg dir exists, creates it if it doesn't
 fn_check_cfgdir(){
 	if [ ! -d "${servercfgdir}" ]; then
-		echo "creating ${servercfgdir} config folder."
-		fn_script_log_info "creating ${servercfgdir} config folder."
+		echo "creating ${servercfgdir} config directory."
+		fn_script_log_info "creating ${servercfgdir} config directory."
 		mkdir -pv "${servercfgdir}"
 	fi
 }
diff --git a/lgsm/functions/logs.sh b/lgsm/functions/logs.sh
index b31bdc102..4bf9ab903 100644
--- a/lgsm/functions/logs.sh
+++ b/lgsm/functions/logs.sh
@@ -15,7 +15,7 @@ if [ -n "${consolelog}" ]; then
 	fi
 fi
 
-# For games not displaying a console, and having logs into their game folder
+# For games not displaying a console, and having logs into their game directory
 if [ "${function_selfname}" == "command_start.sh" ] && [ -n "${gamelogfile}" ]; then
 	if [ -n "$(find "${systemdir}" -name "gamelog*.log")" ]; then
 		fn_print_info "Moving game logs to ${gamelogdir}"
@@ -86,7 +86,7 @@ if [ $(find "${scriptlogdir}"/ -type f -mtime +"${logdays}"|wc -l) -ne "0" ]; th
 		find "${legacyserverlogdir}"/ -type f -mtime +"${logdays}"| tee >> "${scriptlog}"
 		legacycount=$(find "${legacyserverlogdir}"/ -type f -mtime +"${logdays}"|wc -l)
 		find "${legacyserverlogdir}"/ -mtime +"${logdays}" -type f -exec rm -f {} \;
-		# Remove folder if empty
+		# Remove directory if empty
 		if [ ! "$(ls -A "${legacyserverlogdir}")" ]; then
 		rm -rf "${legacyserverlogdir}"
 		fi

From f3b128a0022cb3e578e90a34d20e9e837d5fa990 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Wed, 19 Oct 2016 23:35:08 +0100
Subject: [PATCH 44/75] Bad spelling: directories not directorys

---
 lgsm/functions/check_permissions.sh | 2 +-
 lgsm/functions/command_fastdl.sh    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lgsm/functions/check_permissions.sh b/lgsm/functions/check_permissions.sh
index a99bb0b7b..1411e649c 100644
--- a/lgsm/functions/check_permissions.sh
+++ b/lgsm/functions/check_permissions.sh
@@ -3,7 +3,7 @@
 # Author: Daniel Gibbs
 # Contributor: UltimateByte
 # Website: https://gameservermanagers.com
-# Description: Checks ownership & permissions of scripts, files and directorys.
+# Description: Checks ownership & permissions of scripts, files and directories.
 
 local commandname="CHECK"
 local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
diff --git a/lgsm/functions/command_fastdl.sh b/lgsm/functions/command_fastdl.sh
index 4afe3ba60..c66834b98 100644
--- a/lgsm/functions/command_fastdl.sh
+++ b/lgsm/functions/command_fastdl.sh
@@ -52,7 +52,7 @@ fn_fastdl_init(){
 	done
 	fn_script_log "Initiating FastDL creation"
 
-	# Check and create directorys
+	# Check and create directories
 	if [ ! -d "${webdir}" ]; then
 		echo ""
 		fn_print_info "Creating FastDL directories"

From b7b2d6e3788319f03075a7c39e96668be5253f31 Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:38:07 +0200
Subject: [PATCH 45/75] run the tmuxception #1117

---
 lgsm/functions/check_tmuxception.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lgsm/functions/check_tmuxception.sh b/lgsm/functions/check_tmuxception.sh
index 4dfbd2a16..d23fd88a4 100644
--- a/lgsm/functions/check_tmuxception.sh
+++ b/lgsm/functions/check_tmuxception.sh
@@ -27,3 +27,6 @@ fn_check_is_in_screen(){
 		core_exit.sh
 	fi
 }
+
+fn_check_is_in_tmux
+fn_check_is_in_screen

From 25499860b7b886a75552ca13fedba8e76d19b39e Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:40:50 +0200
Subject: [PATCH 46/75] check_tmux.sh has moved to check_deps.sh

Script doesn't exist anymore
---
 lgsm/functions/core_functions.sh | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/lgsm/functions/core_functions.sh b/lgsm/functions/core_functions.sh
index 5a38a1183..9456f0955 100644
--- a/lgsm/functions/core_functions.sh
+++ b/lgsm/functions/core_functions.sh
@@ -258,11 +258,6 @@ functionfile="${FUNCNAME}"
 fn_fetch_function
 }
 
-check_tmux.sh(){
-functionfile="${FUNCNAME}"
-fn_fetch_function
-}
-
 check_tmuxception.sh(){
 functionfile="${FUNCNAME}"
 fn_fetch_function

From 5c5ad3ea03d90ceac0dc53717d749f5ccefc47aa Mon Sep 17 00:00:00 2001
From: UltimateByte <robin.labadie@gmail.com>
Date: Thu, 20 Oct 2016 00:43:05 +0200
Subject: [PATCH 47/75] fix_ut99.sh has moved in another function

---
 lgsm/functions/core_functions.sh | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/lgsm/functions/core_functions.sh b/lgsm/functions/core_functions.sh
index 9456f0955..f5ba4ce9e 100644
--- a/lgsm/functions/core_functions.sh
+++ b/lgsm/functions/core_functions.sh
@@ -544,11 +544,6 @@ functionfile="${FUNCNAME}"
 fn_fetch_function
 }
 
-fix_ut99.sh(){
-functionfile="${FUNCNAME}"
-fn_fetch_function
-}
-
 # Calls the global Ctrl-C trap
 core_trap.sh
 

From 3ed59a5dfa0a023e12d9922b01db6996cd7885a8 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 20:24:56 +0100
Subject: [PATCH 48/75] Natural Selection 2 requires 1GB ram minimum

---
 lgsm/functions/check_system_requirements.sh | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/lgsm/functions/check_system_requirements.sh b/lgsm/functions/check_system_requirements.sh
index a46c3d0e3..3040a8406 100644
--- a/lgsm/functions/check_system_requirements.sh
+++ b/lgsm/functions/check_system_requirements.sh
@@ -14,14 +14,13 @@ info_distro.sh
 if [ "${gamename}" == "Rust" ]; then
 	ramrequirementmb="4000"
 	ramrequirementgb="4"
-fi
-
-if [ "${gamename}" == "ARMA 3" ]; then
+elif [ "${gamename}" == "ARMA 3" ]; then
 	ramrequirementmb="1000"
 	ramrequirementgb="1"
-fi
-
-if [ "${gamename}" == "Minecraft" ]; then
+elif [ "${gamename}" == "Minecraft" ]; then
+	ramrequirementmb="1000"
+	ramrequirementgb="1"
+elif [ "${gamename}" == "Natural Selection 2" ]||[ "${gamename}" == "NS2: Combat" ]; then
 	ramrequirementmb="1000"
 	ramrequirementgb="1"
 fi

From 11f4a303565671d57446905966d4b0ce2d2f2896 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 20:30:08 +0100
Subject: [PATCH 49/75] added servercfgfullpath dir check for NS2

---
 lgsm/functions/command_details.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index 2ae4632f0..f488f3ea8 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -227,6 +227,8 @@ fn_details_script(){
 		if [ -n "${servercfgfullpath}" ]; then
 			if [ -f "${servercfgfullpath}" ]; then
 				echo -e "${blue}Config file:\t${default}${servercfgfullpath}"
+			elif [ -d "${servercfgfullpath}" ]; then
+				echo -e "${blue}Config dir:\t${default}${servercfgfullpath}"
 			else
 				echo -e "${blue}Config file:\t${default}${red}${servercfgfullpath}${default} (${red}FILE MISSING${default})"
 			fi

From e808d04b035d43067530ef9fc2047759e26741b4 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 20:55:22 +0100
Subject: [PATCH 50/75] tab

---
 lgsm/functions/command_details.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index f488f3ea8..9cf79be84 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -428,7 +428,7 @@ fn_details_source(){
 		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
 		echo -e "> Game/RCON\tINBOUND\t${port}\ttcp/udp"
 		if [ -n "${sourcetvport}" ]; then
-		        echo -e "> SourceTV\tINBOUND\t${sourcetvport}\tudp"
+			echo -e "> SourceTV\tINBOUND\t${sourcetvport}\tudp"
 		fi
 		echo -e "< Client\tOUTBOUND\t${clientport}\tudp"
 	} | column -s $'\t' -t

From d202f0d7964229de39ccc1d20ca630f8c37b61c4 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 20:57:08 +0100
Subject: [PATCH 51/75] added spark

---
 lgsm/functions/info_parms.sh | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/lgsm/functions/info_parms.sh b/lgsm/functions/info_parms.sh
index 7be827c7b..7cfdd8b8b 100644
--- a/lgsm/functions/info_parms.sh
+++ b/lgsm/functions/info_parms.sh
@@ -26,17 +26,6 @@ fn_info_config_quakelive(){
 	rconpassword=${rconpassword:-"NOT SET"}
 }
 
-fn_info_config_realvirtuality(){
-	port=$(grep "^serverport=" "${servercfgfullpath}" | tr -cd '[:digit:]')
-	queryport=$(grep "^steamqueryport=" "${servercfgfullpath}" | tr -cd '[:digit:]')
-	masterport=$(grep "^steamport=" "${servercfgfullpath}" | tr -cd '[:digit:]')
-
-	# Not Set
-	port=${port:-"2302"}
-	queryport=${queryport:-"2303"}
-	masterport=${masterport:-"2304"}
-}
-
 fn_info_config_source(){
 	defaultmap=${defaultmap:-"NOT SET"}
 	maxplayers=${maxplayers:-"0"}
@@ -44,6 +33,16 @@ fn_info_config_source(){
 	clientport=${clientport:-"0"}
 }
 
+fn_info_config_spark(){
+	# Not Set
+	port=${port:-"0"}
+	queryport=$((port + 1))
+	maxplayers=${maxplayers:-"0"}
+	webadminuser=${webadminuser:-"NOT SET"}
+	webadminpass=${webadminpass:-"NOT SET"}
+	webadminport=${webadminport:-"0"}
+}
+
 fn_info_config_teeworlds(){
 	if [ ! -f "${servercfgfullpath}" ]; then
 		servername="unnamed server"
@@ -139,6 +138,9 @@ elif [ "${engine}" == "seriousengine35" ]; then
 # Source Engine Games
 elif [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then
 	fn_info_config_source
+# Spark
+elif [ "${engine}" == "spark" ]; then
+	fn_info_config_spark
 # Teeworlds
 elif [ "${engine}" == "teeworlds" ]; then
 	fn_info_config_teeworlds

From bde812f8baa459525e5988fd7af0a157436c2f1e Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 21:45:00 +0100
Subject: [PATCH 52/75] Renamed to Quake 3

---
 Quake3/q3server                        | 4 ++--
 lgsm/functions/command_install.sh      | 2 +-
 lgsm/functions/install_server_files.sh | 8 ++------
 3 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/Quake3/q3server b/Quake3/q3server
index 4e722b08e..5e4b69c28 100644
--- a/Quake3/q3server
+++ b/Quake3/q3server
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Quake 3: Team Arena
+# Quake 3
 # Server Management Script
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
@@ -45,7 +45,7 @@ githubbranch="master"
 
 # Server Details
 servicename="quake3-server"
-gamename="Quake 3: Team Arena"
+gamename="Quake 3"
 engine="idtech3"
 
 # Directories
diff --git a/lgsm/functions/command_install.sh b/lgsm/functions/command_install.sh
index 23a20defd..99f8d696f 100644
--- a/lgsm/functions/command_install.sh
+++ b/lgsm/functions/command_install.sh
@@ -18,7 +18,7 @@ check_deps.sh
 if [ "${gamename}" == "Unreal Tournament 2004" ]; then
 	install_server_files.sh
 	install_ut2k4_key.sh
-elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Quake 3: Team Arena" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Mumble" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
+elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Quake 3" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Mumble" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	installer=1
 	install_server_files.sh
 elif [ -n "${appid}" ]; then
diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index d4bc66d12..1a23ef6e5 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -22,13 +22,9 @@ fn_install_server_files(){
 	elif [ "${gamename}" == "Unreal Tournament" ]; then
 		fileurl="http://files.gameservermanagers.com/UnrealTournament/UnrealTournament-Server-XAN-3045522-Linux.zip"; filedir="${tmpdir}"; filename="UnrealTournament-Server-XAN-3045522-Linux.zip";  executecmd="noexecute" run="norun"; force="noforce"; md5="553fed5645a9fc623e92563049bf79f6"
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
-<<<<<<< HEAD
-		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="254533d4643ad2fe6f1f3ecc4f6b5e5f"
-	elif [ "${gamename}" == "Quake 3: Team Arena" ]; then
-		fileurl="https://s3.amazonaws.com/linuxgsm/quake3-1.32b-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32b-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="8fe61809ade4f9cce24e520043afe91b"
-=======
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${tmpdir}"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="ea227a150300abe346e757380325f84c"
->>>>>>> refs/remotes/origin/master
+	elif [ "${gamename}" == "Quake 3" ]; then
+		fileurl="http://files.gameservermanagers.com/Quake3/quake3-1.32b-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32b-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="8fe61809ade4f9cce24e520043afe91b"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 	fn_dl_extract "${filedir}" "${filename}" "${filesdir}"

From 64643b3dd6e0e3da70fa730c008acf1867b2876b Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 22:02:49 +0100
Subject: [PATCH 53/75] Glibc version for Quake 3

---
 lgsm/functions/info_glibc.sh | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lgsm/functions/info_glibc.sh b/lgsm/functions/info_glibc.sh
index 655402584..b61fe21d8 100644
--- a/lgsm/functions/info_glibc.sh
+++ b/lgsm/functions/info_glibc.sh
@@ -41,6 +41,9 @@ elif [ "${gamename}" == "Mumble" ]; then
 elif [ "${gamename}" == "No More Room in Hell" ]; then
 	glibcrequired="2.15"
 	glibcfix="yes"
+elif [ "${gamename}" == "Quake 3" ]; then
+	glibcrequired="2.1"
+	glibcfix="no"
 elif [ "${gamename}" == "Quake Live" ]; then
 	glibcrequired="2.15"
 	glibcfix="no"

From a4dcf379ee0e3764d072dce1eff1fdf8f50b3d38 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 22:23:07 +0100
Subject: [PATCH 54/75] Renamed to Quake 3: Arena

---
 Quake3/q3server                        | 4 ++--
 lgsm/functions/command_install.sh      | 2 +-
 lgsm/functions/info_glibc.sh           | 2 +-
 lgsm/functions/install_server_files.sh | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/Quake3/q3server b/Quake3/q3server
index 5e4b69c28..8aff1501e 100644
--- a/Quake3/q3server
+++ b/Quake3/q3server
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Quake 3
+# Quake 3: Arena
 # Server Management Script
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
@@ -45,7 +45,7 @@ githubbranch="master"
 
 # Server Details
 servicename="quake3-server"
-gamename="Quake 3"
+gamename="Quake 3: Arena"
 engine="idtech3"
 
 # Directories
diff --git a/lgsm/functions/command_install.sh b/lgsm/functions/command_install.sh
index 99f8d696f..2a2037daf 100644
--- a/lgsm/functions/command_install.sh
+++ b/lgsm/functions/command_install.sh
@@ -18,7 +18,7 @@ check_deps.sh
 if [ "${gamename}" == "Unreal Tournament 2004" ]; then
 	install_server_files.sh
 	install_ut2k4_key.sh
-elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Quake 3" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Mumble" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
+elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Quake 3: Arena" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament 3" ]||[ "${gamename}" == "Unreal Tournament" ]||[ "${gamename}" == "TeamSpeak 3" ]||[ "${gamename}" == "Mumble" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	installer=1
 	install_server_files.sh
 elif [ -n "${appid}" ]; then
diff --git a/lgsm/functions/info_glibc.sh b/lgsm/functions/info_glibc.sh
index b61fe21d8..c1d7cb1cf 100644
--- a/lgsm/functions/info_glibc.sh
+++ b/lgsm/functions/info_glibc.sh
@@ -41,7 +41,7 @@ elif [ "${gamename}" == "Mumble" ]; then
 elif [ "${gamename}" == "No More Room in Hell" ]; then
 	glibcrequired="2.15"
 	glibcfix="yes"
-elif [ "${gamename}" == "Quake 3" ]; then
+elif [ "${gamename}" == "Quake 3: Arena" ]; then
 	glibcrequired="2.1"
 	glibcfix="no"
 elif [ "${gamename}" == "Quake Live" ]; then
diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index 1a23ef6e5..e14a0521a 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -23,7 +23,7 @@ fn_install_server_files(){
 		fileurl="http://files.gameservermanagers.com/UnrealTournament/UnrealTournament-Server-XAN-3045522-Linux.zip"; filedir="${tmpdir}"; filename="UnrealTournament-Server-XAN-3045522-Linux.zip";  executecmd="noexecute" run="norun"; force="noforce"; md5="553fed5645a9fc623e92563049bf79f6"
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${tmpdir}"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="ea227a150300abe346e757380325f84c"
-	elif [ "${gamename}" == "Quake 3" ]; then
+	elif [ "${gamename}" == "Quake 3: Arena" ]; then
 		fileurl="http://files.gameservermanagers.com/Quake3/quake3-1.32b-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32b-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="8fe61809ade4f9cce24e520043afe91b"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"

From ba8d4a1c9eb222e4d7551fe716e7246305feb763 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 22:23:22 +0100
Subject: [PATCH 55/75] added Quake 3 Arena Config

---
 lgsm/functions/install_config.sh | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 13db1215b..e61496414 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -291,6 +291,12 @@ elif [ "${gamename}" == "Project Zomboid" ]; then
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
+elif [ "${gamename}" == "Quake 3: Arena" ]; then
+	gamedirname="QuakeLive"
+	array_configs+=( server.cfg )
+	fn_fetch_default_config
+	fn_default_config_remote
+	fn_set_config_vars
 elif [ "${gamename}" == "Quake Live" ]; then
 	gamedirname="QuakeLive"
 	array_configs+=( server.cfg )

From 6bee0b423cbbbb52283c51878a2808740590044f Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 22:24:30 +0100
Subject: [PATCH 56/75] Added quake 3 arena details

---
 lgsm/functions/command_details.sh | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index 9cf79be84..fe37083df 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -386,6 +386,15 @@ fn_details_refractor(){
 	} | column -s $'\t' -t
 }
 
+fn_details_quake3(){
+	echo -e "netstat -atunp | grep q3ded"
+	echo -e ""
+	{
+		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+		echo -e "> Game\tINBOUND\t${port}\tudp"
+	} | column -s $'\t' -t
+}
+
 fn_details_quakelive(){
 	echo -e "netstat -atunp | grep qzeroded"
 	echo -e ""
@@ -665,6 +674,8 @@ fn_display_details() {
 		fn_details_ark
 	elif [ "${gamename}" == "Hurtworld" ]; then
 		fn_details_hurtworld
+	elif [ "${gamename}" == "Quake 3: Arena" ]; then
+		fn_details_quake3
 	elif [ "${gamename}" == "Quake Live" ]; then
 		fn_details_quakelive
 	elif [ "${gamename}" == "TeamSpeak 3" ]; then

From 61d846b985d055e6de421d3cfa3c12eab15c3031 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 23:07:02 +0100
Subject: [PATCH 57/75] Updated config info

---
 Quake3/q3server                  | 3 ++-
 lgsm/functions/install_config.sh | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Quake3/q3server b/Quake3/q3server
index 8aff1501e..6c2e4d844 100644
--- a/Quake3/q3server
+++ b/Quake3/q3server
@@ -55,14 +55,15 @@ lockselfname=".${servicename}.lock"
 lgsmdir="${rootdir}/lgsm"
 functionsdir="${lgsmdir}/functions"
 libdir="${lgsmdir}/lib"
+tmpdir="${lgsmdir}/tmp"
 filesdir="${rootdir}/serverfiles"
 systemdir="${filesdir}/baseq3"
 executabledir="${filesdir}"
 executable="./q3ded"
 servercfg="${servicename}.cfg"
+servercfgdefault="server.cfg"
 servercfgdir="${systemdir}"
 servercfgfullpath="${servercfgdir}/${servercfg}"
-servercfgdefault="${servercfgdir}/lgsm-default.cfg"
 backupdir="${rootdir}/backups"
 
 # Logging
diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index e61496414..d3828a5eb 100644
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -292,7 +292,7 @@ elif [ "${gamename}" == "Project Zomboid" ]; then
 	fn_default_config_remote
 	fn_set_config_vars
 elif [ "${gamename}" == "Quake 3: Arena" ]; then
-	gamedirname="QuakeLive"
+	gamedirname="Quake3Arena"
 	array_configs+=( server.cfg )
 	fn_fetch_default_config
 	fn_default_config_remote

From 7c157a8edc1235a7049488bb2a2a68993949e01d Mon Sep 17 00:00:00 2001
From: Alexander Hurd <hurdad@gmail.com>
Date: Fri, 21 Oct 2016 07:31:29 -0400
Subject: [PATCH 58/75] updating to quake3-1.32c

---
 lgsm/functions/install_server_files.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index e14a0521a..0bcdcc90c 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -24,7 +24,7 @@ fn_install_server_files(){
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${tmpdir}"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="ea227a150300abe346e757380325f84c"
 	elif [ "${gamename}" == "Quake 3: Arena" ]; then
-		fileurl="http://files.gameservermanagers.com/Quake3/quake3-1.32b-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32b-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="8fe61809ade4f9cce24e520043afe91b"
+		fileurl="https://s3.amazonaws.com/linuxgsm/quake3-1.32c-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32c-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="fd7258d827474f67663dda297bff4306"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 	fn_dl_extract "${filedir}" "${filename}" "${filesdir}"

From 31ff13993c12629d3a09b8676e49cda16dd81ebc Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Thu, 20 Oct 2016 23:43:10 +0100
Subject: [PATCH 59/75] Added Quake 3

---
 lgsm/functions/info_config.sh | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index d5f283404..846dec349 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -154,6 +154,26 @@ fn_info_config_projectzomboid(){
 	fi
 }
 
+fn_info_config_quake3(){
+	if [ ! -f "${servercfgfullpath}" ]; then
+		rconpassword="${unavailable}"
+		servername="${unavailable}"
+		serverpassword="${unavailable}"
+		slots="${zero}"
+	else
+		rconpassword=$(grep "zmq_rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set zmq_rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		servername=$(grep "sv_hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set sv_hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		serverpassword=$(grep "rconpassword" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set rconpassword//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		slots=$(grep "sv_maxclients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
+
+		# Not Set
+		rconpassword=${rconpassword:-"NOT SET"}
+		servername=${servername:-"NOT SET"}
+		serverpassword=${serverpassword:-"NOT SET"}
+		slots=${slots:-"0"}
+	fi
+}
+
 fn_info_config_quakelive(){
 	if [ ! -f "${servercfgfullpath}" ]; then
 		rconpassword="${unavailable}"
@@ -475,6 +495,9 @@ elif [ "${gamename}" == "Battlefield: 1942" ]; then
 # Dont Starve Together
 elif [ "${engine}" == "dontstarve" ]; then
 	fn_info_config_dontstarve
+# Quake 3
+elif [ "${gamename}" == "Quake 3: Arena" ]; then
+	fn_info_config_quake3
 # Quake Live
 elif [ "${gamename}" == "Quake Live" ]; then
 	fn_info_config_quakelive

From ea0c6973fb17863888de4440b70bbc53418f1c21 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Fri, 21 Oct 2016 14:44:11 +0100
Subject: [PATCH 60/75] Updated Quake 3 location

---
 lgsm/functions/install_server_files.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index 0bcdcc90c..d9f6cad5c 100644
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -24,7 +24,7 @@ fn_install_server_files(){
 	elif [ "${gamename}" == "GoldenEye: Source" ]; then
 		fileurl="http://files.gameservermanagers.com/GoldenEyeSource/GoldenEye_Source_v5.0.1_full_server_linux.tar.bz2"; filedir="${tmpdir}"; filename="GoldenEye_Source_v5.0.1_server_full_Linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="ea227a150300abe346e757380325f84c"
 	elif [ "${gamename}" == "Quake 3: Arena" ]; then
-		fileurl="https://s3.amazonaws.com/linuxgsm/quake3-1.32c-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32c-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="fd7258d827474f67663dda297bff4306"
+		fileurl="http://files.gameservermanagers.com/Quake3/quake3-1.32c-x86-full-linux.tar.bz2"; filedir="${lgsmdir}/tmp"; filename="quake3-1.32c-x86-full-linux.tar.bz2";  executecmd="noexecute" run="norun"; force="noforce"; md5="fd7258d827474f67663dda297bff4306"
 	fi
 	fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}"
 	fn_dl_extract "${filedir}" "${filename}" "${filesdir}"

From b3f8b29a06f57ba70a752adffabaf40d84484e3f Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Fri, 21 Oct 2016 15:11:38 +0100
Subject: [PATCH 61/75] Added Quake 3 to correct getopt

---
 lgsm/functions/core_getopt.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh
index 217650dbc..da5a0d710 100644
--- a/lgsm/functions/core_getopt.sh
+++ b/lgsm/functions/core_getopt.sh
@@ -622,7 +622,7 @@ case "${getopt}" in
 
 if [ "${gamename}" == "Mumble" ]; then
 	fn_getopt_mumble
-elif [ "${gamename}" == "Battlefield: 1942" ]|| [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
+elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Quake 3: Arena" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	fn_getopt_generic_no_update
 elif [ "${engine}" == "lwjgl2" ]; then
 	fn_getopt_minecraft

From c3f671f23709396cf07908b940ad5f49d9d6ccd8 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Fri, 21 Oct 2016 15:30:26 +0100
Subject: [PATCH 62/75] Updated version numbers

---
 ARKSurvivalEvolved/arkserver            |  2 +-
 Arma3/arma3server                       |  2 +-
 Battlefield1942/bf1942server            |  2 +-
 BlackMesa/bmdmserver                    |  2 +-
 BladeSymphony/bsserver                  |  2 +-
 BrainBread2/bb2server                   |  2 +-
 CodenameCURE/ccserver                   |  2 +-
 CounterStrike/csserver                  |  2 +-
 CounterStrikeConditionZero/csczserver   |  2 +-
 CounterStrikeGlobalOffensive/csgoserver |  2 +-
 CounterStrikeSource/cssserver           |  2 +-
 DayOfDefeat/dodserver                   |  2 +-
 DayOfDefeatSource/dodsserver            |  2 +-
 DayOfInfamy/doiserver                   |  2 +-
 DeathmatchClassic/dmcserver             |  2 +-
 DontStarveTogether/dstserver            |  2 +-
 DoubleActionBoogaloo/dabserver          |  2 +-
 EmpiresMod/emserver                     |  2 +-
 FistfulOfFrags/fofserver                |  2 +-
 GarrysMod/gmodserver                    |  2 +-
 GoldenEyeSource/gesserver               |  2 +-
 HalfLife2Deathmatch/hl2dmserver         |  2 +-
 HalfLifeDeathmatch/hldmserver           |  2 +-
 HalfLifeDeathmatchSource/hldmsserver    |  2 +-
 Hurtworld/hwserver                      |  2 +-
 Insurgency/insserver                    |  2 +-
 JustCause2/jc2server                    |  2 +-
 KillingFloor/kfserver                   |  2 +-
 Left4Dead/l4dserver                     |  2 +-
 Left4Dead2/l4d2server                   |  2 +-
 Minecraft/mcserver                      | 68 ++++++++++++-------------
 Mumble/mumbleserver                     |  2 +-
 NS2Combat/ns2cserver                    |  2 +-
 NaturalSelection2/ns2server             |  2 +-
 NoMoreRoomInHell/nmrihserver            |  2 +-
 OpposingForce/opforserver               |  2 +-
 PiratesVikingandKnightsII/pvkiiserver   |  2 +-
 ProjectZomboid/pzserver                 |  2 +-
 QuakeLive/qlserver                      |  2 +-
 RedOrchestra/roserver                   |  2 +-
 Ricochet/ricochetserver                 |  2 +-
 Rust/rustserver                         |  2 +-
 SeriousSam3BFE/ss3sserver               |  2 +-
 Starbound/sbserver                      |  2 +-
 SvenCoop/svenserver                     |  2 +-
 TeamFortress2/tf2server                 |  2 +-
 TeamFortressClassic/tfcserver           |  2 +-
 TeamSpeak3/ts3server                    |  2 +-
 Teeworlds/twserver                      |  2 +-
 Terraria/terrariaserver                 |  2 +-
 UnrealTournament/utserver               |  2 +-
 UnrealTournament2004/ut2k4server        |  2 +-
 UnrealTournament3/ut3server             |  2 +-
 UnrealTournament99/ut99server           |  2 +-
 WolfensteinEnemyTerritory/wetserver     |  2 +-
 lgsm/functions/fn_functions             |  2 +-
 lgsm/functions/fn_getopt                |  2 +-
 lgsm/functions/fn_update_functions      |  2 +-
 58 files changed, 91 insertions(+), 91 deletions(-)

diff --git a/ARKSurvivalEvolved/arkserver b/ARKSurvivalEvolved/arkserver
index efba11b51..bcabf3e27 100644
--- a/ARKSurvivalEvolved/arkserver
+++ b/ARKSurvivalEvolved/arkserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Arma3/arma3server b/Arma3/arma3server
index 62a760104..82484e3e4 100644
--- a/Arma3/arma3server
+++ b/Arma3/arma3server
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Battlefield1942/bf1942server b/Battlefield1942/bf1942server
index 14995f4cf..5aca78b93 100644
--- a/Battlefield1942/bf1942server
+++ b/Battlefield1942/bf1942server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/BlackMesa/bmdmserver b/BlackMesa/bmdmserver
index 91fe6bb56..5026662a4 100644
--- a/BlackMesa/bmdmserver
+++ b/BlackMesa/bmdmserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/BladeSymphony/bsserver b/BladeSymphony/bsserver
index e5e071271..946e6c2d9 100644
--- a/BladeSymphony/bsserver
+++ b/BladeSymphony/bsserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/BrainBread2/bb2server b/BrainBread2/bb2server
index 8ff2d159c..8348aafd2 100644
--- a/BrainBread2/bb2server
+++ b/BrainBread2/bb2server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/CodenameCURE/ccserver b/CodenameCURE/ccserver
index 3473eed80..3f08a563f 100644
--- a/CodenameCURE/ccserver
+++ b/CodenameCURE/ccserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/CounterStrike/csserver b/CounterStrike/csserver
index e2cdde7fc..ae04a04d6 100644
--- a/CounterStrike/csserver
+++ b/CounterStrike/csserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="060816"
+version="211016"
 
 #### Variables ####
 
diff --git a/CounterStrikeConditionZero/csczserver b/CounterStrikeConditionZero/csczserver
index 895ec1583..fb6971bbc 100644
--- a/CounterStrikeConditionZero/csczserver
+++ b/CounterStrikeConditionZero/csczserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/CounterStrikeGlobalOffensive/csgoserver b/CounterStrikeGlobalOffensive/csgoserver
index 87425d00a..b5e93a15e 100755
--- a/CounterStrikeGlobalOffensive/csgoserver
+++ b/CounterStrikeGlobalOffensive/csgoserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/CounterStrikeSource/cssserver b/CounterStrikeSource/cssserver
index e6994789e..8faed4600 100644
--- a/CounterStrikeSource/cssserver
+++ b/CounterStrikeSource/cssserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/DayOfDefeat/dodserver b/DayOfDefeat/dodserver
index f6cd2b34e..092374517 100644
--- a/DayOfDefeat/dodserver
+++ b/DayOfDefeat/dodserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/DayOfDefeatSource/dodsserver b/DayOfDefeatSource/dodsserver
index 342ccc97a..f147c480d 100644
--- a/DayOfDefeatSource/dodsserver
+++ b/DayOfDefeatSource/dodsserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/DayOfInfamy/doiserver b/DayOfInfamy/doiserver
index 7440b369f..c5baebe29 100644
--- a/DayOfInfamy/doiserver
+++ b/DayOfInfamy/doiserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/DeathmatchClassic/dmcserver b/DeathmatchClassic/dmcserver
index b987c9685..8c90086d0 100644
--- a/DeathmatchClassic/dmcserver
+++ b/DeathmatchClassic/dmcserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/DontStarveTogether/dstserver b/DontStarveTogether/dstserver
index e96d304b8..2b6805c38 100644
--- a/DontStarveTogether/dstserver
+++ b/DontStarveTogether/dstserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/DoubleActionBoogaloo/dabserver b/DoubleActionBoogaloo/dabserver
index 4b8b531e9..ad9232079 100644
--- a/DoubleActionBoogaloo/dabserver
+++ b/DoubleActionBoogaloo/dabserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/EmpiresMod/emserver b/EmpiresMod/emserver
index 20e28b2d4..4251c1093 100644
--- a/EmpiresMod/emserver
+++ b/EmpiresMod/emserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/FistfulOfFrags/fofserver b/FistfulOfFrags/fofserver
index 8a9fa69c5..d96a076c0 100644
--- a/FistfulOfFrags/fofserver
+++ b/FistfulOfFrags/fofserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/GarrysMod/gmodserver b/GarrysMod/gmodserver
index edc225016..571600dc7 100644
--- a/GarrysMod/gmodserver
+++ b/GarrysMod/gmodserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/GoldenEyeSource/gesserver b/GoldenEyeSource/gesserver
index 081362d2a..9b53028ae 100644
--- a/GoldenEyeSource/gesserver
+++ b/GoldenEyeSource/gesserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="300816"
+version="211016"
 
 #### Variables ####
 
diff --git a/HalfLife2Deathmatch/hl2dmserver b/HalfLife2Deathmatch/hl2dmserver
index ff324c434..3e3ac1001 100644
--- a/HalfLife2Deathmatch/hl2dmserver
+++ b/HalfLife2Deathmatch/hl2dmserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/HalfLifeDeathmatch/hldmserver b/HalfLifeDeathmatch/hldmserver
index 2716a27e9..bbdcd7d2f 100644
--- a/HalfLifeDeathmatch/hldmserver
+++ b/HalfLifeDeathmatch/hldmserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/HalfLifeDeathmatchSource/hldmsserver b/HalfLifeDeathmatchSource/hldmsserver
index 0a45df162..b51756a58 100644
--- a/HalfLifeDeathmatchSource/hldmsserver
+++ b/HalfLifeDeathmatchSource/hldmsserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/Hurtworld/hwserver b/Hurtworld/hwserver
index 2e28481b6..90c88c882 100644
--- a/Hurtworld/hwserver
+++ b/Hurtworld/hwserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Insurgency/insserver b/Insurgency/insserver
index ba49fb494..bf25a1e16 100644
--- a/Insurgency/insserver
+++ b/Insurgency/insserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="161001"
+version="211016"
 
 #### Variables ####
 
diff --git a/JustCause2/jc2server b/JustCause2/jc2server
index af5e1e0af..069d8d5cd 100644
--- a/JustCause2/jc2server
+++ b/JustCause2/jc2server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/KillingFloor/kfserver b/KillingFloor/kfserver
index 09ad60899..43fb5a3bf 100644
--- a/KillingFloor/kfserver
+++ b/KillingFloor/kfserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Left4Dead/l4dserver b/Left4Dead/l4dserver
index d05cd9a79..937d5eb3a 100644
--- a/Left4Dead/l4dserver
+++ b/Left4Dead/l4dserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Left4Dead2/l4d2server b/Left4Dead2/l4d2server
index bddcaae9e..3a26a1442 100644
--- a/Left4Dead2/l4d2server
+++ b/Left4Dead2/l4d2server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Minecraft/mcserver b/Minecraft/mcserver
index 6317fb9bc..859d1f9dd 100644
--- a/Minecraft/mcserver
+++ b/Minecraft/mcserver
@@ -4,12 +4,12 @@
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
 if [ -f ".dev-debug" ]; then
-        exec 5>dev-debug.log
-        BASH_XTRACEFD="5"
-        set -x
+	exec 5>dev-debug.log
+	BASH_XTRACEFD="5"
+	set -x
 fi
 
-version="210816"
+version="211016"
 
 #### Variables ####
 
@@ -91,36 +91,36 @@ 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}"
+	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}"
 }
diff --git a/Mumble/mumbleserver b/Mumble/mumbleserver
index 9e2b022ec..7decb653e 100644
--- a/Mumble/mumbleserver
+++ b/Mumble/mumbleserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="290716"
+version="211016"
 
 #### Variables ####
 
diff --git a/NS2Combat/ns2cserver b/NS2Combat/ns2cserver
index 4dbc1e276..923858313 100644
--- a/NS2Combat/ns2cserver
+++ b/NS2Combat/ns2cserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/NaturalSelection2/ns2server b/NaturalSelection2/ns2server
index 54b6ed226..76ca3ae37 100644
--- a/NaturalSelection2/ns2server
+++ b/NaturalSelection2/ns2server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210916"
+version="211016"
 
 #### Variables ####
 
diff --git a/NoMoreRoomInHell/nmrihserver b/NoMoreRoomInHell/nmrihserver
index be02bfc0e..abdba83e3 100644
--- a/NoMoreRoomInHell/nmrihserver
+++ b/NoMoreRoomInHell/nmrihserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/OpposingForce/opforserver b/OpposingForce/opforserver
index 5013110e2..913248223 100644
--- a/OpposingForce/opforserver
+++ b/OpposingForce/opforserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/PiratesVikingandKnightsII/pvkiiserver b/PiratesVikingandKnightsII/pvkiiserver
index 5074af33e..870cd4e50 100644
--- a/PiratesVikingandKnightsII/pvkiiserver
+++ b/PiratesVikingandKnightsII/pvkiiserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/ProjectZomboid/pzserver b/ProjectZomboid/pzserver
index 143c382c6..d0af5d50f 100644
--- a/ProjectZomboid/pzserver
+++ b/ProjectZomboid/pzserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/QuakeLive/qlserver b/QuakeLive/qlserver
index accf6aadf..ed96114f4 100755
--- a/QuakeLive/qlserver
+++ b/QuakeLive/qlserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/RedOrchestra/roserver b/RedOrchestra/roserver
index 66b85d98e..6d4082ec6 100644
--- a/RedOrchestra/roserver
+++ b/RedOrchestra/roserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/Ricochet/ricochetserver b/Ricochet/ricochetserver
index ff5862808..c80e188e9 100644
--- a/Ricochet/ricochetserver
+++ b/Ricochet/ricochetserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/Rust/rustserver b/Rust/rustserver
index 6e5f8f76a..9196c1ec0 100644
--- a/Rust/rustserver
+++ b/Rust/rustserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/SeriousSam3BFE/ss3sserver b/SeriousSam3BFE/ss3sserver
index 35b78d831..21dfeb281 100644
--- a/SeriousSam3BFE/ss3sserver
+++ b/SeriousSam3BFE/ss3sserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/Starbound/sbserver b/Starbound/sbserver
index 197d93ee3..5b572669d 100644
--- a/Starbound/sbserver
+++ b/Starbound/sbserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/SvenCoop/svenserver b/SvenCoop/svenserver
index c89ffb88d..59b9c750e 100644
--- a/SvenCoop/svenserver
+++ b/SvenCoop/svenserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/TeamFortress2/tf2server b/TeamFortress2/tf2server
index 972e60903..b16193239 100644
--- a/TeamFortress2/tf2server
+++ b/TeamFortress2/tf2server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 
diff --git a/TeamFortressClassic/tfcserver b/TeamFortressClassic/tfcserver
index 4a9496d35..cf754b700 100644
--- a/TeamFortressClassic/tfcserver
+++ b/TeamFortressClassic/tfcserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/TeamSpeak3/ts3server b/TeamSpeak3/ts3server
index 2c0af6bd5..527b7324e 100644
--- a/TeamSpeak3/ts3server
+++ b/TeamSpeak3/ts3server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="290716"
+version="211016"
 
 #### Variables ####
 
diff --git a/Teeworlds/twserver b/Teeworlds/twserver
index 8ab31bbcb..a16daae1e 100644
--- a/Teeworlds/twserver
+++ b/Teeworlds/twserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/Terraria/terrariaserver b/Terraria/terrariaserver
index fba75083f..7811110cf 100644
--- a/Terraria/terrariaserver
+++ b/Terraria/terrariaserver
@@ -10,7 +10,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/UnrealTournament/utserver b/UnrealTournament/utserver
index a5ff70a61..ff84f9979 100644
--- a/UnrealTournament/utserver
+++ b/UnrealTournament/utserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/UnrealTournament2004/ut2k4server b/UnrealTournament2004/ut2k4server
index 3c82b7e7b..3c6b76cc6 100644
--- a/UnrealTournament2004/ut2k4server
+++ b/UnrealTournament2004/ut2k4server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/UnrealTournament3/ut3server b/UnrealTournament3/ut3server
index 780da1fb8..5788b40ef 100644
--- a/UnrealTournament3/ut3server
+++ b/UnrealTournament3/ut3server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/UnrealTournament99/ut99server b/UnrealTournament99/ut99server
index 771882279..652ac3772 100644
--- a/UnrealTournament99/ut99server
+++ b/UnrealTournament99/ut99server
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/WolfensteinEnemyTerritory/wetserver b/WolfensteinEnemyTerritory/wetserver
index 35642cdd6..f400c20e6 100644
--- a/WolfensteinEnemyTerritory/wetserver
+++ b/WolfensteinEnemyTerritory/wetserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="210516"
+version="211016"
 
 #### Variables ####
 
diff --git a/lgsm/functions/fn_functions b/lgsm/functions/fn_functions
index 0d024beb1..758af3dbc 100644
--- a/lgsm/functions/fn_functions
+++ b/lgsm/functions/fn_functions
@@ -2,7 +2,7 @@
 # LGSM fn_functions function
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
-lgsm_version="210516"
+lgsm_version="211016"
 
 # Description: Redirects to new core_functions.sh
 
diff --git a/lgsm/functions/fn_getopt b/lgsm/functions/fn_getopt
index cec7b51b4..0302cf1d5 100644
--- a/lgsm/functions/fn_getopt
+++ b/lgsm/functions/fn_getopt
@@ -2,7 +2,7 @@
 # LGSM fn_getopt function
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
-lgsm_version="210516"
+lgsm_version="211016"
 
 # Description: Redirect to new core_getopt.sh
 
diff --git a/lgsm/functions/fn_update_functions b/lgsm/functions/fn_update_functions
index 7c3be31e6..a424d3352 100644
--- a/lgsm/functions/fn_update_functions
+++ b/lgsm/functions/fn_update_functions
@@ -2,7 +2,7 @@
 # LGSM fn_update_functions function
 # Author: Daniel Gibbs
 # Website: https://gameservermanagers.com
-lgsm_version="210516"
+lgsm_version="211016"
 
 # Description: LEGACY FUNCTION Deletes the functions dir to allow re-downloading of functions from GitHub.
 

From 9cd4095122aac437d3a2fa1c3fd67eb430ff6988 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Fri, 21 Oct 2016 15:30:34 +0100
Subject: [PATCH 63/75] updated version numbers

---
 7DaysToDie/sdtdserver | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/7DaysToDie/sdtdserver b/7DaysToDie/sdtdserver
index 07f7d555d..7ec533282 100644
--- a/7DaysToDie/sdtdserver
+++ b/7DaysToDie/sdtdserver
@@ -9,7 +9,7 @@ if [ -f ".dev-debug" ]; then
 	set -x
 fi
 
-version="160916"
+version="211016"
 
 #### Variables ####
 

From 530fcd2686c4b783454f3bc3f109ad1975f16cc2 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Fri, 21 Oct 2016 15:54:04 +0100
Subject: [PATCH 64/75] Removing very old functions for legacy code

If you havnt updated your scripts by now you really need to.
---
 functions/command_update_functions.sh | 38 --------------
 functions/core_functions.sh           | 72 ---------------------------
 functions/core_getopt.sh              | 14 ------
 functions/fn_functions                | 15 ------
 functions/fn_getopt                   | 14 ------
 functions/fn_update_functions         | 15 ------
 functions/update_functions.sh         | 15 ------
 7 files changed, 183 deletions(-)
 delete mode 100644 functions/command_update_functions.sh
 delete mode 100644 functions/core_functions.sh
 delete mode 100644 functions/core_getopt.sh
 delete mode 100644 functions/fn_functions
 delete mode 100644 functions/fn_getopt
 delete mode 100644 functions/fn_update_functions
 delete mode 100644 functions/update_functions.sh

diff --git a/functions/command_update_functions.sh b/functions/command_update_functions.sh
deleted file mode 100644
index 0c35eb1f0..000000000
--- a/functions/command_update_functions.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-# LGSM command_update_functions.sh function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: Deletes the functions dir to allow re-downloading of functions from GitHub.
-
-local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))"
-check.sh
-fn_print_dots "Updating functions"
-fn_script_log "Updating functions"
-sleep 1
-echo -ne "\n"
-
-# Removed legecy functions dir
-if [ -n "${rootdir}" ]; then
-	if [ -d "${rootdir}/functions/" ]; then
-		rm -rfv "${rootdir}/functions/"
-		exitcode=$?
-	fi
-fi
-
-if [ -n "${functionsdir}" ]; then
-	if [ -d "${functionsdir}" ]; then
-		rm -rfv "${functionsdir}/"*
-		exitcode=$?
-	fi
-fi
-
-if [ "${exitcode}" == "0" ]; then
-	fn_print_ok "Updating functions"
-	fn_script_log "Success! Updating functions"
-else
-	fn_print_fail "Updating functions"
-	fn_script_log "Failure! Updating functions"
-fi
-echo -ne "\n"
\ No newline at end of file
diff --git a/functions/core_functions.sh b/functions/core_functions.sh
deleted file mode 100644
index 287a50897..000000000
--- a/functions/core_functions.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/bin/bash
-# LGSM core_functions.sh function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: REDIRECT FUNCTION to new location for core_functions.sh
-
-# fn_fetch_core_dl also placed here to allow legecy servers to still download core functions
-if [ -z "${lgsmdir}" ]; then
-	lgsmdir="${rootdir}/lgsm"
-	functionsdir="${lgsmdir}/functions"
-	libdir="${lgsmdir}/lib"
-fi
-
-fn_fetch_core_dl(){
-if [ -z "${githubuser}" ]; then
-	githubuser="GameServerManagers"
-fi
-if [ -z "${githubrepo}" ]; then
-	githubrepo="LinuxGSM"
-fi
-if [ -z "${githubbranch}" ]; then
-	githubbranch="master"
-fi
-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 "${red}FAIL${default}\n"
-			echo "${curlfetch}"
-			echo -e "${githuburl}\n"
-			exit 1
-		else
-			echo -e "${green}OK${default}"
-		fi
-	else
-		echo -e "${red}FAIL${default}\n"
-		echo "Curl is not installed!"
-		echo -e ""
-		exit 1
-	fi
-	chmod +x "${filedir}/${filename}"
-fi
-source "${filedir}/${filename}"
-}
-
-core_functions.sh(){
-functionfile="${FUNCNAME}"
-fn_fetch_core_dl
-}
-
-core_functions.sh
diff --git a/functions/core_getopt.sh b/functions/core_getopt.sh
deleted file mode 100644
index f6032fae6..000000000
--- a/functions/core_getopt.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# LGSM core_getopt.sh function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: REDIRECT FUNCTION to new location for core_getopt.sh
-
-core_getopt.sh(){
-functionfile="${FUNCNAME}"
-fn_fetch_core_dl
-}
-
-core_getopt.sh
\ No newline at end of file
diff --git a/functions/fn_functions b/functions/fn_functions
deleted file mode 100644
index 2ae012923..000000000
--- a/functions/fn_functions
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-# LGSM fn_functions function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: REDIRECT FUNCTION to new core_functions.sh
-
-core_functions.sh(){
-# Functions are defined in core_functions.sh.
-functionfile="${FUNCNAME}"
-fn_runfunction
-}
-
-core_functions.sh
\ No newline at end of file
diff --git a/functions/fn_getopt b/functions/fn_getopt
deleted file mode 100644
index 0b0e3713d..000000000
--- a/functions/fn_getopt
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# LGSM fn_getopt.sh function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: REDIRECT FUNCTION to new core_getopt.sh
-
-core_getopt.sh(){
-functionfile="${FUNCNAME}"
-fn_fetch_core_dl
-}
-
-core_getopt.sh
\ No newline at end of file
diff --git a/functions/fn_update_functions b/functions/fn_update_functions
deleted file mode 100644
index 5513d5d20..000000000
--- a/functions/fn_update_functions
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-# LGSM fn_update_functions function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: REDIRECT FUNCTION to new command_update_functions.sh
-
-command_update_functions.sh(){
-functionfile="${FUNCNAME}"
-fn_runfunction
-}
-
-command_update_functions.sh
-
diff --git a/functions/update_functions.sh b/functions/update_functions.sh
deleted file mode 100644
index 5513d5d20..000000000
--- a/functions/update_functions.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-# LGSM fn_update_functions function
-# Author: Daniel Gibbs
-# Website: https://gameservermanagers.com
-lgsm_version="210516"
-
-# Description: REDIRECT FUNCTION to new command_update_functions.sh
-
-command_update_functions.sh(){
-functionfile="${FUNCNAME}"
-fn_runfunction
-}
-
-command_update_functions.sh
-

From 639dcb4dbeed6084715b298c4f86fb1e7748c844 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Fri, 21 Oct 2016 16:04:39 +0100
Subject: [PATCH 65/75] Removed appmanifest files as no longer required

---
 appmanifest/appmanifest_10.acf       | 22 --------------------
 appmanifest/appmanifest_70.acf       | 22 --------------------
 appmanifest/appmanifest_90.acf       | 28 -------------------------
 appmanifest/czero/appmanifest_90.acf | 31 ----------------------------
 appmanifest/dod/appmanifest_90.acf   | 31 ----------------------------
 appmanifest/tfc/appmanifest_90.acf   | 31 ----------------------------
 6 files changed, 165 deletions(-)
 delete mode 100644 appmanifest/appmanifest_10.acf
 delete mode 100644 appmanifest/appmanifest_70.acf
 delete mode 100644 appmanifest/appmanifest_90.acf
 delete mode 100644 appmanifest/czero/appmanifest_90.acf
 delete mode 100644 appmanifest/dod/appmanifest_90.acf
 delete mode 100644 appmanifest/tfc/appmanifest_90.acf

diff --git a/appmanifest/appmanifest_10.acf b/appmanifest/appmanifest_10.acf
deleted file mode 100644
index 9217b6129..000000000
--- a/appmanifest/appmanifest_10.acf
+++ /dev/null
@@ -1,22 +0,0 @@
-"AppState"
-{
-	"AppID"		"10"
-	"Universe"		"1"
-	"StateFlags"		"1090"
-	"installdir"		"Half-Life"
-	"LastUpdated"		"0"
-	"UpdateResult"		"0"
-	"SizeOnDisk"		"0"
-	"buildid"		"0"
-	"LastOwner"		"0"
-	"BytesToDownload"		"0"
-	"BytesDownloaded"		"0"
-	"AutoUpdateBehavior"		"0"
-	"AllowOtherDownloadsWhileRunning"		"0"
-	"UserConfig"
-	{
-	}
-	"MountedDepots"
-	{
-	}
-}
diff --git a/appmanifest/appmanifest_70.acf b/appmanifest/appmanifest_70.acf
deleted file mode 100644
index e5d6f2807..000000000
--- a/appmanifest/appmanifest_70.acf
+++ /dev/null
@@ -1,22 +0,0 @@
-"AppState"
-{
-	"AppID"		"70"
-	"Universe"		"1"
-	"StateFlags"		"1090"
-	"installdir"		"Half-Life"
-	"LastUpdated"		"0"
-	"UpdateResult"		"0"
-	"SizeOnDisk"		"0"
-	"buildid"		"0"
-	"LastOwner"		"0"
-	"BytesToDownload"		"0"
-	"BytesDownloaded"		"0"
-	"AutoUpdateBehavior"		"0"
-	"AllowOtherDownloadsWhileRunning"		"0"
-	"UserConfig"
-	{
-	}
-	"MountedDepots"
-	{
-	}
-}
diff --git a/appmanifest/appmanifest_90.acf b/appmanifest/appmanifest_90.acf
deleted file mode 100644
index 7de939d34..000000000
--- a/appmanifest/appmanifest_90.acf
+++ /dev/null
@@ -1,28 +0,0 @@
-"AppState"
-{
-	"AppID"		"90"
-	"Universe"		"1"
-	"StateFlags"		"1026"
-	"installdir"		"Half-Life"
-	"LastUpdated"		"0"
-	"UpdateResult"		"0"
-	"SizeOnDisk"		"0"
-	"buildid"		"0"
-	"LastOwner"		"0"
-	"BytesToDownload"		"0"
-	"BytesDownloaded"		"0"
-	"AutoUpdateBehavior"		"0"
-	"AllowOtherDownloadsWhileRunning"		"0"
-	"UserConfig"
-	{
-	}
-	"MountedDepots"
-	{
-	}
-	"SharedDepots"
-	{
-		"1"		"70"
-		"11"		"10"
-		"71"		"70"
-	}
-}
diff --git a/appmanifest/czero/appmanifest_90.acf b/appmanifest/czero/appmanifest_90.acf
deleted file mode 100644
index 2373e5421..000000000
--- a/appmanifest/czero/appmanifest_90.acf
+++ /dev/null
@@ -1,31 +0,0 @@
-"AppState"
-{
-	"appid"		"90"
-	"Universe"		"1"
-	"StateFlags"		"4"
-	"installdir"		"Half-Life"
-	"LastUpdated"		"1390662869"
-	"UpdateResult"		"0"
-	"SizeOnDisk"		"41586625"
-	"buildid"		"63549"
-	"LastOwner"		"76561199609699388"
-	"BytesToDownload"		"224501136"
-	"BytesDownloaded"		"224501136"
-	"AutoUpdateBehavior"		"0"
-	"AllowOtherDownloadsWhileRunning"		"0"
-	"UserConfig"
-	{
-		"mod"		"czero"
-	}
-	"MountedDepots"
-	{
-		"4"		"3196956435784640171"
-	}
-	"SharedDepots"
-	{
-		"1"		"70"
-		"11"		"10"
-		"71"		"70"
-		"81"		"80"
-	}
-}
diff --git a/appmanifest/dod/appmanifest_90.acf b/appmanifest/dod/appmanifest_90.acf
deleted file mode 100644
index 704e4d1f0..000000000
--- a/appmanifest/dod/appmanifest_90.acf
+++ /dev/null
@@ -1,31 +0,0 @@
-"AppState"
-{
-	"AppID"		"90"
-	"Universe"		"1"
-	"StateFlags"		"1030"
-	"installdir"		"Half-Life"
-	"LastUpdated"		"1390652241"
-	"UpdateResult"		"0"
-	"SizeOnDisk"		"41586625"
-	"buildid"		"63549"
-	"LastOwner"		"76561201453793332"
-	"BytesToDownload"		"236411088"
-	"BytesDownloaded"		"0"
-	"AutoUpdateBehavior"		"0"
-	"AllowOtherDownloadsWhileRunning"		"0"
-	"UserConfig"
-	{
-		"mod"		"dod"
-	}
-	"MountedDepots"
-	{
-		"4"		"3196956435784640171"
-	}
-	"SharedDepots"
-	{
-		"1"		"70"
-		"11"		"10"
-		"71"		"70"
-		"31"		"30"
-	}
-}
diff --git a/appmanifest/tfc/appmanifest_90.acf b/appmanifest/tfc/appmanifest_90.acf
deleted file mode 100644
index aa3f4e2a9..000000000
--- a/appmanifest/tfc/appmanifest_90.acf
+++ /dev/null
@@ -1,31 +0,0 @@
-"AppState"
-{
-	"AppID"		"90"
-	"Universe"		"1"
-	"StateFlags"		"4"
-	"installdir"		"Half-Life"
-	"LastUpdated"		"1390765182"
-	"UpdateResult"		"0"
-	"SizeOnDisk"		"41586625"
-	"buildid"		"63549"
-	"LastOwner"		"76561198445953036"
-	"BytesToDownload"		"62362560"
-	"BytesDownloaded"		"0"
-	"AutoUpdateBehavior"		"0"
-	"AllowOtherDownloadsWhileRunning"		"0"
-	"UserConfig"
-	{
-		"mod"		"tfc"
-	}
-	"MountedDepots"
-	{
-		"4"		"3196956435784640171"
-	}
-	"SharedDepots"
-	{
-		"1"		"70"
-		"11"		"10"
-		"71"		"70"
-		"21"		"20"
-	}
-}

From cf83b889e4630f8bb97e925d6479e5739603b200 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sat, 22 Oct 2016 00:00:09 +0100
Subject: [PATCH 66/75] Updated directories

---
 QuakeWorld/qwserver | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/QuakeWorld/qwserver b/QuakeWorld/qwserver
index 7a43b4b56..78449e81f 100644
--- a/QuakeWorld/qwserver
+++ b/QuakeWorld/qwserver
@@ -54,14 +54,15 @@ lockselfname=".${servicename}.lock"
 lgsmdir="${rootdir}/lgsm"
 functionsdir="${lgsmdir}/functions"
 libdir="${lgsmdir}/lib"
+tmpdir="${lgsmdir}/tmp"
 filesdir="${rootdir}/serverfiles"
 systemdir="${filesdir}/ktx"
 executabledir="${filesdir}"
 executable="./mvdsv"
 servercfg="${servicename}.cfg"
+servercfgdefault="server.cfg"
 servercfgdir="${systemdir}"
 servercfgfullpath="${servercfgdir}/${servercfg}"
-servercfgdefault="${servercfgdir}/lgsm-default.cfg"
 backupdir="${rootdir}/backups"
 
 # Logging

From f1722339950a685d25488305ddeddd95951546e4 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sat, 22 Oct 2016 12:05:33 +0100
Subject: [PATCH 67/75] Added quake 2 details

---
 lgsm/functions/command_details.sh | 11 +++++++++++
 lgsm/functions/info_config.sh     | 18 ++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index fe37083df..126dbe3b3 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -386,6 +386,15 @@ fn_details_refractor(){
 	} | column -s $'\t' -t
 }
 
+fn_details_quake2(){
+	echo -e "netstat -atunp | grep quake2"
+	echo -e ""
+	{
+		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+		echo -e "> Game\tINBOUND\t${port}\tudp"
+	} | column -s $'\t' -t
+}
+
 fn_details_quake3(){
 	echo -e "netstat -atunp | grep q3ded"
 	echo -e ""
@@ -674,6 +683,8 @@ fn_display_details() {
 		fn_details_ark
 	elif [ "${gamename}" == "Hurtworld" ]; then
 		fn_details_hurtworld
+	elif [ "${gamename}" == "Quake 2" ]; then
+		fn_details_quake2
 	elif [ "${gamename}" == "Quake 3: Arena" ]; then
 		fn_details_quake3
 	elif [ "${gamename}" == "Quake Live" ]; then
diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index 846dec349..948e15201 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -154,6 +154,24 @@ fn_info_config_projectzomboid(){
 	fi
 }
 
+fn_info_config_quake2(){
+	if [ ! -f "${servercfgfullpath}" ]; then
+		rconpassword="${unavailable}"
+		servername="${unavailable}"
+		serverpassword="${unavailable}"
+		slots="${zero}"
+	else
+		rconpassword=$(grep "rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		servername=$(grep "hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/set hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		slots=$(grep "maxclients" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
+
+		# Not Set
+		rconpassword=${rconpassword:-"NOT SET"}
+		servername=${servername:-"NOT SET"}
+		slots=${slots:-"0"}
+	fi
+}
+
 fn_info_config_quake3(){
 	if [ ! -f "${servercfgfullpath}" ]; then
 		rconpassword="${unavailable}"

From a0b6c9dc03d1829a29d06b512f35f80a81f84d40 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sat, 22 Oct 2016 12:14:26 +0100
Subject: [PATCH 68/75] Added missing if statements

---
 lgsm/functions/command_details.sh | 2 +-
 lgsm/functions/info_config.sh     | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index 126dbe3b3..af30b9a27 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -292,7 +292,7 @@ fn_details_ports(){
 
 	parmslocation="${red}UNKNOWN${default}"
 	# engines that require editing in the config file
-	local ports_edit_array=( "avalanche" "dontstarve" "idtech3" "lwjgl2" "projectzomboid" "idtech3_ql" "refractor" "realvirtuality" "seriousengine35" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" )
+	local ports_edit_array=( "avalanche" "dontstarve" "idtech2" "idtech3" "lwjgl2" "projectzomboid" "idtech3_ql" "refractor" "realvirtuality" "seriousengine35" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" )
 	for port_edit in "${ports_edit_array[@]}"
 	do
 		if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then
diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index 948e15201..7982ebd69 100644
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -513,6 +513,9 @@ elif [ "${gamename}" == "Battlefield: 1942" ]; then
 # Dont Starve Together
 elif [ "${engine}" == "dontstarve" ]; then
 	fn_info_config_dontstarve
+# Quake 2
+elif [ "${gamename}" == "Quake 2" ]; then
+	fn_info_config_quake2
 # Quake 3
 elif [ "${gamename}" == "Quake 3: Arena" ]; then
 	fn_info_config_quake3

From f7fb1b70637fb669cc1275be24c615569f384458 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sat, 22 Oct 2016 15:39:58 +0100
Subject: [PATCH 69/75] Added Quake 2 to fn_getopt_generic_no_update

---
 lgsm/functions/core_getopt.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh
index da5a0d710..49acff39a 100644
--- a/lgsm/functions/core_getopt.sh
+++ b/lgsm/functions/core_getopt.sh
@@ -622,7 +622,7 @@ case "${getopt}" in
 
 if [ "${gamename}" == "Mumble" ]; then
 	fn_getopt_mumble
-elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Quake 3: Arena" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
+elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Quake 2" ]||[ "${gamename}" == "Quake 3: Arena" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	fn_getopt_generic_no_update
 elif [ "${engine}" == "lwjgl2" ]; then
 	fn_getopt_minecraft

From 3029c9b25882261c14db14d3611ece8fc0b3c769 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sun, 23 Oct 2016 15:20:56 +0100
Subject: [PATCH 70/75] GLIBC not required for Quake 2

---
 lgsm/functions/info_glibc.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/info_glibc.sh b/lgsm/functions/info_glibc.sh
index f7f333d63..27e5d6e58 100644
--- a/lgsm/functions/info_glibc.sh
+++ b/lgsm/functions/info_glibc.sh
@@ -42,7 +42,7 @@ elif [ "${gamename}" == "No More Room in Hell" ]; then
 	glibcrequired="2.15"
 	glibcfix="yes"
 elif [ "${gamename}" == "Quake 2" ]; then
-	glibcrequired="2.0"
+	glibcrequired="NOT REQUIRED"
 	glibcfix="no"
 elif [ "${gamename}" == "Quake 3: Arena" ]; then
 	glibcrequired="2.1"

From 345f3456accf2351d8800da893fe251eaa890d27 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sun, 23 Oct 2016 21:18:38 +0100
Subject: [PATCH 71/75] removed #

---
 lgsm/functions/command_dev_detect_glibc.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/command_dev_detect_glibc.sh b/lgsm/functions/command_dev_detect_glibc.sh
index ce27d4875..7703fba34 100644
--- a/lgsm/functions/command_dev_detect_glibc.sh
+++ b/lgsm/functions/command_dev_detect_glibc.sh
@@ -37,4 +37,4 @@ while IFS= read -r -d $'\0' line; do
 done
 echo ""
 cat "${tmpdir}/detect_glibc.tmp"|sort|uniq|sort -r --version-sort
-#rm "${tmpdir}/detect_glibc.tmp"
\ No newline at end of file
+rm "${tmpdir}/detect_glibc.tmp"
\ No newline at end of file

From ca7af8f155a55196f182efe2240e719dfa408707 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sun, 23 Oct 2016 21:23:33 +0100
Subject: [PATCH 72/75] added quake engine

---
 lgsm/functions/gsquery.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lgsm/functions/gsquery.py b/lgsm/functions/gsquery.py
index a242c89bb..cd46717cd 100644
--- a/lgsm/functions/gsquery.py
+++ b/lgsm/functions/gsquery.py
@@ -26,6 +26,8 @@ class GameServer:
             self.query_prompt_string = b'\xff\xff\xff\xffstatus\x00'
         elif self.option.engine == 'idtech3':
             self.query_prompt_string = b'\xff\xff\xff\xffgetstatus'
+        elif self.option.engine == 'quake':
+            self.query_prompt_string = b'\xff\xff\xff\xffstatus\x00'
         elif self.option.engine == 'quakelive':
             self.query_prompt_string = b'\xFF\xFF\xFF\xFFTSource Engine Query\0'
         elif self.option.engine == 'realvirtuality':
@@ -111,7 +113,7 @@ if __name__ == '__main__':
         action='store',
         dest='engine',
         default=False,
-        help='Engine type: avalanche, goldsource, idtech2, idtech3, idtech3_ql, realvirtuality, quakelive, refractor, spark, source, unity3d, unreal, unreal2.'
+        help='Engine type: avalanche, goldsource, idtech2, idtech3, realvirtuality, quake, quakelive, refractor, spark, source, unity3d, unreal, unreal2.'
     )
     parser.add_option(
         '-v', '--verbose',

From 41c9ec3ba7e165e3eadbf572362f5522cd3e4589 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sun, 23 Oct 2016 21:24:26 +0100
Subject: [PATCH 73/75] added quake engine to gsquery

---
 lgsm/functions/command_monitor.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lgsm/functions/command_monitor.sh b/lgsm/functions/command_monitor.sh
index 33b86e55d..b11015e40 100644
--- a/lgsm/functions/command_monitor.sh
+++ b/lgsm/functions/command_monitor.sh
@@ -79,7 +79,7 @@ fn_monitor_tmux(){
 		fn_print_ok_eol_nl
 		fn_script_log_pass "Checking session: OK"
 		# runs gsquery check on game with specific engines.
-		local allowed_engines_array=( avalanche goldsource idtech3 idtech3_ql refractor realvirtuality source spark unity3d unreal unreal2 )
+		local allowed_engines_array=( avalanche goldsource idtech3 idtech3_ql quake refractor realvirtuality source spark unity3d unreal unreal2 )
 		for allowed_engine in "${allowed_engines_array[@]}"
 		do
 			if [ "${allowed_engine}" == "${engine}" ]; then

From 5de3226e008b639e51b2fe52729722479b606361 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sun, 23 Oct 2016 22:18:04 +0100
Subject: [PATCH 74/75] Added QuakeWorld

---
 lgsm/functions/command_details.sh | 13 ++++++++++++-
 lgsm/functions/core_getopt.sh     |  2 +-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index af30b9a27..7b8812f97 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -292,7 +292,7 @@ fn_details_ports(){
 
 	parmslocation="${red}UNKNOWN${default}"
 	# engines that require editing in the config file
-	local ports_edit_array=( "avalanche" "dontstarve" "idtech2" "idtech3" "lwjgl2" "projectzomboid" "idtech3_ql" "refractor" "realvirtuality" "seriousengine35" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" )
+	local ports_edit_array=( "avalanche" "dontstarve" "idtech2" "idtech3" "idtech3_ql" "lwjgl2" "projectzomboid" "quake" "refractor" "realvirtuality" "seriousengine35" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" )
 	for port_edit in "${ports_edit_array[@]}"
 	do
 		if [ "${engine}" == "${port_edit}" ]||[ "${gamename}" == "${port_edit}" ]; then
@@ -404,6 +404,15 @@ fn_details_quake3(){
 	} | column -s $'\t' -t
 }
 
+fn_details_quake(){
+	echo -e "netstat -atunp | grep mvdsv"
+	echo -e ""
+	{
+		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+		echo -e "> Game\tINBOUND\t${port}\tudp"
+	} | column -s $'\t' -t
+}
+
 fn_details_quakelive(){
 	echo -e "netstat -atunp | grep qzeroded"
 	echo -e ""
@@ -683,6 +692,8 @@ fn_display_details() {
 		fn_details_ark
 	elif [ "${gamename}" == "Hurtworld" ]; then
 		fn_details_hurtworld
+	elif [ "${gamename}" == "QuakeWorld" ]; then
+		fn_details_quake
 	elif [ "${gamename}" == "Quake 2" ]; then
 		fn_details_quake2
 	elif [ "${gamename}" == "Quake 3: Arena" ]; then
diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh
index 49acff39a..d07f82d04 100644
--- a/lgsm/functions/core_getopt.sh
+++ b/lgsm/functions/core_getopt.sh
@@ -622,7 +622,7 @@ case "${getopt}" in
 
 if [ "${gamename}" == "Mumble" ]; then
 	fn_getopt_mumble
-elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "Quake 2" ]||[ "${gamename}" == "Quake 3: Arena" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
+elif [ "${gamename}" == "Battlefield: 1942" ]||[ "${gamename}" == "QuakeWorld" ]||[ "${gamename}" == "Quake 2" ]||[ "${gamename}" == "Quake 3: Arena" ]||[ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 	fn_getopt_generic_no_update
 elif [ "${engine}" == "lwjgl2" ]; then
 	fn_getopt_minecraft

From ec4e1907205a2f6f0d5e6ce9103866b87bb8b4f1 Mon Sep 17 00:00:00 2001
From: Daniel Gibbs <me@danielgibbs.co.uk>
Date: Sun, 23 Oct 2016 22:41:22 +0100
Subject: [PATCH 75/75] added check to see if updateonstart var exists

---
 lgsm/functions/command_details.sh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh
index 7b8812f97..22f8e2a5f 100644
--- a/lgsm/functions/command_details.sh
+++ b/lgsm/functions/command_details.sh
@@ -218,7 +218,9 @@ fn_details_script(){
 		echo -e "${blue}Pushbullet alert:\t${default}${pushbulletalert}"
 
 		# Update on start
-		echo -e "${blue}Update on start:\t${default}${updateonstart}"
+		if [ -n "${updateonstart}" ]; then
+			echo -e "${blue}Update on start:\t${default}${updateonstart}"
+		fi
 
 		# Script location
 		echo -e "${blue}Location:\t${default}${rootdir}"