l4d overlay split scripts
This commit is contained in:
parent
a9e4013d86
commit
a59d33ec03
8 changed files with 243 additions and 88 deletions
38
bundles/left4dead2/files/scripts/helpers
Normal file
38
bundles/left4dead2/files/scripts/helpers
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/bash
|
||||
set -xeuo pipefail
|
||||
|
||||
function steam() {
|
||||
# for systemd, so it can terminate the process (for other things sudo would have been enough)
|
||||
setpriv --reuid=steam --regid=steam --init-groups "$@" <&0
|
||||
export HOME=/opt/l4d2/steam
|
||||
}
|
||||
|
||||
declare -A addons=(
|
||||
[Ions_Vocalizer]=698857882
|
||||
[EMS_Admin_System]=1376314661
|
||||
)
|
||||
|
||||
function install_addon() {
|
||||
local overlay="$1"
|
||||
local addon_name="$2"
|
||||
local addon_id="${addons[${addon_name}]}"
|
||||
steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/addons"
|
||||
test -f "/opt/l4d2/overlays/${overlay}/left4dead2/addons/${addon_id}.vpk" || \
|
||||
steam /opt/l4d2/steam-workshop-download "${addon_id}" --out "/opt/l4d2/overlays/${overlay}/left4dead2/addons"
|
||||
}
|
||||
|
||||
function install_admin_system() {
|
||||
local overlay="$1"
|
||||
install_addon "${overlay}" EMS_Admin_System
|
||||
steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/ems/admin system"
|
||||
steam echo "STEAM_1:0:12376499" > "/opt/l4d2/overlays/${overlay}/left4dead2/ems/admin system/admins.txt"
|
||||
}
|
||||
|
||||
function install_tickrate_enabler() {
|
||||
local overlay="$1"
|
||||
steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/addons"
|
||||
for file in tickrate_enabler.dll tickrate_enabler.so tickrate_enabler.vdf
|
||||
do
|
||||
curl -L "https://github.com/SirPlease/L4D2-Competitive-Rework/raw/refs/heads/master/addons/${file}" -o "/opt/l4d2/overlays/${overlay}/left4dead2/addons/${file}"
|
||||
done
|
||||
}
|
||||
12
bundles/left4dead2/files/scripts/overlays/competitive_rework
Normal file
12
bundles/left4dead2/files/scripts/overlays/competitive_rework
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
set -xeuo pipefail
|
||||
source /opt/l4d2/scripts/helpers
|
||||
overlay=$(basename "$0")
|
||||
|
||||
# https://github.com/SirPlease/L4D2-Competitive-Rework
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay/left4dead2
|
||||
test -d /opt/l4d2/overlays/$overlay/left4dead2/cfg/cfgogl || \
|
||||
curl -L https://github.com/SirPlease/L4D2-Competitive-Rework/archive/refs/heads/master.tar.gz | steam tar -xz --strip-components=1 -C /opt/l4d2/overlays/$overlay/left4dead2
|
||||
128
bundles/left4dead2/files/scripts/overlays/l4d2center_maps
Normal file
128
bundles/left4dead2/files/scripts/overlays/l4d2center_maps
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
#!/bin/bash
|
||||
set -xeuo pipefail
|
||||
source /opt/l4d2/scripts/helpers
|
||||
overlay=$(basename "$0")
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay/left4dead2/addons
|
||||
cd /opt/l4d2/overlays/$overlay/left4dead2/addons
|
||||
|
||||
# https://l4d2center.com/maps/servers/l4d2center_maps_sync.sh.txt ->
|
||||
|
||||
# Exit immediately if a command exits with a non-zero status.
|
||||
set -e
|
||||
|
||||
# Function to print error messages
|
||||
error_exit() {
|
||||
echo "Error: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check if the current directory ends with /left4dead2/addons
|
||||
current_dir=$(pwd)
|
||||
expected_dir="/left4dead2/addons"
|
||||
|
||||
if [[ ! "$current_dir" == *"$expected_dir" ]]; then
|
||||
error_exit "Script must be run from your L4D2 \"addons\" folder. Current directory: $current_dir"
|
||||
fi
|
||||
|
||||
# Check for required commands
|
||||
for cmd in curl md5sum 7z; do
|
||||
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||
error_exit "Required command '$cmd' is not installed. Please install it and retry."
|
||||
fi
|
||||
done
|
||||
|
||||
# URL of the CSV file
|
||||
CSV_URL="https://l4d2center.com/maps/servers/index.csv"
|
||||
|
||||
# Temporary file to store CSV
|
||||
TEMP_CSV=$(mktemp)
|
||||
|
||||
# Ensure temporary file is removed on exit
|
||||
trap 'rm -f "$TEMP_CSV"' EXIT
|
||||
|
||||
echo "Downloading CSV from $CSV_URL..."
|
||||
curl -sSL -o "$TEMP_CSV" "$CSV_URL" || error_exit "Failed to download CSV."
|
||||
|
||||
declare -A map_md5
|
||||
declare -A map_links
|
||||
|
||||
# Read CSV and populate associative arrays
|
||||
{
|
||||
# Skip the first line (header)
|
||||
IFS= read -r header
|
||||
|
||||
while IFS=';' read -r Name Size MD5 DownloadLink || [[ $Name ]]; do
|
||||
# Trim whitespace
|
||||
Name=$(echo "$Name" | xargs)
|
||||
MD5=$(echo "$MD5" | xargs)
|
||||
DownloadLink=$(echo "$DownloadLink" | xargs)
|
||||
|
||||
# Populate associative arrays
|
||||
map_md5["$Name"]="$MD5"
|
||||
map_links["$Name"]="$DownloadLink"
|
||||
done
|
||||
} < "$TEMP_CSV"
|
||||
|
||||
# Get list of expected VPK files
|
||||
expected_vpk=("${!map_md5[@]}")
|
||||
|
||||
# Remove VPK files not in expected list or with mismatched MD5
|
||||
echo "Cleaning up existing VPK files..."
|
||||
for file in *.vpk; do
|
||||
# Check if it's a regular file
|
||||
if [[ -f "$file" ]]; then
|
||||
if [[ -z "${map_md5["$file"]}" ]]; then
|
||||
echo "Removing unexpected file: $file"
|
||||
rm -f "$file"
|
||||
else
|
||||
# Calculate MD5
|
||||
echo "Calculating MD5 for existing file: $file..."
|
||||
current_md5=$(md5sum "$file" | awk '{print $1}')
|
||||
expected_md5="${map_md5["$file"]}"
|
||||
|
||||
if [[ "$current_md5" != "$expected_md5" ]]; then
|
||||
echo "MD5 mismatch for $file. Removing."
|
||||
rm -f "$file"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Download and extract missing or updated VPK files
|
||||
echo "Processing required VPK files..."
|
||||
for vpk in "${expected_vpk[@]}"; do
|
||||
if [[ ! -f "$vpk" ]]; then
|
||||
echo "Downloading and extracting $vpk..."
|
||||
download_url="${map_links["$vpk"]}"
|
||||
|
||||
if [[ -z "$download_url" ]]; then
|
||||
echo "No download link found for $vpk. Skipping."
|
||||
continue
|
||||
fi
|
||||
|
||||
encoded_url=$(echo "$download_url" | sed 's/ /%20/g')
|
||||
|
||||
# Download the .7z file to a temporary location
|
||||
TEMP_7Z=$(mktemp --suffix=.7z)
|
||||
curl -# -L -o "$TEMP_7Z" "$encoded_url"
|
||||
|
||||
# Check if the download was successful
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Failed to download $download_url. Skipping."
|
||||
rm -f "$TEMP_7Z"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Extract the .7z file
|
||||
7z x -y "$TEMP_7Z" || { echo "Failed to extract $TEMP_7Z. Skipping."; rm -f "$TEMP_7Z"; continue; }
|
||||
|
||||
# Remove the temporary .7z file
|
||||
rm -f "$TEMP_7Z"
|
||||
|
||||
else
|
||||
echo "$vpk is already up to date."
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Synchronization complete."
|
||||
21
bundles/left4dead2/files/scripts/overlays/tickrate
Normal file
21
bundles/left4dead2/files/scripts/overlays/tickrate
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
#!/bin/bash
|
||||
set -xeuo pipefail
|
||||
source /opt/l4d2/scripts/helpers
|
||||
overlay=$(basename "$0")
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay
|
||||
|
||||
# server config
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay/left4dead2/cfg
|
||||
steam cat <<'EOF' > /opt/l4d2/overlays/$overlay/left4dead2/cfg/server.cfg
|
||||
# https://github.com/SirPlease/L4D2-Competitive-Rework/blob/7ecc3a32a5e2180d6607a40119ff2f3c072502a9/cfg/server.cfg#L58-L69
|
||||
sv_minrate 100000
|
||||
sv_maxrate 100000
|
||||
nb_update_frequency 0.014
|
||||
net_splitpacket_maxrate 50000
|
||||
net_maxcleartime 0.0001
|
||||
fps_max 0
|
||||
EOF
|
||||
|
||||
# admin system
|
||||
install_tickrate_enabler $overlay
|
||||
16
bundles/left4dead2/files/scripts/overlays/vanilla
Normal file
16
bundles/left4dead2/files/scripts/overlays/vanilla
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
set -xeuo pipefail
|
||||
source /opt/l4d2/scripts/helpers
|
||||
overlay=$(basename "$0")
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay
|
||||
|
||||
# server config
|
||||
steam mkdir -p /opt/l4d2/overlays/$overlay/left4dead2/cfg
|
||||
steam cat <<'EOF' > /opt/l4d2/overlays/$overlay/left4dead2/cfg/server.cfg
|
||||
motd_enabled 0
|
||||
EOF
|
||||
|
||||
# admin system
|
||||
install_addon $overlay Ions_Vocalizer
|
||||
install_admin_system $overlay
|
||||
|
|
@ -10,36 +10,6 @@ function steam() {
|
|||
export HOME=/opt/l4d2/steam
|
||||
}
|
||||
|
||||
declare -A addons=(
|
||||
[Ions_Vocalizer]=698857882
|
||||
[EMS_Admin_System]=1376314661
|
||||
)
|
||||
|
||||
function install_addon() {
|
||||
local overlay="$1"
|
||||
local addon_name="$2"
|
||||
local addon_id="${addons[${addon_name}]}"
|
||||
steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/addons"
|
||||
test -f "/opt/l4d2/overlays/${overlay}/left4dead2/addons/${addon_id}.vpk" || \
|
||||
steam /opt/l4d2/steam-workshop-download "${addon_id}" --out "/opt/l4d2/overlays/${overlay}/left4dead2/addons"
|
||||
}
|
||||
|
||||
function install_admin_system() {
|
||||
local overlay="$1"
|
||||
install_addon "${overlay}" EMS_Admin_System
|
||||
steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/ems/admin system"
|
||||
steam echo "STEAM_1:0:12376499" > "/opt/l4d2/overlays/${overlay}/left4dead2/ems/admin system/admins.txt"
|
||||
}
|
||||
|
||||
function install_tickrate_enabler() {
|
||||
local overlay="$1"
|
||||
steam mkdir -p "/opt/l4d2/overlays/${overlay}/left4dead2/addons"
|
||||
for file in tickrate_enabler.dll tickrate_enabler.so tickrate_enabler.vdf
|
||||
do
|
||||
curl -L "https://github.com/SirPlease/L4D2-Competitive-Rework/raw/refs/heads/master/addons/${file}" -o "/opt/l4d2/overlays/${overlay}/left4dead2/addons/${file}"
|
||||
done
|
||||
}
|
||||
|
||||
# -- PREPARE SYSTEM -- #
|
||||
|
||||
getent passwd steam >/dev/null || useradd -M -d /opt/l4d2 -s /bin/bash steam
|
||||
|
|
@ -83,61 +53,9 @@ steam /opt/l4d2/steam/steamcmd.sh \
|
|||
|
||||
# -- OVERLAYS -- #
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays
|
||||
|
||||
# workshop downloader
|
||||
test -f /opt/l4d2/steam-workshop-download || \
|
||||
steam wget -4 https://git.sublimity.de/cronekorkn/steam-workshop-downloader/raw/branch/master/steam-workshop-download -P /opt/l4d2
|
||||
steam chmod +x /opt/l4d2/steam-workshop-download
|
||||
|
||||
# -- OVERLAY VANILLA -- #
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/vanilla
|
||||
|
||||
# server config
|
||||
steam mkdir -p /opt/l4d2/overlays/vanilla/left4dead2/cfg
|
||||
steam cat <<'EOF' > /opt/l4d2/overlays/vanilla/left4dead2/cfg/server.cfg
|
||||
motd_enabled 0
|
||||
|
||||
EOF
|
||||
|
||||
# admin system
|
||||
install_addon vanilla Ions_Vocalizer
|
||||
install_admin_system vanilla
|
||||
|
||||
# -- OVERLAY TICKRATE -- #
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/tickrate
|
||||
|
||||
# server config
|
||||
steam mkdir -p /opt/l4d2/overlays/tickrate/left4dead2/cfg
|
||||
steam cat <<'EOF' > /opt/l4d2/overlays/tickrate/left4dead2/cfg/server.cfg
|
||||
# https://github.com/SirPlease/L4D2-Competitive-Rework/blob/7ecc3a32a5e2180d6607a40119ff2f3c072502a9/cfg/server.cfg#L58-L69
|
||||
sv_minrate 100000
|
||||
sv_maxrate 100000
|
||||
nb_update_frequency 0.014
|
||||
net_splitpacket_maxrate 50000
|
||||
net_maxcleartime 0.0001
|
||||
fps_max 0
|
||||
EOF
|
||||
|
||||
# admin system
|
||||
install_tickrate_enabler tickrate
|
||||
|
||||
# -- OVERLAY COMPETITIVE REWORK WIP -- #
|
||||
|
||||
# https://github.com/SirPlease/L4D2-Competitive-Rework
|
||||
|
||||
steam mkdir -p /opt/l4d2/overlays/competitive_rework
|
||||
steam mkdir -p /opt/l4d2/overlays/competitive_rework/left4dead2
|
||||
test -d /opt/l4d2/overlays/competitive_rework/left4dead2/cfg/cfgogl || \
|
||||
curl -L https://github.com/SirPlease/L4D2-Competitive-Rework/archive/refs/heads/master.tar.gz | steam tar -xz --strip-components=1 -C /opt/l4d2/overlays/competitive_rework/left4dead2
|
||||
|
||||
# if ! test -f /opt/l4d2/overlays/competitive_rework/left4dead2/cfg/server_original.cfg
|
||||
# then
|
||||
# steam mv /opt/l4d2/overlays/competitive_rework/left4dead2/cfg/server.cfg /opt/l4d2/overlays/competitive_rework/left4dead2/cfg/server_original.cfg
|
||||
# steam echo -e "exec server_original.cfg\nsm_forcematch zonemod" > /opt/l4d2/overlays/competitive_rework/left4dead2/cfg/server.cfg
|
||||
# fi
|
||||
for overlay in /opt/l4d2/scripts/overlays/*; do
|
||||
bash -xeuo pipefail "$overlay"
|
||||
done
|
||||
|
||||
# -- SERVERS -- #
|
||||
|
||||
|
|
|
|||
|
|
@ -7,11 +7,16 @@ users = {
|
|||
|
||||
directories = {
|
||||
'/opt/l4d2': {
|
||||
'owner': 'steam',
|
||||
'group': 'steam',
|
||||
'owner': 'steam', 'group': 'steam',
|
||||
},
|
||||
'/opt/l4d2/configs': {
|
||||
'owner': 'steam',
|
||||
'owner': 'steam', 'group': 'steam',
|
||||
},
|
||||
'/opt/l4d2/scripts': {
|
||||
'owner': 'steam', 'group': 'steam',
|
||||
},
|
||||
'/opt/l4d2/scripts/overlays': {
|
||||
'owner': 'steam', 'group': 'steam',
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -29,8 +34,24 @@ files = {
|
|||
for server_name in node.metadata.get('left4dead2').keys()
|
||||
},
|
||||
},
|
||||
'/opt/l4d2/scripts/helpers': {
|
||||
'source': 'scripts/helpers',
|
||||
'mode': '755',
|
||||
'triggers': {
|
||||
'svc_systemd:left4dead2-initialize.service:restart',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for overlay in ['vanilla', 'tickrate', 'competitive_rework', 'l4d2center_maps']:
|
||||
files[f'/opt/l4d2/scripts/overlays/{overlay}'] = {
|
||||
'source': f'scripts/overlays/{overlay}',
|
||||
'mode': '755',
|
||||
'triggers': {
|
||||
'svc_systemd:left4dead2-initialize.service:restart',
|
||||
},
|
||||
}
|
||||
|
||||
svc_systemd = {
|
||||
'left4dead2-initialize.service': {
|
||||
'enabled': True,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ defaults = {
|
|||
'libc6_i386': {}, # installs libc6:i386
|
||||
'lib32z1': {},
|
||||
'unzip': {},
|
||||
'p7zip-full': {}, # l4d2center_maps_sync.sh
|
||||
},
|
||||
},
|
||||
'left4dead2': {},
|
||||
|
|
|
|||
Loading…
Reference in a new issue