主题
GameSystemUI.ShopSystem
OrderQueryResult 双端
命名空间 GameSystemUI.ShopSystem
csharp
public enum OrderQueryResult订单查询结果枚举
枚举值
Success— 查询成功QueryFailed— 查询失败SystemError— 系统错误
OrderRewardRecord 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class OrderRewardRecord订单奖励记录
构造函数
OrderRewardRecord 双端
csharp
public OrderRewardRecord()属性
ResourceId 双端
csharp
public string ResourceId { get; set; }资源ID(GameDataLobbyResource的ID)
ResourceCloudKey 双端
csharp
public string ResourceCloudKey { get; set; }资源云变量Key
Amount 双端
csharp
public long Amount { get; set; }奖励数量
PeriodClaimRequest 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class PeriodClaimRequest周期商品领取请求(客户端 -> 服务端)
构造函数
PeriodClaimRequest 双端
csharp
public PeriodClaimRequest()属性
RequestId 双端
csharp
public Guid RequestId { get; set; }请求ID(用于匹配响应)
ItemId 双端
csharp
public string ItemId { get; set; }商品ID
PeriodClaimResponse 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class PeriodClaimResponse周期商品领取响应(服务端 -> 客户端)
构造函数
PeriodClaimResponse 双端
csharp
public PeriodClaimResponse()属性
RequestId 双端
csharp
public Guid RequestId { get; set; }请求ID(用于匹配请求)
ItemId 双端
csharp
public string ItemId { get; set; }商品ID
Result 双端
csharp
public PeriodClaimResult Result { get; set; }领取结果
Timestamp 双端
csharp
public DateTime Timestamp { get; set; }时间戳
PeriodClaimResult 双端
命名空间 GameSystemUI.ShopSystem
csharp
public enum PeriodClaimResult周期商品领取结果枚举
枚举值
Success = 0— 领取成功ItemNotFound = 1— 商品不存在NotPeriodGoods = 2— 不是周期商品NotPurchased = 3— 未购买/未激活Expired = 4— 有效期已过AlreadyClaimed = 5— 本周期已领取Processing = 6— 正在处理中(有其他领取请求正在处理)SystemError = 99— 系统错误
PurchaseResult 双端
命名空间 GameSystemUI.ShopSystem
csharp
public enum PurchaseResult购买结果枚举(两端通用,用于替代 ErrorMessage 字符串)
枚举值
Success = 0— 购买成功InsufficientResource = 1— 资源不足ItemNotFound = 2— 商品不存在InvalidItemConfig = 3— 商品配置无效(缺少价格或资源Key配置)InvalidQuantity = 7— 购买数量无效(小于等于0或超过单次上限)PurchaseLimitReached = 4— 已达到限购上限SoldOut = 5— 商品已售罄Locked = 6— 商品已锁定OrderProcessing = 10— 有订单正在处理中QueryResourceFailed = 11— 查询资源失败QueryPurchaseLimitFailed = 15— 查询限购数据失败TransactionFailed = 12— 事务执行失败ConcurrentInsufficientResource = 13— 并发扣款导致资源不足ResourceAcquireRejected = 14— 资源获取回调拒绝(OnAcquire 返回 false)SystemError = 99— 系统错误
ResourceSync 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ResourceSync资源同步消息(服务端 -> 客户端) 用于查询响应和主动推送
构造函数
ResourceSync 双端
csharp
public ResourceSync()属性
Reason 双端
csharp
public SyncReason Reason { get; set; }同步原因
Balances 双端
csharp
public Dictionary<string, long> Balances { get; set; }资源余额字典(Key为资源ID,即GameDataLobbyResource的ID)
Timestamp 双端
csharp
public DateTime Timestamp { get; set; }时间戳
ShopItem 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopItem商品运行时数据
构造函数
ShopItem 双端
csharp
public ShopItem()属性
Link 双端
csharp
public IGameLink<GameDataShopItem>? Link { get; set; }商品 Link(唯一标识)
ItemId 双端
csharp
public string ItemId { get; }商品ID(从 Link 获取)
ItemName 双端
csharp
public string ItemName { get; set; }商品名称
Cost 双端
csharp
public IGameLink<GameDataResourceAmount>? Cost { get; set; }购买消耗的资源配置
ImagePath 双端
csharp
public Icon ImagePath { get; set; }商品图片路径
Description 双端
csharp
public string? Description { get; set; }商品描述
PurchaseLimit 双端
csharp
public int PurchaseLimit { get; set; }限购数量(0表示不限购)
PurchasedCount 双端
csharp
public int PurchasedCount { get; set; }已购买数量
TagText 双端
csharp
public string? TagText { get; set; }标签文本(如"剩余99天")
Status 双端
csharp
public ShopItemStatus Status { get; set; }商品状态
LockHint 双端
csharp
public string? LockHint { get; set; }锁定提示(当状态为Locked时显示)
CanPurchase 双端
csharp
public bool CanPurchase { get; }是否可购买
方法
FromGameData 双端
csharp
public static ShopItem FromGameData(IGameLink<GameDataShopItem> link)从配置数据创建商品实例
ShopItemsQueryRequest 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopItemsQueryRequest商品查询请求(客户端 -> 服务端)
构造函数
ShopItemsQueryRequest 双端
csharp
public ShopItemsQueryRequest()属性
ItemIds 双端
csharp
public List<string> ItemIds { get; set; }要查询的商品ID列表(为空则查询所有)
ShopItemsSync 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopItemsSync商品状态同步消息(服务端 -> 客户端) 用于查询响应和主动推送
构造函数
ShopItemsSync 双端
csharp
public ShopItemsSync()属性
Reason 双端
csharp
public SyncReason Reason { get; set; }同步原因
Items 双端
csharp
public List<ShopItemState> Items { get; set; }商品状态列表
Timestamp 双端
csharp
public DateTime Timestamp { get; set; }时间戳
ShopItemState 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopItemState商品状态(运行时数据)
构造函数
ShopItemState 双端
csharp
public ShopItemState()属性
ItemId 双端
csharp
public string ItemId { get; set; }商品ID
PurchasedCount 双端
csharp
public int PurchasedCount { get; set; }已购买数量
CanPurchase 双端
csharp
public bool CanPurchase { get; set; }是否可购买
CanClaim 双端
csharp
public bool CanClaim { get; set; }是否可领取(有效期内且本周期未领取)
EndTime 双端
csharp
public long EndTime { get; set; }有效期结束时间(UTC时间戳,秒) 0=不适用/未购买,>0=有效期结束时间
ShopItemStatus 双端
命名空间 GameSystemUI.ShopSystem
csharp
public enum ShopItemStatus商品状态枚举
枚举值
Available— 可购买SoldOut— 已售罄Locked— 已锁定
ShopOrderQueryRequest 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopOrderQueryRequest订单查询请求(客户端 -> 服务端)
构造函数
ShopOrderQueryRequest 双端
csharp
public ShopOrderQueryRequest()属性
MaxCount 双端
csharp
public int MaxCount { get; set; }最大返回数量(默认50)
ShopOrderQueryResponse 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopOrderQueryResponse订单查询响应(服务端 -> 客户端)
构造函数
ShopOrderQueryResponse 双端
csharp
public ShopOrderQueryResponse()属性
Result 双端
csharp
public OrderQueryResult Result { get; set; }查询结果
Orders 双端
csharp
public List<ShopOrderRecord> Orders { get; set; }订单列表
ShopOrderRecord 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopOrderRecord订单记录(存储在云变量中)
构造函数
ShopOrderRecord 双端
csharp
public ShopOrderRecord()属性
OrderId 双端
csharp
public long OrderId { get; set; }订单ID(全局唯一,由云变量系统生成)
ItemId 双端
csharp
public string ItemId { get; set; }商品ID
Quantity 双端
csharp
public int Quantity { get; set; }购买数量
ResourceId 双端
csharp
public string ResourceId { get; set; }消耗的资源ID(GameDataLobbyResource的ID)
ResourceCloudKey 双端
csharp
public string ResourceCloudKey { get; set; }消耗的资源云变量Key
IsPremiumCurrency 双端
csharp
public bool IsPremiumCurrency { get; set; }消耗的资源是否为真实货币
TotalCost 双端
csharp
public long TotalCost { get; set; }总花费
IsPlatformPayment 双端
csharp
public bool IsPlatformPayment { get; set; }是否由平台支付直接发货产生
PlatformOrderId 双端
csharp
public string PlatformOrderId { get; set; }平台支付订单号(仅平台支付直发货订单有值)
PlatformPaidAmount 双端
csharp
public long PlatformPaidAmount { get; set; }平台实际支付金额(星火币)
Timestamp 双端
csharp
public DateTime Timestamp { get; set; }购买时间
RemainingPurchaseLimit 双端
csharp
public int RemainingPurchaseLimit { get; set; }购买后剩余限购次数(0表示无限购或已用完)
TotalPurchaseLimit 双端
csharp
public int TotalPurchaseLimit { get; set; }总限购次数(0表示无限购)
PurchaseLimitResetType 双端
csharp
public PurchaseLimitResetType PurchaseLimitResetType { get; set; }购买时的限购重置周期
Rewards 双端
csharp
public List<OrderRewardRecord> Rewards { get; set; }购买时应获得的奖励列表
ShopPurchaseRequest 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopPurchaseRequest购买请求消息(客户端 -> 服务端)
构造函数
ShopPurchaseRequest 双端
csharp
public ShopPurchaseRequest()属性
RequestId 双端
csharp
public Guid RequestId { get; set; }请求ID(用于匹配响应)
ItemId 双端
csharp
public string ItemId { get; set; }商品ID
Quantity 双端
csharp
public int Quantity { get; set; }购买数量
ShopPurchaseResponse 双端
命名空间 GameSystemUI.ShopSystem
csharp
public class ShopPurchaseResponse购买响应消息(服务端 -> 客户端)
构造函数
ShopPurchaseResponse 双端
csharp
public ShopPurchaseResponse()属性
RequestId 双端
csharp
public Guid RequestId { get; set; }请求ID(用于匹配请求)
Result 双端
csharp
public PurchaseResult Result { get; set; }购买结果
ItemId 双端
csharp
public string ItemId { get; set; }商品ID
Quantity 双端
csharp
public int Quantity { get; set; }购买数量
Timestamp 双端
csharp
public DateTime Timestamp { get; set; }时间戳
PlatformOrderId 双端
csharp
public string PlatformOrderId { get; set; }平台支付订单号。普通项目货币购买为空,平台成功通知按此字段去重。
ShopSystemClient 仅客户端
命名空间 GameSystemUI.ShopSystem
csharp
public static class ShopSystemClient商店系统客户端 - 处理购买请求和响应 所有操作均为非阻塞,通过事件接收结果
属性
IsPurchasing 仅客户端
csharp
public static bool IsPurchasing { get; }检查是否有购买请求正在处理中
IsClaiming 仅客户端
csharp
public static bool IsClaiming { get; }检查是否有周期领取请求正在处理中
方法
Purchase 仅客户端
csharp
public static bool Purchase(string itemId, int quantity = 1)购买商品(非阻塞,结果通过 OnPurchaseSuccess/OnPurchaseFailed 事件返回)
itemId— 商品IDquantity— 购买数量
返回: 是否成功发送请求
QueryItems 仅客户端
csharp
public static void QueryItems(List<string> itemIds)查询商品状态(非阻塞,结果通过 OnItemsSync 事件返回)
itemIds— 要查询的商品ID列表
QueryResource 仅客户端
csharp
public static void QueryResource(List<string> resourceIds)查询资源余额(非阻塞,结果通过 OnResourceSync 事件返回)
resourceIds— 要查询的资源ID列表(GameDataLobbyResource的ID)
RefreshShop 仅客户端
csharp
public static void RefreshShop(IGameLink<GameDataShop>? shopLink)刷新指定商店的数据(商品状态和资源余额,非阻塞)
shopLink— 商店配置链接
QueryOrders 仅客户端
csharp
public static void QueryOrders(int maxCount = 50)查询订单历史(非阻塞,结果通过 OnOrdersReceived 事件返回)
maxCount— 最大返回数量(默认50)
ClearPurchaseLock 仅客户端
csharp
public static void ClearPurchaseLock()手动清理购买状态锁定(仅在异常情况下使用,如客户端检测到状态不一致)
GetCachedItemState 仅客户端
csharp
public static ShopItemState? GetCachedItemState(string itemId)获取缓存的商品状态
GetCachedResourceBalance 仅客户端
csharp
public static long GetCachedResourceBalance(string resourceId)获取缓存的资源余额
resourceId— 资源ID(GameDataLobbyResource的ID)
GetAllCachedResourceBalances 仅客户端
csharp
public static IReadOnlyDictionary<string, long> GetAllCachedResourceBalances()获取所有缓存的资源余额(Key为资源ID)
CanClaimPeriodReward 仅客户端
csharp
public static bool CanClaimPeriodReward(string itemId)检查周期商品是否可领取
GetEndTime 仅客户端
csharp
public static long GetEndTime(string itemId)获取周期商品有效期结束时间(UTC时间戳,秒)
GetRemainingSeconds 仅客户端
csharp
public static long GetRemainingSeconds(string itemId)获取周期商品剩余秒数(-1=不适用/已过期)
IsPeriodGoodsActive 仅客户端
csharp
public static bool IsPeriodGoodsActive(string itemId)检查周期商品是否在有效期内
ClaimPeriodReward 仅客户端
csharp
public static bool ClaimPeriodReward(string itemId)领取周期商品奖励(非阻塞,结果通过 OnPeriodClaimSuccess/OnPeriodClaimFailed 事件返回)
itemId— 商品ID
返回: 是否成功发送请求
ClearClaimLock 仅客户端
csharp
public static void ClearClaimLock()手动清除领取锁定(紧急情况使用)
GetResultMessage 仅客户端
csharp
public static string GetResultMessage(PurchaseResult result)获取购买结果的本地化消息
GetClaimResultMessage 仅客户端
csharp
public static string GetClaimResultMessage(PeriodClaimResult result)获取周期商品领取结果的本地化消息
事件
OnPurchaseSuccess 仅客户端
csharp
public static event EventHandler<ShopPurchaseResponse>? OnPurchaseSuccess购买成功事件
OnPurchaseFailed 仅客户端
csharp
public static event EventHandler<ShopPurchaseResponse>? OnPurchaseFailed购买失败事件
OnItemsSync 仅客户端
csharp
public static event EventHandler<ShopItemsSync>? OnItemsSync商品状态同步事件(查询响应或推送都会触发)
OnPeriodClaimAvailable 仅客户端
csharp
public static event EventHandler<ShopItemState>? OnPeriodClaimAvailable周期商品可领取事件(每个可领取商品触发一次)
OnResourceSync 仅客户端
csharp
public static event EventHandler<ResourceSync>? OnResourceSync资源同步事件(查询响应或推送都会触发)
OnOrdersReceived 仅客户端
csharp
public static event EventHandler<ShopOrderQueryResponse>? OnOrdersReceived订单查询响应事件
OnPeriodClaimSuccess 仅客户端
csharp
public static event EventHandler<PeriodClaimResponse>? OnPeriodClaimSuccess周期商品领取成功事件
OnPeriodClaimFailed 仅客户端
csharp
public static event EventHandler<PeriodClaimResponse>? OnPeriodClaimFailed周期商品领取失败事件
ShopSystemServer 仅服务端
命名空间 GameSystemUI.ShopSystem
csharp
public static class ShopSystemServer商店系统服务端 - 处理购买逻辑和数据验证(非阻塞)
方法
PushItems 仅服务端
csharp
public static void PushItems(Player player, SyncReason reason, List<ShopItemState> items)向指定玩家推送商品状态变化
player— 目标玩家reason— 同步原因items— 商品状态列表
PushResource 仅服务端
csharp
public static void PushResource(Player player, Dictionary<string, long> balances)向指定玩家推送资源变化
player— 目标玩家balances— 资源余额(Key为资源ID,即GameDataLobbyResource的ID)
BroadcastItems 仅服务端
csharp
public static void BroadcastItems(SyncReason reason, List<ShopItemState> items)向所有玩家广播商品状态变化
reason— 同步原因items— 商品状态列表
PushPurchaseLimitReset 仅服务端
csharp
public static void PushPurchaseLimitReset(Player player, List<string> resetItemIds)向指定玩家推送限购重置通知
player— 目标玩家resetItemIds— 重置的商品ID列表
CleanupOldOrdersAsync 仅服务端
csharp
public static Task<int> CleanupOldOrdersAsync(long userId, int maxCount)清理超出上限的旧订单(保留最新的 maxCount 条) 可用于手动清理订单记录
userId— 用户IDmaxCount— 保留的最大订单数量
返回: 删除的订单数量
DeleteOldestOrdersAsync 仅服务端
csharp
public static Task<int> DeleteOldestOrdersAsync(long userId, int count)删除指定数量的最旧订单
userId— 用户IDcount— 要删除的订单数量
返回: 实际删除的订单数量
事件
OnPurchaseSuccess 仅服务端
csharp
public static event EventHandler<(Player player, string itemId, int quantity)>? OnPurchaseSuccess购买成功事件(可用于日志记录、统计及局内状态刷新)。 平台订单按订单号持久化去重;这是发货提交后的通知, 需要原子持久化的奖励应通过商品 Rewards / 资源 OnAcquire 写入发货事务。
OnPurchaseFailed 仅服务端
csharp
public static event EventHandler<(Player player, string itemId, PurchaseResult reason)>? OnPurchaseFailed购买失败事件
OnPeriodClaimSuccess 仅服务端
csharp
public static event EventHandler<(Player player, string itemId)>? OnPeriodClaimSuccess周期商品领取成功事件
OnPeriodClaimFailed 仅服务端
csharp
public static event EventHandler<(Player player, string itemId, PeriodClaimResult reason)>? OnPeriodClaimFailed周期商品领取失败事件
SyncReason 双端
命名空间 GameSystemUI.ShopSystem
csharp
public enum SyncReason同步原因枚举
枚举值
QueryResponse— 查询响应ItemStateChanged— 商品状态变化ItemAdded— 商品上架ItemRemoved— 商品下架EventStarted— 活动开始EventEnded— 活动结束PurchaseLimitReset— 限购重置ResourceChanged— 资源变化(奖励、GM操作等)PurchaseSuccess— 购买成功(资源和商品状态更新)PeriodClaimReminder— 周期商品可领取提醒(登录时推送)
GameDataPeriodShopItem 双端
命名空间 GameSystemUI.ShopSystem.Data
csharp
public class GameDataPeriodShopItem : GameDataShopItem, IGameData<GameDataPeriodShopItem>, IGameData周期商品配置数据(月卡、周卡等) 继承自 GameDataShopItem,额外支持有效期和周期性领取奖励
构造函数
GameDataPeriodShopItem 双端
csharp
public GameDataPeriodShopItem(GameLink<GameDataShopItem, GameDataPeriodShopItem> link)GameDataPeriodShopItem 双端
csharp
public GameDataPeriodShopItem(IGameLink<GameDataPeriodShopItem> link)属性
ValidityPeriod 双端
csharp
public int ValidityPeriod { get; set; }有效期天数(如30=月卡)
PeriodRewards 双端
csharp
public List<IGameLink<GameDataResourceAmount>> PeriodRewards { get; set; }每日/每周期可领取的奖励列表 注:购买时立即获得的奖励使用基类的 Rewards 字段
ClaimPeriodType 双端
csharp
public PurchaseLimitResetType ClaimPeriodType { get; set; }领取周期类型(默认每日)
- Daily: 每天可领取一次
- Weekly: 每周可领取一次
- Monthly: 每月可领取一次
Link 双端
csharp
public new IGameLink<GameDataPeriodShopItem> Link { get; }GameDataShop 双端
命名空间 GameSystemUI.ShopSystem.Data
csharp
public class GameDataShop : GameDataCategory<GameDataShop>, IGameDataCategory<GameDataShop>, IGameData<GameDataShop>, IGameData商店配置
构造函数
GameDataShop 双端
csharp
public GameDataShop(GameLink<GameDataShop, GameDataShop> link)GameDataShop 双端
csharp
public GameDataShop(IGameLink<GameDataShop> link)属性
ShopName 双端
csharp
public string ShopName { get; set; }商店名称
Description 双端
csharp
public string? Description { get; set; }商店描述
IconPath 双端
csharp
public Icon? IconPath { get; set; }商店图标路径(可选)
Categories 双端
csharp
public List<IGameLink<GameDataShopCategory>> Categories { get; set; }商店分类列表
Resources 双端
csharp
public List<IGameLink<GameDataLobbyResource>> Resources { get; set; }支持的资源类型列表
GameDataShopCategory 双端
命名空间 GameSystemUI.ShopSystem.Data
csharp
public class GameDataShopCategory : GameDataCategory<GameDataShopCategory>, IGameDataCategory<GameDataShopCategory>, IGameData<GameDataShopCategory>, IGameData商店分类配置
构造函数
GameDataShopCategory 双端
csharp
public GameDataShopCategory(GameLink<GameDataShopCategory, GameDataShopCategory> link)GameDataShopCategory 双端
csharp
public GameDataShopCategory(IGameLink<GameDataShopCategory> link)属性
CategoryName 双端
csharp
public string CategoryName { get; set; }分类名称
IconPath 双端
csharp
public Icon? IconPath { get; set; }分类图标路径(可选)
Items 双端
csharp
public List<IGameLink<GameDataShopItem>> Items { get; set; }分类下的商品列表(顺序即为显示顺序)
GameDataShopItem 双端
命名空间 GameSystemUI.ShopSystem.Data
csharp
public class GameDataShopItem : GameDataCategory<GameDataShopItem>, IGameDataCategory<GameDataShopItem>, IGameData<GameDataShopItem>, IGameData商品配置数据
构造函数
GameDataShopItem 双端
csharp
public GameDataShopItem(GameLink<GameDataShopItem, GameDataShopItem> link)GameDataShopItem 双端
csharp
public GameDataShopItem(IGameLink<GameDataShopItem> link)属性
ItemName 双端
csharp
public string ItemName { get; set; }商品名称
ImagePath 双端
csharp
public Icon ImagePath { get; set; }商品图片路径
Description 双端
csharp
public string? Description { get; set; }商品描述
Cost 双端
csharp
public IGameLink<GameDataResourceAmount>? Cost { get; set; }购买消耗的资源
Rewards 双端
csharp
public List<IGameLink<GameDataResourceAmount>> Rewards { get; set; }购买获得的资源列表
PurchaseLimit 双端
csharp
public int PurchaseLimit { get; set; }限购数量(0表示不限购)
PurchaseLimitResetType 双端
csharp
public PurchaseLimitResetType PurchaseLimitResetType { get; set; }限购重置周期(默认不重置)
ResetInterval 双端
csharp
public int ResetInterval { get; set; }重置间隔(根据ResetType含义不同):
- Daily: 每X天重置(1=每天,2=每2天)
- Weekly: 每X周重置(1=每周,2=每2周)
- Monthly: 每X月重置(1=每月,2=每2月)
ResetDayOfWeek 双端
csharp
public DayOfWeek ResetDayOfWeek { get; set; }每周重置时的星期几(仅Weekly类型有效)
MaxPurchasePerTransaction 双端
csharp
public int MaxPurchasePerTransaction { get; set; }单次购买上限(每次弹窗购买时最大数量,默认999)
PurchaseLimitResetType 双端
命名空间 GameSystemUI.ShopSystem.Data
csharp
public enum PurchaseLimitResetType限购重置周期类型
枚举值
None— 不重置(永久限购)Daily— 每日重置(每天0点)Weekly— 每周重置(每周一0点)Monthly— 每月重置(每月1日0点)Yearly— 每年重置(每年1月1日0点)