#!/bin/bash
# LGSM fn_details_config function
# Author: Daniel Gibbs
# Website: http://gameservermanagers.com
# Version: 250715

# Description: Gets specific details from config files.

## Examples of filtering to get info from config files
# sed 's/foo//g' - remove foo
# tr -cd [:digit:] leave only digits
# tr -d '=\"; ' remove selected charectors =\";
# grep -v "foo" filter out lines that contain foo

fn_servercfgfullpath(){
if [ ! -f "${servercfgfullpath}" ]; then
	servercfgfullpath="\e[0;31mMISSING!\e[0m ${servercfgfullpath}"
fi
}

## Just Cause 2
if [ "${engine}" == "avalanche" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s "Name" "${servercfgfullpath}"|sed 's/Name//g'|tr -d '=", \n')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# ip
	if [ -f "${servercfgfullpath}" ]; then
		# check if the ip exists in the config file. Failing this will fall back to the default.
		configipcheck=$(grep "BindIP" "${servercfgfullpath}"|sed 's/BindIP//g'|tr -d '=", \n')
	fi
	if [ -n "${configipcheck}" ]; then
		ip=$(grep "BindIP" "${servercfgfullpath}"|sed 's/BindIP//g'|tr -d '=", \n')
	fi

	# server password
	if [ -f "${servercfgfullpath}" ]; then
		serverpassword=$(grep -s "Password" "${servercfgfullpath}"|sed 's/Password//g'|tr -d '=", \n')
		if [ ! -n "${serverpassword}" ]; then
			serverpassword="NOT SET"
		fi
	else
		serverpassword="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
		slots=$(grep -s "MaxPlayers" "${servercfgfullpath}"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
		port=$(grep "BindPort" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	fn_servercfgfullpath

## Dont Starve Together
elif [ "${engine}" == "dontstarve" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s "default_server_name = " "${servercfgfullpath}"|sed 's/default_server_name = //g')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# server password
	if [ -f "${servercfgfullpath}" ]; then
		serverpassword=$(grep -s "server_password = " "${servercfgfullpath}"|grep -v "#"|sed 's/server_password = //g')
		if [ ! -n "${serverpassword}" ]; then
			serverpassword="NOT SET"
		fi
	else
		serverpassword="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
		slots=$(grep -s "max_players" "${servercfgfullpath}"|grep -v "#"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# game mode
	if [ -f "${servercfgfullpath}" ]; then
			gamemode=$(grep -s "game_mode = " "${servercfgfullpath}"|grep -v "#"|sed 's/game_mode = //g')
		if [ ! -n "${gamemode}" ]; then
			gamemode="NOT SET"
		fi
	else
		gamemode="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# tickrate
	if [ -f "${servercfgfullpath}" ]; then
			tickrate=$(grep -s "tick_rate" "${servercfgfullpath}"|grep -v "#"|tr -cd [:digit:])
		if [ ! -n "${tickrate}" ]; then
			tickrate="NOT SET"
		fi
	else
		tickrate="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
		port=$(grep -s "server_port" "${servercfgfullpath}"|grep -v "#"|tr -cd "[:digit:]")
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	fn_servercfgfullpath

## Project Zomboid
elif [ "${engine}" == "projectzomboid" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s "PublicName=" "${servercfgfullpath}"|sed 's/PublicName=//g'|tr -d '=", \n')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
			slots=$(grep -s "MaxPlayers=" "${servercfgfullpath}"|grep -v "#"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
		port=$(grep -s "DefaultPort=" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	fn_servercfgfullpath

elif [ "${engine}" == "realvirtuality" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s "hostname" "${servercfgfullpath}"| grep -v //|sed -e 's/\<hostname\>//g'| tr -d '=\"; ')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# admin password
	if [ -f "${servercfgfullpath}" ]; then
	adminpassword=$(grep -s "password =" "${servercfgfullpath}"|grep -v //|sed -e 's/\password//g'|tr -d '=\"; ')
		if [ ! -n "${adminpassword}" ]; then
			adminpassword="NOT SET"
		fi
	else
		adminpassword="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# server password
	if [ -f "${servercfgfullpath}" ]; then
	serverpassword=$(grep -s "passwordAdmin" "${servercfgfullpath}"|grep -v //|sed -e 's/\passwordAdmin//g'|tr -d '=\"; ')
		if [ ! -n "${adminpassword}" ]; then
			serverpassword="NOT SET"
		fi
	else
		serverpassword="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
			slots=$(grep -s "maxPlayers" "${servercfgfullpath}"|grep -v "#"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
			port=$(grep -s "serverport=" "${servercfgfullpath}"|grep -v //|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	# query port
	if [ -f "${servercfgfullpath}" ]; then
			queryport=$(grep -s "steamqueryport=" "${servercfgfullpath}"|grep -v //|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${queryport}" ]; then
		queryport="0"
	fi

	# master port
	if [ -f "${servercfgfullpath}" ]; then
		masterport=$(grep -s "steamport=" "${servercfgfullpath}"|grep -v //|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${masterport}" ]; then
		masterport="0"
	fi

	fn_servercfgfullpath

elif [ "${engine}" == "seriousengine35" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s "prj_strMultiplayerSessionName" "${servercfgfullpath}"|sed 's/prj_strMultiplayerSessionName = //g'|tr -d '=\"; ')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# rcon password
	if [ -f "${servercfgfullpath}" ]; then
		rcon=$(grep -s "rcts_strAdminPassword" "${servercfgfullpath}"|sed 's/rcts_strAdminPassword = //g'|tr -d '=\"; ')
		if [ ! -n "${rcon}" ]; then
			rcon="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
			slots=$(grep -s "gam_ctMaxPlayers" "${servercfgfullpath}"|grep -v "#"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# game mode
	if [ -f "${servercfgfullpath}" ]; then
			gamemode=$(grep -s "gam_idGameMode" "${servercfgfullpath}"|grep -v "#"|sed 's/gam_idGameMode//g'|tr -d '=\"; ')
		if [ ! -n "${gamemode}" ]; then
			gamemode="NOT SET"
		fi
	else
		gamemode="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
		port=$(grep -s "prj_uwPort" "${servercfgfullpath}"|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	# query port
	if [ -f "${servercfgfullpath}" ]; then
			queryport=$((${port} + 1))
	fi
	if [ ! -n "${queryport}" ]; then
		queryport="0"
	fi

	fn_servercfgfullpath

elif [ "${engine}" == "source" ]||[ "${engine}" == "goldsource" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s "hostname" "${servercfgfullpath}"|sed 's/hostname //g'|sed 's/"//g')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# server password
	if [ -f "${servercfgfullpath}" ]; then
		serverpassword=$(grep -s "sv_password" "${servercfgfullpath}"|sed 's/sv_password//g'|sed 's/"//g')
		if [ ! -n "${serverpassword}" ]; then
			serverpassword="NOT SET"
		fi
	else
		serverpassword="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# rcon password
	if [ -f "${servercfgfullpath}" ]; then
		rcon=$(grep -s "rcon_password" "${servercfgfullpath}"|sed 's/rcon_password //g'|sed 's/"//g')
		if [ ! -n "${rcon}" ]; then
			rcon="NOT SET"
		fi
	else
		rcon="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
		slots=$(grep -s "gam_ctMaxPlayers" "${servercfgfullpath}"|grep -v "#"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

elif [ "${engine}" == "spark" ]; then

	# query port
	if [ -f "${servercfgfullpath}" ]; then
			queryport=$((${port} + 1))
	fi
	if [ ! -n "${queryport}" ]; then
		queryport="0"
	fi

elif [ "${gamename}" == "Teamspeak 3" ]; then

	# ip
	if [ -f "${servercfgfullpath}" ]; then
		# check if the ip exists in the config file. Failing this will fall back to the default.
		configipcheck=$(grep "voice_ip=" "${servercfgfullpath}"|sed 's/\voice_ip=//g')
	fi
	if [ -n "${configipcheck}" ]; then
		ip=$(grep "voice_ip=" "${servercfgfullpath}"|sed 's/\voice_ip=//g')
	fi

	# dbplugin
	if [ -f "${servercfgfullpath}" ]; then
		dbplugin=$(grep "dbplugin=" "${servercfgfullpath}"|sed 's/\dbplugin=//g')
		if [ ! -n "${serverpassword}" ]; then
			dbplugin="NOT SET"
		fi
	else
		dbplugin="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
	port=$(grep "default_voice_port=" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="9987"
	fi

	# query port
	if [ -f "${servercfgfullpath}" ]; then
			queryport=$(grep "query_port=" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${queryport}" ]; then
		queryport="10011"
	fi

	# fileport port
	if [ -f "${servercfgfullpath}" ]; then
			fileport=$(grep "filetransfer_port=" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${fileport}" ]; then
		fileport="30033"
	fi

elif [ "${engine}" == "unity3d" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep "ServerName" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# server password
	if [ -f "${servercfgfullpath}" ]; then
		serverpassword=$(grep "ServerPassword" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${serverpassword}" ]; then
			serverpassword="NOT SET"
		fi
	else
		serverpassword="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# webadmin enabled
	if [ -f "${servercfgfullpath}" ]; then
		webadminenabled=$(grep "ControlPanelEnabled" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${webadminenabled}" ]; then
			webadminenabled="NOT SET"
		fi
	else
		webadminenabled="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# webadmin port
	if [ -f "${servercfgfullpath}" ]; then
		webadminport=$(grep "ControlPanelPort" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${webadminport}" ]; then
		webadminport="0"
	fi

	# webadmin enabled
	if [ -f "${servercfgfullpath}" ]; then
		webadminenabled=$(grep "ControlPanelEnabled" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${webadminenabled}" ]; then
			webadminenabled="NOT SET"
		fi
	else
		webadminenabled="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# webadmin password
	if [ -f "${servercfgfullpath}" ]; then
		webadminpass=$(grep "ControlPanelPassword" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${webadminpass}" ]; then
			webadminpass="NOT SET"
		fi
	else
		webadminpass="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# telnet enabled
	if [ -f "${servercfgfullpath}" ]; then
		telnetenabled=$(grep "TelnetEnabled" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${telnetenabled}" ]; then
			telnetenabled="NOT SET"
		fi
	else
		telnetenabled="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# telnet port
	if [ -f "${servercfgfullpath}" ]; then
		telnetport=$(grep "TelnetPort" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${telnetport}" ]; then
		telnetport="0"
	fi

	# telnet password
	if [ -f "${servercfgfullpath}" ]; then
		telnetpass=$(grep "TelnetEnabled" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${telnetenabled}" ]; then
			telnetpass="NOT SET"
		fi
	else
		telnetpass="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# slots
	if [ -f "${servercfgfullpath}" ]; then
		slots=$(grep "ServerMaxPlayerCount" "${servercfgfullpath}"|tr -cd [:digit:])
		if [ ! -n "${slots}" ]; then
			slots="NOT SET"
		fi
	else
		slots="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# game mode
	if [ -f "${servercfgfullpath}" ]; then
		gamemode=$(grep "GameMode" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${gamemode}" ]; then
			gamemode="NOT SET"
		fi
	else
		gamemode="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# game world
	if [ -f "${servercfgfullpath}" ]; then
		gameworld=$(grep "GameWorld" "${servercfgfullpath}"|sed 's/^.*value="//'|cut -f1 -d"\"")
		if [ ! -n "${gameworld}" ]; then
			gameworld="NOT SET"
		fi
	else
		gameworld="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
		port=$(grep "ServerPort" "${servercfgfullpath}"|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	# query port
	if [ -f "${servercfgfullpath}" ]; then
		queryport=$((${port} + 1))
	fi
	if [ ! -n "${queryport}" ]; then
		queryport="0"
	fi

elif [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then

	# server name
	if [ -f "${servercfgfullpath}" ]; then
		servername=$(grep -s ServerName= ${servercfgfullpath}|sed 's/ServerName=//g')
		if [ ! -n "${servername}" ]; then
			servername="NOT SET"
		fi
	else
		servername="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# port
	if [ -f "${servercfgfullpath}" ]; then
		port=$(grep Port= "${servercfgfullpath}"|grep -v Master|grep -v LAN|grep -v Proxy|grep -v Listen|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${port}" ]; then
		port="0"
	fi

	# query port
	if [ -f "${servercfgfullpath}" ]; then
		queryport=$((${port} + 1))
	fi
	if [ ! -n "${queryport}" ]; then
		queryport="0"
	fi

	# gamespy query port
	if [ -f "${servercfgfullpath}" ]; then
		gsqueryport=$(grep OldQueryPortNumber= "${servercfgfullpath}"|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${gsqueryport}" ]; then
		gsqueryport="0"
	fi

	# query port
	if [ -f "${servercfgfullpath}" ]; then
		udplinkport=$((${port} + 2))
	fi
	if [ ! -n "${udplinkport}" ]; then
		udplinkport="0"
	fi

	# webadmin enabled
	if [ -f "${servercfgfullpath}" ]; then
		webadminenabled=$(grep bEnabled= "${servercfgfullpath}"|sed 's/bEnabled=//g'|tr -d '\r')
		if [ ! -n "${webadminenabled}" ]; then
			webadminenabled="NOT SET"
		fi
	else
		webadminenabled="\e[0;31mUNAVAILABLE\e[0m"
	fi

	# webadmin port
	if [ -f "${servercfgfullpath}" ]; then
		webadminport=$(grep ListenPort= "${servercfgfullpath}"|tr -d '\r'|tr -cd [:digit:])
	fi
	if [ ! -n "${webadminport}" ]; then
		webadminport="0"
	fi

	if [ "${engine}" == "unreal" ]; then

		# webadmin user
		if [ -f "${servercfgfullpath}" ]; then
			webadminuser=$(grep AdminUsername= "${servercfgfullpath}"|sed 's/\AdminUsername=//g')
			if [ ! -n "${webadminpass}" ]; then
				webadminpass="NOT SET"
			fi
		else
			webadminpass="\e[0;31mUNAVAILABLE\e[0m"
		fi

		# webadmin password
		if [ -f "${servercfgfullpath}" ]; then
			webadminpass=$(grep UTServerAdmin.UTServerAdmin "${servercfgfullpath}" -A 2| grep AdminPassword=|sed 's/\AdminPassword=//g')
			if [ ! -n "${webadminpass}" ]; then
				webadminpass="NOT SET"
			fi
		else
			webadminpass="\e[0;31mUNAVAILABLE\e[0m"
		fi

	else

		# webadmin user
		if [ -f "${servercfgfullpath}" ]; then
			webadminuser=$(grep AdminName= "${servercfgfullpath}"|sed 's/\AdminName=//g')
			if [ ! -n "${webadminpass}" ]; then
				webadminpass="NOT SET"
			fi
		else
			webadminpass="\e[0;31mUNAVAILABLE\e[0m"
		fi

		# webadmin password
		if [ -f "${servercfgfullpath}" ]; then
			webadminpass=$(grep AdminPassword= "${servercfgfullpath}"|sed 's/\AdminPassword=//g')
			if [ ! -n "${webadminpass}" ]; then
				webadminpass="NOT SET"
			fi
		else
			webadminpass="\e[0;31mUNAVAILABLE\e[0m"
		fi

	fi
fi
