Skip to content

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; }
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 : Reward

Buff奖励运行时对象

备注

用于存储奖励授予的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,则奖励验证失败。

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>, IGameData

Buff奖励数据表

备注

用于配置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; }

多次获取时的叠加行为

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; }

要施加的效果,目标为奖励的默认目标(如领取者)。

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)拾取。

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; }

最多执行的奖励数量

备注

未设置时默认按奖励列表数量执行;顺序模式下即依次执行全部奖励一次。

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的玩家。 适用于召唤、击杀掉落等场景。

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 RewardBuffStackBehavior

Buff奖励的叠加行为

枚举值 ​

  • 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 时,会尽量避免重复选择同一个奖励。 但如果奖励数量不足,可以重复选择已经执行过的奖励。