7 Commits
Author SHA1 Message Date
Stefan MaierandClaude Opus 5.5 85dba477c3 Accept a client's fire origin only where a hand firing at the target can be, and let hosts turn it off (#486)
As reviewed: the host cannot tell a VR client from a modified flat one,
so a client could claim a hand 0.4 world units to any side and shoot
around a corner without its camera ever being exposed (the line from the
eye to the hand stops shooting through walls, not around edges).

- The hand must be where one firing at the target can be: no more than
  0.05 world units (0.15 m) behind the eye along the line to the target,
  0.2 (0.6 m: a lean and a hand held out) to its side, and 0.1 (0.3 m)
  above the eye (distributed_fire_origin_shape).
- The hands are looked from only after no eye (nor vehicle gun) had a
  line, and the hits only a hand let through are counted in the host's
  log of clients' hits.
- network.fire_origins (true by default; also a dedicated server's
  setting) turns the hand off: from the camera and vehicles' guns only.
- The message is distributed message 93 (92 is now the client's build).
- A client sends its fire origin when it changes and every eighth tick,
  not every tick.

Checked: ninja android builds without warnings in the changed files;
test_fire_origins.py (15 cases with 9 negative controls: ownership,
reach, the store, the resend and its record, and each of the shape's
three limits) passes, run on macOS as 64-bit; the rest of the harness
fails there only where it did before (32-bit layouts); network_format.py
--record adds message 93 and its structs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:00:40 +01:00
MrBruhandClaude Opus 5.5 09123e997c Let a dedicated server keep words out of its chat and its players' names (server.chat_filter, off by default): streamer mode's list by group and severity (slurs from mild, swearing and insults off by default), "censor" starring a line's words, "block" refusing the line and refusing at the door a machine whose name has them (rejection code 7, "name", which an updated game shows as "The host refused: your player name").
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 00:00:42 +13:00
MrBruhandClaude Opus 5.5 d0acb3bd61 Have a client tell the host its build, the GitHub repository it is made from and the mods it plays, which a dedicated server shows in /api/players (client) and logs once: a new distributed message older builds drop as a kind they do not know, so the network version stays 39.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 23:20:52 +13:00
MrBruhandClaude Opus 5.5 1042811584 Give a public dedicated server its text chat, network.text_chat's (on by default, live with sv_set), while a public game a player hosts keeps none: a client follows the host's chat in a game joined from the server browser only when a master server lists it as a dedicated server's, an approved operator's, not on the listing's own word.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 20:33:04 +13:00
MrBruhandClaude Opus 5.5 a8b85a09c0 Let a fleet run the dedicated server: the owner's role over the web from loopback, POST /api/bans and sv_ban_address, sv_stop and sv_restart drains, the players' addresses in events, the server's identity in its status and capabilities in the RCON's hello, and each release's SHA256SUMS signed with the release key (deploy/release-key.pub, tools/release_sign.sh).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 17:21:00 +13:00
MrBruh 5177040890 Ask the official master server, master.opencommunityedition.com, built into the game and the web page, when masters.txt names no master. 2026-10-26 02:26:03 +13:00
MrBruh 815d3a0ca5 Add a dedicated server (halo --server) with its web admin page, RCON, master server listings and the server browser's DEDICATED tab, marking dedicated games in the LAN advertisement and internet listing in network version 39. 2026-10-25 21:37:29 +13:00