1. Docs
  2. Sentinel Enforcer: The Full Description

Sentinel Enforcer: The Full Description

(the Workshop page is the executive summary; this is the complete picture)

Sentinel Enforcer is a server-side DayZ mod that reports what happens on your server - sessions, combat, chat, items, vehicles, building, server health - into the dayz.fyi platform as structured, authenticated events. Players who join a server running it see nothing new; it adds no content, no UI, no client download. This page is written for the person who runs the server and wants to know exactly what the mod does, what it costs, what it hooks, and how to turn any part of it off.

If you only want to install it, the short version on the Workshop page is enough. If you are evaluating it for a community that asks hard questions about mods - read on.


What it captures

Everything below is captured on the server and shipped in HMAC-signed batches over HTTPS to the dayz.fyi ingest endpoint. Nothing is read from or sent to players' machines.

Category What you get on the dashboard
Sessions who connected and disconnected, and when
Combat kills, deaths, hits and shots - with weapon, distance and hit zone where the engine provides them
Chat in-game chat messages
Items item pickups and hand/inventory interactions, by item type
Vehicles who drove what, vehicle destruction and despawn
Building and raids base parts placed, dismantled, damaged, destroyed; flags; code-lock access; base part positions
Server health frame time, freezes, restart-cycle trends and the mod's own footprint, every 30 seconds
Server lifecycle boots, the mod set you run, and a previous-session report (crashes, script errors) where your host allows it

Anything the platform does not recognise is stored as an unknown event rather than dropped, so a newer mod never loses data to an older platform.

Optional anti-cheat signals. The mod can contribute observe-only inputs to the dashboard's review tools. It never acts on its own: verdicts, thresholds and review stay with your staff on the dashboard, and take-action (kick / message) is opt-in and human-initiated. The detection methods themselves are deliberately not documented on any public page - see the last section.


Optional add-ons

The core mod captures what vanilla DayZ exposes. Coverage for community mods ships as separate Workshop items so a server never sees an "addon X required" warning for a mod it does not run:

Workshop add-on Adds
Sentinel Enforcer - Expansion DayZ-Expansion Market, Groups, Hardline, Quests events
Sentinel Enforcer - VPPAdminTools VPP admin command logging
Sentinel Enforcer - CodeLock Code Lock access logging
Sentinel Enforcer - BreachingCharge breaching charge placed / detonated / defused

Subscribe only to the ones matching the mods your server runs.


Installation

  1. Add the server on dayz.fyi: open your community page, hit Add server, and copy the sntl_v1... token it gives you.
  2. Subscribe to the Workshop item on your server's Steam account.
  3. Copy @SentinelEnforcer/ from the Workshop folder into your server root.
  4. Drop keys/sentinel_enforcer.bikey into your server's keys/ directory.
  5. Launch parameters: -serverMod=@SentinelEnforcer. (Add -doLogs -adminLog if you also want DayZ's own admin log files - not required by Sentinel.)
  6. Paste the token into <server profile>/SentinelEnforcer/config.json's BootstrapToken field, then start the server. It connects already linked to your account a minute or two after the server finishes booting - no claim code needed.

Server already running the mod? Booting with no token configured is the fallback path: the mod self-registers and writes a one-time claim code to <server profile>/SentinelEnforcer/claim.txt (also printed in the server log). Paste the clm_... code at dayz.fyi/claim and events start flowing. Both paths end in the same place.

Tip - server name and map on the dashboard: set steamQueryPort in serverDZ.cfg (DayZ's default is 27016) so the platform can query your server and fill in its real name and map. Without it you set the name yourself under Edit settings. Multi-server box: give each instance its own port.

The mod's settings live in <server profile>/SentinelEnforcer/config.json (in mod terms, $profile:SentinelEnforcer\config.json) - in your profile directory, not inside the mod - so moving or re-declaring the mod never loses them.


What it costs your server

These are measured numbers, not estimates, taken on populated production servers and cross-checked against the engine's own frame-rate log:

  • Total main-thread cost at 100 players: 0.2-0.6% of wall clock. Nearly all of it is the upload pipeline (serialising and signing batches); the mod's per-frame work is about 0.02% of a frame.
  • Uploads are sliced across ticks in bounded pieces so a flush cannot stall the simulation; the in-memory event queue is bounded (10,000 events) and has not dropped an event in weeks of fleet telemetry.
  • The mod measures its own footprint on every server and reports it alongside your server's frame health, so the numbers above are visible on your dashboard rather than taken on faith. If you want to understand what "server FPS" and frame time mean for players, start with how DayZ multiplayer actually works.

Every hook the mod owns - and how to switch it off

A DayZ mod works by attaching small pieces of code to engine events ("hooks"). This is what the mod is, so it should be fully visible. Three places carry the same list:

  • Your server's script log, at every boot: one [Sentinel] chain-link ... line per hook family stating what it is for, what it cannot do, and how to switch it off - so if you are ever investigating a problem and searching your log, the first-party answer is already there.
  • Your dashboard: the same list with each family's live on/off state.
  • This table.

Every hook calls the original engine code and passes control through; no vanilla gameplay behaviour is overridden. The kind tells you what class of thing each one is: counter means it adds one to a number and returns; observe means it reads or reports and never alters an outcome; seam marks the single hook that touches shared state, which is off by default.

what the mod hooks what it is for what it cannot do how to switch it off cost
frame stats (counter) measures how long each server frame takes - the smoothness numbers on your dashboard alter frame pacing, tick order, or any game logic; it reads the clock, updates a histogram, and returns core (Enabled=false in config.json disables Sentinel entirely) about 0.02% of a frame, every frame
mission lifecycle (observe) starts Sentinel with the mission and notes player join, ready, respawn, leave and chat for the session record block a login, change a spawn, or alter what the engine does with any event; it observes and passes through core (Enabled=false in config.json disables Sentinel entirely) negligible (runs only when the event happens)
player events (observe) records hits, deaths, connections, vehicle seat changes and certain server-rejected requests for the kill feed and session history change damage, deaths, or connection outcomes; every override calls the original and returns its result unchanged dashboard toggle negligible (runs only when the event happens)
input seam (seam) an optional, off-by-default capture of some item moves alter the move itself; off by default, auto-disabled when a known conflicting mod is present, and the only hook that reads shared engine state config.json HookInputSeam=false nothing while off (the default)
inventory command (observe) records server-rejected inventory actions for staff review accept or reject an action; it reads the engine verdict after the engine has made it config.json HookInventoryCommand=false negligible (runs only when the event happens)
item moved (observe) records completed item relocations (player, container, ground, vehicle) for the item history move, block, or alter items; it fires after the engine completed the move config.json HookItemMoved=false a cached check per item move when armed; nothing measurable when not
ce sweep counter (counter) counts Central Economy item visits per heartbeat - a world-size and server-health number, not player data change loot spawning, despawn timers, or any economy decision; one counter increment, then the original runs config.json HookCESweepCounter=false one counter increment per loot-economy visit (about 0.03 ms per second on an idle Chernarus)
activation counters (counter) counts how often infected AI, wildlife and vehicle physics tick per second - server-health numbers, not player data change AI behavior, animal behavior, or vehicle physics; one counter increment, then the original runs config.json HookActivationCounters=false one counter increment per AI / vehicle tick (about 0.1 ms per second at 100 active infected)
event rate counters (counter) counts how often the server handles item moves, hits, deaths and remote calls - rate numbers used to size server load, with no detail about who or what; apart from the cargo check listed here it adds no new hooks, it only counts inside hooks listed under item_moved and player_events change any of those outcomes; each is one counter increment and then the original runs, and the cargo check returns the engine's own answer unaltered config.json HookEventRateCounters=false one counter increment each time a counted event happens
entity census (counter) counts how many items, players, infected, vehicles and triggers get created and destroyed - a world-size and churn number, not player data prevent, delay, or alter any creation or destruction; it adds one counter increment to constructors and destructors that were already running config.json HookEntityCensus=false one counter increment when an entity is created or destroyed
structure sweep (observe) records base part positions over time move or alter structures; it checks positions periodically and reports config.json HookStructureSweep=false a short periodic position check of registered base parts
building events (observe) records base parts placed, dismantled, damaged and destroyed, and flags destroyed, for base logs change building rules, damage, or raid outcomes; it records what the engine already did dashboard toggle negligible (runs only when the event happens)
codelock (observe) records code-lock access attempts for base security logs change whether a lock opens or what the code is dashboard toggle negligible (runs only when the event happens)
weapon fire (observe) records shots fired for combat analysis alter ballistics, ammunition, or hit results dashboard toggle negligible (runs only when the event happens)
pickup (observe) records item pickups for the item history block or alter a pickup; it fires after the pickup completed dashboard toggle negligible (runs only when the event happens)
magazine (observe) records certain inventory-action anomalies for staff review change the action outcome; it reads the engine result and passes it through dashboard toggle negligible (runs only when the event happens)
admin log (observe) forwards the server admin-log lines so they also appear on the dashboard suppress or alter admin-log lines; the engine still writes them exactly as before dashboard toggle negligible (runs only when the event happens)
vehicle events (observe) records vehicle destruction and despawn for vehicle history change vehicle damage, despawn, or physics dashboard toggle negligible (runs only when the event happens)

Owner switches (config.json, default on unless noted): HookActivationCounters, HookCESweepCounter, HookEventRateCounters, HookEntityCensus, HookItemMoved, HookInventoryCommand, HookStructureSweep, and HookInputSeam (an owner veto over a hook that is off by default anyway). Setting one to false turns that family into a pure pass-through for the whole session and stops its fields from being sent at all. A false in your config.json cannot be re-enabled from the dashboard - the switch is yours. Enabled=false turns the whole mod off without uninstalling it.


Privacy and data flow

  • Server-side only. The mod runs on the server; players' machines are never touched and nothing is downloaded to clients.
  • Same identifiers vanilla already gives admins. Steam ID and DayZ ID - what the server's own admin log exposes. No extra personal information.
  • Item types, not inventories. "Player picked up an SKS", never what a player owns.
  • Authenticated. Every batch is HMAC-SHA-256 signed with a per-server secret; the platform rejects anything it cannot verify.
  • Your data, your org. Events are stored under your organisation on dayz.fyi, where your staff access tiers decide who sees what.

Compatibility and coexistence

  • DayZ 1.29, Windows and Linux servers - pure Enforce Script, no native DLL, identical on both.
  • Validated against every DayZ game update before the Workshop item is refreshed (the validation badge in the dayz.fyi footer is written by that run).
  • Vanilla vehicle classes: the vehicle-activity health counter hooks the eight vanilla car classes directly (count-only, always calls the original) because of how those classes are built. A future DayZ update that changes them can require a Sentinel hotfix; that is exactly what the per-update validation exists to catch, and the Workshop update is the fix.
  • Conflicts: none known. The one hook that reads shared engine state is off by default and switches itself off when a known conflicting mod is present. If you ever suspect an interaction with another mod, flip the relevant family off in config.json (you do not need to uninstall anything) and tell us which mod - that report is how the conflict list grows.

What this page deliberately does not document

The anti-cheat review tools on the dashboard use observations the mod can contribute. How those observations are interpreted - signals, thresholds, methods - is not described here or on any public page, for the same reason this site's cheating guide does not publish detection recipes: a public, machine-complete description is a gift to exactly the people it targets. What you get instead is the contract above: every hook is named, what it cannot do is stated, and every family can be switched off by you. Staff who need operating detail get it inside the platform, not from a page anyone can read.


Support

  • Platform: dayz.fyi
  • Discord: link in the dayz.fyi footer - bug reports and integration questions go there.
  • Workshop: the item page carries the executive summary and links back here.