This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Ananta-ps/pkg/protocol/methods/scene_item_grid_methods4229938.go

45 lines
2.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
//