diff --git a/lgsm/config-default/config-lgsm/hwserver/_default.cfg b/lgsm/config-default/config-lgsm/hwserver/_default.cfg index 8049ebde7..fb496fbb5 100644 --- a/lgsm/config-default/config-lgsm/hwserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/hwserver/_default.cfg @@ -14,7 +14,7 @@ ip="0.0.0.0" port="12871" queryport="12881" maxplayers="20" -map="" #Optional +defaultmap="" #Optional creativemode="0" #Free Build: creativemode="1" logfile="gamelog.txt" @@ -31,7 +31,7 @@ x64mode="0" ## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters # Edit with care | http://hurtworld.wikia.com/wiki/Hosting_A_Server fn_parms(){ -parms="-batchmode -nographics -exec \"host ${port} ${map} ${loadsave};queryport ${queryport};maxplayers ${maxplayers};servername ${servername};creativemode ${creativemode};${admins}\" -logfile \"${logfile}\" " +parms="-batchmode -nographics -exec \"host ${port} ${defaultmap} ${loadsave};queryport ${queryport};maxplayers ${maxplayers};servername ${servername};creativemode ${creativemode};${admins}\" -logfile \"${logfile}\" " } #### LinuxGSM Settings #### diff --git a/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg b/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg index c639687d9..252e20729 100644 --- a/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg +++ b/lgsm/config-default/config-lgsm/ns2cserver/_default.cfg @@ -22,10 +22,10 @@ webadminuser="admin" webadminpass="admin" webadminport="8080" mods="" -password="" +serverpassword="" # Add the following line to the parms if you want a private server. Ensuring # that the password variable above is not left empty. -# -password \"${password}\" +# -password \"${serverpassword}\" ## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters fn_parms(){ diff --git a/lgsm/config-default/config-lgsm/ns2server/_default.cfg b/lgsm/config-default/config-lgsm/ns2server/_default.cfg index 6da890e07..6b058c288 100644 --- a/lgsm/config-default/config-lgsm/ns2server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ns2server/_default.cfg @@ -22,10 +22,10 @@ webadminuser="admin" webadminpass="admin" webadminport="8080" mods="" -password="" +serverpassword="" # Add the following line to the parms if you want a private server. Ensuring # that the password variable above is not left empty. -# -password \"${password}\" +# -password \"${serverpassword}\" ## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters fn_parms(){ diff --git a/lgsm/config-default/config-lgsm/ut3server/_default.cfg b/lgsm/config-default/config-lgsm/ut3server/_default.cfg index f169e89f1..fbc0c0c4b 100644 --- a/lgsm/config-default/config-lgsm/ut3server/_default.cfg +++ b/lgsm/config-default/config-lgsm/ut3server/_default.cfg @@ -26,7 +26,7 @@ allowjoininprogress="true" ## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters # Edit with care | List of game types and mutators : http://wiki.unrealadmin.org/FAQ:UT3 fn_parms(){ -parms="server ${defaultmap}?Game=${game}?bIsDedicated=${isdedicated}?bIsLanMatch=${islanmatch}?bUsesStats=${usesstats}?bShouldAdvertise=${shouldadvertise}?PureServer=${pureserver}?bAllowJoinInProgress=${allowjoininprogress}?MaxPlayers=${maxplayers}?Mutator=${mutators} -port=${port} -queryport=${queryport} -multihome=${ip} -nohomedir -unattended -log=${gamelog}" +parms="server ${defaultmap}?Game=${game}?bIsDedicated=${isdedicated}?bIsLanMatch=${islanmatch}?bUsesStats=${usesstats}?bShouldAdvertise=${shouldadvertise}?PureServer=${pureserver}?bAllowJoinInProgress=${allowjoininprogress}?MaxPlayers=${maxplayers}?Mutator=${mutators} -port=${port} -queryport=${queryport} -multihome=${ip} -nohomedir -unattended -log=${gamelog} -ini=${servercfgfullpath}"" } #### LinuxGSM Settings #### diff --git a/lgsm/functions/README.md b/lgsm/functions/README.md index f18a8a161..01de5f0c7 100644 --- a/lgsm/functions/README.md +++ b/lgsm/functions/README.md @@ -1,11 +1,11 @@ -

Linux Game Server Manager - Functions

+# Linux Game Server Manager - Functions These functions are universal functions that work in all scripts. -

Function Names

+## Function Names Functions have been named to give an idea of what the function does. -* core: Essential functions that are will always run first. +* core: Essential functions that will always run first. * command: Primary command function. * check: Runs checks that will either halt on or fix an issue. * dev: development functions. diff --git a/lgsm/functions/command_details.sh b/lgsm/functions/command_details.sh index 4fc5a7094..687033740 100644 --- a/lgsm/functions/command_details.sh +++ b/lgsm/functions/command_details.sh @@ -208,6 +208,11 @@ fn_details_gameserver(){ echo -e "${blue}ASE:\t${default}${saveinterval} s" fi + # Random map rotation mode (Squad) + if [ -n "${randommapmode}" ]; then + echo -e "${blue}Map rotation:\t${default}${randommapmode}" + fi + # Online status if [ "${status}" == "0" ]; then echo -e "${blue}Status:\t${red}OFFLINE${default}" @@ -225,7 +230,7 @@ fn_details_script(){ # Service name: ql-server # qlserver version: 150316 # User: lgsm - # Email alert: off + # Email alert: off # Update on start: off # Location: /home/lgsm/qlserver # Config file: /home/lgsm/qlserver/serverfiles/baseq3/ql-server.cfg @@ -690,6 +695,17 @@ fn_details_spark(){ } | column -s $'\t' -t } +fn_details_squad(){ + echo -e "netstat -atunp | grep SquadServer" + echo -e "" + { + echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL" + echo -e "> Game\tINBOUND\t${port}\tudp" + echo -e "> Query\tINBOUND\t${queryport}\tudp" + echo -e "> RCON\tINBOUND\t${rconport}\ttcp" + } | column -s $'\t' -t +} + fn_details_starbound(){ echo -e "netstat -atunp | grep starbound" echo -e "" @@ -895,6 +911,8 @@ fn_display_details() { fn_details_quake3 elif [ "${gamename}" == "Quake Live" ]; then fn_details_quakelive + elif [ "${gamename}" == "Squad" ]; then + fn_details_squad elif [ "${gamename}" == "TeamSpeak 3" ]; then fn_details_teamspeak3 elif [ "${gamename}" == "Tower Unite" ]; then diff --git a/lgsm/functions/command_install.sh b/lgsm/functions/command_install.sh index 7bbc40f42..f344cc598 100644 --- a/lgsm/functions/command_install.sh +++ b/lgsm/functions/command_install.sh @@ -32,6 +32,8 @@ if [ "${gamename}" == "BrainBread 2" ]||[ "${gamename}" == "Black Mesa: Deathmat install_gslt.sh elif [ "${gamename}" == "Don't Starve Together" ]; then install_dst_token.sh +elif [ "${gamename}" == "Squad" ]; then + install_squad_license.sh elif [ "${gamename}" == "TeamSpeak 3" ]; then install_ts3db.sh elif [ "${gamename}" == "Multi Theft Auto" ]; then diff --git a/lgsm/functions/command_stop.sh b/lgsm/functions/command_stop.sh index 071915aee..5df29fd0e 100644 --- a/lgsm/functions/command_stop.sh +++ b/lgsm/functions/command_stop.sh @@ -175,7 +175,7 @@ fn_stop_graceful_sdtd(){ fn_stop_tmux } -# Attempts graceful of source using rcon 'stop' command. +# Attempts graceful of Minecraft using rcon 'stop' command. fn_stop_graceful_minecraft(){ fn_print_dots "Graceful: sending \"stop\"" fn_script_log_info "Graceful: sending \"stop\"" @@ -231,19 +231,49 @@ fn_stop_graceful_mta(){ fn_stop_tmux } +# Attempts graceful of Terraria using 'exit' console command. +fn_stop_graceful_terraria(){ + fn_print_dots "Graceful: sending \"exit\"" + fn_script_log_info "Graceful: sending \"exit\"" + # sends exit + tmux send -t "${servicename}" exit ENTER > /dev/null 2>&1 + # waits up to 30 seconds giving the server time to shutdown gracefuly + for seconds in {1..30}; do + check_status.sh + if [ "${status}" == "0" ]; then + fn_print_ok "Graceful: sending \"exit\": ${seconds}: " + fn_print_ok_eol_nl + fn_script_log_pass "Graceful: sending \"exit\": OK: ${seconds} seconds" + break + fi + sleep 1 + fn_print_dots "Graceful: sending \"exit\": ${seconds}" + done + check_status.sh + if [ "${status}" != "0" ]; then + fn_print_error "Graceful: sending \"exit\": " + fn_print_fail_eol_nl + fn_script_log_error "Graceful: sending \"exit\": FAIL" + fi + sleep 1 + fn_stop_tmux +} + fn_stop_graceful_select(){ if [ "${gamename}" == "7 Days To Die" ]; then fn_stop_graceful_sdtd - elif [ "${gamename}" == "Factorio" ]||[ "${gamename}" == "Minecraft" ]||[ "${gamename}" == "Multi Theft Auto" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]||[ "${gamename}" == "Mumble" ]; then + elif [ "${gamename}" == "Terraria" ]; then + fn_stop_graceful_terraria + elif [ "${gamename}" == "Minecraft" ]; then + fn_stop_graceful_minecraft + elif [ "${gamename}" == "Multi Theft Auto" ]; then + fn_stop_graceful_mta + elif [ "${engine}" == "goldsource" ]; then + fn_stop_graceful_goldsource + elif [ "${gamename}" == "Factorio" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]||[ "${gamename}" == "Mumble" ]; then fn_stop_graceful_ctrlc elif [ "${engine}" == "source" ]||[ "${engine}" == "quake" ]||[ "${engine}" == "idtech2" ]||[ "${engine}" == "idtech3" ]||[ "${engine}" == "idtech3_ql" ]||[ "${engine}" == "Just Cause 2" ]; then fn_stop_graceful_quit - elif [ "${engine}" == "goldsource" ]; then - fn_stop_graceful_goldsource - elif [ "${engine}" == "lwjgl2" ]; then - fn_stop_graceful_minecraft - elif [ "${engine}" == "renderware" ]; then - fn_stop_graceful_mta else fn_stop_tmux fi diff --git a/lgsm/functions/core_dl.sh b/lgsm/functions/core_dl.sh index 46cab72b5..7509b9223 100644 --- a/lgsm/functions/core_dl.sh +++ b/lgsm/functions/core_dl.sh @@ -61,7 +61,9 @@ fn_dl_extract(){ if [ "${mime}" == "application/gzip" ]||[ "${mime}" == "application/x-gzip" ]; then extractcmd=$(tar -zxf "${local_filedir}/${local_filename}" -C "${extractdir}") elif [ "${mime}" == "application/x-bzip2" ]; then - extractcmd=$(tar -jxf "${local_filedir}/${local_filename}" -C "${extractdir}") + tarcmd=$(tar -jxf "${filedir}/${filename}" -C "${extractdir}") + elif [ "${mime}" == "application/x-xz" ]; then + tarcmd=$(tar -xf "${filedir}/${filename}" -C "${extractdir}") elif [ "${mime}" == "application/zip" ]; then extractcmd=$(unzip -d "${extractdir}" "${local_filedir}/${local_filename}") fi diff --git a/lgsm/functions/core_functions.sh b/lgsm/functions/core_functions.sh index 31e8987e1..4323361b1 100644 --- a/lgsm/functions/core_functions.sh +++ b/lgsm/functions/core_functions.sh @@ -118,6 +118,11 @@ functionfile="${FUNCNAME}" fn_fetch_function } +install_squad_license.sh(){ +functionfile="${FUNCNAME}" +fn_fetch_function +} + command_mods_install.sh(){ functionfile="${FUNCNAME}" fn_fetch_function diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh index 470a4fb69..c7faba788 100644 --- a/lgsm/functions/core_getopt.sh +++ b/lgsm/functions/core_getopt.sh @@ -40,6 +40,7 @@ cmd_map_compressor_u99=( "mc;map-compressor" "compress_ut99_maps.sh" "Compresses cmd_map_compressor_u2=( "mc;map-compressor" "compress_unreal2_maps.sh" "Compresses all ${gamename} server maps." ) cmd_install_cdkey=( "cd;server-cd-key" "install_ut2k4_key.sh" "Add your server cd key." ) cmd_install_dst_token=( "ct;cluster-token" "install_dst_token.sh" "Configure cluster token." ) +cmd_install_squad_license=( "li;license" "install_squad_license.sh" "Add your Squad server license." ) cmd_fastdl=( "fd;fastdl" "command_fastdl.sh" "Build a FastDL directory." ) # Dev commands cmd_dev_debug=( "dev;developer" "command_dev_debug.sh" "Enable developer Mode." ) @@ -113,6 +114,11 @@ if [ "${gamename}" == "Multi Theft Auto" ]; then currentopt+=( "${cmd_install_default_resources[@]}" ) fi +# Squad license exclusive +if [ "${gamename}" == "Squad" ]; then + currentopt+=( "${cmd_install_squad_license[@]}" ) +fi + ## Mods commands if [ "${engine}" == "source" ]||[ "${gamename}" == "Rust" ]||[ "${gamename}" == "Hurtworld" ]||[ "${gamename}" == "7 Days To Die" ]; then currentopt+=( "${cmd_mods_install[@]}" "${cmd_mods_remove[@]}" "${cmd_mods_update[@]}" ) diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh index 22b7520af..8ff581e23 100644 --- a/lgsm/functions/info_config.sh +++ b/lgsm/functions/info_config.sh @@ -734,6 +734,27 @@ fn_info_config_wolfensteinenemyterritory(){ fi } +fn_info_config_squad(){ + if [ ! -f "${servercfgfullpath}" ]; then + servername="${unavailable}" + maxplayers="${unavailable}" + else + servername="$(cat ${servercfgfullpath} | grep "ServerName=" | cut -c13- | rev | cut -c3- | rev)" + maxplayers="$(cat ${servercfgfullpath} | grep "MaxPlayers=" | cut -c12- | tr -cd '[:digit:]')" + fi + + if [ ! -f "${servercfgdir}/Rcon.cfg" ]; then + rconport=${unavailable} + rconpassword=${unavailable} + else + rconport=$(cat ${servercfgdir}/Rcon.cfg | grep "Port=" | cut -c6- | tr -cd '[:digit:]') + rconpassword=$(cat ${servercfgdir}/Rcon.cfg | grep "Password=" | cut -c10-) + if [ -z "${rconpassword}" ]||[ ${#rconpassword} == 1 ]; then + rconpassword="${yellow}DISABLED${default}" + fi + fi +} + # Just Cause 2 if [ "${engine}" == "avalanche" ]; then fn_info_config_avalanche @@ -824,4 +845,6 @@ elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then fn_info_config_wolfensteinenemyterritory elif [ "${gamename}" == "Multi Theft Auto" ]; then fn_info_config_mta +elif [ "${gamename}" == "Squad" ]; then + fn_info_config_squad fi diff --git a/lgsm/functions/install_squad_license.sh b/lgsm/functions/install_squad_license.sh new file mode 100644 index 000000000..a832ab16f --- /dev/null +++ b/lgsm/functions/install_squad_license.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# LinuxGSM install_squad_license.sh function +# Author: Daniel Gibbs +# Website: https://gameservermanagers.com +# Description: Configures the Squad server's license. + +local commandname="INSTALL" +local commandaction="Install" +local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" + +echo "" +echo "Squad Server License" +echo "=================================" +sleep 1 +echo "Server license is an optional feature for ${gamename} server" +fn_script_log_info "Server license is an optional feature for ${gamename} server" + +echo "Get more info and a server license here:" +echo "http://forums.joinsquad.com/topic/16519-server-licensing-general-info/" +fn_script_log_info "Get more info and a server license here:" +fn_script_log_info "http://forums.joinsquad.com/topic/16519-server-licensing-general-info/" +echo "" +sleep 1 +echo "The Squad server license can be changed by editing ${servercfgdir}/License.cfg." +fn_script_log_info "The Squad server license can be changed by editing ${selfname}." +echo "" \ No newline at end of file diff --git a/lgsm/functions/update_factorio.sh b/lgsm/functions/update_factorio.sh index b39a4f86b..6c3a70ff8 100644 --- a/lgsm/functions/update_factorio.sh +++ b/lgsm/functions/update_factorio.sh @@ -49,7 +49,7 @@ fn_update_factorio_currentbuild(){ fi # Get current build from logs - currentbuild=$(grep "Loading mod base" "${consolelogdir}"/"${servicename}"-console.log 2> /dev/null|awk '{print $5}') + currentbuild=$(grep "Loading mod base" "${consolelogdir}"/"${servicename}"-console.log 2> /dev/null|awk '{print $5}'|tail -1) if [ -z "${currentbuild}" ]; then fn_print_error_nl "Checking for update: factorio.com: Current build version not found" fn_script_log_error "Checking for update: factorio.com: Current build version not found" @@ -60,7 +60,7 @@ fn_update_factorio_currentbuild(){ command_stop.sh exitbypass=1 command_start.sh - currentbuild=$(grep "Loading mod base" "${consolelogdir}"/"${servicename}"-console.log 2> /dev/null|awk '{print $5}') + currentbuild=$(grep "Loading mod base" "${consolelogdir}"/"${servicename}"-console.log 2> /dev/null|awk '{print $5}'|tail -1) if [ -z "${currentbuild}" ]; then fn_print_fail_nl "Checking for update: factorio.com: Current build version still not found" fn_script_log_fatal "Checking for update: factorio.com: Current build version still not found" @@ -76,7 +76,7 @@ fn_update_factorio_arch(){ fn_update_factorio_availablebuild(){ # Gets latest build info. - availablebuild=$(${curlpath} -s https://www.factorio.com/download-headless/stable | grep 'headless/linux64' | head -n 1 | grep -oP '(?<=get-download/).*?(?=/)') + availablebuild=$(curl -s https://www.factorio.com/download-headless/"${branch}" | grep 'headless/linux64' | head -n 1 | grep -oP '(?<=get-download/).*?(?=/)') sleep 1 # Checks if availablebuild variable has been set