What Are BattlEye Filters?
BE filters are an optional feature of BattlEye Anti-Cheat for Arma games that provide customisable,
server-side protection against common exploits. Mod developers usually ship filter files with their server
releases — place the .txt files in your dedicated server config directory under .\BattlEye\.
The eraser1/BE_AEG ↗ tool
can automatically generate scripts.txt exception lines by reading your scripts.log — useful when you need to whitelist new entries quickly.
More community security tools and preconfigured BEC setups are on our Community Repos page.
How They Work
BE searches all scripts running on the client (scripts.txt) and specific command parameters
(all other filter files) for the keywords you define. When a match is found, it takes the configured action:
| Code | Action |
|---|---|
| 1 | Log to .log file only |
| 2 | Log to console only |
| 3 | Log to both |
| 4 | Kick — no log |
| 5 | Kick + log to .log file (recommended) |
| 6 | Kick + log to console |
| 7 | Kick + log to both |
5 for kicks. It creates separate .log files per
restriction type in the \BattlEye\ folder, making review far easier than one huge console log.
Console logging (6/7) is only useful if you need a live stream over RCon — it
increases server resource usage and floods connect/disconnect messages.
Syntax — Adding Keywords
Add one rule per line: the action code, a space, then the keyword.
5 keyword
5 "key word" // spaces → use double quotes
5 "key \"word\"" // literal " → escape with \
5 "key \(word\)" // regex metacharacters → escape with \
// ( ) { } [ ] ^ $ . | * + ? and \ all need escaping
scripts.txt does not support regex.
The only characters that need escaping there are " and \ itself.
All other filter files support full regex.
Use broad prefixes that cover many variants rather than listing every classname:
// Inefficient — one rule per classname: 5 HMMWV_DES_EP1 5 HMMWV_M1035_DES_EP1 5 HMMWV_Ambulance_DES_EP1 // Efficient — one rule covers all humvees: 5 HMMWV_
To catch everything (empty allow-list), use empty double quotes:
5 ""
Syntax — Adding Exceptions
Append exceptions on the same line after the keyword, separated by a space. Two operators are available:
| Operator | Rule | Best for |
|---|---|---|
! |
Parameter must contain the exception string | Allowing a family of variants with one exception (e.g. all HMMWV_Ambulance*) |
!= |
Parameter must exactly equal the exception string | Tight allow-lists — use this whenever possible |
5 keyword !exception // contains 5 keyword !=exception // exact match 5 "key word" !"keyword ex" // spaces → quote the exception 5 "key word" !"key \"ex\"" // quotes → escape with \
Example with ! (contains):
// createvehicle.txt 5 "HMMWV_" !"HMMWV_Ambulance" // ✓ Not kicked — parameter contains "HMMWV_Ambulance": createVehicle ["HMMWV_Ambulance_DES_EP1", getPosATL player, [], 10, "NONE"]; // ✗ Kicked — parameter does not contain "HMMWV_Ambulance": createVehicle ["HMMWV_DES_EP1", getPosATL player, [], 10, "NONE"];
Same filter with != (exact match) — only bare HMMWV_Ambulance passes:
5 "HMMWV_" !="HMMWV_Ambulance" // ✗ Kicked — full classname is not an exact match: createVehicle ["HMMWV_Ambulance_DES_EP1", getPosATL player, [], 10, "NONE"]; // ✓ Not kicked — exact match: createVehicle ["HMMWV_Ambulance", getPosATL player, [], 10, "NONE"];
scripts.txt exceptions match the entire statement, not a single parameter.
The statement can span multiple lines — use \n for line breaks and \" for inner quotes:
5 keyword !="if (2 > 1) then\n{\n systemChat \"keywordException\"\n};"
Prefer != (exact match) over ! wherever possible to minimise what passes through.
scripts.txt.
Filter File Reference
Each .txt file watches a specific command or set of commands. Click any row to expand its details.
Kick entries suggest action 5; Log entries suggest action 1.
addbackpackcargo.txt ▼
When players take gear from containers (crates, bodies, vehicle cargo), add[Backpack/Magazine/Weapon]CargoGlobal runs automatically on their client — these will appear in the logs. The filter only applies to items added to global objects from the client; local objects do not trigger it.
addmagazinecargo.txt ▼
Same global/local behaviour as addbackpackcargo.txt — taking items from large containers (ammo boxes, safes, vehicle cargo) triggers this filter automatically and can generate many hits per second.
addweaponcargo.txt ▼
Same global/local and large-container behaviour applies as the other cargo filters above.
attachto.txt ▼
R3F and BTC scripts use attachTo on vehicles. DayZ mods use it for dragging injured players, placing tents, and Epoch buildables — add exceptions for these as needed.
createvehicle.txt ▼
Arma creates animals automatically on the client when environment AI is enabled. Some explosion effects (SmallSecondary, HelicopterExploBig, HelicopterExploSmall) are also created client-side on vehicle destruction — add exceptions for these.
deletevehicle.txt ▼
In DayZ mods the client deletes zombies when leaving an area. Epoch clients also delete safes and certain buildables on removal — add exceptions for these.
mpeventhandler.txt ▼
publicvariable.txt ▼
MPF (remExField, remExFP) and the Arma 3 equivalent BIS_fnc_MP_packet use public variables. Antihack scripts like Infistar also broadcast variables. Most mods broadcast at least one variable from the client on player login.
publicvariableval.txt ▼
Logs are written to publicvariable.log alongside publicvariable.txt entries — logging everything there makes separate logging here redundant. This filter also applies to values passed via call RE or BIS_fnc_MP. Be careful: if your mod uses public variables with wildcard values (player names, text input), a cheater could craft input that triggers a keyword.
remotecontrol.txt ▼
remoteexec.txt ▼
This file is tied to waypointcondition.txt and waypointstatement.txt — exceptions needed in those files must also be added here. Logic units often have predefined init code in cfgVehicles; add exceptions as needed.
scripts.txt ▼
This is the most resource-intensive filter — it searches every script running on the client, not just specific command parameters. Keep the keyword count low and favour broad command names over specific strings or variable names. No regex support — only " and \ need escaping. Scripts from all sources run on the client (mission PBO, server addon scripts, Arma game functions) — test thoroughly to ensure all legitimate exceptions are covered before deploying.
selectplayer.txt ▼
In the lobby, the client calls selectPlayer on whichever unit type occupies the chosen slot in mission.sqm. In DayZ mods it's also called when changing clothing.
setdamage.txt ▼
Exceptions must be written with six decimal places due to Arma's number format (e.g. !=0.100000). Epoch uses setDamage for player-zombie attacks, vehicle repairs, and chopping trees — add exceptions for each.
setpos.txt ▼
Height-adjusted buildings placed in the editor may auto-generate setPos calls in their init field, which runs on all clients. Move those calls server-side to avoid false kicks. R3F and BTC scripts also use setPos on vehicles.
setvariable.txt ▼
setvariableval.txt ▼
Logs are written to setvariable.log alongside setvariable.txt entries, making separate logging redundant. Same wildcard-value caution as publicvariableval.txt applies.
teamswitch.txt ▼
waypointcondition.txt ▼
When a waypoint completes, Arma automatically calls setWaypointStatements again with condition "true". If you use this command at all, always add !="true" as an exception here and in remoteexec.txt.
waypointstatement.txt ▼
When a waypoint completes, Arma resets the statement to "". If you use this command at all, always add !="" as an exception here and in remoteexec.txt.
BEServer.cfg — Rate Limits
Found in your \BattlEye\ folder. While the server is running it is automatically renamed to
BEServer_active_xxxx.cfg for security. It must contain at least RConPassword and
MaxPing. The Max[Command]PerInterval lines kick players who exceed a command
rate threshold — useful for catching scripted cheating that relies on spamming commands.
RConPassword ChangeMe MaxPing 300 MaxAddBackpackCargoPerInterval 20 1 MaxAddMagazineCargoPerInterval 400 1 MaxAddWeaponCargoPerInterval 75 1 MaxCreateVehiclePerInterval 150 1 MaxDeleteVehiclePerInterval 100 1 MaxSetDamagePerInterval 3 1 MaxSetPosPerInterval 10 1
Format: Max[Command]PerInterval [max uses] [seconds].
Start strict (low values) and increase until no legitimate kicks occur — some actions only trigger under
specific game conditions, so test each scenario carefully.
| Setting | Limits | Abuse potential |
|---|---|---|
MaxSetPosPerInterval | setPos[ASL/ATL] on global objects | Teleport 50+ players or move 300+ objects near-instantly |
MaxSetDamagePerInterval | setDamage on global objects | Kill all players, destroy all vehicles or buildings |
MaxAddBackpackCargoPerInterval | addBackpack[Cargo][Global] | Mass-spawn backpacks |
MaxAddMagazineCargoPerInterval | addMagazine[Cargo][Global] | Mass-spawn items; also triggers when looting large containers |
MaxAddWeaponCargoPerInterval | addWeapon[Cargo][Global] | Mass-spawn weapons; also triggers when looting large containers |
MaxDeleteVehiclePerInterval | deleteVehicle on global objects | Delete all vehicles or buildings; triggers on client-side cleanup scripts |
MaxCreateVehiclePerInterval | Global createVehicle, createUnit, createAgent | Mass-spawn objects to crash or grief the server |
setPos hundreds of times in under
a second. Always spawn and position global buildings on the server machine only to avoid
false kicks from MaxSetPosPerInterval.
bans.txt — Manual Banning
Every player connection is logged to the server console with their GUID and IP. Find these in the
console log file (set via logFile in server.cfg) or via an RCon tool like DaRT.
12:06:56 BattlEye Server: Player #3 Hunter (88.111.22.333:2304) connected 12:06:57 BattlEye Server: Player #3 Hunter - GUID: 5c7d9d6ec60869824ae5f1e6cadd1111 (unverified) 12:06:58 BattlEye Server: Player #3 Hunter - Legacy GUID: ef68da39ea1bb994aba33caa16552222
:2304).
Format: GUIDorIP time (Reason) — time -1 = permanent; a positive number = hours. Add IP bans near the top of the file, GUID bans with the other GUIDs:
88.111.22.333 -1 (Hunter - spawningGear) 5c7d9d6ec60869824ae5f1e6cadd1111 -1 (Hunter - spawningGear)
Save the file then reload bans in your RCon tool — no server restart needed. To unban, delete both lines, save, and reload.
Automatic Banning
Kicks are of limited use if a cheater can simply rejoin. BE filters have no built-in autoban — you need a third-party tool. The easiest option is the BEC ScriptBan Plugin, part of BattlEye Extended Controls. A preconfigured BEC setup for DayZ Epoch is on our Community Repos page.
The plugin reads kick restriction numbers from your filter files and automatically adds the player's GUID to
bans.txt. Configure each restriction type in reason.py:
SERVERS = ["Config.cfg"]
waypointstatement_reason = {
"0" : ["WPS0 - appeal at myWebsite.com", 0]
}
// Bans for waypointstatement restriction #0; ban time 0 = indefinite
scripts.txt, publicvariableval.txt,
and setvariableval.txt.
Cheaters can remotely execute code on other clients — an innocent player can trigger a restriction they
have no control over and receive an automatic ban. Despite this risk, auto-banning is still strongly
recommended for most other restriction types.
⚠ Minimum Recommended Configuration
At bare minimum, configure these filter files to block the most dangerous remote execution vectors. There is no reason not to have these — they require very little customisation:
mpeventhandler.txtremotecontrol.txtremoteexec.txtteamswitch.txtwaypointcondition.txtwaypointstatement.txt
Also apply the security settings in your server.cfg — see the
Bohemia Wiki: server.cfg Security ↗.
Never run without BattlEye enabled.
scripts.txt exceptions by reading your scripts.log — useful for quickly building a valid exception list.
Note: may not work reliably with BigEgg's Antihack & Admin Tools, as those scripts use randomised variable names that change every restart.
More community security tools and a preconfigured BEC setup (BattlEye Extended Controls) are on the
Community Repos page.
Guide originally written by eBayShopper and posted on OpenDayZ.net ↗. Adapted and reformatted for DZE Tools.