feat(bridge): count the twenty-three chat-title conditions in player.tally (PLAN_REDESIGNS §5) #20

Merged
whitlocktech merged 3 commits from feat/title-conditions into edge 2026-09-29 12:01:03 -05:00
Member

What & why

PLAN_REDESIGNS §5 (D172–D175, D209): chat titles rank twenty-three conditions. The bridge counts them.

  • New player.tally fields: animalKills, weaponKills (by the killfeed's weapon prefab name), headshots, bestPvpM/bestPveM (this interval's longest), apcKills, heliKills, crafted (by item category), built, repaired, healed, rockets, explosives and missions. A field is left out when nothing moved.
  • Ten new void hooks, all in ExpectedHooks:
    • OnEntityTakeDamage: remembers the last player to hurt an APC or helicopter, for a crash that names nobody.
    • OnItemCraftFinished, OnEntityBuilt, OnRocketLaunched, OnMissionSucceeded.
    • OnStructureRepair: counted only when the health has risen by the next tick.
    • OnHealingItemUse and OnPlayerRevive: another player only; a syringe revive counts once.
    • OnExplosiveThrown/OnExplosiveDropped: a damaging TimedExplosive only.
  • npcKills still counts animals, so the public column doesn't change meaning mid-wipe. The site takes human NPCs as the difference (D209).
  • WeaponOf and DistanceOf are split out of DescribeAttacker, so the killfeed and the tally read the same weapon name and distance.
  • Three fixes from the rig's own member names (f67f9e3): the crafter's owner, the mission's assignee as the hook's 3rd argument, and the heal target as object.

Spec: docs docs/rust-title-conditions (PROTOCOL §19.10, PLAN_REDESIGNS §5.8). Site half: Module-Rust feat/title-conditions.

How it was tested

  • node scripts/checkPlugin.js: every hook is void and listed.
  • Compiled on both rigs (rust-oxide on Oxide, rust-carbon on Carbon), 2026-09-29.
  • A read-only probe on the rig checked the item lists and the hook signatures; it has been removed.
  • Not yet walked in game. The org lead deferred §5.7's in-game rows to a later walk (animal and scientist kills by weapon, craft, build and repair, heal and revive, rocket, grenade, APC, heli, mission).

Checklist

  • I have read CONTRIBUTING.md.
  • The change builds and existing tests/checks pass locally.
  • I have added or updated tests/docs where it makes sense.
  • My commits are reasonably scoped with clear messages.

AI-assisted contributions (required)

  • No AI tools were used to produce this contribution.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). I have reviewed and understand
    every change, and take responsibility for it. AI-authored commits are
    marked with a Co-Authored-By / Assisted-By trailer.

License

  • I agree that my contribution is licensed under this project's license
    (GNU GPL v3.0 or later), and I have the right to contribute it.

Merge note: feat/zones-domes (§3) also edits RunicGateway.cs, so whichever merges second needs a small conflict fix.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What & why PLAN_REDESIGNS §5 (D172–D175, D209): chat titles rank twenty-three conditions. The bridge counts them. - **New `player.tally` fields:** `animalKills`, `weaponKills` (by the killfeed's weapon prefab name), `headshots`, `bestPvpM`/`bestPveM` (this interval's longest), `apcKills`, `heliKills`, `crafted` (by item category), `built`, `repaired`, `healed`, `rockets`, `explosives` and `missions`. A field is left out when nothing moved. - **Ten new void hooks, all in `ExpectedHooks`:** - `OnEntityTakeDamage`: remembers the last player to hurt an APC or helicopter, for a crash that names nobody. - `OnItemCraftFinished`, `OnEntityBuilt`, `OnRocketLaunched`, `OnMissionSucceeded`. - `OnStructureRepair`: counted only when the health has risen by the next tick. - `OnHealingItemUse` and `OnPlayerRevive`: another player only; a syringe revive counts once. - `OnExplosiveThrown`/`OnExplosiveDropped`: a damaging TimedExplosive only. - **`npcKills` still counts animals**, so the public column doesn't change meaning mid-wipe. The site takes human NPCs as the difference (D209). - **`WeaponOf` and `DistanceOf`** are split out of `DescribeAttacker`, so the killfeed and the tally read the same weapon name and distance. - **Three fixes from the rig's own member names** (f67f9e3): the crafter's owner, the mission's assignee as the hook's 3rd argument, and the heal target as `object`. Spec: docs `docs/rust-title-conditions` (PROTOCOL §19.10, PLAN_REDESIGNS §5.8). Site half: Module-Rust `feat/title-conditions`. ## How it was tested - `node scripts/checkPlugin.js`: every hook is void and listed. - **Compiled on both rigs** (rust-oxide on Oxide, rust-carbon on Carbon), 2026-09-29. - A read-only probe on the rig checked the item lists and the hook signatures; it has been removed. - **Not yet walked in game.** The org lead deferred §5.7's in-game rows to a later walk (animal and scientist kills by weapon, craft, build and repair, heal and revive, rocket, grenade, APC, heli, mission). ## Checklist - [x] I have read [CONTRIBUTING.md](CONTRIBUTING.md). - [x] The change builds and existing tests/checks pass locally. - [x] I have added or updated tests/docs where it makes sense. - [x] My commits are reasonably scoped with clear messages. ## AI-assisted contributions (required) - [ ] No AI tools were used to produce this contribution. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with a `Co-Authored-By` / `Assisted-By` trailer. ## License - [x] I agree that my contribution is licensed under this project's license (**GNU GPL v3.0 or later**), and I have the right to contribute it. **Merge note:** `feat/zones-domes` (§3) also edits `RunicGateway.cs`, so whichever merges second needs a small conflict fix. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 2 commits 2026-09-29 11:25:08 -05:00
player.tally gains animalKills, weaponKills (by the killfeed's weapon
prefab name), headshots, bestPvpM/bestPveM (this interval's maximum),
apcKills, heliKills, crafted (by item category), built, repaired, healed,
rockets, explosives and missions. Every field is absent when nothing moved.

Ten new void hooks, all in ExpectedHooks: OnEntityTakeDamage (the last
player to hurt an APC or helicopter, for a crash that names nobody),
OnItemCraftFinished, OnEntityBuilt, OnStructureRepair (counted only when
the health rose by the next tick), OnHealingItemUse and OnPlayerRevive
(another player only; a syringe revive counts once), OnRocketLaunched,
OnExplosiveThrown/Dropped (a damaging TimedExplosive only) and
OnMissionSucceeded.

npcKills keeps counting animals too, so the public column does not change
meaning mid-wipe; the site takes human NPCs as the difference (D209).
WeaponOf and DistanceOf are split out of DescribeAttacker so the killfeed
and the tally read one name and one distance.

Not yet compiled on a rig: the rigs' storage is unmounted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
fix(bridge): the three members the rig corrected — crafter owner, mission assignee, heal target
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in -1m28s
f67f9e3b22
Compiled on both rigs (2026-09-29): ItemCraftTask has no owner, so the crafter is ItemCrafter.owner; OnMissionSucceeded credits its third argument, the assignee, since MissionInstance has no accessor for it; OnHealingItemUse takes its target as object, because GiveEffectsTo now takes an IMedicalToolTarget, and counts only a player. GameObject.ToBaseEntity is not in scope for a plugin, so OnEntityBuilt asks GetComponent<BuildingBlock>().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
Owner

Fix this

Fix this
wtclaude added 1 commit 2026-09-29 11:34:32 -05:00
Merge edge into feat/title-conditions: §3's zones and domes
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 6s
f7d5b4d691
One conflict, ExpectedHooks: both phases' hooks are kept (48, all void).
Compiled and loaded on both rigs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
Author
Member

Fixed in f7d5b4d (merged edge in). The one conflict was the ExpectedHooks list: both phases' hooks are kept, 48 in all, every one void (checkPlugin.js passes). The merged bridge compiled and loaded on both rigs, and rg.hooks on Oxide lists both §3's and §5's hooks. It's mergeable again.

Fixed in f7d5b4d (merged `edge` in). The one conflict was the `ExpectedHooks` list: both phases' hooks are kept, 48 in all, every one void (`checkPlugin.js` passes). The merged bridge compiled and loaded on both rigs, and `rg.hooks` on Oxide lists both §3's and §5's hooks. It's mergeable again.
whitlocktech merged commit 428055f6ef into edge 2026-09-29 12:01:03 -05:00
whitlocktech deleted branch feat/title-conditions 2026-09-29 12:01:04 -05:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Rust-Plugins#20
No description provided.