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

49 lines
2.4 KiB
Go
Raw Permalink Normal View History

package routers
import (
"context"
"sync"
)
var _ = sync.Mutex{}
var _ = context.Background
//
// Fashion/wardrobe handlers. The client's appearance panel sends
// AskSetSpiritFashionsWithSource when the player confirms a skin. Without a
// server-side handler the request is dropped and the model reverts to the
// login default when the panel closes. We accept the choice and echo it back
// via SyncSetSpiritFashions so the worn skin persists.
//
// ★ 2026-10-02:补上**老版衣柜入口** AskSetSpiritFashions(63347169)(自 7k-v0.6
// GameRouter.Fashion.cs 移植)。它与带 source 的新入口差 2 字节:
// 老包 = [u32 spiritId][wear object],新包 = [u32 spiritId][short source][wear object]。
// 做法是在偏移 4 处补一个 short 8(FashionWearSource.Spirit,小端 = 08 00),
// 然后**走完全同一套**穿戴逻辑 —— 不另起一条分支,避免两套行为漂移。
// ⛑ 已核对主线契约 AskSetSpiritFashionsWithSource.source 就是 short(FashionMethods.cs:11)
// ⇒ 补 2 字节与捐赠端的字节拼接逐字节一致。
func GameRouter_Fashion_AskSetSpiritFashionsWithSource(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Fashion_AskSetSpiritFashionsWithSource
var zero any; return zero
}
func GameRouter_Fashion_ApplyWearAsync(ctx context.Context, conn any, msg any, spiritId uint32, args any) any {
// Router implementation for GameRouter_Fashion_ApplyWearAsync
var zero any; return zero
}
//
// Wardrobe bookkeeping: "mark fashions as seen", "toggle favourite", "read suit list".
// These are INVOKE requests that ask for nothing back — the client only waits for the ack. The
// reference branch answers them with an empty OK, and leaving them unrouted is worse than
// useless: an unanswered INVOKE leaves the caller awaiting forever, which is exactly the
// failure mode that shows up as a wardrobe button that never responds.
// The bodies are deliberately not decoded. They are client-local bookkeeping (read receipts,
// favourite flags), and inventing a contract for bytes we have never seen would risk a decode
// exception on the only path whose job is to always answer.
//
func GameRouter_Fashion_FashionBookkeepingAccept(ctx context.Context, conn any, msg any) any {
// Router implementation for GameRouter_Fashion_FashionBookkeepingAccept
var zero any; return zero
}