docs(issues): #8/#9/#11 filed; #10 wired (KillerNotification)
Files four new issues created by the 2026-04-25 PDB-discovery sprint:
#8 (DONE 2026-04-25) — pdb-extract tool, shipped 69d884a
#9 (OPEN) — function-map address-correction sweep
(Phase E will close)
#10 (DONE 2026-04-25) — wire KillerNotification (0x01AD); orphan
parser at GameEvents.ParseKillerNotification
existed but was never registered. This commit
adds CombatState.OnKillerNotification +
KillLanded event, registers the dispatcher
handler, and adds a regression test.
#11 (OPEN) — spell metadata loader (spells.csv → SpellTable)
(Phase F will close)
Code change is minimal — three lines of dispatch + a 12-line
CombatState method with a typed event for future killfeed UI.
818 tests passing (+1 KillerNotification).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
0a429a980c
commit
567078803f
4 changed files with 113 additions and 0 deletions
|
|
@ -107,6 +107,13 @@ public static class GameEventWiring
|
|||
var p = GameEvents.ParseAttackDone(e.Payload.Span);
|
||||
if (p is not null) combat.OnAttackDone(p.Value.AttackSequence, p.Value.WeenieError);
|
||||
});
|
||||
dispatcher.Register(GameEventType.KillerNotification, e =>
|
||||
{
|
||||
// ISSUES.md #10 — orphan parser, never registered before. The
|
||||
// server fires this after a player lands a killing blow.
|
||||
var p = GameEvents.ParseKillerNotification(e.Payload.Span);
|
||||
if (p is not null) combat.OnKillerNotification(p.Value.VictimName, p.Value.VictimGuid);
|
||||
});
|
||||
|
||||
// ── Spells ────────────────────────────────────────────────
|
||||
dispatcher.Register(GameEventType.MagicUpdateSpell, e =>
|
||||
|
|
|
|||
|
|
@ -57,6 +57,14 @@ public sealed class CombatState
|
|||
/// <summary>An attack commit completed (0x01A7). WeenieError = 0 on success.</summary>
|
||||
public event Action<uint /*attackSeq*/, uint /*weenieError*/>? AttackDone;
|
||||
|
||||
/// <summary>
|
||||
/// Fires when the server confirms the player landed a killing blow
|
||||
/// (GameEvent <c>KillerNotification (0x01AD)</c>). Event payload is
|
||||
/// the victim's display name + their server GUID. Used by killfeed UI
|
||||
/// (future panel) and any plugin scoring kill counts.
|
||||
/// </summary>
|
||||
public event Action<string /*victimName*/, uint /*victimGuid*/>? KillLanded;
|
||||
|
||||
public readonly record struct DamageIncoming(
|
||||
string AttackerName,
|
||||
uint AttackerGuid,
|
||||
|
|
@ -116,6 +124,16 @@ public sealed class CombatState
|
|||
public void OnEvasionAttackerNotification(string defenderName)
|
||||
=> MissedOutgoing?.Invoke(defenderName);
|
||||
|
||||
/// <summary>
|
||||
/// Server confirmation that the player landed a killing blow on a
|
||||
/// target. Wire source: GameEvent <c>KillerNotification (0x01AD)</c>
|
||||
/// — the parser at <c>GameEvents.ParseKillerNotification</c> shipped
|
||||
/// alongside victim/defender notifications but was never registered
|
||||
/// for dispatch until 2026-04-25 (per ISSUES.md #10).
|
||||
/// </summary>
|
||||
public void OnKillerNotification(string victimName, uint victimGuid)
|
||||
=> KillLanded?.Invoke(victimName, victimGuid);
|
||||
|
||||
public void OnEvasionDefenderNotification(string attackerName)
|
||||
=> EvadedIncoming?.Invoke(attackerName);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue