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
Ananta-ps/internal/gameserver/routers/game_router_fashion.go
T

50 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}