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