Initial commit; working SCP:SL server with included configs.

This commit is contained in:
Matthew Green 2023-09-23 15:23:50 -05:00
parent 15827e18ee
commit 228f9646be
6 changed files with 576 additions and 0 deletions

28
Dockerfile Normal file
View file

@ -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

404
config_gameplay.txt Normal file
View file

@ -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

View file

@ -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

111
config_remoteadmin.txt Normal file
View file

@ -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]

View file

@ -0,0 +1 @@
{"GitHubPersonalAccessToken":null,"EulaAccepted":"2023-09-02T04:51:47.3803250Z","PluginManagerWarningDismissed":false,"LastPluginAliasesRefresh":null,"PluginVersionCache":{},"PluginAliases":{}}

10
start.sh Normal file
View file

@ -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