Startup, modes and staff exemptions
What Bastrel checks when it starts, what it prints in the server console, and how to exempt a staff member from one module.
OneSync is required
Section titled “OneSync is required”Bastrel only runs with OneSync set to on; legacy is not supported. Otherwise the console shows:
[bastrel] FATAL Bastrel needs onesync on (got off) and does not start. OneSync legacy is not supported.[bastrel] Set "set onesync on" in server.cfg, then restart the server.Nothing else starts: no module, no check, no ban. Add set onesync on to server.cfg and restart the server.
Observe and enforce
Section titled “Observe and enforce”config/main.lua sets the global mode:
mode = 'observe'(default): everything is detected and logged, nothing is sanctioned automatically (bans in force and manual bans still apply). A forbidden game event that never has a legitimate use can still be cancelled.mode = 'enforce': sanctions followconfig/modules.lua.
Bastrel never switches to enforce by itself. After 7 days in observe, a console line at each start reminds you to review what would have been sanctioned, then to set mode = 'enforce' once it holds no false positive. The first day in observe is stored in the database (bastrel_meta); without a database, there is no reminder. The reminder only concerns an observe mode you chose: under forced observe (invalid config, below), there is no reminder and nothing is stored.
An invalid config never stops Bastrel
Section titled “An invalid config never stops Bastrel”When the sanctions, the score or the evidence settings in config/ are invalid, Bastrel starts anyway, in forced observe: no automatic detection is sanctioned until the config is fixed; bans in force and manual bans still apply. The console lists every error:
[bastrel] ERROR invalid config: Bastrel starts in forced observe (no automatic detection is sanctioned; bans in force and manual bans still apply).[bastrel] - scoring: scoring.halfLifeMs must be a positive number, got -1[bastrel] Fix config/main.lua, config/modules.lua or config/whitelists.lua, then restart the resource. Invalid blocks use their built-in defaults meanwhile.An unknown code in ruleModes or overrides (often a config written for an older version) only gives a warning, and that entry is ignored. An invalid logger, bans or pipeline setting gives a warning and uses its built-in defaults, without forcing observe. A config file that fails to load (for example a syntax error in config/modules.lua) counts as invalid: Bastrel starts in forced observe with the built-in defaults; the server console shows the Lua error of that file.
Lists to calibrate
Section titled “Lists to calibrate”Some rules depend on a list you have to review for your server (config/whitelists.lua). While a list is not marked calibrated = true, the rules that use it stay in observe, even under mode = 'enforce'. At startup in enforce, the console names them:
[bastrel] WARNING mode=enforce but these rules stay in observe until their list is calibrated: entities -> BAS-GE-001 set entities.calibrated = true in config/whitelists.luaExempting a staff member from one module
Section titled “Exempting a staff member from one module”A player with the ACE bastrel.bypass.<module> is not checked by that module: no detection, no score, no sanction, and the module does not cancel what they do (an admin menu keeps working). There is no global bypass. Each exemption used is written once per session and per module in bastrel_staff_actions, and the console sums them up when the player leaves (or when Bastrel stops).
In server.cfg, for example, to exempt your admin group from the movement checks:
add_ace group.admin bastrel.bypass.movement allowadd_principal identifier.license:<license> group.adminModule names: convars, connection, gameevents, netevents, statebags, state, movement, aim, economy, heartbeat. Give a bypass to as few people and modules as you can: an exempted account that gets stolen is not checked.
Detection budget
Section titled “Detection budget”A player who floods one detection (hundreds of forbidden events per second) does not cost the server more than a bounded amount of work. For each player and each detection code, at most pipeline.budget.max detections per pipeline.budget.windowMs (config/modules.lua, default 10 per 10 s) are handled in full. Beyond that, a forbidden game event is still cancelled, but the detection is only counted, and one console line per window gives the counts. The budget is per code: flooding one code never stops another code from being handled.
Language
Section titled “Language”config/main.lua, locale = 'en' or 'fr': the language of the texts shown to players (for example when they are kicked or banned). Any other value counts as en.