package routers import ( "context" "sync" ) var _ = sync.Mutex{} var _ = context.Background // // In-game GM console (ALT+F1) wallet and backpack grants for build 4229938. // The panel calls the native UX.Game.IGmToGamePlayer interface and both commands return void, // so the only observable effect is the push this router sends back: // AddMoney(money, gold, bindingGold, allowDebt) -> SyncMoney (authoritative totals) + SyncMoneyAdd popup // AddItem(itemTemplateId, count, isBind) -> SyncBackpackItemChanged (add or update stack) // The wire shapes are hand-decoded from the client metadata because these two commands have no // generated contract class; everything else keeps using the typed-neutral compatibility fallback. // func GameRouter_GmWallet_AddMoney(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_GmWallet_AddMoney var zero any; return zero } func GameRouter_GmWallet_AddItem(ctx context.Context, conn any, msg any) any { // Router implementation for GameRouter_GmWallet_AddItem var zero any; return zero } // UX.Game.IGmToGamePlayer.AddMoney(money, gold, bindingGold, allowDebt): three 8-byte amounts // followed by one bool (the captured 25-byte panel packet). Gold and binding gold may be absent // in older bodies, so decode whatever complete fields are present and default the rest to zero. func GameRouter_GmWallet_ParseMoneyGrant4229938(ctx context.Context, body []byte) any { // Router implementation for GameRouter_GmWallet_ParseMoneyGrant4229938 var zero any; return zero } // The native panel writes whole amounts as int64 (1 -> 01 00 00 00 00 00 00 00) while the // signature declares the field as a double, so accept either reading: the int64 form of a // genuine double is always astronomically large, and the double form of a whole amount is a // denormal or a nonsense fraction. func GameRouter_GmWallet_ReadAmount4229938(ctx context.Context, body []byte, offset int32) float64 { // Router implementation for GameRouter_GmWallet_ReadAmount4229938 return 0 } // UX.Game.IGmToGamePlayer.AddItem(itemTemplateId, count, isBind) is 9 bytes on the wire. Item // ids and counts are 4-byte fields; tolerate a hypothetical 8-byte variant by clamping instead // of throwing, and always answer OK so the panel never hangs on an unknown body. func GameRouter_GmWallet_ParseItemGrant4229938(ctx context.Context, body []byte) any { // Router implementation for GameRouter_GmWallet_ParseItemGrant4229938 var zero any; return zero } func GameRouter_GmWallet_ClampToUInt32(ctx context.Context, value uint64) uint32 { // Router implementation for GameRouter_GmWallet_ClampToUInt32 return 0 } type MoneyGrant4229938 struct { Money float64 `json:"money"` Gold float64 `json:"gold"` BindingGold float64 `json:"bindingGold"` AllowDebt bool `json:"allowDebt"` } type ItemGrant4229938 struct { TemplateId uint32 `json:"templateId"` Count uint32 `json:"count"` IsBind bool `json:"isBind"` }