376 lines
13 KiB
Bash
Executable File
376 lines
13 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
set -uxe
|
|
|
|
CSTRIKE="$CSSDS/cstrike"
|
|
|
|
update_cssds() {
|
|
cd $STEAMCMD
|
|
./steamcmd.sh +runscript "$HOME/etc/update_cssds.txt"
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "CSS DS is up to date"
|
|
echo "--------------------------------------------------------------"
|
|
}
|
|
|
|
update_tf2ds() {
|
|
cd $STEAMCMD
|
|
./steamcmd.sh +runscript "$HOME/etc/update_tf2ds.txt"
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "TF2 DS is up to date"
|
|
echo "--------------------------------------------------------------"
|
|
}
|
|
|
|
install_metamod() {
|
|
# is the metamod folder missing?
|
|
if [ ! -d "$CSTRIKE/addons/metamod" ]; then
|
|
LATESTMM=$(wget -qO- https://mms.alliedmods.net/mmsdrop/"${METAMOD_VERSION}"/mmsource-latest-linux)
|
|
wget -qO- https://mms.alliedmods.net/mmsdrop/"${METAMOD_VERSION}"/"${LATESTMM}" | tar xvzf - -C "$CSTRIKE"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed MetaMod $METAMOD_VERSION"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
}
|
|
|
|
install_sourcemod() {
|
|
# Are we in a sourcemod container and is the sourcemod folder missing?
|
|
if [ ! -d "$CSTRIKE/addons/sourcemod" ]; then
|
|
LATESTSM=$(wget -qO- https://sm.alliedmods.net/smdrop/"${SOURCEMOD_VERSION}"/sourcemod-latest-linux)
|
|
wget -qO- https://sm.alliedmods.net/smdrop/"${SOURCEMOD_VERSION}"/"${LATESTSM}" | tar xvzf - -C "$CSTRIKE"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed SourceMod $SOURCEMOD_VERSION"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
}
|
|
|
|
install_surf() {
|
|
cd $CSTRIKE
|
|
|
|
# Install Shavit BHopTimer (replaces InfluxTimer)
|
|
if [ ! -d "$CSTRIKE/addons/sourcemod/configs/shavit" ]; then
|
|
wget "https://github.com/shavitush/bhoptimer/releases/download/v4.0.1/bhoptimer-v4.0.1.zip"
|
|
unzip "bhoptimer-v4.0.1.zip"
|
|
rm "bhoptimer-v4.0.1.zip"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed Shavit BHopTimer v4.0.1"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
|
|
# Install MomSurfFix
|
|
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/momsurffix2.smx" ]; then
|
|
wget "https://github.com/GAMMACASE/MomSurfFix/releases/download/1.1.5/MomSurfFix2v1.1.5.zip"
|
|
unzip "MomSurfFix2v1.1.5.zip"
|
|
rm "MomSurfFix2v1.1.5.zip"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed MomSurfFix v1.1.5"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
|
|
# Install PushFix Definitive Edition
|
|
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/pushfix_de.smx" ]; then
|
|
wget "https://github.com/GAMMACASE/PushFixDE/releases/download/1.0.0/pushfix_de_1.0.0.zip"
|
|
unzip "pushfix_de_1.0.0.zip"
|
|
rm "pushfix_de_1.0.0.zip"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed PushFix Definitive Edition v1.0.0"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
|
|
# Install EventQueue Fix
|
|
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/eventqueuefix.smx" ]; then
|
|
wget "https://github.com/hermansimensen/eventqueue-fix/releases/download/1.3.2/eventqueuefix-1.3.2.zip"
|
|
unzip "eventqueuefix-1.3.2.zip"
|
|
rm "eventqueuefix-1.3.2.zip"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed EventQueue Fix v1.3.2"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
|
|
# Install RNGFix
|
|
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/rngfix.smx" ]; then
|
|
wget "https://github.com/jason-e/rngfix/releases/download/v1.1.3/rngfix_1.1.3.zip"
|
|
unzip "rngfix_1.1.3.zip"
|
|
rm "rngfix_1.1.3.zip"
|
|
echo "--------------------------------------------------------------"
|
|
echo "Installed RNGFix v1.1.3"
|
|
echo "--------------------------------------------------------------"
|
|
fi
|
|
}
|
|
|
|
configure_shavit_zones() {
|
|
cd $CSTRIKE
|
|
|
|
# Check if already configured
|
|
if [ -f "$CSTRIKE/addons/sourcemod/configs/shavit-mapfixes.cfg" ]; then
|
|
echo "--------------------------------------------------------------"
|
|
echo "Shavit zones already configured"
|
|
echo "--------------------------------------------------------------"
|
|
return
|
|
fi
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "Configuring Shavit to use JSON zones from surf-zones repo"
|
|
echo "--------------------------------------------------------------"
|
|
|
|
# Download surf-zones repository
|
|
cd /tmp
|
|
wget "https://github.com/wrldspawn/surf-zones/archive/refs/heads/main.zip" -O surf-zones.zip
|
|
unzip -q surf-zones.zip
|
|
|
|
# Copy stripper directory
|
|
if [ -d "surf-zones-main/addons/stripper" ]; then
|
|
mkdir -p "$CSTRIKE/addons/stripper"
|
|
cp -r surf-zones-main/addons/stripper/* "$CSTRIKE/addons/stripper/"
|
|
echo "Copied stripper configurations"
|
|
fi
|
|
|
|
# Copy mapfixes configuration
|
|
if [ -f "surf-zones-main/addons/sourcemod/configs/shavit-mapfixes.cfg" ]; then
|
|
mkdir -p "$CSTRIKE/addons/sourcemod/configs"
|
|
cp surf-zones-main/addons/sourcemod/configs/shavit-mapfixes.cfg "$CSTRIKE/addons/sourcemod/configs/"
|
|
echo "Copied shavit-mapfixes.cfg"
|
|
fi
|
|
|
|
# Copy styles configuration (optional - removes irrelevant styles, matches KSF behavior)
|
|
if [ -f "surf-zones-main/addons/sourcemod/configs/shavit-styles.cfg" ]; then
|
|
cp surf-zones-main/addons/sourcemod/configs/shavit-styles.cfg "$CSTRIKE/addons/sourcemod/configs/"
|
|
echo "Copied shavit-styles.cfg"
|
|
fi
|
|
|
|
# Cleanup
|
|
rm -rf surf-zones-main surf-zones.zip
|
|
|
|
# Create cfg directory for plugin configs if it doesn't exist
|
|
mkdir -p "$CSTRIKE/cfg/sourcemod"
|
|
|
|
# Configure zones plugin to use JSON instead of SQL
|
|
cat > "$CSTRIKE/cfg/sourcemod/plugin.shavit-zones.cfg" <<'EOF'
|
|
// Shavit Zones Plugin Configuration
|
|
// Set to 0 to use JSON zones instead of SQL database
|
|
shavit_zones_usesql "0"
|
|
EOF
|
|
|
|
# Configure JSON zones URL
|
|
cat > "$CSTRIKE/cfg/sourcemod/plugin.shavit-zones-json.cfg" <<'EOF'
|
|
// Shavit JSON Zones Configuration
|
|
// URL template for loading zone data - {map} will be replaced with map name
|
|
shavit_zones_json_url "https://wrldspawn.github.io/surf-zones/z/{map}.json"
|
|
EOF
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "Configured Shavit to use JSON zones"
|
|
echo "JSON URL: https://wrldspawn.github.io/surf-zones/z/{map}.json"
|
|
echo "Note: Use !setmaxvel in-game to set max velocity per map"
|
|
echo "--------------------------------------------------------------"
|
|
}
|
|
|
|
configure_shavit_database() {
|
|
cd $CSTRIKE
|
|
|
|
# Check if database config already exists
|
|
if [ -f "$CSTRIKE/addons/sourcemod/configs/databases.cfg" ]; then
|
|
# Check if shavit database entry already exists
|
|
if grep -q '"shavit"' "$CSTRIKE/addons/sourcemod/configs/databases.cfg"; then
|
|
echo "--------------------------------------------------------------"
|
|
echo "Shavit database already configured"
|
|
echo "--------------------------------------------------------------"
|
|
return
|
|
fi
|
|
fi
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "Configuring Shavit database connection"
|
|
echo "--------------------------------------------------------------"
|
|
|
|
# Set defaults if environment variables are not set
|
|
DB_HOST="${MYSQL_HOST:-mariadb}"
|
|
DB_PORT="${MYSQL_PORT:-3306}"
|
|
DB_NAME="${MYSQL_DATABASE:-shavit}"
|
|
DB_USER="${MYSQL_USER:-root}"
|
|
DB_PASS="${MYSQL_ROOT_PASSWORD:-changeme}"
|
|
|
|
# Create or append to databases.cfg
|
|
mkdir -p "$CSTRIKE/addons/sourcemod/configs"
|
|
|
|
# If databases.cfg doesn't exist, create it with full structure
|
|
if [ ! -f "$CSTRIKE/addons/sourcemod/configs/databases.cfg" ]; then
|
|
cat > "$CSTRIKE/addons/sourcemod/configs/databases.cfg" <<EOF
|
|
"Databases"
|
|
{
|
|
"driver_default" "mysql"
|
|
|
|
// Shavit BHopTimer Database
|
|
"shavit"
|
|
{
|
|
"driver" "mysql"
|
|
"host" "$DB_HOST"
|
|
"port" "$DB_PORT"
|
|
"database" "$DB_NAME"
|
|
"user" "$DB_USER"
|
|
"pass" "$DB_PASS"
|
|
}
|
|
|
|
// Default SourceMod database (local SQLite)
|
|
"default"
|
|
{
|
|
"driver" "sqlite"
|
|
"database" "sourcemod-local"
|
|
}
|
|
|
|
// Storage database (can also use MySQL if desired)
|
|
"storage-local"
|
|
{
|
|
"driver" "sqlite"
|
|
"database" "sourcemod-local"
|
|
}
|
|
}
|
|
EOF
|
|
else
|
|
# Append shavit config to existing databases.cfg (before closing brace)
|
|
# Remove the last closing brace, add shavit config, then add closing brace back
|
|
sed -i '$ d' "$CSTRIKE/addons/sourcemod/configs/databases.cfg"
|
|
cat >> "$CSTRIKE/addons/sourcemod/configs/databases.cfg" <<EOF
|
|
|
|
// Shavit BHopTimer Database
|
|
"shavit"
|
|
{
|
|
"driver" "mysql"
|
|
"host" "$DB_HOST"
|
|
"port" "$DB_PORT"
|
|
"database" "$DB_NAME"
|
|
"user" "$DB_USER"
|
|
"pass" "$DB_PASS"
|
|
}
|
|
}
|
|
EOF
|
|
fi
|
|
|
|
echo "--------------------------------------------------------------"
|
|
echo "Configured Shavit database connection"
|
|
echo "Host: $DB_HOST:$DB_PORT"
|
|
echo "Database: $DB_NAME"
|
|
echo "User: $DB_USER"
|
|
echo "--------------------------------------------------------------"
|
|
}
|
|
|
|
copy_64bit() {
|
|
cp -a "$TF2DS/bin/linux64/libsteam_api.so" \
|
|
"$CSSDS/bin/linux64/."
|
|
cp -a "$TF2DS/srcds_linux64" "$TF2DS/srcds_run_64" \
|
|
"$CSSDS/."
|
|
}
|
|
|
|
symlink_binaries() {
|
|
cd "$CSSDS/bin/linux64"
|
|
|
|
for file in *_srv.so; do
|
|
echo "Symlinking \"$file\" to \"${file/_srv/}"
|
|
ln -nfs "$file" "${file/_srv/}"
|
|
done
|
|
}
|
|
|
|
steamclient_binary() {
|
|
echo "Looking for steamclient.so and symlinking it..."
|
|
local _steamclient64bit=$(find "$HOME" -type f -name 'steamclient.so' | grep "linux64" | head -n 1)
|
|
if [ ! -n $_steamclient64bit ]; then
|
|
echo "Could not locate 64-bit steamclient.so binary. Exiting..."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$HOME/.steam/sdk64/" # srcds_linux64 looks for steamclient.so in this directory
|
|
ln -nfs "$_steamclient64bit" "$HOME/.steam/sdk64/steamclient.so"
|
|
ln -nfs "$_steamclient64bit" "$CSSDS/bin/linux64/steamclient.so"
|
|
}
|
|
|
|
cfg() {
|
|
cd
|
|
cp etc/cfg/server.cfg cssds/cstrike/cfg/
|
|
}
|
|
|
|
|
|
run_cssds() {
|
|
echo "ready to run"
|
|
cd "$CSSDS"
|
|
|
|
./srcds_run_64 -game cstrike \
|
|
-port "${SRCDS_PORT}" \
|
|
+maxplayers "${SRCDS_MAXPLAYERS}" \
|
|
+map "${SRCDS_STARTMAP}"
|
|
# -ip "${SRCDS_IP}"
|
|
}
|
|
|
|
main() {
|
|
update_cssds
|
|
update_tf2ds
|
|
copy_64bit
|
|
symlink_binaries
|
|
steamclient_binary
|
|
|
|
install_metamod
|
|
install_sourcemod
|
|
install_surf
|
|
configure_shavit_zones
|
|
configure_shavit_database
|
|
|
|
cfg
|
|
run_cssds
|
|
}
|
|
|
|
main
|
|
|
|
|
|
# sm plugins
|
|
# "vipmodel.smx" vipmodel.smx
|
|
# "Reserved Slots" (1.7.2) by AlliedModders LLC
|
|
# "ColoredText" (2.0) by unt0uch4bl3 for KSF use ONLY
|
|
# "Basic Ban Commands" (1.7.2) by AlliedModders LLC
|
|
# "Server Hop" (0.8.1) by [GRAVE] rig0r
|
|
# "PlayerTransmit" (1.0) by unt0uch
|
|
# "strippermodels.smx" strippermodels.smx
|
|
# "Whitelist" (1.0.0) by unt0uch4bl3
|
|
# "SMAC Anti-Speedhack" (0.8.0.9) by GoD-Tony
|
|
# "Player Commands" (1.4.0-dev) by AlliedModders LLC
|
|
# "sm_super_cmds_unt0uch.smx" sm_super_cmds_unt0uch.smx
|
|
# "Basic Chat" (1.7.2) by AlliedModders LLC
|
|
# "Admin File Reader" (1.7.2) by AlliedModders LLC
|
|
# "Name Change Punisher" (1.1) by Powerlord
|
|
# "Map Nominations" (1.7.2) by AlliedModders LLC
|
|
# "Stipper" (1.0) by unt0uch4bl3
|
|
# "No Block" (1.0.0.0) by sslice
|
|
# "Basic Votes" (1.7.2) by AlliedModders LLC
|
|
# "CMD Logger" (1.0.0) by unt0uch4bl3
|
|
# "Momentum surf fix '2" (1.1.5) by GAMMA CASE
|
|
# "Fun Commands" (1.4.0-dev) by AlliedModders LLC
|
|
# "Custom Votes" (0.5.6) by chundo
|
|
# "SurfTimer" (7.8.0) by unt0uch4bl3
|
|
# "Anti-Flood" (1.7.2) by AlliedModders LLC
|
|
# "EventQueue fix" (1.3.3) by carnifex
|
|
# "antibhop.smx" antibhop.smx
|
|
# "Basic Info Triggers" (1.4.2) by AlliedModders LLC
|
|
# "MapChooser" (1.7.2) by AlliedModders LLC
|
|
# "Admin Help" (1.4.0-dev) by AlliedModders LLC
|
|
# "Basic Respawn Plugin" (0.05) by Spyder
|
|
# "Rock The Vote" (1.7.2) by AlliedModders LLC
|
|
# "UrlOpen" (1.0) by unt0uch4bl3
|
|
# "Message Admin" by evolv
|
|
# "RandomCycle" (1.7.2) by AlliedModders LLC
|
|
# "PushFix - Definitive Edition" (1.1.0) by Original idea xutaxkamay | Implementation GAMMACASE
|
|
# "No-Jump Boost Fix" (1.0.0) by rio
|
|
# "Admin Menu" (1.7.2) by AlliedModders LLC
|
|
# "Client Preferences" (1.7.2) by AlliedModders LLC
|
|
# "Map configs" (1.1.1) by Berni
|
|
# "Nextmap" (1.5.1) by AlliedModders LLC
|
|
# "draw.smx" draw.smx
|
|
# "Player Trails" (3.0.2) by Twisted|Panda
|
|
# "Fun Votes" (1.7.2) by AlliedModders LLC
|
|
# "RNGFix" (1.1.3) by rio
|
|
# "SQL Admins (Threaded)" (1.7.2) by AlliedModders LLC
|
|
# "Surftimer Announcer" (1.0) by unt0uch4bl3
|
|
# "Basic Commands" (1.7.2) by AlliedModders LLC
|
|
# "DEMO Uploader" (1.0) by unt0uch4bl3
|
|
# "Players Votes" (1.5.0) by The Resident, pZv!
|
|
# "SMAC Command Monitor" (0.8.0.9) by GoD-Tony, psychonic, Kigen
|
|
# "Dissolve" (1.0.0.2) by L. Duke
|
|
# "SourceMod Anti-Cheat" (0.8.0.9) by GoD-Tony, psychonic
|