SIGN IN SIGN UP

feat: implement force-resend (Option D, gated off) — live per-client spoof application

Hooks the serializer singleton's WriteFields virtual (vtable slot 14 / +0x70) — the
path-agnostic consumer of the delta field-index list — and, for a hooked entity,
sorted-inserts the hooked field's flattened-leaf index into that CUtlVector<int> so the
field gets encoded and the value-substitution hook fakes it live (no full update, no
real-value change). Cross-platform (serializer global resolved from gamedata, slot index
identical Linux/Windows).

- ForceResend.cs: IVirtualHook slot 14; gated Enabled (off by default, hook installed
  lazily on first enable so the validated path is untouched); leaf-index cache built from
  the serializer record walk (NoteSerializer, called from WflShim only while enabled);
  CUtlVector<int> sorted-insert with a capacity guard (no engine-allocator growth — skips
  if the list is full, counted).
- ISendProxyManager.SetForceResend(bool); SendProxyManager wires it; sp_forceresend <0|1>
  example command; SerializerSingleton global resolved in ResolveNativeTargets.

RE-confirmed mechanism (docs/FORCE_RESEND.md); only the flattened-leaf index numbering is
by-construction (DFS) — verify on first enable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
cfe94d76e7da191061ea93f6708126d63ee8f1e1
Parent: c8ff1a1