package routers import ( "context" "sync" ) var _ = sync.Mutex{} var _ = context.Background // // Weapon-skin surface (build 4229938), ported from the Lyco donor build on 2026-09-26. // Ownership is seeded at login: PlayerWeaponSkinInfo.OwnedSkinIds gets every authored // WeaponSkinConfig id (221 in stock 4229938), which is what makes the skin picker list anything at // all. These handlers then persist the per-character equipped set // (SpiritWeaponSkinDict) and answer empty OK — the client commits the assignment locally. // ⛑ Both bodies are decoded defensively: they are C2S shapes read off the donor's // ClientToGameDelegate.lua serializers, and an unanswered INVOKE would leave the picker waiting // forever, which is worse than a skin the server forgets. // func GameRouter_WeaponSkins_AskSetWeaponSkins(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_WeaponSkins_AskSetWeaponSkins var zero any; return zero } func GameRouter_WeaponSkins_AskSyncWeaponSkinToSpirits(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_WeaponSkins_AskSyncWeaponSkinToSpirits var zero any; return zero } // // Push newly acquired skins (skinId -> acquireTime). With unlock-all the whole catalog is owned // from login, so this stays unused — it is the only channel for granting a skin mid-session and // is kept in shape for that. // func GameRouter_WeaponSkins_PushAddWeaponSkinsAsync(ctx context.Context, conn any, skinIdToAcquireTime map[string]any) any { // Router implementation for GameRouter_WeaponSkins_PushAddWeaponSkinsAsync var zero any; return zero }