FLAW FIX: +0x38 is m_nFieldSize/m_nFieldOffset, NOT the encoder (live-confirmed)
Live dump of CCSGameRulesProxy.m_pGameRules disproved the documented EncoderDispatchOffset =0x38: the field record at +0x38 holds m_nFieldSize(lo)/m_nFieldOffset(hi), matching the SDK. The '+0x38 encoder' from the EncodeField decomp was a different processed dispatch struct, not this entity-reachable field record. So there is NO stored per-field encode-fn pointer to swap; the encode fn is resolved from the named m_NetworkEncoder at serialize time. Value substitution likely needs a global EncodeField detour + hooked-field filter, not a pointer swap. CONFIRMED LIVE (added sp_dump scan): entity vtable[0] = GetNetworkSerializerInfo -> CNetworkSerializerClassInfo (classname +0x08, count +0x10, field array +0x18); field record m_FieldNameHash +0x00, m_pszFieldName +0x08, size/offset +0x38. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
d2bb436d88c7d0ceca14e4f28009b56ee619f761
Parent: c267df3