← Docs
Version 0.9.5

Server Configuration

All settings in BadLadsServerSettings.ini

Admins & Moderators

Specify SteamId64s. Multiple entries allowed.

AdminsSteamId64=76561197960287930
AdminsSteamId64=76561198012345678

ModeratorsSteamId64=76561197960287930

Players

SettingDefaultDescription
MaxPlayers100Maximum players on the server.

Tick Rates

Game Tick Rate

SettingDefaultDescription
bEnableGameTickRateScalingTrueEnable linear dynamic game tick scaling.
bEnableGameTickRateExponentialScaleFalseSwitch to exponential scaling.
MinGameTickRate16Minimum game tick rate.
MaxGameTickRate60Maximum game tick rate.

Network Tick Rate

SettingDefaultDescription
bEnableNetworkTickRateScalingFalseEnable linear dynamic network tick scaling.
bEnableNetworkTickRateExponentialScaleFalseSwitch to exponential scaling.
MinNetTickRate16Minimum network tick rate.
MaxNetTickRate60Maximum network tick rate.

Game Rules

SettingDefaultDescription
bPlatformAntiCheatTrueEnable server-side anti-cheat.
bUseLANFalseRun on LAN.
bHardcoreFalseDisable "Bound to Account" item property.

Economy

SettingDefaultDescription
MinCurrencyValue0.5Minimum economic value.
MaxCurrencyValue2.25Maximum economic value.
MaxBuildablesMultiplier1.5Global scalar for max buildables.
DoubleDropRateDaysFri, Sat, SunDays with doubled drop rates.

Plugins

Settings for WebAssembly server plugins. See Plugin Development for writing them.

SettingDefaultDescription
PluginTickRate20Rate in Hz at which each tickable plugin receives onPluginTick.
PluginFuelPerCall10000000000How much work a single call into a plugin may do. 0 disables fuel accounting.
PluginCallTimeoutMilliseconds250How long a single call into a plugin may hold the game thread. 0 disables the timeout.

Plugin Tick Rate

PluginTickRate is the target rate, in Hz, at which each tickable plugin receives onPluginTick. Plugins are spread across frames rather than all ticking on the same one, so raising this raises per-frame plugin cost proportionally.

Plugins run on the game thread, so the value is clamped to MaxGameTickRate: a plugin cannot tick faster than the server itself. Setting it above that ceiling just makes every plugin run every frame, at maximum per-frame cost.

Plugin Fuel

PluginFuelPerCall bounds how much work a single call into a plugin may do. Fuel is consumed per executed WebAssembly instruction, and the budget is refreshed before every call, so it is a ceiling on one call rather than a rate limit. A call that exhausts its budget is stopped, and an isolated overrun costs only that call: the plugin stays loaded and the next call runs normally. Overruns that keep happening are handled differently, under repeated overruns below.

Set it high enough that only a runaway loop reaches it — the default leaves ordinary plugin work far below the ceiling. Setting it to 0 turns fuel accounting off, which leaves the call timeout as the only bound on a call.

Plugin Call Timeout

PluginCallTimeoutMilliseconds bounds how long a single call may hold the game thread, and it is the bound that protects server responsiveness. A callback that finishes in five milliseconds is fine; one still running after two hundred is holding up the whole server, whatever its instruction count. A call that passes its deadline is interrupted.

The two bounds answer different questions, and a server wants both. Fuel limits the work a call may do; the timeout limits the time it may take. A fuel budget generous enough that no legitimate callback ever reaches it is also large enough to take a long while to spend, and instructions do not convert to time the same way on every machine.

Setting the value to 0 turns the timeout off, in which case a plugin that does not return will hold the game thread.

Repeated Overruns

Either bound stopping a call counts as one strike against that plugin, and a call that returns on its own clears the count. Three strikes in a row disables the plugin: it stays loaded, but is not called again until plugins are reloaded. An admin can reload them on a running server with /reloadplugins, or from the server console with BadLads.Plugins.Reload. Restarting the server clears it too.

Stopping calls one at a time is enough for a plugin that occasionally overruns, but not for one that runs away on every tick — that plugin would be handed a fresh budget each time and the server would keep paying for it. Disabling it instead names the plugin in the server log and leaves the rest of the server running, so the fault can be found and fixed.

Server Options

SettingDefaultDescription
AutoSaveInterval300Auto-save interval in seconds.
ServerPasswordServer password (32 char limit).
MessageOfTheDayMessage shown on player join.
EnableSteamSocketsFalseSteam Datagram Relay (experimental).