diff --git a/functions/core_functions.sh b/functions/core_functions.sh index e8d522175..64d571c64 100644 --- a/functions/core_functions.sh +++ b/functions/core_functions.sh @@ -331,7 +331,10 @@ fn_runfunction "${FUNCNAME}" install_logs.sh(){ fn_runfunction "${FUNCNAME}" +} +log_dirs.sh(){ +fn_runfunction "${FUNCNAME}" } install_retry.sh(){ diff --git a/functions/game_settings.sh b/functions/game_settings.sh index cc3347cbc..150555b78 100644 --- a/functions/game_settings.sh +++ b/functions/game_settings.sh @@ -18,6 +18,13 @@ cfg_header_default="# Default config - Changes will be overwritten by updates.\n cfg_header_common="# Common config - Will not be overwritten by script.\n${cfg_header_all}" cfg_header_instance="# Instance Config for ${servicename} - Will not be overwritten by script.\n${cfg_header_all}" +# Settings file created from gamedata +settings_file="${settingsdir}/settings" + +# Get the MD5 hash of a file +fn_get_md5sum() { + md5sum "${1}" 2>/dev/null| awk '{print $1}' +} # If default config does not exist, create it. This should come from Git, and will be overwritten by updates. # Rather than try to wget it from Github or other fancy ways to get it, the simplest way to ensure it works is to simply create it here. @@ -71,9 +78,11 @@ fn_update_config() fi } +# Create config file fn_create_config(){ cfg_type=${1:-default} cfg_force=$2 + # Look up file and header for cfg_type cfg_file="cfg_file_${cfg_type}" cfg_header="cfg_header_${cfg_type}" @@ -92,6 +101,7 @@ fn_create_config(){ fi } +# Delete all output files from the settings parser fn_flush_game_settings(){ if [ -e $settingsdir ]; then rm -rf $settingsdir > /dev/null @@ -99,6 +109,7 @@ fn_flush_game_settings(){ mkdir -p $settingsdir } +# Pull in another gamedata file fn_import_game_settings(){ import="${gamedatadir}/${1}" importdir=$(echo "${gamedatadir}" | sed -e "s|${lgsmdir}/||g") @@ -110,6 +121,7 @@ fn_import_game_settings(){ source $import } +# Set variable in setting file fn_set_game_setting(){ setting_set=$1 setting_name=$2 @@ -118,6 +130,7 @@ fn_set_game_setting(){ fn_update_config "${setting_name}" "${setting_value}" "${settingsdir}/${setting_set}" "${setting_comment}" } +# Set parameter and make sure there is a config setting tied to it fn_set_game_parm(){ setting_set=$1 setting_name=$2 @@ -127,6 +140,7 @@ fn_set_game_parm(){ fn_update_config "${setting_name}" "\${${setting_name}}" "${settingsdir}/${setting_set}" "" } +# Get value from settings file fn_get_game_setting(){ setting_set=$1 setting_name=$2 @@ -152,29 +166,34 @@ fn_fix_game_dependencies() { md5sum=$(echo $line | cut -d'"' -f2) remote_path="dependencies/${filename}.${md5sum}" local_path="${dependency_path}/${filename}" - local_md5="$(md5sum "${local_path}" | awk '{print $1}')" + local_md5="$(fn_get_md5sum "${local_path}")" echo "Checking ${filename} for ${md5sum}" if [ "${local_md5}" != "${md5sum}" ]; then fn_getgithubfile "${local_path}" 0 "${remote_path}" 1 fi done < $depfile } + + # Flush old setings buffer fn_flush_game_settings +# Get the checksum of the current settings file to compare after loading gamedata +settings_file_md5="$(fn_get_md5sum "${settings_file}")" + # Import this game's settings fn_import_game_settings $selfname -# New method is to always run this function, it will overwrite defaults with whatever the new script values are -cfg_version_default=$(grep '^lgsm_version="' "${cfg_file_default}" 2>&1 | cut -d'"' -f2) -if [ "${cfg_version_default}" != "${version}" ]; then +# Compare the original MD5 hash with the settings file now that we have processed all gamedata.\ +# If there is a change or the config is missing, rebuild the default config +if [ "${settings_file_md5}" != "$(fn_get_md5sum "${settings_file}")" ] || [ ! -e "${cfg_file_default}" ]; then fn_create_config default 1 fi -# Load defaults +# Load default config source $cfg_file_default -# Load sitewide common settings (so that Git updates can safely overwrite default.cfg) +# Load sitewide common settings (so that Git updates can safely overwrite _default.cfg) if [ ! -f $cfg_file_common ]; then fn_create_config common; else source $cfg_file_common; fi # Load instance specific settings diff --git a/functions/log_dirs.sh b/functions/log_dirs.sh new file mode 100644 index 000000000..b15f4fd8e --- /dev/null +++ b/functions/log_dirs.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +fn_create_log_dir() { + target="${1}" + link="${2}" + createdir=${3:-1} + if [ "${target}" == "" ]; then + return; + fi + if [ ! -e "${target}" ] && [ $createdir -gt 0 ]; then + mkdir -p "${target}" + fi + if [ "${link}" == "" ]; then + return; + fi + if [ "$(readlink -f "${link}")" != "${target}" ] && [ -e "${target}" ]; then + if [ ! -e "$(dirname "${link}")" ]; then + mkdir -p "$(dirname "${link}")" + fi + ln -nfsv "${target}" "${link}" + fi +} + +fn_create_log_dir "${gamelogdir}" "${logdir}/server" 0 +fn_create_log_dir "${scriptlogdir}" +fn_create_log_dir "${consolelogdir}" +fn_create_log_dir "${rootdir}/Steam/logs" "${logdir}/steamcmd" +fn_create_log_dir "${systemdir}/addons/sourcemod/logs" "${logdir}/sourcemod" 0 + +# Create dir's for the script and console logs +#touch "${scriptlog}" +#touch "${consolelog}" +#touch "${emaillog}" + +# If a server is 7 Days to Die. +if [ "${gamename}" == "7 Days To Die" ]; then + if [ ! -h "${gamelogdir}/output_log.txt" ]; then + ln -nfsv "${filesdir}/7DaysToDie_Data/output_log.txt" "${gamelogdir}/output_log.txt" + fi +fi + diff --git a/gamedata/__game_list b/gamedata/__game_list index f87adcb6a..272938e97 100644 --- a/gamedata/__game_list +++ b/gamedata/__game_list @@ -1,46 +1,46 @@ -arkserver:fn_set_game_setting settings "gamename" "ARK: Survival Evolved" -arma3server:fn_set_game_setting settings "gamename" "Arma 3" -bb2server:fn_set_game_setting settings "gamename" "BrainBread 2" -bmdmserver:fn_set_game_setting settings "gamename" "Black Mesa" -bsserver:fn_set_game_setting settings "gamename" "Blade Symphony" -csczserver:fn_set_game_setting settings "gamename" "Counter Strike: Condition Zero" -csgoserver:fn_set_game_setting settings "gamename" "Counter Strike: Global Offensive" -csserver:fn_set_game_setting settings "gamename" "Counter Strike" -cssserver:fn_set_game_setting settings "gamename" "Counter Strike: Source" -cureserver:fn_set_game_setting settings "gamename" "Codename CURE" -dabserver:fn_set_game_setting settings "gamename" "Double Action: Boogaloo" -dmcserver:fn_set_game_setting settings "gamename" "Deathmatch Classic" -dodserver:fn_set_game_setting settings "gamename" "Day Of Defeat" -dodsserver:fn_set_game_setting settings "gamename" "Day Of Defeat: Source" -dstserver:fn_set_game_setting settings "gamename" "Don't Starve Together" -fofserver:fn_set_game_setting settings "gamename" "Fistful Of Frags" -gesserver:fn_set_game_setting settings "gamename" "GoldenEye: Source" -gmodserver:fn_set_game_setting settings "gamename" "Garry's Mod" -hl2dmserver:fn_set_game_setting settings "gamename" "Half Life 2: Deathmatch" -hldmserver:fn_set_game_setting settings "gamename" "Half Life: Deathmatch" -hldmsserver:fn_set_game_setting settings "gamename" "Half-Life Deathmatch: Source" -hwserver:fn_set_game_setting settings "gamename" "Hurtworld" -insserver:fn_set_game_setting settings "gamename" "Insurgency" -jc2server:fn_set_game_setting settings "gamename" "Just Cause 2" -kfserver:fn_set_game_setting settings "gamename" "Killing Floor" -l4d2server:fn_set_game_setting settings "gamename" "Left 4 Dead 2" -l4dserver:fn_set_game_setting settings "gamename" "Left 4 Dead" -mumbleserver:fn_set_game_setting settings "gamename" "Mumble" -nmrihserver:fn_set_game_setting settings "gamename" "No More Room In Hell" -ns2cserver:fn_set_game_setting settings "gamename" "NS2: Combat" -ns2server:fn_set_game_setting settings "gamename" "Natural Selection 2" -opforserver:fn_set_game_setting settings "gamename" "Opposing Force" -pvkiiserver:fn_set_game_setting settings "gamename" "Pirates, Vikings, and Knights II" -pzserver:fn_set_game_setting settings "gamename" "Project Zomboid" -ricochetserver:fn_set_game_setting settings "gamename" "Ricochet" -roserver:fn_set_game_setting settings "gamename" "Red Orchestra" -sbserver:fn_set_game_setting settings "gamename" "StarBound" -sdtdserver:fn_set_game_setting settings "gamename" "7 Days To Die" -ss3sserver:fn_set_game_setting settings "gamename" "Serious Sam 3: BFE" -terrariaserver:fn_set_game_setting settings "gamename" "Terraria" -tf2server:fn_set_game_setting settings "gamename" "Team Fortress 2" -tfcserver:fn_set_game_setting settings "gamename" "Team Fortress Classic" -ts3server:fn_set_game_setting settings "gamename" "TeamSpeak 3" -twserver:fn_set_game_setting settings "gamename" "Teeworlds" -ut2k4server:fn_set_game_setting settings "gamename" "Unreal Tournament 2004" -ut99server:fn_set_game_setting settings "gamename" "Unreal Tournament 99" +arkserver "ARK Survival Evolved" +arma3server "Arma 3" +bb2server "BrainBread 2" +bmdmserver "Black Mesa" +bsserver "Blade Symphony" +csczserver "Counter Strike Condition Zero" +csgoserver "Counter Strike Global Offensive" +csserver "Counter Strike" +cssserver "Counter Strike Source" +cureserver "Codename CURE" +dabserver "Double Action Boogaloo" +dmcserver "Deathmatch Classic" +dodserver "Day Of Defeat" +dodsserver "Day Of Defeat Source" +dstserver "Don't Starve Together" +fofserver "Fistful Of Frags" +gesserver "GoldenEye Source" +gmodserver "Garry's Mod" +hl2dmserver "Half Life 2 Deathmatch" +hldmserver "Half Life Deathmatch" +hldmsserver "Half-Life Deathmatch Source" +hwserver "Hurtworld" +insserver "Insurgency" +jc2server "Just Cause 2" +kfserver "Killing Floor" +l4d2server "Left 4 Dead 2" +l4dserver "Left 4 Dead" +mumbleserver "Mumble" +nmrihserver "No More Room In Hell" +ns2cserver "NS2 Combat" +ns2server "Natural Selection 2" +opforserver "Opposing Force" +pvkiiserver "Pirates, Vikings, and Knights II" +pzserver "Project Zomboid" +ricochetserver "Ricochet" +roserver "Red Orchestra" +sbserver "StarBound" +sdtdserver "7 Days To Die" +ss3sserver "Serious Sam 3 BFE" +terrariaserver "Terraria" +tf2server "Team Fortress 2" +tfcserver "Team Fortress Classic" +ts3server "TeamSpeak 3" +twserver "Teeworlds" +ut2k4server "Unreal Tournament 2004" +ut99server "Unreal Tournament 99" diff --git a/gamedata/__mod_list b/gamedata/__mod_list new file mode 100644 index 000000000..7441c46cd --- /dev/null +++ b/gamedata/__mod_list @@ -0,0 +1 @@ +insserver/dayofinfamy "Day of Infamy" diff --git a/gamedata/_steam b/gamedata/_steam index 0154630b5..d39240b57 100644 --- a/gamedata/_steam +++ b/gamedata/_steam @@ -12,7 +12,7 @@ fn_set_game_setting settings "steamuser" "anonymous" "Steam Username" fn_set_game_setting settings "updateonstart" "off" "Update game on start" # Script actions -fn_set_game_setting scriptactions "fu" "update-restart force-update|forceupdate=1; update_check.sh|Bypasses the check and applies updates from SteamCMD." +fn_set_game_setting scriptactions "fu" "update-restart force-update|set forceupdate=1; update_check.sh|Bypasses the check and applies updates from SteamCMD." fn_set_game_setting scriptactions "v" "validate|command_validate.sh|Validate server files with SteamCMD." fn_set_game_setting scriptactions "c" "console|command_console.sh|Console allows you to access the live view of a server." diff --git a/gamedata/insserver b/gamedata/insserver index 1245ef2e3..bc840860b 100644 --- a/gamedata/insserver +++ b/gamedata/insserver @@ -13,6 +13,7 @@ fn_set_game_setting dependencies "libpthread.so.0" "50a2a33d3cdd82f15c3de6539db fn_set_game_setting dependencies "librt.so.1" "eabf0fc1f81292270343bd0796fc64ca" # Override some server settings +fn_set_game_setting settings "executable" "./srcds_linux" fn_set_game_setting settings "appid" "237410" fn_set_game_setting settings "map" "ministry checkpoint" fn_set_game_setting settings "game" "insurgency" diff --git a/gamedata/mods/insserver/dayofinfamy b/gamedata/mods/insserver/dayofinfamy new file mode 100644 index 000000000..0a95a433c --- /dev/null +++ b/gamedata/mods/insserver/dayofinfamy @@ -0,0 +1,11 @@ +# Mod Configuration +# Day of Infamy +# For Insurgency +fn_set_game_setting settings "modname" "Day of Infamy" +fn_set_game_setting workshop "subscribed_file_ids" "601757902 601791962 604412679 601789279 608694820" "Subscribed Workshop Items" +fn_set_game_setting workshop "subscribed_collection_ids" "604418860" "Subscribed Workshop Collections" + +fn_set_game_parm parms_plus "workshop_start_map" "--EMPTY--" "Workshop map to start with" +fn_set_game_parm parms_plus "host_workshop_collection" "--EMPTY--" "604418860" "Subscribed Workshop Collections" +fn_set_game_parm parms_plus "sv_workshop_list_file" "\${systemdir}/subscribed_file_ids.txt" "Path to Subscribed Workshop Items file" +fn_set_game_parm parms_minus "workshop" " " "Enable Workshop Support" diff --git a/lgsm-core b/lgsm-core index ab280cfb8..5f61c77d6 100755 --- a/lgsm-core +++ b/lgsm-core @@ -51,6 +51,9 @@ lgsmdir="${rootdir}/lgsm" # lgsmserverdir is the directory for this server's support files lgsmserverdir="${lgsmdir}/servers/${selfname}" +# Log directory +logdir="${lgsmdir}/servers/${selfname}/log" + # Temporary path to store and manipulate settings settingsdir="${lgsmserverdir}/settings" @@ -208,6 +211,9 @@ else # Process game configs and load variables needed to run script fn_runfunction game_settings.sh + # Create log directories + fn_runfunction log_dirs.sh + # Get option from command line and run option parser getopt=$1 core_getopt.sh diff --git a/tools/update-game-list.sh b/tools/update-game-list.sh index dedc736fa..4b6edc03d 100755 --- a/tools/update-game-list.sh +++ b/tools/update-game-list.sh @@ -1,4 +1,17 @@ #!/bin/bash -GAMEDATA=../gamedata/ +GAMEDATA=../gamedata +MODDATA=${GAMEDATA}/mods GAMELIST=${GAMEDATA}/__game_list -grep gamename ${GAMEDATA}/[a-z]* | grep -v 'README\.md' | sed -e 's/^[a-z0-9A-Z\/\.]\+\///g' -e 's/\:[ \t]*fn_set_game_params settings[ \t]*"gamename"[ \t]*/ /g' > ${GAMELIST} +MODLIST=${GAMEDATA}/__mod_list +GAMEFILES=$(find "${GAMEDATA}" -maxdepth 1 -type f | egrep -v '(\/_|README.md)') +#-printf '"%p" ') +MODFILES=$(find "${MODDATA}" -type f) +# -printf '"%p" ') +#echo $GAMEFILES +#echo $MODFILES +egrep -H '"(mod|game)name"' ${GAMEFILES} | sed -e 's/^[a-z0-9A-Z\/\.]\+\///g' -e 's/[\:\t ]\+/ /g' -e 's/fn_set[^ ]\+ [^ ]\+ [^ ]\+ //g' | sort -u > ${GAMELIST} +egrep -H '"(mod|game)name"' ${MODFILES} | sed -e "s|${MODDATA}[\/]*||g" -e 's/[\:\t ]\+/ /g' -e 's/fn_set[^ ]\+ [^ ]\+ [^ ]\+ //g' | sort -u > ${MODLIST} + +#[ \t]*fn_set_game_[^ \t]*[ \t]+[^ \t]+[ \t]*"(mod|game)name"[ \t]*/ /g' +#| sed -e 's/^[a-z0-9A-Z\/\.]\+\///g' -e 's/\:[ \t]*fn_set_game_\(param|setting\).* [^ \t]\+[ \t]*"modname"[ \t]*/ /g' +