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

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.
//