diff --git a/Content.Shared/CCVar/CCVars.Accessibility.cs b/Content.Shared/CCVar/CCVars.Accessibility.cs new file mode 100644 index 00000000000000..8eb61f0806d272 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Accessibility.cs @@ -0,0 +1,41 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Chat window opacity slider, controlling the alpha of the chat window background. + /// Goes from to 0 (completely transparent) to 1 (completely opaque) + /// + public static readonly CVarDef ChatWindowOpacity = + CVarDef.Create("accessibility.chat_window_transparency", 0.85f, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Toggle for visual effects that may potentially cause motion sickness. + /// Where reasonable, effects affected by this CVar should use an alternate effect. + /// Please do not use this CVar as a bandaid for effects that could otherwise be made accessible without issue. + /// + public static readonly CVarDef ReducedMotion = + CVarDef.Create("accessibility.reduced_motion", false, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ChatEnableColorName = + CVarDef.Create("accessibility.enable_color_name", + true, + CVar.CLIENTONLY | CVar.ARCHIVE, + "Toggles displaying names with individual colors."); + + /// + /// Screen shake intensity slider, controlling the intensity of the CameraRecoilSystem. + /// Goes from 0 (no recoil at all) to 1 (regular amounts of recoil) + /// + public static readonly CVarDef ScreenShakeIntensity = + CVarDef.Create("accessibility.screen_shake_intensity", 1f, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// A generic toggle for various visual effects that are color sensitive. + /// As of 2/16/24, only applies to progress bar colors. + /// + public static readonly CVarDef AccessibilityColorblindFriendly = + CVarDef.Create("accessibility.colorblind_friendly", false, CVar.CLIENTONLY | CVar.ARCHIVE); +} diff --git a/Content.Shared/CCVar/CCVars.Admin.Ahelp.cs b/Content.Shared/CCVar/CCVars.Admin.Ahelp.cs new file mode 100644 index 00000000000000..48f3965bb5c7b3 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Admin.Ahelp.cs @@ -0,0 +1,39 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Ahelp rate limit values are accounted in periods of this size (seconds). + /// After the period has passed, the count resets. + /// + /// + public static readonly CVarDef AhelpRateLimitPeriod = + CVarDef.Create("ahelp.rate_limit_period", 2f, CVar.SERVERONLY); + + /// + /// How many ahelp messages are allowed in a single rate limit period. + /// + /// + public static readonly CVarDef AhelpRateLimitCount = + CVarDef.Create("ahelp.rate_limit_count", 10, CVar.SERVERONLY); + + /// + /// Should the administrator's position be displayed in ahelp. + /// If it is is false, only the admin's ckey will be displayed in the ahelp. + /// + /// + /// + public static readonly CVarDef AhelpAdminPrefix = + CVarDef.Create("ahelp.admin_prefix", false, CVar.SERVERONLY); + + /// + /// Should the administrator's position be displayed in the webhook. + /// If it is is false, only the admin's ckey will be displayed in webhook. + /// + /// + /// + public static readonly CVarDef AhelpAdminPrefixWebhook = + CVarDef.Create("ahelp.admin_prefix_webhook", false, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Admin.Logs.cs b/Content.Shared/CCVar/CCVars.Admin.Logs.cs new file mode 100644 index 00000000000000..862456ddfdd926 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Admin.Logs.cs @@ -0,0 +1,42 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Controls if admin logs are enabled. Highly recommended to shut this off for development. + /// + public static readonly CVarDef AdminLogsEnabled = + CVarDef.Create("adminlogs.enabled", true, CVar.SERVERONLY); + + public static readonly CVarDef AdminLogsQueueSendDelay = + CVarDef.Create("adminlogs.queue_send_delay_seconds", 5f, CVar.SERVERONLY); + + /// + /// When to skip the waiting time to save in-round admin logs, if no admin logs are currently being saved + /// + public static readonly CVarDef AdminLogsQueueMax = + CVarDef.Create("adminlogs.queue_max", 5000, CVar.SERVERONLY); + + /// + /// When to skip the waiting time to save pre-round admin logs, if no admin logs are currently being saved + /// + public static readonly CVarDef AdminLogsPreRoundQueueMax = + CVarDef.Create("adminlogs.pre_round_queue_max", 5000, CVar.SERVERONLY); + + /// + /// When to start dropping logs + /// + public static readonly CVarDef AdminLogsDropThreshold = + CVarDef.Create("adminlogs.drop_threshold", 20000, CVar.SERVERONLY); + + /// + /// How many logs to send to the client at once + /// + public static readonly CVarDef AdminLogsClientBatchSize = + CVarDef.Create("adminlogs.client_batch_size", 1000, CVar.SERVERONLY); + + public static readonly CVarDef AdminLogsServerName = + CVarDef.Create("adminlogs.server_name", "unknown", CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Admin.Rules.cs b/Content.Shared/CCVar/CCVars.Admin.Rules.cs new file mode 100644 index 00000000000000..7385104364b512 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Admin.Rules.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Time that players have to wait before rules can be accepted. + /// + public static readonly CVarDef RulesWaitTime = + CVarDef.Create("rules.time", 45f, CVar.SERVER | CVar.REPLICATED); + + /// + /// Don't show rules to localhost/loopback interface. + /// + public static readonly CVarDef RulesExemptLocal = + CVarDef.Create("rules.exempt_local", true, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Admin.cs b/Content.Shared/CCVar/CCVars.Admin.cs new file mode 100644 index 00000000000000..28bebfbe8a6521 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Admin.cs @@ -0,0 +1,163 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef AdminAnnounceLogin = + CVarDef.Create("admin.announce_login", true, CVar.SERVERONLY); + + public static readonly CVarDef AdminAnnounceLogout = + CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY); + + /// + /// The token used to authenticate with the admin API. Leave empty to disable the admin API. This is a secret! Do not share! + /// + public static readonly CVarDef AdminApiToken = + CVarDef.Create("admin.api_token", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// Should users be able to see their own notes? Admins will be able to see and set notes regardless + /// + public static readonly CVarDef SeeOwnNotes = + CVarDef.Create("admin.see_own_notes", false, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + /// + /// Should the server play a quick sound to the active admins whenever a new player joins? + /// + public static readonly CVarDef AdminNewPlayerJoinSound = + CVarDef.Create("admin.new_player_join_sound", false, CVar.SERVERONLY); + + /// + /// The amount of days before the note starts fading. It will slowly lose opacity until it reaches stale. Set to 0 to disable. + /// + public static readonly CVarDef NoteFreshDays = + CVarDef.Create("admin.note_fresh_days", 91.31055, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + /// + /// The amount of days before the note completely fades, and can only be seen by admins if they press "see more notes". Set to 0 + /// if you want the note to immediately disappear without fading. + /// + public static readonly CVarDef NoteStaleDays = + CVarDef.Create("admin.note_stale_days", 365.2422, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + /// + /// How much time does the user have to wait in seconds before confirming that they saw an admin message? + /// + public static readonly CVarDef MessageWaitTime = + CVarDef.Create("admin.message_wait_time", 3f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + /// + /// Default severity for role bans + /// + public static readonly CVarDef RoleBanDefaultSeverity = + CVarDef.Create("admin.role_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Default severity for department bans + /// + public static readonly CVarDef DepartmentBanDefaultSeverity = + CVarDef.Create("admin.department_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Default severity for server bans + /// + public static readonly CVarDef ServerBanDefaultSeverity = + CVarDef.Create("admin.server_ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether a server ban will ban the player's ip by default. + /// + public static readonly CVarDef ServerBanIpBanDefault = + CVarDef.Create("admin.server_ban_ip_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether a server ban will ban the player's hardware id by default. + /// + public static readonly CVarDef ServerBanHwidBanDefault = + CVarDef.Create("admin.server_ban_hwid_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether to use details from last connection for ip/hwid in the BanPanel. + /// + public static readonly CVarDef ServerBanUseLastDetails = + CVarDef.Create("admin.server_ban_use_last_details", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether to erase a player's chat messages and their entity from the game when banned. + /// + public static readonly CVarDef ServerBanErasePlayer = + CVarDef.Create("admin.server_ban_erase_player", false, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Minimum players sharing a connection required to create an alert. -1 to disable the alert. + /// + /// + /// If you set this to 0 or 1 then it will alert on every connection, so probably don't do that. + /// + public static readonly CVarDef AdminAlertMinPlayersSharingConnection = + CVarDef.Create("admin.alert.min_players_sharing_connection", -1, CVar.SERVERONLY); + + /// + /// Minimum explosion intensity to create an admin alert message. -1 to disable the alert. + /// + public static readonly CVarDef AdminAlertExplosionMinIntensity = + CVarDef.Create("admin.alert.explosion_min_intensity", 60, CVar.SERVERONLY); + + /// + /// Minimum particle accelerator strength to create an admin alert message. + /// + public static readonly CVarDef AdminAlertParticleAcceleratorMinPowerState = + CVarDef.Create("admin.alert.particle_accelerator_min_power_state", 5, CVar.SERVERONLY); // strength 4 + + /// + /// Should the ban details in admin channel include PII? (IP, HWID, etc) + /// + public static readonly CVarDef AdminShowPIIOnBan = + CVarDef.Create("admin.show_pii_onban", false, CVar.SERVERONLY); + + /// + /// If an admin joins a round by reading up or using the late join button, automatically + /// de-admin them. + /// + public static readonly CVarDef AdminDeadminOnJoin = + CVarDef.Create("admin.deadmin_on_join", false, CVar.SERVERONLY); + + /// + /// Overrides the name the client sees in ahelps. Set empty to disable. + /// + public static readonly CVarDef AdminAhelpOverrideClientName = + CVarDef.Create("admin.override_adminname_in_client_ahelp", string.Empty, CVar.SERVERONLY); + + /// + /// The threshold of minutes to appear as a "new player" in the ahelp menu + /// If 0, appearing as a new player is disabled. + /// + public static readonly CVarDef NewPlayerThreshold = + CVarDef.Create("admin.new_player_threshold", 0, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + /// + /// How long an admin client can go without any input before being considered AFK. + /// + public static readonly CVarDef AdminAfkTime = + CVarDef.Create("admin.afk_time", 600f, CVar.SERVERONLY); + + /// + /// If true, admins are able to connect even if + /// would otherwise block regular players. + /// + public static readonly CVarDef AdminBypassMaxPlayers = + CVarDef.Create("admin.bypass_max_players", true, CVar.SERVERONLY); + + /// + /// Determine if custom rank names are used. + /// If it is false, it'd use the actual rank name regardless of the individual's title. + /// + /// + /// + public static readonly CVarDef AdminUseCustomNamesAdminRank = + CVarDef.Create("admin.use_custom_names_admin_rank", true, CVar.SERVERONLY); + + public static readonly CVarDef BanHardwareIds = + CVarDef.Create("ban.hardware_ids", true, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Atmos.cs b/Content.Shared/CCVar/CCVars.Atmos.cs new file mode 100644 index 00000000000000..cc1069b4fc8752 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Atmos.cs @@ -0,0 +1,153 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Whether gas differences will move entities. + /// + public static readonly CVarDef SpaceWind = + CVarDef.Create("atmos.space_wind", false, CVar.SERVERONLY); + + /// + /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. + /// + public static readonly CVarDef SpaceWindPressureForceDivisorThrow = + CVarDef.Create("atmos.space_wind_pressure_force_divisor_throw", 15f, CVar.SERVERONLY); + + /// + /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. + /// + public static readonly CVarDef SpaceWindPressureForceDivisorPush = + CVarDef.Create("atmos.space_wind_pressure_force_divisor_push", 2500f, CVar.SERVERONLY); + + /// + /// The maximum velocity (not force) that may be applied to an object by atmospheric pressure differences. + /// Useful to prevent clipping through objects. + /// + public static readonly CVarDef SpaceWindMaxVelocity = + CVarDef.Create("atmos.space_wind_max_velocity", 30f, CVar.SERVERONLY); + + /// + /// The maximum force that may be applied to an object by pushing (i.e. not throwing) atmospheric pressure differences. + /// A "throwing" atmospheric pressure difference ignores this limit, but not the max. velocity limit. + /// + public static readonly CVarDef SpaceWindMaxPushForce = + CVarDef.Create("atmos.space_wind_max_push_force", 20f, CVar.SERVERONLY); + + /// + /// Whether monstermos tile equalization is enabled. + /// + public static readonly CVarDef MonstermosEqualization = + CVarDef.Create("atmos.monstermos_equalization", true, CVar.SERVERONLY); + + /// + /// Whether monstermos explosive depressurization is enabled. + /// Needs to be enabled to work. + /// + public static readonly CVarDef MonstermosDepressurization = + CVarDef.Create("atmos.monstermos_depressurization", true, CVar.SERVERONLY); + + /// + /// Whether monstermos explosive depressurization will rip tiles.. + /// Needs and to be enabled to work. + /// WARNING: This cvar causes MAJOR contrast issues, and usually tends to make any spaced scene look very cluttered. + /// This not only usually looks strange, but can also reduce playability for people with impaired vision. Please think twice before enabling this on your server. + /// Also looks weird on slow spacing for unrelated reasons. If you do want to enable this, you should probably turn on instaspacing. + /// + public static readonly CVarDef MonstermosRipTiles = + CVarDef.Create("atmos.monstermos_rip_tiles", false, CVar.SERVERONLY); + + /// + /// Whether explosive depressurization will cause the grid to gain an impulse. + /// Needs and to be enabled to work. + /// + public static readonly CVarDef AtmosGridImpulse = + CVarDef.Create("atmos.grid_impulse", false, CVar.SERVERONLY); + + /// + /// What fraction of air from a spaced tile escapes every tick. + /// 1.0 for instant spacing, 0.2 means 20% of remaining air lost each time + /// + public static readonly CVarDef AtmosSpacingEscapeRatio = + CVarDef.Create("atmos.mmos_spacing_speed", 0.15f, CVar.SERVERONLY); + + /// + /// Minimum amount of air allowed on a spaced tile before it is reset to 0 immediately in kPa + /// Since the decay due to SpacingEscapeRatio follows a curve, it would never reach 0.0 exactly + /// unless we truncate it somewhere. + /// + public static readonly CVarDef AtmosSpacingMinGas = + CVarDef.Create("atmos.mmos_min_gas", 2.0f, CVar.SERVERONLY); + + /// + /// How much wind can go through a single tile before that tile doesn't depressurize itself + /// (I.e spacing is limited in large rooms heading into smaller spaces) + /// + public static readonly CVarDef AtmosSpacingMaxWind = + CVarDef.Create("atmos.mmos_max_wind", 500f, CVar.SERVERONLY); + + /// + /// Whether atmos superconduction is enabled. + /// + /// Disabled by default, superconduction is awful. + public static readonly CVarDef Superconduction = + CVarDef.Create("atmos.superconduction", false, CVar.SERVERONLY); + + /// + /// Heat loss per tile due to radiation at 20 degC, in W. + /// + public static readonly CVarDef SuperconductionTileLoss = + CVarDef.Create("atmos.superconduction_tile_loss", 30f, CVar.SERVERONLY); + + /// + /// Whether excited groups will be processed and created. + /// + public static readonly CVarDef ExcitedGroups = + CVarDef.Create("atmos.excited_groups", true, CVar.SERVERONLY); + + /// + /// Whether all tiles in an excited group will clear themselves once being exposed to space. + /// Similar to , without none of the tile ripping or + /// things being thrown around very violently. + /// Needs to be enabled to work. + /// + public static readonly CVarDef ExcitedGroupsSpaceIsAllConsuming = + CVarDef.Create("atmos.excited_groups_space_is_all_consuming", false, CVar.SERVERONLY); + + /// + /// Maximum time in milliseconds that atmos can take processing. + /// + public static readonly CVarDef AtmosMaxProcessTime = + CVarDef.Create("atmos.max_process_time", 3f, CVar.SERVERONLY); + + /// + /// Atmos tickrate in TPS. Atmos processing will happen every 1/TPS seconds. + /// + public static readonly CVarDef AtmosTickRate = + CVarDef.Create("atmos.tickrate", 15f, CVar.SERVERONLY); + + /// + /// Scale factor for how fast things happen in our atmosphere + /// simulation compared to real life. 1x means pumps run at 1x + /// speed. Players typically expect things to happen faster + /// in-game. + /// + public static readonly CVarDef AtmosSpeedup = + CVarDef.Create("atmos.speedup", 8f, CVar.SERVERONLY); + + /// + /// Like atmos.speedup, but only for gas and reaction heat values. 64x means + /// gases heat up and cool down 64x faster than real life. + /// + public static readonly CVarDef AtmosHeatScale = + CVarDef.Create("atmos.heat_scale", 8f, CVar.SERVERONLY); + + /// + /// Maximum explosion radius for explosions caused by bursting a gas tank ("max caps"). + /// Setting this to zero disables the explosion but still allows the tank to burst and leak. + /// + public static readonly CVarDef AtmosTankFragment = + CVarDef.Create("atmos.max_explosion_range", 26f, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Audio.cs b/Content.Shared/CCVar/CCVars.Audio.cs new file mode 100644 index 00000000000000..4d9e7c44315ffa --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Audio.cs @@ -0,0 +1,61 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// How long we'll wait until re-sampling nearby objects for ambience. Should be pretty fast, but doesn't have to match the tick rate. + /// + public static readonly CVarDef AmbientCooldown = + CVarDef.Create("ambience.cooldown", 0.1f, CVar.ARCHIVE | CVar.CLIENTONLY); + + /// + /// How large of a range to sample for ambience. + /// + public static readonly CVarDef AmbientRange = + CVarDef.Create("ambience.range", 8f, CVar.REPLICATED | CVar.SERVER); + + /// + /// Maximum simultaneous ambient sounds. + /// + public static readonly CVarDef MaxAmbientSources = + CVarDef.Create("ambience.max_sounds", 16, CVar.ARCHIVE | CVar.CLIENTONLY); + + /// + /// The minimum value the user can set for ambience.max_sounds + /// + public static readonly CVarDef MinMaxAmbientSourcesConfigured = + CVarDef.Create("ambience.min_max_sounds_configured", 16, CVar.REPLICATED | CVar.SERVER | CVar.CHEAT); + + /// + /// The maximum value the user can set for ambience.max_sounds + /// + public static readonly CVarDef MaxMaxAmbientSourcesConfigured = + CVarDef.Create("ambience.max_max_sounds_configured", 64, CVar.REPLICATED | CVar.SERVER | CVar.CHEAT); + + /// + /// Ambience volume. + /// + public static readonly CVarDef AmbienceVolume = + CVarDef.Create("ambience.volume", 1.5f, CVar.ARCHIVE | CVar.CLIENTONLY); + + /// + /// Ambience music volume. + /// + public static readonly CVarDef AmbientMusicVolume = + CVarDef.Create("ambience.music_volume", 1.5f, CVar.ARCHIVE | CVar.CLIENTONLY); + + /// + /// Lobby / round end music volume. + /// + public static readonly CVarDef LobbyMusicVolume = + CVarDef.Create("ambience.lobby_music_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); + + /// + /// UI volume. + /// + public static readonly CVarDef InterfaceVolume = + CVarDef.Create("audio.interface_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); + +} diff --git a/Content.Shared/CCVar/CCVars.Chat.Looc.cs b/Content.Shared/CCVar/CCVars.Chat.Looc.cs new file mode 100644 index 00000000000000..84ee2c280723c8 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Chat.Looc.cs @@ -0,0 +1,26 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef LoocEnabled = + CVarDef.Create("looc.enabled", true, CVar.NOTIFY | CVar.REPLICATED); + + public static readonly CVarDef AdminLoocEnabled = + CVarDef.Create("looc.enabled_admin", true, CVar.NOTIFY); + + /// + /// True: Dead players can use LOOC + /// False: Dead player LOOC gets redirected to dead chat + /// + public static readonly CVarDef DeadLoocEnabled = + CVarDef.Create("looc.enabled_dead", false, CVar.NOTIFY | CVar.REPLICATED); + + /// + /// True: Crit players can use LOOC + /// False: Crit player LOOC gets redirected to dead chat + /// + public static readonly CVarDef CritLoocEnabled = + CVarDef.Create("looc.enabled_crit", false, CVar.NOTIFY | CVar.REPLICATED); +} diff --git a/Content.Shared/CCVar/CCVars.Chat.Ooc.cs b/Content.Shared/CCVar/CCVars.Chat.Ooc.cs new file mode 100644 index 00000000000000..ba5e41053b6d85 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Chat.Ooc.cs @@ -0,0 +1,27 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef + OocEnabled = CVarDef.Create("ooc.enabled", true, CVar.NOTIFY | CVar.REPLICATED); + + public static readonly CVarDef AdminOocEnabled = + CVarDef.Create("ooc.enabled_admin", true, CVar.NOTIFY); + + /// + /// If true, whenever OOC is disabled the Discord OOC relay will also be disabled. + /// + public static readonly CVarDef DisablingOOCDisablesRelay = + CVarDef.Create("ooc.disabling_ooc_disables_relay", true, CVar.SERVERONLY); + + /// + /// Whether or not OOC chat should be enabled during a round. + /// + public static readonly CVarDef OocEnableDuringRound = + CVarDef.Create("ooc.enable_during_round", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef ShowOocPatronColor = + CVarDef.Create("ooc.show_ooc_patron_color", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.CLIENT); +} diff --git a/Content.Shared/CCVar/CCVars.Chat.cs b/Content.Shared/CCVar/CCVars.Chat.cs new file mode 100644 index 00000000000000..139a82372a266e --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Chat.cs @@ -0,0 +1,68 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Chat rate limit values are accounted in periods of this size (seconds). + /// After the period has passed, the count resets. + /// + /// + public static readonly CVarDef ChatRateLimitPeriod = + CVarDef.Create("chat.rate_limit_period", 2f, CVar.SERVERONLY); + + /// + /// How many chat messages are allowed in a single rate limit period. + /// + /// + /// The total rate limit throughput per second is effectively + /// divided by . + /// + /// + public static readonly CVarDef ChatRateLimitCount = + CVarDef.Create("chat.rate_limit_count", 10, CVar.SERVERONLY); + + /// + /// Minimum delay (in seconds) between notifying admins about chat message rate limit violations. + /// A negative value disables admin announcements. + /// + public static readonly CVarDef ChatRateLimitAnnounceAdminsDelay = + CVarDef.Create("chat.rate_limit_announce_admins_delay", 15, CVar.SERVERONLY); + + public static readonly CVarDef ChatMaxMessageLength = + CVarDef.Create("chat.max_message_length", 1000, CVar.SERVER | CVar.REPLICATED); + + public static readonly CVarDef ChatMaxAnnouncementLength = + CVarDef.Create("chat.max_announcement_length", 256, CVar.SERVER | CVar.REPLICATED); + + public static readonly CVarDef ChatSanitizerEnabled = + CVarDef.Create("chat.chat_sanitizer_enabled", true, CVar.SERVERONLY); + + public static readonly CVarDef ChatShowTypingIndicator = + CVarDef.Create("chat.show_typing_indicator", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef ChatEnableFancyBubbles = + CVarDef.Create("chat.enable_fancy_bubbles", + true, + CVar.CLIENTONLY | CVar.ARCHIVE, + "Toggles displaying fancy speech bubbles, which display the speaking character's name."); + + public static readonly CVarDef ChatFancyNameBackground = + CVarDef.Create("chat.fancy_name_background", + false, + CVar.CLIENTONLY | CVar.ARCHIVE, + "Toggles displaying a background under the speaking character's name."); + + /// + /// A message broadcast to each player that joins the lobby. + /// May be changed by admins ingame through use of the "set-motd" command. + /// In this case the new value, if not empty, is broadcast to all connected players and saved between rounds. + /// May be requested by any player through use of the "get-motd" command. + /// + public static readonly CVarDef MOTD = + CVarDef.Create("chat.motd", + "", + CVar.SERVER | CVar.SERVERONLY | CVar.ARCHIVE, + "A message broadcast to each player that joins the lobby."); +} diff --git a/Content.Shared/CCVar/CCVars.Config.cs b/Content.Shared/CCVar/CCVars.Config.cs new file mode 100644 index 00000000000000..4e11f09ee7ce3d --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Config.cs @@ -0,0 +1,35 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + // These are server-only for now since I don't foresee a client use yet, + // and I don't wanna have to start coming up with like .client suffixes and stuff like that. + + /// + /// Configuration presets to load during startup. + /// Multiple presets can be separated by comma and are loaded in order. + /// + /// + /// Loaded presets must be located under the ConfigPresets/ resource directory and end with the .toml extension. + /// Only the file name (without extension) must be given for this variable. + /// + public static readonly CVarDef ConfigPresets = + CVarDef.Create("config.presets", "", CVar.SERVERONLY); + + /// + /// Whether to load the preset development CVars. + /// This disables some things like lobby to make development easier. + /// Even when true, these are only loaded if the game is compiled with DEVELOPMENT set. + /// + public static readonly CVarDef ConfigPresetDevelopment = + CVarDef.Create("config.preset_development", true, CVar.SERVERONLY); + + /// + /// Whether to load the preset debug CVars. + /// Even when true, these are only loaded if the game is compiled with DEBUG set. + /// + public static readonly CVarDef ConfigPresetDebug = + CVarDef.Create("config.preset_debug", true, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Console.cs b/Content.Shared/CCVar/CCVars.Console.cs new file mode 100644 index 00000000000000..e670b9f836ec57 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Console.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef ConsoleLoginLocal = + CVarDef.Create("console.loginlocal", true, CVar.ARCHIVE | CVar.SERVERONLY); + + /// + /// Automatically log in the given user as host, equivalent to the promotehost command. + /// + public static readonly CVarDef ConsoleLoginHostUser = + CVarDef.Create("console.login_host_user", "", CVar.ARCHIVE | CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Crewmanifest.cs b/Content.Shared/CCVar/CCVars.Crewmanifest.cs new file mode 100644 index 00000000000000..d6251886b9504a --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Crewmanifest.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Setting this allows a crew manifest to be opened from any window + /// that has a crew manifest button, and sends the correct message. + /// If this is false, only in-game entities will allow you to see + /// the crew manifest, if the functionality is coded in. + /// Having administrator priveledge ignores this, but will still + /// hide the button in UI windows. + /// + public static readonly CVarDef CrewManifestWithoutEntity = + CVarDef.Create("crewmanifest.no_entity", true, CVar.REPLICATED); + + /// + /// Setting this allows the crew manifest to be viewed from 'unsecure' + /// entities, such as the PDA. + /// + public static readonly CVarDef CrewManifestUnsecure = + CVarDef.Create("crewmanifest.unsecure", true, CVar.REPLICATED); +} diff --git a/Content.Shared/CCVar/CCVars.Database.cs b/Content.Shared/CCVar/CCVars.Database.cs new file mode 100644 index 00000000000000..c549bd7e033ac4 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Database.cs @@ -0,0 +1,77 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ +#if DEBUG + private const int DefaultSqliteDelay = 1; +#else + private const int DefaultSqliteDelay = 0; +#endif + + public static readonly CVarDef DatabaseEngine = + CVarDef.Create("database.engine", "sqlite", CVar.SERVERONLY); + + public static readonly CVarDef DatabaseSqliteDbPath = + CVarDef.Create("database.sqlite_dbpath", "preferences.db", CVar.SERVERONLY); + + /// + /// Milliseconds to asynchronously delay all SQLite database acquisitions with. + /// + /// + /// Defaults to 1 on DEBUG, 0 on RELEASE. + /// This is intended to help catch .Result deadlock bugs that only happen on postgres + /// (because SQLite is not actually asynchronous normally) + /// + public static readonly CVarDef DatabaseSqliteDelay = + CVarDef.Create("database.sqlite_delay", DefaultSqliteDelay, CVar.SERVERONLY); + + /// + /// Amount of concurrent SQLite database operations. + /// + /// + /// Note that SQLite is not a properly asynchronous database and also has limited read/write concurrency. + /// Increasing this number may allow more concurrent reads, but it probably won't matter much. + /// SQLite operations are normally ran on the thread pool, which may cause thread pool starvation if the concurrency is too high. + /// + public static readonly CVarDef DatabaseSqliteConcurrency = + CVarDef.Create("database.sqlite_concurrency", 3, CVar.SERVERONLY); + + public static readonly CVarDef DatabasePgHost = + CVarDef.Create("database.pg_host", "localhost", CVar.SERVERONLY); + + public static readonly CVarDef DatabasePgPort = + CVarDef.Create("database.pg_port", 5432, CVar.SERVERONLY); + + public static readonly CVarDef DatabasePgDatabase = + CVarDef.Create("database.pg_database", "ss14", CVar.SERVERONLY); + + public static readonly CVarDef DatabasePgUsername = + CVarDef.Create("database.pg_username", "postgres", CVar.SERVERONLY); + + public static readonly CVarDef DatabasePgPassword = + CVarDef.Create("database.pg_password", "", CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// Max amount of concurrent Postgres database operations. + /// + public static readonly CVarDef DatabasePgConcurrency = + CVarDef.Create("database.pg_concurrency", 8, CVar.SERVERONLY); + + /// + /// Milliseconds to asynchronously delay all PostgreSQL database operations with. + /// + /// + /// This is intended for performance testing. It works different from , + /// as the lag is applied after acquiring the database lock. + /// + public static readonly CVarDef DatabasePgFakeLag = + CVarDef.Create("database.pg_fake_lag", 0, CVar.SERVERONLY); + + /// + /// Basically only exists for integration tests to avoid race conditions. + /// + public static readonly CVarDef DatabaseSynchronous = + CVarDef.Create("database.sync", false, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Discord.cs b/Content.Shared/CCVar/CCVars.Discord.cs new file mode 100644 index 00000000000000..a6c4ada7454119 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Discord.cs @@ -0,0 +1,61 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// The role that will get mentioned if a new SOS ahelp comes in. + /// + public static readonly CVarDef DiscordAhelpMention = + CVarDef.Create("discord.on_call_ping", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// URL of the discord webhook to relay unanswered ahelp messages. + /// + public static readonly CVarDef DiscordOnCallWebhook = + CVarDef.Create("discord.on_call_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// URL of the Discord webhook which will relay all ahelp messages. + /// + public static readonly CVarDef DiscordAHelpWebhook = + CVarDef.Create("discord.ahelp_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// The server icon to use in the Discord ahelp embed footer. + /// Valid values are specified at https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure. + /// + public static readonly CVarDef DiscordAHelpFooterIcon = + CVarDef.Create("discord.ahelp_footer_icon", string.Empty, CVar.SERVERONLY); + + /// + /// The avatar to use for the webhook. Should be an URL. + /// + public static readonly CVarDef DiscordAHelpAvatar = + CVarDef.Create("discord.ahelp_avatar", string.Empty, CVar.SERVERONLY); + + /// + /// URL of the Discord webhook which will relay all custom votes. If left empty, disables the webhook. + /// + public static readonly CVarDef DiscordVoteWebhook = + CVarDef.Create("discord.vote_webhook", string.Empty, CVar.SERVERONLY); + + /// + /// URL of the Discord webhook which will relay all votekick votes. If left empty, disables the webhook. + /// + public static readonly CVarDef DiscordVotekickWebhook = + CVarDef.Create("discord.votekick_webhook", string.Empty, CVar.SERVERONLY); + + /// + /// URL of the Discord webhook which will relay round restart messages. + /// + public static readonly CVarDef DiscordRoundUpdateWebhook = + CVarDef.Create("discord.round_update_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); + + /// + /// Role id for the Discord webhook to ping when the round ends. + /// + public static readonly CVarDef DiscordRoundEndRoleWebhook = + CVarDef.Create("discord.round_end_role", string.Empty, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Events.cs b/Content.Shared/CCVar/CCVars.Events.cs new file mode 100644 index 00000000000000..48797b8438cf5f --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Events.cs @@ -0,0 +1,12 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Controls if the game should run station events + /// + public static readonly CVarDef + EventsEnabled = CVarDef.Create("events.enabled", true, CVar.ARCHIVE | CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Explosion.cs b/Content.Shared/CCVar/CCVars.Explosion.cs new file mode 100644 index 00000000000000..51d93456b7e6c7 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Explosion.cs @@ -0,0 +1,108 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// How many tiles the explosion system will process per tick + /// + /// + /// Setting this too high will put a large load on a single tick. Setting this too low will lead to + /// unnaturally "slow" explosions. + /// + public static readonly CVarDef ExplosionTilesPerTick = + CVarDef.Create("explosion.tiles_per_tick", 100, CVar.SERVERONLY); + + /// + /// Upper limit on the size of an explosion before physics-throwing is disabled. + /// + /// + /// Large nukes tend to generate a lot of shrapnel that flies through space. This can functionally cripple + /// the server TPS for a while after an explosion (or even during, if the explosion is processed + /// incrementally. + /// + public static readonly CVarDef ExplosionThrowLimit = + CVarDef.Create("explosion.throw_limit", 400, CVar.SERVERONLY); + + /// + /// If this is true, explosion processing will pause the NodeGroupSystem to pause updating. + /// + /// + /// This only takes effect if an explosion needs more than one tick to process (i.e., covers more than tiles). If this is not enabled, the node-system will rebuild its graph + /// every tick as the explosion shreds the station, causing significant slowdown. + /// + public static readonly CVarDef ExplosionSleepNodeSys = + CVarDef.Create("explosion.node_sleep", true, CVar.SERVERONLY); + + /// + /// Upper limit on the total area that an explosion can affect before the neighbor-finding algorithm just + /// stops. Defaults to a 60-rile radius explosion. + /// + /// + /// Actual area may be larger, as it currently doesn't terminate mid neighbor finding. I.e., area may be that of a ~51 tile radius circle instead. + /// + public static readonly CVarDef ExplosionMaxArea = + CVarDef.Create("explosion.max_area", (int)3.14f * 256 * 256, CVar.SERVERONLY); + + /// + /// Upper limit on the number of neighbor finding steps for the explosion system neighbor-finding algorithm. + /// + /// + /// Effectively places an upper limit on the range that any explosion can have. In the vast majority of + /// instances, will likely be hit before this becomes a limiting factor. + /// + public static readonly CVarDef ExplosionMaxIterations = + CVarDef.Create("explosion.max_iterations", 500, CVar.SERVERONLY); + + /// + /// Max Time in milliseconds to spend processing explosions every tick. + /// + /// + /// This time limiting is not perfectly implemented. Firstly, a significant chunk of processing time happens + /// due to queued entity deletions, which happen outside of the system update code. Secondly, explosion + /// spawning cannot currently be interrupted & resumed, and may lead to exceeding this time limit. + /// + public static readonly CVarDef ExplosionMaxProcessingTime = + CVarDef.Create("explosion.max_tick_time", 7f, CVar.SERVERONLY); + + /// + /// If the explosion is being processed incrementally over several ticks, this variable determines whether + /// updating the grid tiles should be done incrementally at the end of every tick, or only once the explosion has finished processing. + /// + /// + /// The most notable consequence of this change is that explosions will only punch a hole in the station & + /// create a vacumm once they have finished exploding. So airlocks will no longer slam shut as the explosion + /// expands, just suddenly at the end. + /// + public static readonly CVarDef ExplosionIncrementalTileBreaking = + CVarDef.Create("explosion.incremental_tile", false, CVar.SERVERONLY); + + /// + /// This determines for how many seconds an explosion should stay visible once it has finished expanding. + /// + public static readonly CVarDef ExplosionPersistence = + CVarDef.Create("explosion.persistence", 1.0f, CVar.SERVERONLY); + + /// + /// If an explosion covers a larger area than this number, the damaging/processing will always start during + /// the next tick, instead of during the same tick that the explosion was generated in. + /// + /// + /// This value can be used to ensure that for large explosions the area/tile calculation and the explosion + /// processing/damaging occurs in separate ticks. This helps reduce the single-tick lag if both and are large. I.e., instead of + /// a single tick explosion, this cvar allows for a configuration that results in a two-tick explosion, + /// though most of the computational cost is still in the second tick. + /// + public static readonly CVarDef ExplosionSingleTickAreaLimit = + CVarDef.Create("explosion.single_tick_area_limit", 400, CVar.SERVERONLY); + + /// + /// Whether or not explosions are allowed to create tiles that have + /// set to true. + /// + public static readonly CVarDef ExplosionCanCreateVacuum = + CVarDef.Create("explosion.can_create_vacuum", true, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Game.Infolinks.cs b/Content.Shared/CCVar/CCVars.Game.Infolinks.cs new file mode 100644 index 00000000000000..fa8332b497efca --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Game.Infolinks.cs @@ -0,0 +1,54 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Link to Discord server to show in the launcher. + /// + public static readonly CVarDef InfoLinksDiscord = + CVarDef.Create("infolinks.discord", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to website to show in the launcher. + /// + public static readonly CVarDef InfoLinksForum = + CVarDef.Create("infolinks.forum", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to GitHub page to show in the launcher. + /// + public static readonly CVarDef InfoLinksGithub = + CVarDef.Create("infolinks.github", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to website to show in the launcher. + /// + public static readonly CVarDef InfoLinksWebsite = + CVarDef.Create("infolinks.website", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to wiki to show in the launcher. + /// + public static readonly CVarDef InfoLinksWiki = + CVarDef.Create("infolinks.wiki", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to Patreon. Not shown in the launcher currently. + /// + public static readonly CVarDef InfoLinksPatreon = + CVarDef.Create("infolinks.patreon", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to the bug report form. + /// + public static readonly CVarDef InfoLinksBugReport = + CVarDef.Create("infolinks.bug_report", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// Link to site handling ban appeals. Shown in ban disconnect messages. + /// + public static readonly CVarDef InfoLinksAppeal = + CVarDef.Create("infolinks.appeal", "", CVar.SERVER | CVar.REPLICATED); +} diff --git a/Content.Shared/CCVar/CCVars.Game.cs b/Content.Shared/CCVar/CCVars.Game.cs new file mode 100644 index 00000000000000..19092055e39f46 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Game.cs @@ -0,0 +1,336 @@ +using Content.Shared.Roles; +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Disables most functionality in the GameTicker. + /// + public static readonly CVarDef + GameDummyTicker = CVarDef.Create("game.dummyticker", false, CVar.ARCHIVE | CVar.SERVERONLY); + + /// + /// Controls if the lobby is enabled. If it is not, and there are no available jobs, you may get stuck on a black screen. + /// + public static readonly CVarDef + GameLobbyEnabled = CVarDef.Create("game.lobbyenabled", true, CVar.ARCHIVE); + + /// + /// Controls the duration of the lobby timer in seconds. Defaults to 2 minutes and 30 seconds. + /// + public static readonly CVarDef + GameLobbyDuration = CVarDef.Create("game.lobbyduration", 150, CVar.ARCHIVE); + + /// + /// Controls if players can latejoin at all. + /// + public static readonly CVarDef + GameDisallowLateJoins = CVarDef.Create("game.disallowlatejoins", false, CVar.ARCHIVE | CVar.SERVERONLY); + + /// + /// Controls the default game preset. + /// + public static readonly CVarDef + GameLobbyDefaultPreset = CVarDef.Create("game.defaultpreset", "secret", CVar.ARCHIVE); + + /// + /// Controls if the game can force a different preset if the current preset's criteria are not met. + /// + public static readonly CVarDef + GameLobbyFallbackEnabled = CVarDef.Create("game.fallbackenabled", true, CVar.ARCHIVE); + + /// + /// The preset for the game to fall back to if the selected preset could not be used, and fallback is enabled. + /// + public static readonly CVarDef + GameLobbyFallbackPreset = CVarDef.Create("game.fallbackpreset", "Traitor,Extended", CVar.ARCHIVE); + + /// + /// Controls if people can win the game in Suspicion or Deathmatch. + /// + public static readonly CVarDef + GameLobbyEnableWin = CVarDef.Create("game.enablewin", true, CVar.ARCHIVE); + + /// + /// Controls the maximum number of character slots a player is allowed to have. + /// + public static readonly CVarDef + GameMaxCharacterSlots = CVarDef.Create("game.maxcharacterslots", 30, CVar.ARCHIVE | CVar.SERVERONLY); + + /// + /// Controls the game map prototype to load. SS14 stores these prototypes in Prototypes/Maps. + /// + public static readonly CVarDef + GameMap = CVarDef.Create("game.map", string.Empty, CVar.SERVERONLY); + + /// + /// Controls whether to use world persistence or not. + /// + public static readonly CVarDef + UsePersistence = CVarDef.Create("game.usepersistence", false, CVar.ARCHIVE); + + /// + /// If world persistence is used, what map prototype should be initially loaded. + /// If the save file exists, it replaces MapPath but everything else stays the same (station name and such). + /// + public static readonly CVarDef + PersistenceMap = CVarDef.Create("game.persistencemap", "Empty", CVar.ARCHIVE); + + /// + /// Prototype to use for map pool. + /// + public static readonly CVarDef + GameMapPool = CVarDef.Create("game.map_pool", "DefaultMapPool", CVar.SERVERONLY); + + /// + /// The depth of the queue used to calculate which map is next in rotation. + /// This is how long the game "remembers" that some map was put in play. Default is 16 rounds. + /// + public static readonly CVarDef + GameMapMemoryDepth = CVarDef.Create("game.map_memory_depth", 16, CVar.SERVERONLY); + + /// + /// Is map rotation enabled? + /// + public static readonly CVarDef + GameMapRotation = CVarDef.Create("game.map_rotation", true, CVar.SERVERONLY); + + /// + /// If roles should be restricted based on time. + /// + public static readonly CVarDef + GameRoleTimers = CVarDef.Create("game.role_timers", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Override default role requirements using a + /// + public static readonly CVarDef + GameRoleTimerOverride = CVarDef.Create("game.role_timer_override", "", CVar.SERVER | CVar.REPLICATED); + + /// + /// If roles should be restricted based on whether or not they are whitelisted. + /// + public static readonly CVarDef + GameRoleWhitelist = CVarDef.Create("game.role_whitelist", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether or not disconnecting inside of a cryopod should remove the character or just store them until they reconnect. + /// + public static readonly CVarDef + GameCryoSleepRejoining = CVarDef.Create("game.cryo_sleep_rejoining", false, CVar.SERVER | CVar.REPLICATED); + + /// + /// When enabled, guests will be assigned permanent UIDs and will have their preferences stored. + /// + public static readonly CVarDef GamePersistGuests = + CVarDef.Create("game.persistguests", true, CVar.ARCHIVE | CVar.SERVERONLY); + + public static readonly CVarDef GameDiagonalMovement = + CVarDef.Create("game.diagonalmovement", true, CVar.ARCHIVE); + + public static readonly CVarDef SoftMaxPlayers = + CVarDef.Create("game.soft_max_players", 30, CVar.SERVERONLY | CVar.ARCHIVE); + + /// + /// If a player gets denied connection to the server, + /// how long they are forced to wait before attempting to reconnect. + /// + public static readonly CVarDef GameServerFullReconnectDelay = + CVarDef.Create("game.server_full_reconnect_delay", 30, CVar.SERVERONLY); + + /// + /// Whether or not panic bunker is currently enabled. + /// + public static readonly CVarDef PanicBunkerEnabled = + CVarDef.Create("game.panic_bunker.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); + + /// + /// Whether or not the panic bunker will disable when an admin comes online. + /// + public static readonly CVarDef PanicBunkerDisableWithAdmins = + CVarDef.Create("game.panic_bunker.disable_with_admins", false, CVar.SERVERONLY); + + /// + /// Whether or not the panic bunker will enable when no admins are online. + /// + public static readonly CVarDef PanicBunkerEnableWithoutAdmins = + CVarDef.Create("game.panic_bunker.enable_without_admins", false, CVar.SERVERONLY); + + /// + /// Whether or not the panic bunker will count deadminned admins for + /// and + /// + /// + public static readonly CVarDef PanicBunkerCountDeadminnedAdmins = + CVarDef.Create("game.panic_bunker.count_deadminned_admins", false, CVar.SERVERONLY); + + /// + /// Show reason of disconnect for user or not. + /// + public static readonly CVarDef PanicBunkerShowReason = + CVarDef.Create("game.panic_bunker.show_reason", false, CVar.SERVERONLY); + + /// + /// Minimum age of the account (from server's PoV, so from first-seen date) in minutes. + /// + public static readonly CVarDef PanicBunkerMinAccountAge = + CVarDef.Create("game.panic_bunker.min_account_age", 1440, CVar.SERVERONLY); + + /// + /// Minimal overall played time. + /// + public static readonly CVarDef PanicBunkerMinOverallMinutes = + CVarDef.Create("game.panic_bunker.min_overall_minutes", 600, CVar.SERVERONLY); + + /// + /// A custom message that will be used for connections denied to the panic bunker + /// If not empty, then will overwrite + /// + public static readonly CVarDef PanicBunkerCustomReason = + CVarDef.Create("game.panic_bunker.custom_reason", string.Empty, CVar.SERVERONLY); + + /// + /// Allow bypassing the panic bunker if the user is whitelisted. + /// + public static readonly CVarDef BypassBunkerWhitelist = + CVarDef.Create("game.panic_bunker.whitelisted_can_bypass", true, CVar.SERVERONLY); + + /* + * TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future. + */ + + /// + /// Whether the baby jail is currently enabled. + /// + public static readonly CVarDef BabyJailEnabled = + CVarDef.Create("game.baby_jail.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); + + /// + /// Show reason of disconnect for user or not. + /// + public static readonly CVarDef BabyJailShowReason = + CVarDef.Create("game.baby_jail.show_reason", false, CVar.SERVERONLY); + + /// + /// Maximum age of the account (from server's PoV, so from first-seen date) in minutes that can access baby + /// jailed servers. + /// + public static readonly CVarDef BabyJailMaxAccountAge = + CVarDef.Create("game.baby_jail.max_account_age", 1440, CVar.SERVERONLY); + + /// + /// Maximum overall played time allowed to access baby jailed servers. + /// + public static readonly CVarDef BabyJailMaxOverallMinutes = + CVarDef.Create("game.baby_jail.max_overall_minutes", 120, CVar.SERVERONLY); + + /// + /// A custom message that will be used for connections denied due to the baby jail. + /// If not empty, then will overwrite + /// + public static readonly CVarDef BabyJailCustomReason = + CVarDef.Create("game.baby_jail.custom_reason", string.Empty, CVar.SERVERONLY); + + /// + /// Allow bypassing the baby jail if the user is whitelisted. + /// + public static readonly CVarDef BypassBabyJailWhitelist = + CVarDef.Create("game.baby_jail.whitelisted_can_bypass", true, CVar.SERVERONLY); + + /// + /// Make people bonk when trying to climb certain objects like tables. + /// + public static readonly CVarDef GameTableBonk = + CVarDef.Create("game.table_bonk", false, CVar.REPLICATED); + + /// + /// Whether or not status icons are rendered for everyone. + /// + public static readonly CVarDef GlobalStatusIconsEnabled = + CVarDef.Create("game.global_status_icons_enabled", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether or not status icons are rendered on this specific client. + /// + public static readonly CVarDef LocalStatusIconsEnabled = + CVarDef.Create("game.local_status_icons_enabled", true, CVar.CLIENTONLY); + + /// + /// Whether or not coordinates on the Debug overlay should only be available to admins. + /// + public static readonly CVarDef DebugCoordinatesAdminOnly = + CVarDef.Create("game.debug_coordinates_admin_only", true, CVar.SERVER | CVar.REPLICATED); + +#if EXCEPTION_TOLERANCE + /// + /// Amount of times round start must fail before the server is shut down. + /// Set to 0 or a negative number to disable. + /// + public static readonly CVarDef RoundStartFailShutdownCount = + CVarDef.Create("game.round_start_fail_shutdown_count", 5, CVar.SERVERONLY | CVar.SERVER); +#endif + + /// + /// Delay between station alert level changes. + /// + public static readonly CVarDef GameAlertLevelChangeDelay = + CVarDef.Create("game.alert_level_change_delay", 30, CVar.SERVERONLY); + + /// + /// The time in seconds that the server should wait before restarting the round. + /// Defaults to 2 minutes. + /// + public static readonly CVarDef RoundRestartTime = + CVarDef.Create("game.round_restart_time", 120f, CVar.SERVERONLY); + + /// + /// The prototype to use for secret weights. + /// + public static readonly CVarDef SecretWeightPrototype = + CVarDef.Create("game.secret_weight_prototype", "Secret", CVar.SERVERONLY); + + /// + /// The id of the sound collection to randomly choose a sound from and play when the round ends. + /// + public static readonly CVarDef RoundEndSoundCollection = + CVarDef.Create("game.round_end_sound_collection", "RoundEnd", CVar.SERVERONLY); + + /// + /// Whether or not to add every player as a global override to PVS at round end. + /// This will allow all players to see their clothing in the round screen player list screen, + /// but may cause lag during round end with very high player counts. + /// + public static readonly CVarDef RoundEndPVSOverrides = + CVarDef.Create("game.round_end_pvs_overrides", true, CVar.SERVERONLY); + + /// + /// If true, players can place objects onto tabletop games like chess boards. + /// + /// + /// This feature is currently highly abusable and can easily be used to crash the server, + /// so it's off by default. + /// + public static readonly CVarDef GameTabletopPlace = + CVarDef.Create("game.tabletop_place", false, CVar.SERVERONLY); + + /// + /// If true, contraband severity can be viewed in the examine menu + /// + public static readonly CVarDef ContrabandExamine = + CVarDef.Create("game.contraband_examine", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Size of the lookup area for adding entities to the context menu + /// + public static readonly CVarDef GameEntityMenuLookup = + CVarDef.Create("game.entity_menu_lookup", 0.25f, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Should the clients window show the server hostname in the title? + /// + public static readonly CVarDef GameHostnameInTitlebar = + CVarDef.Create("game.hostname_in_titlebar", true, CVar.SERVER | CVar.REPLICATED); + +} diff --git a/Content.Shared/CCVar/CCVars.Ghost.cs b/Content.Shared/CCVar/CCVars.Ghost.cs new file mode 100644 index 00000000000000..39e7a3c4910ae0 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Ghost.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// The time you must spend reading the rules, before the "Request" button is enabled + /// + public static readonly CVarDef GhostRoleTime = + CVarDef.Create("ghost.role_time", 3f, CVar.REPLICATED | CVar.SERVER); + + /// + /// If ghost role lotteries should be made near-instanteous. + /// + public static readonly CVarDef GhostQuickLottery = + CVarDef.Create("ghost.quick_lottery", false, CVar.SERVERONLY); + + /// + /// Whether or not to kill the player's mob on ghosting, when it is in a critical health state. + /// + public static readonly CVarDef GhostKillCrit = + CVarDef.Create("ghost.kill_crit", true, CVar.REPLICATED | CVar.SERVER); +} diff --git a/Content.Shared/CCVar/CCVars.Hud.cs b/Content.Shared/CCVar/CCVars.Hud.cs new file mode 100644 index 00000000000000..f96924b34964d5 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Hud.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef HudTheme = + CVarDef.Create("hud.theme", 0, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef HudHeldItemShow = + CVarDef.Create("hud.held_item_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef CombatModeIndicatorsPointShow = + CVarDef.Create("hud.combat_mode_indicators_point_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef LoocAboveHeadShow = + CVarDef.Create("hud.show_looc_above_head", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef HudHeldItemOffset = + CVarDef.Create("hud.held_item_offset", 28f, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef HudFpsCounterVisible = + CVarDef.Create("hud.fps_counter_visible", false, CVar.CLIENTONLY | CVar.ARCHIVE); +} diff --git a/Content.Shared/CCVar/CCVars.Ic.cs b/Content.Shared/CCVar/CCVars.Ic.cs new file mode 100644 index 00000000000000..e149e9f3e1edd2 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Ic.cs @@ -0,0 +1,48 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Restricts IC character names to alphanumeric chars. + /// + public static readonly CVarDef RestrictedNames = + CVarDef.Create("ic.restricted_names", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Allows flavor text (character descriptions) + /// + public static readonly CVarDef FlavorText = + CVarDef.Create("ic.flavor_text", false, CVar.SERVER | CVar.REPLICATED); + + /// + /// Adds a period at the end of a sentence if the sentence ends in a letter. + /// + public static readonly CVarDef ChatPunctuation = + CVarDef.Create("ic.punctuation", false, CVar.SERVER); + + /// + /// Enables automatically forcing IC name rules. Uppercases the first letter of the first and last words of the name + /// + public static readonly CVarDef ICNameCase = + CVarDef.Create("ic.name_case", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Whether or not players' characters are randomly generated rather than using their selected characters in the creator. + /// + public static readonly CVarDef ICRandomCharacters = + CVarDef.Create("ic.random_characters", false, CVar.SERVER); + + /// + /// A weighted random prototype used to determine the species selected for random characters. + /// + public static readonly CVarDef ICRandomSpeciesWeights = + CVarDef.Create("ic.random_species_weights", "SpeciesWeights", CVar.SERVER); + + /// + /// Control displaying SSD indicators near players + /// + public static readonly CVarDef ICShowSSDIndicator = + CVarDef.Create("ic.show_ssd_indicator", true, CVar.CLIENTONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Interactions.cs b/Content.Shared/CCVar/CCVars.Interactions.cs new file mode 100644 index 00000000000000..c62f81be0ca38f --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Interactions.cs @@ -0,0 +1,54 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Deadzone for drag-drop interactions. + /// + public static readonly CVarDef DragDropDeadZone = + CVarDef.Create("control.drag_dead_zone", 12f, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Toggles whether the walking key is a toggle or a held key. + /// + public static readonly CVarDef ToggleWalk = + CVarDef.Create("control.toggle_walk", false, CVar.CLIENTONLY | CVar.ARCHIVE); + + // The rationale behind the default limit is simply that I can easily get to 7 interactions per second by just + // trying to spam toggle a light switch or lever (though the UseDelay component limits the actual effect of the + // interaction). I don't want to accidentally spam admins with alerts just because somebody is spamming a + // key manually, nor do we want to alert them just because the player is having network issues and the server + // receives multiple interactions at once. But we also want to try catch people with modified clients that spam + // many interactions on the same tick. Hence, a very short period, with a relatively high count. + + /// + /// Maximum number of interactions that a player can perform within seconds + /// + public static readonly CVarDef InteractionRateLimitCount = + CVarDef.Create("interaction.rate_limit_count", 5, CVar.SERVER | CVar.REPLICATED); + + /// + public static readonly CVarDef InteractionRateLimitPeriod = + CVarDef.Create("interaction.rate_limit_period", 0.5f, CVar.SERVER | CVar.REPLICATED); + + /// + /// Minimum delay (in seconds) between notifying admins about interaction rate limit violations. A negative + /// value disables admin announcements. + /// + public static readonly CVarDef InteractionRateLimitAnnounceAdminsDelay = + CVarDef.Create("interaction.rate_limit_announce_admins_delay", 120, CVar.SERVERONLY); + + /// + /// Whether or not the storage UI is static and bound to the hotbar, or unbound and allowed to be dragged anywhere. + /// + public static readonly CVarDef StaticStorageUI = + CVarDef.Create("control.static_storage_ui", true, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Whether or not the storage window uses a transparent or opaque sprite. + /// + public static readonly CVarDef OpaqueStorageWindow = + CVarDef.Create("control.opaque_storage_background", false, CVar.CLIENTONLY | CVar.ARCHIVE); +} diff --git a/Content.Shared/CCVar/CCVars.Interface.cs b/Content.Shared/CCVar/CCVars.Interface.cs new file mode 100644 index 00000000000000..79a28e6b4e6a74 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Interface.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef UIClickSound = + CVarDef.Create("interface.click_sound", "/Audio/UserInterface/click.ogg", CVar.REPLICATED); + + public static readonly CVarDef UIHoverSound = + CVarDef.Create("interface.hover_sound", "/Audio/UserInterface/hover.ogg", CVar.REPLICATED); + + public static readonly CVarDef UILayout = + CVarDef.Create("ui.layout", "Default", CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef DefaultScreenChatSize = + CVarDef.Create("ui.default_chat_size", "", CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef SeparatedScreenChatSize = + CVarDef.Create("ui.separated_chat_size", "0.6,0", CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef OutlineEnabled = + CVarDef.Create("outline.enabled", true, CVar.CLIENTONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Mapping.cs b/Content.Shared/CCVar/CCVars.Mapping.cs new file mode 100644 index 00000000000000..06cd2870ba24ce --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Mapping.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Will mapping mode enable autosaves when it's activated? + /// + public static readonly CVarDef + AutosaveEnabled = CVarDef.Create("mapping.autosave", true, CVar.SERVERONLY); + + /// + /// Autosave interval in seconds. + /// + public static readonly CVarDef + AutosaveInterval = CVarDef.Create("mapping.autosave_interval", 600f, CVar.SERVERONLY); + + /// + /// Directory in server user data to save to. Saves will be inside folders in this directory. + /// + public static readonly CVarDef + AutosaveDirectory = CVarDef.Create("mapping.autosave_dir", "Autosaves", CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Midi.cs b/Content.Shared/CCVar/CCVars.Midi.cs new file mode 100644 index 00000000000000..4ca4bfd6f8647b --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Midi.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef MaxMidiEventsPerSecond = + CVarDef.Create("midi.max_events_per_second", 1000, CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef MaxMidiEventsPerBatch = + CVarDef.Create("midi.max_events_per_batch", 60, CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef MaxMidiBatchesDropped = + CVarDef.Create("midi.max_batches_dropped", 1, CVar.SERVERONLY); + + public static readonly CVarDef MaxMidiLaggedBatches = + CVarDef.Create("midi.max_lagged_batches", 8, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Misc.cs b/Content.Shared/CCVar/CCVars.Misc.cs new file mode 100644 index 00000000000000..3d597c742746a2 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Misc.cs @@ -0,0 +1,97 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef HolidaysEnabled = CVarDef.Create("holidays.enabled", true, CVar.SERVERONLY); + public static readonly CVarDef BrandingSteam = CVarDef.Create("branding.steam", false, CVar.CLIENTONLY); + public static readonly CVarDef EntityMenuGroupingType = CVarDef.Create("entity_menu", 0, CVar.CLIENTONLY); + + /// + /// Should we pre-load all of the procgen atlasses. + /// + public static readonly CVarDef ProcgenPreload = + CVarDef.Create("procgen.preload", true, CVar.SERVERONLY); + + /// + /// Enabled: Cloning has 70% cost and reclaimer will refuse to reclaim corpses with souls. (For LRP). + /// Disabled: Cloning has full biomass cost and reclaimer can reclaim corpses with souls. (Playtested and balanced for MRP+). + /// + public static readonly CVarDef BiomassEasyMode = + CVarDef.Create("biomass.easy_mode", true, CVar.SERVERONLY); + + /// + /// A scale factor applied to a grid's bounds when trying to find a spot to randomly generate an anomaly. + /// + public static readonly CVarDef AnomalyGenerationGridBoundsScale = + CVarDef.Create("anomaly.generation_grid_bounds_scale", 0.6f, CVar.SERVERONLY); + + /// + /// How long a client can go without any input before being considered AFK. + /// + public static readonly CVarDef AfkTime = + CVarDef.Create("afk.time", 60f, CVar.SERVERONLY); + + /// + /// Flavor limit. This is to ensure that having a large mass of flavors in + /// some food object won't spam a user with flavors. + /// + public static readonly CVarDef + FlavorLimit = CVarDef.Create("flavor.limit", 10, CVar.SERVERONLY); + + public static readonly CVarDef DestinationFile = + CVarDef.Create("autogen.destination_file", "", CVar.SERVER | CVar.SERVERONLY); + + /// + /// Whether uploaded files will be stored in the server's database. + /// This is useful to keep "logs" on what files admins have uploaded in the past. + /// + public static readonly CVarDef ResourceUploadingStoreEnabled = + CVarDef.Create("netres.store_enabled", true, CVar.SERVER | CVar.SERVERONLY); + + /// + /// Numbers of days before stored uploaded files are deleted. Set to zero or negative to disable auto-delete. + /// This is useful to free some space automatically. Auto-deletion runs only on server boot. + /// + public static readonly CVarDef ResourceUploadingStoreDeletionDays = + CVarDef.Create("netres.store_deletion_days", 30, CVar.SERVER | CVar.SERVERONLY); + + /// + /// If a server update restart is pending, the delay after the last player leaves before we actually restart. In seconds. + /// + public static readonly CVarDef UpdateRestartDelay = + CVarDef.Create("update.restart_delay", 20f, CVar.SERVERONLY); + + /// + /// If fire alarms should have all access, or if activating/resetting these + /// should be restricted to what is dictated on a player's access card. + /// Defaults to true. + /// + public static readonly CVarDef FireAlarmAllAccess = + CVarDef.Create("firealarm.allaccess", true, CVar.SERVERONLY); + + /// + /// Time between play time autosaves, in seconds. + /// + public static readonly CVarDef + PlayTimeSaveInterval = CVarDef.Create("playtime.save_interval", 900f, CVar.SERVERONLY); + + /// + /// The maximum amount of time the entity GC can process, in ms. + /// + public static readonly CVarDef GCMaximumTimeMs = + CVarDef.Create("entgc.maximum_time_ms", 5, CVar.SERVERONLY); + + public static readonly CVarDef GatewayGeneratorEnabled = + CVarDef.Create("gateway.generator_enabled", true); + + public static readonly CVarDef TippyEntity = + CVarDef.Create("tippy.entity", "Tippy", CVar.SERVER | CVar.REPLICATED); + + /// + /// The number of seconds that must pass for a single entity to be able to point at something again. + /// + public static readonly CVarDef PointingCooldownSeconds = + CVarDef.Create("pointing.cooldown_seconds", 0.5f, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.NPC.cs b/Content.Shared/CCVar/CCVars.NPC.cs new file mode 100644 index 00000000000000..f0d5520195d038 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.NPC.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef NPCMaxUpdates = + CVarDef.Create("npc.max_updates", 128); + + public static readonly CVarDef NPCEnabled = CVarDef.Create("npc.enabled", true); + + /// + /// Should NPCs pathfind when steering. For debug purposes. + /// + public static readonly CVarDef NPCPathfinding = CVarDef.Create("npc.pathfinding", true); +} diff --git a/Content.Shared/CCVar/CCVars.Net.cs b/Content.Shared/CCVar/CCVars.Net.cs new file mode 100644 index 00000000000000..b7465def2ebb32 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Net.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef NetAtmosDebugOverlayTickRate = + CVarDef.Create("net.atmosdbgoverlaytickrate", 3.0f); + + public static readonly CVarDef NetGasOverlayTickRate = + CVarDef.Create("net.gasoverlaytickrate", 3.0f); + + public static readonly CVarDef GasOverlayThresholds = + CVarDef.Create("net.gasoverlaythresholds", 20); +} diff --git a/Content.Shared/CCVar/CCVars.Parallax.cs b/Content.Shared/CCVar/CCVars.Parallax.cs new file mode 100644 index 00000000000000..9b19c8f4943614 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Parallax.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef ParallaxEnabled = + CVarDef.Create("parallax.enabled", true, CVar.CLIENTONLY); + + public static readonly CVarDef ParallaxDebug = + CVarDef.Create("parallax.debug", false, CVar.CLIENTONLY); + + public static readonly CVarDef ParallaxLowQuality = + CVarDef.Create("parallax.low_quality", false, CVar.ARCHIVE | CVar.CLIENTONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Physics.cs b/Content.Shared/CCVar/CCVars.Physics.cs new file mode 100644 index 00000000000000..379676b5df91c3 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Physics.cs @@ -0,0 +1,27 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// When a mob is walking should its X / Y movement be relative to its parent (true) or the map (false). + /// + public static readonly CVarDef RelativeMovement = + CVarDef.Create("physics.relative_movement", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef TileFrictionModifier = + CVarDef.Create("physics.tile_friction", 40.0f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef StopSpeed = + CVarDef.Create("physics.stop_speed", 0.1f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); + + /// + /// Whether mobs can push objects like lockers. + /// + /// + /// Technically client doesn't need to know about it but this may prevent a bug in the distant future so it stays. + /// + public static readonly CVarDef MobPushing = + CVarDef.Create("physics.mob_pushing", false, CVar.REPLICATED | CVar.SERVER); +} diff --git a/Content.Shared/CCVar/CCVars.Radiation.cs b/Content.Shared/CCVar/CCVars.Radiation.cs new file mode 100644 index 00000000000000..dfcce15b2f9374 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Radiation.cs @@ -0,0 +1,32 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// What is the smallest radiation dose in rads that can be received by object. + /// Extremely small values may impact performance. + /// + public static readonly CVarDef RadiationMinIntensity = + CVarDef.Create("radiation.min_intensity", 0.1f, CVar.SERVERONLY); + + /// + /// Rate of radiation system update in seconds. + /// + public static readonly CVarDef RadiationGridcastUpdateRate = + CVarDef.Create("radiation.gridcast.update_rate", 1.0f, CVar.SERVERONLY); + + /// + /// If both radiation source and receiver are placed on same grid, ignore grids between them. + /// May get inaccurate result in some cases, but greatly boost performance in general. + /// + public static readonly CVarDef RadiationGridcastSimplifiedSameGrid = + CVarDef.Create("radiation.gridcast.simplified_same_grid", true, CVar.SERVERONLY); + + /// + /// Max distance that radiation ray can travel in meters. + /// + public static readonly CVarDef RadiationGridcastMaxDistance = + CVarDef.Create("radiation.gridcast.max_distance", 50f, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Replays.cs b/Content.Shared/CCVar/CCVars.Replays.cs new file mode 100644 index 00000000000000..64f47e8ad8c326 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Replays.cs @@ -0,0 +1,43 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Whether or not to record admin chat. If replays are being publicly distributes, this should probably be + /// false. + /// + public static readonly CVarDef ReplayRecordAdminChat = + CVarDef.Create("replay.record_admin_chat", false, CVar.ARCHIVE); + + /// + /// Automatically record full rounds as replays. + /// + public static readonly CVarDef ReplayAutoRecord = + CVarDef.Create("replay.auto_record", false, CVar.SERVERONLY); + + /// + /// The file name to record automatic replays to. The path is relative to . + /// + /// + /// + /// If the path includes slashes, directories will be automatically created if necessary. + /// + /// + /// A number of substitutions can be used to automatically fill in the file name: {year}, {month}, {day}, {hour}, {minute}, {round}. + /// + /// + public static readonly CVarDef ReplayAutoRecordName = + CVarDef.Create("replay.auto_record_name", + "{year}_{month}_{day}-{hour}_{minute}-round_{round}.zip", + CVar.SERVERONLY); + + /// + /// Path that, if provided, automatic replays are initially recorded in. + /// When the recording is done, the file is moved into its final destination. + /// Unless this path is rooted, it will be relative to . + /// + public static readonly CVarDef ReplayAutoRecordTempDir = + CVarDef.Create("replay.auto_record_temp_dir", "", CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Salvage.cs b/Content.Shared/CCVar/CCVars.Salvage.cs new file mode 100644 index 00000000000000..ddc332786ba4d8 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Salvage.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Duration for missions + /// + public static readonly CVarDef + SalvageExpeditionDuration = CVarDef.Create("salvage.expedition_duration", 660f, CVar.REPLICATED); + + /// + /// Cooldown for missions. + /// + public static readonly CVarDef + SalvageExpeditionCooldown = CVarDef.Create("salvage.expedition_cooldown", 780f, CVar.REPLICATED); +} diff --git a/Content.Shared/CCVar/CCVars.Server.cs b/Content.Shared/CCVar/CCVars.Server.cs new file mode 100644 index 00000000000000..2c861584afc9f8 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Server.cs @@ -0,0 +1,43 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /* + * Server + */ + + /// + /// Change this to have the changelog and rules "last seen" date stored separately. + /// + public static readonly CVarDef ServerId = + CVarDef.Create("server.id", "unknown_server_id", CVar.REPLICATED | CVar.SERVER); + + /// + /// Guide Entry Prototype ID to be displayed as the server rules. + /// + public static readonly CVarDef RulesFile = + CVarDef.Create("server.rules_file", "DefaultRuleset", CVar.REPLICATED | CVar.SERVER); + + /// + /// Guide entry that is displayed by default when a guide is opened. + /// + public static readonly CVarDef DefaultGuide = + CVarDef.Create("server.default_guide", "NewPlayer", CVar.REPLICATED | CVar.SERVER); + + /// + /// If greater than 0, automatically restart the server after this many minutes of uptime. + /// + /// + /// + /// This is intended to work around various bugs and performance issues caused by long continuous server uptime. + /// + /// + /// This uses the same non-disruptive logic as update restarts, + /// i.e. the game will only restart at round end or when there is nobody connected. + /// + /// + public static readonly CVarDef ServerUptimeRestartMinutes = + CVarDef.Create("server.uptime_restart_minutes", 0, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Shuttle.cs b/Content.Shared/CCVar/CCVars.Shuttle.cs new file mode 100644 index 00000000000000..f66fe9ca598d04 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Shuttle.cs @@ -0,0 +1,176 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// If true then the camera will match the grid / map and is unchangeable. + /// - When traversing grids it will snap to 0 degrees rotation. + /// False means the player has control over the camera rotation. + /// - When traversing grids it will snap to the nearest cardinal which will generally be imperceptible. + /// + public static readonly CVarDef CameraRotationLocked = + CVarDef.Create("shuttle.camera_rotation_locked", false, CVar.REPLICATED); + + /// + /// Whether the arrivals terminal should be on a planet map. + /// + public static readonly CVarDef ArrivalsPlanet = + CVarDef.Create("shuttle.arrivals_planet", true, CVar.SERVERONLY); + + /// + /// Whether the arrivals shuttle is enabled. + /// + public static readonly CVarDef ArrivalsShuttles = + CVarDef.Create("shuttle.arrivals", true, CVar.SERVERONLY); + + /// + /// The map to use for the arrivals station. + /// + public static readonly CVarDef ArrivalsMap = + CVarDef.Create("shuttle.arrivals_map", "/Maps/Misc/terminal.yml", CVar.SERVERONLY); + + /// + /// Cooldown between arrivals departures. This should be longer than the FTL time or it will double cycle. + /// + public static readonly CVarDef ArrivalsCooldown = + CVarDef.Create("shuttle.arrivals_cooldown", 50f, CVar.SERVERONLY); + + /// + /// Are players allowed to return on the arrivals shuttle. + /// + public static readonly CVarDef ArrivalsReturns = + CVarDef.Create("shuttle.arrivals_returns", false, CVar.SERVERONLY); + + /// + /// Should all players who spawn at arrivals have godmode until they leave the map? + /// + public static readonly CVarDef GodmodeArrivals = + CVarDef.Create("shuttle.godmode_arrivals", false, CVar.SERVERONLY); + + /// + /// If a grid is split then hide any smaller ones under this mass (kg) from the map. + /// This is useful to avoid split grids spamming out labels. + /// + public static readonly CVarDef HideSplitGridsUnder = + CVarDef.Create("shuttle.hide_split_grids_under", 30, CVar.SERVERONLY); + + /// + /// Whether to automatically spawn escape shuttles. + /// + public static readonly CVarDef GridFill = + CVarDef.Create("shuttle.grid_fill", true, CVar.SERVERONLY); + + /// + /// Whether to automatically preloading grids by GridPreloaderSystem + /// + public static readonly CVarDef PreloadGrids = + CVarDef.Create("shuttle.preload_grids", true, CVar.SERVERONLY); + + /// + /// How long the warmup time before FTL start should be. + /// + public static readonly CVarDef FTLStartupTime = + CVarDef.Create("shuttle.startup_time", 5.5f, CVar.SERVERONLY); + + /// + /// How long a shuttle spends in FTL. + /// + public static readonly CVarDef FTLTravelTime = + CVarDef.Create("shuttle.travel_time", 20f, CVar.SERVERONLY); + + /// + /// How long the final stage of FTL before arrival should be. + /// + public static readonly CVarDef FTLArrivalTime = + CVarDef.Create("shuttle.arrival_time", 5f, CVar.SERVERONLY); + + /// + /// How much time needs to pass before a shuttle can FTL again. + /// + public static readonly CVarDef FTLCooldown = + CVarDef.Create("shuttle.cooldown", 10f, CVar.SERVERONLY); + + /// + /// The maximum a grid can have before it becomes unable to FTL. + /// Any value equal to or less than zero will disable this check. + /// + public static readonly CVarDef FTLMassLimit = + CVarDef.Create("shuttle.mass_limit", 300f, CVar.SERVERONLY); + + /// + /// How long to knock down entities for if they aren't buckled when FTL starts and stops. + /// + public static readonly CVarDef HyperspaceKnockdownTime = + CVarDef.Create("shuttle.hyperspace_knockdown_time", 5f, CVar.SERVERONLY); + + /// + /// Is the emergency shuttle allowed to be early launched. + /// + public static readonly CVarDef EmergencyEarlyLaunchAllowed = + CVarDef.Create("shuttle.emergency_early_launch_allowed", false, CVar.SERVERONLY); + + /// + /// How long the emergency shuttle remains docked with the station, in seconds. + /// + public static readonly CVarDef EmergencyShuttleDockTime = + CVarDef.Create("shuttle.emergency_dock_time", 180f, CVar.SERVERONLY); + + /// + /// If the emergency shuttle can't dock at a priority port, the dock time will be multiplied with this value. + /// + public static readonly CVarDef EmergencyShuttleDockTimeMultiplierOtherDock = + CVarDef.Create("shuttle.emergency_dock_time_multiplier_other_dock", 1.6667f, CVar.SERVERONLY); + + /// + /// If the emergency shuttle can't dock at all, the dock time will be multiplied with this value. + /// + public static readonly CVarDef EmergencyShuttleDockTimeMultiplierNoDock = + CVarDef.Create("shuttle.emergency_dock_time_multiplier_no_dock", 2f, CVar.SERVERONLY); + + /// + /// How long after the console is authorized for the shuttle to early launch. + /// + public static readonly CVarDef EmergencyShuttleAuthorizeTime = + CVarDef.Create("shuttle.emergency_authorize_time", 10f, CVar.SERVERONLY); + + /// + /// The minimum time for the emergency shuttle to arrive at centcomm. + /// Actual minimum travel time cannot be less than + /// + public static readonly CVarDef EmergencyShuttleMinTransitTime = + CVarDef.Create("shuttle.emergency_transit_time_min", 60f, CVar.SERVERONLY); + + /// + /// The maximum time for the emergency shuttle to arrive at centcomm. + /// + public static readonly CVarDef EmergencyShuttleMaxTransitTime = + CVarDef.Create("shuttle.emergency_transit_time_max", 180f, CVar.SERVERONLY); + + /// + /// Whether the emergency shuttle is enabled or should the round just end. + /// + public static readonly CVarDef EmergencyShuttleEnabled = + CVarDef.Create("shuttle.emergency", true, CVar.SERVERONLY); + + /// + /// The percentage of time passed from the initial call to when the shuttle can no longer be recalled. + /// ex. a call time of 10min and turning point of 0.5 means the shuttle cannot be recalled after 5 minutes. + /// + public static readonly CVarDef EmergencyRecallTurningPoint = + CVarDef.Create("shuttle.recall_turning_point", 0.5f, CVar.SERVERONLY); + + /// + /// Time in minutes after round start to auto-call the shuttle. Set to zero to disable. + /// + public static readonly CVarDef EmergencyShuttleAutoCallTime = + CVarDef.Create("shuttle.auto_call_time", 90, CVar.SERVERONLY); + + /// + /// Time in minutes after the round was extended (by recalling the shuttle) to call + /// the shuttle again. + /// + public static readonly CVarDef EmergencyShuttleAutoCallExtensionTime = + CVarDef.Create("shuttle.auto_call_extension_time", 45, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Sounds.cs b/Content.Shared/CCVar/CCVars.Sounds.cs new file mode 100644 index 00000000000000..73d9d3852f1f7a --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Sounds.cs @@ -0,0 +1,34 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef LobbyMusicEnabled = + CVarDef.Create("ambience.lobby_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef EventMusicEnabled = + CVarDef.Create("ambience.event_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + /// + /// Round end sound (APC Destroyed) + /// + public static readonly CVarDef RestartSoundsEnabled = + CVarDef.Create("ambience.restart_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + + + public static readonly CVarDef AdminSoundsEnabled = + CVarDef.Create("audio.admin_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); + + public static readonly CVarDef AdminChatSoundPath = + CVarDef.Create("audio.admin_chat_sound_path", + "/Audio/Items/pop.ogg", + CVar.ARCHIVE | CVar.CLIENT | CVar.REPLICATED); + + public static readonly CVarDef AdminChatSoundVolume = + CVarDef.Create("audio.admin_chat_sound_volume", -5f, CVar.ARCHIVE | CVar.CLIENT | CVar.REPLICATED); + + public static readonly CVarDef AHelpSound = + CVarDef.Create("audio.ahelp_sound", "/Audio/Effects/adminhelp.ogg", CVar.ARCHIVE | CVar.CLIENTONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Status.cs b/Content.Shared/CCVar/CCVars.Status.cs new file mode 100644 index 00000000000000..007f678106a234 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Status.cs @@ -0,0 +1,13 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef StatusMoMMIUrl = + CVarDef.Create("status.mommiurl", "", CVar.SERVERONLY); + + public static readonly CVarDef StatusMoMMIPassword = + CVarDef.Create("status.mommipassword", "", CVar.SERVERONLY | CVar.CONFIDENTIAL); + +} diff --git a/Content.Shared/CCVar/CCVars.Tips.cs b/Content.Shared/CCVar/CCVars.Tips.cs new file mode 100644 index 00000000000000..61e6342061f3d5 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Tips.cs @@ -0,0 +1,40 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Whether tips being shown is enabled at all. + /// + public static readonly CVarDef TipsEnabled = + CVarDef.Create("tips.enabled", true); + + /// + /// The dataset prototype to use when selecting a random tip. + /// + public static readonly CVarDef TipsDataset = + CVarDef.Create("tips.dataset", "Tips"); + + /// + /// The number of seconds between each tip being displayed when the round is not actively going + /// (i.e. postround or lobby) + /// + public static readonly CVarDef TipFrequencyOutOfRound = + CVarDef.Create("tips.out_of_game_frequency", 60f * 1.5f); + + /// + /// The number of seconds between each tip being displayed when the round is actively going + /// + public static readonly CVarDef TipFrequencyInRound = + CVarDef.Create("tips.in_game_frequency", 60f * 60); + + public static readonly CVarDef LoginTipsDataset = + CVarDef.Create("tips.login_dataset", "Tips"); + + /// + /// The chance for Tippy to replace a normal tip message. + /// + public static readonly CVarDef TipsTippyChance = + CVarDef.Create("tips.tippy_chance", 0.01f); +} diff --git a/Content.Shared/CCVar/CCVars.Viewport.cs b/Content.Shared/CCVar/CCVars.Viewport.cs new file mode 100644 index 00000000000000..d94394d2a754b9 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Viewport.cs @@ -0,0 +1,33 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + public static readonly CVarDef ViewportStretch = + CVarDef.Create("viewport.stretch", true, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ViewportFixedScaleFactor = + CVarDef.Create("viewport.fixed_scale_factor", 2, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ViewportSnapToleranceMargin = + CVarDef.Create("viewport.snap_tolerance_margin", 64, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ViewportSnapToleranceClip = + CVarDef.Create("viewport.snap_tolerance_clip", 32, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ViewportScaleRender = + CVarDef.Create("viewport.scale_render", true, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ViewportMinimumWidth = + CVarDef.Create("viewport.minimum_width", 15, CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef ViewportMaximumWidth = + CVarDef.Create("viewport.maximum_width", 21, CVar.REPLICATED | CVar.SERVER); + + public static readonly CVarDef ViewportWidth = + CVarDef.Create("viewport.width", 21, CVar.CLIENTONLY | CVar.ARCHIVE); + + public static readonly CVarDef ViewportVerticalFit = + CVarDef.Create("viewport.vertical_fit", true, CVar.CLIENTONLY | CVar.ARCHIVE); +} diff --git a/Content.Shared/CCVar/CCVars.Vote.cs b/Content.Shared/CCVar/CCVars.Vote.cs new file mode 100644 index 00000000000000..ee9fee7d3db2c7 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Vote.cs @@ -0,0 +1,180 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Allows enabling/disabling player-started votes for ultimate authority + /// + public static readonly CVarDef VoteEnabled = + CVarDef.Create("vote.enabled", true, CVar.SERVERONLY); + + /// + /// See vote.enabled, but specific to restart votes + /// + public static readonly CVarDef VoteRestartEnabled = + CVarDef.Create("vote.restart_enabled", true, CVar.SERVERONLY); + + /// + /// Config for when the restart vote should be allowed to be called regardless with less than this amount of players. + /// + public static readonly CVarDef VoteRestartMaxPlayers = + CVarDef.Create("vote.restart_max_players", 20, CVar.SERVERONLY); + + /// + /// Config for when the restart vote should be allowed to be called based on percentage of ghosts. + /// + public static readonly CVarDef VoteRestartGhostPercentage = + CVarDef.Create("vote.restart_ghost_percentage", 55, CVar.SERVERONLY); + + /// + /// See vote.enabled, but specific to preset votes + /// + public static readonly CVarDef VotePresetEnabled = + CVarDef.Create("vote.preset_enabled", true, CVar.SERVERONLY); + + /// + /// See vote.enabled, but specific to map votes + /// + public static readonly CVarDef VoteMapEnabled = + CVarDef.Create("vote.map_enabled", false, CVar.SERVERONLY); + + /// + /// The required ratio of the server that must agree for a restart round vote to go through. + /// + public static readonly CVarDef VoteRestartRequiredRatio = + CVarDef.Create("vote.restart_required_ratio", 0.85f, CVar.SERVERONLY); + + /// + /// Whether or not to prevent the restart vote from having any effect when there is an online admin + /// + public static readonly CVarDef VoteRestartNotAllowedWhenAdminOnline = + CVarDef.Create("vote.restart_not_allowed_when_admin_online", true, CVar.SERVERONLY); + + /// + /// The delay which two votes of the same type are allowed to be made by separate people, in seconds. + /// + public static readonly CVarDef VoteSameTypeTimeout = + CVarDef.Create("vote.same_type_timeout", 240f, CVar.SERVERONLY); + + /// + /// Sets the duration of the map vote timer. + /// + public static readonly CVarDef + VoteTimerMap = CVarDef.Create("vote.timermap", 90, CVar.SERVERONLY); + + /// + /// Sets the duration of the restart vote timer. + /// + public static readonly CVarDef + VoteTimerRestart = CVarDef.Create("vote.timerrestart", 60, CVar.SERVERONLY); + + /// + /// Sets the duration of the gamemode/preset vote timer. + /// + public static readonly CVarDef + VoteTimerPreset = CVarDef.Create("vote.timerpreset", 30, CVar.SERVERONLY); + + /// + /// Sets the duration of the map vote timer when ALONE. + /// + public static readonly CVarDef + VoteTimerAlone = CVarDef.Create("vote.timeralone", 10, CVar.SERVERONLY); + + /// + /// Allows enabling/disabling player-started votekick for ultimate authority + /// + public static readonly CVarDef VotekickEnabled = + CVarDef.Create("votekick.enabled", true, CVar.SERVERONLY); + + /// + /// Config for when the votekick should be allowed to be called based on number of eligible voters. + /// + public static readonly CVarDef VotekickEligibleNumberRequirement = + CVarDef.Create("votekick.eligible_number", 5, CVar.SERVERONLY); + + /// + /// Whether a votekick initiator must be a ghost or not. + /// + public static readonly CVarDef VotekickInitiatorGhostRequirement = + CVarDef.Create("votekick.initiator_ghost_requirement", true, CVar.SERVERONLY); + + /// + /// Should the initiator be whitelisted to initiate a votekick? + /// + public static readonly CVarDef VotekickInitiatorWhitelistedRequirement = + CVarDef.Create("votekick.initiator_whitelist_requirement", true, CVar.SERVERONLY); + + /// + /// Should the initiator be able to start a votekick if they are bellow the votekick.voter_playtime requirement? + /// + public static readonly CVarDef VotekickInitiatorTimeRequirement = + CVarDef.Create("votekick.initiator_time_requirement", false, CVar.SERVERONLY); + + /// + /// Whether a votekick voter must be a ghost or not. + /// + public static readonly CVarDef VotekickVoterGhostRequirement = + CVarDef.Create("votekick.voter_ghost_requirement", true, CVar.SERVERONLY); + + /// + /// Config for how many hours playtime a player must have to be able to vote on a votekick. + /// + public static readonly CVarDef VotekickEligibleVoterPlaytime = + CVarDef.Create("votekick.voter_playtime", 100, CVar.SERVERONLY); + + /// + /// Config for how many seconds a player must have been dead to initiate a votekick / be able to vote on a votekick. + /// + public static readonly CVarDef VotekickEligibleVoterDeathtime = + CVarDef.Create("votekick.voter_deathtime", 30, CVar.REPLICATED | CVar.SERVER); + + /// + /// The required ratio of eligible voters that must agree for a votekick to go through. + /// + public static readonly CVarDef VotekickRequiredRatio = + CVarDef.Create("votekick.required_ratio", 0.6f, CVar.SERVERONLY); + + /// + /// Whether or not to prevent the votekick from having any effect when there is an online admin. + /// + public static readonly CVarDef VotekickNotAllowedWhenAdminOnline = + CVarDef.Create("votekick.not_allowed_when_admin_online", true, CVar.SERVERONLY); + + /// + /// The delay for which two votekicks are allowed to be made by separate people, in seconds. + /// + public static readonly CVarDef VotekickTimeout = + CVarDef.Create("votekick.timeout", 120f, CVar.SERVERONLY); + + /// + /// Sets the duration of the votekick vote timer. + /// + public static readonly CVarDef + VotekickTimer = CVarDef.Create("votekick.timer", 60, CVar.SERVERONLY); + + /// + /// Config for how many hours playtime a player must have to get protection from the Raider votekick type when playing as an antag. + /// + public static readonly CVarDef VotekickAntagRaiderProtection = + CVarDef.Create("votekick.antag_raider_protection", 10, CVar.SERVERONLY); + + /// + /// Default severity for votekick bans + /// + public static readonly CVarDef VotekickBanDefaultSeverity = + CVarDef.Create("votekick.ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Duration of a ban caused by a votekick (in minutes). + /// + public static readonly CVarDef VotekickBanDuration = + CVarDef.Create("votekick.ban_duration", 180, CVar.SERVERONLY); + + /// + /// Whether the ghost requirement settings for votekicks should be ignored for the lobby. + /// + public static readonly CVarDef VotekickIgnoreGhostReqInLobby = + CVarDef.Create("votekick.ignore_ghost_req_in_lobby", true, CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Whitelist.cs b/Content.Shared/CCVar/CCVars.Whitelist.cs new file mode 100644 index 00000000000000..7a7a5206a11b13 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Whitelist.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Controls whether the server will deny any players that are not whitelisted in the DB. + /// + public static readonly CVarDef WhitelistEnabled = + CVarDef.Create("whitelist.enabled", false, CVar.SERVERONLY); + + /// + /// Specifies the whitelist prototypes to be used by the server. This should be a comma-separated list of prototypes. + /// If a whitelists conditions to be active fail (for example player count), the next whitelist will be used instead. If no whitelist is valid, the player will be allowed to connect. + /// + public static readonly CVarDef WhitelistPrototypeList = + CVarDef.Create("whitelist.prototype_list", "basicWhitelist", CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.Worldgen.cs b/Content.Shared/CCVar/CCVars.Worldgen.cs new file mode 100644 index 00000000000000..da165ce74a7d40 --- /dev/null +++ b/Content.Shared/CCVar/CCVars.Worldgen.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared.CCVar; + +public sealed partial class CCVars +{ + /// + /// Whether or not world generation is enabled. + /// + public static readonly CVarDef WorldgenEnabled = + CVarDef.Create("worldgen.enabled", false, CVar.SERVERONLY); + + /// + /// The worldgen config to use. + /// + public static readonly CVarDef WorldgenConfig = + CVarDef.Create("worldgen.worldgen_config", "Default", CVar.SERVERONLY); +} diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 83068b5262bc6c..316d9b8690a887 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1,2388 +1,28 @@ -using Content.Shared.Maps; -using Content.Shared.Roles; using Robust.Shared; using Robust.Shared.Configuration; -using Robust.Shared.Physics.Components; -namespace Content.Shared.CCVar -{ - // ReSharper disable once InconsistentNaming - [CVarDefs] - public sealed class CCVars : CVars - { - /* - * Server - */ - - /// - /// Change this to have the changelog and rules "last seen" date stored separately. - /// - public static readonly CVarDef ServerId = - CVarDef.Create("server.id", "unknown_server_id", CVar.REPLICATED | CVar.SERVER); - - /// - /// Guide Entry Prototype ID to be displayed as the server rules. - /// - public static readonly CVarDef RulesFile = - CVarDef.Create("server.rules_file", "DefaultRuleset", CVar.REPLICATED | CVar.SERVER); - - /// - /// Guide entry that is displayed by default when a guide is opened. - /// - public static readonly CVarDef DefaultGuide = - CVarDef.Create("server.default_guide", "NewPlayer", CVar.REPLICATED | CVar.SERVER); - - /// - /// If greater than 0, automatically restart the server after this many minutes of uptime. - /// - /// - /// - /// This is intended to work around various bugs and performance issues caused by long continuous server uptime. - /// - /// - /// This uses the same non-disruptive logic as update restarts, - /// i.e. the game will only restart at round end or when there is nobody connected. - /// - /// - public static readonly CVarDef ServerUptimeRestartMinutes = - CVarDef.Create("server.uptime_restart_minutes", 0, CVar.SERVERONLY); - - /* - * Ambience - */ - - /// - /// How long we'll wait until re-sampling nearby objects for ambience. Should be pretty fast, but doesn't have to match the tick rate. - /// - public static readonly CVarDef AmbientCooldown = - CVarDef.Create("ambience.cooldown", 0.1f, CVar.ARCHIVE | CVar.CLIENTONLY); - - /// - /// How large of a range to sample for ambience. - /// - public static readonly CVarDef AmbientRange = - CVarDef.Create("ambience.range", 8f, CVar.REPLICATED | CVar.SERVER); - - /// - /// Maximum simultaneous ambient sounds. - /// - public static readonly CVarDef MaxAmbientSources = - CVarDef.Create("ambience.max_sounds", 16, CVar.ARCHIVE | CVar.CLIENTONLY); - - /// - /// The minimum value the user can set for ambience.max_sounds - /// - public static readonly CVarDef MinMaxAmbientSourcesConfigured = - CVarDef.Create("ambience.min_max_sounds_configured", 16, CVar.REPLICATED | CVar.SERVER | CVar.CHEAT); - - /// - /// The maximum value the user can set for ambience.max_sounds - /// - public static readonly CVarDef MaxMaxAmbientSourcesConfigured = - CVarDef.Create("ambience.max_max_sounds_configured", 64, CVar.REPLICATED | CVar.SERVER | CVar.CHEAT); - - /// - /// Ambience volume. - /// - public static readonly CVarDef AmbienceVolume = - CVarDef.Create("ambience.volume", 1.5f, CVar.ARCHIVE | CVar.CLIENTONLY); - - /// - /// Ambience music volume. - /// - public static readonly CVarDef AmbientMusicVolume = - CVarDef.Create("ambience.music_volume", 1.5f, CVar.ARCHIVE | CVar.CLIENTONLY); - - /// - /// Lobby / round end music volume. - /// - public static readonly CVarDef LobbyMusicVolume = - CVarDef.Create("ambience.lobby_music_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); - - /// - /// UI volume. - /// - public static readonly CVarDef InterfaceVolume = - CVarDef.Create("audio.interface_volume", 0.50f, CVar.ARCHIVE | CVar.CLIENTONLY); - - /* - * Status - */ - - public static readonly CVarDef StatusMoMMIUrl = - CVarDef.Create("status.mommiurl", "", CVar.SERVERONLY); - - public static readonly CVarDef StatusMoMMIPassword = - CVarDef.Create("status.mommipassword", "", CVar.SERVERONLY | CVar.CONFIDENTIAL); - - /* - * Events - */ - - /// - /// Controls if the game should run station events - /// - public static readonly CVarDef - EventsEnabled = CVarDef.Create("events.enabled", true, CVar.ARCHIVE | CVar.SERVERONLY); - - /* - * Game - */ - - /// - /// Disables most functionality in the GameTicker. - /// - public static readonly CVarDef - GameDummyTicker = CVarDef.Create("game.dummyticker", false, CVar.ARCHIVE | CVar.SERVERONLY); - - /// - /// Controls if the lobby is enabled. If it is not, and there are no available jobs, you may get stuck on a black screen. - /// - public static readonly CVarDef - GameLobbyEnabled = CVarDef.Create("game.lobbyenabled", true, CVar.ARCHIVE); - - /// - /// Controls the duration of the lobby timer in seconds. Defaults to 2 minutes and 30 seconds. - /// - public static readonly CVarDef - GameLobbyDuration = CVarDef.Create("game.lobbyduration", 150, CVar.ARCHIVE); - - /// - /// Controls if players can latejoin at all. - /// - public static readonly CVarDef - GameDisallowLateJoins = CVarDef.Create("game.disallowlatejoins", false, CVar.ARCHIVE | CVar.SERVERONLY); - - /// - /// Controls the default game preset. - /// - public static readonly CVarDef - GameLobbyDefaultPreset = CVarDef.Create("game.defaultpreset", "secret", CVar.ARCHIVE); - - /// - /// Controls if the game can force a different preset if the current preset's criteria are not met. - /// - public static readonly CVarDef - GameLobbyFallbackEnabled = CVarDef.Create("game.fallbackenabled", true, CVar.ARCHIVE); - - /// - /// The preset for the game to fall back to if the selected preset could not be used, and fallback is enabled. - /// - public static readonly CVarDef - GameLobbyFallbackPreset = CVarDef.Create("game.fallbackpreset", "Traitor,Extended", CVar.ARCHIVE); - - /// - /// Controls if people can win the game in Suspicion or Deathmatch. - /// - public static readonly CVarDef - GameLobbyEnableWin = CVarDef.Create("game.enablewin", true, CVar.ARCHIVE); - - /// - /// Controls the maximum number of character slots a player is allowed to have. - /// - public static readonly CVarDef - GameMaxCharacterSlots = CVarDef.Create("game.maxcharacterslots", 30, CVar.ARCHIVE | CVar.SERVERONLY); - - /// - /// Controls the game map prototype to load. SS14 stores these prototypes in Prototypes/Maps. - /// - public static readonly CVarDef - GameMap = CVarDef.Create("game.map", string.Empty, CVar.SERVERONLY); - - /// - /// Controls whether to use world persistence or not. - /// - public static readonly CVarDef - UsePersistence = CVarDef.Create("game.usepersistence", false, CVar.ARCHIVE); - - /// - /// If world persistence is used, what map prototype should be initially loaded. - /// If the save file exists, it replaces MapPath but everything else stays the same (station name and such). - /// - public static readonly CVarDef - PersistenceMap = CVarDef.Create("game.persistencemap", "Empty", CVar.ARCHIVE); - - /// - /// Prototype to use for map pool. - /// - public static readonly CVarDef - GameMapPool = CVarDef.Create("game.map_pool", "DefaultMapPool", CVar.SERVERONLY); - - /// - /// The depth of the queue used to calculate which map is next in rotation. - /// This is how long the game "remembers" that some map was put in play. Default is 16 rounds. - /// - public static readonly CVarDef - GameMapMemoryDepth = CVarDef.Create("game.map_memory_depth", 16, CVar.SERVERONLY); - - /// - /// Is map rotation enabled? - /// - public static readonly CVarDef - GameMapRotation = CVarDef.Create("game.map_rotation", true, CVar.SERVERONLY); - - /// - /// If roles should be restricted based on time. - /// - public static readonly CVarDef - GameRoleTimers = CVarDef.Create("game.role_timers", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// Override default role requirements using a - /// - public static readonly CVarDef - GameRoleTimerOverride = CVarDef.Create("game.role_timer_override", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// If roles should be restricted based on whether or not they are whitelisted. - /// - public static readonly CVarDef - GameRoleWhitelist = CVarDef.Create("game.role_whitelist", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether or not disconnecting inside of a cryopod should remove the character or just store them until they reconnect. - /// - public static readonly CVarDef - GameCryoSleepRejoining = CVarDef.Create("game.cryo_sleep_rejoining", false, CVar.SERVER | CVar.REPLICATED); - - /// - /// When enabled, guests will be assigned permanent UIDs and will have their preferences stored. - /// - public static readonly CVarDef GamePersistGuests = - CVarDef.Create("game.persistguests", true, CVar.ARCHIVE | CVar.SERVERONLY); - - public static readonly CVarDef GameDiagonalMovement = - CVarDef.Create("game.diagonalmovement", true, CVar.ARCHIVE); - - public static readonly CVarDef SoftMaxPlayers = - CVarDef.Create("game.soft_max_players", 30, CVar.SERVERONLY | CVar.ARCHIVE); - - /// - /// If a player gets denied connection to the server, - /// how long they are forced to wait before attempting to reconnect. - /// - public static readonly CVarDef GameServerFullReconnectDelay = - CVarDef.Create("game.server_full_reconnect_delay", 30, CVar.SERVERONLY); - - /// - /// Whether or not panic bunker is currently enabled. - /// - public static readonly CVarDef PanicBunkerEnabled = - CVarDef.Create("game.panic_bunker.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); - - /// - /// Whether or not the panic bunker will disable when an admin comes online. - /// - public static readonly CVarDef PanicBunkerDisableWithAdmins = - CVarDef.Create("game.panic_bunker.disable_with_admins", false, CVar.SERVERONLY); - - /// - /// Whether or not the panic bunker will enable when no admins are online. - /// - public static readonly CVarDef PanicBunkerEnableWithoutAdmins = - CVarDef.Create("game.panic_bunker.enable_without_admins", false, CVar.SERVERONLY); - - /// - /// Whether or not the panic bunker will count deadminned admins for - /// and - /// - /// - public static readonly CVarDef PanicBunkerCountDeadminnedAdmins = - CVarDef.Create("game.panic_bunker.count_deadminned_admins", false, CVar.SERVERONLY); - - /// - /// Show reason of disconnect for user or not. - /// - public static readonly CVarDef PanicBunkerShowReason = - CVarDef.Create("game.panic_bunker.show_reason", false, CVar.SERVERONLY); - - /// - /// Minimum age of the account (from server's PoV, so from first-seen date) in minutes. - /// - public static readonly CVarDef PanicBunkerMinAccountAge = - CVarDef.Create("game.panic_bunker.min_account_age", 1440, CVar.SERVERONLY); - - /// - /// Minimal overall played time. - /// - public static readonly CVarDef PanicBunkerMinOverallMinutes = - CVarDef.Create("game.panic_bunker.min_overall_minutes", 600, CVar.SERVERONLY); - - /// - /// A custom message that will be used for connections denied to the panic bunker - /// If not empty, then will overwrite - /// - public static readonly CVarDef PanicBunkerCustomReason = - CVarDef.Create("game.panic_bunker.custom_reason", string.Empty, CVar.SERVERONLY); - - /// - /// Allow bypassing the panic bunker if the user is whitelisted. - /// - public static readonly CVarDef BypassBunkerWhitelist = - CVarDef.Create("game.panic_bunker.whitelisted_can_bypass", true, CVar.SERVERONLY); - - /* - * TODO: Remove baby jail code once a more mature gateway process is established. This code is only being issued as a stopgap to help with potential tiding in the immediate future. - */ - - /// - /// Whether the baby jail is currently enabled. - /// - public static readonly CVarDef BabyJailEnabled = - CVarDef.Create("game.baby_jail.enabled", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); - - /// - /// Show reason of disconnect for user or not. - /// - public static readonly CVarDef BabyJailShowReason = - CVarDef.Create("game.baby_jail.show_reason", false, CVar.SERVERONLY); - - /// - /// Maximum age of the account (from server's PoV, so from first-seen date) in minutes that can access baby - /// jailed servers. - /// - public static readonly CVarDef BabyJailMaxAccountAge = - CVarDef.Create("game.baby_jail.max_account_age", 1440, CVar.SERVERONLY); - - /// - /// Maximum overall played time allowed to access baby jailed servers. - /// - public static readonly CVarDef BabyJailMaxOverallMinutes = - CVarDef.Create("game.baby_jail.max_overall_minutes", 120, CVar.SERVERONLY); - - /// - /// A custom message that will be used for connections denied due to the baby jail. - /// If not empty, then will overwrite - /// - public static readonly CVarDef BabyJailCustomReason = - CVarDef.Create("game.baby_jail.custom_reason", string.Empty, CVar.SERVERONLY); - - /// - /// Allow bypassing the baby jail if the user is whitelisted. - /// - public static readonly CVarDef BypassBabyJailWhitelist = - CVarDef.Create("game.baby_jail.whitelisted_can_bypass", true, CVar.SERVERONLY); - - /// - /// Make people bonk when trying to climb certain objects like tables. - /// - public static readonly CVarDef GameTableBonk = - CVarDef.Create("game.table_bonk", false, CVar.REPLICATED); - - /// - /// Whether or not status icons are rendered for everyone. - /// - public static readonly CVarDef GlobalStatusIconsEnabled = - CVarDef.Create("game.global_status_icons_enabled", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether or not status icons are rendered on this specific client. - /// - public static readonly CVarDef LocalStatusIconsEnabled = - CVarDef.Create("game.local_status_icons_enabled", true, CVar.CLIENTONLY); - - /// - /// Whether or not coordinates on the Debug overlay should only be available to admins. - /// - public static readonly CVarDef DebugCoordinatesAdminOnly = - CVarDef.Create("game.debug_coordinates_admin_only", true, CVar.SERVER | CVar.REPLICATED); - -#if EXCEPTION_TOLERANCE - /// - /// Amount of times round start must fail before the server is shut down. - /// Set to 0 or a negative number to disable. - /// - public static readonly CVarDef RoundStartFailShutdownCount = - CVarDef.Create("game.round_start_fail_shutdown_count", 5, CVar.SERVERONLY | CVar.SERVER); -#endif - - /// - /// Delay between station alert level changes. - /// - public static readonly CVarDef GameAlertLevelChangeDelay = - CVarDef.Create("game.alert_level_change_delay", 30, CVar.SERVERONLY); - - /// - /// The time in seconds that the server should wait before restarting the round. - /// Defaults to 2 minutes. - /// - public static readonly CVarDef RoundRestartTime = - CVarDef.Create("game.round_restart_time", 120f, CVar.SERVERONLY); - - /// - /// The prototype to use for secret weights. - /// - public static readonly CVarDef SecretWeightPrototype = - CVarDef.Create("game.secret_weight_prototype", "Secret", CVar.SERVERONLY); - - /// - /// The id of the sound collection to randomly choose a sound from and play when the round ends. - /// - public static readonly CVarDef RoundEndSoundCollection = - CVarDef.Create("game.round_end_sound_collection", "RoundEnd", CVar.SERVERONLY); - - /// - /// Whether or not to add every player as a global override to PVS at round end. - /// This will allow all players to see their clothing in the round screen player list screen, - /// but may cause lag during round end with very high player counts. - /// - public static readonly CVarDef RoundEndPVSOverrides = - CVarDef.Create("game.round_end_pvs_overrides", true, CVar.SERVERONLY); - - /// - /// If true, players can place objects onto tabletop games like chess boards. - /// - /// - /// This feature is currently highly abusable and can easily be used to crash the server, - /// so it's off by default. - /// - public static readonly CVarDef GameTabletopPlace = - CVarDef.Create("game.tabletop_place", false, CVar.SERVERONLY); - - /// - /// If true, contraband severity can be viewed in the examine menu - /// - public static readonly CVarDef ContrabandExamine = - CVarDef.Create("game.contraband_examine", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// Size of the lookup area for adding entities to the context menu - /// - public static readonly CVarDef GameEntityMenuLookup = - CVarDef.Create("game.entity_menu_lookup", 0.25f, CVar.CLIENTONLY | CVar.ARCHIVE); - - /// - /// Should the clients window show the server hostname in the title? - /// - public static readonly CVarDef GameHostnameInTitlebar = - CVarDef.Create("game.hostname_in_titlebar", true, CVar.SERVER | CVar.REPLICATED); - - /* - * Discord - */ - - /// - /// The role that will get mentioned if a new SOS ahelp comes in. - /// - public static readonly CVarDef DiscordAhelpMention = - CVarDef.Create("discord.on_call_ping", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); - - /// - /// URL of the discord webhook to relay unanswered ahelp messages. - /// - public static readonly CVarDef DiscordOnCallWebhook = - CVarDef.Create("discord.on_call_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); - - /// - /// URL of the Discord webhook which will relay all ahelp messages. - /// - public static readonly CVarDef DiscordAHelpWebhook = - CVarDef.Create("discord.ahelp_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); - - /// - /// The server icon to use in the Discord ahelp embed footer. - /// Valid values are specified at https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure. - /// - public static readonly CVarDef DiscordAHelpFooterIcon = - CVarDef.Create("discord.ahelp_footer_icon", string.Empty, CVar.SERVERONLY); - - /// - /// The avatar to use for the webhook. Should be an URL. - /// - public static readonly CVarDef DiscordAHelpAvatar = - CVarDef.Create("discord.ahelp_avatar", string.Empty, CVar.SERVERONLY); - - /// - /// URL of the Discord webhook which will relay all custom votes. If left empty, disables the webhook. - /// - public static readonly CVarDef DiscordVoteWebhook = - CVarDef.Create("discord.vote_webhook", string.Empty, CVar.SERVERONLY); - - /// - /// URL of the Discord webhook which will relay all votekick votes. If left empty, disables the webhook. - /// - public static readonly CVarDef DiscordVotekickWebhook = - CVarDef.Create("discord.votekick_webhook", string.Empty, CVar.SERVERONLY); - - /// URL of the Discord webhook which will relay round restart messages. - /// - public static readonly CVarDef DiscordRoundUpdateWebhook = - CVarDef.Create("discord.round_update_webhook", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); - - /// - /// Role id for the Discord webhook to ping when the round ends. - /// - public static readonly CVarDef DiscordRoundEndRoleWebhook = - CVarDef.Create("discord.round_end_role", string.Empty, CVar.SERVERONLY); - - /* - * Tips - */ - - /// - /// Whether tips being shown is enabled at all. - /// - public static readonly CVarDef TipsEnabled = - CVarDef.Create("tips.enabled", true); - - /// - /// The dataset prototype to use when selecting a random tip. - /// - public static readonly CVarDef TipsDataset = - CVarDef.Create("tips.dataset", "Tips"); - - /// - /// The number of seconds between each tip being displayed when the round is not actively going - /// (i.e. postround or lobby) - /// - public static readonly CVarDef TipFrequencyOutOfRound = - CVarDef.Create("tips.out_of_game_frequency", 60f * 1.5f); - - /// - /// The number of seconds between each tip being displayed when the round is actively going - /// - public static readonly CVarDef TipFrequencyInRound = - CVarDef.Create("tips.in_game_frequency", 60f * 60); - - public static readonly CVarDef LoginTipsDataset = - CVarDef.Create("tips.login_dataset", "Tips"); - - /// - /// The chance for Tippy to replace a normal tip message. - /// - public static readonly CVarDef TipsTippyChance = - CVarDef.Create("tips.tippy_chance", 0.01f); - - /* - * Console - */ - - public static readonly CVarDef ConsoleLoginLocal = - CVarDef.Create("console.loginlocal", true, CVar.ARCHIVE | CVar.SERVERONLY); - - /// - /// Automatically log in the given user as host, equivalent to the promotehost command. - /// - public static readonly CVarDef ConsoleLoginHostUser = - CVarDef.Create("console.login_host_user", "", CVar.ARCHIVE | CVar.SERVERONLY); - - - /* - * Database stuff - */ - - public static readonly CVarDef DatabaseEngine = - CVarDef.Create("database.engine", "sqlite", CVar.SERVERONLY); - - public static readonly CVarDef DatabaseSqliteDbPath = - CVarDef.Create("database.sqlite_dbpath", "preferences.db", CVar.SERVERONLY); - - /// - /// Milliseconds to asynchronously delay all SQLite database acquisitions with. - /// - /// - /// Defaults to 1 on DEBUG, 0 on RELEASE. - /// This is intended to help catch .Result deadlock bugs that only happen on postgres - /// (because SQLite is not actually asynchronous normally) - /// - public static readonly CVarDef DatabaseSqliteDelay = - CVarDef.Create("database.sqlite_delay", DefaultSqliteDelay, CVar.SERVERONLY); - - /// - /// Amount of concurrent SQLite database operations. - /// - /// - /// Note that SQLite is not a properly asynchronous database and also has limited read/write concurrency. - /// Increasing this number may allow more concurrent reads, but it probably won't matter much. - /// SQLite operations are normally ran on the thread pool, which may cause thread pool starvation if the concurrency is too high. - /// - public static readonly CVarDef DatabaseSqliteConcurrency = - CVarDef.Create("database.sqlite_concurrency", 3, CVar.SERVERONLY); - -#if DEBUG - private const int DefaultSqliteDelay = 1; -#else - private const int DefaultSqliteDelay = 0; -#endif - - - public static readonly CVarDef DatabasePgHost = - CVarDef.Create("database.pg_host", "localhost", CVar.SERVERONLY); - - public static readonly CVarDef DatabasePgPort = - CVarDef.Create("database.pg_port", 5432, CVar.SERVERONLY); - - public static readonly CVarDef DatabasePgDatabase = - CVarDef.Create("database.pg_database", "ss14", CVar.SERVERONLY); - - public static readonly CVarDef DatabasePgUsername = - CVarDef.Create("database.pg_username", "postgres", CVar.SERVERONLY); - - public static readonly CVarDef DatabasePgPassword = - CVarDef.Create("database.pg_password", "", CVar.SERVERONLY | CVar.CONFIDENTIAL); - - /// - /// Max amount of concurrent Postgres database operations. - /// - public static readonly CVarDef DatabasePgConcurrency = - CVarDef.Create("database.pg_concurrency", 8, CVar.SERVERONLY); - - /// - /// Milliseconds to asynchronously delay all PostgreSQL database operations with. - /// - /// - /// This is intended for performance testing. It works different from , - /// as the lag is applied after acquiring the database lock. - /// - public static readonly CVarDef DatabasePgFakeLag = - CVarDef.Create("database.pg_fake_lag", 0, CVar.SERVERONLY); - - // Basically only exists for integration tests to avoid race conditions. - public static readonly CVarDef DatabaseSynchronous = - CVarDef.Create("database.sync", false, CVar.SERVERONLY); - - /* - * Interface - */ - - public static readonly CVarDef UIClickSound = - CVarDef.Create("interface.click_sound", "/Audio/UserInterface/click.ogg", CVar.REPLICATED); - - public static readonly CVarDef UIHoverSound = - CVarDef.Create("interface.hover_sound", "/Audio/UserInterface/hover.ogg", CVar.REPLICATED); - - /* - * Outline - */ - - public static readonly CVarDef OutlineEnabled = - CVarDef.Create("outline.enabled", true, CVar.CLIENTONLY); - - - /* - * Parallax - */ - - public static readonly CVarDef ParallaxEnabled = - CVarDef.Create("parallax.enabled", true, CVar.CLIENTONLY); - - public static readonly CVarDef ParallaxDebug = - CVarDef.Create("parallax.debug", false, CVar.CLIENTONLY); - - public static readonly CVarDef ParallaxLowQuality = - CVarDef.Create("parallax.low_quality", false, CVar.ARCHIVE | CVar.CLIENTONLY); - - /* - * Physics - */ - - /// - /// When a mob is walking should its X / Y movement be relative to its parent (true) or the map (false). - /// - public static readonly CVarDef RelativeMovement = - CVarDef.Create("physics.relative_movement", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef TileFrictionModifier = - CVarDef.Create("physics.tile_friction", 40.0f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef StopSpeed = - CVarDef.Create("physics.stop_speed", 0.1f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - /// - /// Whether mobs can push objects like lockers. - /// - /// - /// Technically client doesn't need to know about it but this may prevent a bug in the distant future so it stays. - /// - public static readonly CVarDef MobPushing = - CVarDef.Create("physics.mob_pushing", false, CVar.REPLICATED | CVar.SERVER); - - /* - * Music - */ - - public static readonly CVarDef LobbyMusicEnabled = - CVarDef.Create("ambience.lobby_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); - - public static readonly CVarDef EventMusicEnabled = - CVarDef.Create("ambience.event_music_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); - - /* - * Specific Sounds - */ - // Round end sound (APC Destroyed) - public static readonly CVarDef RestartSoundsEnabled = - CVarDef.Create("ambience.restart_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); - - - /* - * Admin sounds - */ - - public static readonly CVarDef AdminSoundsEnabled = - CVarDef.Create("audio.admin_sounds_enabled", true, CVar.ARCHIVE | CVar.CLIENTONLY); - public static readonly CVarDef AdminChatSoundPath = - CVarDef.Create("audio.admin_chat_sound_path", "/Audio/Items/pop.ogg", CVar.ARCHIVE | CVar.CLIENT | CVar.REPLICATED); - public static readonly CVarDef AdminChatSoundVolume = - CVarDef.Create("audio.admin_chat_sound_volume", -5f, CVar.ARCHIVE | CVar.CLIENT | CVar.REPLICATED); - public static readonly CVarDef AHelpSound = - CVarDef.Create("audio.ahelp_sound", "/Audio/Effects/adminhelp.ogg", CVar.ARCHIVE | CVar.CLIENTONLY); - - /* - * HUD - */ - - public static readonly CVarDef HudTheme = - CVarDef.Create("hud.theme", 0, CVar.ARCHIVE | CVar.CLIENTONLY); - - public static readonly CVarDef HudHeldItemShow = - CVarDef.Create("hud.held_item_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); - - public static readonly CVarDef CombatModeIndicatorsPointShow = - CVarDef.Create("hud.combat_mode_indicators_point_show", true, CVar.ARCHIVE | CVar.CLIENTONLY); - - public static readonly CVarDef LoocAboveHeadShow = - CVarDef.Create("hud.show_looc_above_head", true, CVar.ARCHIVE | CVar.CLIENTONLY); - - public static readonly CVarDef HudHeldItemOffset = - CVarDef.Create("hud.held_item_offset", 28f, CVar.ARCHIVE | CVar.CLIENTONLY); - - public static readonly CVarDef HudFpsCounterVisible = - CVarDef.Create("hud.fps_counter_visible", false, CVar.CLIENTONLY | CVar.ARCHIVE); - - /* - * NPCs - */ - - public static readonly CVarDef NPCMaxUpdates = - CVarDef.Create("npc.max_updates", 128); - - public static readonly CVarDef NPCEnabled = CVarDef.Create("npc.enabled", true); - - /// - /// Should NPCs pathfind when steering. For debug purposes. - /// - public static readonly CVarDef NPCPathfinding = CVarDef.Create("npc.pathfinding", true); - - /* - * Net - */ - - public static readonly CVarDef NetAtmosDebugOverlayTickRate = - CVarDef.Create("net.atmosdbgoverlaytickrate", 3.0f); - - public static readonly CVarDef NetGasOverlayTickRate = - CVarDef.Create("net.gasoverlaytickrate", 3.0f); - - public static readonly CVarDef GasOverlayThresholds = - CVarDef.Create("net.gasoverlaythresholds", 20); - - /* - * Admin - */ - - public static readonly CVarDef AdminAnnounceLogin = - CVarDef.Create("admin.announce_login", true, CVar.SERVERONLY); - - public static readonly CVarDef AdminAnnounceLogout = - CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY); - - /// - /// The token used to authenticate with the admin API. Leave empty to disable the admin API. This is a secret! Do not share! - /// - public static readonly CVarDef AdminApiToken = - CVarDef.Create("admin.api_token", string.Empty, CVar.SERVERONLY | CVar.CONFIDENTIAL); - - - /// - /// Should users be able to see their own notes? Admins will be able to see and set notes regardless - /// - public static readonly CVarDef SeeOwnNotes = - CVarDef.Create("admin.see_own_notes", false, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - /// - /// Should the server play a quick sound to the active admins whenever a new player joins? - /// - public static readonly CVarDef AdminNewPlayerJoinSound = - CVarDef.Create("admin.new_player_join_sound", false, CVar.SERVERONLY); - - /// - /// The amount of days before the note starts fading. It will slowly lose opacity until it reaches stale. Set to 0 to disable. - /// - public static readonly CVarDef NoteFreshDays = - CVarDef.Create("admin.note_fresh_days", 91.31055, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - /// - /// The amount of days before the note completely fades, and can only be seen by admins if they press "see more notes". Set to 0 - /// if you want the note to immediately disappear without fading. - /// - public static readonly CVarDef NoteStaleDays = - CVarDef.Create("admin.note_stale_days", 365.2422, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - /// - /// How much time does the user have to wait in seconds before confirming that they saw an admin message? - /// - public static readonly CVarDef MessageWaitTime = - CVarDef.Create("admin.message_wait_time", 3f, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - /// - /// Default severity for role bans - /// - public static readonly CVarDef RoleBanDefaultSeverity = - CVarDef.Create("admin.role_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Default severity for department bans - /// - public static readonly CVarDef DepartmentBanDefaultSeverity = - CVarDef.Create("admin.department_ban_default_severity", "medium", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Default severity for server bans - /// - public static readonly CVarDef ServerBanDefaultSeverity = - CVarDef.Create("admin.server_ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether a server ban will ban the player's ip by default. - /// - public static readonly CVarDef ServerBanIpBanDefault = - CVarDef.Create("admin.server_ban_ip_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether a server ban will ban the player's hardware id by default. - /// - public static readonly CVarDef ServerBanHwidBanDefault = - CVarDef.Create("admin.server_ban_hwid_ban_default", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether to use details from last connection for ip/hwid in the BanPanel. - /// - public static readonly CVarDef ServerBanUseLastDetails = - CVarDef.Create("admin.server_ban_use_last_details", true, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether to erase a player's chat messages and their entity from the game when banned. - /// - public static readonly CVarDef ServerBanErasePlayer = - CVarDef.Create("admin.server_ban_erase_player", false, CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Minimum players sharing a connection required to create an alert. -1 to disable the alert. - /// - /// - /// If you set this to 0 or 1 then it will alert on every connection, so probably don't do that. - /// - public static readonly CVarDef AdminAlertMinPlayersSharingConnection = - CVarDef.Create("admin.alert.min_players_sharing_connection", -1, CVar.SERVERONLY); - - /// - /// Minimum explosion intensity to create an admin alert message. -1 to disable the alert. - /// - public static readonly CVarDef AdminAlertExplosionMinIntensity = - CVarDef.Create("admin.alert.explosion_min_intensity", 60, CVar.SERVERONLY); - - /// - /// Minimum particle accelerator strength to create an admin alert message. - /// - public static readonly CVarDef AdminAlertParticleAcceleratorMinPowerState = - CVarDef.Create("admin.alert.particle_accelerator_min_power_state", 5, CVar.SERVERONLY); // strength 4 - - /// - /// Should the ban details in admin channel include PII? (IP, HWID, etc) - /// - public static readonly CVarDef AdminShowPIIOnBan = - CVarDef.Create("admin.show_pii_onban", false, CVar.SERVERONLY); - - /// - /// If an admin joins a round by reading up or using the late join button, automatically - /// de-admin them. - /// - public static readonly CVarDef AdminDeadminOnJoin = - CVarDef.Create("admin.deadmin_on_join", false, CVar.SERVERONLY); - - /// - /// Overrides the name the client sees in ahelps. Set empty to disable. - /// - public static readonly CVarDef AdminAhelpOverrideClientName = - CVarDef.Create("admin.override_adminname_in_client_ahelp", string.Empty, CVar.SERVERONLY); - - /// - /// The threshold of minutes to appear as a "new player" in the ahelp menu - /// If 0, appearing as a new player is disabled. - /// - public static readonly CVarDef NewPlayerThreshold = - CVarDef.Create("admin.new_player_threshold", 0, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - /// - /// How long an admin client can go without any input before being considered AFK. - /// - public static readonly CVarDef AdminAfkTime = - CVarDef.Create("admin.afk_time", 600f, CVar.SERVERONLY); - - /// - /// If true, admins are able to connect even if - /// would otherwise block regular players. - /// - public static readonly CVarDef AdminBypassMaxPlayers = - CVarDef.Create("admin.bypass_max_players", true, CVar.SERVERONLY); - - /// - /// Determine if custom rank names are used. - /// If it is false, it'd use the actual rank name regardless of the individual's title. - /// - /// - /// - public static readonly CVarDef AdminUseCustomNamesAdminRank = - CVarDef.Create("admin.use_custom_names_admin_rank", true, CVar.SERVERONLY); - - /* - * AHELP - */ - - /// - /// Ahelp rate limit values are accounted in periods of this size (seconds). - /// After the period has passed, the count resets. - /// - /// - public static readonly CVarDef AhelpRateLimitPeriod = - CVarDef.Create("ahelp.rate_limit_period", 2f, CVar.SERVERONLY); - - /// - /// How many ahelp messages are allowed in a single rate limit period. - /// - /// - public static readonly CVarDef AhelpRateLimitCount = - CVarDef.Create("ahelp.rate_limit_count", 10, CVar.SERVERONLY); - - /// - /// Should the administrator's position be displayed in ahelp. - /// If it is is false, only the admin's ckey will be displayed in the ahelp. - /// - /// - /// - public static readonly CVarDef AhelpAdminPrefix = - CVarDef.Create("ahelp.admin_prefix", false, CVar.SERVERONLY); - - /// - /// Should the administrator's position be displayed in the webhook. - /// If it is is false, only the admin's ckey will be displayed in webhook. - /// - /// - /// - public static readonly CVarDef AhelpAdminPrefixWebhook = - CVarDef.Create("ahelp.admin_prefix_webhook", false, CVar.SERVERONLY); - - /* - * Explosions - */ - - /// - /// How many tiles the explosion system will process per tick - /// - /// - /// Setting this too high will put a large load on a single tick. Setting this too low will lead to - /// unnaturally "slow" explosions. - /// - public static readonly CVarDef ExplosionTilesPerTick = - CVarDef.Create("explosion.tiles_per_tick", 100, CVar.SERVERONLY); - - /// - /// Upper limit on the size of an explosion before physics-throwing is disabled. - /// - /// - /// Large nukes tend to generate a lot of shrapnel that flies through space. This can functionally cripple - /// the server TPS for a while after an explosion (or even during, if the explosion is processed - /// incrementally. - /// - public static readonly CVarDef ExplosionThrowLimit = - CVarDef.Create("explosion.throw_limit", 400, CVar.SERVERONLY); - - /// - /// If this is true, explosion processing will pause the NodeGroupSystem to pause updating. - /// - /// - /// This only takes effect if an explosion needs more than one tick to process (i.e., covers more than tiles). If this is not enabled, the node-system will rebuild its graph - /// every tick as the explosion shreds the station, causing significant slowdown. - /// - public static readonly CVarDef ExplosionSleepNodeSys = - CVarDef.Create("explosion.node_sleep", true, CVar.SERVERONLY); - - /// - /// Upper limit on the total area that an explosion can affect before the neighbor-finding algorithm just - /// stops. Defaults to a 60-rile radius explosion. - /// - /// - /// Actual area may be larger, as it currently doesn't terminate mid neighbor finding. I.e., area may be that of a ~51 tile radius circle instead. - /// - public static readonly CVarDef ExplosionMaxArea = - CVarDef.Create("explosion.max_area", (int) 3.14f * 256 * 256, CVar.SERVERONLY); - - /// - /// Upper limit on the number of neighbor finding steps for the explosion system neighbor-finding algorithm. - /// - /// - /// Effectively places an upper limit on the range that any explosion can have. In the vast majority of - /// instances, will likely be hit before this becomes a limiting factor. - /// - public static readonly CVarDef ExplosionMaxIterations = - CVarDef.Create("explosion.max_iterations", 500, CVar.SERVERONLY); - - /// - /// Max Time in milliseconds to spend processing explosions every tick. - /// - /// - /// This time limiting is not perfectly implemented. Firstly, a significant chunk of processing time happens - /// due to queued entity deletions, which happen outside of the system update code. Secondly, explosion - /// spawning cannot currently be interrupted & resumed, and may lead to exceeding this time limit. - /// - public static readonly CVarDef ExplosionMaxProcessingTime = - CVarDef.Create("explosion.max_tick_time", 7f, CVar.SERVERONLY); - - /// - /// If the explosion is being processed incrementally over several ticks, this variable determines whether - /// updating the grid tiles should be done incrementally at the end of every tick, or only once the explosion has finished processing. - /// - /// - /// The most notable consequence of this change is that explosions will only punch a hole in the station & - /// create a vacumm once they have finished exploding. So airlocks will no longer slam shut as the explosion - /// expands, just suddenly at the end. - /// - public static readonly CVarDef ExplosionIncrementalTileBreaking = - CVarDef.Create("explosion.incremental_tile", false, CVar.SERVERONLY); - - /// - /// This determines for how many seconds an explosion should stay visible once it has finished expanding. - /// - public static readonly CVarDef ExplosionPersistence = - CVarDef.Create("explosion.persistence", 1.0f, CVar.SERVERONLY); - - /// - /// If an explosion covers a larger area than this number, the damaging/processing will always start during - /// the next tick, instead of during the same tick that the explosion was generated in. - /// - /// - /// This value can be used to ensure that for large explosions the area/tile calculation and the explosion - /// processing/damaging occurs in separate ticks. This helps reduce the single-tick lag if both and are large. I.e., instead of - /// a single tick explosion, this cvar allows for a configuration that results in a two-tick explosion, - /// though most of the computational cost is still in the second tick. - /// - public static readonly CVarDef ExplosionSingleTickAreaLimit = - CVarDef.Create("explosion.single_tick_area_limit", 400, CVar.SERVERONLY); - - /// - /// Whether or not explosions are allowed to create tiles that have - /// set to true. - /// - public static readonly CVarDef ExplosionCanCreateVacuum = - CVarDef.Create("explosion.can_create_vacuum", true, CVar.SERVERONLY); - - /* - * Radiation - */ - - /// - /// What is the smallest radiation dose in rads that can be received by object. - /// Extremely small values may impact performance. - /// - public static readonly CVarDef RadiationMinIntensity = - CVarDef.Create("radiation.min_intensity", 0.1f, CVar.SERVERONLY); - - /// - /// Rate of radiation system update in seconds. - /// - public static readonly CVarDef RadiationGridcastUpdateRate = - CVarDef.Create("radiation.gridcast.update_rate", 1.0f, CVar.SERVERONLY); - - /// - /// If both radiation source and receiver are placed on same grid, ignore grids between them. - /// May get inaccurate result in some cases, but greatly boost performance in general. - /// - public static readonly CVarDef RadiationGridcastSimplifiedSameGrid = - CVarDef.Create("radiation.gridcast.simplified_same_grid", true, CVar.SERVERONLY); - - /// - /// Max distance that radiation ray can travel in meters. - /// - public static readonly CVarDef RadiationGridcastMaxDistance = - CVarDef.Create("radiation.gridcast.max_distance", 50f, CVar.SERVERONLY); - - /* - * Admin logs - */ - - /// - /// Controls if admin logs are enabled. Highly recommended to shut this off for development. - /// - public static readonly CVarDef AdminLogsEnabled = - CVarDef.Create("adminlogs.enabled", true, CVar.SERVERONLY); - - public static readonly CVarDef AdminLogsQueueSendDelay = - CVarDef.Create("adminlogs.queue_send_delay_seconds", 5f, CVar.SERVERONLY); - - // When to skip the waiting time to save in-round admin logs, if no admin logs are currently being saved - public static readonly CVarDef AdminLogsQueueMax = - CVarDef.Create("adminlogs.queue_max", 5000, CVar.SERVERONLY); - - // When to skip the waiting time to save pre-round admin logs, if no admin logs are currently being saved - public static readonly CVarDef AdminLogsPreRoundQueueMax = - CVarDef.Create("adminlogs.pre_round_queue_max", 5000, CVar.SERVERONLY); - - // When to start dropping logs - public static readonly CVarDef AdminLogsDropThreshold = - CVarDef.Create("adminlogs.drop_threshold", 20000, CVar.SERVERONLY); - - // How many logs to send to the client at once - public static readonly CVarDef AdminLogsClientBatchSize = - CVarDef.Create("adminlogs.client_batch_size", 1000, CVar.SERVERONLY); - - public static readonly CVarDef AdminLogsServerName = - CVarDef.Create("adminlogs.server_name", "unknown", CVar.SERVERONLY); - - /* - * Atmos - */ - - /// - /// Whether gas differences will move entities. - /// - public static readonly CVarDef SpaceWind = - CVarDef.Create("atmos.space_wind", false, CVar.SERVERONLY); - - /// - /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. - /// - public static readonly CVarDef SpaceWindPressureForceDivisorThrow = - CVarDef.Create("atmos.space_wind_pressure_force_divisor_throw", 15f, CVar.SERVERONLY); - - /// - /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. - /// - public static readonly CVarDef SpaceWindPressureForceDivisorPush = - CVarDef.Create("atmos.space_wind_pressure_force_divisor_push", 2500f, CVar.SERVERONLY); - - /// - /// The maximum velocity (not force) that may be applied to an object by atmospheric pressure differences. - /// Useful to prevent clipping through objects. - /// - public static readonly CVarDef SpaceWindMaxVelocity = - CVarDef.Create("atmos.space_wind_max_velocity", 30f, CVar.SERVERONLY); - - /// - /// The maximum force that may be applied to an object by pushing (i.e. not throwing) atmospheric pressure differences. - /// A "throwing" atmospheric pressure difference ignores this limit, but not the max. velocity limit. - /// - public static readonly CVarDef SpaceWindMaxPushForce = - CVarDef.Create("atmos.space_wind_max_push_force", 20f, CVar.SERVERONLY); - - /// - /// Whether monstermos tile equalization is enabled. - /// - public static readonly CVarDef MonstermosEqualization = - CVarDef.Create("atmos.monstermos_equalization", true, CVar.SERVERONLY); - - /// - /// Whether monstermos explosive depressurization is enabled. - /// Needs to be enabled to work. - /// - public static readonly CVarDef MonstermosDepressurization = - CVarDef.Create("atmos.monstermos_depressurization", true, CVar.SERVERONLY); - - /// - /// Whether monstermos explosive depressurization will rip tiles.. - /// Needs and to be enabled to work. - /// WARNING: This cvar causes MAJOR contrast issues, and usually tends to make any spaced scene look very cluttered. - /// This not only usually looks strange, but can also reduce playability for people with impaired vision. Please think twice before enabling this on your server. - /// Also looks weird on slow spacing for unrelated reasons. If you do want to enable this, you should probably turn on instaspacing. - /// - public static readonly CVarDef MonstermosRipTiles = - CVarDef.Create("atmos.monstermos_rip_tiles", false, CVar.SERVERONLY); - - /// - /// Whether explosive depressurization will cause the grid to gain an impulse. - /// Needs and to be enabled to work. - /// - public static readonly CVarDef AtmosGridImpulse = - CVarDef.Create("atmos.grid_impulse", false, CVar.SERVERONLY); - - /// - /// What fraction of air from a spaced tile escapes every tick. - /// 1.0 for instant spacing, 0.2 means 20% of remaining air lost each time - /// - public static readonly CVarDef AtmosSpacingEscapeRatio = - CVarDef.Create("atmos.mmos_spacing_speed", 0.15f, CVar.SERVERONLY); - - /// - /// Minimum amount of air allowed on a spaced tile before it is reset to 0 immediately in kPa - /// Since the decay due to SpacingEscapeRatio follows a curve, it would never reach 0.0 exactly - /// unless we truncate it somewhere. - /// - public static readonly CVarDef AtmosSpacingMinGas = - CVarDef.Create("atmos.mmos_min_gas", 2.0f, CVar.SERVERONLY); +namespace Content.Shared.CCVar; - /// - /// How much wind can go through a single tile before that tile doesn't depressurize itself - /// (I.e spacing is limited in large rooms heading into smaller spaces) - /// - public static readonly CVarDef AtmosSpacingMaxWind = - CVarDef.Create("atmos.mmos_max_wind", 500f, CVar.SERVERONLY); - - /// - /// Whether atmos superconduction is enabled. - /// - /// Disabled by default, superconduction is awful. - public static readonly CVarDef Superconduction = - CVarDef.Create("atmos.superconduction", false, CVar.SERVERONLY); - - /// - /// Heat loss per tile due to radiation at 20 degC, in W. - /// - public static readonly CVarDef SuperconductionTileLoss = - CVarDef.Create("atmos.superconduction_tile_loss", 30f, CVar.SERVERONLY); - - /// - /// Whether excited groups will be processed and created. - /// - public static readonly CVarDef ExcitedGroups = - CVarDef.Create("atmos.excited_groups", true, CVar.SERVERONLY); - - /// - /// Whether all tiles in an excited group will clear themselves once being exposed to space. - /// Similar to , without none of the tile ripping or - /// things being thrown around very violently. - /// Needs to be enabled to work. - /// - public static readonly CVarDef ExcitedGroupsSpaceIsAllConsuming = - CVarDef.Create("atmos.excited_groups_space_is_all_consuming", false, CVar.SERVERONLY); - - /// - /// Maximum time in milliseconds that atmos can take processing. - /// - public static readonly CVarDef AtmosMaxProcessTime = - CVarDef.Create("atmos.max_process_time", 3f, CVar.SERVERONLY); - - /// - /// Atmos tickrate in TPS. Atmos processing will happen every 1/TPS seconds. - /// - public static readonly CVarDef AtmosTickRate = - CVarDef.Create("atmos.tickrate", 15f, CVar.SERVERONLY); - - /// - /// Scale factor for how fast things happen in our atmosphere - /// simulation compared to real life. 1x means pumps run at 1x - /// speed. Players typically expect things to happen faster - /// in-game. - /// - public static readonly CVarDef AtmosSpeedup = - CVarDef.Create("atmos.speedup", 8f, CVar.SERVERONLY); - - /// - /// Like atmos.speedup, but only for gas and reaction heat values. 64x means - /// gases heat up and cool down 64x faster than real life. - /// - public static readonly CVarDef AtmosHeatScale = - CVarDef.Create("atmos.heat_scale", 8f, CVar.SERVERONLY); - - /// - /// Maximum explosion radius for explosions caused by bursting a gas tank ("max caps"). - /// Setting this to zero disables the explosion but still allows the tank to burst and leak. - /// - public static readonly CVarDef AtmosTankFragment = - CVarDef.Create("atmos.max_explosion_range", 26f, CVar.SERVERONLY); - - /* - * MIDI instruments - */ - - public static readonly CVarDef MaxMidiEventsPerSecond = - CVarDef.Create("midi.max_events_per_second", 1000, CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef MaxMidiEventsPerBatch = - CVarDef.Create("midi.max_events_per_batch", 60, CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef MaxMidiBatchesDropped = - CVarDef.Create("midi.max_batches_dropped", 1, CVar.SERVERONLY); - - public static readonly CVarDef MaxMidiLaggedBatches = - CVarDef.Create("midi.max_lagged_batches", 8, CVar.SERVERONLY); - - /* - * Holidays - */ - - public static readonly CVarDef HolidaysEnabled = CVarDef.Create("holidays.enabled", true, CVar.SERVERONLY); - - /* - * Branding stuff - */ - - public static readonly CVarDef BrandingSteam = CVarDef.Create("branding.steam", false, CVar.CLIENTONLY); - - /* - * OOC - */ - - public static readonly CVarDef OocEnabled = CVarDef.Create("ooc.enabled", true, CVar.NOTIFY | CVar.REPLICATED); - - public static readonly CVarDef AdminOocEnabled = - CVarDef.Create("ooc.enabled_admin", true, CVar.NOTIFY); - - /// - /// If true, whenever OOC is disabled the Discord OOC relay will also be disabled. - /// - public static readonly CVarDef DisablingOOCDisablesRelay = CVarDef.Create("ooc.disabling_ooc_disables_relay", true, CVar.SERVERONLY); - - /// - /// Whether or not OOC chat should be enabled during a round. - /// - public static readonly CVarDef OocEnableDuringRound = - CVarDef.Create("ooc.enable_during_round", false, CVar.NOTIFY | CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef ShowOocPatronColor = - CVarDef.Create("ooc.show_ooc_patron_color", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.CLIENT); - - /* - * LOOC - */ - - public static readonly CVarDef LoocEnabled = CVarDef.Create("looc.enabled", true, CVar.NOTIFY | CVar.REPLICATED); - - public static readonly CVarDef AdminLoocEnabled = - CVarDef.Create("looc.enabled_admin", true, CVar.NOTIFY); - - /// - /// True: Dead players can use LOOC - /// False: Dead player LOOC gets redirected to dead chat - /// - public static readonly CVarDef DeadLoocEnabled = CVarDef.Create("looc.enabled_dead", false, CVar.NOTIFY | CVar.REPLICATED); - - /// - /// True: Crit players can use LOOC - /// False: Crit player LOOC gets redirected to dead chat - /// - public static readonly CVarDef CritLoocEnabled = CVarDef.Create("looc.enabled_crit", false, CVar.NOTIFY | CVar.REPLICATED); - - /* - * Entity Menu Grouping Types - */ - public static readonly CVarDef EntityMenuGroupingType = CVarDef.Create("entity_menu", 0, CVar.CLIENTONLY); - - /* - * Whitelist - */ - - /// - /// Controls whether the server will deny any players that are not whitelisted in the DB. - /// - public static readonly CVarDef WhitelistEnabled = - CVarDef.Create("whitelist.enabled", false, CVar.SERVERONLY); - /// - /// Specifies the whitelist prototypes to be used by the server. This should be a comma-separated list of prototypes. - /// If a whitelists conditions to be active fail (for example player count), the next whitelist will be used instead. If no whitelist is valid, the player will be allowed to connect. - /// - public static readonly CVarDef WhitelistPrototypeList = - CVarDef.Create("whitelist.prototype_list", "basicWhitelist", CVar.SERVERONLY); - - /* - * VOTE - */ - - /// - /// Allows enabling/disabling player-started votes for ultimate authority - /// - public static readonly CVarDef VoteEnabled = - CVarDef.Create("vote.enabled", true, CVar.SERVERONLY); - - /// - /// See vote.enabled, but specific to restart votes - /// - public static readonly CVarDef VoteRestartEnabled = - CVarDef.Create("vote.restart_enabled", true, CVar.SERVERONLY); - - /// - /// Config for when the restart vote should be allowed to be called regardless with less than this amount of players. - /// - public static readonly CVarDef VoteRestartMaxPlayers = - CVarDef.Create("vote.restart_max_players", 20, CVar.SERVERONLY); - - /// - /// Config for when the restart vote should be allowed to be called based on percentage of ghosts. - /// - public static readonly CVarDef VoteRestartGhostPercentage = - CVarDef.Create("vote.restart_ghost_percentage", 55, CVar.SERVERONLY); - - /// - /// See vote.enabled, but specific to preset votes - /// - public static readonly CVarDef VotePresetEnabled = - CVarDef.Create("vote.preset_enabled", true, CVar.SERVERONLY); - - /// - /// See vote.enabled, but specific to map votes - /// - public static readonly CVarDef VoteMapEnabled = - CVarDef.Create("vote.map_enabled", false, CVar.SERVERONLY); - - /// - /// The required ratio of the server that must agree for a restart round vote to go through. - /// - public static readonly CVarDef VoteRestartRequiredRatio = - CVarDef.Create("vote.restart_required_ratio", 0.85f, CVar.SERVERONLY); - - /// - /// Whether or not to prevent the restart vote from having any effect when there is an online admin - /// - public static readonly CVarDef VoteRestartNotAllowedWhenAdminOnline = - CVarDef.Create("vote.restart_not_allowed_when_admin_online", true, CVar.SERVERONLY); - - /// - /// The delay which two votes of the same type are allowed to be made by separate people, in seconds. - /// - public static readonly CVarDef VoteSameTypeTimeout = - CVarDef.Create("vote.same_type_timeout", 240f, CVar.SERVERONLY); - - /// - /// Sets the duration of the map vote timer. - /// - public static readonly CVarDef - VoteTimerMap = CVarDef.Create("vote.timermap", 90, CVar.SERVERONLY); - - /// - /// Sets the duration of the restart vote timer. - /// - public static readonly CVarDef - VoteTimerRestart = CVarDef.Create("vote.timerrestart", 60, CVar.SERVERONLY); - - /// - /// Sets the duration of the gamemode/preset vote timer. - /// - public static readonly CVarDef - VoteTimerPreset = CVarDef.Create("vote.timerpreset", 30, CVar.SERVERONLY); - - /// - /// Sets the duration of the map vote timer when ALONE. - /// - public static readonly CVarDef - VoteTimerAlone = CVarDef.Create("vote.timeralone", 10, CVar.SERVERONLY); - - /* - * VOTEKICK - */ - - /// - /// Allows enabling/disabling player-started votekick for ultimate authority - /// - public static readonly CVarDef VotekickEnabled = - CVarDef.Create("votekick.enabled", true, CVar.SERVERONLY); - - /// - /// Config for when the votekick should be allowed to be called based on number of eligible voters. - /// - public static readonly CVarDef VotekickEligibleNumberRequirement = - CVarDef.Create("votekick.eligible_number", 5, CVar.SERVERONLY); - - /// - /// Whether a votekick initiator must be a ghost or not. - /// - public static readonly CVarDef VotekickInitiatorGhostRequirement = - CVarDef.Create("votekick.initiator_ghost_requirement", true, CVar.SERVERONLY); - - /// - /// Should the initiator be whitelisted to initiate a votekick? - /// - public static readonly CVarDef VotekickInitiatorWhitelistedRequirement = - CVarDef.Create("votekick.initiator_whitelist_requirement", true, CVar.SERVERONLY); - - /// - /// Should the initiator be able to start a votekick if they are bellow the votekick.voter_playtime requirement? - /// - public static readonly CVarDef VotekickInitiatorTimeRequirement = - CVarDef.Create("votekick.initiator_time_requirement", false, CVar.SERVERONLY); - - /// - /// Whether a votekick voter must be a ghost or not. - /// - public static readonly CVarDef VotekickVoterGhostRequirement = - CVarDef.Create("votekick.voter_ghost_requirement", true, CVar.SERVERONLY); - - /// - /// Config for how many hours playtime a player must have to be able to vote on a votekick. - /// - public static readonly CVarDef VotekickEligibleVoterPlaytime = - CVarDef.Create("votekick.voter_playtime", 100, CVar.SERVERONLY); - - /// - /// Config for how many seconds a player must have been dead to initiate a votekick / be able to vote on a votekick. - /// - public static readonly CVarDef VotekickEligibleVoterDeathtime = - CVarDef.Create("votekick.voter_deathtime", 30, CVar.REPLICATED | CVar.SERVER); - - /// - /// The required ratio of eligible voters that must agree for a votekick to go through. - /// - public static readonly CVarDef VotekickRequiredRatio = - CVarDef.Create("votekick.required_ratio", 0.6f, CVar.SERVERONLY); - - /// - /// Whether or not to prevent the votekick from having any effect when there is an online admin. - /// - public static readonly CVarDef VotekickNotAllowedWhenAdminOnline = - CVarDef.Create("votekick.not_allowed_when_admin_online", true, CVar.SERVERONLY); - - /// - /// The delay for which two votekicks are allowed to be made by separate people, in seconds. - /// - public static readonly CVarDef VotekickTimeout = - CVarDef.Create("votekick.timeout", 120f, CVar.SERVERONLY); - - /// - /// Sets the duration of the votekick vote timer. - /// - public static readonly CVarDef - VotekickTimer = CVarDef.Create("votekick.timer", 60, CVar.SERVERONLY); - - /// - /// Config for how many hours playtime a player must have to get protection from the Raider votekick type when playing as an antag. - /// - public static readonly CVarDef VotekickAntagRaiderProtection = - CVarDef.Create("votekick.antag_raider_protection", 10, CVar.SERVERONLY); - - /// - /// Default severity for votekick bans - /// - public static readonly CVarDef VotekickBanDefaultSeverity = - CVarDef.Create("votekick.ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); - - /// - /// Duration of a ban caused by a votekick (in minutes). - /// - public static readonly CVarDef VotekickBanDuration = - CVarDef.Create("votekick.ban_duration", 180, CVar.SERVERONLY); - - /// - /// Whether the ghost requirement settings for votekicks should be ignored for the lobby. - /// - public static readonly CVarDef VotekickIgnoreGhostReqInLobby = - CVarDef.Create("votekick.ignore_ghost_req_in_lobby", true, CVar.SERVERONLY); - - /* - * BAN - */ - - public static readonly CVarDef BanHardwareIds = - CVarDef.Create("ban.hardware_ids", true, CVar.SERVERONLY); - - /* - * Procgen - */ - - /// - /// Should we pre-load all of the procgen atlasses. - /// - public static readonly CVarDef ProcgenPreload = - CVarDef.Create("procgen.preload", true, CVar.SERVERONLY); - - /* - * Shuttles - */ - - // Look this is technically eye behavior but its main impact is shuttles so I just dumped it here. - /// - /// If true then the camera will match the grid / map and is unchangeable. - /// - When traversing grids it will snap to 0 degrees rotation. - /// False means the player has control over the camera rotation. - /// - When traversing grids it will snap to the nearest cardinal which will generally be imperceptible. - /// - public static readonly CVarDef CameraRotationLocked = - CVarDef.Create("shuttle.camera_rotation_locked", false, CVar.REPLICATED); - - /// - /// Whether the arrivals terminal should be on a planet map. - /// - public static readonly CVarDef ArrivalsPlanet = - CVarDef.Create("shuttle.arrivals_planet", true, CVar.SERVERONLY); - - /// - /// Whether the arrivals shuttle is enabled. - /// - public static readonly CVarDef ArrivalsShuttles = - CVarDef.Create("shuttle.arrivals", true, CVar.SERVERONLY); - - /// - /// The map to use for the arrivals station. - /// - public static readonly CVarDef ArrivalsMap = - CVarDef.Create("shuttle.arrivals_map", "/Maps/Misc/terminal.yml", CVar.SERVERONLY); - - /// - /// Cooldown between arrivals departures. This should be longer than the FTL time or it will double cycle. - /// - public static readonly CVarDef ArrivalsCooldown = - CVarDef.Create("shuttle.arrivals_cooldown", 50f, CVar.SERVERONLY); - - /// - /// Are players allowed to return on the arrivals shuttle. - /// - public static readonly CVarDef ArrivalsReturns = - CVarDef.Create("shuttle.arrivals_returns", false, CVar.SERVERONLY); - - /// - /// Should all players who spawn at arrivals have godmode until they leave the map? - /// - public static readonly CVarDef GodmodeArrivals = - CVarDef.Create("shuttle.godmode_arrivals", false, CVar.SERVERONLY); - - /// - /// If a grid is split then hide any smaller ones under this mass (kg) from the map. - /// This is useful to avoid split grids spamming out labels. - /// - public static readonly CVarDef HideSplitGridsUnder = - CVarDef.Create("shuttle.hide_split_grids_under", 30, CVar.SERVERONLY); - - /// - /// Whether to automatically spawn escape shuttles. - /// - public static readonly CVarDef GridFill = - CVarDef.Create("shuttle.grid_fill", true, CVar.SERVERONLY); - - /// - /// Whether to automatically preloading grids by GridPreloaderSystem - /// - public static readonly CVarDef PreloadGrids = - CVarDef.Create("shuttle.preload_grids", true, CVar.SERVERONLY); - - /// - /// How long the warmup time before FTL start should be. - /// - public static readonly CVarDef FTLStartupTime = - CVarDef.Create("shuttle.startup_time", 5.5f, CVar.SERVERONLY); - - /// - /// How long a shuttle spends in FTL. - /// - public static readonly CVarDef FTLTravelTime = - CVarDef.Create("shuttle.travel_time", 20f, CVar.SERVERONLY); - - /// - /// How long the final stage of FTL before arrival should be. - /// - public static readonly CVarDef FTLArrivalTime = - CVarDef.Create("shuttle.arrival_time", 5f, CVar.SERVERONLY); - - /// - /// How much time needs to pass before a shuttle can FTL again. - /// - public static readonly CVarDef FTLCooldown = - CVarDef.Create("shuttle.cooldown", 10f, CVar.SERVERONLY); - - /// - /// The maximum a grid can have before it becomes unable to FTL. - /// Any value equal to or less than zero will disable this check. - /// - public static readonly CVarDef FTLMassLimit = - CVarDef.Create("shuttle.mass_limit", 300f, CVar.SERVERONLY); - - /// - /// How long to knock down entities for if they aren't buckled when FTL starts and stops. - /// - public static readonly CVarDef HyperspaceKnockdownTime = - CVarDef.Create("shuttle.hyperspace_knockdown_time", 5f, CVar.SERVERONLY); - - /* - * Emergency - */ - - /// - /// Is the emergency shuttle allowed to be early launched. - /// - public static readonly CVarDef EmergencyEarlyLaunchAllowed = - CVarDef.Create("shuttle.emergency_early_launch_allowed", false, CVar.SERVERONLY); - - /// - /// How long the emergency shuttle remains docked with the station, in seconds. - /// - public static readonly CVarDef EmergencyShuttleDockTime = - CVarDef.Create("shuttle.emergency_dock_time", 180f, CVar.SERVERONLY); - - /// - /// If the emergency shuttle can't dock at a priority port, the dock time will be multiplied with this value. - /// - public static readonly CVarDef EmergencyShuttleDockTimeMultiplierOtherDock = - CVarDef.Create("shuttle.emergency_dock_time_multiplier_other_dock", 1.6667f, CVar.SERVERONLY); - - /// - /// If the emergency shuttle can't dock at all, the dock time will be multiplied with this value. - /// - public static readonly CVarDef EmergencyShuttleDockTimeMultiplierNoDock = - CVarDef.Create("shuttle.emergency_dock_time_multiplier_no_dock", 2f, CVar.SERVERONLY); - - /// - /// How long after the console is authorized for the shuttle to early launch. - /// - public static readonly CVarDef EmergencyShuttleAuthorizeTime = - CVarDef.Create("shuttle.emergency_authorize_time", 10f, CVar.SERVERONLY); - - /// - /// The minimum time for the emergency shuttle to arrive at centcomm. - /// Actual minimum travel time cannot be less than - /// - public static readonly CVarDef EmergencyShuttleMinTransitTime = - CVarDef.Create("shuttle.emergency_transit_time_min", 60f, CVar.SERVERONLY); - - /// - /// The maximum time for the emergency shuttle to arrive at centcomm. - /// - public static readonly CVarDef EmergencyShuttleMaxTransitTime = - CVarDef.Create("shuttle.emergency_transit_time_max", 180f, CVar.SERVERONLY); - - /// - /// Whether the emergency shuttle is enabled or should the round just end. - /// - public static readonly CVarDef EmergencyShuttleEnabled = - CVarDef.Create("shuttle.emergency", true, CVar.SERVERONLY); - - /// - /// The percentage of time passed from the initial call to when the shuttle can no longer be recalled. - /// ex. a call time of 10min and turning point of 0.5 means the shuttle cannot be recalled after 5 minutes. - /// - public static readonly CVarDef EmergencyRecallTurningPoint = - CVarDef.Create("shuttle.recall_turning_point", 0.5f, CVar.SERVERONLY); - - /// - /// Time in minutes after round start to auto-call the shuttle. Set to zero to disable. - /// - public static readonly CVarDef EmergencyShuttleAutoCallTime = - CVarDef.Create("shuttle.auto_call_time", 90, CVar.SERVERONLY); - - /// - /// Time in minutes after the round was extended (by recalling the shuttle) to call - /// the shuttle again. - /// - public static readonly CVarDef EmergencyShuttleAutoCallExtensionTime = - CVarDef.Create("shuttle.auto_call_extension_time", 45, CVar.SERVERONLY); - - /* - * Crew Manifests - */ - - /// - /// Setting this allows a crew manifest to be opened from any window - /// that has a crew manifest button, and sends the correct message. - /// If this is false, only in-game entities will allow you to see - /// the crew manifest, if the functionality is coded in. - /// Having administrator priveledge ignores this, but will still - /// hide the button in UI windows. - /// - public static readonly CVarDef CrewManifestWithoutEntity = - CVarDef.Create("crewmanifest.no_entity", true, CVar.REPLICATED); - - /// - /// Setting this allows the crew manifest to be viewed from 'unsecure' - /// entities, such as the PDA. - /// - public static readonly CVarDef CrewManifestUnsecure = - CVarDef.Create("crewmanifest.unsecure", true, CVar.REPLICATED); - - /* - * Biomass - */ - - /// - /// Enabled: Cloning has 70% cost and reclaimer will refuse to reclaim corpses with souls. (For LRP). - /// Disabled: Cloning has full biomass cost and reclaimer can reclaim corpses with souls. (Playtested and balanced for MRP+). - /// - public static readonly CVarDef BiomassEasyMode = - CVarDef.Create("biomass.easy_mode", true, CVar.SERVERONLY); - - /* - * Anomaly - */ - - /// - /// A scale factor applied to a grid's bounds when trying to find a spot to randomly generate an anomaly. - /// - public static readonly CVarDef AnomalyGenerationGridBoundsScale = - CVarDef.Create("anomaly.generation_grid_bounds_scale", 0.6f, CVar.SERVERONLY); - - /* - * VIEWPORT - */ - - public static readonly CVarDef ViewportStretch = - CVarDef.Create("viewport.stretch", true, CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef ViewportFixedScaleFactor = - CVarDef.Create("viewport.fixed_scale_factor", 2, CVar.CLIENTONLY | CVar.ARCHIVE); - - // This default is basically specifically chosen so fullscreen/maximized 1080p hits a 2x snap and does NN. - public static readonly CVarDef ViewportSnapToleranceMargin = - CVarDef.Create("viewport.snap_tolerance_margin", 64, CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef ViewportSnapToleranceClip = - CVarDef.Create("viewport.snap_tolerance_clip", 32, CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef ViewportScaleRender = - CVarDef.Create("viewport.scale_render", true, CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef ViewportMinimumWidth = - CVarDef.Create("viewport.minimum_width", 15, CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef ViewportMaximumWidth = - CVarDef.Create("viewport.maximum_width", 21, CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef ViewportWidth = - CVarDef.Create("viewport.width", 21, CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef ViewportVerticalFit = - CVarDef.Create("viewport.vertical_fit", true, CVar.CLIENTONLY | CVar.ARCHIVE); - - /* - * UI - */ - - public static readonly CVarDef UILayout = - CVarDef.Create("ui.layout", "Default", CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef DefaultScreenChatSize = - CVarDef.Create("ui.default_chat_size", "", CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef SeparatedScreenChatSize = - CVarDef.Create("ui.separated_chat_size", "0.6,0", CVar.CLIENTONLY | CVar.ARCHIVE); - - - /* - * Accessibility - */ - - /// - /// Chat window opacity slider, controlling the alpha of the chat window background. - /// Goes from to 0 (completely transparent) to 1 (completely opaque) - /// - public static readonly CVarDef ChatWindowOpacity = - CVarDef.Create("accessibility.chat_window_transparency", 0.85f, CVar.CLIENTONLY | CVar.ARCHIVE); - - /// - /// Toggle for visual effects that may potentially cause motion sickness. - /// Where reasonable, effects affected by this CVar should use an alternate effect. - /// Please do not use this CVar as a bandaid for effects that could otherwise be made accessible without issue. - /// - public static readonly CVarDef ReducedMotion = - CVarDef.Create("accessibility.reduced_motion", false, CVar.CLIENTONLY | CVar.ARCHIVE); - - public static readonly CVarDef ChatEnableColorName = - CVarDef.Create("accessibility.enable_color_name", true, CVar.CLIENTONLY | CVar.ARCHIVE, "Toggles displaying names with individual colors."); - - /// - /// Screen shake intensity slider, controlling the intensity of the CameraRecoilSystem. - /// Goes from 0 (no recoil at all) to 1 (regular amounts of recoil) - /// - public static readonly CVarDef ScreenShakeIntensity = - CVarDef.Create("accessibility.screen_shake_intensity", 1f, CVar.CLIENTONLY | CVar.ARCHIVE); - - /// - /// A generic toggle for various visual effects that are color sensitive. - /// As of 2/16/24, only applies to progress bar colors. - /// - public static readonly CVarDef AccessibilityColorblindFriendly = - CVarDef.Create("accessibility.colorblind_friendly", false, CVar.CLIENTONLY | CVar.ARCHIVE); - - /* - * CHAT - */ - - /// - /// Chat rate limit values are accounted in periods of this size (seconds). - /// After the period has passed, the count resets. - /// - /// - public static readonly CVarDef ChatRateLimitPeriod = - CVarDef.Create("chat.rate_limit_period", 2f, CVar.SERVERONLY); - - /// - /// How many chat messages are allowed in a single rate limit period. - /// - /// - /// The total rate limit throughput per second is effectively - /// divided by . - /// - /// - public static readonly CVarDef ChatRateLimitCount = - CVarDef.Create("chat.rate_limit_count", 10, CVar.SERVERONLY); - - /// - /// Minimum delay (in seconds) between notifying admins about chat message rate limit violations. - /// A negative value disables admin announcements. - /// - public static readonly CVarDef ChatRateLimitAnnounceAdminsDelay = - CVarDef.Create("chat.rate_limit_announce_admins_delay", 15, CVar.SERVERONLY); - - public static readonly CVarDef ChatMaxMessageLength = - CVarDef.Create("chat.max_message_length", 1000, CVar.SERVER | CVar.REPLICATED); - - public static readonly CVarDef ChatMaxAnnouncementLength = - CVarDef.Create("chat.max_announcement_length", 256, CVar.SERVER | CVar.REPLICATED); - - public static readonly CVarDef ChatSanitizerEnabled = - CVarDef.Create("chat.chat_sanitizer_enabled", true, CVar.SERVERONLY); - - public static readonly CVarDef ChatShowTypingIndicator = - CVarDef.Create("chat.show_typing_indicator", true, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER); - - public static readonly CVarDef ChatEnableFancyBubbles = - CVarDef.Create("chat.enable_fancy_bubbles", true, CVar.CLIENTONLY | CVar.ARCHIVE, "Toggles displaying fancy speech bubbles, which display the speaking character's name."); - - public static readonly CVarDef ChatFancyNameBackground = - CVarDef.Create("chat.fancy_name_background", false, CVar.CLIENTONLY | CVar.ARCHIVE, "Toggles displaying a background under the speaking character's name."); - - /// - /// A message broadcast to each player that joins the lobby. - /// May be changed by admins ingame through use of the "set-motd" command. - /// In this case the new value, if not empty, is broadcast to all connected players and saved between rounds. - /// May be requested by any player through use of the "get-motd" command. - /// - public static readonly CVarDef MOTD = - CVarDef.Create("chat.motd", "", CVar.SERVER | CVar.SERVERONLY | CVar.ARCHIVE, "A message broadcast to each player that joins the lobby."); - - /* - * AFK - */ - - /// - /// How long a client can go without any input before being considered AFK. - /// - public static readonly CVarDef AfkTime = - CVarDef.Create("afk.time", 60f, CVar.SERVERONLY); - - /* - * IC - */ - - /// - /// Restricts IC character names to alphanumeric chars. - /// - public static readonly CVarDef RestrictedNames = - CVarDef.Create("ic.restricted_names", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// Allows flavor text (character descriptions) - /// - public static readonly CVarDef FlavorText = - CVarDef.Create("ic.flavor_text", false, CVar.SERVER | CVar.REPLICATED); - - /// - /// Adds a period at the end of a sentence if the sentence ends in a letter. - /// - public static readonly CVarDef ChatPunctuation = - CVarDef.Create("ic.punctuation", false, CVar.SERVER); - - /// - /// Enables automatically forcing IC name rules. Uppercases the first letter of the first and last words of the name - /// - public static readonly CVarDef ICNameCase = - CVarDef.Create("ic.name_case", true, CVar.SERVER | CVar.REPLICATED); - - /// - /// Whether or not players' characters are randomly generated rather than using their selected characters in the creator. - /// - public static readonly CVarDef ICRandomCharacters = - CVarDef.Create("ic.random_characters", false, CVar.SERVER); - - /// - /// A weighted random prototype used to determine the species selected for random characters. - /// - public static readonly CVarDef ICRandomSpeciesWeights = - CVarDef.Create("ic.random_species_weights", "SpeciesWeights", CVar.SERVER); - - /// - /// Control displaying SSD indicators near players - /// - public static readonly CVarDef ICShowSSDIndicator = - CVarDef.Create("ic.show_ssd_indicator", true, CVar.CLIENTONLY); - - /* - * Salvage - */ - - /// - /// Duration for missions - /// - public static readonly CVarDef - SalvageExpeditionDuration = CVarDef.Create("salvage.expedition_duration", 660f, CVar.REPLICATED); - - /// - /// Cooldown for missions. - /// - public static readonly CVarDef - SalvageExpeditionCooldown = CVarDef.Create("salvage.expedition_cooldown", 780f, CVar.REPLICATED); - - /* - * Flavor - */ - - /// - /// Flavor limit. This is to ensure that having a large mass of flavors in - /// some food object won't spam a user with flavors. - /// - public static readonly CVarDef - FlavorLimit = CVarDef.Create("flavor.limit", 10, CVar.SERVERONLY); - - /* - * Mapping - */ - - /// - /// Will mapping mode enable autosaves when it's activated? - /// - public static readonly CVarDef - AutosaveEnabled = CVarDef.Create("mapping.autosave", true, CVar.SERVERONLY); - - /// - /// Autosave interval in seconds. - /// - public static readonly CVarDef - AutosaveInterval = CVarDef.Create("mapping.autosave_interval", 600f, CVar.SERVERONLY); - - /// - /// Directory in server user data to save to. Saves will be inside folders in this directory. - /// - public static readonly CVarDef - AutosaveDirectory = CVarDef.Create("mapping.autosave_dir", "Autosaves", CVar.SERVERONLY); - - - /* - * Rules - */ - - /// - /// Time that players have to wait before rules can be accepted. - /// - public static readonly CVarDef RulesWaitTime = - CVarDef.Create("rules.time", 45f, CVar.SERVER | CVar.REPLICATED); - - /// - /// Don't show rules to localhost/loopback interface. - /// - public static readonly CVarDef RulesExemptLocal = - CVarDef.Create("rules.exempt_local", true, CVar.SERVERONLY); - - - /* - * Autogeneration - */ - - public static readonly CVarDef DestinationFile = - CVarDef.Create("autogen.destination_file", "", CVar.SERVER | CVar.SERVERONLY); - - /* - * Network Resource Manager - */ - - /// - /// Whether uploaded files will be stored in the server's database. - /// This is useful to keep "logs" on what files admins have uploaded in the past. - /// - public static readonly CVarDef ResourceUploadingStoreEnabled = - CVarDef.Create("netres.store_enabled", true, CVar.SERVER | CVar.SERVERONLY); - - /// - /// Numbers of days before stored uploaded files are deleted. Set to zero or negative to disable auto-delete. - /// This is useful to free some space automatically. Auto-deletion runs only on server boot. - /// - public static readonly CVarDef ResourceUploadingStoreDeletionDays = - CVarDef.Create("netres.store_deletion_days", 30, CVar.SERVER | CVar.SERVERONLY); - - /* - * Controls - */ - - /// - /// Deadzone for drag-drop interactions. - /// - public static readonly CVarDef DragDropDeadZone = - CVarDef.Create("control.drag_dead_zone", 12f, CVar.CLIENTONLY | CVar.ARCHIVE); - - /// - /// Toggles whether the walking key is a toggle or a held key. - /// - public static readonly CVarDef ToggleWalk = - CVarDef.Create("control.toggle_walk", false, CVar.CLIENTONLY | CVar.ARCHIVE); - - /* - * Interactions - */ - - // The rationale behind the default limit is simply that I can easily get to 7 interactions per second by just - // trying to spam toggle a light switch or lever (though the UseDelay component limits the actual effect of the - // interaction). I don't want to accidentally spam admins with alerts just because somebody is spamming a - // key manually, nor do we want to alert them just because the player is having network issues and the server - // receives multiple interactions at once. But we also want to try catch people with modified clients that spam - // many interactions on the same tick. Hence, a very short period, with a relatively high count. - - /// - /// Maximum number of interactions that a player can perform within seconds - /// - public static readonly CVarDef InteractionRateLimitCount = - CVarDef.Create("interaction.rate_limit_count", 5, CVar.SERVER | CVar.REPLICATED); - - /// - public static readonly CVarDef InteractionRateLimitPeriod = - CVarDef.Create("interaction.rate_limit_period", 0.5f, CVar.SERVER | CVar.REPLICATED); - - /// - /// Minimum delay (in seconds) between notifying admins about interaction rate limit violations. A negative - /// value disables admin announcements. - /// - public static readonly CVarDef InteractionRateLimitAnnounceAdminsDelay = - CVarDef.Create("interaction.rate_limit_announce_admins_delay", 120, CVar.SERVERONLY); - - /* - * STORAGE - */ - - /// - /// Whether or not the storage UI is static and bound to the hotbar, or unbound and allowed to be dragged anywhere. - /// - public static readonly CVarDef StaticStorageUI = - CVarDef.Create("control.static_storage_ui", true, CVar.CLIENTONLY | CVar.ARCHIVE); - - /// - /// Whether or not the storage window uses a transparent or opaque sprite. - /// - public static readonly CVarDef OpaqueStorageWindow = - CVarDef.Create("control.opaque_storage_background", false, CVar.CLIENTONLY | CVar.ARCHIVE); - - /* - * UPDATE - */ - - /// - /// If a server update restart is pending, the delay after the last player leaves before we actually restart. In seconds. - /// - public static readonly CVarDef UpdateRestartDelay = - CVarDef.Create("update.restart_delay", 20f, CVar.SERVERONLY); - - /* - * Ghost - */ - - /// - /// The time you must spend reading the rules, before the "Request" button is enabled - /// - public static readonly CVarDef GhostRoleTime = - CVarDef.Create("ghost.role_time", 3f, CVar.REPLICATED | CVar.SERVER); - - /// - /// If ghost role lotteries should be made near-instanteous. - /// - public static readonly CVarDef GhostQuickLottery = - CVarDef.Create("ghost.quick_lottery", false, CVar.SERVERONLY); - - /// - /// Whether or not to kill the player's mob on ghosting, when it is in a critical health state. - /// - public static readonly CVarDef GhostKillCrit = - CVarDef.Create("ghost.kill_crit", true, CVar.REPLICATED | CVar.SERVER); - - /* - * Fire alarm - */ - - /// - /// If fire alarms should have all access, or if activating/resetting these - /// should be restricted to what is dictated on a player's access card. - /// Defaults to true. - /// - public static readonly CVarDef FireAlarmAllAccess = - CVarDef.Create("firealarm.allaccess", true, CVar.SERVERONLY); - - /* - * PLAYTIME - */ - - /// - /// Time between play time autosaves, in seconds. - /// - public static readonly CVarDef - PlayTimeSaveInterval = CVarDef.Create("playtime.save_interval", 900f, CVar.SERVERONLY); - - /* - * INFOLINKS - */ - - /// - /// Link to Discord server to show in the launcher. - /// - public static readonly CVarDef InfoLinksDiscord = - CVarDef.Create("infolinks.discord", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to website to show in the launcher. - /// - public static readonly CVarDef InfoLinksForum = - CVarDef.Create("infolinks.forum", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to GitHub page to show in the launcher. - /// - public static readonly CVarDef InfoLinksGithub = - CVarDef.Create("infolinks.github", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to website to show in the launcher. - /// - public static readonly CVarDef InfoLinksWebsite = - CVarDef.Create("infolinks.website", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to wiki to show in the launcher. - /// - public static readonly CVarDef InfoLinksWiki = - CVarDef.Create("infolinks.wiki", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to Patreon. Not shown in the launcher currently. - /// - public static readonly CVarDef InfoLinksPatreon = - CVarDef.Create("infolinks.patreon", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to the bug report form. - /// - public static readonly CVarDef InfoLinksBugReport = - CVarDef.Create("infolinks.bug_report", "", CVar.SERVER | CVar.REPLICATED); - - /// - /// Link to site handling ban appeals. Shown in ban disconnect messages. - /// - public static readonly CVarDef InfoLinksAppeal = - CVarDef.Create("infolinks.appeal", "", CVar.SERVER | CVar.REPLICATED); - - /* - * CONFIG - */ - - // These are server-only for now since I don't foresee a client use yet, - // and I don't wanna have to start coming up with like .client suffixes and stuff like that. - - /// - /// Configuration presets to load during startup. - /// Multiple presets can be separated by comma and are loaded in order. - /// - /// - /// Loaded presets must be located under the ConfigPresets/ resource directory and end with the .toml extension. - /// Only the file name (without extension) must be given for this variable. - /// - public static readonly CVarDef ConfigPresets = - CVarDef.Create("config.presets", "", CVar.SERVERONLY); - - /// - /// Whether to load the preset development CVars. - /// This disables some things like lobby to make development easier. - /// Even when true, these are only loaded if the game is compiled with DEVELOPMENT set. - /// - public static readonly CVarDef ConfigPresetDevelopment = - CVarDef.Create("config.preset_development", true, CVar.SERVERONLY); - - /// - /// Whether to load the preset debug CVars. - /// Even when true, these are only loaded if the game is compiled with DEBUG set. - /// - public static readonly CVarDef ConfigPresetDebug = - CVarDef.Create("config.preset_debug", true, CVar.SERVERONLY); - - /* - * World Generation - */ - /// - /// Whether or not world generation is enabled. - /// - public static readonly CVarDef WorldgenEnabled = - CVarDef.Create("worldgen.enabled", false, CVar.SERVERONLY); - - /// - /// The worldgen config to use. - /// - public static readonly CVarDef WorldgenConfig = - CVarDef.Create("worldgen.worldgen_config", "Default", CVar.SERVERONLY); - - /// - /// The maximum amount of time the entity GC can process, in ms. - /// - public static readonly CVarDef GCMaximumTimeMs = - CVarDef.Create("entgc.maximum_time_ms", 5, CVar.SERVERONLY); - - /* - * Replays - */ - - /// - /// Whether or not to record admin chat. If replays are being publicly distributes, this should probably be - /// false. - /// - public static readonly CVarDef ReplayRecordAdminChat = - CVarDef.Create("replay.record_admin_chat", false, CVar.ARCHIVE); - - /// - /// Automatically record full rounds as replays. - /// - public static readonly CVarDef ReplayAutoRecord = - CVarDef.Create("replay.auto_record", false, CVar.SERVERONLY); - - /// - /// The file name to record automatic replays to. The path is relative to . - /// - /// - /// - /// If the path includes slashes, directories will be automatically created if necessary. - /// - /// - /// A number of substitutions can be used to automatically fill in the file name: {year}, {month}, {day}, {hour}, {minute}, {round}. - /// - /// - public static readonly CVarDef ReplayAutoRecordName = - CVarDef.Create("replay.auto_record_name", "{year}_{month}_{day}-{hour}_{minute}-round_{round}.zip", CVar.SERVERONLY); - - /// - /// Path that, if provided, automatic replays are initially recorded in. - /// When the recording is done, the file is moved into its final destination. - /// Unless this path is rooted, it will be relative to . - /// - public static readonly CVarDef ReplayAutoRecordTempDir = - CVarDef.Create("replay.auto_record_temp_dir", "", CVar.SERVERONLY); - - /* - * Miscellaneous - */ - - public static readonly CVarDef GatewayGeneratorEnabled = - CVarDef.Create("gateway.generator_enabled", true); - - // Clippy! - public static readonly CVarDef TippyEntity = - CVarDef.Create("tippy.entity", "Tippy", CVar.SERVER | CVar.REPLICATED); - - /// - /// The number of seconds that must pass for a single entity to be able to point at something again. - /// - public static readonly CVarDef PointingCooldownSeconds = - CVarDef.Create("pointing.cooldown_seconds", 0.5f, CVar.SERVERONLY); - - /* - * DEBUG - */ - - /// - /// A simple toggle to test OptionsVisualizerComponent. - /// - public static readonly CVarDef DebugOptionVisualizerTest = - CVarDef.Create("debug.option_visualizer_test", false, CVar.CLIENTONLY); - - /// - /// Set to true to disable parallel processing in the pow3r solver. - /// - public static readonly CVarDef DebugPow3rDisableParallel = - CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); - } +/// +/// Contains all the CVars used by content. +/// +/// +/// NOTICE FOR FORKS: Put your own CVars in a separate file with a different [CVarDefs] attribute. RT will automatically pick up on it. +/// +[CVarDefs] +public sealed partial class CCVars : CVars +{ + // Only debug stuff lives here. + + /// + /// A simple toggle to test OptionsVisualizerComponent. + /// + public static readonly CVarDef DebugOptionVisualizerTest = + CVarDef.Create("debug.option_visualizer_test", false, CVar.CLIENTONLY); + + /// + /// Set to true to disable parallel processing in the pow3r solver. + /// + public static readonly CVarDef DebugPow3rDisableParallel = + CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); }