feat(buckets): add b5 string + b6 byte-array substitution; production API cleanup
- New ISendProxyManager: IBaseEntity overloads, Hook(...)/SetUniform(...) collapsed
from Hungarian-suffixed names; deleted dead SourceMod-compat surface (HookArrayInt,
HookGameRules*, HookPropChange, SendProxyResult/SendPropType, _hooks/_changeHooks).
- FieldSubstitution: b5 string (point valuePtr at a char* slot) + b6 byte-array
({data,count} struct); all managed alloc moved before the native save/rewind/emit
so it can't corrupt mid-rewrite; stripped useless native-read try/catch (IsUserPtr
is the guard) down to the 3 real ones (unmanaged boundary, callback invoke, install).
- Bounded the string/byte-array stackalloc (MaxSubstituteBytes) — caller-controlled
size on the send worker stack would otherwise overflow it.
- NativeUtil/SerializerProbe: dropped try/catch around pointer derefs, gate on IsUserPtr.
- gamedata EncoderBucket5/6 (+3 r +80/+96 d); README + RE docs updated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> P
Prefix committed
646a2ea2b3c4475b65f6fdbeaeeac7d6fd2c102f
Parent: 7bb469d