Skip to content

feat(dayz): adopt the battleye RCon protocol - #29

Merged
ValgulNecron merged 1 commit into
mainfrom
feat/dayz-battleye
Jul 14, 2026
Merged

ValgulNecron merged 1 commit into
mainfrom
feat/dayz-battleye

Conversation

@ValgulNecron

Copy link
Copy Markdown
Collaborator

Gameplane's agent now implements BattlEye RCon (ValgulNecron/Gameplane#143), so DayZ goes from no console at all to a working console, players list and moderation.

  • rcon.protocol: battleye, port 2305, password from BE_PASSWORD.
  • ServerZ only generates a beserver_x64.cfg if one of BE_IP/BE_PORT/BE_PASSWORD is set, so all three are set. BE_IP pins the listener to loopback — the agent sidecar shares the pod's network namespace and reaches it there, and an RCon port that isn't on a public interface can't be brute-forced from the internet.
  • players parses BattlEye's table format, skipping its header, separator and (N players in total) footer (verified against a sample reply).
  • kick/ban deliberately left unset: BattlEye moderates by player number, not name. Wiring them to the name the list returns would silently target the wrong player — worse than not offering them.
  • No lifecycle.stop: DayZ persists continuously rather than on a save command, so a SIGTERM isn't the data-loss risk it is for Minecraft or Valheim. Shipping a stop sequence that doesn't reliably work across builds would be a lie.

Also teaches validate.py the battleye protocol — its allowlist is what stops a module shipping a console that can never connect, so it correctly rejected this until the agent implemented it.

🤖 Generated with Claude Code

Gameplane's agent now speaks BattlEye RCon, so DayZ goes from having no
console at all to a working console, a players list and moderation.

ServerZ only writes a beserver_x64.cfg when one of BE_IP/BE_PORT/
BE_PASSWORD is set, so all three are: the operator injects the generated
password into BE_PASSWORD (written out as RConPassword), and BE_IP pins
the listener to loopback — the agent sidecar shares the pod's network
namespace and reaches it there, while an RCon port that isn't on a public
interface can't be brute-forced from the internet.

players parses BattlEye's table, skipping its header and the
'(N players in total)' footer. kick/ban are deliberately left unset:
BattlEye moderates by player number rather than name, so wiring them to
the name the list returns would silently target the wrong player.

No lifecycle.stop — DayZ persists continuously rather than on a save
command, so a SIGTERM isn't the data-loss risk it is for Minecraft, and
shipping a stop sequence that doesn't reliably work would be a lie.

Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com>
@ValgulNecron
ValgulNecron merged commit 88a4659 into main Jul 14, 2026
1 check passed
@ValgulNecron
ValgulNecron deleted the feat/dayz-battleye branch July 14, 2026 21:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant