diff --git a/.github/workflows/git-sync.yml b/.github/workflows/git-sync.yml
index 9fc886b4e..c058b6d24 100644
--- a/.github/workflows/git-sync.yml
+++ b/.github/workflows/git-sync.yml
@@ -11,17 +11,16 @@ jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
- - name: ssh
- uses: webfactory/ssh-agent@v0.2.0
+ - name: webfactory/ssh-agent
+ uses: webfactory/ssh-agent@v0.4.1
with:
ssh-private-key: ${{ secrets.BITBUCKET_SECRET }}
- ssh_private_key: ${{ secrets.BITBUCKET_SECRET }}
- name: repo-sync
- uses: wei/git-sync@v2
+ uses: wei/git-sync@v2.1.0
with:
+ ssh_private_key: ${{ secrets.BITBUCKET_SECRET }}
source_repo: "https://github.com/GameServerManagers/LinuxGSM"
source_branch: "refs/heads/*"
destination_repo: "git@bitbucket.org:GameServerManagers/linuxgsm.git"
destination_branch: "refs/heads/*"
- ssh_private_key: ${{ secrets.BITBUCKET_SECRET }}
diff --git a/lgsm/config-default/config-lgsm/mcserver/_default.cfg b/lgsm/config-default/config-lgsm/mcserver/_default.cfg
index 92f25294c..b78195e3e 100644
--- a/lgsm/config-default/config-lgsm/mcserver/_default.cfg
+++ b/lgsm/config-default/config-lgsm/mcserver/_default.cfg
@@ -16,8 +16,11 @@ fn_parms(){
parms="nogui"
}
-## Branch, "snapshot" include snapshot and pre-release versions. | (release|snapshot)
+## Release Settings | https://docs.linuxgsm.com/game-servers/minecraft#release-settings
+# Branch (release|snapshot)
branch="release"
+# Version (latest|1.16)
+mcversion="latest"
#### LinuxGSM Settings ####
diff --git a/lgsm/config-default/config-lgsm/pvrserver/_default.cfg b/lgsm/config-default/config-lgsm/pvrserver/_default.cfg
new file mode 100644
index 000000000..0177b2a95
--- /dev/null
+++ b/lgsm/config-default/config-lgsm/pvrserver/_default.cfg
@@ -0,0 +1,182 @@
+##################################
+######## Default Settings ########
+##################################
+# DO NOT EDIT, ANY CHANGES 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.
+
+#### Game Server Settings ####
+
+## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
+ip="0.0.0.0"
+port="7777"
+
+# Maps: bridge, datacenter, sand
+defaultmap="datacenter"
+
+## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
+fn_parms(){
+parms="${defaultmap} -log -MultiHome=${ip} -Port=${port}"
+}
+
+#### LinuxGSM Settings ####
+
+## LinuxGSM Stats
+# Send useful stats to LinuxGSM developers.
+# https://docs.linuxgsm.com/configuration/linuxgsm-stats
+# (on|off)
+stats="off"
+
+## Notification Alerts
+# (on|off)
+
+# Display IP | https://docs.linuxgsm.com/alerts#display-ip
+displayip=""
+
+# More info | https://docs.linuxgsm.com/alerts#more-info
+postalert="off"
+
+# Discord Alerts | https://docs.linuxgsm.com/alerts/discord
+discordalert="off"
+discordwebhook="webhook"
+
+# Email Alerts | https://docs.linuxgsm.com/alerts/email
+emailalert="off"
+email="email@example.com"
+emailfrom=""
+
+# IFTTT Alerts | https://docs.linuxgsm.com/alerts/ifttt
+iftttalert="off"
+ifttttoken="accesstoken"
+iftttevent="linuxgsm_alert"
+
+# Mailgun Email Alerts | https://docs.linuxgsm.com/alerts/mailgun
+mailgunalert="off"
+mailgunapiregion="us"
+mailguntoken="accesstoken"
+mailgundomain="example.com"
+mailgunemailfrom="alert@example.com"
+mailgunemail="email@myemail.com"
+
+# Pushbullet Alerts | https://docs.linuxgsm.com/alerts/pushbullet
+pushbulletalert="off"
+pushbullettoken="accesstoken"
+channeltag=""
+
+# Pushover Alerts | https://docs.linuxgsm.com/alerts/pushover
+pushoveralert="off"
+pushovertoken="accesstoken"
+pushoveruserkey="userkey"
+
+# Rocket.Chat Alerts | https://docs.linuxgsm.com/alerts/rocket.chat
+rocketchatalert="off"
+rocketchatwebhook="webhook"
+rocketchattoken=""
+
+# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
+slackalert="off"
+slackwebhook="webhook"
+
+# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
+# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
+# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help".
+telegramalert="off"
+telegramtoken="accesstoken"
+telegramchatid=""
+curlcustomstring=""
+
+## Updating | https://docs.linuxgsm.com/commands/update
+updateonstart="off"
+
+## Backup | https://docs.linuxgsm.com/commands/backup
+maxbackups="4"
+maxbackupdays="30"
+stoponbackup="on"
+
+## Logging | https://docs.linuxgsm.com/features/logging
+consolelogging="on"
+logdays="7"
+
+## Monitor | https://docs.linuxgsm.com/commands/monitor
+# Query delay time
+querydelay="1"
+
+## ANSI Colors | https://docs.linuxgsm.com/features/ansi-colors
+ansi="on"
+
+#### Advanced Settings ####
+
+## Message Display Time | https://docs.linuxgsm.com/features/message-display-time
+sleeptime="0.5"
+
+## SteamCMD Settings | https://docs.linuxgsm.com/steamcmd
+# Server appid
+appid="622970"
+# SteamCMD Branch | https://docs.linuxgsm.com/steamcmd/branch
+branch=""
+betapassword=""
+# Master Server | https://docs.linuxgsm.com/steamcmd/steam-master-server
+steammaster="false"
+
+## Stop Mode | https://docs.linuxgsm.com/features/stop-mode
+# 1: tmux kill
+# 2: CTRL+c
+# 3: quit
+# 4: quit 120s
+# 5: stop
+# 6: q
+# 7: exit
+# 8: 7 Days to Die
+# 9: GoldSrc
+# 10: Avorion
+# 11: end
+stopmode="2"
+
+## Query mode
+# 1: session only
+# 2: gamedig (gsquery fallback)
+# 3: gamedig
+# 4: gsquery
+# 5: tcp
+querymode="1"
+querytype=""
+
+## Console type
+consoleverbose="no"
+consoleinteract="no"
+
+## Game Server Details
+# Do not edit
+gamename="Pavlov VR"
+engine="unreal4"
+glibc="2.17"
+
+#### Directories ####
+# Edit with care
+
+## Game Server Directories
+systemdir="${serverfiles}/Pavlov"
+executabledir="${systemdir}/Binaries/Linux"
+executable="./PavlovServer"
+servercfgdir="${systemdir}/Saved/Config/LinuxServer"
+servercfg="Game.ini"
+servercfgdefault="Game.ini"
+servercfgfullpath="${servercfgdir}/${servercfg}"
+
+## Backup Directory
+backupdir="${lgsmdir}/backup"
+
+## Logging Directories
+logdir="${rootdir}/log"
+gamelogdir="${systemdir}/Saved/Logs"
+lgsmlogdir="${logdir}/script"
+consolelogdir="${logdir}/console"
+lgsmlog="${lgsmlogdir}/${selfname}-script.log"
+consolelog="${consolelogdir}/${selfname}-console.log"
+alertlog="${lgsmlogdir}/${selfname}-alert.log"
+postdetailslog="${lgsmlogdir}/${selfname}-postdetails.log"
+
+## Logs Naming
+lgsmlogdate="${lgsmlogdir}/${selfname}-script-$(date '+%Y-%m-%d-%H:%M:%S').log"
+consolelogdate="${consolelogdir}/${selfname}-console-$(date '+%Y-%m-%d-%H:%M:%S').log"
diff --git a/lgsm/data/serverlist.csv b/lgsm/data/serverlist.csv
index b871357f9..ad3bc9a19 100644
--- a/lgsm/data/serverlist.csv
+++ b/lgsm/data/serverlist.csv
@@ -69,6 +69,7 @@ opfor,opforserver,Opposing Force
pc,pcserver,Project Cars
pstbs,pstbsserver,Post Scriptum: The Bloody Seventh
pvkii,pvkiiserver,Pirates Vikings & Knights II
+pvr,pvrserver,Pavlov VR
pz,pzserver,Project Zomboid
q2,q2server,Quake 2
q3,q3server,Quake 3: Arena
diff --git a/lgsm/functions/alert_discord.sh b/lgsm/functions/alert_discord.sh
index b9512bbe7..a8ce373f0 100755
--- a/lgsm/functions/alert_discord.sh
+++ b/lgsm/functions/alert_discord.sh
@@ -52,7 +52,7 @@ EOF
fn_print_dots "Sending Discord alert"
-discordsend=$(curl -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "$json" | jq -c .)" "${discordwebhook}")
+discordsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "$json" | jq -c .)" "${discordwebhook}")
if [ -n "${discordsend}" ]; then
fn_print_fail_nl "Sending Discord alert: ${discordsend}"
diff --git a/lgsm/functions/alert_ifttt.sh b/lgsm/functions/alert_ifttt.sh
index 7a75050a4..faef505a5 100755
--- a/lgsm/functions/alert_ifttt.sh
+++ b/lgsm/functions/alert_ifttt.sh
@@ -16,7 +16,7 @@ EOF
)
fn_print_dots "Sending IFTTT alert"
-iftttsend=$(curl -sSL -H "Content-Type: application/json" -X POST -d """${json}""" "https://maker.ifttt.com/trigger/${iftttevent}/with/key/${ifttttoken}" | grep "Bad Request")
+iftttsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d """${json}""" "https://maker.ifttt.com/trigger/${iftttevent}/with/key/${ifttttoken}" | grep "Bad Request")
if [ -n "${iftttsend}" ]; then
fn_print_fail_nl "Sending IFTTT alert: ${pushbulletsend}"
diff --git a/lgsm/functions/alert_mailgun.sh b/lgsm/functions/alert_mailgun.sh
index 0c5aef4b6..5694bd595 100755
--- a/lgsm/functions/alert_mailgun.sh
+++ b/lgsm/functions/alert_mailgun.sh
@@ -14,7 +14,7 @@ fi
fn_print_dots "Sending Email alert: Mailgun: ${email}"
-mailgunsend=$(curl -s --user "api:${mailguntoken}" \
+mailgunsend=$(curl --connect-timeout 10 -s --user "api:${mailguntoken}" \
-F from="LinuxGSM <${mailgunemailfrom}>" \
-F to="LinuxGSM Admin <${mailgunemail}>" \
-F subject="${alertemoji} ${alertsubject} ${alertemoji}" \
diff --git a/lgsm/functions/alert_pushbullet.sh b/lgsm/functions/alert_pushbullet.sh
index 7a0117a0a..42a9b7d5d 100755
--- a/lgsm/functions/alert_pushbullet.sh
+++ b/lgsm/functions/alert_pushbullet.sh
@@ -17,7 +17,7 @@ EOF
)
fn_print_dots "Sending Pushbullet alert"
-pushbulletsend=$(curl -sSL -u """${pushbullettoken}"":" -H "Content-Type: application/json" -X POST -d """${json}""" "https://api.pushbullet.com/v2/pushes" | grep "error_code")
+pushbulletsend=$(curl --connect-timeout 10 -sSL -u """${pushbullettoken}"":" -H "Content-Type: application/json" -X POST -d """${json}""" "https://api.pushbullet.com/v2/pushes" | grep "error_code")
if [ -n "${pushbulletsend}" ]; then
fn_print_fail_nl "Sending Pushbullet alert: ${pushbulletsend}"
diff --git a/lgsm/functions/alert_pushover.sh b/lgsm/functions/alert_pushover.sh
index 82ba0af05..848a2eea5 100755
--- a/lgsm/functions/alert_pushover.sh
+++ b/lgsm/functions/alert_pushover.sh
@@ -21,7 +21,7 @@ else
alertpriority="0"
fi
-pushoversend=$(curl -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alertemoji} ${alertsubject} ${alertemoji}" -F message=" Server name
${servername}
Message
${alertbody}
Game
${gamename}
Server IP
${alertip}:${port}
Hostname
${HOSTNAME}
More info
${alerturl}" "https://api.pushover.net/1/messages.json" | grep errors)
+pushoversend=$(curl --connect-timeout 10 -sS -F token="${pushovertoken}" -F user="${pushoveruserkey}" -F html="1" -F sound="${alertsound}" -F priority="${alertpriority}" -F title="${alertemoji} ${alertsubject} ${alertemoji}" -F message=" Server name
${servername}
Message
${alertbody}
Game
${gamename}
Server IP
${alertip}:${port}
Hostname
${HOSTNAME}
More info
${alerturl}" "https://api.pushover.net/1/messages.json" | grep errors)
if [ -n "${pushoversend}" ]; then
fn_print_fail_nl "Sending Pushover alert: ${pushoversend}"
diff --git a/lgsm/functions/alert_rocketchat.sh b/lgsm/functions/alert_rocketchat.sh
index 505113918..e6d4cf5ce 100755
--- a/lgsm/functions/alert_rocketchat.sh
+++ b/lgsm/functions/alert_rocketchat.sh
@@ -42,7 +42,7 @@ EOF
fn_print_dots "Sending Rocketchat alert"
-rocketchatsend=$(curl -sSL -H "Content-Type:application/json" -X POST -d "$(echo -n "$json" | jq -c .)" "${rocketchatwebhook}")
+rocketchatsend=$(curl --connect-timeout 10 -sSL -H "Content-Type:application/json" -X POST -d "$(echo -n "$json" | jq -c .)" "${rocketchatwebhook}")
if [ -n "${rocketchatsend}" ]; then
fn_print_ok_nl "Sending Rocketchat alert"
diff --git a/lgsm/functions/alert_slack.sh b/lgsm/functions/alert_slack.sh
index 0ea5a41f8..c3a82d529 100755
--- a/lgsm/functions/alert_slack.sh
+++ b/lgsm/functions/alert_slack.sh
@@ -67,7 +67,7 @@ EOF
fn_print_dots "Sending Slack alert"
-slacksend=$(curl -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "$json" | jq -c .)" "${slackwebhook}")
+slacksend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d "$(echo -n "$json" | jq -c .)" "${slackwebhook}")
if [ "${slacksend}" == "ok" ]; then
fn_print_ok_nl "Sending Slack alert"
diff --git a/lgsm/functions/alert_telegram.sh b/lgsm/functions/alert_telegram.sh
index 64e5fcbb3..7b812246c 100755
--- a/lgsm/functions/alert_telegram.sh
+++ b/lgsm/functions/alert_telegram.sh
@@ -16,7 +16,7 @@ EOF
)
fn_print_dots "Sending Telegram alert"
-telegramsend=$(curl -sSL -H "Content-Type: application/json" -X POST -d """${json}""" ${curlcustomstring} "https://api.telegram.org/bot${telegramtoken}/sendMessage" | grep "error_code")
+telegramsend=$(curl --connect-timeout 10 -sSL -H "Content-Type: application/json" -X POST -d """${json}""" ${curlcustomstring} "https://api.telegram.org/bot${telegramtoken}/sendMessage" | grep "error_code")
if [ -n "${telegramsend}" ]; then
fn_print_fail_nl "Sending Telegram alert: ${telegramsend}"
diff --git a/lgsm/functions/check_deps.sh b/lgsm/functions/check_deps.sh
index 60fc30c72..80d33cad9 100755
--- a/lgsm/functions/check_deps.sh
+++ b/lgsm/functions/check_deps.sh
@@ -185,7 +185,7 @@ if [ "${javacheck}" == "1" ]; then
# Define required dependencies for SteamCMD.
if [ "${appid}" ]; then
# lib32gcc1 is now called lib32gcc-s1 in debian 11
- if [ "${distroid}" == "debian" ]&&[ "${distroversion}" == "11" ]; then
+ if { [ "${distroid}" == "debian" ]&&[ "${distroversion}" == "11" ]; }||{ [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "20.10" ]; }; then
if [ "${deptocheck}" == "glibc.i686" ]||[ "${deptocheck}" == "libstdc++64.i686" ]||[ "${deptocheck}" == "lib32gcc-s1" ]||[ "${deptocheck}" == "lib32stdc++6" ]; then
steamcmdfail=1
fi
@@ -349,7 +349,7 @@ fn_deps_build_debian(){
if [ "${shortname}" != "ts3" ]&&[ "${shortname}" != "mumble" ]&&[ "${shortname}" != "mc" ]&&[ "${engine}" != "renderware" ]; then
if [ "${arch}" == "x86_64" ]; then
# lib32gcc1 is now called lib32gcc-s1 in debian 11
- if [ "${distroid}" == "debian" ]&&[ "${distroversion}" == "11" ]; then
+ if { [ "${distroid}" == "debian" ]&&[ "${distroversion}" == "11" ]; }|| { [ "${distroid}" == "ubuntu" ]&&[ "${distroversion}" == "20.10" ]; }; then
array_deps_required+=( lib32gcc-s1 lib32stdc++6 )
else
array_deps_required+=( lib32gcc1 lib32stdc++6 )
@@ -382,8 +382,14 @@ fn_deps_build_debian(){
# Battlefield: Vietnam
elif [ "${shortname}" == "bfv" ]; then
array_deps_required+=( libncurses5:i386 libstdc++5:i386 )
- # Battlefield 1942, Counter-Strike: Source, Garry's Mod, No More Room in Hell, Source Forts Classic, Zombie Master Reborn and Zombie Panic: Source
- elif [ "${shortname}" == "bf1942" ]||[ "${shortname}" == "css" ]||[ "${shortname}" == "gmod" ]||[ "${shortname}" == "nmrih" ]||[ "${shortname}" == "sfc" ]||[ "${shortname}" == "zmr" ]||[ "${shortname}" == "zps" ]; then
+ # Battlefield 1942
+ elif [ "${shortname}" == "bf1942" ]; then
+ array_deps_required+=( libncurses5:i386 libtinfo5:i386 )
+ # Black Mesa: Death Match
+ elif [ "${shortname}" == "bmdm" ]; then
+ array_deps_required+=( libncurses5:i386 )
+ # Counter-Strike: Source, Garry's Mod, No More Room in Hell, Source Forts Classic, Zombie Master Reborn and Zombie Panic: Source
+ elif [ "${shortname}" == "css" ]||[ "${shortname}" == "gmod" ]||[ "${shortname}" == "nmrih" ]||[ "${shortname}" == "sfc" ]||[ "${shortname}" == "zmr" ]||[ "${shortname}" == "zps" ]; then
if [ "${arch}" == "x86_64" ]; then
array_deps_required+=( libtinfo5:i386 )
else
@@ -395,6 +401,9 @@ fn_deps_build_debian(){
# Call of Duty & Medal of Honor: Allied Assault
elif [ "${shortname}" == "cod" ]||[ "${shortname}" == "coduo" ]||[ "${shortname}" == "cod2" ]||[ "${shortname}" == "mohaa" ]; then
array_deps_required+=( libstdc++5:i386 )
+ # Barotrauma
+ elif [ "${shortname}" == "bt" ]; then
+ array_deps_required+=( libicu-dev )
# Ecoserver
elif [ "${shortname}" == "eco" ]; then
array_deps_required+=( libgdiplus )
@@ -489,11 +498,14 @@ fn_deps_build_redhat(){
# 7 Days to Die
elif [ "${shortname}" == "sdtd" ]; then
array_deps_required+=( telnet expect )
+ # Barotrauma
+ elif [ "${shortname}" == "bt" ]; then
+ array_deps_required+=( libicu )
# Battlefield: Vietnam
elif [ "${shortname}" == "bfv" ]; then
array_deps_required+=( compat-libstdc++-33.i686 glibc.i686 )
- # Battlefield 1942, Counter-Strike: Source, Garry's Mod, No More Room in Hell, Source Forts Classic, Zombie Master Reborn and Zombie Panic: Source
- elif [ "${shortname}" == "bf1942" ]||[ "${shortname}" == "css" ]||[ "${shortname}" == "gmod" ]||[ "${shortname}" == "nmrih" ]||[ "${shortname}" == "sfc" ]||[ "${shortname}" == "zmr" ]||[ "${shortname}" == "zps" ]; then
+ # Battlefield 1942, Black Mesa: Deathmatch, Counter-Strike: Source, Garry's Mod, No More Room in Hell, Source Forts Classic, Zombie Master Reborn and Zombie Panic: Source
+ elif [ "${shortname}" == "bf1942" ]||[ "${shortname}" == "bmdm" ]||[ "${shortname}" == "css" ]||[ "${shortname}" == "gmod" ]||[ "${shortname}" == "nmrih" ]||[ "${shortname}" == "sfc" ]||[ "${shortname}" == "zmr" ]||[ "${shortname}" == "zps" ]; then
array_deps_required+=( ncurses-libs.i686 )
# Brainbread 2, Don't Starve Together & Team Fortress 2
elif [ "${shortname}" == "bb2" ]||[ "${shortname}" == "dst" ]||[ "${shortname}" == "tf2" ]; then
diff --git a/lgsm/functions/check_system_requirements.sh b/lgsm/functions/check_system_requirements.sh
index 8b7db5a3c..7a8b73de5 100755
--- a/lgsm/functions/check_system_requirements.sh
+++ b/lgsm/functions/check_system_requirements.sh
@@ -38,6 +38,9 @@ elif [ "${shortname}" == "ns2" ]||[ "${shortname}" == "ns2c" ]; then
elif [ "${shortname}" == "st" ]; then
ramrequirementmb="1000"
ramrequirementgb="1"
+elif [ "${shortname}" == "pvr" ];then
+ ramrequirementmb="2000"
+ ramrequirementgb="2"
fi
# If the game or engine has a minimum RAM Requirement, compare it to system's available RAM.
diff --git a/lgsm/functions/command_debug.sh b/lgsm/functions/command_debug.sh
index 059cf539a..fe2e8a38e 100755
--- a/lgsm/functions/command_debug.sh
+++ b/lgsm/functions/command_debug.sh
@@ -95,6 +95,8 @@ fn_print_ok_nl "Starting debug"
# Create lockfile.
date '+%s' > "${lockdir}/${selfname}.lock"
+echo "${version}" >> "${lockdir}/${selfname}.lock"
+echo "${port}" >> "${lockdir}/${selfname}.lock"
fn_script_log_info "Lockfile generated"
fn_script_log_info "${lockdir}/${selfname}.lock"
diff --git a/lgsm/functions/command_mods_install.sh b/lgsm/functions/command_mods_install.sh
index 369f5f967..d644e0cf0 100755
--- a/lgsm/functions/command_mods_install.sh
+++ b/lgsm/functions/command_mods_install.sh
@@ -95,6 +95,18 @@ if [ -f "${modsinstalledlistfullpath}" ]; then
fi
## Installation.
+# If amxmodx check if metamod exists first
+if [ "${modcommand}" == "amxmodx" ]; then
+ fn_mod_exist "metamod"
+fi
+
+if [ "${modcommand}" == "amxmodxcs" ] ||
+ [ "${modcommand}" == "amxmodxdod" ] ||
+ [ "${modcommand}" == "amxmodxtfc" ] ||
+ [ "${modcommand}" == "amxmodxns" ] ||
+ [ "${modcommand}" == "amxmodxts" ]; then
+ fn_mod_exist "amxmodx"
+fi
fn_create_mods_dir
fn_mods_clear_tmp_dir
@@ -106,6 +118,17 @@ fn_mod_copy_destination
fn_mod_add_list
fn_mod_tidy_files_list
fn_mods_clear_tmp_dir
+
+# Create/modify existing liblist.gam file for Metamod
+if [ "${modcommand}" == "metamod" ]; then
+ fn_mod_install_liblist_gam_file
+fi
+
+# Create/modify plugins.ini file for Metamod
+if [ "${modcommand}" == "amxmodx" ]; then
+ fn_mod_install_amxmodx_file
+fi
+
echo -e "${modprettyname} installed"
fn_script_log_pass "${modprettyname} installed."
diff --git a/lgsm/functions/command_mods_remove.sh b/lgsm/functions/command_mods_remove.sh
index 7cbba8a71..507251e87 100755
--- a/lgsm/functions/command_mods_remove.sh
+++ b/lgsm/functions/command_mods_remove.sh
@@ -37,7 +37,7 @@ while [[ ! " ${installedmodslist[@]} " =~ " ${usermodselect} " ]]; do
read -r usermodselect
# Exit if user says exit or abort.
if [ "${usermodselect}" == "exit" ]||[ "${usermodselect}" == "abort" ]; then
- core_exit.sh
+ core_exit.sh
# Supplementary output upon invalid user input.
elif [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; then
fn_print_error2_nl "${usermodselect} is not a valid addon/mod."
@@ -82,17 +82,25 @@ while [ "${modfileline}" -le "${modsfilelistsize}" ]; do
echo -e "removing ${modprettyname} ${modfileline} / ${modsfilelistsize} : ${currentfileremove}..."
((modfileline++))
done
-if [ "${exitcode}" != 0 ]; then
- fn_print_fail_eol_nl
- core_exit.sh
+
+# Added logic not to fail since removing game specific mods (amxmodxcs) removes files that will
+# not be found when removing the base (amxmodx) mod
+if [ "${modcommand}" != "amxmodx" ]; then
+ if [ "${exitcode}" != 0 ]; then
+ fn_print_fail_eol_nl
+ core_exit.sh
+ else
+ fn_print_ok_eol_nl
+ fi
else
fn_print_ok_eol_nl
fi
+
# Remove file list.
echo -en "removing ${modcommand}-files.txt..."
fn_sleep_time
rm -rf "${modsdir:?}/${modcommand}-files.txt"
-local exitcode=$?
+exitcode=$?
if [ "${exitcode}" != 0 ]; then
fn_script_log_fatal "Removing ${modsdir}/${modcommand}-files.txt"
fn_print_fail_eol_nl
@@ -107,7 +115,7 @@ echo -en "removing ${modcommand} from ${modsinstalledlist}..."
fn_sleep_time
sed -i "/^${modcommand}$/d" "${modsinstalledlistfullpath}"
-local exitcode=$?
+exitcode=$?
if [ "${exitcode}" != 0 ]; then
fn_script_log_fatal "Removing ${modcommand} from ${modsinstalledlist}"
fn_print_fail_eol_nl
@@ -127,6 +135,17 @@ if [ "${engine}" == "unity3d" ]&&[[ "${modprettyname}" == *"Oxide"* ]]; then
fn_firstcommand_reset
unset exitbypass
fi
+
+# Remove/modify existing liblist.gam file for Metamod
+if [ "${modcommand}" == "metamod" ]; then
+ fn_mod_remove_liblist_gam_file
+fi
+
+# Remove/modify plugins.ini file for AMX Mod X
+if [ "${modcommand}" == "amxmodx" ]; then
+ fn_mod_remove_amxmodx_file
+fi
+
echo -e "${modprettyname} removed"
fn_script_log "${modprettyname} removed"
diff --git a/lgsm/functions/command_monitor.sh b/lgsm/functions/command_monitor.sh
index 80d3f43f0..edc101012 100755
--- a/lgsm/functions/command_monitor.sh
+++ b/lgsm/functions/command_monitor.sh
@@ -25,8 +25,10 @@ fn_monitor_check_lockfile(){
fi
# Fix if lockfile is not unix time or contains letters
- if [ -f "${lockdir}/${selfname}.lock" ]&&[[ "$(cat "${lockdir}/${selfname}.lock")" =~ [A-Za-z] ]]; then
- date '+%s' > "${lockdir}/${selfname}.lock"
+ if [ -f "${lockdir}/${selfname}.lock" ]&&[[ "$(head -n 1 "${lockdir}/${selfname}.lock")" =~ [A-Za-z] ]]; then
+ date '+%s' > "${lockdir}/${selfname}.lock"
+ echo "${version}" >> "${lockdir}/${selfname}.lock"
+ echo "${port}" >> "${lockdir}/${selfname}.lock"
fi
}
@@ -106,12 +108,12 @@ for queryattempt in {1..5}; do
fn_print_querying_eol
fn_script_log_info "Querying port: ${querymethod}: ${queryip}:${queryport} : ${queryattempt} : QUERYING"
# querydelay
- if [ "$(cat "${lockdir}/${selfname}.lock")" -gt "$(date "+%s" -d "${querydelay} mins ago")" ]; then
+ if [ "$(head -n 1 "${lockdir}/${selfname}.lock")" -gt "$(date "+%s" -d "${querydelay} mins ago")" ]; then
fn_print_ok "Querying port: ${querymethod}: ${ip}:${queryport} : ${totalseconds}/${queryattempt}: "
fn_print_delay_eol_nl
fn_script_log_info "Querying port: ${querymethod}: ${ip}:${queryport} : ${queryattempt} : DELAY"
fn_script_log_info "Query bypassed: ${gameservername} started less than ${querydelay} minutes ago"
- fn_script_log_info "Server started: $(date -d @$(cat "${lockdir}/${selfname}.lock"))"
+ fn_script_log_info "Server started: $(date -d @$(head -n 1 "${lockdir}/${selfname}.lock"))"
fn_script_log_info "Current time: $(date)"
monitorpass=1
core_exit.sh
diff --git a/lgsm/functions/command_start.sh b/lgsm/functions/command_start.sh
index 62160e187..897cc90aa 100755
--- a/lgsm/functions/command_start.sh
+++ b/lgsm/functions/command_start.sh
@@ -71,6 +71,8 @@ fn_start_tmux(){
# Create lockfile
date '+%s' > "${lockdir}/${selfname}.lock"
+ echo "${version}" >> "${lockdir}/${selfname}.lock"
+ echo "${port}" >> "${lockdir}/${selfname}.lock"
cd "${executabledir}" || exit
tmux new-session -d -x "${sessionwidth}" -y "${sessionheight}" -s "${sessionname}" "${executable} ${parms}" 2> "${lgsmlogdir}/.${selfname}-tmux-error.tmp"
diff --git a/lgsm/functions/command_stop.sh b/lgsm/functions/command_stop.sh
index 439967fd0..6fe06e4ef 100644
--- a/lgsm/functions/command_stop.sh
+++ b/lgsm/functions/command_stop.sh
@@ -43,7 +43,7 @@ fn_stop_graceful_cmd(){
fn_print_dots "Graceful: sending \"${1}\""
fn_script_log_info "Graceful: sending \"${1}\""
# Sends specific stop command.
- tmux send -t "${sessionname}" "${1}" ENTER > /dev/null 2>&1
+ tmux send -t "${sessionname}" ENTER "${1}" ENTER > /dev/null 2>&1
# Waits up to ${seconds} seconds giving the server time to shutdown gracefully.
for ((seconds=1; seconds<=${2}; seconds++)); do
check_status.sh
diff --git a/lgsm/functions/command_update_linuxgsm.sh b/lgsm/functions/command_update_linuxgsm.sh
index 37918be2d..7e0ec57b6 100755
--- a/lgsm/functions/command_update_linuxgsm.sh
+++ b/lgsm/functions/command_update_linuxgsm.sh
@@ -17,9 +17,9 @@ fn_script_log_info "Updating LinuxGSM"
fn_print_dots "Selecting repo"
fn_script_log_info "Selecting repo"
# Select remotereponame
-curl -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh" 1>/dev/null
+curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh" 1>/dev/null
if [ $? != "0" ]; then
- curl -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1>/dev/null
if [ $? != "0" ]; then
fn_print_fail_nl "Selecting repo: Unable to to access GitHub or Bitbucket repositories"
fn_script_log_fatal "Selecting repo: Unable to to access GitHub or Bitbucket repositories"
@@ -36,9 +36,9 @@ fi
# Check linuxsm.sh
echo -en "checking ${remotereponame} linuxgsm.sh...\c"
if [ "${remotereponame}" == "GitHub" ]; then
- curl -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh" 1>/dev/null
else
- curl -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh" 1>/dev/null
fi
if [ $? != "0" ]; then
fn_print_fail_eol_nl
@@ -48,9 +48,9 @@ if [ $? != "0" ]; then
fi
if [ "${remotereponame}" == "GitHub" ]; then
- tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh"))
+ tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/linuxgsm.sh"))
else
- tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh"))
+ tmp_script_diff=$(diff "${tmpdir}/linuxgsm.sh" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/linuxgsm.sh"))
fi
if [ "${tmp_script_diff}" != "" ]; then
@@ -116,9 +116,9 @@ fi
echo -en "checking ${remotereponame} config _default.cfg...\c"
fn_script_log_info "Checking ${remotereponame} config _default.cfg"
if [ "${remotereponame}" == "GitHub" ]; then
- curl -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg" 1>/dev/null
else
- curl -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg" 1>/dev/null
fi
if [ $? != "0" ]; then
fn_print_fail_eol_nl
@@ -128,9 +128,9 @@ if [ $? != "0" ]; then
fi
if [ "${remotereponame}" == "GitHub" ]; then
- config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
+ config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
else
- config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
+ config_file_diff=$(diff "${configdirdefault}/config-lgsm/${gameservername}/_default.cfg" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/lgsm/config-default/config-lgsm/${gameservername}/_default.cfg"))
fi
if [ "${config_file_diff}" != "" ]; then
@@ -155,9 +155,9 @@ if [ -n "${functionsdir}" ]; then
echo -en "checking ${remotereponame} module ${functionfile}...\c"
github_file_url_dir="lgsm/functions"
if [ "${remotereponame}" == "GitHub" ]; then
- curl -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${functionfile}" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${functionfile}" 1>/dev/null
else
- curl -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${functionfile}" 1>/dev/null
+ curl --connect-timeout 10 -IsfL "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${functionfile}" 1>/dev/null
fi
if [ $? != 0 ]; then
fn_print_error_eol_nl
@@ -174,9 +174,9 @@ if [ -n "${functionsdir}" ]; then
else
# compare file
if [ "${remotereponame}" == "GitHub" ]; then
- function_file_diff=$(diff "${functionsdir}/${functionfile}" <(curl -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${functionfile}"))
+ function_file_diff=$(diff "${functionsdir}/${functionfile}" <(curl --connect-timeout 10 -s "https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${githubbranch}/${github_file_url_dir}/${functionfile}"))
else
- function_file_diff=$(diff "${functionsdir}/${functionfile}" <(curl -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${functionfile}"))
+ function_file_diff=$(diff "${functionsdir}/${functionfile}" <(curl --connect-timeout 10 -s "https://bitbucket.org/${githubuser}/${githubrepo}/raw/${githubbranch}/${github_file_url_dir}/${functionfile}"))
fi
# results
diff --git a/lgsm/functions/core_dl.sh b/lgsm/functions/core_dl.sh
index b5c92b3c1..35b5e008b 100755
--- a/lgsm/functions/core_dl.sh
+++ b/lgsm/functions/core_dl.sh
@@ -61,7 +61,7 @@ fn_dl_steamcmd(){
# If using a specific branch.
if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
- elif [ -n "${branch}" ]; then
+ elif [ -n "${branch}" ]&&[ "${branch}" != "public" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
else
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_set_config 90 mod "${appidmod}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
@@ -70,7 +70,7 @@ fn_dl_steamcmd(){
elif [ "${shortname}" == "ac" ]||[ "${shortname}" == "jk2" ]; then
if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
- elif [ -n "${branch}" ]; then
+ elif [ -n "${branch}" ]&&[ "${branch}" != "public" ]; then
${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
else
${unbuffer} ${steamcmdcommand} +@sSteamCmdForcePlatformType windows +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
@@ -79,7 +79,7 @@ fn_dl_steamcmd(){
else
if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" -betapassword "${betapassword}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
- elif [ -n "${branch}" ]; then
+ elif [ -n "${branch}" ]&&[ "${branch}" != "public" ]; then
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" -beta "${branch}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
else
${unbuffer} ${steamcmdcommand} +login "${steamuser}" "${steampass}" +force_install_dir "${serverfiles}" +app_update "${appid}" ${validate} +quit | uniq | tee -a "${lgsmlog}" "${steamcmdlog}"
@@ -267,11 +267,11 @@ fn_fetch_file(){
echo -en "downloading ${local_filename}..."
fn_sleep_time
echo -en "\033[1K"
- curlcmd=$(curl --progress-bar --fail -L -o "${local_filedir}/${local_filename}" "${fileurl}")
+ curlcmd=$(curl --connect-timeout 10 --progress-bar --fail -L -o "${local_filedir}/${local_filename}" "${fileurl}")
echo -en "downloading ${local_filename}..."
else
echo -en "fetching ${fileurl_name} ${local_filename}...\c"
- curlcmd=$(curl -s --fail -L -o "${local_filedir}/${local_filename}" "${fileurl}" 2>&1)
+ curlcmd=$(curl --connect-timeout 10 -s --fail -L -o "${local_filedir}/${local_filename}" "${fileurl}" 2>&1)
fi
local exitcode=$?
@@ -377,7 +377,7 @@ fn_fetch_file_github(){
fn_fetch_config(){
github_file_url_dir="${1}"
github_file_url_name="${2}"
- # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
+ # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_file_url_dir}/${github_file_url_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_file_url_dir}/${github_file_url_name}"
@@ -425,7 +425,7 @@ fn_fetch_function(){
fn_update_function(){
github_file_url_dir="lgsm/functions"
github_file_url_name="${functionfile}"
- # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
+ # If master branch will currently running LinuxGSM version to prevent "version mixing". This is ignored if a fork.
if [ "${githubbranch}" == "master" ]&&[ "${githubuser}" == "GameServerManager" ]&&[ "${commandname}" != "UPDATE-LGSM" ]; then
remote_fileurl="https://raw.githubusercontent.com/${githubuser}/${githubrepo}/${version}/${github_file_url_dir}/${github_file_url_name}"
remote_fileurl_backup="https://bitbucket.org/${githubuser}/${githubrepo}/raw/${version}/${github_file_url_dir}/${github_file_url_name}"
diff --git a/lgsm/functions/core_functions.sh b/lgsm/functions/core_functions.sh
index 21ef3cbd1..e4da9830f 100755
--- a/lgsm/functions/core_functions.sh
+++ b/lgsm/functions/core_functions.sh
@@ -7,7 +7,7 @@
functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
-modulesversion="v20.5.1"
+modulesversion="v20.6.2"
# Core
@@ -430,6 +430,11 @@ functionfile="${FUNCNAME[0]}"
fn_fetch_function
}
+fix_samp.sh(){
+functionfile="${FUNCNAME[0]}"
+fn_fetch_function
+}
+
fix_sdtd.sh(){
functionfile="${FUNCNAME[0]}"
fn_fetch_function
diff --git a/lgsm/functions/core_getopt.sh b/lgsm/functions/core_getopt.sh
index 82eb77691..e20b32b57 100755
--- a/lgsm/functions/core_getopt.sh
+++ b/lgsm/functions/core_getopt.sh
@@ -125,7 +125,7 @@ if [ "${shortname}" == "squad" ]; then
fi
## Mods commands.
-if [ "${engine}" == "source" ]||[ "${shortname}" == "rust" ]||[ "${shortname}" == "hq" ]||[ "${shortname}" == "sdtd" ]; then
+if [ "${engine}" == "source" ]||[ "${shortname}" == "rust" ]||[ "${shortname}" == "hq" ]||[ "${shortname}" == "sdtd" ]||[ "${shortname}" == "cs" ]||[ "${shortname}" == "dod" ]||[ "${shortname}" == "tfc" ]||[ "${shortname}" == "ns" ]||[ "${shortname}" == "ts" ]||[ "${shortname}" == "hldm" ]; then
currentopt+=( "${cmd_mods_install[@]}" "${cmd_mods_remove[@]}" "${cmd_mods_update[@]}" )
fi
diff --git a/lgsm/functions/fix.sh b/lgsm/functions/fix.sh
index f92709f56..2e2931e41 100755
--- a/lgsm/functions/fix.sh
+++ b/lgsm/functions/fix.sh
@@ -91,7 +91,7 @@ fi
# Fixes that are run on install only.
if [ "${commandname}" == "INSTALL" ]; then
- if [ "${shortname}" == "av" ]||[ "${shortname}" == "cmw" ]||[ "${shortname}" == "kf" ]||[ "${shortname}" == "kf2" ]||[ "${shortname}" == "onset" ]||[ "${shortname}" == "ro" ]||[ "${shortname}" == "ut2k4" ]||[ "${shortname}" == "ut" ]||[ "${shortname}" == "ut3" ]; then
+ if [ "${shortname}" == "av" ]||[ "${shortname}" == "cmw" ]||[ "${shortname}" == "kf" ]||[ "${shortname}" == "kf2" ]||[ "${shortname}" == "onset" ]||[ "${shortname}" == "ro" ]||[ "${shortname}" == "samp" ]||[ "${shortname}" == "ut2k4" ]||[ "${shortname}" == "ut" ]||[ "${shortname}" == "ut3" ]; then
echo -e ""
echo -e "Applying Post-Install Fixes"
echo -e "================================="
@@ -105,6 +105,8 @@ if [ "${commandname}" == "INSTALL" ]; then
fix_kf2.sh
elif [ "${shortname}" == "ro" ]; then
fix_ro.sh
+ elif [ "${shortname}" == "samp" ]; then
+ fix_samp.sh
elif [ "${shortname}" == "ut2k4" ]; then
fix_ut2k4.sh
elif [ "${shortname}" == "ut" ]; then
diff --git a/lgsm/functions/fix_samp.sh b/lgsm/functions/fix_samp.sh
new file mode 100644
index 000000000..b69779019
--- /dev/null
+++ b/lgsm/functions/fix_samp.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# LinuxGSM fix_sfc.sh function
+# Author: Christian Birk
+# Website: https://linuxgsm.com
+# Description: Resolves issue that the default rcon password is not changed
+
+functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
+
+if [ -f "${servercfgfullpath}" ]; then
+ # check if default password is set "changeme"
+ currentpass=$(grep -E "^rcon_password" "${servercfgfullpath}" | sed 's/^rcon_password //' )
+ defaultpass="changeme"
+ # check if default password is set
+ if [ "${currentpass}" == "${defaultpass}" ]; then
+ fixname="change default rcon password"
+ fn_fix_msg_start
+ fn_script_log_info "changing rcon/admin password."
+ random=$(tr -dc A-Za-z0-9_ < /dev/urandom | head -c 8 | xargs)
+ rconpass="admin${random}"
+ sed -i "s/rcon_password changeme/rcon_password ${rconpass}/g" "${servercfgfullpath}"
+ fn_fix_msg_end
+ fi
+ # check if the hostname is the default name
+ currenthostname=$(grep -E "^hostname" "${servercfgfullpath}" | sed 's/^hostname //')
+ defaulthostname="SA-MP 0.3 Server"
+ if [ "${currenthostname}" == "${defaulthostname}" ]; then
+ fixname="change default hostname"
+ fn_fix_msg_start
+ fn_script_log_info "changing default hostname to LinuxGSM"
+ sed -i "s/hostname ${defaulthostname}/hostname LinuxGSM/g" "${servercfgfullpath}"
+ fn_fix_msg_end
+ fi
+fi
diff --git a/lgsm/functions/fix_squad.sh b/lgsm/functions/fix_squad.sh
index 28d0e30f0..8ec84a86f 100644
--- a/lgsm/functions/fix_squad.sh
+++ b/lgsm/functions/fix_squad.sh
@@ -6,7 +6,7 @@
# As the server base dir changed for the game, we need to migrate the default config from the old to the new location
oldservercfg="${serverfiles}/Squad/ServerConfig/${servercfg}"
-if [ -f "${oldservercfg}" ] && [ -f "${servercfgfullpath}" ]; then
+if [ -f "${oldservercfg}" ]&&[ -f "${servercfgfullpath}" ]; then
# diff old and new config - if it is different move the old config over the new one
if [ "$(diff -c "${oldservercfg}" "${servercfgfullpath}" | wc -l)" -gt 0 ]; then
fixname="Migrate server config to new Game folder"
diff --git a/lgsm/functions/fix_steamcmd.sh b/lgsm/functions/fix_steamcmd.sh
index 3fe106c38..41d31e263 100755
--- a/lgsm/functions/fix_steamcmd.sh
+++ b/lgsm/functions/fix_steamcmd.sh
@@ -84,6 +84,8 @@ elif [ "${shortname}" == "ins" ]; then
elif [ "${shortname}" == "pz" ]; then
fn_fix_steamclient_so "32" "${serverfiles}/linux32"
fn_fix_steamclient_so "64" "${serverfiles}/linux64"
+elif [ "${shortname}" == "pvr" ]; then
+ fn_fix_steamclient_so "64" "${executabledir}"
elif [ "${shortname}" == "ss3" ]; then
fn_fix_steamclient_so "32" "${serverfiles}/Bin"
elif [ "${shortname}" == "tu" ];then
diff --git a/lgsm/functions/info_config.sh b/lgsm/functions/info_config.sh
index d54fdba96..d13e000d9 100755
--- a/lgsm/functions/info_config.sh
+++ b/lgsm/functions/info_config.sh
@@ -188,7 +188,7 @@ fn_info_config_bf1942(){
queryport="${zero}"
else
- servername=$(grep "game.serverName" "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/game.serverName //g' | tr -d '=\";,:' | xargs)
+ servername=$(grep -E "^game.serverName " "${servercfgfullpath}" | sed -e 's/^[ \t]*//g' -e '/^--/d' -e 's/game.serverName //g' | tr -d '=\";,:' | xargs)
serverpassword=$(grep "game.serverPassword" "${servercfgfullpath}" | sed -e 's/^ *//g' -e '/^--/d' -e 's/game.serverPassword//g' | tr -d '=\";,:' | xargs)
maxplayers=$(grep "game.serverMaxPlayers" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
port=$(grep "game.serverPort" "${servercfgfullpath}" | grep -v "\--" | tr -cd '[:digit:]')
@@ -1511,6 +1511,20 @@ fn_info_config_soldat(){
fi
}
+fn_info_config_pavlovvr(){
+ if [ ! -f "${servercfgfullpath}" ]; then
+ servername="${unavailable}"
+ maxplayers="${unavailable}"
+ else
+ servername=$(grep "ServerName" "${servercfgfullpath}" | awk -F '=' '{print $2}')
+ maxplayers=$(grep "MaxPlayers" "${servercfgfullpath}" | awk -F '=' '{print $2}')
+
+ # Not set
+ servername=${servername:-"NOT SET"}
+ maxplayers=${maxplayers:-"0"}
+ fi
+}
+
if [ "${shortname}" == "ac" ]; then
fn_info_config_assettocorsa
elif [ "${shortname}" == "ark" ]; then
@@ -1631,4 +1645,6 @@ elif [ "${shortname}" == "st" ]; then
fn_info_config_stationeers
elif [ "${shortname}" == "mh" ]; then
fn_info_config_mordhau
+elif [ "${shortname}" == "pvr" ];then
+ fn_info_config_pavlovvr
fi
diff --git a/lgsm/functions/info_distro.sh b/lgsm/functions/info_distro.sh
index 8962426af..11da3cc63 100755
--- a/lgsm/functions/info_distro.sh
+++ b/lgsm/functions/info_distro.sh
@@ -227,7 +227,7 @@ netlink=$(ethtool "${netint}" 2>/dev/null| grep Speed | awk '{print $2}')
# External IP address
if [ -z "${extip}" ]; then
- extip=$(curl -s https://api.ipify.org 2>/dev/null)
+ extip=$(curl --connect-timeout 10 -s https://api.ipify.org 2>/dev/null)
exitcode=$?
# Should ifconfig.co return an error will use last known IP.
if [ ${exitcode} -eq 0 ]; then
@@ -264,11 +264,11 @@ if [ "$(command -v jq 2>/dev/null)" ]; then
if [ "${steammaster}" == "true" ]; then
# Will query server IP addresses first.
for queryip in "${queryips[@]}"; do
- masterserver="$(curl -m 3 -s 'https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr='${queryip}':'${port}'&format=json' | jq '.response.servers[]|.addr' | wc -l 2>/dev/null)"
+ masterserver="$(curl --connect-timeout 10 -m 3 -s 'https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr='${queryip}':'${port}'&format=json' | jq '.response.servers[]|.addr' | wc -l 2>/dev/null)"
done
# Should that not work it will try the external IP.
if [ "${masterserver}" == "0" ]; then
- masterserver="$(curl -m 3 -s 'https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr='${extip}':'${port}'&format=json' | jq '.response.servers[]|.addr' | wc -l 2>/dev/null)"
+ masterserver="$(curl --connect-timeout 10 -m 3 -s 'https://api.steampowered.com/ISteamApps/GetServersAtAddress/v0001?addr='${extip}':'${port}'&format=json' | jq '.response.servers[]|.addr' | wc -l 2>/dev/null)"
fi
if [ "${masterserver}" == "0" ]; then
displaymasterserver="false"
diff --git a/lgsm/functions/info_messages.sh b/lgsm/functions/info_messages.sh
index 4e1863f3e..dde3a2585 100755
--- a/lgsm/functions/info_messages.sh
+++ b/lgsm/functions/info_messages.sh
@@ -572,7 +572,7 @@ fn_info_message_ports(){
parmslocation="${red}UNKNOWN${default}"
# engines/games that require editing in the config file.
- local ports_edit_array=( "avalanche2.0" "avalanche3.0" "Ballistic Overkill" "dontstarve" "Eco" "idtech2" "idtech3" "idtech3_ql" "lwjgl2" "Minecraft Bedrock" "Project Cars" "projectzomboid" "quake" "refractor" "realvirtuality" "renderware" "Stationeers" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" "wurm")
+ local ports_edit_array=( "avalanche2.0" "avalanche3.0" "Ballistic Overkill" "Barotrauma" "dontstarve" "Eco" "idtech2" "idtech3" "idtech3_ql" "lwjgl2" "Minecraft Bedrock" "Project Cars" "projectzomboid" "quake" "refractor" "realvirtuality" "renderware" "Stationeers" "teeworlds" "terraria" "unreal" "unreal2" "unreal3" "TeamSpeak 3" "Mumble" "7 Days To Die" "wurm")
for port_edit in "${ports_edit_array[@]}"; do
if [ "${shortname}" == "ut3" ]; then
parmslocation="${servercfgdir}/UTWeb.ini"
@@ -1435,6 +1435,16 @@ fn_info_message_warfork(){
} | column -s $'\t' -t
}
+fn_info_message_pavlovvr(){
+ echo "netstat -atunp | grep Pavlov"
+ echo -e ""
+ {
+ echo -e "DESCRIPTION\tDIRECTION\tPORT\tPROTOCOL"
+ echo -e "> Game\tINBOUND\t${port}\tudp"
+ echo -e "> Game\tINBOUND\t$((port+400))\tudp"
+ } | column -s $'\t' -t
+}
+
fn_info_message_select_engine(){
# Display details depending on game or engine.
if [ "${shortname}" == "ac" ]; then
@@ -1547,6 +1557,8 @@ fn_info_message_select_engine(){
fn_info_message_bfv
elif [ "${shortname}" == "rtcw" ]; then
fn_info_message_rtcw
+ elif [ "${shortname}" == "pvr" ]; then
+ fn_info_message_pavlovvr
elif [ "${shortname}" == "rust" ]; then
fn_info_message_rust
elif [ "${shortname}" == "wf" ]; then
diff --git a/lgsm/functions/info_parms.sh b/lgsm/functions/info_parms.sh
index 57ca43850..74c29b9df 100755
--- a/lgsm/functions/info_parms.sh
+++ b/lgsm/functions/info_parms.sh
@@ -196,6 +196,11 @@ fn_info_parms_teeworlds(){
queryport=${port:-"0"}
}
+fn_info_parms_pavlovvr(){
+ port=${port:-"0"}
+ queryport=${queryport:-"0"}
+}
+
fn_info_parms_unreal(){
defaultmap=${defaultmap:-"NOT SET"}
queryport=$((port + 1))
@@ -250,6 +255,8 @@ elif [ "${shortname}" == "mom" ]; then
fn_info_parms_mom
elif [ "${shortname}" == "pz" ]; then
fn_info_parms_projectzomboid
+elif [ "${shortname}" == "pvr" ]; then
+ fn_info_parms_pavlovvr
elif [ "${shortname}" == "qw" ]; then
fn_info_parms_quakeworld
elif [ "${shortname}" == "q2" ]||[ "${shortname}" == "q3" ]; then
diff --git a/lgsm/functions/install_config.sh b/lgsm/functions/install_config.sh
index 543bd0a3d..fbff9dbbb 100755
--- a/lgsm/functions/install_config.sh
+++ b/lgsm/functions/install_config.sh
@@ -576,6 +576,13 @@ elif [ "${shortname}" == "mumble" ]; then
fn_fetch_default_config
fn_default_config_remote
fn_list_config_locations
+elif [ "${shortname}" == "pvr" ]; then
+ gamedirname="PavlovVR"
+ fn_check_cfgdir
+ array_configs+=( Game.ini )
+ fn_fetch_default_config
+ fn_default_config_remote
+ fn_set_config_vars
elif [ "${shortname}" == "pvkii" ]; then
gamedirname="PiratesVikingandKnightsII"
array_configs+=( server.cfg )
@@ -653,13 +660,6 @@ elif [ "${shortname}" == "rust" ]; then
fn_fetch_default_config
fn_default_config_remote
fn_list_config_locations
-elif [ "${shortname}" == "samp" ]; then
- gamedirname="SanAndreasMultiplayer"
- array_configs+=( server.cfg )
- fn_fetch_default_config
- fn_default_config_remote
- fn_set_config_vars
- fn_list_config_locations
elif [ "${shortname}" == "sol" ]; then
gamedirname="Soldat"
array_configs+=( soldat.ini )
diff --git a/lgsm/functions/install_server_files.sh b/lgsm/functions/install_server_files.sh
index 73f2dc2b1..f8b6be4f0 100755
--- a/lgsm/functions/install_server_files.sh
+++ b/lgsm/functions/install_server_files.sh
@@ -48,7 +48,7 @@ fn_install_server_files(){
elif [ "${shortname}" == "ut2k4" ]; then
remote_fileurl="http://linuxgsm.download/UnrealTournament2004/ut2004-server-3369-3-ultimate-linux.tar.xz"; local_filedir="${tmpdir}"; local_filename="ut2004-server-3369-3-ultimate-linux.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="9fceaab68554749f4b45be66613b9a15"
elif [ "${shortname}" == "ut99" ]; then
- remote_fileurl="http://linuxgsm.download/UnrealTournament99/ut99-server-451-ultimate-linux.tar.xz"; local_filedir="${tmpdir}"; local_filename="ut99-server-451-ultimate-linux.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="42c6839f8cb95907eeef71a1838aa1f7"
+ remote_fileurl="http://linuxgsm.download/UnrealTournament99/ut99-server-469a-ultimate-linux.tar.xz"; local_filedir="${tmpdir}"; local_filename="ut99-server-469a-ultimate-linux.tar.xz"; chmodx="nochmodx" run="norun"; force="noforce"; md5="e3f2ffaab8e23b98d9e825d0244e8b9d"
elif [ "${shortname}" == "ut" ]; then
remote_fileurl="http://linuxgsm.download/UnrealTournament/UnrealTournament-Server-XAN-3525360-Linux.tar.xz"; local_filedir="${tmpdir}"; local_filename="UnrealTournament-Server-XAN-3525360-Linux.tar.xz"; chmodx="noexecute" run="norun"; force="noforce"; md5="41dd92015713a78211eaccf503b72393"
elif [ "${shortname}" == "ut3" ]; then
diff --git a/lgsm/functions/mods_core.sh b/lgsm/functions/mods_core.sh
index bd6b6275c..010ff109e 100755
--- a/lgsm/functions/mods_core.sh
+++ b/lgsm/functions/mods_core.sh
@@ -495,6 +495,254 @@ fn_check_mod_files_list(){
fi
}
+fn_mod_exist(){
+ modreq=$1
+ # requires one parameter, the mod
+ if [ -f "${modsdir}/${modreq}-files.txt" ]; then
+ # how many lines is the file list
+ modsfilelistsize=$(wc -l < "${modsdir}/${modreq}-files.txt")
+ # if file list is empty
+ if [ "${modsfilelistsize}" -eq 0 ]; then
+ fn_mod_required_fail_exist "${modreq}"
+ fi
+ else
+ fn_mod_required_fail_exist "${modreq}"
+ fi
+}
+
+fn_mod_required_fail_exist(){
+ modreq=$1
+ # requires one parameter, the mod
+ fn_script_log_fatal "${modreq}-files.txt is empty: unable to find ${modreq} installed"
+ echo -en "* Unable to find '${modreq}' which is required prior to installing this mod..."
+ fn_print_fail_eol_nl
+ core_exit.sh
+}
+
+fn_mod_liblist_gam_filenames(){
+ # clear variables just in case
+ moddll=""
+ modso=""
+ moddylib=""
+
+ # default libraries
+ case ${gamename} in
+ "Counter-Strike 1.6")
+ moddll="mp.dll"
+ modso="cs.so"
+ moddylib="cs.dylib"
+ ;;
+ "Day of Defeat")
+ moddll="dod.dll"
+ modso="dod.so"
+ moddylib="dod.dylib"
+ ;;
+ "Team Fortress Classic")
+ moddll="tfc.dll"
+ modso="tfc.so"
+ moddylib="tfc.dylib"
+ ;;
+ "Natural Selection")
+ moddll="ns.dll"
+ modso="ns_i386.so"
+ moddylib=""
+ ;;
+ "The Specialists")
+ moddll="mp.dll"
+ modso="ts_i386.so"
+ moddylib=""
+ ;;
+ "Half-Life: Deathmatch")
+ moddll="hl.dll"
+ modso="hl.so"
+ moddylib="hl.dylib"
+ ;;
+ esac
+}
+
+# modifers for liblist.gam to add/remote metamod binaries
+fn_mod_install_liblist_gam_file(){
+
+ fn_mod_liblist_gam_filenames
+
+ if [ -f "${modinstalldir}/liblist.gam" ]; then
+ # modify the liblist.gam file to initialize Metamod
+ logentry="sed replace (dlls\\${moddll}) ${modinstalldir}/liblist.gam"
+ echo -en "modifying gamedll in liblist.gam..."
+ rpldll="s/dlls\\\\${moddll}/addons\/metamod\/dlls\/metamod.dll/g"
+ sed -i $rpldll "${modinstalldir}/liblist.gam"
+ grep -q "addons/metamod/dlls/metamod.dll" "${modinstalldir}/liblist.gam"
+ exitcode=$?
+ # if replacement back didn't happen, error out.
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass "${logentry}"
+ fn_print_ok_eol_nl
+ fi
+
+ # modify the liblist.gam file to initialize metamod
+ logentry="sed replace (dlls\\${modso}) ${modinstalldir}/liblist.gam"
+ echo -en "modifying gamedll_linux in liblist.gam..."
+ rplso="s/dlls\/${modso}/addons\/metamod\/dlls\/metamod.so/g"
+ sed -i $rplso "${modinstalldir}/liblist.gam"
+ grep -q "addons/metamod/dlls/metamod.so" "${modinstalldir}/liblist.gam"
+ exitcode=$?
+ # if replacement back didn't happen, error out
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass "${logentry}"
+ fn_print_ok_eol_nl
+ fi
+
+ # mac os needs to be checked not all mods support mac os
+ if [ -n "${moddylib}" ]; then
+ # modify the liblist.gam file to initialize metamod
+ logentry="sed replace (dlls\\${moddylib}) ${modinstalldir}/liblist.gam"
+ echo -en "modifying gamedll_osx in liblist.gam..."
+ rpldylib="s/dlls\/${moddylib}/addons\/metamod\/dlls\/metamod.dylib/g"
+ sed -i $rpldylib "${modinstalldir}/liblist.gam"
+ grep -q "addons/metamod/dlls/metamod.dylib" "${modinstalldir}/liblist.gam"
+ exitcode=$?
+ # if replacement back didn't happen, error out.
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+ fi
+ fi
+}
+
+fn_mod_remove_liblist_gam_file(){
+
+ fn_mod_liblist_gam_filenames
+
+ if [ -f "${modinstalldir}/liblist.gam" ]; then
+ # modify the liblist.gam file back to defaults
+ logentry="sed replace (addons/metamod/dlls/metamod.dll) ${modinstalldir}/liblist.gam"
+ echo -en "modifying gamedll in liblist.gam..."
+ rpldll="s/addons\/metamod\/dlls\/metamod.dll/dlls\\\\${moddll}/g"
+ sed -i $rpldll "${modinstalldir}/liblist.gam"
+ grep -q "${moddll}" "${modinstalldir}/liblist.gam"
+ exitcode=$?
+ # if replacement back didn't happen, error out.
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+
+ # modify the liblist.gam file back to defaults
+ logentry="sed replace (addons/metamod/dlls/metamod.so) ${modinstalldir}/liblist.gam"
+ echo -en "modifying gamedll_linux in liblist.gam..."
+ rplso="s/addons\/metamod\/dlls\/metamod.so/dlls\/${modso}/g"
+ sed -i $rplso "${modinstalldir}/liblist.gam"
+ grep -q "${modso}" "${modinstalldir}/liblist.gam"
+ exitcode=$?
+ # if replacement back didn't happen, error out
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+
+ # mac os needs to be checked not all mods support mac os
+ if [ -n "${moddylib}" ]; then
+ # modify the liblist.gam file back to defaults
+ logentry="sed replace (addons/metamod/dlls/metamod.dylib) ${modinstalldir}/liblist.gam"
+ echo -en "modifying gamedll_osx in liblist.gam..."
+ rpldylib="s/addons\/metamod\/dlls\/metamod.dylib/dlls\/${moddylib}/g"
+ sed -i $rpldylib "${modinstalldir}/liblist.gam"
+ grep -q "${moddylib}" "${modinstalldir}/liblist.gam"
+ # if replacement back didn't happen, error out.
+ exitcode=$?
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+ fi
+ fi
+}
+
+fn_mod_install_amxmodx_file(){
+ # does plugins.ini exist?
+ if [ -f "${modinstalldir}/addons/metamod/plugins.ini" ]; then
+ # since it does exist, is the entry already in plugins.ini
+ logentry="line (linux addons/amxmodx/dlls/amxmodx_mm_i386.so) inserted into ${modinstalldir}/addons/metamod/plugins.ini"
+ echo -en "adding amxmodx_mm_i386.so in plugins.ini..."
+ grep -q "amxmodx_mm_i386.so" "${modinstalldir}/addons/metamod/plugins.ini"
+ exitcode=$?
+ if [ "${exitcode}" != 0 ]; then
+ # file exists but the entry does not, let's add it
+ echo "linux addons/amxmodx/dlls/amxmodx_mm_i386.so" >> "${modinstalldir}/addons/metamod/plugins.ini"
+ exitcode=$?
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+ fi
+ else
+ # create new file and add the mod to it
+ echo "linux addons/amxmodx/dlls/amxmodx_mm_i386.so" > "${modinstalldir}/addons/metamod/plugins.ini"
+ exitcode=$?
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ core_exit.sh
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+ fi
+}
+
+fn_mod_remove_amxmodx_file(){
+ if [ -f "${modinstalldir}/addons/metamod/plugins.ini" ]; then
+ # since it does exist, is the entry already in plugins.ini
+ logentry="line (linux addons/amxmodx/dlls/amxmodx_mm_i386.so) removed from ${modinstalldir}/addons/metamod/plugins.ini"
+ echo -en "removing amxmodx_mm_i386.so in plugins.ini..."
+ grep -q "linux addons/amxmodx/dlls/amxmodx_mm_i386.so" "${modinstalldir}/addons/metamod/plugins.ini"
+ # iIs it found? If so remove it and clean up
+ exitcode=$?
+ if [ "${exitcode}" == 0 ]; then
+ # delete the line we inserted
+ sed -i '/linux addons\/amxmodx\/dlls\/amxmodx_mm_i386.so/d' "${modinstalldir}/addons/metamod/plugins.ini"
+ # remove empty lines
+ sed -i '/^$/d' "${modinstalldir}/addons/metamod/plugins.ini"
+ exitcode=$?
+ if [ "${exitcode}" != 0 ]; then
+ fn_script_log_fatal "${logentry}"
+ fn_print_fail_eol_nl
+ else
+ fn_script_log_pass ${logentry}
+ fn_print_ok_eol_nl
+ fi
+
+ # if file is empty, remove it.
+ if [ -f "${modinstalldir}/addons/metamod/plugins.ini" ]; then
+ rm "${modinstalldir}/addons/metamod/plugins.ini"
+ fn_script_log_pass "file removed ${modinstalldir}/addons/metamod/plugins.ini because it was empty"
+ fi
+ fi
+ fi
+}
+
## Database initialisation.
mods_list.sh
diff --git a/lgsm/functions/mods_list.sh b/lgsm/functions/mods_list.sh
index 333601dce..f60d9b30f 100755
--- a/lgsm/functions/mods_list.sh
+++ b/lgsm/functions/mods_list.sh
@@ -12,35 +12,77 @@ functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
# Get a proper URL for mods that don't provide a good one (optional)
fn_script_log_info "Retrieving latest mods URLs"
-# Metamod
-metamodmversion="1.10"
-metamodscrapeurl="https://mms.alliedmods.net/mmsdrop/${metamodmversion}/mmsource-latest-linux"
-metamodlatestfile=$(wget "${metamodscrapeurl}" -q -O -)
-metamoddownloadurl="https://www.metamodsource.net/latest.php?os=linux&version=${metamodmversion}"
+
+# Metamod (Half-life 1 Classic Engine)
+metamodversion="1.21.1-am"
+metamodlatestfile="metamod-${metamodversion}.zip"
+metamoddownloadurl="https://www.amxmodx.org/release/${metamodlatestfile}"
metamodurl="${metamoddownloadurl}"
+# AMX Mod X: Base
+amxxbaseversion="1.8.2"
+amxxbasemod="base"
+amxxbaselatestfile="amxmodx-${amxxbaseversion}-${amxxbasemod}-linux.tar.gz"
+amxxbasedownloadurl="https://www.amxmodx.org/release/${amxxbaselatestfile}"
+amxxbaseurl="${amxxbasedownloadurl}"
+# AMX Mod X: Counter-Strike
+amxxcsversion="1.8.2"
+amxxcsmod="cstrike"
+amxxcslatestfile="amxmodx-${amxxbaseversion}-${amxxcsmod}-linux.tar.gz"
+amxxcsdownloadurl="https://www.amxmodx.org/release/${amxxcslatestfile}"
+amxxcsurl="${amxxcsdownloadurl}"
+# AMX Mod X: Day of Defeat
+amxxdodversion="1.8.2"
+amxxdodmod="dod"
+amxxdodlatestfile="amxmodx-${amxxdodversion}-${amxxdodmod}-linux.tar.gz"
+amxxdoddownloadurl="https://www.amxmodx.org/release/${amxxdodlatestfile}"
+amxxdodurl="${amxxdoddownloadurl}"
+# AMX Mod X: Team Fortress Classic
+amxxtfcversion="1.8.2"
+amxxtfcmod="tfc"
+amxxtfclatestfile="amxmodx-${amxxtfcversion}-${amxxtfcmod}-linux.tar.gz"
+amxxtfcdownloadurl="https://www.amxmodx.org/release/${amxxtfclatestfile}"
+amxxtfcurl="${amxxtfcdownloadurl}"
+# AMX Mod X: Natural Selection
+amxxnsversion="1.8.2"
+amxxnsmod="ns"
+amxxnslatestfile="amxmodx-${amxxnsversion}-${amxxnsmod}-linux.tar.gz"
+amxxnsdownloadurl="https://www.amxmodx.org/release/${amxxnslatestfile}"
+amxxnsurl="${amxxnsdownloadurl}"
+# AMX Mod X: The Specialists
+amxxtsversion="1.8.2"
+amxxtsmod="ts"
+amxxtslatestfile="amxmodx-${amxxtsversion}-${amxxtsmod}-linux.tar.gz"
+amxxtsdownloadurl="https://www.amxmodx.org/release/${amxxtslatestfile}"
+amxxtsurl="${amxxtsdownloadurl}"
+# Metamod:Source
+metamodsourceversion="1.10"
+metamodsourcescrapeurl="https://mms.alliedmods.net/mmsdrop/${metamodsourceversion}/mmsource-latest-linux"
+metamodsourcelatestfile=$(wget "${metamodsourcescrapeurl}" -q -O -)
+metamodsourcedownloadurl="https://www.metamodsource.net/latest.php?os=linux&version=${metamodsourceversion}"
+metamodsourceurl="${metamodsourcedownloadurl}"
# Sourcemod
-sourcemodmversion="1.10"
-sourcemodscrapeurl="https://sm.alliedmods.net/smdrop/${sourcemodmversion}/sourcemod-latest-linux"
+sourcemodversion="1.10"
+sourcemodscrapeurl="https://sm.alliedmods.net/smdrop/${sourcemodversion}/sourcemod-latest-linux"
sourcemodlatestfile=$(wget "${sourcemodscrapeurl}" -q -O -)
-sourcemoddownloadurl="https://www.sourcemod.net/latest.php?os=linux&version=${sourcemodmversion}"
+sourcemoddownloadurl="https://www.sourcemod.net/latest.php?os=linux&version=${sourcemodversion}"
sourcemodurl="${sourcemoddownloadurl}"
# Steamworks
steamworksscrapeurl="https://users.alliedmods.net/~kyles/builds/SteamWorks"
-steamworkslatestfile=$(curl -sL ${steamworksscrapeurl} | grep -m 1 linux | cut -d '"' -f 4)
+steamworkslatestfile=$(curl --connect-timeout 10 -sL ${steamworksscrapeurl} | grep -m 1 linux | cut -d '"' -f 4)
steamworksdownloadurl="${steamworksscrapeurl}/${steamworkslatestfile}"
steamworksurl="${steamworksdownloadurl}"
# CS:GO Mods
-get5lastbuild=$(curl -sL https://ci.splewis.net/job/get5/lastSuccessfulBuild/api/json | jq -r '.artifacts[]')
+get5lastbuild=$(curl --connect-timeout 10 -sL https://ci.splewis.net/job/get5/lastSuccessfulBuild/api/json | jq -r '.artifacts[]')
get5latestfile=$(echo -e "${get5lastbuild}" | jq -r '.fileName')
get5latestfilepath=$(echo -e "${get5lastbuild}" | jq -r '.relativePath')
get5url="https://ci.splewis.net/job/get5/lastSuccessfulBuild/artifact/${get5latestfilepath}"
-csgopuglatest=$(curl -sL https://api.github.com/repos/splewis/csgo-pug-setup/releases/latest | jq '.assets[]')
+csgopuglatest=$(curl --connect-timeout 10 -sL https://api.github.com/repos/splewis/csgo-pug-setup/releases/latest | jq '.assets[]')
csgopuglatestfile=$(echo -e "${csgopuglatest}" | jq -r '.name')
csgopuglatestlink=$(echo -e "${csgopuglatest}" | jq -r '.browser_download_url')
# Oxide
-oxiderustlatestlink=$(curl -sL https://api.github.com/repos/OxideMod/Oxide.Rust/releases/latest | jq -r '.assets[]|select(.browser_download_url | contains("linux")) | .browser_download_url')
-oxidehurtworldlatestlink=$(curl -sL https://api.github.com/repos/OxideMod/Oxide.Hurtworld/releases/latest | jq -r '.assets[].browser_download_url')
-oxidesdtdlatestlink=$(curl -sL https://api.github.com/repos/OxideMod/Oxide.SevenDaysToDie/releases/latest | jq -r '.assets[]|select(.browser_download_url | contains("linux")) | .browser_download_url' )
+oxiderustlatestlink=$(curl --connect-timeout 10 -sL https://api.github.com/repos/OxideMod/Oxide.Rust/releases/latest | jq -r '.assets[]|select(.browser_download_url | contains("linux")) | .browser_download_url')
+oxidehurtworldlatestlink=$(curl --connect-timeout 10 -sL https://api.github.com/repos/OxideMod/Oxide.Hurtworld/releases/latest | jq -r '.assets[].browser_download_url')
+oxidesdtdlatestlink=$(curl --connect-timeout 10 -sL https://api.github.com/repos/OxideMod/Oxide.SevenDaysToDie/releases/latest | jq -r '.assets[]|select(.browser_download_url | contains("linux")) | .browser_download_url' )
# Define mods information (required)
@@ -67,15 +109,34 @@ modseparator="MOD"
# [12] | "AUTHOR_URL" is the author's website, displayed to the user when chosing mods to install
# [13] | "Short Description" a description showed to the user upon installation/removal
+# Half-life 1 Engine Mods
+mod_info_metamod=( MOD "metamod" "Metamod" "${metamodurl}" "${metamodlatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/metamod/plugins.ini;" "ENGINES" "Counter-Strike 1.6;Day of Defeat;Team Fortress Classic;Natural Selection;The Specialists;Half-Life: Deathmatch;" "NOTGAMES" "https://github.com/alliedmodders/metamod-hl1" "Plugins Framework" )
+mod_info_base_amxx=( MOD "amxmodx" "AMX Mod X: Base" "${amxxbaseurl}" "${amxxbaselatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/amxmodx/configs;" "ENGINES" "Counter-Strike 1.6;Day of Defeat;Team Fortress Classic;Natural Selection;The Specialists;Half-Life: Deathmatch;" "NOTGAMES" "https://www.amxmodx.org" "Admin Features (requires Metamod)" )
+
+# CS 1.6 (HL1) Engine Mods
+mod_info_cs_amxx=( MOD "amxmodxcs" "AMX Mod X: Counter-Strike" "${amxxcsurl}" "${amxxcslatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/amxmodx/configs;" "ENGINES" "Counter-Strike 1.6;" "NOTGAMES" "https://www.amxmodx.org" "Admin Features (requires Metamod & AMX Mod X: Base)" )
+
+# DOD (HL1) Engine Mods
+mod_info_dod_amxx=( MOD "amxmodxdod" "AMX Mod X: Day of Defeat" "${amxxdodurl}" "${amxxdodlatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/amxmodx/configs;" "ENGINES" "Day of Defeat;" "NOTGAMES" "https://www.amxmodx.org" "Admin Features (requires Metamod & AMX Mod X: Base)" )
+
+# TFC (HL1) Engine Mods
+mod_info_tfc_amxx=( MOD "amxmodxtfc" "AMX Mod X: Team Fortress Classic" "${amxxtfcurl}" "${amxxtfclatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/amxmodx/configs;" "ENGINES" "Team Fortress Classic;" "NOTGAMES" "https://www.amxmodx.org" "Admin Features (requires Metamod & AMX Mod X: Base)" )
+
+# NS (Natural Selection) (HL1) Engine Mods
+mod_info_ns_amxx=( MOD "amxmodxns" "AMX Mod X: Natural Selection" "${amxxnsurl}" "${amxxnslatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/amxmodx/configs;" "ENGINES" "Natural Selection;" "NOTGAMES" "https://www.amxmodx.org" "Admin Features (requires Metamod & AMX Mod X: Base)" )
+
+# TS (The Specialists) (HL1) Engine Mods
+mod_info_ts_amxx=( MOD "amxmodxts" "AMX Mod X: The Specialists" "${amxxtsurl}" "${amxxtslatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/amxmodx/configs;" "ENGINES" "The Specialists;" "NOTGAMES" "https://www.amxmodx.org" "Admin Features (requires Metamod & AMX Mod X: Base)" )
+
# Source mods
-mod_info_metamod=( MOD "metamod" "MetaMod" "${metamodurl}" "${metamodlatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/metamod/metaplugins.ini;" "source;" "GAMES" "NOTGAMES" "https://www.sourcemm.net" "Plugins Framework" )
-mod_info_sourcemod=( MOD "sourcemod" "SourceMod" "${sourcemodurl}" "${sourcemodlatestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "source;" "GAMES" "NOTGAMES" "http://www.sourcemod.net" "Admin Features (requires MetaMod)" )
+mod_info_metamodsource=( MOD "metamodsource" "Metamod: Source" "${metamodsourceurl}" "${metamodsourcelatestfile}" "0" "LowercaseOff" "${systemdir}" "addons/metamod/metaplugins.ini;" "source;" "GAMES" "NOTGAMES" "https://www.sourcemm.net" "Plugins Framework" )
+mod_info_sourcemod=( MOD "sourcemod" "SourceMod" "${sourcemodurl}" "${sourcemodlatestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "source;" "GAMES" "NOTGAMES" "http://www.sourcemod.net" "Admin Features (requires Metamod: Source)" )
mod_info_steamworks=( MOD "steamworks" "SteamWorks" "${steamworksurl}" "${steamworkslatestfile}" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/KyleSanderson/SteamWorks" "Exposing SteamWorks functions to SourcePawn" )
mod_info_stripper=( MOD "stripper" "Stripper Source" "http://www.bailopan.net/stripper/snapshots/1.2/stripper-1.2.2-git129-linux.tar.gz" "stripper-1.2.2-git129-linux.tar.gz" "0" "LowercaseOff" "${systemdir}" "addons/stripper/maps;" "ENGINES" "Counter-Strike: Global Offensive;Counter-Strike: Source;Day of Defeat: Source;Half Life: Deathmatch;Half Life 2: Deathmatch;Insurgency;Left 4 Dead;Left 4 Dead 2;Nuclear Dawn;Team Fortress 2;" "NOTGAMES" "http://www.bailopan.net/stripper/" "Add or remove objects from map (requires MetaMod)")
# CS:GO Mods
mod_info_gokz=( MOD "gokz" "GOKZ" "https://bitbucket.org/kztimerglobalteam/gokz/downloads/GOKZ-latest.zip" "gokz-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://bitbucket.org/kztimerglobalteam/gokz/src/master/" "Implements the KZ game mode (requires SourceMod and MetaMod)" )
-mod_info_ttt=( MOD "ttt" "Trouble in Terrorist Town" "https://csgottt.com/downloads/ttt-latest-dev-${sourcemodmversion}.zip" "ttt-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/Bara/TroubleinTerroristTown" "Implements the TTT game mode (requires SourceMod and MetaMod)" )
+mod_info_ttt=( MOD "ttt" "Trouble in Terrorist Town" "https://csgottt.com/downloads/ttt-latest-dev-${sourcemodversion}.zip" "ttt-latest.zip" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/Bara/TroubleinTerroristTown" "Implements the TTT game mode (requires SourceMod and MetaMod)" )
mod_info_get5=( MOD "get5" "Get 5" "${get5url}" "${get5latestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/get5" "Plugin for competitive matches/scrims (requires SourceMod and MetaMod)" )
mod_info_pug=( MOD "pug" "PUG" "${csgopuglatestlink}" "${csgopuglatestfile}" "0" "LowercaseOff" "${systemdir}" "cfg;addons/sourcemod/configs;" "ENGINES" "Counter-Strike: Global Offensive;" "NOTGAMES" "https://github.com/splewis/csgo-pug-setup" "plugin for setting up private pug/10man games" )
@@ -93,11 +154,10 @@ mod_info_wiremodextras=( MOD "wiremod-extras" "Wiremod Extras" "https://github.c
mod_info_darkrp=( MOD "darkrp" "DarkRP" "https://github.com/FPtje/DarkRP/archive/master.zip" "darkrp-master.zip" "0" "LowercaseOn" "${systemdir}/gamemodes" "OVERWRITE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://darkrp.com" "Most popular gamemode" )
mod_info_darkrpmodification=( MOD "darkrpmodification" "DarkRP Modification" "https://github.com/FPtje/darkrpmodification/archive/master.zip" "darkrpmodification-master.zip" "0" "LowercaseOff" "${systemdir}/addons" "NOUPDATE" "ENGINES" "Garry's Mod;" "NOTGAMES" "http://darkrp.com" "Customize DarkRP settings" )
-
# Oxidemod
mod_info_rustoxide=( MOD "rustoxide" "Oxide for Rust" "${oxiderustlatestlink}" "Oxide.Rust-linux.zip" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Rust;" "NOTGAMES" "https://umod.org/games/rust" "Allows for the use of plugins" )
mod_info_hwoxide=( MOD "hwoxide" "Oxide for Hurtworld" "${oxidehurtworldlatestlink}" "Oxide.Hurtworld.zip" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "Hurtworld;" "NOTGAMES" "https://umod.org/games/hurtworld" "Allows for the use of plugins" )
mod_info_sdtdoxide=( MOD "sdtdoxide" "Oxide for 7 Days To Die" "${oxidesdtdlatestlink}" "Oxide.SevenDaysToDie.zip" "0" "LowercaseOff" "${systemdir}" "OVERWRITE" "ENGINES" "7 Days To Die;" "NOTGAMES" "https://umod.org/games/7-days-to-die" "Allows for the use of plugins" )
# REQUIRED: Set all mods info into the global array
-mods_global_array=( "${mod_info_metamod[@]}" "${mod_info_sourcemod[@]}" "${mod_info_steamworks[@]}" "${mod_info_stripper[@]}" "${mod_info_gokz[@]}" "${mod_info_ttt[@]}" "${mod_info_get5[@]}" "${mod_info_pug[@]}" "${mod_info_ulib[@]}" "${mod_info_ulx[@]}" "${mod_info_utime[@]}" "${mod_info_uclip[@]}" "${mod_info_acf[@]}" "${mod_info_acf_missiles[@]}" "${mod_info_acf_sweps[@]}" "${mod_info_advdupe2[@]}" "${mod_info_pac3[@]}" "${mod_info_wiremod[@]}" "${mod_info_wiremodextras[@]}" "${mod_info_darkrp[@]}" "${mod_info_darkrpmodification[@]}" "${mod_info_rustoxide[@]}" "${mod_info_hwoxide[@]}" "${mod_info_sdtdoxide[@]}" )
+mods_global_array=( "${mod_info_metamod[@]}" "${mod_info_base_amxx[@]}" "${mod_info_cs_amxx[@]}" "${mod_info_dod_amxx[@]}" "${mod_info_tfc_amxx[@]}" "${mod_info_ns_amxx[@]}" "${mod_info_ts_amxx[@]}" "${mod_info_metamodsource[@]}" "${mod_info_sourcemod[@]}" "${mod_info_steamworks[@]}" "${mod_info_gokz[@]}" "${mod_info_ttt[@]}" "${mod_info_get5[@]}" "${mod_info_pug[@]}" "${mod_info_ulib[@]}" "${mod_info_ulx[@]}" "${mod_info_utime[@]}" "${mod_info_uclip[@]}" "${mod_info_acf[@]}" "${mod_info_acf_missiles[@]}" "${mod_info_acf_sweps[@]}" "${mod_info_advdupe2[@]}" "${mod_info_pac3[@]}" "${mod_info_wiremod[@]}" "${mod_info_wiremodextras[@]}" "${mod_info_darkrp[@]}" "${mod_info_darkrpmodification[@]}" "${mod_info_rustoxide[@]}" "${mod_info_hwoxide[@]}" "${mod_info_sdtdoxide[@]}" )
diff --git a/lgsm/functions/query_gamedig.sh b/lgsm/functions/query_gamedig.sh
index 3c5ff38bf..2443c6e99 100755
--- a/lgsm/functions/query_gamedig.sh
+++ b/lgsm/functions/query_gamedig.sh
@@ -38,7 +38,7 @@ if [ "$(command -v gamedig 2>/dev/null)" ]&&[ "$(command -v jq 2>/dev/null)" ];
fi
if [ "${gdplayers}" == "null" ]; then
unset gdplayers
- elif [ "${gdplayers}" == "[]" ] || [ "${gdplayers}" == "-1" ]; then
+ elif [ "${gdplayers}" == "[]" ]||[ "${gdplayers}" == "-1" ]; then
gdplayers=0
fi
diff --git a/lgsm/functions/update_minecraft.sh b/lgsm/functions/update_minecraft.sh
index 98889ed64..e33840f3e 100755
--- a/lgsm/functions/update_minecraft.sh
+++ b/lgsm/functions/update_minecraft.sh
@@ -7,14 +7,12 @@
functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
fn_update_minecraft_dl(){
- if [ "${branch}" == "release" ]; then
- latestmcreleaselink=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r '.latest.release as $latest | .versions[] | select(.id == $latest) | .url')
- else
- latestmcreleaselink=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r '.versions[0].url')
- fi
+ # Generate link to version manifest json.
+ remotebuildlink=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r --arg branch ${branch} --arg mcversion ${remotebuild} '.versions | .[] | select(.type==$branch and .id==$mcversion) | .url')
+ # Generate link to server.jar
+ remotebuildurl=$(curl -s "${remotebuildlink}" | jq -r '.downloads.server.url')
- latestmcbuildurl=$(curl -s "${latestmcreleaselink}" | jq -r '.downloads.server.url')
- fn_fetch_file "${latestmcbuildurl}" "" "" "" "${tmpdir}" "minecraft_server.${remotebuild}.jar" "" "norun" "noforce" "nomd5"
+ fn_fetch_file "${remotebuildurl}" "" "" "" "${tmpdir}" "minecraft_server.${remotebuild}.jar" "" "norun" "noforce" "nomd5"
echo -e "copying to ${serverfiles}...\c"
cp "${tmpdir}/minecraft_server.${remotebuild}.jar" "${serverfiles}/minecraft_server.jar"
local exitcode=$?
@@ -34,53 +32,30 @@ fn_update_minecraft_dl(){
fn_update_minecraft_localbuild(){
# Gets local build info.
fn_print_dots "Checking local build: ${remotelocation}"
- # Uses log file to gather info.
- localbuild=$(grep -i version "${consolelogdir}"/* | tail -1 | sed 's/.*[Vv]ersion //' | sed 's/\r//g' 2>/dev/null)
- if [ -z "${localbuild}" ]; then
- fn_print_error "Checking local build: ${remotelocation}"
- fn_print_error_nl "Checking local build: ${remotelocation}: no log files containing version info"
- fn_print_info_nl "Checking local build: ${remotelocation}: forcing server restart"
- fn_script_log_error "No log files containing version info"
- fn_script_log_info "Forcing server restart"
- exitbypass=1
- command_stop.sh
- fn_firstcommand_reset
- exitbypass=1
- command_start.sh
- fn_firstcommand_reset
- totalseconds=0
- localbuild=$(grep -i version "${consolelogdir}"/* | tail -1 | sed 's/.*[Vv]ersion //' | sed 's/\r//g' 2>/dev/null)
- while [ -z "${localbuild}" ]; do
- sleep 1
- fn_print_info "Checking local build: ${remotelocation}: waiting for log file: ${totalseconds}"
- if [ -v "${loopignore}" ]; then
- loopignore=1
- fn_script_log_info "Waiting for log file to generate"
- fi
-
- localbuild=$(grep -i version "${consolelogdir}"/* | tail -1 | sed 's/.*[Vv]ersion //' | sed 's/\r//g' 2>/dev/null)
- if [ "${totalseconds}" -gt "120" ]; then
- localbuild="0"
- fn_print_error "Checking local build: ${remotelocation}: waiting for log file"
- fn_script_log_error "Local build did not generate"
- fn_script_log_error "Required log file may be missing"
- fn_script_log_error "Local build set to 0"
- fi
- totalseconds=$((totalseconds + 1))
- done
- fi
- if [ "${localbuild}" != "0" ]; then
+ # Uses executable to find local build.
+ cd "${executabledir}" || exit
+ if [ -f "minecraft_server.jar" ]; then
+ localbuild=$(unzip -p "minecraft_server.jar" version.json | jq -r '.id')
fn_print_ok "Checking local build: ${remotelocation}"
fn_script_log_pass "Checking local build"
+ else
+ localbuild="0"
+ fn_print_error "Checking local build: ${remotelocation}"
+ fn_script_log_error "Checking local build"
fi
}
fn_update_minecraft_remotebuild(){
# Gets remote build info.
- if [ "${branch}" == "release" ]; then
+ # Latest release.
+ if [ "${branch}" == "release" ] && [ "${mcversion}" == "latest" ]; then
remotebuild=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r '.latest.release')
+ # Latest snapshot.
+ elif [ "${branch}" == "snapshot" ] && [ "${mcversion}" == "latest" ]; then
+ remotebuild=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r '.latest.snapshot')
+ # Specific release/snapshot.
else
- remotebuild=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r '.versions[0].id')
+ remotebuild=$(curl -s "https://launchermeta.${remotelocation}/mc/game/version_manifest.json" | jq -r --arg branch ${branch} --arg mcversion ${mcversion} '.versions | .[] | select(.type==$branch and .id==$mcversion) | .id')
fi
if [ "${firstcommandname}" != "INSTALL" ]; then
diff --git a/lgsm/functions/update_steamcmd.sh b/lgsm/functions/update_steamcmd.sh
index 28496f7d7..b7238daf3 100644
--- a/lgsm/functions/update_steamcmd.sh
+++ b/lgsm/functions/update_steamcmd.sh
@@ -40,13 +40,8 @@ fn_update_steamcmd_remotebuild(){
find "${HOME}" -type f -name "appinfo.vdf" -exec rm -f {} \;
fi
- if [ -n "${branch}" ]&&[ -n "${betapassword}" ]; then
- remotebuild=$(${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" -beta "${branch}" -betapassword "${betapassword}" +quit | sed '1,/branches/d' | sed "1,/${branch}/d" | grep -m 1 buildid | tr -cd '[:digit:]')
- elif [ -n "${branch}" ]; then
- remotebuild=$(${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" -beta "${branch}" +quit | sed '1,/branches/d' | sed "1,/${branch}/d" | grep -m 1 buildid | tr -cd '[:digit:]')
- else
- remotebuild=$(${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +quit | sed '1,/branches/d' | sed "1,/${branch}/d" | grep -m 1 buildid | tr -cd '[:digit:]')
- fi
+ # password for branch not needed to check the buildid
+ remotebuild=$(${steamcmdcommand} +login "${steamuser}" "${steampass}" +app_info_update 1 +app_info_print "${appid}" +quit | sed -e '/"branches"/,/^}/!d' | sed -n "/\"${branch}\"/,/}/p" | grep -m 1 buildid | tr -cd '[:digit:]')
if [ "${firstcommandname}" != "INSTALL" ]; then
fn_print_dots "Checking remote build: ${remotelocation}"
diff --git a/linuxgsm.sh b/linuxgsm.sh
index 006fbd304..cb767a770 100755
--- a/linuxgsm.sh
+++ b/linuxgsm.sh
@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x
fi
-version="v20.5.1"
+version="v20.6.2"
shortname="core"
gameservername="core"
commandname="CORE"
@@ -99,7 +99,7 @@ fn_bootstrap_fetch_file(){
# Larger files show a progress bar.
echo -en "fetching ${fileurl_name} ${local_filename}...\c"
- curlcmd=$(curl -s --fail -L -o "${local_filedir}/${local_filename}" "${fileurl}" 2>&1)
+ curlcmd=$(curl --connect-timeout 10 -s --fail -L -o "${local_filedir}/${local_filename}" "${fileurl}" 2>&1)
local exitcode=$?
diff --git a/tests/tests_fctrserver.sh b/tests/tests_fctrserver.sh
index be310024a..55a05f99f 100644
--- a/tests/tests_fctrserver.sh
+++ b/tests/tests_fctrserver.sh
@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x
fi
-version="v20.5.1"
+version="v20.6.2"
shortname="fctr"
gameservername="fctrserver"
commandname="CORE"
@@ -956,6 +956,8 @@ requiredstatus="OFFLINE"
fn_setstatus
fn_print_info_nl "creating lockfile."
date '+%s' > "${lockdir}/${selfname}.lock"
+echo "${version}" >> "${lockdir}/${selfname}.lock"
+echo "${port}" >> "${lockdir}/${selfname}.lock"
(
exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log"
BASH_XTRACEFD="5"
diff --git a/tests/tests_jc2server.sh b/tests/tests_jc2server.sh
index a89c76ed8..2eb1815f3 100644
--- a/tests/tests_jc2server.sh
+++ b/tests/tests_jc2server.sh
@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x
fi
-version="v20.5.1"
+version="v20.6.2"
shortname="jc2"
gameservername="jc2server"
commandname="CORE"
@@ -1115,6 +1115,8 @@ requiredstatus="OFFLINE"
fn_setstatus
fn_print_info_nl "creating lockfile."
date '+%s' > "${lockdir}/${selfname}.lock"
+echo "${version}" >> "${lockdir}/${selfname}.lock"
+echo "${port}" >> "${lockdir}/${selfname}.lock"
(
exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log"
BASH_XTRACEFD="5"
diff --git a/tests/tests_mcserver.sh b/tests/tests_mcserver.sh
index 549f200a7..8797e78e8 100644
--- a/tests/tests_mcserver.sh
+++ b/tests/tests_mcserver.sh
@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x
fi
-version="v20.5.1"
+version="v20.6.2"
shortname="mc"
gameservername="mcserver"
commandname="CORE"
@@ -988,6 +988,8 @@ requiredstatus="OFFLINE"
fn_setstatus
fn_print_info_nl "creating lockfile."
date '+%s' > "${lockdir}/${selfname}.lock"
+echo "${version}" >> "${lockdir}/${selfname}.lock"
+echo "${port}" >> "${lockdir}/${selfname}.lock"
(
exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log"
BASH_XTRACEFD="5"
diff --git a/tests/tests_ts3server.sh b/tests/tests_ts3server.sh
index e2822a355..3883d8dc2 100644
--- a/tests/tests_ts3server.sh
+++ b/tests/tests_ts3server.sh
@@ -20,7 +20,7 @@ if [ -f ".dev-debug" ]; then
set -x
fi
-version="v20.5.1"
+version="v20.6.2"
shortname="ts3"
gameservername="ts3server"
commandname="CORE"
@@ -955,6 +955,8 @@ requiredstatus="OFFLINE"
fn_setstatus
fn_print_info_nl "creating lockfile."
date '+%s' > "${lockdir}/${selfname}.lock"
+echo "${version}" >> "${lockdir}/${selfname}.lock"
+echo "${port}" >> "${lockdir}/${selfname}.lock"
(
exec 5>"${TRAVIS_BUILD_DIR}/dev-debug.log"
BASH_XTRACEFD="5"