gameservergame-servergame-servershacktoberfestdedicated-game-serversgamelinuxgsmserverbashgaminglinuxmultiplayer-game-servershell
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2605 lines
84 KiB
2605 lines
84 KiB
#!/bin/bash
|
|
# LinuxGSM info_game.sh module
|
|
# Author: Daniel Gibbs
|
|
# Contributors: https://linuxgsm.com/contrib
|
|
# Website: https://linuxgsm.com
|
|
# Description: Gathers various game server information.
|
|
# !Note: When adding variables to this script, ensure that they are also added to the command_dev_parse_game_details.sh script.
|
|
|
|
# shellcheck disable=SC2317
|
|
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
|
|
# Config Type: ini
|
|
# Comment: ; or #
|
|
# Note: this ini filter does not filter by section. Can cause issues with some games that have multiple sections with the same variable name.
|
|
fn_info_game_ini() {
|
|
# sed is used to process the file.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.*= *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the equals sign.
|
|
# - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="ini"
|
|
}
|
|
|
|
# Config Type: Key Value Pairs (Equals Delimited)
|
|
# Comment: ; or #
|
|
fn_info_game_keyvalue_pairs_equals() {
|
|
# sed is used to process the file.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.*= *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the equals sign.
|
|
# - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="keyvalue_pairs"
|
|
}
|
|
|
|
# Config Type: Key Value Pairs (Space Delimited)
|
|
# Comment: ; or #
|
|
fn_info_game_keyvalue_pairs_space() {
|
|
# sed is used to process the file.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.* *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.* *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an space ( ), possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the space.
|
|
# - = *"\?: Matches the space and any optional spaces before an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.* *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="keyvalue_pairs"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
fn_info_game_quakec() {
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^[[:space:]]*\<'"${2}"'\>/: Matches lines starting with optional leading whitespace and the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.* *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.* *"\?\([^"]*\)"\?/\1/: Matches and captures the value after any number of spaces, possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the spaces.
|
|
# - *: Matches any number of spaces.
|
|
# - "\?: Matches an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/[[:space:]]\<'"${2}"'\>/ { s/.* *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="quakec"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Comment: // or /* */
|
|
fn_info_game_json() {
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(jq -r "${2}" "${servercfgparse}")\""
|
|
configtype="json"
|
|
}
|
|
|
|
# Config Type: SQF
|
|
# Comment: // or /* */
|
|
fn_info_game_sqf() {
|
|
# sed is the command itself, indicating that we want to use the sed utility.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.*= *"\?\([^"]*\)"\?/\1/;s/;$//p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the equals sign.
|
|
# - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - s/;$//: Removes a semicolon (;) at the end of the line, if present.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *"\?\([^"]*\)"\?/\1/;s/;$//p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="sqf"
|
|
}
|
|
|
|
# Config Type: XML
|
|
# Comment: <!-- -->
|
|
fn_info_game_xml() {
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(xmllint --xpath "string(${2})" "${servercfgparse}")\""
|
|
configtype="xml"
|
|
}
|
|
|
|
# Config Type: Valve KeyValues
|
|
# Comment: //
|
|
fn_info_game_valve_keyvalues() {
|
|
# sed is used to process the file.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^[[:space:]]*\<'"${2}"'\>/: Matches lines starting with optional leading whitespace and the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.* *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.* *"\?\([^"]*\)"\?/\1/: Matches and captures the value after any number of spaces, possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the spaces.
|
|
# - *: Matches any number of spaces.
|
|
# - "\?: Matches an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.* *"\([^"]*\)".*/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="valve_keyvalues"
|
|
}
|
|
|
|
# Config Type: Java properties
|
|
# Comment: # or !
|
|
fn_info_game_java_properties() {
|
|
# sed is used to process the file.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.*= *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.*= *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the equals sign.
|
|
# - = *"\?: Matches the equals sign and any optional spaces before an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="java"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Comment: ; or #
|
|
# Note: this ini filter does not filter by section. Can cause issues with some games that have multiple sections with the same variable name.
|
|
fn_info_game_lua() {
|
|
# - The '-n' option suppresses automatic printing of pattern space.
|
|
# - The pattern '/^[[:space:]]*\<'"${2}"'\>/' matches lines that begin with optional whitespace characters,
|
|
# followed by the exact word specified by the second argument.
|
|
# - If the pattern matches, the following actions are performed within the curly braces:
|
|
# - 's/.*= *"\?\([^"]*\)"\?/\1/' extracts the value within double quotes after an equal sign (if present),
|
|
# removing any leading or trailing spaces.
|
|
# - 's#,.*##' removes everything after the first comma encountered.
|
|
# - 'p' prints the modified pattern space.
|
|
# - 'q' quits processing after printing the modified pattern space.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^[[:space:]]*\<'"${2}"'\>/ { s/.*= *"\?\([^"]*\)"\?/\1/;s#,.*##;p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="lua"
|
|
}
|
|
|
|
# Config Type: custom (Project Cars)
|
|
# Comment: //
|
|
fn_info_game_pc_config() {
|
|
# sed is used to process the file.
|
|
# -n: Suppresses automatic printing of pattern space.
|
|
# /^\<'"${2}"'\>/: Matches lines starting with the word provided as the second argument ($2), considering it as a whole word.
|
|
# { s/.*: *"\?\([^"]*\)"\?/\1/p;q }: Command block executed for lines that match the pattern.
|
|
# - s/.*: *"\?\([^"]*\)"\?/\1/: Matches and captures the value after an equals sign (=), possibly surrounded by optional double quotes.
|
|
# - .*: Matches any characters before the equals sign.
|
|
# - : *"\?: Matches the : sign and any optional spaces before an optional double quote.
|
|
# - \([^"]*\): Captures any characters that are not double quotes.
|
|
# - "\?: Matches an optional double quote.
|
|
# - /1: Replaces the entire matched pattern with the captured value.
|
|
# - p: Prints the modified line.
|
|
# - q: Quits processing after modifying and printing the line.
|
|
|
|
if [ -n "${3}" ]; then
|
|
servercfgparse="${3}"
|
|
else
|
|
servercfgparse="${servercfgfullpath}"
|
|
fi
|
|
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*: *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
|
|
configtype="pc_config"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: false
|
|
# Comment: ; or #
|
|
# Example: NAME=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ac() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "ADMIN_PASSWORD"
|
|
fn_info_game_ini "httpport" "HTTP_PORT"
|
|
fn_info_game_ini "port" "TCP_PORT"
|
|
fn_info_game_ini "servername" "NAME"
|
|
fn_info_game_ini "serverpassword" "PASSWORD"
|
|
fi
|
|
adminpassword="${adminpassword:-NOT SET}"
|
|
httpport="${httpport:-0}"
|
|
port="${port:-0}"
|
|
queryport="${httpport:-0}"
|
|
servername="${servername:-NOT SET}"
|
|
serverpassword="${serverpassword:-NOT SET}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: SessionName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ark() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "ServerAdminPassword"
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "rconport" "RCONPort"
|
|
fn_info_game_ini "servername" "SessionName"
|
|
fn_info_game_ini "serverpassword" "ServerPassword"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
rawport="$((port + 1))"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: SQF
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: serverName = "SERVERNAME";
|
|
# Filetype: cfg
|
|
fn_info_game_arma3() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_sqf "adminpassword" "passwordAdmin"
|
|
fn_info_game_sqf "maxplayers" "maxPlayers"
|
|
fn_info_game_sqf "servername" "hostname"
|
|
fn_info_game_sqf "serverpassword" "password"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
battleeyeport="$((port + 4))"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="$((port + 2))"
|
|
voiceport="${port:-"0"}"
|
|
voiceunusedport="$((port + 3))"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: serverName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_av() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "maxPlayers"
|
|
fn_info_game_ini "port" "port"
|
|
fn_info_game_ini "rconport" "rconPort"
|
|
fn_info_game_ini "servername" "name"
|
|
fn_info_game_ini "serverpassword" "password"
|
|
fn_info_game_ini "rconpassword" "rconPassword"
|
|
if [ -n "${rconpassword}" ]; then
|
|
rconenabled="true"
|
|
fi
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
|
|
rconenabled="${rconenabled:-"false"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
# queryport doesnt respond to any queries, using session only.
|
|
queryport=""$((port + 3))""
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="$((port + 21))"
|
|
steamworksport="$((port + 20))"
|
|
}
|
|
|
|
# Config Type: ini unknown (Source?)
|
|
# Parameters: true
|
|
# Comment: # or //
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: txt
|
|
fn_info_game_bo() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "port" "ServerPort"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "Password"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_btl() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
rconport="$((port + 2))"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_cmw() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fn_info_game_ini "rconport" "RConPort" "${servercfgdir}/DefaultGame.ini"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: iMaxClanMembers=1024
|
|
# Filetype: ini
|
|
fn_info_game_dodr() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "iMaxPlayers"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: cluster_name = SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_dst() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "port" "server_port"
|
|
fn_info_game_ini "steamauthport" "authentication_port"
|
|
fn_info_game_ini "steamport" "master_server_port"
|
|
fi
|
|
if [ -f "${clustercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "max_players" "${clustercfgfullpath}"
|
|
fn_info_game_ini "servername" "cluster_name" "${clustercfgfullpath}"
|
|
fn_info_game_ini "serverpassword" "cluster_password" "${clustercfgfullpath}"
|
|
fn_info_game_ini "tickrate" "tick_rate" "${clustercfgfullpath}"
|
|
fn_info_game_ini "masterport" "master_port" "${clustercfgfullpath}"
|
|
fn_info_game_ini "gamemode" "game_mode" "${clustercfgfullpath}"
|
|
fn_info_game_ini "configip" "bind_ip" "${clustercfgfullpath}"
|
|
fi
|
|
|
|
cave="${cave:-"NOT SET"}"
|
|
cluster="${cluster:-"NOT SET"}"
|
|
configip="${configip:-"0.0.0.0"}"
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
master="${master:-"NOT SET"}"
|
|
masterport="${masterport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
shard="${shard:-"NOT SET"}"
|
|
sharding="${sharding:-"NOT SET"}"
|
|
steamauthport="${steamauthport:-"0"}"
|
|
steamport="${steamport:-"0"}"
|
|
tickrate="${tickrate:-"0"}"
|
|
}
|
|
|
|
# Config Type: parameters
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: SessionName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_hcu() {
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_kf() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled"
|
|
fn_info_game_ini "httppassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort"
|
|
fn_info_game_ini "httpuser" "AdminName"
|
|
fn_info_game_ini "lanport" "LANServerPort"
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "port" "Port"
|
|
fn_info_game_ini "gamespyqueryport" "OldQueryPortNumber"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
gamespyqueryport="${gamespyqueryport:-"0"}" # Gamespy Query Port
|
|
httpenabled="${httpenabled:-"NOT SET"}"
|
|
httppassword="${adminpassword}"
|
|
httpport="${httpport:-"0"}"
|
|
httpuser="${httpuser:-"NOT SET"}"
|
|
lanport="${lanport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport=$((28902 + (port - 7757))) # Valve Query Port
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="20610"
|
|
unreal2queryport="$((port + 1))" # Unreal2 Query Port
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_kf2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort" "${servercfgdir}/KFWeb.ini"
|
|
fn_info_game_ini "port" "Port" "${servercfgdir}/LinuxServer-KFEngine.ini"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled" "${servercfgdir}/KFWeb.ini"
|
|
fn_info_game_ini "httppassword" "AdminPassword"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"NOT SET"}"
|
|
httppassword="${httppassword:-"NOT SET"}"
|
|
httpuser="Admin"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_mh() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "ServerPassword"
|
|
fn_info_game_ini "rconpassword" "AdminPassword"
|
|
fn_info_game_ini "maxplayers" "MaxSlots"
|
|
fi
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
beaconport="${beaconport:-"0"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName="SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_ps() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "reservedslots" "NumReservedSlots"
|
|
fn_info_game_ini "serverpassword" "ServerPassword"
|
|
fi
|
|
if [ -f "${servercfgdir}/Rcon.cfg" ]; then
|
|
fn_info_game_ini "rconpassword" "Password" "${servercfgdir}/Rcon.cfg"
|
|
fn_info_game_ini "rconport" "Port" "${servercfgdir}/Rcon.cfg"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
if [ -z "${queryport}" ]; then
|
|
queryport="${port:-"0"}"
|
|
fi
|
|
randommap="${randommap:-"NOT SET"}"
|
|
if [ -z "${rconpassword}" ] || [ "${#rconpassword}" == 1 ]; then
|
|
rconpassword="NOT SET"
|
|
fi
|
|
rconport="${rconport:-"0"}"
|
|
reservedslots="${reservedslots:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
tickrate="${tickrate:-"0"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: false
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: cfg
|
|
fn_info_game_pvr() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
port401="$((port + 400))"
|
|
queryport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: false
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: cfg
|
|
fn_info_game_pw() {
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
steamport="${steamport:-"0"}"
|
|
unknownport="1985"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: PublicName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_pz() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "port" "DefaultPort"
|
|
fn_info_game_ini "rconpassword" "RCONPassword"
|
|
fn_info_game_ini "servername" "PublicName"
|
|
fn_info_game_ini "serverpassword" "Password"
|
|
fn_info_game_ini "worldname" "Map"
|
|
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
worldname="${worldname:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: xml
|
|
# Comment: <!-- -->
|
|
# Example: <ServerName>SERVERNAME</ServerName>
|
|
# Filetype: xml
|
|
fn_info_game_st() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_xml "adminpassword" "/SettingData/AdminPassword"
|
|
fn_info_game_xml "maxplayers" "/SettingData/ServerMaxPlayers"
|
|
fn_info_game_xml "port" "/SettingData/GamePort"
|
|
fn_info_game_xml "queryport" "/SettingData/UpdatePort"
|
|
fn_info_game_xml "saveinterval" "/SettingData/SaveInterval"
|
|
fn_info_game_xml "servername" "/SettingData/ServerName"
|
|
fn_info_game_xml "serverpassword" "/SettingData/ServerPassword"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
saveinterval="${saveinterval:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
worldsave="${worldsave:-"NOT SET"}"
|
|
worldtype="${worldtype:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_stn() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "configip" "ServerIP"
|
|
fn_info_game_ini "port" "ServerPort"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "ServerPassword"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: parameters
|
|
# Parameters: true
|
|
# Comment:
|
|
# Example: -ServerName="SERVERNAME"
|
|
# Filetype: parameters
|
|
fn_info_game_tf() {
|
|
beaconport="${beaconport:-"0"}"
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
saveinterval="${saveinterval:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
shutdownport="${shutdownport:-"0"}"
|
|
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=ServerName
|
|
# Filetype: ini
|
|
fn_info_game_ti() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "MaxPlayerCount"
|
|
fn_info_game_ini "queueenabled" "bQueueEnabled"
|
|
fn_info_game_ini "queueport" "QueuePort"
|
|
fn_info_game_ini "rconenabled" "bRconEnabled"
|
|
fn_info_game_ini "rconpassword" "RconPassword"
|
|
fn_info_game_ini "rconport" "RconPort"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "ServerPassword"
|
|
fn_info_game_ini "serverpasswordenabled" "bServerPassword"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
queueenabled="${queueenabled:-"NOT SET"}"
|
|
queueport="${queueport:-"0"}"
|
|
rconenabled="${rconenabled:-"NOT SET"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
serverpasswordenabled="${serverpasswordenabled:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: false
|
|
# Comment: ; or #
|
|
# Example: default_voice_port=9987
|
|
# Filetype: ini
|
|
fn_info_game_ts3() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "configip" "voice_ip"
|
|
fn_info_game_ini "dbplugin" "dbplugin"
|
|
fn_info_game_ini "fileport" "filetransfer_port"
|
|
fn_info_game_ini "port" "default_voice_port"
|
|
fn_info_game_ini "httpqueryport" "query_http_port"
|
|
fn_info_game_ini "httpsqueryport" "query_https_port"
|
|
fn_info_game_ini "queryport" "query_port"
|
|
fn_info_game_ini "sshqueryport" "query_ssh_port"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
dbplugin="${dbplugin:-"NOT SET"}"
|
|
fileport="${fileport:-"0"}"
|
|
port="${port:-"0"}"
|
|
httpqueryport="${httpqueryport:-"0"}"
|
|
httpsqueryport="${httpsqueryport:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
sshqueryport="${sshqueryport:-"0"}"
|
|
telnetport="${queryport}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerTitle=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_tu() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "servername" "ServerTitle"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
steamport="$((port + 1))"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ut99() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "beaconport" "ServerBeaconPort"
|
|
fn_info_game_ini "port" "Port"
|
|
fn_info_game_ini "gamespyqueryport" "OldQueryPortNumber"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled"
|
|
fn_info_game_ini "httppassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort"
|
|
fn_info_game_ini "httpuser" "AdminUserName"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
beaconport="${beaconport:-"0"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
gamespyqueryport="${gamespyqueryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"0"}"
|
|
httppassword="${httppassword:-"NOT SET"}"
|
|
httpuser="${httpuser:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ut3() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled"
|
|
fn_info_game_ini "httppassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"0"}"
|
|
httppassword="${httppassword:-"NOT SET"}"
|
|
httpuser="Admin"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_unreal2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort"
|
|
fn_info_game_ini "port" "Port"
|
|
fn_info_game_ini "gamespyqueryport" "OldQueryPortNumber"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled"
|
|
fn_info_game_ini "httpuser" "AdminName"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
gamespyqueryport="${gamespyqueryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"0"}"
|
|
httppassword="${adminpassword:-"NOT SET"}"
|
|
httpuser="${httpuser:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName="SERVERNAME"
|
|
# Filetype: ini
|
|
fn_info_game_ut() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
gametype="${gametype:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ut2k4() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort"
|
|
fn_info_game_ini "lanport" "LANServerPort"
|
|
fn_info_game_ini "port" "Port"
|
|
fn_info_game_ini "gamespyqueryport" "OldQueryPortNumber"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled"
|
|
fn_info_game_ini "httpuser" "AdminName"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
lanport="${lanport:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
gamespyqueryport="${gamespyqueryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"0"}"
|
|
httppassword="${adminpassword}"
|
|
httpuser="${httpuser:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: "name": "SERVERNAME",
|
|
# Filetype: json
|
|
fn_info_game_armar() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "adminpassword" ".game.passwordAdmin"
|
|
fn_info_game_json "configip" ".bindAddress"
|
|
fn_info_game_json "maxplayers" ".game.maxPlayers"
|
|
fn_info_game_json "port" ".bindPort"
|
|
fn_info_game_json "queryport" ".a2s.port"
|
|
fn_info_game_json "servername" ".game.name"
|
|
fn_info_game_json "serverpassword" ".game.password"
|
|
fn_info_game_json "rconpassword" ".rcon.password"
|
|
fn_info_game_json "rconport" ".rcon.port"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
battleeyeport="$((port + 4))"
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: con
|
|
# Parameters: true
|
|
# Comment: # or //
|
|
# Example: game.serverName "SERVERNAME"
|
|
# Filetype: con
|
|
fn_info_game_bf1942() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_space "configip" "game.serverIP"
|
|
fn_info_game_keyvalue_pairs_space "maxplayers" "game.serverMaxPlayers"
|
|
fn_info_game_keyvalue_pairs_space "port" "game.serverPort"
|
|
fn_info_game_keyvalue_pairs_space "queryport" "game.gameSpyPort"
|
|
fn_info_game_keyvalue_pairs_space "servername" "game.serverName"
|
|
fn_info_game_keyvalue_pairs_space "serverpassword" "game.serverPassword"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: con
|
|
# Parameters: true
|
|
# Comment: # or //
|
|
# Example: game.serverName "SERVERNAME"
|
|
# Filetype: con
|
|
fn_info_game_bfv() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_space "configip" "game.serverIp"
|
|
fn_info_game_keyvalue_pairs_space "maxplayers" "game.serverMaxPlayers"
|
|
fn_info_game_keyvalue_pairs_space "port" "game.serverPort"
|
|
fn_info_game_keyvalue_pairs_space "servername" "game.serverName"
|
|
fn_info_game_keyvalue_pairs_space "serverpassword" "game.serverPassword"
|
|
fn_info_game_keyvalue_pairs_space "queryport" "game.gameSpyPort"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: XML
|
|
# Parameters: false
|
|
# Comment: <!-- -->
|
|
# Example: <serversettings name="SERVERNAME" />
|
|
# Filetype: xml
|
|
fn_info_game_bt() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_xml "maxplayers" "/serversettings/@MaxPlayers"
|
|
fn_info_game_xml "port" "/serversettings/@port"
|
|
fn_info_game_xml "queryport" "/serversettings/@queryport"
|
|
fn_info_game_xml "servername" "/serversettings/@name"
|
|
fn_info_game_xml "serverpassword" "/serversettings/@password"
|
|
fn_info_game_xml "tickrate" "/serversettings/@TickRate"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
tickrate="${tickrate:-"0"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
# Example: "game_title":"SERVERNAME"
|
|
# Filetype: json
|
|
fn_info_game_cd() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "maxplayers" ".player_count"
|
|
fn_info_game_json "port" ".game_port"
|
|
fn_info_game_json "rconenabled" ".rcon"
|
|
fn_info_game_json "rconpassword" ".rcon_password"
|
|
fn_info_game_json "rconport" ".rcon_port"
|
|
fn_info_game_json "servername" ".game_title"
|
|
fn_info_game_json "steamport" ".steam_port_messages"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
rconenabled="${rconenabled:-"NOT SET"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
steamport="${steamport:-"0"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: "worldName":"SERVERNAME"
|
|
# Filetype: json
|
|
fn_info_game_ck() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "servername" ".worldName"
|
|
fn_info_game_json "maxplayers" ".maxNumberPlayers"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_cod() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_coduo() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_cod2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_cod4() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rcon_password"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_codwaw() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rcon_password"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
# Example: "ServerName": "SERVERNAME"
|
|
# Filetype: json
|
|
fn_info_game_col() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "configip" ".ServerSettings.ServerIP"
|
|
fn_info_game_json "maxplayers" ".ServerSettings.MaxPlayerCount"
|
|
fn_info_game_json "port" ".ServerSettings.ServerGamePort"
|
|
fn_info_game_json "rconpassword" ".ServerSettings.RCONPassword"
|
|
fn_info_game_json "servername" ".ServerSettings.ServerName"
|
|
fn_info_game_json "serverpassword" ".ServerSettings.ServerPassword"
|
|
fn_info_game_json "steamport" ".ServerSettings.ServerSteamPort"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="${steamport:-"0"}"
|
|
}
|
|
|
|
# Config Type: Valve KeyValues
|
|
# Comment: //
|
|
# Example: hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_cs2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_valve_keyvalues "servername" "hostname"
|
|
fn_info_game_valve_keyvalues "defaultmap" "map"
|
|
fn_info_game_valve_keyvalues "serverpassword" "sv_password"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ct() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "configip" "bindAddress"
|
|
fn_info_game_ini "gamemode" "gameMode"
|
|
fn_info_game_ini "maxplayers" "maxPlayerNumber"
|
|
fn_info_game_ini "port" "port"
|
|
fn_info_game_ini "saveinterval" "autoSaveSec"
|
|
fn_info_game_ini "servername" "name"
|
|
fn_info_game_ini "serverpassword" "serverPassword"
|
|
fn_info_game_ini "serverpasswordenabled" "usePassword"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
saveinterval="${saveinterval:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
serverpasswordenabled="${serverpasswordenabled:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: SQF
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: serverName = "SERVERNAME";
|
|
# Filetype: cfg
|
|
fn_info_game_dayz() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_sqf "adminpassword" "passwordAdmin"
|
|
fn_info_game_sqf "maxplayers" "maxPlayers"
|
|
fn_info_game_sqf "queryport" "steamQueryPort"
|
|
fn_info_game_sqf "servername" "hostname"
|
|
fn_info_game_sqf "serverpassword" "password"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
battleeyeport="$((port + 4))"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="$((port + 2))"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
# Example: "Description": "SERVERNAME"
|
|
# Filetype: json
|
|
fn_info_game_eco() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "configip" ".IPAddress"
|
|
fn_info_game_json "httpport" ".WebServerPort"
|
|
fn_info_game_json "maxplayers" ".MaxConnections"
|
|
fn_info_game_json "port" ".GameServerPort"
|
|
fn_info_game_json "rconport" ".RconServerPort"
|
|
fn_info_game_json "servername" ".Description"
|
|
fn_info_game_json "serverpassword" ".Password"
|
|
fn_info_game_json "tickrate" ".Rate"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
tickrate="${tickrate:-"0"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_etl() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "configip" "net_ip"
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "port" "net_port"
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: "name": "SERVERNAME"
|
|
# Filetype: json
|
|
fn_info_game_fctr() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "authtoken" ".token"
|
|
fn_info_game_json "maxplayers" ".max_players"
|
|
fn_info_game_json "savegameinterval" ".autosave_interval"
|
|
fn_info_game_json "servername" ".name"
|
|
fn_info_game_json "serverpassword" ".game_password"
|
|
fn_info_game_json "versioncount" ".autosave_slots"
|
|
fi
|
|
authtoken="${authtoken:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
savegameinterval="${savegameinterval:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
versioncount="${versioncount:-"0"}"
|
|
|
|
# get server version if installed.
|
|
local factoriobin="${executabledir}${executable:1}"
|
|
if [ -f "${factoriobin}" ]; then
|
|
serverversion="$(${factoriobin} --version | grep -m 1 "Version:" | awk '{print $2}')"
|
|
fi
|
|
}
|
|
|
|
# Config Type: parameters (json possibly supported)
|
|
# Parameters: true
|
|
# Comment:
|
|
# Example: -serverName="SERVERNAME"
|
|
# Filetype: parameters
|
|
fn_info_game_hw() {
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
# #4189 option setting can be blank
|
|
# defaultmap="${defaultmap:-"NOT SET"}"
|
|
creativemode="${creativemode:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_hz() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fi
|
|
adminpass="${adminpassword:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
rconport="$((port + 2))"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: parameters
|
|
# Parameters: true
|
|
# Comment:
|
|
# Example: -hostname='SERVERNAME'
|
|
# Filetype: parameters
|
|
fn_info_game_inss() {
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
defaultscenario="${defaultscenario:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
}
|
|
|
|
# Config Type: lua (Custom)
|
|
# Parameters: false
|
|
# Comment: --
|
|
# Example: Name = "SERVERNAME",
|
|
# Filetype: lua
|
|
fn_info_game_jc2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_lua "configip" "BindIP"
|
|
fn_info_game_lua "maxplayers" "MaxPlayers"
|
|
fn_info_game_lua "port" "BindPort"
|
|
fn_info_game_lua "serverdescription" "Description"
|
|
fn_info_game_lua "servername" "Name"
|
|
fn_info_game_lua "serverpassword" "Password"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
queryport="${port}"
|
|
queryport="${queryport:-"0"}"
|
|
serverdescription="${serverdescription:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
# Example: "name": "SERVERNAME"
|
|
# Filetype: json
|
|
fn_info_game_jc3() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "configip" ".host"
|
|
fn_info_game_json "httpport" ".httpPort"
|
|
fn_info_game_json "maxplayers" ".maxPlayers"
|
|
fn_info_game_json "port" ".port"
|
|
fn_info_game_json "queryport" ".queryPort"
|
|
fn_info_game_json "serverdescription" ".description"
|
|
fn_info_game_json "servername" ".name"
|
|
fn_info_game_json "serverpassword" ".password"
|
|
fn_info_game_json "steamport" ".steamPort"
|
|
fn_info_game_json "tickrate" ".maxTickRate"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
serverdescription="${serverdescription:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="${steamport:-"0"}"
|
|
tickrate="${tickrate:-"0"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Parameters: true
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_jk2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fn_info_game_quakec "serverversion" "mv_serverversion"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
serverversion="${serverversion:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Java properties
|
|
# Comment: # or !
|
|
# Example: motd=SERVERNAME
|
|
# Filetype: properties
|
|
fn_info_game_mc() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_java_properties "configip" "server-ip"
|
|
fn_info_game_java_properties "gamemode" "gamemode"
|
|
fn_info_game_java_properties "maxplayers" "max-players"
|
|
fn_info_game_java_properties "port" "server-port"
|
|
fn_info_game_java_properties "queryenabled" "enable-query"
|
|
fn_info_game_java_properties "queryport" "query.port"
|
|
fn_info_game_java_properties "rconpassword" "rcon.password"
|
|
fn_info_game_java_properties "rconport" "rcon.port"
|
|
fn_info_game_java_properties "servername" "motd"
|
|
fn_info_game_java_properties "worldname" "level-name"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryenabled="${queryenabled:-"NOT SET"}"
|
|
if [ -z "${queryport}" ]; then
|
|
queryport="${port}"
|
|
fi
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
worldname="${worldname:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Java properties
|
|
# Comment: # or !
|
|
# Example: server-name=SERVERNAME
|
|
# Filetype: properties
|
|
fn_info_game_mcb() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_java_properties "gamemode" "gamemode"
|
|
fn_info_game_java_properties "maxplayers" "max-players"
|
|
fn_info_game_java_properties "port" "server-port"
|
|
fn_info_game_java_properties "portv6" "server-portv6"
|
|
fn_info_game_java_properties "servername" "server-name"
|
|
fn_info_game_java_properties "worldname" "level-name"
|
|
fi
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
portipv6="${portipv6:-"NOT SET"}"
|
|
queryport="${port}"
|
|
servername="${servername:-"NOT SET"}"
|
|
worldname="${worldname:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_mohaa() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "rconpassword" "rconPassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: xml
|
|
# Comment: <!-- -->
|
|
# Example: <servername>Default MTA Server</servername>
|
|
# Filetype: conf
|
|
fn_info_game_mta() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_xml "port" "/config/serverport"
|
|
fn_info_game_xml "httpport" "/config/httpport"
|
|
fn_info_game_xml "servername" "/config/servername"
|
|
fn_info_game_xml "maxplayers" "/config/maxplayers"
|
|
fn_info_game_xml "ase" "/config/ase"
|
|
fi
|
|
if [ "${ase}" == "1" ]; then
|
|
ase="Enabled"
|
|
else
|
|
ase="Disabled"
|
|
fi
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 123))"
|
|
httpport="${httpport:-"0"}"
|
|
ase="${ase:-"Disabled"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
}
|
|
|
|
# Config Type: custom
|
|
# Comment: //
|
|
# Example: port = 14159,
|
|
# Filetype: cfg
|
|
fn_info_game_nec() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_lua "maxplayers" "slots"
|
|
fn_info_game_lua "port" "port"
|
|
fn_info_game_lua "serverpassword" "password"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
servername="Necesse Port ${port}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ohd() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini rconenabled "bEnabled"
|
|
fn_info_game_ini rconport "ListenPort"
|
|
fn_info_game_ini rconpassword "Password"
|
|
fi
|
|
rconenabled="${rconenabled:-"false"}"
|
|
rconport="${rconport:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
fn_info_game_onset() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "maxplayers" ".maxplayers"
|
|
fn_info_game_json "port" ".port"
|
|
fn_info_game_json "servername" ".servername_short"
|
|
fn_info_game_json "serverpassword" ".password"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
httpport="$((port - 2))"
|
|
queryport="$((port - 1))"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: custom
|
|
# Parameters: false
|
|
# Comment: //
|
|
# Filetype: cfg
|
|
fn_info_game_pc() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_pc_config "apiport" "httpApiPort"
|
|
fn_info_game_pc_config "httpenabled" "enableHttpApi"
|
|
fn_info_game_pc_config "httpport" "httpApiPort"
|
|
fn_info_game_pc_config "maxplayers" "maxPlayerCount"
|
|
fn_info_game_pc_config "port" "hostPort"
|
|
fn_info_game_pc_config "queryport" "queryPort"
|
|
fn_info_game_pc_config "servername" "name"
|
|
fn_info_game_pc_config "serverpassword" "password"
|
|
fn_info_game_pc_config "steamport" "steamPort"
|
|
fi
|
|
apiport="${apiport:-"0"}"
|
|
httpenabled="${httpenabled:-"0"}"
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="${steamport:-"0"}"
|
|
}
|
|
|
|
fn_info_game_pc2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_pc_config "apiport" "httpApiPort"
|
|
fn_info_game_pc_config "httpenabled" "enableHttpApi"
|
|
fn_info_game_pc_config "httpport" "httpApiPort"
|
|
fn_info_game_pc_config "maxplayers" "maxPlayerCount"
|
|
fn_info_game_pc_config "port" "hostPort"
|
|
fn_info_game_pc_config "queryport" "queryPort"
|
|
fn_info_game_pc_config "servername" "name"
|
|
fn_info_game_pc_config "serverpassword" "password"
|
|
fn_info_game_pc_config "steamport" "steamPort"
|
|
fi
|
|
apiport="${apiport:-"0"}"
|
|
httpenabled="${httpenabled:-"0"}"
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="${steamport:-"0"}"
|
|
}
|
|
|
|
# Config Type: SiiNunit
|
|
# Comment: //
|
|
# Example: lobby_name: "SERVERNAME"
|
|
# Filetype: ssi
|
|
fn_info_game_prism3d() {
|
|
# Config
|
|
if [ ! -f "${servercfgfullpath}" ]; then
|
|
maxplayers="${unavailable}"
|
|
port="${zero}"
|
|
queryport="${zero}"
|
|
servername="${unavailable}"
|
|
serverpassword="${unavailable}"
|
|
else
|
|
maxplayers=$(sed -nr 's/^\s*max_players\s*:\s*([0-9]+)/\1/p' "${servercfgfullpath}")
|
|
port=$(sed -nr 's/^\s*connection_dedicated_port\s*:\s*([0-9]+)/\1/p' "${servercfgfullpath}")
|
|
queryport=$(sed -nr 's/^\s*query_dedicated_port\s*:\s*([0-9]+)/\1/p' "${servercfgfullpath}")
|
|
servername=$(sed -nr 's/^\s*lobby_name\s*:\s*"?([^"\r\n]+)"?/\1/p' "${servercfgfullpath}")
|
|
serverpassword=$(sed -nr 's/^\s*password\s*:\s*"(.*)"/\1/p' "${servercfgfullpath}")
|
|
|
|
# Not set
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"27015"}"
|
|
queryport="${queryport:-"27016"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
fi
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_q2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "maxclients"
|
|
fn_info_game_quakec "rconpassword" "rcon_password"
|
|
fn_info_game_quakec "servername" "hostname"
|
|
fi
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_q3() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# fn_info_game_quakec "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_q4() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "rconpassword" "net_serverRemoteConsolePassword"
|
|
fn_info_game_quakec "servername" "si_name"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_ql() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "configip" "net_ip"
|
|
fn_info_game_quakec "maxplayers" "sv_maxClients"
|
|
fn_info_game_quakec "port" "net_port"
|
|
fn_info_game_quakec "rconpassword" "zmq_rcon_password"
|
|
fn_info_game_quakec "rconport" "zmq_rcon_port"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fn_info_game_quakec "statsport" "zmq_stats_port"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
statsport="${statsport:-"0"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_qw() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "maxclients"
|
|
fn_info_game_quakec "rconpassword" "rcon_password"
|
|
fn_info_game_quakec "servername" "hostname"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Example: ServerName=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_ro() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "AdminPassword"
|
|
fn_info_game_ini "httpenabled" "bEnabled"
|
|
fn_info_game_ini "httppassword" "AdminPassword"
|
|
fn_info_game_ini "httpport" "ListenPort"
|
|
fn_info_game_ini "httpuser" "AdminName"
|
|
fn_info_game_ini "lanport" "LANServerPort"
|
|
fn_info_game_ini "maxplayers" "MaxPlayers"
|
|
fn_info_game_ini "port" "Port"
|
|
fn_info_game_ini "servername" "ServerName"
|
|
fn_info_game_ini "serverpassword" "GamePassword"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"NOT SET"}"
|
|
httppassword="${adminpassword}"
|
|
httpport="${httpport:-"0"}"
|
|
httpuser="${httpuser:-"NOT SET"}"
|
|
lanport="${lanport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport=$((28902 + (port - 7757))) # Valve Query Port
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
steamport="20610"
|
|
unreal2queryport="$((port + 1))" # Unreal2 Query Port
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_rtcw() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fi
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Parameters (mostly)
|
|
fn_info_game_rust() {
|
|
# Parameters
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
appport="${appport:-"0"}"
|
|
rconport="${rconport:-"0"}"
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconweb="${rconweb:-"NOT SET"}"
|
|
tickrate="${tickrate:-"0"}"
|
|
saveinterval="${saveinterval:-"0"}"
|
|
serverlevel="${serverlevel:-"NOT SET"}"
|
|
customlevelurl="${customlevelurl:-"NOT SET"}"
|
|
worldsize="${worldsize:-"0"}"
|
|
if [ -n "${seed}" ]; then
|
|
seed="${seed:-"0"}"
|
|
elif [ -f "${datadir}/${selfname}-seed.txt" ]; then
|
|
seed=$(cat "${datadir}/${selfname}-seed.txt")
|
|
fi
|
|
salt="${salt:-"0"}"
|
|
}
|
|
|
|
fn_info_game_rw() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_equals "configip" "Server_IP"
|
|
fn_info_game_keyvalue_pairs_equals "gamemode" "World_GameMode"
|
|
fn_info_game_keyvalue_pairs_equals "maxplayers" "Server_MaxPlayers"
|
|
fn_info_game_keyvalue_pairs_equals "port" "Server_Port"
|
|
fn_info_game_keyvalue_pairs_equals "rconport" "RCON_Port"
|
|
fn_info_game_keyvalue_pairs_equals "seed" "World_Seed"
|
|
fn_info_game_keyvalue_pairs_equals "servername" "Server_Name"
|
|
fn_info_game_keyvalue_pairs_equals "worldname" "World_Name"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="$((port - 1))"
|
|
rconport="${rconport:-"0"}"
|
|
seed="${seed:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
worldname="${worldname:-"NOT SET"}"
|
|
|
|
}
|
|
|
|
# Config Type: custom
|
|
# Comment: // or /* */
|
|
# example: hostname "SERVERNAME"
|
|
# filetypes: cfg
|
|
fn_info_game_samp() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
servername=$(grep "hostname" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^\//d' -e 's/hostname//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
|
|
rconpassword=$(grep "rcon_password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/^rcon_password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
|
|
port=$(grep "port" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
|
|
queryport="${port}"
|
|
rconport="${port}"
|
|
maxplayers=$(grep "maxplayers" "${servercfgfullpath}" | grep -v "#" | tr -cd '[:digit:]')
|
|
|
|
# Not set
|
|
servername="${servername:-"NOT SET"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
port="${port:-"7777"}"
|
|
queryport="${port:-"7777"}"
|
|
rconport="${rconport:-"7777"}"
|
|
maxplayers="${maxplayers:-"12"}"
|
|
fi
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
fn_info_game_sb() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "maxplayers" ".maxPlayers"
|
|
fn_info_game_json "port" ".gameServerPort"
|
|
fn_info_game_json "queryenabled" ".runQueryServer"
|
|
fn_info_game_json "queryport" ".queryServerPort"
|
|
fn_info_game_json "rconenabled" ".runRconServer"
|
|
fn_info_game_json "rconpassword" ".rconServerPassword"
|
|
fn_info_game_json "rconport" ".rconServerPort"
|
|
fn_info_game_json "servername" ".serverName"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryenabled="${queryenabled:-"NOT SET"}"
|
|
queryport="${queryport:-"0"}"
|
|
rconenabled="${rconenabled:-"NOT SET"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Parameters
|
|
fn_info_game_sbots() {
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
}
|
|
|
|
# Config Type: custom (possibly YAML)
|
|
# Comment: #
|
|
# Example: server_name: SERVERNAME
|
|
# Filetype: txt
|
|
fn_info_game_scpsl() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_pc_config "adminpassword" "administrator_query_password"
|
|
fn_info_game_pc_config "configip" "ipv4_bind_ip"
|
|
fn_info_game_pc_config "maxplayers" "max_players"
|
|
fn_info_game_pc_config "servername" "server_name"
|
|
fn_info_game_pc_config "tickrate" "server_tickrate"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
servername="${servername:-"NOT SET"}"
|
|
tickrate="${tickrate:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: xml
|
|
# Comment: <!-- -->
|
|
# Example: <property name="ServerName" value="My Game Host"/>
|
|
# Filetype: xml
|
|
fn_info_game_sdtd() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_xml "gamemode" "/ServerSettings/property[@name='GameMode']/@value"
|
|
fn_info_game_xml "httpenabled" "/ServerSettings/property[@name='ControlPanelEnabled']/@value"
|
|
fn_info_game_xml "httppassword" "/ServerSettings/property[@name='ControlPanelPassword']/@value"
|
|
fn_info_game_xml "httpport" "/ServerSettings/property[@name='ControlPanelPort']/@value"
|
|
fn_info_game_xml "maxplayers" "/ServerSettings/property[@name='ServerMaxPlayerCount']/@value"
|
|
fn_info_game_xml "servername" "/ServerSettings/property[@name='ServerName']/@value"
|
|
fn_info_game_xml "serverpassword" "/ServerSettings/property[@name='ServerPassword']/@value"
|
|
fn_info_game_xml "port" "/ServerSettings/property[@name='ServerPort']/@value"
|
|
fn_info_game_xml "telnetenabled" "/ServerSettings/property[@name='TelnetEnabled']/@value"
|
|
fn_info_game_xml "telnetpass" "/ServerSettings/property[@name='TelnetPassword']/@value"
|
|
fn_info_game_xml "telnetport" "/ServerSettings/property[@name='TelnetPort']/@value"
|
|
fn_info_game_xml "worldname" "/ServerSettings/property[@name='GameWorld']/@value"
|
|
fi
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
httpenabled="${httpenabled:-"NOT SET"}"
|
|
httppassword="${httppassword:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
port3="$((port + 2))"
|
|
queryport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
telnetenabled="${telnetenabled:-"NOT SET"}"
|
|
# Telnet IP will be localhost if no password is set
|
|
# check_ip will set the IP first. This will overwrite it.
|
|
if [ -z "${telnetpassword}" ]; then
|
|
telnetip="127.0.0.1"
|
|
fi
|
|
telnetpass="${telnetpass:-"NOT SET"}"
|
|
telnetport="${telnetport:-"0"}"
|
|
worldname="${worldname:-"NOT SET"}"
|
|
|
|
}
|
|
|
|
# Config Type: Parameters (with an ini)
|
|
fn_info_game_sf() {
|
|
# Parameters
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
beaconport="${beaconport:-"0"}"
|
|
}
|
|
|
|
# Config Type: Parameters (with an ini)
|
|
fn_info_game_sm() {
|
|
servername="${servername:-"NOT SET"}"
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
# telnet config
|
|
telnetenabled=true
|
|
telnetip="127.0.0.1"
|
|
telnetport="${telnetport:-"0"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_sof2() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "rconpassword" "rconpassword"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fi
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: ini
|
|
# Parameters: true
|
|
# Comment: ; or #
|
|
# Server_Name=SERVERNAME
|
|
# Filetype: ini
|
|
fn_info_game_sol() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_ini "adminpassword" "Admin_Password"
|
|
fn_info_game_ini "maxplayers" "Max_Players"
|
|
fn_info_game_ini "port" "Port"
|
|
fn_info_game_ini "servername" "Server_Name"
|
|
fn_info_game_ini "serverpassword" "Game_Password"
|
|
fi
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
filesport="$((port + 10))"
|
|
queryport="${filesport}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Valve KeyValues
|
|
# Comment: //
|
|
# Example: hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_source() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_valve_keyvalues "rconpassword" "rcon_password"
|
|
fn_info_game_valve_keyvalues "servername" "hostname"
|
|
fn_info_game_valve_keyvalues "serverpassword" "sv_password"
|
|
fi
|
|
# Steamport can be between 26901-26910 and is normally automatically set.
|
|
# Some servers might support -steamport parameter to set
|
|
if [ "${steamport}" == "0" ] || [ -v "${steamport}" ]; then
|
|
steamport="$(echo "${ssinfo}" | grep "${srcdslinuxpid}" | awk '{print $5}' | grep ":269" | cut -d ":" -f2)"
|
|
fi
|
|
clientport="${clientport:-"0"}"
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
rconport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
# steamport="${steamport:-"0"}" Steamport is optional so we dont want it to show as not set.
|
|
}
|
|
|
|
fn_info_game_spark() {
|
|
defaultmap="${defaultmap:-"NOT SET"}"
|
|
httppassword="${httppassword:-"NOT SET"}"
|
|
httpport="${httpport:-"0"}"
|
|
httpuser="${httpuser:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
modserverport=${modserverport:-"0"}
|
|
port="${port:-"0"}"
|
|
queryport="$((port + 1))"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Custom (key-value pairs)
|
|
# Parameters: true
|
|
# Comment: # or //
|
|
# Example: ServerName="SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_squad() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_equals "servername" "ServerName"
|
|
fn_info_game_keyvalue_pairs_equals "maxplayers" "MaxPlayers"
|
|
fi
|
|
if [ -f "${servercfgdir}/Rcon.cfg" ]; then
|
|
fn_info_game_keyvalue_pairs_equals "rconport" "Port" "${servercfgdir}/Rcon.cfg"
|
|
fn_info_game_keyvalue_pairs_equals "rconpassword" "Password" "${servercfgdir}/Rcon.cfg"
|
|
fi
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
rconport="${rconport:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
if [ -z "${rconpassword}" ] || [ ${#rconpassword} == 1 ]; then
|
|
rconpassword="NOT SET"
|
|
fi
|
|
}
|
|
|
|
# Config Type: Custom (key-value pairs)
|
|
# Comment: # or //
|
|
# Example: ServerName="SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_terraria() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_equals "maxplayers" "maxplayers"
|
|
fn_info_game_keyvalue_pairs_equals "port" "port"
|
|
fn_info_game_keyvalue_pairs_equals "servername" "worldname"
|
|
fn_info_game_keyvalue_pairs_equals "worldname" "world"
|
|
fi
|
|
queryport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
worldname="${worldname:-"NOT SET"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
}
|
|
|
|
# Config Type: QuakeC (custom)
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_tw() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_space "servername" "sv_name"
|
|
fn_info_game_keyvalue_pairs_space "serverpassword" "password"
|
|
fn_info_game_keyvalue_pairs_space "rconpassword" "sv_rcon_password"
|
|
fn_info_game_keyvalue_pairs_space "port" "sv_port"
|
|
fn_info_game_keyvalue_pairs_space "maxplayers" "sv_max_clients"
|
|
fi
|
|
queryport="${port}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
}
|
|
|
|
# Config Type: Parameters
|
|
fn_info_game_unt() {
|
|
servername="${servername:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
steamport="$((port + 1))"
|
|
}
|
|
|
|
# Config Type: Parameters
|
|
fn_info_game_vh() {
|
|
port="${port:-"0"}"
|
|
# Query port only enabled if public server
|
|
if [ "${public}" != "0" ]; then
|
|
queryport="$((port + 1))"
|
|
else
|
|
querymode="1"
|
|
fi
|
|
worldname="${worldname:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: json
|
|
# Parameters: false
|
|
# Comment: // or /* */
|
|
fn_info_game_vints() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_json "configip" "select(.Ip != null) | .Ip"
|
|
fn_info_game_json "maxplayers" ".MaxClients"
|
|
fn_info_game_json "port" ".Port"
|
|
fn_info_game_json "servername" ".ServerName"
|
|
fn_info_game_json "serverpassword" "select(.Password != null) | .Password"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: Java properties
|
|
# Comment: # or !
|
|
# Example: motd=SERVERNAME
|
|
# Filetype: properties
|
|
fn_info_game_vpmc() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_java_properties "servername" "motd"
|
|
fn_info_game_java_properties "bindaddress" "bind"
|
|
fi
|
|
configip="$(echo "${bindaddress}" | cut -d ':' -f 1)"
|
|
port="$(echo "${bindaddress}" | cut -d ':' -f 2)"
|
|
queryport="${port:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_wet() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "configip" "net_ip"
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "port" "net_port"
|
|
fn_info_game_quakec "rconpassword" "zmq_rcon_password"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fn_info_game_quakec "serverpassword" "g_password"
|
|
fi
|
|
configip="${configip:-"0.0.0.0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
serverpassword="${serverpassword:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: // or /* */
|
|
# Example: set sv_hostname "SERVERNAME"
|
|
# Filetype: cfg
|
|
fn_info_game_wf() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_quakec "maxplayers" "sv_maxclients"
|
|
fn_info_game_quakec "rconpassword" "rcon_password"
|
|
fn_info_game_quakec "servername" "sv_hostname"
|
|
fi
|
|
httpport="${httpport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port:-"0"}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
# Config Type: QuakeC
|
|
# Comment: //
|
|
# Filetype: cfg
|
|
fn_info_game_xnt() {
|
|
if [ -f "${servercfgfullpath}" ]; then
|
|
fn_info_game_keyvalue_pairs_space "maxplayers" "maxplayers"
|
|
fn_info_game_keyvalue_pairs_space "port" "port"
|
|
fn_info_game_keyvalue_pairs_space "rconpassword" "rcon_password"
|
|
fn_info_game_keyvalue_pairs_space "servername" "hostname"
|
|
fi
|
|
maxplayers="${maxplayers:-"8"}"
|
|
port="${port:-"0"}"
|
|
queryport="${port}"
|
|
rconpassword="${rconpassword:-"NOT SET"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
}
|
|
|
|
fn_info_game_wmc() {
|
|
if [ ! -f "${servercfgfullpath}" ]; then
|
|
servername="${unavailable}"
|
|
maxplayers="${zero}"
|
|
port="${zero}"
|
|
queryport="${zero}"
|
|
queryenabled="${unavailable}"
|
|
else
|
|
servername=$(sed -e '/^listeners:/,/^[a-z]/!d' "${servercfgfullpath}" | sed -nr 's/^[ ]+motd: (.*)$/\1/p' | tr -d "'" | sed 's/&1//')
|
|
queryport=$(sed -nr 's/^[ -]+query_port: ([0-9]+)/\1/p' "${servercfgfullpath}")
|
|
queryenabled=$(sed -nr 's/^[ ]+query_enabled: (.*)$/\1/p' "${servercfgfullpath}")
|
|
port=$(sed -nr 's/^[ ]+host: [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:([0-9]+)/\1/p' "${servercfgfullpath}")
|
|
# the normal max_players does only show in on the client side and has no effect how many players can connect.
|
|
maxplayers=$(sed -nr 's/^player_limit: ([-]*[0-9])/\1/p' "${servercfgfullpath}")
|
|
configip=$(sed -nr 's/^[ ]+host: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):[0-9]+/\1/p' "${servercfgfullpath}")
|
|
|
|
if [ "${maxplayers}" == "-1" ] || [ "${maxplayers}" == "0" ]; then
|
|
maxplayers="UNLIMITED"
|
|
fi
|
|
|
|
# Not set
|
|
servername="${servername:-"NOT SET"}"
|
|
queryport="${queryport:-"25577"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
configip="${configip:-"0.0.0.0"}"
|
|
fi
|
|
}
|
|
|
|
# Config Type: parameters
|
|
# Parameters: true
|
|
# Comment:
|
|
# Example: hostname='SERVERNAME'
|
|
# Filetype: parameters
|
|
fn_info_game_wurm() {
|
|
gamemode="${gamemode:-"NOT SET"}"
|
|
homekingdom="${homekingdom:-"0"}"
|
|
adminpassword="${adminpassword:-"NOT SET"}"
|
|
epicsettings="${epicsettings:-"NOT SET"}"
|
|
homeserver="${homeserver:-"NOT SET"}"
|
|
loginserver="${loginserver:-"NOT SET"}"
|
|
rmiport="${rmiport:-"0"}"
|
|
rmiregport="${rmiregport:-"0"}"
|
|
maxplayers="${maxplayers:-"0"}"
|
|
servername="${servername:-"NOT SET"}"
|
|
# serverpassword="${serverpassword:-"NOT SET"}"
|
|
port="${port:-"0"}"
|
|
queryport="${queryport:-"0"}"
|
|
}
|
|
|
|
unavailable="${red}UNAVAILABLE${default}"
|
|
zero="${red}0${default}"
|
|
|
|
if [ "${shortname}" == "ac" ]; then
|
|
fn_info_game_ac
|
|
elif [ "${shortname}" == "ark" ]; then
|
|
fn_info_game_ark
|
|
elif [ "${shortname}" == "arma3" ]; then
|
|
fn_info_game_arma3
|
|
elif [ "${shortname}" == "armar" ]; then
|
|
fn_info_game_armar
|
|
elif [ "${shortname}" == "av" ]; then
|
|
fn_info_game_av
|
|
elif [ "${shortname}" == "bf1942" ]; then
|
|
fn_info_game_bf1942
|
|
elif [ "${shortname}" == "bfv" ]; then
|
|
fn_info_game_bfv
|
|
elif [ "${shortname}" == "bo" ]; then
|
|
fn_info_game_bo
|
|
elif [ "${shortname}" == "bt" ]; then
|
|
fn_info_game_bt
|
|
elif [ "${shortname}" == "btl" ]; then
|
|
fn_info_game_btl
|
|
elif [ "${shortname}" == "ck" ]; then
|
|
fn_info_game_ck
|
|
elif [ "${shortname}" == "cmw" ]; then
|
|
fn_info_game_cmw
|
|
elif [ "${shortname}" == "cod" ]; then
|
|
fn_info_game_cod
|
|
elif [ "${shortname}" == "coduo" ]; then
|
|
fn_info_game_cod
|
|
elif [ "${shortname}" == "cod2" ]; then
|
|
fn_info_game_cod2
|
|
elif [ "${shortname}" == "cod4" ]; then
|
|
fn_info_game_cod4
|
|
elif [ "${shortname}" == "codwaw" ]; then
|
|
fn_info_game_codwaw
|
|
elif [ "${shortname}" == "col" ]; then
|
|
fn_info_game_col
|
|
elif [ "${shortname}" == "cs2" ]; then
|
|
fn_info_game_cs2
|
|
elif [ "${shortname}" == "ct" ]; then
|
|
fn_info_game_ct
|
|
elif [ "${shortname}" == "dayz" ]; then
|
|
fn_info_game_dayz
|
|
elif [ "${shortname}" == "dodr" ]; then
|
|
fn_info_game_dodr
|
|
elif [ "${shortname}" == "dst" ]; then
|
|
fn_info_game_dst
|
|
elif [ "${shortname}" == "eco" ]; then
|
|
fn_info_game_eco
|
|
elif [ "${shortname}" == "etl" ]; then
|
|
fn_info_game_etl
|
|
elif [ "${shortname}" == "fctr" ]; then
|
|
fn_info_game_fctr
|
|
elif [ "${shortname}" == "hw" ]; then
|
|
fn_info_game_hw
|
|
elif [ "${shortname}" == "hz" ]; then
|
|
fn_info_game_hz
|
|
elif [ "${shortname}" == "inss" ]; then
|
|
fn_info_game_inss
|
|
elif [ "${shortname}" == "jc2" ]; then
|
|
fn_info_game_jc2
|
|
elif [ "${shortname}" == "jc3" ]; then
|
|
fn_info_game_jc3
|
|
elif [ "${shortname}" == "jk2" ]; then
|
|
fn_info_game_jk2
|
|
elif [ "${shortname}" == "kf" ]; then
|
|
fn_info_game_kf
|
|
elif [ "${shortname}" == "kf2" ]; then
|
|
fn_info_game_kf2
|
|
elif [ "${shortname}" == "mc" ] || [ "${shortname}" == "pmc" ]; then
|
|
fn_info_game_mc
|
|
elif [ "${shortname}" == "mcb" ]; then
|
|
fn_info_game_mcb
|
|
elif [ "${shortname}" == "mh" ]; then
|
|
fn_info_game_mh
|
|
elif [ "${shortname}" == "mohaa" ]; then
|
|
fn_info_game_mohaa
|
|
elif [ "${shortname}" == "mta" ]; then
|
|
fn_info_game_mta
|
|
elif [ "${shortname}" == "nec" ]; then
|
|
fn_info_game_nec
|
|
elif [ "${shortname}" == "ohd" ]; then
|
|
fn_info_game_ohd
|
|
elif [ "${shortname}" == "onset" ]; then
|
|
fn_info_game_onset
|
|
elif [ "${shortname}" == "pc" ]; then
|
|
fn_info_game_pc
|
|
elif [ "${shortname}" == "pc2" ]; then
|
|
fn_info_game_pc2
|
|
elif [ "${shortname}" == "squad44" ]; then
|
|
fn_info_game_ps
|
|
elif [ "${shortname}" == "pvr" ]; then
|
|
fn_info_game_pvr
|
|
elif [ "${shortname}" == "pw" ]; then
|
|
fn_info_game_pw
|
|
elif [ "${shortname}" == "pz" ]; then
|
|
fn_info_game_pz
|
|
elif [ "${shortname}" == "q2" ]; then
|
|
fn_info_game_q2
|
|
elif [ "${shortname}" == "q3" ]; then
|
|
fn_info_game_q3
|
|
elif [ "${shortname}" == "q4" ]; then
|
|
fn_info_game_q4
|
|
elif [ "${shortname}" == "ql" ]; then
|
|
fn_info_game_ql
|
|
elif [ "${shortname}" == "qw" ]; then
|
|
fn_info_game_qw
|
|
elif [ "${shortname}" == "ro" ]; then
|
|
fn_info_game_ro
|
|
elif [ "${shortname}" == "rtcw" ]; then
|
|
fn_info_game_rtcw
|
|
elif [ "${shortname}" == "rust" ]; then
|
|
fn_info_game_rust
|
|
elif [ "${shortname}" == "rw" ]; then
|
|
fn_info_game_rw
|
|
elif [ "${shortname}" == "samp" ]; then
|
|
fn_info_game_samp
|
|
elif [ "${shortname}" == "sb" ]; then
|
|
fn_info_game_sb
|
|
elif [ "${shortname}" == "sbots" ]; then
|
|
fn_info_game_sbots
|
|
elif [ "${shortname}" == "scpsl" ] || [ "${shortname}" == "scpslsm" ]; then
|
|
fn_info_game_scpsl
|
|
elif [ "${shortname}" == "sdtd" ]; then
|
|
fn_info_game_sdtd
|
|
elif [ "${shortname}" == "sf" ]; then
|
|
fn_info_game_sf
|
|
elif [ "${shortname}" == "sm" ]; then
|
|
fn_info_game_sm
|
|
elif [ "${shortname}" == "sof2" ]; then
|
|
fn_info_game_sof2
|
|
elif [ "${shortname}" == "sol" ]; then
|
|
fn_info_game_sol
|
|
elif [ "${engine}" == "spark" ]; then
|
|
fn_info_game_spark
|
|
elif [ "${shortname}" == "squad" ]; then
|
|
fn_info_game_squad
|
|
elif [ "${shortname}" == "st" ]; then
|
|
fn_info_game_st
|
|
elif [ "${shortname}" == "stn" ]; then
|
|
fn_info_game_stn
|
|
elif [ "${shortname}" == "terraria" ]; then
|
|
fn_info_game_terraria
|
|
elif [ "${shortname}" == "tf" ]; then
|
|
fn_info_game_tf
|
|
elif [ "${shortname}" == "ti" ]; then
|
|
fn_info_game_ti
|
|
elif [ "${shortname}" == "ts3" ]; then
|
|
fn_info_game_ts3
|
|
elif [ "${shortname}" == "tu" ]; then
|
|
fn_info_game_tu
|
|
elif [ "${shortname}" == "tw" ]; then
|
|
fn_info_game_tw
|
|
elif [ "${shortname}" == "unt" ]; then
|
|
fn_info_game_unt
|
|
elif [ "${shortname}" == "ut" ]; then
|
|
fn_info_game_ut
|
|
elif [ "${shortname}" == "ut2k4" ]; then
|
|
fn_info_game_ut2k4
|
|
elif [ "${shortname}" == "ut3" ]; then
|
|
fn_info_game_ut3
|
|
elif [ "${shortname}" == "ut99" ]; then
|
|
fn_info_game_ut99
|
|
elif [ "${shortname}" == "vh" ]; then
|
|
fn_info_game_vh
|
|
elif [ "${shortname}" == "vints" ]; then
|
|
fn_info_game_vints
|
|
elif [ "${shortname}" == "vpmc" ]; then
|
|
fn_info_game_vpmc
|
|
elif [ "${shortname}" == "wet" ]; then
|
|
fn_info_game_wet
|
|
elif [ "${shortname}" == "wf" ]; then
|
|
fn_info_game_wf
|
|
elif [ "${shortname}" == "wmc" ]; then
|
|
fn_info_game_wmc
|
|
elif [ "${shortname}" == "wurm" ]; then
|
|
fn_info_game_wurm
|
|
elif [ "${engine}" == "prism3d" ]; then
|
|
fn_info_game_prism3d
|
|
elif [ "${engine}" == "source" ] || [ "${engine}" == "goldsrc" ]; then
|
|
fn_info_game_source
|
|
elif [ "${engine}" == "unreal2" ]; then
|
|
fn_info_game_unreal2
|
|
elif [ "${shortname}" == "xnt" ]; then
|
|
fn_info_game_xnt
|
|
fi
|
|
|
|
# Public IP address
|
|
# Cache public IP address for 24 hours
|
|
if [ ! -f "${tmpdir}/publicip.json" ] || [ "$(find "${tmpdir}/publicip.json" -mmin +1440)" ]; then
|
|
apiurl="http://ip-api.com/json"
|
|
fn_script_log_info "Querying ${apiurl} for public IP address"
|
|
|
|
ipresponse=$(curl -s --max-time 3 "${apiurl}") # Attempt to query ip-api.com with a 3 second timeout
|
|
exitcode=$?
|
|
|
|
# Check if the first request was successfull
|
|
if [ "${exitcode}" -eq 0 ]; then
|
|
fn_script_log_pass "Queried ${apiurl} for public IP address"
|
|
|
|
# Parse and reformat the response
|
|
publicip="$(echo "${ipresponse}" | jq -r '.query')"
|
|
country="$(echo "${ipresponse}" | jq -r '.country')"
|
|
countrycode="$(echo "${ipresponse}" | jq -r '.countryCode')"
|
|
# Construct a universal JSON format
|
|
echo "{\"ip\":\"${publicip}\",\"country\":\"${country}\",\"countryCode\":\"${countrycode}\",\"apiurl\":\"${apiurl}\"}" > "${tmpdir}/publicip.json"
|
|
else
|
|
# Fallback to myip.wtf if the initial request failed or timed out
|
|
apiurl="https://myip.wtf/json"
|
|
fn_script_log_pass "Querying ${apiurl} for public IP address"
|
|
|
|
ipresponse=$(curl -s --max-time 3 "${apiurl}") # Attempt to query myip.wtf with a 3 second timeout as a backup
|
|
exitcode=$?
|
|
|
|
# Check if the backup request was successfull
|
|
if [ "${exitcode}" -eq 0 ]; then
|
|
fn_script_log_pass "Queried ${apiurl} for public IP address"
|
|
|
|
# Parse and reformat the response from myip.wtf
|
|
publicip="$(echo "${ipresponse}" | jq -r '.YourFuckingIPAddress')"
|
|
country="$(echo "${ipresponse}" | jq -r '.YourFuckingCountry')"
|
|
countrycode="$(echo "${ipresponse}" | jq -r '.YourFuckingCountryCode')"
|
|
# Construct a universal JSON format
|
|
echo "{\"ip\":\"${publicip}\",\"country\":\"${country}\",\"countryCode\":\"${countrycode}\",\"apiurl\":\"${apiurl}\"}" > "${tmpdir}/publicip.json"
|
|
else
|
|
fn_script_log_error "Unable to get public IP address"
|
|
publicip="NOT SET"
|
|
country="NOT SET"
|
|
countrycode="NOT SET"
|
|
fi
|
|
fi
|
|
else
|
|
# Cached IP is still valid
|
|
fn_script_log_pass "Using cached IP as public IP address"
|
|
publicip="$(jq -r '.ip' "${tmpdir}/publicip.json")"
|
|
country="$(jq -r '.country' "${tmpdir}/publicip.json")"
|
|
countrycode="$(jq -r '.countryCode' "${tmpdir}/publicip.json")"
|
|
fi
|
|
|
|
# Alert IP address
|
|
if [ "${displayip}" ]; then
|
|
alertip="${displayip}"
|
|
elif [ "${publicip}" ]; then
|
|
alertip="${publicip}"
|
|
else
|
|
alertip="${ip}"
|
|
fi
|
|
|
|
# Steam Master Server - checks if detected by master server.
|
|
# Checked after config init, as the queryport is needed
|
|
if [ -z "${displaymasterserver}" ]; then
|
|
# if queryport and port3 are not set then set them to 123456789
|
|
# this is to prevent the query from failing.
|
|
if [ -z "${queryport}" ]; then
|
|
queryport="123456789"
|
|
fi
|
|
if [ -z "${port3}" ]; then
|
|
port3="123456789"
|
|
fi
|
|
if [ "$(command -v jq 2> /dev/null)" ]; then
|
|
if [ -n "${ip}" ] && [ -n "${port}" ]; then
|
|
if [ "${steammaster}" == "true" ] || [ "${commandname}" == "DEV-QUERY-RAW" ]; then
|
|
# Query external IP first as most liky to succeed.
|
|
masterserver="$(curl --connect-timeout 3 -m 3 -s "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${publicip}&format=json" | jq --arg port "${port}" --arg queryport "${queryport}" --arg port3 "${port3}" 'if .response.servers != null then .response.servers[] | select((.gameport == ($port|tonumber) or .gameport == ($queryport|tonumber) or .gameport == ($port3|tonumber))) | .addr else empty end' | wc -l 2> /dev/null)"
|
|
if [ "${masterserver}" == "0" ]; then
|
|
# Loop though server IP addresses if external IP fails.
|
|
for queryip in "${queryips[@]}"; do
|
|
masterserver="$(curl --connect-timeout 3 -m 3 -s "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr=${queryip}&format=json" | jq --arg port "${port}" --arg queryport "${queryport}" --arg port3 "${port3}" 'if .response.servers != null then .response.servers[] | select((.gameport == ($port|tonumber) or .gameport == ($queryport|tonumber) or .gameport == ($port3|tonumber))) | .addr else empty end' | wc -l 2> /dev/null)"
|
|
done
|
|
fi
|
|
if [ "${masterserver}" == "0" ]; then
|
|
displaymasterserver="false"
|
|
else
|
|
displaymasterserver="true"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
# unset the ports if they are set to 123456789
|
|
if [ "${port3}" == "123456789" ]; then
|
|
unset port3
|
|
fi
|
|
if [ "${queryport}" == "123456789" ]; then
|
|
unset queryport
|
|
fi
|
|
fi
|
|
|