50 lines
2.8 KiB
Go
50 lines
2.8 KiB
Go
package methods
|
|
|
|
//
|
|
// 眼界 (Tuite) wire contracts for build 4229938.
|
|
// Why this file exists: the 眼界 app renders nothing but
|
|
// gPlayerManager.infoMinor.bindData.playerTuiteInfo.TuiteList, and every interaction on a row
|
|
// is its own INVOKE. Before these handlers existed the app had no list at all (the login frame
|
|
// carried an empty PlayerTuiteClientInfo) and every detail request fell through to the
|
|
// generic typed default — an empty struct — so tapping a row could only ever show a blank page.
|
|
// Field order is the wire layout and must not be reordered: UxSerializer writes public fields in
|
|
// declaration order and the client's own writer emits them in this same order. Every shape below is
|
|
// transcribed from the client's Lua, which is the only usable source — the IL2CPP dump declares
|
|
// these types as empty classes (hard rule 22).
|
|
// Framing (from BowlingWireContracts.cs §0, re-derived here from the Lua):
|
|
// complex -> 0x00 when null, else 0xFF + fields (Base.WriteComplex)
|
|
// struct -> no marker at all, always written (Base.WriteStruct /
|
|
// Base.WriteStructWrap, and Inline = true here)
|
|
// list7 -> 0x00 when null, else 0xFF + varint(count + 1)
|
|
// string -> 0x00 when null, else varint(len + 1) + UTF8
|
|
//
|
|
//
|
|
// Return body of AskTuiteGetDetail(63653286), AskTuiteGetDetailByConfigId(63950672)
|
|
// and AskInteractTuite(63989368) — Auto.Reader[348], read as
|
|
// Base.ReadStruct, so no presence byte: this is the Inline twin of
|
|
// Auto.ClientTuiteInfo, which the login frame writes as a struct *element* instead
|
|
// (PlayerTuiteClientInfo.TuiteList carries ItemObjectEncoding = Struct).
|
|
//
|
|
//
|
|
// Author of a comment = Auto.WriteClientTuiteRoleInfo (RPCSerializeAuto.lua:2563), written
|
|
// with Base.WriteStruct so it carries no marker.
|
|
// ⛑ Both identity readings are filled on purpose. GetTuiteRoleInfo
|
|
// (SocialNetWorkUtils.lua:59) picks the NPC branch on roleInfo.RoleId <= 0 and the player
|
|
// branch otherwise — and this decompiler inverts comparisons (the same trap as
|
|
// GetTuiteListByPubisher's Publisher ~= publisher, which only makes sense as
|
|
// ==). Whichever way that branch really goes, setting RoleId and ShortPid to
|
|
// the same NPC id and carrying the NPC's name/avatar in Name/AvatarId renders the
|
|
// right author either way.
|
|
//
|
|
//
|
|
// One comment = Auto.Reader[605] / Auto.WriteClientTuiteComment
|
|
// (RPCSerializeAuto.lua:2535). Elements of TuiteCommentListData.CommentList are wrapped in
|
|
// Base.WriteStructWrap, so an element carries no marker of its own.
|
|
//
|
|
//
|
|
// Return body of AskTuiteGetCommentList(63477523) — Auto.Reader[620], read as
|
|
// Base.ReadStruct: Total then a list7 of struct comments.
|
|
// ⛑ No 0xFF marker in front of Total: the default-return body for this method is
|
|
// 00 00 00 00 FF 01 — four zero bytes, then the empty list.
|
|
//
|