package methods // // SyncGadgetGridAOIDecrease(68956797) — the world-streaming channel that makes the client // materialize its OWN authored props, so the server never needs a placement table. // This is the server-side equivalent of what AnantaGadgetLoader does by injection: the loader // calls GadgetMgr.SyncGadgetGridAOIAddByIndex(cx, cz, exceptIds, sectorIds, gridIndex) // in-process (frida). The RPC below carries the same information over the wire — the client's // GameSceneToClientImpl.SyncGadgetGridAOIDecrease then loads the cells from its local // GadgetBlob. Verified end-to-end by the donor server (HANDOFF round 12: vending machines, // outfit stations, street signs and elevators appeared with no injection at all). // ⛑️ Naming trap: only the *Decrease* side has a method id. The add is carried inside // GadgetGridAOIIncrease aoiInfo — the same message both adds and removes. // Wire rules — verified against GameAssembly, NOT against the donor handoff (which had the // count encoding backwards and cost a whole session): // · every nullable field = ONE peek byte (0x00 = null and consumed, non-zero = present // and consumed). We emit 0x01. Nested structs carry no marker at all. // · list/dict counts are **BIASED** 7-bit varints: written as count+1, read back as // varint()-1. The count helper in GameAssembly ends with `dec eax` (0x94100A6) and takes // only the reader — there is no raw variant. So an empty list is `01 01`, and writing raw // `01 00` makes the client compute capacity = -1 and throw // `ArgumentOutOfRangeException: Non-negative number required. (Parameter 'capacity')`. // // UX.Game.GridIndex — a 40 m world cell (dump.cs TypeDefIndex 32360). // UX.Game.GadgetClientDropLimitInfo (TypeDefIndex 33129). // UX.Game.GadgetExtraSyncInfo (TypeDefIndex 33131) — per-message drop-limit extras. // // UX.Game.GridAOIDecrease (TypeDefIndex 32361) — "these cells, in these sectors, minus // these ids". Doubles as the add side because the client resolves the cells from its blob. // // // UX.Game.GadgetGridAOIIncrease (TypeDefIndex 33128) — the delta lists. We stream cells only, // so every list here stays empty; reason is what tells the client why it got the push. // // UXRPCMethodArgs68956797 (dump.cs TypeDefIndex 35773). // // Inline = true: the client reader for this method id goes straight into // ReadGadgetGridAOIIncrease (GameAssembly 0x95068FC) and never peeks a root presence byte. // Most other args families DO expect one; this one does not. //