Kaynağa Gözat

Merge branch 'feature/jc3server' into develop

Daniel Gibbs 8 yıl önce
ebeveyn
işleme
6fa937886d

+ 1 - 1
lgsm/config-default/config-lgsm/jc2server/_default.cfg

@@ -83,7 +83,7 @@ branch=""
 ## LinuxGSM Server Details
 # Do not edit
 gamename="Just Cause 2"
-engine="avalanche"
+engine="avalanche2.0"
 
 #### Directories ####
 # Edit with care

+ 115 - 0
lgsm/config-default/config-lgsm/jc3server/_default.cfg

@@ -0,0 +1,115 @@
+##################################
+######## Default Settings ########
+##################################
+# DO NOT EDIT WILL BE OVERWRITTEN!
+# Copy settings from here and use them in either
+# common.cfg - applies settings to every instance
+# [instance].cfg - applies settings to a specific instance
+
+#### Server Settings ####
+
+## Server Start Command | https://github.com/GameServerManagers/LinuxGSM/wiki/Start-Parameters#additional-parameters
+fn_parms(){
+parms=""
+}
+
+#### LinuxGSM Settings ####
+
+## Notification Alerts
+# (on|off)
+
+# More info | https://github.com/GameServerManagers/LinuxGSM/wiki/Alerts#more-info
+postalert="off"
+postdays="7"
+posttarget="https://hastebin.com"
+
+# Discord Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Discord
+discordalert="off"
+discordwebhook="webhook"
+
+# Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Email
+emailalert="off"
+email="email@example.com"
+emailfrom=""
+
+# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT
+iftttalert="off"
+ifttttoken="accesstoken"
+iftttevent="linuxgsm_alert"
+
+# Mailgun Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/mailgun
+mailgunalert="off"
+mailguntoken="accesstoken"
+mailgundomain="example.com"
+mailgunemailfrom="alert@example.com"
+mailgunemail="email@myemail.com"
+
+# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+channeltag=""
+
+# Pushover Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushover
+pushoveralert="off"
+pushovertoken="accesstoken"
+
+# Telegram Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Telegram
+telegramalert="off"
+telegramtoken="accesstoken"
+telegramchatid=""
+
+## Updating | https://github.com/GameServerManagers/LinuxGSM/wiki/Update
+updateonstart="off"
+
+## Backup | https://github.com/GameServerManagers/LinuxGSM/wiki/Backup
+maxbackups="4"
+maxbackupdays="30"
+stoponbackup="on"
+
+## Logging | https://github.com/GameServerManagers/LinuxGSM/wiki/Logging
+consolelogging="on"
+logdays="7"
+
+#### LinuxGSM Advanced Settings ####
+
+## SteamCMD Settings
+# Server appid
+appid="619960"
+# Steam App Branch Select
+# Allows to opt into the various Steam app branches. Default branch is "".
+# Example: "-beta latest_experimental"
+branch=""
+
+## LinuxGSM Server Details
+# Do not edit
+gamename="Just Cause 3"
+engine="avalanche3.0"
+
+#### Directories ####
+# Edit with care
+
+## Server Specific Directories
+systemdir="${serverfiles}"
+executabledir="${serverfiles}"
+executable="./Server"
+servercfg="config.json"
+servercfgdefault="config.json"
+servercfgdir="${serverfiles}"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+
+## Backup Directory
+backupdir="${rootdir}/backups"
+
+## Logging Directories
+logdir="${rootdir}/log"
+#gamelogdir="" # No server logs available
+lgsmlogdir="${logdir}/script"
+consolelogdir="${logdir}/console"
+lgsmlog="${lgsmlogdir}/${servicename}-script.log"
+consolelog="${consolelogdir}/${servicename}-console.log"
+alertlog="${lgsmlogdir}/${servicename}-alert.log"
+postdetailslog="${lgsmlogdir}/${servicename}-postdetails.log"
+
+## Logs Naming
+lgsmlogdate="${lgsmlogdir}/${servicename}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
+consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"

+ 1 - 0
lgsm/data/serverlist.csv

@@ -33,6 +33,7 @@ hldm,hldmserver,Half-Life: Deathmatch
 hw,hwserver,Hurtworld
 ins,insserver,Insurgency
 jc2,jc2server,Just Cause 2
+jc3,jc3server,Just Cause 3
 kf,kfserver,Killing Floor
 kf2,kf2server,Killing Floor 2
 l4d,l4dserver,Left 4 Dead

+ 40 - 15
lgsm/functions/check_ip.sh

@@ -17,37 +17,62 @@ if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${gamename}" != "Mumble" ]&&[ "${travi
 	getip=$(${ipcommand} -o -4 addr|awk '{print $4}'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -v 127.0.0)
 	getipwc=$(${ipcommand} -o -4 addr|awk '{print $4}'|grep -oe '\([0-9]\{1,3\}\.\?\)\{4\}'|grep -vc 127.0.0)
 	info_config.sh
+
+	# IP is not set to specific IP
 	if [ "${ip}" == "0.0.0.0" ]||[ "${ip}" == "" ]; then
+		fn_print_dots "Check IP"
+		sleep 1
+		# Multiple interfaces
 		if [ "${getipwc}" -ge "2" ]; then
-			fn_print_dots "Check IP"
-			sleep 1
-			fn_print_fail "Check IP: Multiple active network interfaces found."
+			fn_print_fail "Check IP: Multiple IP addresses found."
 			sleep 1
 			echo -en "\n"
+			# IP is set within game config
 			if [ "${ipsetinconfig}" == "1" ]; then
-				fn_print_information "Specify the IP you want to use within the game server config file ${servercfg}.\n"
-				echo -en "${servercfgfullpath}\n"
+				fn_print_information "Specify the IP you want to bind within ${servercfg}.\n"
+				echo -en "	* location: ${servercfgfullpath}\n"
+				echo -en "\n"
 				echo -en "Set ${ipinconfigvar} to one of the following:\n"
+				fn_script_log_fatal "Multiple IP addresses found."
+				fn_script_log_fatal "Specify the IP you want to bind within: ${servercfgfullpath}."
+			# IP is set within LinuxGSM config
 			else
-				fn_print_information_nl "Specify the IP you want to use within a LinuxGSM config file."
-				echo -en "location: ${configdirserver}\n"
-				echo ""
+				fn_print_information_nl "Specify the IP you want to bind within a LinuxGSM config file.\n"
+				echo -en "	* location: ${configdirserver}\n"
+				echo -en "\n"
 				echo -en "Set ip=\"0.0.0.0\" to one of the following:\n"
+				fn_script_log_fatal "Multiple IP addresses found."
+				if [ "${legacymode}" == "1" ]; then
+					fn_script_log_fatal "Specify the IP you want to bind within the ${selfname} script."
+				else
+					fn_script_log_fatal "Specify the IP you want to bind within: ${configdirserver}."
+				fi
 			fi
 			echo -en "${getip}\n"
+			echo -en "\n"
+			echo -en "https://gameservermanagers.com/network-interfaces\n"
 			echo -en ""
+			fn_script_log_fatal "https://gameservermanagers.com/network-interfaces\n"
+			core_exit.sh
+		# Single interface
+		elif [ "${ipsetinconfig}" == "1" ]; then
+			fn_print_fail "Check IP: IP address not set in game config."
+			sleep 1
+			echo -en "\n"
+			fn_print_information "Specify the IP you want to bind within ${servercfg}.\n"
+			echo -en "	* location: ${servercfgfullpath}\n"
+			echo -en "\n"
+			echo -en "Set ${ipinconfigvar} to the following:\n"
+			echo -en "${getip}\n"
+			echo -en "\n"
 			echo -en "https://gameservermanagers.com/network-interfaces\n"
 			echo -en ""
-			fn_script_log_fatal "Multiple active network interfaces found."
-			if [ "${legacymode}" == "1" ]; then
-				fn_script_log_fatal "Manually specify the IP you want to use within the ${selfname} script."
-			else
-				fn_script_log_fatal "Manually specify the IP you want to use within: ${configdirserver}."
-			fi
+			fn_script_log_fatal "IP address not set in game config."
+			fn_script_log_fatal "Specify the IP you want to bind within: ${servercfgfullpath}."
 			fn_script_log_fatal "https://gameservermanagers.com/network-interfaces\n"
 			core_exit.sh
 		else
-			ip=${getip}
+			ip="${getip}"
 		fi
 	fi
 fi

+ 1 - 1
lgsm/functions/command_details.sh

@@ -23,7 +23,7 @@ fn_info_message_gameserver
 fn_info_message_script
 fn_info_message_backup
 # Some game servers do not have parms.
-if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${engine}" != "avalanche" ]&&[ "${engine}" != "dontstarve" ]&&[ "${engine}" != "projectzomboid" ]&&[ "${engine}" != "renderware" ]; then
+if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${engine}" != "avalanche2.0" ]&&[ "${engine}" != "dontstarve" ]&&[ "${engine}" != "projectzomboid" ]&&[ "${engine}" != "renderware" ]; then
 	fn_parms
 	fn_info_message_commandlineparms
 fi

+ 1 - 1
lgsm/functions/command_monitor.sh

@@ -79,7 +79,7 @@ fn_monitor_tmux(){
 		fn_print_ok_eol_nl
 		fn_script_log_pass "Checking session: OK"
 		# runs gsquery check on game with specific engines.
-		local allowed_engines_array=( avalanche goldsource idtech3 idtech3_ql iw2.0 iw3.0 madness quake refractor realvirtuality source spark starbound unity3d unreal unreal2 )
+		local allowed_engines_array=( avalanche2.0 avalanche3.0 goldsource idtech3 idtech3_ql iw2.0 iw3.0 madness quake refractor realvirtuality source spark starbound unity3d unreal unreal2 )
 		for allowed_engine in "${allowed_engines_array[@]}"
 		do
 			if [ "${allowed_engine}" == "starbound" ]; then

+ 1 - 1
lgsm/functions/command_postdetails.sh

@@ -62,7 +62,7 @@ else
 		fn_info_message_script
 		fn_info_message_backup
 		# Some game servers do not have parms.
-		if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${engine}" != "avalanche" ]&&[ "${engine}" != "dontstarve" ]&&[ "${engine}" != "projectzomboid" ]&&[ "${engine}" != "renderware" ]; then
+		if [ "${gamename}" != "TeamSpeak 3" ]&&[ "${engine}" != "avalanche2.0" ]&&[ "${engine}" != "dontstarve" ]&&[ "${engine}" != "projectzomboid" ]&&[ "${engine}" != "renderware" ]; then
 			fn_parms
 			fn_info_message_commandlineparms
 		fi

+ 1 - 1
lgsm/functions/command_stop.sh

@@ -189,7 +189,7 @@ fn_stop_graceful_select(){
 		fn_stop_graceful_cmd "quit" 120
 	elif [ "${engine}" == "goldsource" ]; then
 		fn_stop_graceful_goldsource
-	elif [ "${gamename}" == "Factorio" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]||[ "${gamename}" == "Mumble" ]; then
+	elif [ "${engine}" == "avalanche2.0" ]||[ "${engine}" == "avalanche3.0" ]||[ "${gamename}" == "Factorio" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal4" ]||[ "${engine}" == "unreal3" ]||[ "${engine}" == "unreal2" ]||[ "${engine}" == "unreal" ]||[ "${gamename}" == "Mumble" ]; then
 		fn_stop_graceful_ctrlc
 	elif  [ "${engine}" == "source" ]||[ "${engine}" == "quake" ]||[ "${engine}" == "idtech2" ]||[ "${engine}" == "idtech3" ]||[ "${engine}" == "idtech3_ql" ]||[ "${engine}" == "Just Cause 2" ]||[ "${engine}" == "projectzomboid" ]; then
 		fn_stop_graceful_cmd "quit" 30

+ 3 - 3
lgsm/functions/gsquery.py

@@ -17,7 +17,7 @@ class PythonGSQ:
         self.server_response_timeout = 5
         self.default_buffer_length = 1024
         #
-        sourcequery=['madness','quakelive','realvirtuality','refractor','source','goldsource','spark','starbound','unity3d']
+        sourcequery=[ 'avalanche3.0','madness','quakelive','realvirtuality','refractor','source','goldsource','spark','starbound','unity3d']
         idtech2query=['idtech3','quake','iw3.0']
         idtech3query=['idtech2','iw2.0']
         if self.option.engine in sourcequery:
@@ -26,7 +26,7 @@ class PythonGSQ:
             self.query_prompt_string = b'\xff\xff\xff\xffstatus\x00'
         elif self.option.engine in idtech3query:
             self.query_prompt_string = b'\xff\xff\xff\xffgetstatus'
-        elif self.option.engine == 'avalanche':
+        elif self.option.engine == 'avalanche2.0':
             self.query_prompt_string = b'\xFE\xFD\x09\x10\x20\x30\x40'
         elif self.option.engine == 'unreal':
             self.query_prompt_string = b'\x5C\x69\x6E\x66\x6F\x5C'
@@ -100,7 +100,7 @@ if __name__ == '__main__':
         action='store',
         dest='engine',
         default=False,
-        help='Engine type: avalanche, goldsource, idtech2, idtech3, iw2.0, iw3.0, realvirtuality, quake, quakelive, refractor, spark, source, unity3d, unreal, unreal2.'
+        help='Engine type: avalanche2.0, avalanche3.0, goldsource, idtech2, idtech3, iw2.0, iw3.0, realvirtuality, quake, quakelive, refractor, spark, source, unity3d, unreal, unreal2.'
     )
     parser.add_option(
         '-v', '--verbose',

+ 47 - 6
lgsm/functions/info_config.sh

@@ -14,7 +14,7 @@ local function_selfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
 # grep -v "foo" filter out lines that contain foo
 # cut -f1 -d "/" remove everything after /
 
-fn_info_config_avalanche(){
+fn_info_config_justcause2(){
 	if [ ! -f "${servercfgfullpath}" ]; then
 		servername="${unavailable}"
 		serverpassword="${unavailable}"
@@ -22,6 +22,7 @@ fn_info_config_avalanche(){
 		port="${zero}"
 	else
 		servername=$(grep "Name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/Name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		serverdescription=$(grep "Description" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/Description//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		serverpassword=$(grep "Password" "${servercfgfullpath}" | sed -e 's/^ *//g' -e '/^--/d' -e 's/Password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
 		maxplayers=$(grep "MaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
 		port=$(grep "BindPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
@@ -38,6 +39,42 @@ fn_info_config_avalanche(){
 	fi
 }
 
+fn_info_config_justcause3(){
+	if [ ! -f "${servercfgfullpath}" ]; then
+		servername="${unavailable}"
+		serverdescription="${unavailable}"
+		serverpassword="${unavailable}"
+		maxplayers="${zero}"
+		port="${zero}"
+		queryPort="${zero}"
+		steamport="${zero}"
+		tickrate="${zero}"
+	else
+		servername=$(grep "name" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/name//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		serverdescription=$(grep "description" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/description//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		serverpassword=$(grep "password" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/password//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		maxplayers=$(grep "\"maxPlayers\"" "${servercfgfullpath}" | tr -cd '[:digit:]')
+		port=$(grep "\"port\"" "${servercfgfullpath}" | tr -cd '[:digit:]')
+		queryport=$(grep "\"queryPort\"" "${servercfgfullpath}" | tr -cd '[:digit:]')
+		steamport=$(grep "\"steamPort\"" "${servercfgfullpath}" | tr -cd '[:digit:]')
+		tickrate=$(grep "\"maxTickRate\"" "${servercfgfullpath}" | tr -cd '[:digit:]')
+
+		ip=$(grep "host" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^#/d' -e 's/host//g' | tr -d '=\";,:' | sed -e 's/^[ \t]*//' -e 's/[ \t]*$//')
+		ipsetinconfig=1
+		ipinconfigvar="host"
+
+		# Not Set
+		servername=${servername:-"NOT SET"}
+		serverdescription=${serverdescription:-"NOT SET"}
+		serverpassword=${serverpassword:-"NOT SET"}
+		maxplayers=${maxplayers=:-"0"}
+		port=${port=:-"0"}
+		queryport=${queryport=:-"0"}
+		steamport=${steamport=:-"0"}
+		tickrate=${tickrate=:-"0"}
+	fi
+}
+
 fn_info_config_ark(){
 	if [ ! -f "${servercfgfullpath}" ]; then
 		servername="${unavailable}"
@@ -475,7 +512,7 @@ fn_info_config_starbound(){
 		# Not Set
 		servername=${servername:-"NOT SET"}
 		queryenabled=${queryenabled:-"NOT SET"}
-		rconenabled==${rconenabled:-"NOT SET"}
+		rconenabled=${rconenabled:-"NOT SET"}
 		rconpassword=${rconpassword:-"NOT SET"}
 		port=${port:-"21025"}
 		queryport=${queryport:-"21025"}
@@ -853,11 +890,9 @@ fn_info_config_squad(){
 	maxplayers=${maxplayers:-"0"}
 }
 
-# Just Cause 2
-if [ "${engine}" == "avalanche" ]; then
-	fn_info_config_avalanche
+
 # ARK: Survival Evolved
-elif [ "${gamename}" == "ARK: Survivial Evolved" ]; then
+if [ "${gamename}" == "ARK: Survivial Evolved" ]; then
 	fn_info_config_ark
 # Ballistic Overkill
 elif [ "${gamename}" == "Ballistic Overkill" ]; then
@@ -883,6 +918,12 @@ elif [ "${engine}" == "dontstarve" ]; then
 # Factorio
 elif [ "${gamename}" == "Factorio" ]; then
 	fn_info_config_factorio
+# Just Cause 2
+elif [ "${gamename}" == "Just Cause 2" ]; then
+	fn_info_config_justcause2
+# Just Cause 3
+elif [ "${gamename}" == "Just Cause 3" ]; then
+	fn_info_config_justcause3
 # Killing Floor 2
 elif [ "${shortname}" == "kf2" ]; then
 	fn_info_config_kf2

+ 4 - 1
lgsm/functions/info_glibc.sh

@@ -107,9 +107,12 @@ elif [ "${gamename}" == "TeamSpeak 3" ]; then
 elif [ "${gamename}" == "Teeworlds" ]; then
 	glibcrequired="2.14"
 	glibcfix="no"
-elif [ "${engine}" == "avalanche" ]; then
+elif [ "${gamename}" == "Just Cause 2" ]; then
 	glibcrequired="2.13"
 	glibcfix="yes"
+elif [ "${gamename}" == "Just Cause 3" ]; then
+	glibcrequired="2.17"
+	glibcfix="no"
 elif [ "${engine}" == "dontstarve" ]; then
 	glibcrequired="2.15"
 	glibcfix="no"

+ 30 - 12
lgsm/functions/info_messages.sh

@@ -126,6 +126,11 @@ fn_info_message_gameserver(){
 			echo -e "${blue}Server name:\t${default}${servername}"
 		fi
 
+		# Server description
+		if [ -n "${serverdescription}" ]; then
+			echo -e "${blue}Server Description:\t${default}${serverdescription}"
+		fi
+
 		# Branch
 		if [ -n "${branch}" ]; then
 			echo -e "${blue}Branch:\t${default}${branch}"
@@ -397,7 +402,7 @@ fn_info_message_ports(){
 
 	parmslocation="${red}UNKNOWN${default}"
 	# engines/games that require editing in the config file
-	local ports_edit_array=( "avalanche" "Ballistic Overkill" "dontstarve" "idtech2" "idtech3" "idtech3_ql" "lwjgl2" "Project Cars" "projectzomboid" "quake" "refractor" "realvirtuality" "renderware" "seriousengine35" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" )
+	local ports_edit_array=( "avalanche2.0" "avalanche3.0" "Ballistic Overkill" "dontstarve" "idtech2" "idtech3" "idtech3_ql" "lwjgl2" "Project Cars" "projectzomboid" "quake" "refractor" "realvirtuality" "renderware" "seriousengine35" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" )
 	for port_edit in "${ports_edit_array[@]}"
 	do
 		if [ "${shortname}" == "ut3" ]; then
@@ -502,15 +507,6 @@ fn_info_message_ballisticoverkill(){
 	} | column -s $'\t' -t
 }
 
-fn_info_message_avalanche(){
-	echo -e "netstat -atunp | grep Jcmp-Server"
-	echo -e ""
-	{
-		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
-		echo -e "> Game\tINBOUND\t${port}\tudp"
-	} | column -s $'\t' -t
-}
-
 fn_info_message_cod(){
 	echo -e "netstat -atunp | grep cod_lnxded"
 	echo -e ""
@@ -597,6 +593,26 @@ fn_info_message_hurtworld(){
 	} | column -s $'\t' -t
 }
 
+fn_info_message_justcause2(){
+	echo -e "netstat -atunp | grep Jcmp-Server"
+	echo -e ""
+	{
+		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+		echo -e "> Game\tINBOUND\t${port}\tudp"
+	} | column -s $'\t' -t
+}
+
+fn_info_message_justcause3(){
+	echo -e "netstat -atunp | grep Server"
+	echo -e ""
+	{
+		echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+		echo -e "> Game\tINBOUND\t${port}\tudp"
+		echo -e "> Query\tINBOUND\t${queryport}\tudp"
+		echo -e "> Steam\tINBOUND\t${steamport}\tudp"
+	} | column -s $'\t' -t
+}
+
 fn_info_message_minecraft(){
 	echo -e "netstat -atunp | grep java"
 	echo -e ""
@@ -985,6 +1001,10 @@ fn_info_message_select_engine(){
 		fn_info_message_factorio
 	elif [ "${gamename}" == "Hurtworld" ]; then
 		fn_info_message_hurtworld
+	elif [ "${gamename}" == "Just Cause 2" ]; then
+		fn_info_message_justcause2
+	elif [ "${gamename}" == "Just Cause 3" ]; then
+		fn_info_message_justcause3
 	elif [ "${shortname}" == "kf2" ]; then
 		fn_info_message_kf2
 	elif [ "${gamename}" == "Project Cars" ]; then
@@ -1013,8 +1033,6 @@ fn_info_message_select_engine(){
 		fn_info_message_rust
 	elif [ "${gamename}" == "Wolfenstein: Enemy Territory" ]; then
 		fn_info_message_wolfensteinenemyterritory
-	elif [ "${engine}" == "avalanche" ]; then
-		fn_info_message_avalanche
 	elif [ "${engine}" == "refractor" ]; then
 		fn_info_message_refractor
 	elif [ "${engine}" == "dontstarve" ]; then

+ 6 - 0
lgsm/functions/install_config.sh

@@ -336,6 +336,12 @@ elif [ "${gamename}" == "Just Cause 2" ]; then
 	fn_fetch_default_config
 	fn_default_config_remote
 	fn_set_config_vars
+elif [ "${gamename}" == "Just Cause 3" ]; then
+	gamedirname="JustCause3"
+	array_configs+=( config.json )
+	fn_fetch_default_config
+	fn_default_config_remote
+	fn_set_config_vars
 elif [ "${gamename}" == "Killing Floor" ]; then
 	gamedirname="KillingFloor"
 	array_configs+=( Default.ini )