45 lines
2.9 KiB
Go
45 lines
2.9 KiB
Go
package methods
|
||
|
||
//
|
||
// Scene items (可破坏物 / 街头道具 / 路灯 / 念动力目标) — the second client-owned world layer.
|
||
// Where gadgets ride SyncGadgetGridAOIDecrease(68956797), scene items ride
|
||
// SyncDestructibleGridAOIDecrease(68969593). The method name is destructible-flavoured
|
||
// but the receiver is the scene-item loader: GameSceneToClientImpl.SyncDestructibleGridAOIDecrease
|
||
// fans out to SceneItemMgr.SyncSceneItemGridAOIRemoveDecrease / …Increase / …AddDecrease,
|
||
// and …AddDecrease ends in SyncSceneItemGridAOIAddByIndex(x, z, exceptIds, sectorIdList,
|
||
// playerStandardIndex) — literally the call AnantaWorldMod makes by frida injection every 700 ms.
|
||
// ⇒ Pushing this mid from the server IS world_mod, without the injector.
|
||
// ⛑️⛑️ THE MID IS THE WHOLE TRICK (donor round 23C, user-verified on their build):
|
||
// · 68934309 SyncDestructibleGridAOIIncrease args carry ONLY aoiInfo
|
||
// (dump.cs TypeDefIndex 35754) — its receiver is bookkeeping. Pushing cells through it
|
||
// does nothing; that false negative is what made this channel look dead for rounds.
|
||
// · 68969593 carries the 3-part body (TypeDefIndex 35784: aoiInfo + addGridInfo + removeGridInfo)
|
||
// and its reader is ReadDestructibleGridAOIIncrease + ReadGridAOIDecrease ×2.
|
||
// · General law: for every *GridAOI* family the wire carrier is the *Decrease* twin.
|
||
// Do NOT regress this mid to 68934309.
|
||
// Wire rules are the same family rules as the gadget grid (handoff §A1 / 硬规则 29):
|
||
// · args root has NO presence byte (the reader goes straight into the first struct);
|
||
// · nullable field = ONE peek byte (0x00 null / non-zero present), 0x01 emitted;
|
||
// · list counts are BIASED 7-bit varints — empty list is `01 01`, never `01 00`.
|
||
//
|
||
//
|
||
// UX.Game.DestructibleInfo (dump.cs TypeDefIndex 33110) — one authored scene item.
|
||
// ⛑️ Only used here as the element type of an EMPTY list. The client's reader is polymorphic
|
||
// (ReadStaticDestructibleInfo jump table: 0=null, 1=BASE, 2=Dynamic, 3=Static, 4=Task —
|
||
// the order is NOT the declaration order in dump.cs), so a NON-EMPTY list needs a hand-written
|
||
// body: per item a tag byte (1 = BASE) followed by every field all-raw. Serializing this class
|
||
// directly would omit that tag and the client would parse the base fields as TaskDestructibleInfo
|
||
// ⇒ `parameter=DestructibleInfo` failures (donor round 23B, cost a full session).
|
||
// Keep the list empty unless that raw writer exists.
|
||
//
|
||
// UX.Game.SkillDestructibleInfo (TypeDefIndex 33113).
|
||
//
|
||
// UX.Game.DestructibleGridAOIIncrease (struct, TypeDefIndex 33104). Note it is SHORTER than
|
||
// the gadget twin: no activeIds / inactiveIds. Declaration order = dump field order.
|
||
//
|
||
//
|
||
// UXRPCMethodArgs68969593 (TypeDefIndex 35784) — three parts, in this order, no root marker.
|
||
// GridAOIDecrease is the very same struct the gadget grid uses (TypeDefIndex 32361), so it is
|
||
// reused rather than redeclared: sector list / building id / cell list / except ids.
|
||
//
|