Files

50 lines
3.0 KiB
Go

package methods
//
// 趴趴 (Bubble / SocialMedia) contracts for build 4229938.
// Why this file exists: the Bubble panel opens but is empty. BubbleBasePanelStore.lua:32
// calls NewBubbleMgr.AskPostList() on open, which fills postDict from nothing but
// AskMomentsPostSimpleInfos (63452251, NewBubbleMgr.lua:1061-1065). The server used
// to answer that INVOKE with an empty list, so BuildPostList() had nothing to build and
// every tab rendered zero rows.
// What the server actually owns here is only the post instance: an id, which
// SocialMediaConfig row it is (PostConfigId), when it was published and how it is
// flagged. Text, images, video and comment bodies live in tables the client already has
// (SocialMediaConfig 55 rows / SocialMediaCommentConfig 231 rows), so this payload
// is 55 short rows instead of the whole social graph.
// Field order is the wire layout and must not be reordered: UxSerializer writes public fields in
// declaration order and the client's own writer
// (RPCSerializeAuto.lua:8310-8329 Auto.WritePostSimpleClientInfo) emits them in this same
// order. The IL2CPP dump declares PostSimpleClientInfo as an empty class, so the Lua writer is the
// only usable source here (see hard rule 22: treat it as the field list, verify by client log).
//
//
// One comment the player wrote under a post = Auto.WritePostPlayerCommentClientInfo
// (RPCSerializeAuto.lua:8302). Only used by the comment flow (T1-39); the list is empty today.
//
//
// SyncOssBucketInfo(64833344) — where the client should fetch the images referenced by object key.
// This is the missing half of the feature: every 趴卜 post sets
// store.bucketName = SocialMediaConfig.ImageOSS[1] (NewBubbleMgr.lua:883-889), and that
// bare key ("Bubble/xxx.png") only becomes a download URL through AliOssManager, whose
// _bucketName / _endpoint are filled by nothing but this packet
// (AliOssManager.SetOssBucketInfo(bucketName, endpoint), called from
// GameToClientImpl.SyncOssBucketInfo). Nothing in GameAssembly.dll contains an
// aliyuncs.com / oss-cn- string, so there is no compiled-in default — until the server
// pushes this, every image request has nowhere to go and only text renders.
// ⛑ The presence byte is a guess: UXRPCMethodArgs64833344 carries a single info field
// and the official frame has never been captured. If the client logs deserialize failed for
// 64833344, flip this contract to Inline = true (no 0xFF marker) — that is the only
// difference between the two readings.
//
//
// One row of AskMomentsPostSimpleInfos' answer = Auto.WritePostSimpleClientInfo.
// Read back as a list element, so it is not inline: it carries the 0xFF presence byte.
//
//
// Request body of AskMomentsMarkRead(63132673) / AskMomentsPostInfos(63879443): a list of wanted
// post ids. Both count generations turn up in this family (the reference branch needed an Int32
// twin for each), so here only the 7-bit variant is declared — reading it is best-effort and any
// failure falls back to "no ids", which is safe because every id list is a filter, never a proof.
//