From 228f9646bee6645eaf920a1267124d9f8b9feb56 Mon Sep 17 00:00:00 2001 From: Matthew Green Date: Sat, 23 Sep 2023 15:23:50 -0500 Subject: [PATCH] Initial commit; working SCP:SL server with included configs. --- Dockerfile | 28 +++ config_gameplay.txt | 404 ++++++++++++++++++++++++++++++++++ config_localadmin_global.txt | 22 ++ config_remoteadmin.txt | 111 ++++++++++ localadmin_internal_data.json | 1 + start.sh | 10 + 6 files changed, 576 insertions(+) create mode 100644 Dockerfile create mode 100644 config_gameplay.txt create mode 100644 config_localadmin_global.txt create mode 100644 config_remoteadmin.txt create mode 100644 localadmin_internal_data.json create mode 100644 start.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..eda1993 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM steamcmd/steamcmd:latest + +ENV PORT=7777 +ENV UID=568 +ENV GID=568 +ENV HOME_DIR=/home/steam +ENV SERVER=$HOME_DIR/server +ENV CONFIGS=$HOME_DIR/.config/SCP\ Secret\ Laboratory/config/$PORT + +RUN mkdir -p $HOME_DIR $SERVER + +RUN apt-get update && \ + apt-get install -y libicu-dev + +# Create a new group and user +RUN addgroup --gid $GID steam && \ + adduser --disabled-password --gecos '' --uid $UID --gid $GID steam + +COPY start.sh /start.sh +COPY config_gameplay.txt $CONFIGS/config_gameplay.txt +COPY config_remoteadmin.txt $CONFIGS/config_remoteadmin.txt +COPY config_localadmin_global.txt $CONFIGS/../config_localadmin_global.txt +COPY localadmin_internal_data.json $CONFIGS/../localadmin_internal_data.json + +# Change ownership of directories and set the start script as executable +RUN chown $UID:$GID -R $HOME_DIR /usr/lib/games/steam/ + +ENTRYPOINT /bin/sh /start.sh \ No newline at end of file diff --git a/config_gameplay.txt b/config_gameplay.txt new file mode 100644 index 0000000..5485150 --- /dev/null +++ b/config_gameplay.txt @@ -0,0 +1,404 @@ +#Server main settings +server_name: SCP SL Docker Server +#default - uses server_name +player_list_title: default +player_list_title_rate: default +serverinfo_pastebin_id: 52xKLB2Y +server_ip: auto +max_players: 20 +server_tickrate: 60 +use_reserved_slots: true +lobby_waiting_time: default +ipv4_bind_ip: 0.0.0.0 +ipv6_bind_ip: :: +contact_email: + +#Spawn settings +minimum_MTF_time_to_spawn: 280 +maximum_MTF_time_to_spawn: 350 +maximum_MTF_respawn_amount: 25 +maximum_CI_respawn_amount: 25 +priority_mtf_respawn: true +use_crypto_rng: false +team_respawn_queue: default +late_join_time: 0 + +## Player Info Range ## +# This controls the default range that the player information text appears on clients. +#INVALID FLOAT - player_info_range: 10 # Default is 10. + +## Respawn ticket system settings ## + +# Enables the respawn tickets system. +# Each NTF or CI player spawned in consumes one ticket. +# We recommend keeping this on for game balance! +# +# Warning: Even if you disable the system, the tickets ratio for MTF/CI will still determine their spawn chance. +respawn_tickets_enable: true + +# Ticket counts (initial) +# The ratio of MTF-to-CI tickets directly determines which team has a higher chance of spawning. +# The initial settings (24:18) give around 42.8% chance for the CI to spawn instead of the MTF. +# The CI spawn chance can be calculated by this formula: CI_TICKETS / (MTF_TICKETS + CI_TICKETS) * 100% +respawn_tickets_mtf_initial_count: default +respawn_tickets_ci_initial_count: default + +# Ticket counts (events) +respawn_tickets_mtf_classd_cuffed_escape_count: default +respawn_tickets_mtf_scientist_escape_count: default +respawn_tickets_mtf_scp_hurt_escape_count: default +respawn_tickets_ci_classd_escape_count: default +respawn_tickets_ci_scientist_cuffed_escape_count: default +respawn_tickets_ci_scientist_died_count: default +respawn_tickets_ci_scp_item_count: default + +# Ticket misc settings +# The percentage of health an SCP must lose to trigger the 'scp_hurt' tickets. +respawn_tickets_mtf_scp_hurt_interval: default + +## Stamina system settings ## + +# The percentage of stamina used per second while sprinting. +# 0.05 = 5%, 0.33 = 33%, etc. +# NOTE: Stamina is currently only utilized on humans. +# 0 to disable, but this *will* cause weirdness with status effects +# and other mechanics, so we recommend keeping it on! +stamina_balance_use: 0.05 + +# The time (in seconds) that newly-spawned players can sprint +# without consuming stamina. Used to reduce visual artifacts. +# We recommend to put it at least 2 seconds +stamina_balance_immunity: 3 + +# The seconds that must pass before stamina starts regenerating after +#INVALID - the player stops sprinting. +# Lower values are more liekly to be exploited by players +# Higher higher can be annoying to players. +stamina_balance_regen_cd: 1 + +# How fast the stamina regenerates. +# This is a multiplier for the default setting, +# which is based on a curve - not a specific value. +stamina_balance_regen_speed: 1 + +#Random-stuff settings (-1: random) +server_forced_class: -1 +map_seed: -1 + +#Misc gameplay settings +intercom_cooldown: 120 +intercom_max_speech_time: 20 +auto_round_restart_time: 10 +friendly_fire: false +friendly_fire_multiplier: 0.4 +warhead_tminus_start_duration: 90 +lock_gates_on_countdown: true +isolate_zones_on_countdown: false +open_doors_on_countdown: true +keep_items_after_escaping: true +allow_playing_as_tutorial: true +disable_decontamination: false +096_destroy_locked_doors: true +no_holidays: false +allow_disarmed_interaction: false +914_mode: default +sinkhole_slow_amount: 30 +sinkhole_spawn_chance: 0 +disconnect_drop: true +end_round_on_one_player: false +cuffed_escapee_change_team: true +pd_exit_count: 2 + +#How many seconds someone is AFK sitting in their spawn location before they are kicked. Set to 0 or lower to disable. (Due to the 079 intro screen 079 has 13 extra seconds to be AFK.) +afk_time: 90 +constantly_check_afk: false +afk_kick_message: AFK + +#Spawn Protect settings +spawn_protect_enabled: default +spawn_protect_time: default +spawn_protect_can_shoot: default +spawn_protect_prevent_all: default +spawn_protect_team: [1, 2] + +#Auto Event settings +auto_warhead_start_minutes: 0 +auto_warhead_lock: true +auto_warhead_broadcast_enabled: true +auto_warhead_broadcast_message: Alpha Warhead is being automatically detonated and cannot be cancelled. +auto_warhead_broadcast_time: 10 +auto_warhead_detonate_broadcast: Automatic Alpha Warhead has been detonated. +auto_warhead_detonate_broadcast_time: 10 +auto_decon_broadcast_enabled: false +auto_decon_broadcast_message: Light Containment Zone is now decontaminated +auto_decon_broadcast_time: 10 + +#Security & Anticheat (default settings are good enough in most cases) +#Please type !private in your server console, if your server is verified, but you want to keep it hidden from the list. Type !public to make it public again. +online_mode: true +ip_banning: true +enable_whitelist: false +forward_ports: true +enable_query: false +query_port_shift: 0 +query_use_IPv6: true +administrator_query_password: none +connections_delay_time: 5 +enable_sync_command_binding: false +ratelimit_kick: true +same_account_joining: false +anticheat_console_output: false +enable_fast_round_restart: false +fast_round_restart_delay: 3.2 +display_preauth_logs: true +rejection_suppression_threshold: 60 +challenge_issuance_suppression_threshold: 50 + +#Enables challenge during preauthentication +preauth_challenge: true + +#Reply - prevents from flooding server with preauth requests from spoofed IP addresses +#MD5 or SHA1 - prevents from flooding with preauth requests from legitimate IP addresses as well. Requires additional time to join the server. +preauth_challenge_mode: reply +preauth_challenge_base_length: 10 +preauth_challenge_time_window: 12 +preauth_challenge_clean_period: 4 + +#Only for MD5 and SHA1 challenges (higher value = longer time required to join the server) +preauth_challenge_secret_length: 2 + +#This enforces the player to be using same IP address to connect to the game and authenticate. +#Enabling this blocks proxies. Not enforced if player joined from IPv4 and authenticated from IPv6 or viceversa. +#Situations with combinating IPv4 and IPv6 addresses are being checked on central servers after authentication (only for servers on public list). +enforce_same_ip: true +no_enforcement_for_local_ip_addresses: true + +#Connections ratelimiting +#Ratelimit time windows define how often user with the same IP/UserID can initialize new connection (once per X seconds). +enable_ip_ratelimit: true +enable_userid_ratelimit: true +ip_ratelimit_window: 3 +userid_ratelimit_window: 5 + +# - Item category limits - +# Values of 0 are NOT unlimited and will prevent item pickups of that type entirely! +# The inventory can hold a max of 8 items, so a limit of 8 is effectively unlimited. +limit_category_grenade: default +limit_category_keycard: default +limit_category_medical: default +limit_category_scpitem: default +limit_category_firearm: default + +# - Ammo type limits - +# Values from 1 to 65k. +limit_ammo12ga: default +limit_ammo556x45: default +limit_ammo44cal: default +limit_ammo762x39: default +limit_ammo9x19: default + +#Friendly fire punishment +#Action is performed if someone either kills enough teammates OR deals enough damage to teammates. +#Set kills or damage to 0 to disable that threshold. +#Detectors priority: Respawn (kill), Window (kill), Life (kill), Round (kill), Respawn (damage), Window (damage), Life (damage), Round (damage) +#Actions: kill, kick, ban, noop (no operation - do nothing, eg. to enable logging) +#Damage dealt AFTER round end is ignored. + +ff_detector_global_broadcast_seconds: 5 +ff_detector_global_adminchat_seconds: 6 + +#If enabled Class D personnel can damage or kill other Class D personnel without being punished for it +ff_detector_classD_can_damage_classD: false + +#If set to "none" then the webhook for cheaters reporting will be used +ff_detector_webhook_url: none + + +#Per round +ff_detector_round_enabled: false +ff_detector_round_kills: 100 +ff_detector_round_damage: 500 + +ff_detector_round_action: ban +ff_detector_round_ban_time: 24h +ff_detector_round_bankick_reason: You have been automatically banned for teamkilling. +ff_detector_round_kill_reason: You have been automatically killed for teamkilling. + +ff_detector_round_adminchat_enable: false +ff_detector_round_adminchat_message: %nick has been banned for teamkilling (round detector). + +ff_detector_round_broadcast_enable: true +ff_detector_round_broadcast_message: %nick has been automatically banned for teamkilling. + +ff_detector_round_webhook_report: true + + +#Per life (resets on respawn) +ff_detector_life_enabled: false +ff_detector_life_kills: 100 +ff_detector_life_damage: 300 + +ff_detector_life_action: ban +ff_detector_life_ban_time: 24h +ff_detector_life_bankick_reason: You have been automatically banned for teamkilling. +ff_detector_life_kill_reason: You have been automatically killed for teamkilling. + +ff_detector_life_adminchat_enable: false +ff_detector_life_adminchat_message: %nick has been banned for teamkilling (life detector). + +ff_detector_life_broadcast_enable: true +ff_detector_life_broadcast_message: %nick has been automatically banned for teamkilling. + +ff_detector_life_webhook_report: true + + +#In a specified time window +ff_detector_window_enabled: false +ff_detector_window_seconds: 180 +ff_detector_window_kills: 100 +ff_detector_window_damage: 250 + +ff_detector_window_action: ban +ff_detector_window_ban_time: 16h +ff_detector_window_bankick_reason: You have been automatically banned for teamkilling. +ff_detector_window_kill_reason: You have been automatically killed for teamkilling. + +ff_detector_window_adminchat_enable: false +ff_detector_window_adminchat_message: %nick has been banned for teamkilling (window detector). + +ff_detector_window_broadcast_enable: true +ff_detector_window_broadcast_message: %nick has been automatically banned for teamkilling. + +ff_detector_window_webhook_report: true + + +#In a specified time window AFTER RESPAWN +ff_detector_spawn_enabled: true +ff_detector_spawn_window_seconds: 120 +ff_detector_spawn_kills: 100 +ff_detector_spawn_damage: 180 + +ff_detector_spawn_action: ban +ff_detector_spawn_ban_time: 48h +ff_detector_spawn_bankick_reason: You have been automatically banned for teamkilling. +ff_detector_spawn_kill_reason: You have been automatically killed for teamkilling. + +ff_detector_spawn_adminchat_enable: false +ff_detector_spawn_adminchat_message: %nick has been banned for teamkilling (spawn detector). + +ff_detector_spawn_broadcast_enable: true +ff_detector_spawn_broadcast_message: %nick has been automatically banned for teamkilling. + +ff_detector_spawn_webhook_report: true + + +#Kills made with explosions (eg. grenades) after DISCONNECTING from a server (eg. throwing a grenade and immediately closing the game) +ff_detector_explosion_after_disconnecting_enabled: true + +ff_detector_explosion_after_disconnecting_action: ban +ff_detector_explosion_after_disconnecting_ban_time: 48h +ff_detector_explosion_after_disconnecting_bankick_reason: You have been automatically banned for teamkilling. + +ff_detector_explosion_after_disconnecting_adminchat_enable: false +ff_detector_explosion_after_disconnecting_adminchat_message: %nick has been banned for teamkilling (explosion after disconnecting detector). + +ff_detector_explosion_after_disconnecting_broadcast_enable: true +ff_detector_explosion_after_disconnecting_broadcast_message: %nick has been automatically banned for teamkilling. + +ff_detector_explosion_after_disconnecting_webhook_report: true + + +#Enable this if and ONLY if you use plugin or modification that provides custom whitelist. +#This is only to mark the server on the public list as using a whitelist. +#More information can be found in the Verified Server Rules. +#Ignore this config key if your server is not verified. +custom_whitelist: false + +#Enable this if and ONLY if you use plugin or modification that restricts access to the server (other than whitelist, eg. password). +#This is only to mark the server on the public list as using access restriction. +#More information can be found in the Verified Server Rules. +#Ignore this config key if your server is not verified. +server_access_restriction: false + +#Enable this if and ONLY if your server is a Custom Gamemode Server according to the definition that can be found in the Verified Server Rules. +#Ignore this config key if your server is not verified. +custom_gamemode_server: false + +#Enable this if and ONLY if your server is a Heavily Modded Server according to the definition that can be found in the Verified Server Rules. +#Ignore this config key if your server is not verified. +heavily_modded_server: false + +#port_queue is for NONDEDICATED SERVERS ONLY +port_queue: + - 7777 + - 7778 + - 7779 + - 7780 + - 7781 + - 7782 + - 7783 + - 7784 + +#Enabling this will automatically ban IP of players on the server that receives a Global Ban by a Global Moderator. (Defaults to false) +gban_ban_ip: default + +ban_nickname_maxlength: default +ban_nickname_trimunicode: default + +#Nickname filtering, using regex +nickname_filter: default +nickname_filter_replacement: default + +#Administrative actions broadcast options +broadcast_kicks: false +broadcast_kick_text: %nick% has been kicked from this server. +broadcast_kick_duration: 5 +broadcast_bans: true +broadcast_ban_text: %nick% has been banned from this server. +broadcast_ban_duration: 5 + +#Server idle mode +idle_mode_enabled: true +idle_mode_time: 5000 +idle_mode_preauth_time: 30000 +idle_mode_tickrate: 1 + +#Player report +report_send_using_discord_webhook: false +report_discord_webhook_url: PleaseSetWebhookUrlHere +report_username: Cheater Report +report_avatar_url: default +report_color: 14423100 +report_server_name: My SCP:SL Server +report_header: Player Report +report_content: Player has just been reported. + +#Restart options +#Requires LocalAdmin or a fully compatible tool. + +#You can set autorestart of the server after a specified amount of rounds (0 - disabled). +restart_after_rounds: 0 + +#Amount of time after client should rejoin after a full server restart. +#Adjust depending on your server restart time. +full_restart_rejoin_time: 25 + + +#Geoblocking +#If your server is on the public list, please refer to Verified Server Rules for more details. +#Modes: none, whitelist, blacklist +geoblocking_mode: none + +#If enabled, players on the whitelist are able to ignore geoblocking. +geoblocking_ignore_whitelisted: true + +#ISO country codes, eg. PL, US, DE +geoblocking_whitelist: + - AA + - AB + - AC + +geoblocking_blacklist: + - AA + - AB + - AC diff --git a/config_localadmin_global.txt b/config_localadmin_global.txt new file mode 100644 index 0000000..3bf0ec7 --- /dev/null +++ b/config_localadmin_global.txt @@ -0,0 +1,22 @@ +restart_on_crash: true +enable_heartbeat: true +la_live_view_use_utc: false +la_live_view_time_format: yyyy-MM-dd HH:mm:ss.fff zzz +la_show_stdout_and_stderr: false +la_no_set_cursor: false +enable_true_color: false +enable_la_logs: true +la_logs_use_utc: false +la_logs_use_Z_for_utc: false +la_log_auto_flush: true +la_log_stdout_and_stderr: true +la_delete_old_logs: true +la_logs_expiration_days: 90 +delete_old_round_logs: false +round_logs_expiration_days: 180 +compress_old_round_logs: false +round_logs_compression_threshold_days: 14 +heartbeat_span_max_threshold: 30 +heartbeat_restart_in_seconds: 11 +la_to_sl_buffer_size: 25000 +sl_to_la_buffer_size: 200000 diff --git a/config_remoteadmin.txt b/config_remoteadmin.txt new file mode 100644 index 0000000..2952f7c --- /dev/null +++ b/config_remoteadmin.txt @@ -0,0 +1,111 @@ +#Let's assign roles (you can modify them and create custom roles below) +#UserID format is SteamId64Here@steam, DiscordUserIDHere@discord, etc... +Members: + - 12345678901234567@steam: owner + +#Should Secret Lab development staff be able to use the Remote Admin? +enable_staff_access: false + +#Should Secret Lab CEO and managers be able to use Remote Admin? (We do not abuse our powers) +enable_manager_access: true + +#Allow remote admin access for the banning team, to allow them searching and fightung cheaters globally +enable_banteam_access: true + +#Enable reserved slots for the banning team (they are restricted by reserved slots limit set in the gameplay config) +enable_banteam_reserved_slots: true + +#Allow the banning team to bypass georestrictions on the server +enable_banteam_bypass_geoblocking: true + +#Let's define roles +#use color "none" to disable badge +#you can add own roles too +#cover means that this local badge is more important than a global badge and will cover it +#hidden means that this local badge is hiddeny by default (always you can use "hidetag" and "showtag" commands in game console or text-based remote admin) +#kick_power is the power for kicking and banning that the member of this group has (can be from 0 to 255) +#required_kick_power is the required kick power to kick or ban a member of this group (can be from 0 to 255) + +owner_badge: SERVER owner +owner_color: nickel +owner_cover: true +owner_hidden: true +owner_kick_power: 255 +owner_required_kick_power: 255 + +admin_badge: admin +admin_color: red +admin_cover: true +admin_hidden: false +admin_kick_power: 1 +admin_required_kick_power: 2 + +moderator_badge: moderator +moderator_color: silver +moderator_cover: true +moderator_hidden: false +moderator_kick_power: 0 +moderator_required_kick_power: 1 + +#And add them to the roles list +Roles: + - owner + - admin + - moderator + +#Let's setup permissions for roles +#More info can be found on our wiki: https://en.scpslgame.com/index.php/Docs:Permissions +Permissions: + - KickingAndShortTermBanning: [owner, admin, moderator] + - BanningUpToDay: [owner, admin, moderator] + - LongTermBanning: [owner, admin, moderator] + - ForceclassSelf: [owner, admin, moderator] + - ForceclassToSpectator: [owner, admin] + - ForceclassWithoutRestrictions: [owner, admin, moderator] + - GivingItems: [owner, admin] + - WarheadEvents: [owner, admin] + - RespawnEvents: [owner, admin] + - RoundEvents: [owner, admin] + - SetGroup: [owner, admin] + - GameplayData: [owner, admin] + - Overwatch: [owner, admin, moderator] + - FacilityManagement: [owner, admin] + - PlayersManagement: [owner, admin] + - PermissionsManagement: [owner, admin] + - ServerConsoleCommands: [] + - ViewHiddenBadges: [owner, admin, moderator] + - ServerConfigs: [owner, admin] + - Broadcasting: [owner, admin] + - PlayerSensitiveDataAccess: [owner] + - Noclip: [owner, admin] + - AFKImmunity: [owner, admin] + - AdminChat: [owner, admin] + - ViewHiddenGlobalBadges: [owner, admin] + - Announcer: [owner, admin] + - Effects: [owner, admin] + - FriendlyFireDetectorImmunity: [owner, admin] + - FriendlyFireDetectorTempDisable: [owner, admin] + +#Set to "none" in order to disable password. +#WE DON'T RECOMMEND USING PASSWORD!!! +#SETUP STEAMID AUTHENTICATION INSTEAD (of the top of this config file)! +override_password: none +override_password_role: none + +#Allows running central server commands (they are prefixed with "!") using "sudo"/"cron" command in RA (requires ServerConsoleCommands permission). +#Don't turn on unless you fully trust all people with this permission, they needs to run that commands from RA and you know what are you doing +allow_central_server_commands_as_ServerConsoleCommands: false + +# Should the GUI-Based RA use the predefined ban templates below? +enable_predefined_ban_templates: true + +# Here you can define ban templates for your staff members to use in-game. This can always be overriden by choosing the "Custom" ban tab +# FORMAT: - [Duration in seconds, Reason] +# **Note** The reason cannot contain any commas or it will break the parsing! +PredefinedBanTemplates: + - [0, Consider this a warning!] + - [3600, Mic Spamming] + - [86400, Team Killing (Minor Offence)] + - [604800, Team Killing (Major Offence)] + - [1577000000, Abusing Exploits] + diff --git a/localadmin_internal_data.json b/localadmin_internal_data.json new file mode 100644 index 0000000..9035399 --- /dev/null +++ b/localadmin_internal_data.json @@ -0,0 +1 @@ +{"GitHubPersonalAccessToken":null,"EulaAccepted":"2023-09-02T04:51:47.3803250Z","PluginManagerWarningDismissed":false,"LastPluginAliasesRefresh":null,"PluginVersionCache":{},"PluginAliases":{}} \ No newline at end of file diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..232d5b7 --- /dev/null +++ b/start.sh @@ -0,0 +1,10 @@ +echo "Current user is: $(whoami)" +steamcmd +force_install_dir $SERVER +login anonymous +app_update 996560 validate +quit + +chown steam:steam -R $HOME_DIR + +su - steam +echo "Current user is: $(whoami)" +cd $SERVER +export HOME=$HOME_DIR +./LocalAdmin $PORT --config $CONFIGS