主题
GameCore.RewardSystem
Reward 双端
命名空间 GameCore.RewardSystem
csharp
public class Reward : IExecutableObject, IExecutionContext, IGameObject, IGameObject<GameDataReward>, ICostSpender, ICooldownOwner, IPropertyOwner, ISyncIdOwner, IEventSender奖励的运行时实例,负责执行 GameDataReward 定义的奖励逻辑(发放物品、技能、Buff 等)。 支持异步执行、费用验证和次数限制。
构造函数
Reward 双端
csharp
protected internal Reward(IGameLink<GameDataReward> link, ITarget defaultTarget, IExecutionContext creationContext)属性
Parent 双端
csharp
public IExecutableObject? Parent { get; }Shared 双端
csharp
public ExecutionParamShared Shared { get; }Source 双端
csharp
public ITarget Source { get; }DefaultTarget 双端
csharp
public ITarget DefaultTarget { get; }RewardedPlayer 双端
csharp
public Player? RewardedPlayer { get; }Link 双端
csharp
public IGameLink<GameDataReward> Link { get; }Cache 双端
csharp
public GameDataReward Cache { get; }Result 双端
csharp
public CmdResult Result { get; set; }State 双端
csharp
public ExecutionState State { get; set; }Cooldown 双端
csharp
public CooldownActive? Cooldown { get; set; }Charge 双端
csharp
public CooldownCharge? Charge { get; set; }AggregatorWeakReference 双端
csharp
public WeakReference<EventAggregator> AggregatorWeakReference { get; }方法
Publish 双端
csharp
public virtual void Publish<TEvent>(TEvent eventToPublish)GetPublisher 双端
csharp
public Action<TEvent>? GetPublisher<TEvent>()ValidateAsync 仅服务端
csharp
public ValueTask<CmdResult> ValidateAsync()ExecuteAsync 仅服务端
csharp
public ValueTask<CmdResult> ExecuteAsync()执行奖励
RewardAbility 双端
命名空间 GameCore.RewardSystem
csharp
public class RewardAbility : Reward技能奖励运行时对象
备注
用于存储奖励授予的技能实例,以便用户在事件中访问创建的技能。
属性
CreatedAbility 双端
csharp
public Ability? CreatedAbility { get; set; }创建的技能实例
RewardBuff 双端
命名空间 GameCore.RewardSystem
csharp
public class RewardBuff : RewardBuff奖励运行时对象
备注
用于存储奖励授予的Buff实例,以便用户在事件中访问创建的Buff。
属性
CreatedBuff 双端
csharp
public Buff? CreatedBuff { get; set; }创建的Buff实例
RewardEffect 双端
命名空间 GameCore.RewardSystem
csharp
public class RewardEffect : Reward效果奖励的运行时对象
备注
继承自 Reward,专门用于效果奖励。 包含效果类型以及实际创建的效果实例引用。
属性
CreatedEffect 双端
csharp
public Effect? CreatedEffect { get; set; }创建的效果实例
备注
包含实际创建的效果实例引用。 如果效果创建失败,此值可能为 null。
RewardItem 双端
命名空间 GameCore.RewardSystem
csharp
public class RewardItem : Reward物品奖励的运行时对象
备注
继承自 Reward,专门用于物品奖励。 保存实际创建的物品实例引用。
属性
CreatedItems 双端
csharp
public List<Item> CreatedItems { get; }创建的物品实例列表
备注
包含实际创建的所有物品实例引用。 如果物品添加到背包失败,这些实例会掉落在地上。
方法
AddCreatedItem 双端
csharp
public void AddCreatedItem(Item item)添加创建的物品实例
RewardUnit 双端
命名空间 GameCore.RewardSystem
csharp
public class RewardUnit : Reward单位奖励运行时对象
备注
用于存储奖励创建的单位实例,以便用户在事件中访问创建的单位。
属性
CreatedUnits 双端
csharp
public List<Unit> CreatedUnits { get; }创建的单位实例列表
备注
由于可以配置创建多个单位,因此使用列表存储。
方法
AddCreatedUnit 双端
csharp
public void AddCreatedUnit(Unit unit)添加创建的单位到列表
GameDataReward 双端
命名空间 GameCore.RewardSystem.Data
csharp
public abstract class GameDataReward : GameDataCategory<GameDataReward>, IExecutableData, IGameData, IEventSender, IGameDataCategory<GameDataReward>, IGameData<GameDataReward>奖励数据基类,定义可发放给玩家的各类奖励(物品、技能、Buff、效果等)
构造函数
GameDataReward 双端
csharp
public GameDataReward(GameLink<GameDataReward, GameDataReward> link)GameDataReward 双端
csharp
public GameDataReward(IGameLink<GameDataReward> link)属性
Validators 双端
csharp
public Validator Validators { get; set; }领取奖励前的验证条件
Rarity 双端
csharp
public double? Rarity { get; set; }奖励的稀有度/价值等级
备注
用于表示奖励的价值和稀有程度,主要用途: UI 显示:显示奖励的稀有度标识(如颜色、星级) 排序:按价值对奖励进行排序 统计:分析奖励分布 注意:此字段不影响奖励在 RewardSet 中的选择概率。 选择概率由 WeightedLink.Weight 控制。
Cost 双端
csharp
public Cost? Cost { get; set; }领取奖励的成本要求(如消耗货币、道具等)
CostLocation 双端
csharp
public CostLocation CostLocation { get; set; }指定由谁支付奖励的成本
备注
控制 Cost 从哪个实体扣除: Default:优先接收者,如果接收者无效则回退到源 Source:始终由施法者/攻击者支付(如击杀掉落) Receiver:始终由接收者支付(如商店购买)
MaxRewardTimes 双端
csharp
public FuncInt? MaxRewardTimes { get; set; }最大领取次数限制(基于用户账号)
MaxRewardTimesResetOption 双端
csharp
public UserDataResetOption? MaxRewardTimesResetOption { get; set; }最大领取次数的重置规则
MaxRewardTimesKey 双端
csharp
public string? MaxRewardTimesKey { get; set; }用于存储领取次数的 CloudData 键
备注
重要:此字段决定了奖励计数的共享策略: 设置了此值:使用该键作为计数器,多个不同的 Reward 可以设置相同的 Key 来共享同一个计数器 未设置(null):自动使用 Link.HashCode 作为键,每个 Reward 数据独立计数 使用场景: 独立计数:不设置此字段,每个奖励有自己的次数限制(例如:每个任务的首次完成奖励) 共享计数:设置相同的 Key,多个奖励共享次数限制(例如:"daily_quest_reward" 让所有每日任务共享一个每日领取次数)
AggregatorWeakReference 双端
csharp
public WeakReference<EventAggregator> AggregatorWeakReference { get; }方法
Execute 双端
csharp
public void Execute(IExecutableObject context)Validate 双端
csharp
public virtual CmdResult Validate(IExecutableObject context)CreateReward 仅服务端
csharp
public virtual Reward CreateReward(ITarget defaultTarget, IExecutionContext context)GameDataRewardAbility 双端
命名空间 GameCore.RewardSystem.Data
csharp
public class GameDataRewardAbility : GameDataReward, IGameData<GameDataRewardAbility>, IGameData技能奖励数据表
备注
用于配置技能类型的奖励。可以指定技能类型、初始等级等。 支持"升级现有技能"选项,允许多次获取时提升技能等级而不是创建新的技能实例。
构造函数
GameDataRewardAbility 双端
csharp
public GameDataRewardAbility(GameLink<GameDataReward, GameDataRewardAbility> link)GameDataRewardAbility 双端
csharp
public GameDataRewardAbility(IGameLink<GameDataRewardAbility> link)属性
Ability 双端
csharp
public IGameLink<GameDataAbility> Ability { get; set; }要授予的技能数据表链接
Level 双端
csharp
public FuncUInt? Level { get; set; }初始等级
UpgradeExisting 双端
csharp
public bool UpgradeExisting { get; set; }多次获取时是否提升等级
备注
如果为true,当目标已有相同类型的技能时,会提升其等级而不是创建新实例。 如果提升后会超过LevelMax,则奖励验证失败。
Link 双端
csharp
public new IGameLink<GameDataRewardAbility> Link { get; }方法
Execute 仅服务端
csharp
public override void Execute(IExecutableObject context)Validate 仅服务端
csharp
public override CmdResult Validate(IExecutableObject context)CreateReward 仅服务端
csharp
public override Reward CreateReward(ITarget defaultTarget, IExecutionContext context)GameDataRewardBuff 双端
命名空间 GameCore.RewardSystem.Data
csharp
public class GameDataRewardBuff : GameDataReward, IGameData<GameDataRewardBuff>, IGameDataBuff奖励数据表
备注
用于配置Buff类型的奖励。可以指定Buff类型、叠加层数、持续时间等。 支持"增加层数"选项,允许多次获取时累加层数而不是创建新的Buff实例。
构造函数
GameDataRewardBuff 双端
csharp
public GameDataRewardBuff(GameLink<GameDataReward, GameDataRewardBuff> link)GameDataRewardBuff 双端
csharp
public GameDataRewardBuff(IGameLink<GameDataRewardBuff> link)属性
Buff 双端
csharp
public IGameLink<GameDataBuff> Buff { get; set; }要授予的Buff数据表链接
Stack 双端
csharp
public FuncUInt? Stack { get; set; }初始层数(默认为Buff数据表配置的StackStart)
Duration 双端
csharp
public FuncTimeEffect? Duration { get; set; }持续时间(可选,覆盖Buff数据表配置的Duration)
StackBehavior 双端
csharp
public RewardBuffStackBehavior StackBehavior { get; set; }多次获取时的叠加行为
Link 双端
csharp
public new IGameLink<GameDataRewardBuff> Link { get; }方法
Execute 仅服务端
csharp
public override void Execute(IExecutableObject context)Validate 仅服务端
csharp
public override CmdResult Validate(IExecutableObject context)CreateReward 仅服务端
csharp
public override Reward CreateReward(ITarget defaultTarget, IExecutionContext context)GameDataRewardEffect 双端
命名空间 GameCore.RewardSystem.Data
csharp
public class GameDataRewardEffect : GameDataReward, IGameData<GameDataRewardEffect>, IGameData奖励效果配置,发放奖励时对目标施加指定效果。
构造函数
GameDataRewardEffect 双端
csharp
public GameDataRewardEffect(GameLink<GameDataReward, GameDataRewardEffect> link)GameDataRewardEffect 双端
csharp
public GameDataRewardEffect(IGameLink<GameDataRewardEffect> link)属性
Effect 双端
csharp
public IGameLink<GameDataEffect>? Effect { get; set; }要施加的效果,目标为奖励的默认目标(如领取者)。
Link 双端
csharp
public new IGameLink<GameDataRewardEffect> Link { get; }方法
Execute 仅服务端
csharp
public override void Execute(IExecutableObject context)CreateReward 仅服务端
csharp
public override Reward CreateReward(ITarget defaultTarget, IExecutionContext context)GameDataRewardItem 双端
命名空间 GameCore.RewardSystem.Data
csharp
public class GameDataRewardItem : GameDataReward, IGameData<GameDataRewardItem>, IGameData构造函数
GameDataRewardItem 双端
csharp
public GameDataRewardItem(GameLink<GameDataReward, GameDataRewardItem> link)GameDataRewardItem 双端
csharp
public GameDataRewardItem(IGameLink<GameDataRewardItem> link)属性
Item 双端
csharp
public IGameLink<GameDataItem> Item { get; set; }Amount 双端
csharp
public FuncUInt Amount { get; set; }Stack 双端
csharp
public FuncUInt? Stack { get; set; }Level 双端
csharp
public FuncUInt? Level { get; set; }Quality 双端
csharp
public FuncUInt? Quality { get; set; }DropAtSource 双端
csharp
public bool DropAtSource { get; set; }是否在源位置创建物品(掉落)而非添加到目标背包
备注
当设置为 true 时,物品会在 Source 奖励的给予者位置创建并掉落在地上。 当设置为 false 时(默认),物品会尝试添加到目标单位的背包中。 这个属性主要用于实现击杀掉落机制:被击杀的敌人(Source)在其位置掉落物品给玩家(Target)拾取。
Link 双端
csharp
public new IGameLink<GameDataRewardItem> Link { get; }方法
Execute 仅服务端
csharp
public override void Execute(IExecutableObject context)CreateReward 仅服务端
csharp
public override Reward CreateReward(ITarget defaultTarget, IExecutionContext context)GameDataRewardSet 双端
命名空间 GameCore.RewardSystem.Data
csharp
public class GameDataRewardSet : GameDataReward, IGameData<GameDataRewardSet>, IGameData奖励集合,支持顺序或随机加权选择多个奖励
备注
奖励集合允许配置多个奖励,并通过灵活的执行策略来决定实际授予哪些奖励: 顺序执行:按照列表顺序依次执行奖励 随机执行:基于权重随机选择奖励 唯一选择:随机选择时避免重复 数量控制:控制最少和最多执行的奖励数量
构造函数
GameDataRewardSet 双端
csharp
public GameDataRewardSet(GameLink<GameDataReward, GameDataRewardSet> link)GameDataRewardSet 双端
csharp
public GameDataRewardSet(IGameLink<GameDataRewardSet> link)属性
Rewards 双端
csharp
public required WeightedLinkComplex<IGameLink<GameDataReward>?> Rewards { get; set; }获取或设置奖励列表,支持加权随机选择
备注
每个奖励可以配置一个权重值,当 WeightedRandom 为 true 时, 系统会根据权重进行随机选择。权重越高,被选中的概率越大。权重为 0 的奖励永远不会被选中。
SetFlags 双端
csharp
public RewardSetFlags SetFlags { get; set; }获取或设置奖励集合的执行标志和行为配置
MinCount 双端
csharp
public FuncUInt? MinCount { get; set; }最少执行的奖励数量
备注
未设置时默认为 0。
MaxCount 双端
csharp
public FuncUInt? MaxCount { get; set; }最多执行的奖励数量
备注
未设置时默认按奖励列表数量执行;顺序模式下即依次执行全部奖励一次。
Link 双端
csharp
public new IGameLink<GameDataRewardSet> Link { get; }方法
Execute 仅服务端
csharp
public override void Execute(IExecutableObject context)Validate 仅服务端
csharp
public override CmdResult Validate(IExecutableObject context)GameDataRewardUnit 双端
命名空间 GameCore.RewardSystem.Data
csharp
public class GameDataRewardUnit : GameDataReward, IGameData<GameDataRewardUnit>, IGameData单位奖励数据表
备注
用于配置单位类型的奖励。可以指定单位类型、数量、生成位置等。
构造函数
GameDataRewardUnit 双端
csharp
public GameDataRewardUnit(GameLink<GameDataReward, GameDataRewardUnit> link)GameDataRewardUnit 双端
csharp
public GameDataRewardUnit(IGameLink<GameDataRewardUnit> link)属性
Unit 双端
csharp
public IGameLink<GameDataUnit> Unit { get; set; }要创建的单位数据表链接
Amount 双端
csharp
public FuncUInt? Amount { get; set; }创建的单位数量(默认为1)
DropAtSource 双端
csharp
public bool DropAtSource { get; set; }是否在Source位置创建(默认为true)
备注
如果为true,单位将在Source(施法者)的位置创建,所属玩家也是Source的玩家。 如果为false,单位将在Target(目标)的位置创建,所属玩家是Target的玩家。 适用于召唤、击杀掉落等场景。
Link 双端
csharp
public new IGameLink<GameDataRewardUnit> Link { get; }方法
Execute 仅服务端
csharp
public override void Execute(IExecutableObject context)Validate 仅服务端
csharp
public override CmdResult Validate(IExecutableObject context)CreateReward 仅服务端
csharp
public override Reward CreateReward(ITarget defaultTarget, IExecutionContext context)CostLocation 双端
命名空间 GameCore.RewardSystem.Data.Enum
csharp
public enum CostLocation奖励成本的支付方
备注
指定在领取奖励时,由谁来支付 Cost 中定义的成本。 这个设计允许实现多种奖励场景,例如: 玩家购买奖励:Receiver 支付(玩家花费金币购买商店物品) 击杀掉落:Source 支付(敌人"支付"自己的战利品) 任务奖励:Default(智能判断,通常无成本或由接收者支付)
枚举值
Default— 默认模式:优先由奖励接收者支付,如果接收者不是有效实体则由奖励给予者支付Source— 由奖励给与者(出售者/掉落者)支付成本Receiver— 由接收者(获得奖励者/购买者)支付成本
RewardBuffStackBehavior 双端
命名空间 GameCore.RewardSystem.Data.Struct
csharp
public enum RewardBuffStackBehaviorBuff奖励的叠加行为
枚举值
CreateNew— 总是创建新的Buff实例(默认行为)AddStack— 如果目标已有相同类型的Buff,则增加层数而不是创建新实例
RewardSetFlags 双端
命名空间 GameCore.RewardSystem.Data.Struct
csharp
public class RewardSetFlags奖励集合的执行标志配置
备注
用于控制 GameDataRewardSet 的执行行为,包括选择策略、验证规则等。
构造函数
RewardSetFlags 双端
csharp
public RewardSetFlags()属性
WeightedRandom 双端
csharp
public bool WeightedRandom { get; set; }是否使用加权随机选择
备注
当设置为 true 时,系统会根据每个奖励的权重随机选择。 当设置为 false 时,按照列表顺序依次执行奖励。
ValidateChildren 双端
csharp
public bool ValidateChildren { get; set; }是否验证子奖励
备注
当设置为 true 时,如果某个奖励验证失败,会跳过该奖励并尝试下一个。 当设置为 false 时,即使奖励验证失败也会计入执行次数。
Unique 双端
csharp
public bool Unique { get; set; }是否要求选择的奖励完全唯一(不重复)
备注
仅在 WeightedRandom 为 true 时有效。 当设置为 true 时,每个奖励最多被选中一次。 如果奖励数量少于要求的执行次数,则只执行现有奖励数量。
PreferUnique 双端
csharp
public bool PreferUnique { get; set; }是否优先选择唯一奖励
备注
仅在 WeightedRandom 为 true 时有效。 当设置为 true 时,会尽量避免重复选择同一个奖励。 但如果奖励数量不足,可以重复选择已经执行过的奖励。