YUH
This commit is contained in:
@@ -27,6 +27,8 @@ sv_accelerate_use_weapon_speed 0 // Weapon weight doesn't affect accelera
|
||||
|
||||
// Fall damage and movement
|
||||
mp_falldamage 0 // No fall damage
|
||||
sv_falldamage_to_velocity_scale 0 // Disable view punch/head knock from falls
|
||||
sv_turbophysics 1 // Disable some physics effects (smoother movement)
|
||||
phys_pushscale 1000 // Push force multiplier
|
||||
|
||||
// ================================================================
|
||||
@@ -69,6 +71,11 @@ mp_idlemaxtime 0 // No idle kick (let Shavit handle this)
|
||||
mp_idledealmethod 0 // Don't deal with idle players
|
||||
sv_timeout 900 // 15 minute timeout
|
||||
|
||||
// HUD Settings (minimal HUD for clean surf experience)
|
||||
sv_hudhint_sound 0 // Disable hint sounds
|
||||
mp_radar_showall 0 // Hide radar
|
||||
sv_showimpacts 0 // Hide bullet impacts
|
||||
|
||||
// ================================================================
|
||||
// RCON SETTINGS
|
||||
// ================================================================
|
||||
|
||||
+10
-5
@@ -6,21 +6,26 @@ EXPOSE 27015/tcp \
|
||||
27020/udp
|
||||
|
||||
USER root
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y \
|
||||
RUN apt-get update && apt-get install -y \
|
||||
wget \
|
||||
ca-certificates \
|
||||
zlib1g \
|
||||
lib32z1 \
|
||||
lib32gcc-s1 \
|
||||
libncurses5 \
|
||||
libbz2-1.0 \
|
||||
libtinfo5 \
|
||||
libcurl3-gnutls \
|
||||
unzip \
|
||||
rcon
|
||||
rcon \
|
||||
neovim \
|
||||
tmux \
|
||||
less \
|
||||
procps \
|
||||
sqlite3 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV CSSDS="/home/steam/cssds"
|
||||
ENV TF2DS="/home/steam/tf2ds"
|
||||
ENV STEAMCMD="/home/steam/steamcmd"
|
||||
ENV ETC="/home/steam/etc"
|
||||
ENV METAMOD_VERSION=1.12
|
||||
@@ -29,7 +34,7 @@ ENV SOURCEMOD_VERSION=1.12
|
||||
# ensure gamedirs exist and have been chowned to steam
|
||||
# before they potentially get setup as docker volumes
|
||||
# which would otherwise cause them to be owned by root
|
||||
RUN mkdir -p "$CSSDS" "$TF2DS" "$STEAMCMD" "$ETC"
|
||||
RUN mkdir -p "$CSSDS" "$STEAMCMD" "$ETC"
|
||||
RUN chown -R steam:steam /home/steam
|
||||
|
||||
FROM build AS steam
|
||||
|
||||
+288
-120
@@ -2,9 +2,42 @@
|
||||
|
||||
set -uxe
|
||||
|
||||
# Parse command-line flags
|
||||
# By default, skip updates (set to 1)
|
||||
SKIP_CSSDS_UPDATE=1
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--update-cssds)
|
||||
SKIP_CSSDS_UPDATE=0
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "Usage: $0 [--update-cssds]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
CSTRIKE="$CSSDS/cstrike"
|
||||
|
||||
update_cssds() {
|
||||
# Check if CSS DS is already populated with game files
|
||||
if [ -f "$CSSDS/srcds_run" ]; then
|
||||
# Game files exist, respect the skip flag
|
||||
if [ $SKIP_CSSDS_UPDATE -eq 1 ]; then
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Skipping CSS DS update (use --update-cssds to enable)"
|
||||
echo "--------------------------------------------------------------"
|
||||
return
|
||||
fi
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "CSS DS not populated, performing initial installation"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
cd $STEAMCMD
|
||||
./steamcmd.sh +runscript "$HOME/etc/update_cssds.txt"
|
||||
|
||||
@@ -13,16 +46,12 @@ update_cssds() {
|
||||
echo "--------------------------------------------------------------"
|
||||
}
|
||||
|
||||
update_tf2ds() {
|
||||
cd $STEAMCMD
|
||||
./steamcmd.sh +runscript "$HOME/etc/update_tf2ds.txt"
|
||||
# TF2 DS no longer needed - running in 32-bit mode
|
||||
# update_tf2ds() function removed
|
||||
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "TF2 DS is up to date"
|
||||
echo "--------------------------------------------------------------"
|
||||
}
|
||||
install_surf() {
|
||||
cd $CSTRIKE
|
||||
|
||||
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)
|
||||
@@ -31,9 +60,7 @@ install_metamod() {
|
||||
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)
|
||||
@@ -42,59 +69,157 @@ install_sourcemod() {
|
||||
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"
|
||||
# Install sm-json (required for JSON zone loading - pure SourcePawn library)
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/scripting/include/json.inc" ]; then
|
||||
cd /tmp
|
||||
wget "https://github.com/clugg/sm-json/archive/refs/tags/v5.0.1.zip" -O sm-json-v5.0.1.zip
|
||||
unzip -o sm-json-v5.0.1.zip
|
||||
cp -r sm-json-5.0.1/addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
rm -rf sm-json-v5.0.1.zip sm-json-5.0.1/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed Shavit BHopTimer v4.0.1"
|
||||
echo "Installed sm-json v5.0.1"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "sm-json already installed"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
# Install sm_closestpos (required for ghost/replay functionality)
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/extensions/closestpos.ext.so" ]; then
|
||||
cd /tmp
|
||||
wget "https://github.com/rtldg/sm_closestpos/releases/download/v1.1.1/sm_closestpos-sm1.10-ubuntu-20.04-b0a9b88.zip"
|
||||
unzip -o "sm_closestpos-sm1.10-ubuntu-20.04-b0a9b88.zip"
|
||||
cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
rm -rf "sm_closestpos-sm1.10-ubuntu-20.04-b0a9b88.zip" addons/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed sm_closestpos v1.1.1"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "sm_closestpos already installed"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
# Install sm-ripext (required for shavit-wrsh plugin)
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/extensions/ripext.ext.so" ]; then
|
||||
cd /tmp
|
||||
wget "https://github.com/ErikMinekus/sm-ripext/releases/download/1.3.2/sm-ripext-1.3.2-linux.zip"
|
||||
unzip -o "sm-ripext-1.3.2-linux.zip"
|
||||
cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
rm -rf "sm-ripext-1.3.2-linux.zip" addons/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed sm-ripext v1.3.2"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "sm-ripext already installed"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
# Install Shavit Surf Timer (surf-specific fork)
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/shavit-core.smx" ]; then
|
||||
cd /tmp
|
||||
wget "https://github.com/bhopppp/Shavit-Surf-Timer/releases/download/v1.0.6/Shavit-SurfTimer-v1.0.6.zip"
|
||||
unzip -o "Shavit-SurfTimer-v1.0.6.zip"
|
||||
# Copy addons, sounds, and materials
|
||||
cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
cp -r sound/* "$CSTRIKE/sound/" 2>/dev/null || true
|
||||
cp -r materials/* "$CSTRIKE/materials/" 2>/dev/null || true
|
||||
rm -rf "Shavit-SurfTimer-v1.0.6.zip" addons/ sound/ materials/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed Shavit Surf Timer v1.0.6 (with sounds & materials)"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Shavit Surf Timer already installed"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
# Temporarily disabled - testing SQL zones instead of JSON
|
||||
# Install shavit-zones-json from original bhoptimer (missing in Surf Timer release)
|
||||
# if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/shavit-zones-json.smx" ]; then
|
||||
# cd /tmp
|
||||
# wget "https://github.com/shavitush/bhoptimer/releases/download/v4.0.1/bhoptimer-v4.0.1.zip"
|
||||
# unzip -o "bhoptimer-v4.0.1.zip" "addons/sourcemod/plugins/shavit-zones-json.smx"
|
||||
# cp addons/sourcemod/plugins/shavit-zones-json.smx "$CSTRIKE/addons/sourcemod/plugins/"
|
||||
# rm -rf "bhoptimer-v4.0.1.zip" addons/
|
||||
# echo "--------------------------------------------------------------"
|
||||
# echo "Installed shavit-zones-json.smx from bhoptimer v4.0.1"
|
||||
# echo "--------------------------------------------------------------"
|
||||
# else
|
||||
# echo "--------------------------------------------------------------"
|
||||
# echo "shavit-zones-json already installed"
|
||||
# echo "--------------------------------------------------------------"
|
||||
# fi
|
||||
|
||||
# Disable zones-json plugin if it exists
|
||||
if [ -f "$CSTRIKE/addons/sourcemod/plugins/shavit-zones-json.smx" ]; then
|
||||
mkdir -p "$CSTRIKE/addons/sourcemod/plugins/disabled"
|
||||
mv "$CSTRIKE/addons/sourcemod/plugins/shavit-zones-json.smx" \
|
||||
"$CSTRIKE/addons/sourcemod/plugins/disabled/" 2>/dev/null || true
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Disabled shavit-zones-json (using SQL zones instead)"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
# Install MomSurfFix
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/momsurffix2.smx" ]; then
|
||||
cd /tmp
|
||||
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"
|
||||
unzip -o "MomSurfFix2v1.1.5.zip"
|
||||
cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
rm -rf "MomSurfFix2v1.1.5.zip" addons/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed MomSurfFix v1.1.5"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "MomSurfFix already installed"
|
||||
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
|
||||
# PushFix Definitive Edition - appears in KSF plugin list but fails on CSS
|
||||
# The DE version is CS:GO only and will fail with "g_SendTableCRC" error on CSS
|
||||
# Disabled by default - if KSF uses a different version, it's not publicly available
|
||||
# if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/pushfix_de.smx" ]; then
|
||||
# cd /tmp
|
||||
# wget "https://github.com/GAMMACASE/PushFixDE/releases/download/1.0.0/pushfix_de_1.0.0.zip"
|
||||
# unzip -o "pushfix_de_1.0.0.zip"
|
||||
# cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
# rm -rf "pushfix_de_1.0.0.zip" addons/
|
||||
# fi
|
||||
|
||||
# Install EventQueue Fix
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/eventqueuefix.smx" ]; then
|
||||
cd /tmp
|
||||
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"
|
||||
unzip -o "eventqueuefix-1.3.2.zip"
|
||||
cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
rm -rf "eventqueuefix-1.3.2.zip" addons/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed EventQueue Fix v1.3.2"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "EventQueue Fix already installed"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
|
||||
# Install RNGFix
|
||||
if [ ! -f "$CSTRIKE/addons/sourcemod/plugins/rngfix.smx" ]; then
|
||||
cd /tmp
|
||||
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"
|
||||
unzip -o "rngfix_1.1.3.zip"
|
||||
cp -r addons/* "$CSTRIKE/addons/" 2>/dev/null || true
|
||||
rm -rf "rngfix_1.1.3.zip" addons/
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Installed RNGFix v1.1.3"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "RNGFix already installed"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -116,7 +241,7 @@ configure_shavit_zones() {
|
||||
# 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
|
||||
unzip -o surf-zones.zip
|
||||
|
||||
# Copy stripper directory
|
||||
if [ -d "surf-zones-main/addons/stripper" ]; then
|
||||
@@ -144,71 +269,46 @@ configure_shavit_zones() {
|
||||
# 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
|
||||
# Configure zones plugin to use SQL database
|
||||
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"
|
||||
// Set to 1 to use SQL zones (default for Surf Timer fork)
|
||||
shavit_zones_usesql "1"
|
||||
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
|
||||
# JSON zones temporarily disabled for testing
|
||||
# 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 "Configured Shavit to use SQL zones"
|
||||
echo "Use !zones in-game to create start/end zones for maps"
|
||||
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 "Writing Shavit database configuration (SQLite)"
|
||||
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
|
||||
# Always recreate 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
|
||||
cat > "$CSTRIKE/addons/sourcemod/configs/databases.cfg" <<'EOF'
|
||||
"Databases"
|
||||
{
|
||||
"driver_default" "mysql"
|
||||
"driver_default" "sqlite"
|
||||
|
||||
// Shavit BHopTimer Database
|
||||
// Shavit BHopTimer Database (using local SQLite)
|
||||
"shavit"
|
||||
{
|
||||
"driver" "mysql"
|
||||
"host" "$DB_HOST"
|
||||
"port" "$DB_PORT"
|
||||
"database" "$DB_NAME"
|
||||
"user" "$DB_USER"
|
||||
"pass" "$DB_PASS"
|
||||
"driver" "sqlite"
|
||||
"database" "shavit-local"
|
||||
}
|
||||
|
||||
// Default SourceMod database (local SQLite)
|
||||
@@ -218,7 +318,7 @@ configure_shavit_database() {
|
||||
"database" "sourcemod-local"
|
||||
}
|
||||
|
||||
// Storage database (can also use MySQL if desired)
|
||||
// Storage database (local SQLite)
|
||||
"storage-local"
|
||||
{
|
||||
"driver" "sqlite"
|
||||
@@ -226,39 +326,62 @@ configure_shavit_database() {
|
||||
}
|
||||
}
|
||||
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 "Configured Shavit to use local SQLite database"
|
||||
echo "Database: shavit-local.sq3"
|
||||
echo "--------------------------------------------------------------"
|
||||
}
|
||||
|
||||
import_zone_data() {
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Importing zone data from Surf Timer repository"
|
||||
echo "--------------------------------------------------------------"
|
||||
|
||||
local DB_FILE="$CSTRIKE/addons/sourcemod/data/sqlite/shavit-local.sq3"
|
||||
|
||||
# Check if database file exists
|
||||
if [ ! -f "$DB_FILE" ]; then
|
||||
echo "Database file not created yet - skipping zone import"
|
||||
echo "Zones will be imported on next restart after Shavit creates tables"
|
||||
echo "--------------------------------------------------------------"
|
||||
return
|
||||
fi
|
||||
|
||||
# Check if Shavit migrations have run (mapzones table must exist)
|
||||
local table_exists=$(sqlite3 "$DB_FILE" "SELECT name FROM sqlite_master WHERE type='table' AND name='mapzones';" 2>/dev/null)
|
||||
if [ -z "$table_exists" ]; then
|
||||
echo "Shavit has not created tables yet - skipping zone import"
|
||||
echo "Zones will be imported on next restart after Shavit runs migrations"
|
||||
echo "--------------------------------------------------------------"
|
||||
return
|
||||
fi
|
||||
|
||||
# Check if zones already imported
|
||||
local zone_count=$(sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM mapzones;" 2>/dev/null || echo "0")
|
||||
if [ "$zone_count" -gt "0" ]; then
|
||||
echo "Zone data already imported ($zone_count zones)"
|
||||
echo "--------------------------------------------------------------"
|
||||
return
|
||||
fi
|
||||
|
||||
# Download and import surfzones.sql
|
||||
cd /tmp
|
||||
wget -q "https://raw.githubusercontent.com/bhopppp/Shavit-Surf-Timer/master/sql/surfzones.sql" -O surfzones.sql
|
||||
|
||||
sqlite3 "$DB_FILE" < surfzones.sql 2>/dev/null
|
||||
local imported_count=$(sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM mapzones;" 2>/dev/null || echo "unknown")
|
||||
echo "Imported $imported_count zones from surfzones.sql"
|
||||
|
||||
rm -f surfzones.sql
|
||||
echo "--------------------------------------------------------------"
|
||||
}
|
||||
|
||||
copy_64bit() {
|
||||
cp -a "$TF2DS/bin/linux64/libsteam_api.so" \
|
||||
"$CSSDS/bin/linux64/."
|
||||
"$CSSDS/bin/linux64/"
|
||||
cp -a "$TF2DS/srcds_linux64" "$TF2DS/srcds_run_64" \
|
||||
"$CSSDS/."
|
||||
"$CSSDS/"
|
||||
}
|
||||
|
||||
symlink_binaries() {
|
||||
@@ -272,15 +395,57 @@ symlink_binaries() {
|
||||
|
||||
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..."
|
||||
# For 32-bit mode, look for 32-bit steamclient (linux32 or default)
|
||||
local _steamclient32bit=$(find "$HOME" -type f -name 'steamclient.so' | grep -E "linux32|steamcmd/linux32" | head -n 1)
|
||||
if [ ! -n "$_steamclient32bit" ]; then
|
||||
# Fallback to any steamclient.so if linux32 not found
|
||||
_steamclient32bit=$(find "$HOME" -type f -name 'steamclient.so' | head -n 1)
|
||||
fi
|
||||
if [ ! -n "$_steamclient32bit" ]; then
|
||||
echo "Could not locate 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"
|
||||
mkdir -p "$HOME/.steam/sdk32/" # srcds_run looks for steamclient.so in this directory
|
||||
ln -nfs "$_steamclient32bit" "$HOME/.steam/sdk32/steamclient.so"
|
||||
ln -nfs "$_steamclient32bit" "$CSSDS/steamclient.so"
|
||||
}
|
||||
|
||||
configure_admins() {
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Configuring SourceMod admins"
|
||||
echo "--------------------------------------------------------------"
|
||||
|
||||
# Create admins_simple.ini with header
|
||||
cat > "$CSTRIKE/addons/sourcemod/configs/admins_simple.ini" <<'EOF'
|
||||
//
|
||||
// SourceMod Admins Simple Configuration
|
||||
// Auto-generated by run.sh from SRCDS_ADMINS environment variable
|
||||
//
|
||||
// Format: "STEAM_ID" "immunity:flags" // optional comment
|
||||
// Flags: z = root (full access)
|
||||
//
|
||||
EOF
|
||||
|
||||
# Add admins from environment variable (comma-separated Steam IDs)
|
||||
if [ -n "$SRCDS_ADMINS" ]; then
|
||||
IFS=',' read -ra ADMIN_IDS <<< "$SRCDS_ADMINS"
|
||||
for steamid in "${ADMIN_IDS[@]}"; do
|
||||
# Trim whitespace and quotes
|
||||
steamid=$(echo "$steamid" | xargs | tr -d '"' | tr -d "'")
|
||||
if [ -n "$steamid" ]; then
|
||||
echo "\"$steamid\" \"99:z\" // Root admin" >> "$CSTRIKE/addons/sourcemod/configs/admins_simple.ini"
|
||||
echo "Added admin: $steamid"
|
||||
fi
|
||||
done
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "Configured ${#ADMIN_IDS[@]} admin(s)"
|
||||
echo "--------------------------------------------------------------"
|
||||
else
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "No admins configured (set SRCDS_ADMINS env var)"
|
||||
echo "--------------------------------------------------------------"
|
||||
fi
|
||||
}
|
||||
|
||||
cfg() {
|
||||
@@ -293,27 +458,30 @@ run_cssds() {
|
||||
echo "ready to run"
|
||||
cd "$CSSDS"
|
||||
|
||||
./srcds_run_64 -game cstrike \
|
||||
./srcds_run -game cstrike \
|
||||
-port "${SRCDS_PORT}" \
|
||||
+maxplayers "${SRCDS_MAXPLAYERS}" \
|
||||
+map "${SRCDS_STARTMAP}"
|
||||
# -ip "${SRCDS_IP}"
|
||||
+map "${SRCDS_STARTMAP}" \
|
||||
-ip "${SRCDS_IP}"
|
||||
}
|
||||
|
||||
main() {
|
||||
update_cssds
|
||||
update_tf2ds
|
||||
copy_64bit
|
||||
symlink_binaries
|
||||
# TF2 DS not needed - running in 32-bit mode
|
||||
steamclient_binary
|
||||
|
||||
install_metamod
|
||||
install_sourcemod
|
||||
install_surf
|
||||
configure_shavit_zones
|
||||
configure_shavit_database
|
||||
configure_admins
|
||||
|
||||
cfg
|
||||
|
||||
# Import zone data after server config is ready
|
||||
# Note: Database might not exist yet on first run
|
||||
# Zones will be available after server starts and creates tables
|
||||
import_zone_data
|
||||
|
||||
run_cssds
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user