| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| convars [2026/05/15 02:43] – frank_lee_smith | convars [2026/05/24 00:47] (current) – frank_lee_smith |
|---|
| ===== Basics ===== | ===== Basics ===== |
| |
| Most gameplay settings are now native saved ConVars. On many hosts, including Physgun, these are stored in a large file like: | Most gameplay settings are now native saved ConVars. These are stored in a large file: |
| |
| <code text> | <code text> |
| Only edit ''Value''. Do **not** edit ''Timeout'' or ''DeleteAt''. | Only edit ''Value''. Do **not** edit ''Timeout'' or ''DeleteAt''. |
| |
| Notes: | **These are most easily modified directly from the console. Commands will apply live (with some variance; see the sections below). Setting the command via the console will store/update the value in ''game.json''.** |
| |
| * Stop the server before manually editing ''game.json''. | * Stop the server before manually editing ''game.json''. |
| * All commands can also be executed in console, which is easier and will apply live (with some variance). Setting the command via the console will store/update the value in ''game.json''. | |
| * Preserve valid JSON syntax. | * Preserve valid JSON syntax. |
| * Values are usually stored as strings, even for numbers and booleans. | * Values are usually stored as strings, even for numbers and booleans. |
| ^ In game.json ^ In server console ^ | ^ In game.json ^ In server console ^ |
| | ''convar.ttt_rtv_enabled'' | ''ttt_rtv_enabled false'' | | | ''convar.ttt_rtv_enabled'' | ''ttt_rtv_enabled false'' | |
| |
| These are most easily modified directly from the console. | |
| |
| ===== Time ===== | ===== Time ===== |
| |
| ^ ConVar ^ Default ^ Applies ^ Description ^ | ^ ConVar ^ Default ^ Applies ^ Description ^ |
| | ''ttt_max_rounds'' | 6 | Next round / map travel | Number of rounds to play before the match ends and a map vote begins. | | | ''ttt_max_rounds'' | 6 | Live | Number of rounds to play before the match ends and a map vote begins. | |
| | ''ttt_round_time_minutes'' | 5 | Next round | Round duration in minutes when haste mode is off. | | | ''ttt_round_time_minutes'' | 5 | Next round | Round duration in minutes **when haste mode is off**. | |
| | ''ttt_haste_mode'' | True | Next round | Enables haste mode, where the public timer starts shorter and hidden time is added as players die. | | | ''ttt_haste_mode'' | True | Next round | Enables haste mode, where the public timer starts shorter and hidden time is added as players die. | |
| | ''ttt_haste_starting_minutes'' | 5 | Next round | Public round timer duration in minutes before haste overtime starts. | | | ''ttt_haste_starting_minutes'' | 5 | Next round | Public round timer duration in minutes before haste overtime starts. | |
| |
| ^ ConVar ^ Default ^ Applies ^ Description ^ | ^ ConVar ^ Default ^ Applies ^ Description ^ |
| | ''ttt_proximity_voice_enabled'' | False | Live | Uses distance-limited voice chat for normal alive-player voice. Team voice and dead/alive voice filtering are separate. | | | ''ttt_proximity_voice_enabled'' | False | Map travel | Uses distance-limited voice chat for normal alive-player voice. Team voice and dead/alive voice filtering are separate. | |
| | ''ttt_proximity_voice_range'' | 800 | Live | Voice range in world units when proximity voice is enabled. | | | ''ttt_proximity_voice_range'' | 800 | Map Travel | Voice range in world units when proximity voice is enabled. | |
| |
| ===== Map Vote ===== | ===== Map Vote ===== |
| | ''ttt_rtv_enabled'' | True | Live | Allows players to start Rock the Vote map-change votes. Admin-forced map votes are unaffected. | | | ''ttt_rtv_enabled'' | True | Live | Allows players to start Rock the Vote map-change votes. Admin-forced map votes are unaffected. | |
| | ''ttt_mapvote_option_count'' | 10 | Newly-created map votes | Maximum number of maps shown during a map vote. | | | ''ttt_mapvote_option_count'' | 10 | Newly-created map votes | Maximum number of maps shown during a map vote. | |
| | ''ttt_mapvote_include_uncurated'' | False | Newly-created map votes | Includes uncurated maps in curated map vote pools when available. Dedicated servers should normally use ''MapVote.Maps'' instead. | | | ''ttt_mapvote_pool'' | ''Official;Verified'' | Newly-created map votes | Source pools used for generated map vote options. Use values such as ''Official'', ''Verified'', and ''AllCompatible'', separated by semicolons. Leave empty to use only ''MapVote.AlwaysInclude'' from ''server_settings.json''. | |
| | | ''ttt_mapvote_filter_by_players'' | False | Newly-created map votes | Prefer maps whose authored size range fits the current lobby size. | |
| | | ''ttt_mapvote_show_tags'' | True | Newly-created map votes | Shows approved map package tags on map vote cards. | |
| | |
| | ''MapVote.AlwaysInclude'' and ''MapVote.NeverShow'' are not ConVars. They live in ''server_settings.json'' because they are package-ident lists. |
| | |
| | When ''AllCompatible'' is enabled, compatible map discovery is prewarmed once after server/lobby settings apply and cached for the server/lobby lifetime. Map votes still apply the current map, ''AlwaysInclude'', ''NeverShow'', player-count filtering, and random option selection when each vote starts. |
| |
| ===== Visuals ===== | ===== Visuals ===== |
| | ''ttt_allow_player_cosmetics'' | True | Next round | Allows players to use their s&box headwear. | | | ''ttt_allow_player_cosmetics'' | True | Next round | Allows players to use their s&box headwear. | |
| |
| ===== Moderation ===== | ===== AFK ===== |
| |
| ^ ConVar ^ Default ^ Applies ^ Description ^ | ^ ConVar ^ Default ^ Applies ^ Description ^ |
| | ''ttt_auto_afk'' | True | Live | Automatically marks idle alive players as AFK. | | | ''ttt_auto_afk'' | True | Live | Automatically marks idle alive players as AFK. | |
| |
| ====== Moderation Roles ====== | |
| |
| Dedicated servers store Moderator, Admin, and Owner assignments in ''roles.json'' in the same data area as ''server_settings.json''. | |
| |
| Use SteamID64 values. Invalid or zero IDs are ignored. Founder is derived from the active host/session and is not written to ''roles.json''. | |
| |
| Example: | |
| |
| <file json roles.json> | |
| [ | |
| { | |
| "steamId": 76561190000000000, | |
| "role": "admin" | |
| }, | |
| { | |
| "steamId": 76561190000000001, | |
| "role": "moderator" | |
| }, | |
| { | |
| "steamId": 76561190000000002, | |
| "role": "owner" | |
| } | |
| ] | |
| </file> | |
| |
| Useful role commands: | |
| |
| ^ Command ^ Persists? ^ Description ^ | |
| | ''ttt_addadmin STEAMID64'' | Yes, to ''roles.json'' | Assign Admin. | | |
| | ''ttt_removeadmin STEAMID64'' | Yes, to ''roles.json'' | Remove Admin. | | |
| | ''ttt_addmod STEAMID64'' / ''ttt_removemod STEAMID64'' | Yes, to ''roles.json'' | Add or remove Moderator. | | |
| | ''ttt_addowner STEAMID64'' / ''ttt_removeowner STEAMID64'' | Yes, to ''roles.json'' | Add or remove Owner. | | |
| | ''ttt_setrole STEAMID64 ROLE'' | Yes, to ''roles.json'' | Replace assignable roles with one role. ROLE is ''mod'', ''admin'', or ''owner''. | | |
| | ''ttt_clearrole STEAMID64'' | Yes, to ''roles.json'' | Remove assignable roles. Founder is not removed. | | |
| | ''ttt_listadmins'' | No change | Print admin IDs. | | |
| | ''ttt_listroles'' | No change | Print assigned roles. | | |
| |
| ''ttt_listadmins'' prints Admin, Owner, and Founder IDs. It does not print Moderators. Use ''ttt_listroles'' to confirm Moderator assignments. | |
| |
| |
| ====== Useful Commands ====== | |
| |
| ===== Map And Vote Commands ===== | ===== Map And Vote Commands ===== |
| | ''votekick PLAYERNAME'' | Starts a public votekick. Players can also type ''/votekick'' or ''!votekick'' in chat. | | | ''votekick PLAYERNAME'' | Starts a public votekick. Players can also type ''/votekick'' or ''!votekick'' in chat. | |
| | ''ttt_forcemapvote'' | Admin/host command that forces the map-vote flow. It is not blocked by ''ttt_rtv_enabled''. | | | ''ttt_forcemapvote'' | Admin/host command that forces the map-vote flow. It is not blocked by ''ttt_rtv_enabled''. | |
| | ''changelevel MAPIDENT'' | Changes to a map ident. | | | ''changelevel MAPIDENT'' | Changes to a map ident. May cause instability! | |
| | ''map MAPIDENT'' | Alias for ''changelevel''. | | | ''map MAPIDENT'' | Alias for ''changelevel''. | |
| | ''scene SCENEFILE'' | Host-only scene change command for scene files. Use map idents for normal server operation. | | | ''scene SCENEFILE'' | Host-only scene change command for scene files. Use map idents for normal server operation. | |
| | | ''t.maps.official'' | Dedicated-server-console-only command that prints the official map source list. | |
| | | ''t.maps.verified'' | Dedicated-server-console-only command that prints the verified map source list. | |
| | | ''t.maps.compatible'' | Dedicated-server-console-only command that discovers and prints compatible unverified map packages. This can take longer than the static source-list commands. | |
| | | ''t.server.mapvote.print'' | Dedicated-server-console-only command that prints current map vote source settings from ''server_settings.json''. | |
| | | ''t.server.mapvote.pool.set Official,Verified'' | Dedicated-server-console-only command that updates ''MapVote.Pool'' in ''server_settings.json''. Use ''Official'', ''Verified'', ''AllCompatible'', ''All'', ''Any'', or an empty string. | |
| | | ''t.server.mapvote.alwaysinclude.add org.map'' | Dedicated-server-console-only command that adds a map ident to ''MapVote.AlwaysInclude''. | |
| | | ''t.server.mapvote.alwaysinclude.remove org.map'' | Dedicated-server-console-only command that removes a map ident from ''MapVote.AlwaysInclude''. | |
| | | ''t.server.mapvote.nevershow.add org.map'' | Dedicated-server-console-only command that adds a map ident to ''MapVote.NeverShow''. | |
| | | ''t.server.mapvote.nevershow.remove org.map'' | Dedicated-server-console-only command that removes a map ident from ''MapVote.NeverShow''. | |
| |
| | The ''t.server.mapvote.*'' mutation commands write ''server_settings.json'' and reject changes while a map vote is already active. |
| ====== Deprecated Or Ignored Settings ====== | |
| | |
| ^ Old Setting ^ Current Status ^ | |
| | ''Server.StartupMap'' | Removed. Use the native ''+game org.game org.map'' launch argument. | | |
| | Scalar ''Lobby'' gameplay fields such as ''MaxRounds'', ''RoundTimeMinutes'', ''KarmaEnabled'', ''ProximityVoiceRange'', etc. | Removed from ''server_settings.json''. Use the matching saved ConVar instead. | | |
| | ''MapVote.Whitelist'' | Migrated to ''MapVote.Maps'' if ''Maps'' is missing. | | |
| | ''MapVote.Blacklist'' | No longer the dedicated rotation model. If only ''Blacklist'' is present, defaults are backfilled into ''MapVote.Maps''. | | |
| |
| ====== Troubleshooting ====== | ====== Troubleshooting ====== |
| |
| <code text> | <code text> |
| [server.settings] loaded path=server_settings.json schema=2 lobby=True vote_maps=18 | [server.settings] loaded path=server_settings.json schema=3 lobby=True map_pool=Official;Verified always_include=0 never_show=0 |
| </code> | </code> |
| |
| |
| <code text> | <code text> |
| [lobby.settings] applied public, 6 rounds, 5m, prep 20s, haste 5m +0.5m/death, curated, 10 vote maps | [lobby.settings] applied public, 6 rounds, 5m, prep 20s, haste 5m +0.5m/death, open catalog, official + verified pool, 10 vote maps |
| | </code> |
| | |
| | Useful AllCompatible prewarm message: |
| | |
| | <code text> |
| | [MapCatalog] allcompatible_prewarm_complete game=thieves.terrortown maps=11 source=LobbyStartSettingsRuntime.ApplyToSystems |
| </code> | </code> |
| |