Skip to content

GameCore.Execution ​

Effect 双端 ​

命名空间 GameCore.Execution

csharp
public class Effect : IExecutableObject, IExecutionContext, IGameObject, IGameObject<GameDataEffect>, IActorScopeOwner, IActorScopeContext, IEventSender

效果节点的运行时实例,负责执行 GameDataEffect 定义的逻辑(伤害、治疗、搜索、创建单位等)。 由效果树递归创建,共享施法者、目标等上下文。

构造函数 ​

Effect 双端 ​

csharp
protected internal Effect(IGameLink<GameDataEffect> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

csharp
public IGameLink<GameDataEffect> Link { get; }

Level 双端 ​

csharp
public uint Level { get; }

Cache 双端 ​

csharp
public GameDataEffect Cache { get; }

Caster 双端 ​

csharp
public Entity Caster { get; }

Source 双端 ​

csharp
public ITarget Source { get; set; }

DefaultTarget 双端 ​

csharp
public ITarget DefaultTarget { get; set; }

Target 双端 ​

csharp
public ITarget? Target { get; set; }

Shared 双端 ​

csharp
public ExecutionParamShared Shared { get; set; }

Parent 双端 ​

csharp
public IExecutableObject? Parent { get; }

LocVarUnit 双端 ​

csharp
public QuickDictionary<LocVarType, Unit>? LocVarUnit { get; set; }

LocVarPoint 双端 ​

csharp
public QuickDictionary<LocVarType, ScenePoint>? LocVarPoint { get; set; }

Result 双端 ​

csharp
public CmdResult Result { get; set; }

State 双端 ​

csharp
public ExecutionState State { get; set; }

IsPreValidatorOnly 双端 ​

csharp
public bool IsPreValidatorOnly { get; init; }

IsTransient 双端 ​

csharp
public virtual bool IsTransient { get; }

LaunchScene 双端 ​

csharp
public Scene LaunchScene { get; }

PersistIndex 双端 ​

csharp
public uint? PersistIndex { get; set; }

Facing 双端 ​

csharp
public virtual Angle? Facing { get; }

Scale 双端 ​

csharp
public virtual float? Scale { get; }

IsRoot 双端 ​

csharp
public bool IsRoot { get; }

AggregatorWeakReference 双端 ​

csharp
public WeakReference<EventAggregator> AggregatorWeakReference { get; }

方法 ​

LocVarUnitAction 双端 ​

csharp
protected static Action<Effect>? LocVarUnitAction(LocVarType? nullableType, ITarget target)

LocVarPointAction 双端 ​

csharp
protected static Action<Effect>? LocVarPointAction(LocVarType? nullableType, ITarget target)

SetLocVar 双端 ​

csharp
public void SetLocVar(LocVarType type, Unit newTarget)

SetLocVar 双端 ​

csharp
public void SetLocVar(LocVarType type, ScenePoint newTarget)

FactoryCreateChild 双端 ​

csharp
public Effect? FactoryCreateChild(IGameLink<GameDataEffect> link, ITarget defaultTarget, bool preValidateOnly = false)

FactoryCreateTree 双端 ​

csharp
public static Effect? FactoryCreateTree(IGameLink<GameDataEffect> link, ITarget defaultTarget, Entity caster, bool preValidateOnly = false)

ExecuteChild 双端 ​

csharp
public virtual CmdResult<Effect> ExecuteChild(IGameLink<GameDataEffect>? link, ITarget? target = null, Action<Effect>? initialAction = null)

Execute 双端 ​

csharp
public CmdResult Execute()

ClassValidate 双端 ​

csharp
protected virtual CmdResult ClassValidate(ValidatorEffect? validator)

Validate 双端 ​

csharp
public CmdResult Validate()

PreValidate 双端 ​

csharp
public CmdResult PreValidate(ITarget defaultTarget)

ResolveTarget 双端 ​

csharp
public bool ResolveTarget()

GetMissile 双端 ​

csharp
protected virtual Entity? GetMissile()

ToString 双端 ​

csharp
public override string ToString()

GetUnitProperty 双端 ​

csharp
public double? GetUnitProperty(IGameLink<GameDataUnitProperty> property, PropertyFetchMethod method = PropertyFetchMethod.SnapshotBeforeProperty)

Start 双端 ​

csharp
protected internal virtual void Start()

Publish 双端 ​

csharp
public virtual void Publish<TEvent>(TEvent eventToPublish)

GetPublisher 双端 ​

csharp
public Action<TEvent>? GetPublisher<TEvent>()

字段 ​

Random 双端 ​

csharp
protected static readonly Random Random

EffectBuffAdd 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectBuffAdd : Effect, IGameObject<GameDataEffectBuffAdd>, IGameObject

构造函数 ​

EffectBuffAdd 双端 ​

csharp
protected internal EffectBuffAdd(IGameLink<GameDataEffectBuffAdd> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Buff 双端 ​

csharp
public Buff? Buff { get; set; }
csharp
public new IGameLink<GameDataEffectBuffAdd> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectBuffAdd Cache { get; }

EffectCreateItem 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectCreateItem : Effect, IGameObject<GameDataEffectCreateItem>, IGameObject

创建物品效果的运行时上下文,用于跟踪物品创建过程中的状态

构造函数 ​

EffectCreateItem 双端 ​

csharp
protected internal EffectCreateItem(IGameLink<GameDataEffectCreateItem> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

CreatedItems 双端 ​

csharp
public List<Item>? CreatedItems { get; set; }

获取或设置已创建的物品列表

ItemLinkCache 双端 ​

csharp
protected internal IGameLink<GameDataItem>? ItemLinkCache { get; set; }

获取或设置物品类型链接缓存(验证阶段设置)

ItemOwner 双端 ​

csharp
protected internal Player? ItemOwner { get; set; }

获取或设置物品所有者(验证阶段设置)

csharp
public new IGameLink<GameDataEffectCreateItem> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectCreateItem Cache { get; }

EffectCreateUnit 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectCreateUnit : Effect, IGameObject<GameDataEffectCreateUnit>, IGameObject

构造函数 ​

EffectCreateUnit 双端 ​

csharp
protected internal EffectCreateUnit(IGameLink<GameDataEffectCreateUnit> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

CreatedUnits 双端 ​

csharp
public List<Unit>? CreatedUnits { get; set; }

UnitLinkCache 双端 ​

csharp
protected internal IGameLink<GameDataUnit>? UnitLinkCache { get; set; }

UnitOwner 双端 ​

csharp
protected internal Player? UnitOwner { get; set; }
csharp
public new IGameLink<GameDataEffectCreateUnit> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectCreateUnit Cache { get; }

EffectDamage 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectDamage : Effect, IGameObject<GameDataEffectDamage>, IGameObject

构造函数 ​

EffectDamage 双端 ​

csharp
protected internal EffectDamage(IGameLink<GameDataEffectDamage> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Damage 双端 ​

csharp
public Damage? Damage { get; set; }
csharp
public new IGameLink<GameDataEffectDamage> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectDamage Cache { get; }

EffectEnumerateUnits 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectEnumerateUnits : Effect, IGameObject<GameDataEffectEnumerateUnits>, IGameObject

遍历单位集合效果,对集合中的每个单位执行指定效果。 与 EffectSearch 不同,被遍历的目标来自自定义公式而非搜索结果。

构造函数 ​

EffectEnumerateUnits 双端 ​

csharp
protected internal EffectEnumerateUnits(IGameLink<GameDataEffectEnumerateUnits> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

EnumeratedUnits 双端 ​

csharp
public IEnumerable<Unit>? EnumeratedUnits { get; set; }

被遍历的单位集合缓存。只能在效果执行后访问。

csharp
public new IGameLink<GameDataEffectEnumerateUnits> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectEnumerateUnits Cache { get; }

EffectIssueOrder 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectIssueOrder : Effect, IGameObject<GameDataEffectIssueOrder>, IGameObject

构造函数 ​

EffectIssueOrder 双端 ​

csharp
protected internal EffectIssueOrder(IGameLink<GameDataEffectIssueOrder> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Order 双端 ​

csharp
public Order? Order { get; set; }
csharp
public new IGameLink<GameDataEffectIssueOrder> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectIssueOrder Cache { get; }

EffectLaunchMissile 仅服务端 ​

命名空间 GameCore.Execution

csharp
public class EffectLaunchMissile : EffectPersist, IActorScopeContext, IGameObject<GameDataEffectLaunchMissile>, IGameObject

构造函数 ​

EffectLaunchMissile 仅服务端 ​

csharp
protected internal EffectLaunchMissile(IGameLink<GameDataEffectLaunchMissile> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Missile 仅服务端 ​

csharp
public Entity? Missile { get; set; }

OriginRange 仅服务端 ​

csharp
public float? OriginRange { get; set; }

Used for reflection if missile is vector/point targeting missile

OriginLaunchSite 仅服务端 ​

csharp
public ITarget? OriginLaunchSite { get; set; }

LaunchEntity 仅服务端 ​

csharp
public Entity? LaunchEntity { get; set; }

Mover 仅服务端 ​

csharp
public Mover? Mover { get; set; }

ImpactCount 仅服务端 ​

csharp
public uint ImpactCount { get; }

IsReflecting 仅服务端 ​

csharp
public bool IsReflecting { get; }
csharp
public new IGameLink<GameDataEffectLaunchMissile> Link { get; }

Cache 仅服务端 ​

csharp
public new GameDataEffectLaunchMissile Cache { get; }

方法 ​

Stop 仅服务端 ​

csharp
public override bool Stop(bool complete = false, bool isHostDisposed = false)

GetMissile 仅服务端 ​

csharp
protected override Entity? GetMissile()

Start 仅服务端 ​

csharp
protected internal override void Start()

ReflectToOriginalCaster 仅服务端 ​

csharp
protected internal bool ReflectToOriginalCaster(ResponseContextMoverImpact responseContext)

EffectPersist 双端 ​

命名空间 GameCore.Execution

csharp
public abstract class EffectPersist : Effect, IActorScopeOwner, IActorScopeContext, IChannelUser, IGameObject<GameDataEffectPersist>, IGameObject

Should be used for effects that are meant to persist in the game world. Always make sure that the effect will be stopped properly when exceptions are thrown.

构造函数 ​

EffectPersist 双端 ​

csharp
protected internal EffectPersist(IGameLink<GameDataEffectPersist> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

ActorScope 双端 ​

csharp
public IActorScope? ActorScope { get; set; }

IsTransient 双端 ​

csharp
public override bool IsTransient { get; }
csharp
public new IGameLink<GameDataEffectPersist> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectPersist Cache { get; }

方法 ​

Start 双端 ​

csharp
protected internal override void Start()

Stop 双端 ​

csharp
public virtual bool Stop(bool complete = false, bool isHostDisposed = false)

PersistValidate 双端 ​

csharp
public Task PersistValidate()

字段 ​

_scene 双端 ​

csharp
public Scene? _scene

persistCancellationToken 双端 ​

csharp
protected CancellationToken persistCancellationToken

EffectPersistDelay 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectPersistDelay : EffectPersist, IGameObject<GameDataEffectPersistDelay>, IGameObject

构造函数 ​

EffectPersistDelay 双端 ​

csharp
public EffectPersistDelay(IGameLink<GameDataEffectPersistDelay> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Delay 双端 ​

csharp
public TimeSpan? Delay { get; set; }
csharp
public new IGameLink<GameDataEffectPersistDelay> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectPersistDelay Cache { get; }

方法 ​

Start 双端 ​

csharp
protected internal override void Start()

LifeSpan 双端 ​

csharp
protected virtual Task LifeSpan()

EffectPersistLoop 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectPersistLoop : EffectPersist, IGameObject<GameDataEffectPersistLoop>, IGameObject

周期性循环持续效果的运行时实现。

备注

负责管理周期性效果的执行,包括: 按时间间隔触发周期性执行 跟踪执行次数并设置 PersistIndex 根据次数或持续时长自动停止

构造函数 ​

EffectPersistLoop 双端 ​

csharp
protected internal EffectPersistLoop(IGameLink<GameDataEffectPersistLoop> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Info 双端 ​

csharp
public PeriodicInfo? Info { get; }

当前周期性效果的执行信息。

csharp
public new IGameLink<GameDataEffectPersistLoop> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectPersistLoop Cache { get; }

方法 ​

Stop 双端 ​

csharp
public override bool Stop(bool complete = false, bool isHostDisposed = false)

SetPersistIndex 双端 ​

csharp
protected virtual void SetPersistIndex(Effect effect)

为子效果设置周期索引(PersistIndex)。

  • effect — 要设置索引的子效果。
备注

此方法在执行子效果前被调用,将当前执行次数设置为子效果的 PersistIndex。 子效果可以通过 PersistIndex 实现周期性变化,如 GameDataEffectPolarOffset 的周期性偏移。

ExecutePeriodicEffect 双端 ​

csharp
protected virtual void ExecutePeriodicEffect()

执行当前周期的周期性效果。

备注

根据当前执行次数从 PeriodicEffects 列表中选择对应的效果执行。 如果执行次数超过列表长度,会使用列表中的最后一个效果。 执行前会通过 Effect) 设置子效果的 PersistIndex。

Start 双端 ​

csharp
protected internal override void Start()

启动周期性循环效果。

备注

初始化执行信息(次数、周期、持续时长),并启动循环和生命周期监控。 如果时间缩放因子 <= 0,效果会立即停止。

LifeSpan 双端 ​

csharp
protected virtual Task LifeSpan()

监控效果的生命周期,在达到持续时长后自动停止。

备注

如果设置了 Duration,此方法会等待相应时长后停止效果。

StartLoop 双端 ​

csharp
protected virtual void StartLoop()

启动周期性循环。

备注

如果设置了 SkipInitialDelay,会立即执行第一次周期效果,否则等待一个周期后再执行。 检查是否已达到最大执行次数,如果未达到则继续循环。

Loop 双端 ​

csharp
protected virtual Task Loop(int adjustment = 0)

周期性循环的主循环。

  • adjustment — 时间调整值(用于补偿延迟),默认为 0。
备注

此方法会: 等待一个周期(Period) 执行周期性效果 增加执行次数 检查是否应该停止(达到最大次数),否则递归调用自身继续循环

EffectRandomPointInCircle 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectRandomPointInCircle : Effect, IGameObject<GameDataEffectRandomPointInCircle>, IGameObject

构造函数 ​

EffectRandomPointInCircle 双端 ​

csharp
protected internal EffectRandomPointInCircle(IGameLink<GameDataEffectRandomPointInCircle> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Count 双端 ​

csharp
public uint Count { get; set; }

Radius 双端 ​

csharp
public double Radius { get; set; }

GeneratedPoints 双端 ​

csharp
public List<ScenePoint>? GeneratedPoints { get; set; }
csharp
public new IGameLink<GameDataEffectRandomPointInCircle> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectRandomPointInCircle Cache { get; }

EffectSearch 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectSearch : Effect, IActorScopeContext, IGameObject<GameDataEffectSearch>, IGameObject

构造函数 ​

EffectSearch 双端 ​

csharp
protected internal EffectSearch(IGameLink<GameDataEffectSearch> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

StartingPoint 双端 ​

csharp
public ScenePoint? StartingPoint { get; set; }

ExtraRadius 双端 ​

csharp
public float ExtraRadius { get; }

Info 双端 ​

csharp
public SearchInfo? Info { get; set; }

MinCountCache 双端 ​

csharp
public uint? MinCountCache { get; set; }

MaxCountCache 双端 ​

csharp
public uint? MaxCountCache { get; set; }
csharp
public new IGameLink<GameDataEffectSearch> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectSearch Cache { get; }

方法 ​

csharp
protected internal virtual IEnumerable<Entity>? Search(SearchInfo info)

EffectSet 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectSet : Effect

构造函数 ​

EffectSet 双端 ​

csharp
protected internal EffectSet(IGameLink<GameDataEffect> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

MaxCount 双端 ​

csharp
public uint? MaxCount { get; set; }

MinCount 双端 ​

csharp
public uint MinCount { get; set; }

EffectTeleport 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectTeleport : EffectWhichUnit, IGameObject<GameDataEffectTeleport>, IGameObject

构造函数 ​

EffectTeleport 双端 ​

csharp
protected internal EffectTeleport(IGameLink<GameDataEffectTeleport> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Center 双端 ​

csharp
public ITarget? Center { get; set; }

DistanceClamp 双端 ​

csharp
public float? DistanceClamp { get; set; }

OriginalDistance 双端 ​

csharp
public float? OriginalDistance { get; set; }
csharp
public new IGameLink<GameDataEffectTeleport> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectTeleport Cache { get; }

EffectUnitModifyVital 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectUnitModifyVital : Effect, IGameObject<GameDataEffectUnitModifyVital>, IGameObject

构造函数 ​

EffectUnitModifyVital 双端 ​

csharp
protected internal EffectUnitModifyVital(IGameLink<GameDataEffectUnitModifyVital> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Healings 双端 ​

csharp
public List<Healing> Healings { get; }
csharp
public new IGameLink<GameDataEffectUnitModifyVital> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectUnitModifyVital Cache { get; }

EffectWhichUnit 双端 ​

命名空间 GameCore.Execution

csharp
public class EffectWhichUnit : Effect, IGameObject<GameDataEffectWhichUnit>, IGameObject

构造函数 ​

EffectWhichUnit 双端 ​

csharp
protected internal EffectWhichUnit(IGameLink<GameDataEffectWhichUnit> link, ITarget defaultTarget, IExecutionContext creationContext)

属性 ​

Unit 双端 ​

csharp
public ITarget? Unit { get; set; }
csharp
public new IGameLink<GameDataEffectWhichUnit> Link { get; }

Cache 双端 ​

csharp
public new GameDataEffectWhichUnit Cache { get; }

ExecutionParamShared 双端 ​

命名空间 GameCore.Execution

csharp
public class ExecutionParamShared

I can just use IExecutionContext as shared parameter for all effects, but most IExecutionContext are disposable and I don't want to dispose them. I also want to snapshot context data, like unit properties, Level, etc.

构造函数 ​

ExecutionParamShared 双端 ​

csharp
public ExecutionParamShared(IExecutionContext creationContext)

I can just use IExecutionContext as shared parameter for all effects, but most IExecutionContext are disposable and I don't want to dispose them. I also want to snapshot context data, like unit properties, Level, etc.

属性 ​

CreationContext 双端 ​

csharp
public IExecutionContext CreationContext { get; }

CreatorPlayer 双端 ​

csharp
public Player CreatorPlayer { get; set; }

Snapshot of the player who created this effect tree. As Caster may swap player during the execution.

Level 双端 ​

csharp
public uint Level { get; set; }

Snapped level of the execution

MainTarget 双端 ​

csharp
public required ITarget MainTarget { get; init; }

Caster 双端 ​

csharp
public Entity Caster { get; }

Ability 双端 ​

csharp
public Ability? Ability { get; }

Item 双端 ​

csharp
public Item? Item { get; }

Order 双端 ​

csharp
public Order? Order { get; }

AbilityPhase 双端 ​

csharp
public int? AbilityPhase { get; set; }

UnitPropertySnapshot 双端 ​

csharp
public QuickDictionary<IGameLink<GameDataUnitProperty>, double>? UnitPropertySnapshot { get; set; }

IsOrderChanneling 双端 ​

csharp
public bool IsOrderChanneling { get; set; }

UseOrderChanneling 双端 ​

csharp
public bool UseOrderChanneling { get; set; }

ResponseContext 双端 ​

csharp
public ResponseContext? ResponseContext { get; set; }

IsSupportChanneling 双端 ​

csharp
public bool IsSupportChanneling { get; }

IsChanneling 双端 ​

csharp
public bool IsChanneling { get; }

方法 ​

GetUnitProperty 双端 ​

csharp
public double? GetUnitProperty(IGameLink<GameDataUnitProperty> property, PropertyFetchMethod method = PropertyFetchMethod.SnapshotBeforeProperty)

UpdateUnitPropertySnapshot 双端 ​

csharp
public void UpdateUnitPropertySnapshot(IEnumerable<IGameLink<GameDataUnitProperty>> properties)

StopAllChannel 双端 ​

csharp
public void StopAllChannel()

AddChanneled 双端 ​

csharp
public bool AddChanneled(IChannelUser user)

RemoveChanneled 双端 ​

csharp
public bool RemoveChanneled(IChannelUser user)

AddChanneling 双端 ​

csharp
public bool AddChanneling(IChannelUser user)

RemoveChanneling 双端 ​

csharp
public bool RemoveChanneling(IChannelUser user)

ExecutionState 双端 ​

命名空间 GameCore.Execution

csharp
public enum ExecutionState

Defines the possible states of execution for game operations, abilities, commands, or other executable actions.

备注

This enum tracks the lifecycle of executable operations from initial queuing through completion or failure. It provides a standardized way to monitor and respond to the progress of various game systems that perform time-based or conditional operations.

枚举值 ​

  • Pending — The execution is queued and waiting to begin.
  • Failed — The execution has failed and cannot be executed.
  • Executing — The execution is currently in progress.
  • Aborted — The execution was cancelled or interrupted before completion.
  • Completed — The execution has finished successfully.

GameDataEffect 双端 ​

命名空间 GameCore.Execution.Data

csharp
public abstract class GameDataEffect : GameDataCategory<GameDataEffect>, IExecutableData, IGameData, IGameDataActorScopeOwner, IGameData<IGameDataActorScopeOwner>, IEventSender, IGameDataCategory<GameDataEffect>, IGameData<GameDataEffect>

构造函数 ​

GameDataEffect 双端 ​

csharp
public GameDataEffect(GameLink<GameDataEffect, GameDataEffect> link)

GameDataEffect 双端 ​

csharp
public GameDataEffect(IGameLink<GameDataEffect> link)

属性 ​

Chance 双端 ​

csharp
public FuncProbabilityEffect? Chance { get; set; }

效果的触发概率(0~1)。null 表示必定触发

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Validators 双端 ​

csharp
public ValidatorEffect? Validators { get; set; }

效果执行前的验证条件列表。所有条件通过后效果才会执行

TargetLocation 双端 ​

csharp
public TargetLocationExpression TargetLocation { get; set; }

效果执行的目标位置表达式

Facing 双端 ​

csharp
public EffectAngleExpression? Facing { get; set; }

效果执行时的朝向角度表达式

Scale 双端 ​

csharp
public FuncFloatEffect? Scale { get; set; }

效果的缩放系数,影响附带表现的缩放

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

ActorScope 双端 ​

csharp
public IGameLink<GameDataActorScope>? ActorScope { get; set; }

效果附带的视觉表现所属的 ActorScope 作用域

ActorArray 双端 ​

csharp
public List<IGameLink<GameDataActor>?>? ActorArray { get; set; }

效果执行时播放的视觉表现(Actor)列表

TargetType 双端 ​

csharp
public TargetType TargetType { get; set; }

指定效果节点的目标类型,决定效果创建后的位置类型和视觉表现的播放行为。

备注

此属性是效果系统中最重要的配置之一,它不仅影响目标解析,更关键的是决定了 效果节点附带的视觉表现(ActorArray)如何播放和跟随。 🎯 目标解析行为: Any:接受目标的天然类型,保持原始目标类型 Unit:强制要求目标为单位实体,若目标为点会导致整个效果执行失败 Point:强制转换为坐标点,从单位目标提取执行瞬间的位置作为效果的执行目标 🎭 视觉表现影响: Unit类型:表现会跟随目标单位移动,适用于需要附着在单位身上的效果 Point类型:表现固定在指定坐标播放,适用于地面效果或固定位置特效 AOE场景:即使搜索逻辑相同,不同的TargetType会导致完全不同的表现播放位置 💡 实战示例: 火球术AOE爆炸效果: TargetType = Unit:爆炸特效跟随目标单位移动,适合"附身爆炸"效果 TargetType = Point:爆炸特效固定在击中点,适合"地面爆炸"效果 ⚠️ 常见误区:开发者常认为瞬间效果的TargetType不重要,但实际上它显著影响视觉表现的播放方式。 🚫 语义限制警告: 某些效果类型由于业务语义的天然限制,只能作用于单位实体,不能将TargetType设置为Point: GameDataEffectDamage:伤害只能施加给单位,不能伤害坐标点 GameDataEffectBuffAdd/GameDataEffectBuffRemove:Buff状态只能附加到单位身上 GameDataEffectUnitMoverApply/Remove:移动器只能控制单位的移动 GameDataEffectUnitModify系列:只能修改单位的属性、朝向、归属等 GameDataEffectAbilityModify系列:只能修改单位拥有的技能 这些效果通常继承自GameDataEffectUnit基类,默认TargetType为Unit。 如果错误地设置为Point,会导致效果执行时因为CmdError.MustTargetEntity而失败。

LogExecutionFailure 双端 ​

csharp
public bool LogExecutionFailure { get; set; }

是否在效果执行失败时记录日志(用于调试)

AggregatorWeakReference 双端 ​

csharp
public WeakReference<EventAggregator> AggregatorWeakReference { get; }

方法 ​

Execute 双端 ​

csharp
public virtual void Execute(Effect context)

Validate 双端 ​

csharp
public virtual CmdResult Validate(Effect context)

CreateEffect 双端 ​

csharp
public virtual Effect CreateEffect(ITarget defaultTarget, IExecutionContext context, bool preValidateOnly = false)

LocVarUnitAction 双端 ​

csharp
protected static Action<Effect>? LocVarUnitAction(LocVarType? nullableType, ITarget target)

LocVarPointAction 双端 ​

csharp
protected static Action<Effect>? LocVarPointAction(LocVarType? nullableType, ITarget target)

字段 ​

rnd 双端 ​

csharp
protected static readonly Random rnd

GameDataEffectAbility 双端 ​

命名空间 GameCore.Execution.Data

csharp
public abstract class GameDataEffectAbility : GameDataEffect, IGameData<GameDataEffectAbility>, IGameData

操作技能的效果基类,提供技能查找逻辑

构造函数 ​

GameDataEffectAbility 双端 ​

csharp
public GameDataEffectAbility(GameLink<GameDataEffect, GameDataEffectAbility> link)

GameDataEffectAbility 双端 ​

csharp
public GameDataEffectAbility(IGameLink<GameDataEffectAbility> link)

属性 ​

Ability 双端 ​

csharp
public IGameLink<GameDataAbility>? Ability { get; set; }

要操作的目标技能。null 时使用触发此效果的技能

csharp
public new IGameLink<GameDataEffectAbility> Link { get; }

方法 ​

GetAbility 双端 ​

csharp
protected CmdResult<Ability> GetAbility(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectAbilityModify 双端 ​

命名空间 GameCore.Execution.Data

csharp
public abstract class GameDataEffectAbilityModify : GameDataEffectAbility, IGameData<GameDataEffectAbilityModify>, IGameData

修改技能属性的效果基类

构造函数 ​

GameDataEffectAbilityModify 双端 ​

csharp
public GameDataEffectAbilityModify(GameLink<GameDataEffect, GameDataEffectAbilityModify> link)

GameDataEffectAbilityModify 双端 ​

csharp
public GameDataEffectAbilityModify(IGameLink<GameDataEffectAbilityModify> link)

属性 ​

Operation 双端 ​

csharp
public PropertyModificationOperation Operation { get; set; }

属性修改方式:Add(增减)或 Set(设为固定值)

csharp
public new IGameLink<GameDataEffectAbilityModify> Link { get; }

GameDataEffectAbilityModifyCooldown 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectAbilityModifyCooldown : GameDataEffectAbilityModify, IGameData<GameDataEffectAbilityModifyCooldown>, IGameData

修改技能的冷却时间

构造函数 ​

GameDataEffectAbilityModifyCooldown 双端 ​

csharp
public GameDataEffectAbilityModifyCooldown(GameLink<GameDataEffect, GameDataEffectAbilityModifyCooldown> link)

GameDataEffectAbilityModifyCooldown 双端 ​

csharp
public GameDataEffectAbilityModifyCooldown(IGameLink<GameDataEffectAbilityModifyCooldown> link)

属性 ​

Value 双端 ​

csharp
public FuncTimeEffect Value { get; set; }

冷却时间修改值

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

CooldownType 双端 ​

csharp
public CooldownType CooldownType { get; set; }

要修改的冷却类型

csharp
public new IGameLink<GameDataEffectAbilityModifyCooldown> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectAbilityModifyPhase 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectAbilityModifyPhase : GameDataEffectAbilityModify, IGameData<GameDataEffectAbilityModifyPhase>, IGameData

修改多阶段技能的当前阶段索引

构造函数 ​

GameDataEffectAbilityModifyPhase 双端 ​

csharp
public GameDataEffectAbilityModifyPhase(GameLink<GameDataEffect, GameDataEffectAbilityModifyPhase> link)

GameDataEffectAbilityModifyPhase 双端 ​

csharp
public GameDataEffectAbilityModifyPhase(IGameLink<GameDataEffectAbilityModifyPhase> link)

属性 ​

Value 双端 ​

csharp
public FuncIntEffect Value { get; set; }

阶段修改值(Add 模式下为增量,Set 模式下为目标阶段)

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

csharp
public new IGameLink<GameDataEffectAbilityModifyPhase> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectAbilityModifyProperty 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectAbilityModifyProperty : GameDataEffectAbilityModify, IGameData<GameDataEffectAbilityModifyProperty>, IGameData

修改技能的数值属性(如自定义计数器等)

构造函数 ​

GameDataEffectAbilityModifyProperty 双端 ​

csharp
public GameDataEffectAbilityModifyProperty(GameLink<GameDataEffect, GameDataEffectAbilityModifyProperty> link)

GameDataEffectAbilityModifyProperty 双端 ​

csharp
public GameDataEffectAbilityModifyProperty(IGameLink<GameDataEffectAbilityModifyProperty> link)

属性 ​

Modification 双端 ​

csharp
public List<EffectPropertyModification<PropertyAbilityNumeric>> Modification { get; set; }
csharp
public new IGameLink<GameDataEffectAbilityModifyProperty> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectAbilityReplace 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectAbilityReplace : GameDataEffectAbility, IGameData<GameDataEffectAbilityReplace>, IGameData

替换技能效果,将目标技能替换为另一个技能

构造函数 ​

GameDataEffectAbilityReplace 双端 ​

csharp
public GameDataEffectAbilityReplace(GameLink<GameDataEffect, GameDataEffectAbilityReplace> link)

GameDataEffectAbilityReplace 双端 ​

csharp
public GameDataEffectAbilityReplace(IGameLink<GameDataEffectAbilityReplace> link)

属性 ​

NewAbility 双端 ​

csharp
public required IGameLink<GameDataAbility> NewAbility { get; set; }

替换后的新技能

csharp
public new IGameLink<GameDataEffectAbilityReplace> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

GameDataEffectBuffAdd 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectBuffAdd : GameDataEffect, IGameData<GameDataEffectBuffAdd>, IGameData

为目标单位添加 Buff 效果

构造函数 ​

GameDataEffectBuffAdd 双端 ​

csharp
public GameDataEffectBuffAdd(GameLink<GameDataEffect, GameDataEffectBuffAdd> link)

GameDataEffectBuffAdd 双端 ​

csharp
public GameDataEffectBuffAdd(IGameLink<GameDataEffectBuffAdd> link)

属性 ​

Stack 双端 ​

csharp
public FuncUInt? Stack { get; set; }

添加的 Buff 层数。null 表示使用 Buff 的默认初始层数

Buff 双端 ​

csharp
public IGameLink<GameDataBuff> Buff { get; set; }

要添加的 Buff 类型

Duration 双端 ​

csharp
public FuncTimeEffect? Duration { get; set; }

Buff 的持续时间。null 表示永久存在

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

csharp
public new IGameLink<GameDataEffectBuffAdd> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

Validate 仅服务端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectBuffRemove 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectBuffRemove : GameDataEffect, IGameData<GameDataEffectBuffRemove>, IGameData

移除目标单位身上的 Buff 效果

构造函数 ​

GameDataEffectBuffRemove 双端 ​

csharp
public GameDataEffectBuffRemove(GameLink<GameDataEffect, GameDataEffectBuffRemove> link)

GameDataEffectBuffRemove 双端 ​

csharp
public GameDataEffectBuffRemove(IGameLink<GameDataEffectBuffRemove> link)

属性 ​

Stack 双端 ​

csharp
public FuncUInt? Stack { get; set; }

要移除的层数。null 表示移除所有匹配的 Buff

Buff 双端 ​

csharp
public IGameLink<GameDataBuff>? Buff { get; set; }

指定要移除的 Buff 类型。null 表示不限定具体类型(配合 CategoryFilter 使用)

CategoryFilter 双端 ​

csharp
public HashSetFilter<BuffCategory>? CategoryFilter { get; set; }

按 Buff 分类标签筛选要移除的范围。null 表示不按分类筛选

BuffValidator 双端 ​

csharp
public Func<Buff, CmdResult>? BuffValidator { get; set; }

自定义验证函数,用于精确控制哪些 Buff 应被移除

Sorts 双端 ​

csharp
public List<Comparison<Buff>>? Sorts { get; set; }

Buff 移除时的排序规则,决定优先移除哪些 Buff(当层数不足以移除全部时)

csharp
public new IGameLink<GameDataEffectBuffRemove> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

Validate 仅服务端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectCancelOrder 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectCancelOrder : GameDataEffectUnit, IGameData<GameDataEffectCancelOrder>, IGameData

取消目标单位的命令队列中的指令(如施法、移动、攻击等)

构造函数 ​

GameDataEffectCancelOrder 双端 ​

csharp
public GameDataEffectCancelOrder(GameLink<GameDataEffect, GameDataEffectCancelOrder> link)

GameDataEffectCancelOrder 双端 ​

csharp
public GameDataEffectCancelOrder(IGameLink<GameDataEffectCancelOrder> link)

属性 ​

CancelOrderMethod 双端 ​

csharp
public CancelOrderMethod CancelOrderMethod { get; set; }

要取消的命令类型(Any、Ability、Attack、Move)

CancelOrderFlags 双端 ​

csharp
public GetOrderFlags CancelOrderFlags { get; set; }

取消命令的范围标志(是否包含队首命令、排队命令、不可打断命令)

Ability 双端 ​

csharp
public IGameLink<GameDataAbility>? Ability { get; set; }

当 CancelOrderMethod 为 Ability 时,指定要取消的技能类型。null 表示取消所有技能命令

CategoryFilter 双端 ​

csharp
public HashSetFilter<AbilityCategory>? CategoryFilter { get; set; }

按技能分类标签筛选要取消的技能命令

csharp
public new IGameLink<GameDataEffectCancelOrder> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectCreateItem 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectCreateItem : GameDataEffect, IGameData<GameDataEffectCreateItem>, IGameData

创建物品效果的游戏数据配置,用于在指定位置生成新的游戏物品

备注

GameDataEffectCreateItem 是效果系统中用于创建物品的核心组件。它支持多种物品选择方式、 灵活的生成位置配置、所有权管理以及生成后的效果处理。 物品选择方式: ItemLink - 通过 SpawnItemTypePerLevel 根据等级选择物品类型 生成配置: 支持批量生成多个物品(SpawnCount) 可自定义生成位置偏移(SpawnOffset) 灵活的物品所有权配置(SpawnOwner) 可选的生成后效果处理(SpawnEffect) 验证机制: 系统会在执行前验证物品类型的有效性、玩家所有权的合法性等,确保创建过程的安全性和正确性。

构造函数 ​

GameDataEffectCreateItem 双端 ​

csharp
public GameDataEffectCreateItem(GameLink<GameDataEffect, GameDataEffectCreateItem> link)

GameDataEffectCreateItem 双端 ​

csharp
public GameDataEffectCreateItem(IGameLink<GameDataEffectCreateItem> link)

属性 ​

SpawnItemTypePerLevel 双端 ​

csharp
public LeveledData<IGameLink<GameDataItem>> SpawnItemTypePerLevel { get; set; }

获取或设置按等级分层的物品类型配置

备注

该属性允许根据效果的等级选择不同的物品类型,实现物品的升级机制。 系统会根据效果的当前等级查找对应的物品类型,使用 Int32) 方法 进行自动等级范围限制,确保总是返回有效的物品类型。 配置规则: 等级索引从0开始(等级0、1、2...) 建议从等级0开始配置,确保低等级效果有对应的物品类型 如果请求的等级超出范围,会自动返回最高等级的配置 如果集合为空,验证阶段会返回 InvalidItem 错误

SpawnOffset 双端 ​

csharp
public EffectOffsetExpression? SpawnOffset { get; set; }

获取或设置生成位置的偏移表达式,用于调整物品的实际生成位置

备注

该属性允许对基础生成位置应用偏移,实现更精确的位置控制。

SpawnCount 双端 ​

csharp
public FuncUIntEffect SpawnCount { get; set; }

获取或设置生成物品数量的计算函数

备注

该函数用于动态计算要生成的物品数量,支持基于效果上下文的复杂逻辑。

SpawnOwner 双端 ​

csharp
public EffectOwnerExpression SpawnOwner { get; set; }

获取或设置生成物品的所有者表达式,决定新创建物品的归属

备注

该表达式用于确定新创建物品的所有者(玩家),这直接影响物品的控制权和相关的游戏逻辑。

SpawnEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? SpawnEffect { get; set; }

获取或设置在物品创建后立即执行的效果

备注

该属性允许在物品成功创建后立即对其执行额外的效果,常用于初始化新物品的状态、 应用特殊属性、或触发相关的游戏事件。

ImpactUnitLocVar 双端 ​

csharp
public LocVarType? ImpactUnitLocVar { get; set; }

获取或设置用于存储新创建物品单位的局部变量类型

备注

该属性用于将新创建物品的单位存储到指定的局部变量中,使得后续的效果或逻辑 可以引用这些新创建的物品单位。

csharp
public new IGameLink<GameDataEffectCreateItem> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectCreateUnit 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectCreateUnit : GameDataEffect, IGameData<GameDataEffectCreateUnit>, IGameData

创建单位效果的游戏数据配置,用于在指定位置生成新的游戏单位

备注

GameDataEffectCreateUnit 是效果系统中用于创建单位的核心组件。它支持多种单位选择方式、 灵活的生成位置配置、所有权管理以及生成后的效果处理。 单位选择方式: UnitLink - 通过 SpawnUnitTypePerLevel 根据等级选择单位类型 Location - 通过 SpawnTypeUnit 从目标位置获取单位类型 生成配置: 支持批量生成多个单位(SpawnCount) 可自定义生成位置偏移(SpawnOffset) 灵活的单位所有权配置(SpawnOwner) 可选的生成后效果处理(SpawnEffect) 可选的默认AI配置(Flags) 验证机制: 系统会在执行前验证单位类型的有效性、玩家所有权的合法性等,确保创建过程的安全性和正确性。

构造函数 ​

GameDataEffectCreateUnit 双端 ​

csharp
public GameDataEffectCreateUnit(GameLink<GameDataEffect, GameDataEffectCreateUnit> link)

GameDataEffectCreateUnit 双端 ​

csharp
public GameDataEffectCreateUnit(IGameLink<GameDataEffectCreateUnit> link)

属性 ​

UnitPicker 双端 ​

csharp
public UnitPicker UnitPicker { get; set; }

获取或设置单位选择方式,决定如何确定要创建的单位类型

备注

单位选择方式决定了系统如何确定要创建的单位类型: UnitLink - 使用 SpawnUnitTypePerLevel 根据效果等级选择单位 Location - 使用 SpawnTypeUnit 从目标位置动态获取单位类型 UnitLink 方式适用于固定的单位类型配置,支持等级分层;Location 方式适用于需要根据 目标位置动态决定单位类型的场景,如复制目标位置的单位。

SpawnUnitTypePerLevel 双端 ​

csharp
public LeveledData<IGameLink<GameDataUnit>> SpawnUnitTypePerLevel { get; set; }

获取或设置按等级分层的单位类型配置,当 UnitPicker 为 UnitLink 时使用

备注

该属性允许根据效果的等级选择不同的单位类型,实现单位的升级机制。 系统会根据效果的当前等级查找对应的单位类型,使用 Int32) 方法 进行自动等级范围限制,确保总是返回有效的单位类型。 配置规则: 等级索引从0开始(等级0、1、2...) 建议从等级0开始配置,确保低等级效果有对应的单位类型 使用集合初始化语法按顺序添加单位类型 如果请求的等级超出范围,会自动返回最高等级的配置 如果集合为空,验证阶段会返回 InvalidUnitType 错误

SpawnTypeUnit 双端 ​

csharp
public TargetLocationExpression SpawnTypeUnit { get; set; }

获取或设置目标位置表达式,当 UnitPicker 为 Location 时用于动态获取单位类型

备注

该属性用于从指定的目标位置动态获取单位类型,常用于复制或转换现有单位的场景。 表达式会在运行时解析,从目标位置的实体中提取单位类型信息。 使用场景: 复制目标单位:创建与目标相同类型的单位 单位转换:基于目标单位类型创建相关的其他单位 动态召唤:根据战场情况动态选择单位类型 如果目标位置没有有效的单位或实体,验证阶段会返回 InvalidUnitType 错误。

SpawnOffset 双端 ​

csharp
public EffectOffsetExpression? SpawnOffset { get; set; }

获取或设置生成位置的偏移表达式,用于调整单位的实际生成位置

备注

该属性允许对基础生成位置应用偏移,实现更精确的位置控制。偏移会在效果的目标位置基础上计算, 支持固定偏移、随机偏移、以及基于效果上下文的动态偏移。 偏移类型: 固定偏移 - 相对于目标位置的固定距离和方向 随机偏移 - 在指定范围内随机选择偏移位置 动态偏移 - 基于效果上下文计算的偏移 当值为 null 时,单位将直接在效果的目标位置生成。 偏移计算会考虑地形限制和碰撞检测,确保生成位置的有效性。

SpawnCount 双端 ​

csharp
public FuncUIntEffect SpawnCount { get; set; }

获取或设置生成单位数量的计算函数

备注

该函数用于动态计算要生成的单位数量,支持基于效果上下文的复杂逻辑。 函数接收当前效果实例作为参数,返回要生成的单位数量。 计算方式: 固定数量 - 返回固定值的静态函数 等级相关 - 基于效果等级计算数量 属性相关 - 基于施法者属性计算数量 随机数量 - 在指定范围内随机选择数量 返回值必须大于0,否则不会生成任何单位。建议对返回值进行合理的上限限制, 避免一次性生成过多单位影响游戏性能。

SpawnOwner 双端 ​

csharp
public EffectOwnerExpression SpawnOwner { get; set; }

获取或设置生成单位的所有者表达式,决定新创建单位的归属

备注

该表达式用于确定新创建单位的所有者(玩家),这直接影响单位的控制权、 敌友关系判定、以及相关的游戏逻辑。所有者的正确设置对于游戏平衡和逻辑正确性至关重要。 常用所有者类型: Caster - 效果施法者,最常见的配置 Target - 效果目标,用于"策反"类技能 Neutral - 中立单位,不属于任何玩家 Custom - 基于复杂逻辑确定的自定义所有者 默认配置将单位所有者设置为效果施法者,这适用于大多数召唤类技能。 如果表达式解析失败或返回无效玩家,验证阶段会返回 InvalidPlayer 错误。

SpawnEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? SpawnEffect { get; set; }

获取或设置在单位创建后立即执行的效果

备注

该属性允许在单位成功创建后立即对其执行额外的效果,常用于初始化新单位的状态、 应用特殊属性、或触发相关的游戏事件。 常见用途: 状态初始化 - 为新单位添加Buff或特殊状态 属性调整 - 修改新单位的基础属性 视觉效果 - 播放生成动画或特效 事件触发 - 触发与单位创建相关的游戏事件 该效果会以新创建的单位作为目标执行,可以通过 ImpactUnitLocVar 将新单位存储到局部变量中供后续效果使用。如果生成效果执行失败,不会影响单位的创建。 当值为 null 时,跳过生成后效果的执行。

ImpactUnitLocVar 双端 ​

csharp
public LocVarType? ImpactUnitLocVar { get; set; }

获取或设置用于存储新创建单位的局部变量类型

备注

该属性用于将新创建的单位存储到指定的局部变量中,使得后续的效果或逻辑 可以引用这些新创建的单位。这对于需要对创建的单位进行进一步操作的复杂效果非常有用。 使用场景: 链式效果 - 后续效果需要引用新创建的单位 条件判断 - 基于创建的单位数量或类型执行不同逻辑 状态跟踪 - 在效果持续期间跟踪创建的单位 清理机制 - 在特定条件下清理或移除创建的单位 当创建多个单位时,所有创建的单位都会存储到同一个局部变量中。 局部变量的生命周期与效果的执行上下文相关。 当值为 null 时,不会将单位存储到任何局部变量中。

Flags 双端 ​

csharp
public CreateUnitFlags Flags { get; set; }

获取或设置单位创建的标志配置,控制创建过程的特殊行为

备注

该属性包含控制单位创建过程特殊行为的标志配置。通过这些标志, 可以精确控制新创建单位的初始状态和行为模式。 可用标志: UseDefaultAI - 是否为新创建的单位自动添加默认AI UseDefaultAI 标志决定新创建的单位是否会自动获得默认的AI行为。 启用此标志适用于需要单位立即开始自主行动的场景,如召唤的盟友单位。 禁用此标志适用于需要玩家手动控制或有特殊AI配置的单位。

csharp
public new IGameLink<GameDataEffectCreateUnit> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectCustomAction 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectCustomAction : GameDataEffect, IGameData<GameDataEffectCustomAction>, IGameData

自定义动作效果,通过委托函数执行自定义逻辑,成功后可继续执行子效果

构造函数 ​

GameDataEffectCustomAction 双端 ​

csharp
public GameDataEffectCustomAction(GameLink<GameDataEffect, GameDataEffectCustomAction> link)

GameDataEffectCustomAction 双端 ​

csharp
public GameDataEffectCustomAction(IGameLink<GameDataEffectCustomAction> link)

属性 ​

Func 双端 ​

csharp
public Func<Effect, ValueTask<bool>> Func { get; set; }

自定义异步函数。返回 true 时继续执行子效果,返回 false 则跳过

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Effect 双端 ​

csharp
public IGameLink<GameDataEffect>? Effect { get; set; }

自定义函数返回 true 后执行的子效果

csharp
public new IGameLink<GameDataEffectCustomAction> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectDamage 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectDamage : GameDataEffectUnit, IGameData<GameDataEffectDamage>, IGameData

对目标单位造成伤害的效果

构造函数 ​

GameDataEffectDamage 双端 ​

csharp
public GameDataEffectDamage(GameLink<GameDataEffect, GameDataEffectDamage> link)

GameDataEffectDamage 双端 ​

csharp
public GameDataEffectDamage(IGameLink<GameDataEffectDamage> link)

属性 ​

Amount 双端 ​

csharp
public FuncNumberEffect Amount { get; set; }

伤害的基础数值

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Random 双端 ​

csharp
public double Random { get; set; }

伤害的随机浮动值。最终伤害 = Amount + Random(0, Random)

Type 双端 ​

csharp
public IGameLink<GameDataDamageType> Type { get; set; }

伤害类型(如物理、魔法),影响护甲/抗性的减伤计算

DeathType 双端 ​

csharp
public DeathType DeathType { get; set; }

当此伤害致死时的死亡类型(Normal 正常死亡、Destroy 直接移除等)

csharp
public new IGameLink<GameDataEffectDamage> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectEnumerateUnits 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectEnumerateUnits : GameDataEffect, IGameData<GameDataEffectEnumerateUnits>, IGameData

遍历单位集合效果节点配置。

备注

此效果类似于 GameDataEffectSearch,对集合中的每个单位执行效果, 但被遍历的目标不是搜索的结果,而是来自自定义公式的单位集合。 💡 使用场景: 遍历施法者携带的所有召唤物 遍历特定Buff标记的所有单位 遍历玩家控制的所有单位 遍历由其他效果缓存的单位列表

构造函数 ​

GameDataEffectEnumerateUnits 双端 ​

csharp
public GameDataEffectEnumerateUnits(GameLink<GameDataEffect, GameDataEffectEnumerateUnits> link)

GameDataEffectEnumerateUnits 双端 ​

csharp
public GameDataEffectEnumerateUnits(IGameLink<GameDataEffectEnumerateUnits> link)

属性 ​

Effect 双端 ​

csharp
public IGameLink<GameDataEffect>? Effect { get; set; }

对集合中的每个单位执行的效果

ImpactUnitLocVar 双端 ​

csharp
public LocVarType? ImpactUnitLocVar { get; set; }

可选的局部变量类型,用于在子效果中引用当前遍历的单位

Units 双端 ​

csharp
public required Func<EffectEnumerateUnits, IEnumerable<Unit>> Units { get; set; }

用于获取单位集合的公式表达式。 此公式在效果执行时被调用,返回要遍历的单位集合。

csharp
public new IGameLink<GameDataEffectEnumerateUnits> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 双端 ​

csharp
public override void Execute(Effect context)

GameDataEffectForEachUnit 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectForEachUnit : GameDataEffect, IGameData<GameDataEffectForEachUnit>, IGameData

遍历指定单位集合,对每个单位执行子效果

构造函数 ​

GameDataEffectForEachUnit 双端 ​

csharp
public GameDataEffectForEachUnit(GameLink<GameDataEffect, GameDataEffectForEachUnit> link)

GameDataEffectForEachUnit 双端 ​

csharp
public GameDataEffectForEachUnit(IGameLink<GameDataEffectForEachUnit> link)

属性 ​

Units 双端 ​

csharp
public required Func<Effect, IEnumerable<Entity>> Units { get; set; }

提供要遍历的单位集合的函数

Effect 双端 ​

csharp
public IGameLink<GameDataEffect>? Effect { get; set; }

对每个单位执行的效果

csharp
public new IGameLink<GameDataEffectForEachUnit> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectIssueOrder 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectIssueOrder : GameDataEffectWhichUnit, IGameData<GameDataEffectIssueOrder>, IGameData

向指定单位发出命令(如施放技能、移动等)

构造函数 ​

GameDataEffectIssueOrder 双端 ​

csharp
public GameDataEffectIssueOrder(GameLink<GameDataEffect, GameDataEffectIssueOrder> link)

GameDataEffectIssueOrder 双端 ​

csharp
public GameDataEffectIssueOrder(IGameLink<GameDataEffectIssueOrder> link)

属性 ​

Ability 双端 ​

csharp
public IGameLink<GameDataAbility>? Ability { get; set; }

要执行的技能。null 时由 Type 和 Index 决定命令类型

Index 双端 ​

csharp
public CommandIndex Index { get; set; }

命令索引类型(如 Execute 执行、Cancel 取消等)

Type 双端 ​

csharp
public ComponentTag Type { get; set; }

命令目标组件类型

Flag 双端 ​

csharp
public CommandFlag Flag { get; set; }

Target 双端 ​

csharp
public ICommandTarget? Target { get; set; }

命令的目标

WhichItem 双端 ​

csharp
public TargetLocationExpression? WhichItem { get; set; }

指定使用的物品单位(当命令与物品技能相关时)

csharp
public new IGameLink<GameDataEffectIssueOrder> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

Validate 仅服务端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectLaunchMissile 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectLaunchMissile : GameDataEffectPersist, IGameDataActorScopeOwner, IGameData<IGameDataActorScopeOwner>, IGameData, IGameDataMoverTarget, IGameDataMover, IGameData<GameDataEffectLaunchMissile>

发射弹道投射物效果。可创建新的投射物单位或复用已有单位,支持直线/抛物线飞行、碰撞检测和命中效果

构造函数 ​

GameDataEffectLaunchMissile 双端 ​

csharp
public GameDataEffectLaunchMissile(GameLink<GameDataEffect, GameDataEffectLaunchMissile> link)

GameDataEffectLaunchMissile 双端 ​

csharp
public GameDataEffectLaunchMissile(IGameLink<GameDataEffectLaunchMissile> link)

属性 ​

LaunchLocation 双端 ​

csharp
public TargetLocationExpression LaunchLocation { get; set; }

弹道的发射位置表达式,默认为施法者位置

LaunchTargetType 双端 ​

csharp
public TargetType LaunchTargetType { get; set; }

发射位置的目标类型解析方式

LaunchOffset 双端 ​

csharp
public EffectOffsetExpression? LaunchOffset { get; set; }

发射位置的偏移量配置

Method 双端 ​

csharp
public EffectLaunchMissileMethod Method { get; set; }

弹道创建方式:创建新投射物或复用已有单位

WhichUnit 双端 ​

csharp
public TargetLocationExpression? WhichUnit { get; set; }

当 Method 为 UseExistingMissile 时,指定复用哪个单位作为投射物

Missile 双端 ​

csharp
public IGameLink<GameDataUnit> Missile { get; set; }

投射物使用的单位数据(决定投射物的外观和属性)

DoStaticCollision 双端 ​

csharp
public bool DoStaticCollision { get; set; }

是否进行静态障碍物碰撞检测(如墙壁、地形)。

备注

注意:如果同时设置了 LaunchHeight,投射物可能从高处向地面飞行时 提前撞到地形。此时建议同时设置 TargetHeight 使投射物水平飞行, 或关闭此选项。

StaticMask 双端 ​

csharp
public List<StaticCollisionMask> StaticMask { get; set; }

静态碰撞检测的遮挡类型掩码

DoImpactEntity 双端 ​

csharp
public bool DoImpactEntity { get; set; }

是否在飞行途中进行实体碰撞检测(穿过/命中单位)。 开启后投射物沿飞行路径检测 ImpactSearchFilter 内的单位, 命中时执行 ImpactEffect。这是 skillshot 类投射物的核心开关。

备注

追踪型投射物(单位目标)一般不开启此选项,以免在飞向目标途中碰到其他单位提前引爆。 追踪型投射物到达目标后使用继承自 GameDataEffectPersist 的 CompleteEffect 执行命中效果。

ImpactSearchFilter 双端 ​

csharp
public TargetFilterComplex ImpactSearchFilter { get; set; }

飞行途中实体碰撞的目标筛选条件

ImpactSearchRadius 双端 ​

csharp
public FuncFloat ImpactSearchRadius { get; set; }

飞行途中实体碰撞的搜索半径

FinishArriveRadius 双端 ​

csharp
public FuncFloat FinishArriveRadius { get; set; }

到达目标的判定半径。投射物与目标点距离小于此值时视为到达

ImpactMaxCount 双端 ​

csharp
public FuncNumber? ImpactMaxCount { get; set; }

飞行途中最大命中实体数量。null 表示不限制

ImpactEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? ImpactEffect { get; set; }

飞行途中命中实体时执行的效果。仅在 DoImpactEntity 为 true 时生效。

备注

此效果在投射物飞行途中碰到符合 ImpactSearchFilter 的实体时触发。 注意:追踪型投射物到达目标单位时不会触发此效果—— 到达目标后的效果应使用继承自 GameDataEffectPersist 的 CompleteEffect。 三种常见投射物模式: 追踪型(单位目标):不开 DoImpactEntity,使用 CompleteEffect Skillshot 穿透型(点目标/FixedRange):开 DoImpactEntity,使用 ImpactEffect 落点 AOE 型(点目标):不开 DoImpactEntity,使用 CompleteEffect 执行 AOE Search

ImpactActors 双端 ​

csharp
public List<IGameLink<GameDataActor>?>? ImpactActors { get; set; }

命中时播放的表现(Actor)列表

Speed 双端 ​

csharp
public FuncRate Speed { get; set; }

投射物飞行速度(单位:距离/秒)

AllowSpellModification 双端 ​

csharp
public bool AllowSpellModification { get; set; }

是否允许技能修饰(如天赋、Buff)影响此弹道的属性

ImpactUnitLocVar 双端 ​

csharp
public LocVarType? ImpactUnitLocVar { get; set; }

将命中的单位存储到指定的局部变量中,供后续效果引用

MissileScaling 双端 ​

csharp
public FuncNumber? MissileScaling { get; set; }

投射物的缩放系数

ParabolaApex 双端 ​

csharp
public FuncFloat? ParabolaApex { get; set; }

抛物线轨迹的最高点高度。设置后投射物将沿抛物线飞行

ParabolaLandingHeight 双端 ​

csharp
public FuncFloat? ParabolaLandingHeight { get; set; }

抛物线落地时的目标高度

LaunchHeight 双端 ​

csharp
public FuncFloat? LaunchHeight { get; set; }

发射时的初始高度偏移

TargetHeight 双端 ​

csharp
public FuncFloat? TargetHeight { get; set; }

目标位置的高度偏移

TargetHeightIsAbsolute 双端 ​

csharp
public bool TargetHeightIsAbsolute { get; set; }

TargetHeight 是否为绝对高度(true)还是相对于地面的高度(false)

TurnToDirection 双端 ​

csharp
public bool TurnToDirection { get; set; }

投射物是否朝向飞行方向(面向目标点)

TurnToVelocity 双端 ​

csharp
public bool TurnToVelocity { get; set; }

投射物是否朝向实时速度方向(抛物线时会随曲线旋转)

StickToGround 双端 ​

csharp
public bool StickToGround { get; set; }

投射物是否贴地飞行(跟随地形高度)

FixedRange 双端 ​

csharp
public FuncFloat? FixedRange { get; set; }

固定射程模式。设置后无论目标是单位还是点,投射物都只取目标方向, 飞往从施法者出发指定距离的点。这将投射物变为 skillshot 型飞行物。

备注

设置此属性后等效于自动插入一个 GameDataEffectPolarOffset: 以施法者为基点,取施法者到目标的方向,偏移 FixedRange 距离得到落点。 典型用法:配合 DoImpactEntity = true 和 ImpactEffect 实现 skillshot 穿透型投射物。 // 示例:800 射程的穿透火球 new GameDataEffectLaunchMissile(Effect.FireballLaunch) { Missile = Unit.FireballMissile, FixedRange = static () => 800f, DoImpactEntity = true, ImpactEffect = Effect.FireballDamage, Speed = static () => 800, };

FixedRangeOffsetByUnitRadius 双端 ​

csharp
public bool FixedRangeOffsetByUnitRadius { get; set; }

FixedRange 是否叠加施法者的交互半径(InteractRadius)。 默认 true——固定射程从施法者碰撞圈边缘开始计算。

csharp
public new IGameLink<GameDataEffectLaunchMissile> Link { get; }

方法 ​

CreateEffect 仅服务端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

Validate 仅服务端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectLog 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectLog : GameDataEffect, IGameData<GameDataEffectLog>, IGameData

调试日志效果,用于在效果执行时输出日志信息

构造函数 ​

GameDataEffectLog 双端 ​

csharp
public GameDataEffectLog(GameLink<GameDataEffect, GameDataEffectLog> link)

GameDataEffectLog 双端 ​

csharp
public GameDataEffectLog(IGameLink<GameDataEffectLog> link)

属性 ​

Message 双端 ​

csharp
public FuncStringEffect Message { get; set; }

日志消息内容表达式

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

On 双端 ​

csharp
public bool On { get; set; }

是否启用此日志节点

Level 双端 ​

csharp
public LogLevel Level { get; set; }
csharp
public new IGameLink<GameDataEffectLog> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectPersist 双端 ​

命名空间 GameCore.Execution.Data

csharp
public abstract class GameDataEffectPersist : GameDataEffect, IGameData<GameDataEffectPersist>, IGameData

持续性效果基类,在一段时间内持续存在并可周期性执行逻辑(如延迟、循环等)

构造函数 ​

GameDataEffectPersist 双端 ​

csharp
public GameDataEffectPersist(GameLink<GameDataEffect, GameDataEffectPersist> link)

GameDataEffectPersist 双端 ​

csharp
public GameDataEffectPersist(IGameLink<GameDataEffectPersist> link)

属性 ​

StartEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? StartEffect { get; set; }

持续效果开始时执行的效果

CompleteEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? CompleteEffect { get; set; }

持续效果正常完成时执行的效果。

备注

在 GameDataEffectLaunchMissile 中,CompleteEffect 会在投射物 到达目标点/单位时执行。 追踪型投射物(单位目标):到达目标单位后执行 CompleteEffect 触发命中伤害等 落点 AOE 型(点目标,无 DoImpactEntity):抵达落点后执行 CompleteEffect 触发 AOE 搜索伤害 注意:对于 Skillshot 穿透型投射物(DoImpactEntity = true),中途碰撞使用 ImpactEffect,而非 CompleteEffect。

FinalEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? FinalEffect { get; set; }

持续效果结束时始终执行的效果(无论正常结束还是被中断)

Radius 双端 ​

csharp
public FuncNumberEffect? Radius { get; set; }

持续效果的影响半径

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

TimeScaleProperty 双端 ​

csharp
public IGameLink<GameDataUnitProperty>? TimeScaleProperty { get; set; }

用于缩放持续效果计时的单位属性(如攻击速度影响持续时间)

PersistValidator 双端 ​

csharp
public ValidatorEffect? PersistValidator { get; set; }

持续效果存活期间的周期性验证条件,验证失败时效果将被中断

ChannelFlags 双端 ​

csharp
public PersistChannelFlags ChannelFlags { get; set; }

持续效果的引导行为标志(如是否随施法者移动、被打断条件等)

csharp
public new IGameLink<GameDataEffectPersist> Link { get; }

方法 ​

TimeScale 双端 ​

csharp
protected internal double TimeScale(Effect context)

GameDataEffectPersistDelay 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectPersistDelay : GameDataEffectPersist, IGameData<GameDataEffectPersistDelay>, IGameData

延迟执行效果,在指定时间后继续执行效果链中的后续效果

构造函数 ​

GameDataEffectPersistDelay 双端 ​

csharp
public GameDataEffectPersistDelay(GameLink<GameDataEffect, GameDataEffectPersistDelay> link)

GameDataEffectPersistDelay 双端 ​

csharp
public GameDataEffectPersistDelay(IGameLink<GameDataEffectPersistDelay> link)

属性 ​

Amount 双端 ​

csharp
public FuncTimeEffect Amount { get; set; }

延迟的基础时间

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

RandomAmount 双端 ​

csharp
public FuncTimeEffect? RandomAmount { get; set; }

延迟的随机浮动时间。最终延迟 = Amount + Random(0, RandomAmount)

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

csharp
public new IGameLink<GameDataEffectPersistDelay> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectPersistLoop 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectPersistLoop : GameDataEffectPersist, IGameData<GameDataEffectPersistLoop>, IGameData

周期性循环持续效果:按照指定的时间间隔或次数,周期性地执行子效果。

备注

可以通过以下方式控制循环: 按次数:设置 Count 属性 按时长:设置 Duration 属性 同时设置:以先达到的条件为准 每次执行时会设置子效果的 PersistIndex,子效果可以根据此索引实现周期性变化(如 GameDataEffectPolarOffset 的周期性偏移)。

构造函数 ​

GameDataEffectPersistLoop 双端 ​

csharp
public GameDataEffectPersistLoop(GameLink<GameDataEffect, GameDataEffectPersistLoop> link)

GameDataEffectPersistLoop 双端 ​

csharp
public GameDataEffectPersistLoop(IGameLink<GameDataEffectPersistLoop> link)

属性 ​

PeriodicEffects 双端 ​

csharp
public List<IGameLink<GameDataEffect>?> PeriodicEffects { get; set; }

周期性执行的子效果列表。

备注

如果列表包含多个效果,会根据执行次数索引选择对应的效果。 当执行次数超过列表长度时,会使用最后一个效果。 每个子效果执行时会接收到 PersistIndex(当前执行次数,从 0 开始)。

Period 双端 ​

csharp
public FuncTimeEffect? Period { get; set; }

每次执行之间的时间间隔。

备注

如果为 Zero,所有周期效果将在同一帧内同步执行(需要设置 Count)。 适用于需要同时多方向发射投射物等场景,配合 GameDataEffectPolarOffset 的 PeriodicAngleOffset 使用。 如果未设置或为 null,效果将尽快连续执行(受游戏帧率限制)。

Count 双端 ​

csharp
public FuncUIntEffect? Count { get; set; }

最大执行次数。

备注

如果未设置,将根据 Duration 来确定执行次数。 如果同时设置了 Count 和 Duration,以先达到的条件为准。

Duration 双端 ​

csharp
public FuncTimeEffect? Duration { get; set; }

效果持续时长。

备注

如果未设置,将根据 Count 和 Period 来确定持续时长。 如果同时设置了 Count 和 Duration,以先达到的条件为准。

LoopFlags 双端 ​

csharp
public PersistLoopFlags LoopFlags { get; set; }

循环行为标志。

备注

包含 SkipInitialDelay 等控制选项。

csharp
public new IGameLink<GameDataEffectPersistLoop> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext context, bool preValidateOnly = false)

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectPlayerModifyProperty 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectPlayerModifyProperty : GameDataEffectUnit, IGameData<GameDataEffectPlayerModifyProperty>, IGameData

修改目标单位所属玩家的数值属性(如金币、资源等)

构造函数 ​

GameDataEffectPlayerModifyProperty 双端 ​

csharp
public GameDataEffectPlayerModifyProperty(GameLink<GameDataEffect, GameDataEffectPlayerModifyProperty> link)

GameDataEffectPlayerModifyProperty 双端 ​

csharp
public GameDataEffectPlayerModifyProperty(IGameLink<GameDataEffectPlayerModifyProperty> link)

属性 ​

Modification 双端 ​

csharp
public List<EffectPropertyModification<PropertyPlayerNumeric>> Modification { get; set; }

要修改的玩家属性和数值列表

Operation 双端 ​

csharp
public PropertyModificationOperation Operation { get; set; }

操作方式:Add(增减)或 Set(设为固定值)

csharp
public new IGameLink<GameDataEffectPlayerModifyProperty> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectPolarOffset 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectPolarOffset : GameDataEffect, IGameData<GameDataEffectPolarOffset>, IGameData

极坐标偏移效果:从目标位置按指定角度和距离进行偏移,并在新位置执行子效果。

备注

典型用途:将单位目标转换为固定距离的点目标(用于 skillshot 投射物方向计算)、 在目标周围创建圆形/扇形分布的效果、按角度展开多个投射物等。 投射物方向转换示例:如果需要向目标方向发射固定射程的 skillshot, 可以用 PolarOffset 将 Search 找到的单位目标转换为从施法者出发的固定距离点。 但更推荐直接使用 FixedRange,它等效于 自动完成此转换。 // 将 Search 找到的目标转换为施法者前方 800 距离的点 new GameDataEffectPolarOffset(Effect.MyOffset) { TargetLocation = new() { Value = BaseType.TargetLocation.Caster }, // 基点=施法者 Angle = new() { Method = EffectAngleMethod.AngleBetweenTwoPoints, Location = new() { Value = BaseType.TargetLocation.Caster }, OtherLocation = new() { Value = BaseType.TargetLocation.Default }, }, Distance = static (_) => 800f, TargetEffect = Effect.MyLaunchMissile, }; 周期性偏移:当作为 EffectPersistLoop 的周期效果时,可以根据周期索引动态调整偏移量。 周期偏移计算公式: index = PersistIndex - PeriodicOffsetBaselineIndex finalDistance = Distance + PeriodicDistanceOffset * index finalAngle = Angle + PeriodicAngleOffset * index 当 index 为负值时会产生反向偏移,这在需要对称或收缩效果时很有用。

构造函数 ​

GameDataEffectPolarOffset 双端 ​

csharp
public GameDataEffectPolarOffset(GameLink<GameDataEffect, GameDataEffectPolarOffset> link)

GameDataEffectPolarOffset 双端 ​

csharp
public GameDataEffectPolarOffset(IGameLink<GameDataEffectPolarOffset> link)

属性 ​

TargetEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? TargetEffect { get; set; }

在偏移后的位置执行的目标效果。

Distance 双端 ​

csharp
public FuncFloatEffect Distance { get; set; }

基础偏移距离

备注

如果 OffsetByUnitRadius 为 true,会额外加上目标单位的交互半径。

PeriodicDistanceOffset 双端 ​

csharp
public FuncFloatEffect? PeriodicDistanceOffset { get; set; }

周期性距离偏移增量

备注

仅在作为 EffectPersistLoop 的周期效果时生效。 每个周期的实际偏移距离 = Distance + PeriodicDistanceOffset × (PersistIndex - PeriodicOffsetBaselineIndex)

Angle 双端 ​

csharp
public EffectAngleExpression? Angle { get; set; }

基础偏移角度。

备注

可以指定为绝对角度、两点之间的角度或朝向角度。

PeriodicAngleOffset 双端 ​

csharp
public EffectAngleExpression? PeriodicAngleOffset { get; set; }

周期性角度偏移增量(单位:角度/周期)。

备注

仅在作为 EffectPersistLoop 的周期效果时生效。 每个周期的实际偏移角度 = Angle + PeriodicAngleOffset × (PersistIndex - PeriodicOffsetBaselineIndex) 可用于实现圆周运动、螺旋运动等效果。

PeriodicOffsetBaselineIndex 双端 ​

csharp
public FuncUIntEffect? PeriodicOffsetBaselineIndex { get; set; }

周期性偏移的基线索引。

备注

用于计算实际周期索引:index = PersistIndex - BaselineIndex 当 PersistIndex < BaselineIndex 时,index 为负值,会产生反向偏移。 默认值为 0,表示从第 0 个周期开始应用偏移。 示例:BaselineIndex = 2 时,前两个周期会反向偏移,从第 2 个周期开始正常偏移。

OffsetByUnitRadius 双端 ​

csharp
public bool OffsetByUnitRadius { get; set; }

是否在偏移距离中额外加上目标单位的交互半径。

备注

默认为 true。设置为 false 可实现更精确的位置控制。

PointLocalVar 双端 ​

csharp
public LocVarType? PointLocalVar { get; set; }

将偏移后的位置存储到指定的效果树的局部变量中。 效果树局部变量会在执行子效果时被子效果所继承。后续效果可以访问该局部变量。

csharp
public new IGameLink<GameDataEffectPolarOffset> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectRandomPointInCircle 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectRandomPointInCircle : GameDataEffect, IGameData<GameDataEffectRandomPointInCircle>, IGameData

在目标位置周围的圆形区域内生成随机坐标点,并对每个点执行子效果

构造函数 ​

GameDataEffectRandomPointInCircle 双端 ​

csharp
public GameDataEffectRandomPointInCircle(GameLink<GameDataEffect, GameDataEffectRandomPointInCircle> link)

GameDataEffectRandomPointInCircle 双端 ​

csharp
public GameDataEffectRandomPointInCircle(IGameLink<GameDataEffectRandomPointInCircle> link)

属性 ​

Radius 双端 ​

csharp
public FuncNumberEffect Radius { get; set; }

随机点的分布半径

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Count 双端 ​

csharp
public FuncUIntEffect Count { get; set; }

生成的随机点数量

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Effect 双端 ​

csharp
public IGameLink<GameDataEffect>? Effect { get; set; }

对每个随机点执行的效果

Flags 双端 ​

csharp
public RandomPointInCircleFlags Flags { get; set; }

PointLocVar 双端 ​

csharp
public LocVarType? PointLocVar { get; set; }

将生成的随机点存储到指定的局部变量中

csharp
public new IGameLink<GameDataEffectRandomPointInCircle> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext context, bool preValidateOnly = false)

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectSearch 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectSearch : GameDataEffect, IGameData<GameDataEffectSearch>, IGameData

区域搜索效果,在指定区域内搜索单位并对其执行子效果。支持圆形、扇形、矩形、线段等搜索形状

构造函数 ​

GameDataEffectSearch 双端 ​

csharp
public GameDataEffectSearch(GameLink<GameDataEffect, GameDataEffectSearch> link)

GameDataEffectSearch 双端 ​

csharp
public GameDataEffectSearch(IGameLink<GameDataEffectSearch> link)

属性 ​

MinCount 双端 ​

csharp
public FuncUIntEffect? MinCount { get; set; }

搜索结果的最小数量要求。未达到时根据 SearchFlags 决定是否失败

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

MaxCount 双端 ​

csharp
public FuncUIntEffect? MaxCount { get; set; }

搜索结果的最大数量限制。超出的目标将被忽略

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

MinCountError 双端 ​

csharp
public CmdResult MinCountError { get; set; }

当搜索结果不足 MinCount 时返回的错误类型

MinCountEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? MinCountEffect { get; set; }

当搜索结果不足 MinCount 时执行的替代效果

Radius 双端 ​

csharp
public FuncNumberEffect? Radius { get; set; }

搜索区域的半径(用于圆形和扇形搜索)

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

CentralAngle 双端 ​

csharp
public FuncAngleEffect? CentralAngle { get; set; }

扇形搜索的中心角度(单位:度)

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Height 双端 ​

csharp
public FuncNumberEffect? Height { get; set; }

搜索区域的高度/长度(用于矩形和线段搜索)

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Width 双端 ​

csharp
public FuncNumberEffect? Width { get; set; }

搜索区域的宽度(用于矩形和线段搜索)

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Method 双端 ​

csharp
public SearchMethod Method { get; set; }

搜索形状类型:Circle(圆形)、Cone(扇形)、Rectangle(矩形)、Line(线段)

Effect 双端 ​

csharp
public IGameLink<GameDataEffect>? Effect { get; set; }

对每个搜索到的目标执行的效果

ImpactUnitLocVar 双端 ​

csharp
public LocVarType? ImpactUnitLocVar { get; set; }

将当前命中的单位存储到指定的局部变量中

SearchOffset 双端 ​

csharp
public EffectOffsetExpression? SearchOffset { get; set; }

搜索中心点的偏移量

SearchFilters 双端 ​

csharp
public TargetFilterComplex? SearchFilters { get; set; }

搜索目标的筛选条件(如阵营、单位类型、状态等)

SearchValidator 双端 ​

csharp
public ValidatorEffect? SearchValidator { get; set; }

搜索结果的自定义验证器,用于进一步过滤搜索到的目标

TargetSorts 双端 ​

csharp
public ContextualPriorityComparer<Effect, Entity>? TargetSorts { get; set; }

搜索结果的排序规则,决定目标的处理优先级(如距离最近优先)

SearchFlags 双端 ​

csharp
public SearchFlags SearchFlags { get; set; }

搜索行为的控制标志(如是否在目标不足时直接失败)

csharp
public new IGameLink<GameDataEffectSearch> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext context, bool preValidateOnly = false)

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectSet 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectSet : GameDataEffect, IGameData<GameDataEffectSet>, IGameData

Ч�������������ã����ڽ������Ч����ϳ�һ������Ч��

备注

GameDataEffectSet ��Ч��ϵͳ�еĺ�������������������Ч�������һ��ִ�С� ���ṩ������ִ�п��ƣ�����ִ���������ơ����ѡ��Ψһ�Կ��Ƶȹ��ܡ� Ч������֧��������Ҫ��ִ��ģʽ��

  • ˳��ִ����������˳������ִ����Ч��
  • ���ִ����ʹ�ü�Ȩ����㷨ѡ����Ч��ִ�� ͨ�� SetFlags ���Ծ�ȷ����ִ����Ϊ��ʵ�ָ��ӵ���Ϸ���ƣ� ����ع������������ѡ������Ч���ȡ�

构造函数 ​

GameDataEffectSet 双端 ​

csharp
public GameDataEffectSet(GameLink<GameDataEffect, GameDataEffectSet> link)

GameDataEffectSet 双端 ​

csharp
public GameDataEffectSet(IGameLink<GameDataEffectSet> link)

属性 ​

Effects 双端 ​

csharp
public required WeightedLinkComplex<IGameLink<GameDataEffect>?> Effects { get; set; }

��ȡ��������Ч���б���֧�ּ�Ȩ���ѡ��

备注

�����Զ�����Ч�����Ͽ���ִ�е���Ч���б���ÿ����Ч������һ��Ȩ��ֵ�� �� WeightedRandom Ϊ true ʱ�� ϵͳ�����Ȩ�ؽ������ѡ�� Ȩ��ֵԽ�ߣ���ѡ�еĸ���Խ��Ȩ��Ϊ0��Ч����Զ���ᱻѡ�С�

SetFlags 双端 ​

csharp
public SetFlags SetFlags { get; set; }

��ȡ������Ч�����ϵ�ִ�б�־������ִ����Ϊ

备注

SetFlags ����Ч�����ϵ�ִ�з�ʽ����������ԡ�Ψһ�ԡ�Դ���Ǻ���֤����Ϊ�� ��Щ��־����Ͽ���ʵ�ָ��ָ��ӵ�ִ��ģʽ��

MinCount 双端 ​

csharp
public FuncUIntEffect? MinCount { get; set; }

��ȡ��������Сִ��Ч������

备注

�����Զ�����Ч�����ϱ���ִ�е�������Ч�������� �������Ϊ null����Ĭ��Ϊ0�� �� Unique Ϊ true ʱ�� ������õIJ��ظ���Ч���������� MinCount��Ч�����ϻ�ִ��ʧ�ܡ� ������֧�ֶ�̬���㣬����ͨ������ʽ�������ز�ͬ��ֵ��

MaxCount 双端 ​

csharp
public FuncUIntEffect? MaxCount { get; set; }

��ȡ���������ִ��Ч������

备注

�����Զ�����Ч������������ִ�е���Ч�������� �������Ϊ null������� Unique �� PreferUnique ��ֵ������Ϊ��

  • �� Unique �� PreferUnique Ϊ true ʱ���������Ϊ����Ч������
  • �����߶�Ϊ false ʱ���������ô����ԣ���ʱ������Ϊ�����ظ�ִ����ͬ����Ч���� ���MaxCount��ֵ���������壬����ͻ�������ѭ���� ������֧�ֶ�̬���㣬����ͨ������ʽ�������ز�ͬ��ֵ��
csharp
public new IGameLink<GameDataEffectSet> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

����Ч�����ϵ�ִ��ʵ��

  • defaultTarget — Ĭ��Ŀ��
  • creationContext — ����������
  • preValidateOnly — �Ƿ������Ԥ��֤

返回: �´����� EffectSet ʵ��

备注

�˷�������Ч�����ϵ�ִ��ʵ��������ʵ��ִ��Ч���� �� preValidateOnly Ϊ true ʱ��������ʵ����������֤�� ����ִ��ʵ�ʵ�Ч���߼���

Execute 双端 ​

csharp
public override void Execute(Effect context)

ִ��Ч������

  • context — Ч��ִ��������
备注

�˷���ʵ����Ч�����ϵĺ���ִ���߼����������õı�־�Ͳ���ִ����Ч���� ִ�����̣�

  1. ��������� OverrideSource����Ŀ������ΪԴ
  2. ���� WeightedRandom ����ִ��ģʽ
  3. ���� Unique �� PreferUnique �����ظ���
  4. ִ��ѡ����������Ч�� ִ��ģʽ��
  • ˳��ִ����������˳������ִ�У�ֱ���ﵽִ����������
  • ���ִ����ʹ�ü�Ȩ���ѡ��֧��Ψһ�Կ���

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

��֤Ч�����ϵ�������Ч��

  • context — Ч����֤������

返回: ��֤���

备注

�˷�����֤Ч�����ϵ������Ƿ���Ч��������

  • ��С�����ִ�������ĺ�����
  • ��Ч�������ij�����
  • ��Ч������Ч�ԣ���������֤ʱ�� ��֤����
  1. MinCount ���ܴ��� MaxCount
  2. �� Unique �� PreferUnique ��Ϊ false ʱ��MaxCount ����Ϊ null
  3. �� Unique Ϊ true ʱ������Ч�������������� MinCount
  4. ��������Ч����֤ʱ����Ч��Ч��������������Ҫ��

GameDataEffectSwitch 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectSwitch : GameDataEffect, IGameData<GameDataEffectSwitch>, IGameData

条件分支效果,按顺序检查 CaseArray 中的条件,执行第一个通过验证的分支效果

构造函数 ​

GameDataEffectSwitch 双端 ​

csharp
public GameDataEffectSwitch(GameLink<GameDataEffect, GameDataEffectSwitch> link)

GameDataEffectSwitch 双端 ​

csharp
public GameDataEffectSwitch(IGameLink<GameDataEffectSwitch> link)

属性 ​

CaseArray 双端 ​

csharp
public List<EffectCase> CaseArray { get; set; }

条件分支列表,按顺序依次检查验证条件

CaseDefault 双端 ​

csharp
public IGameLink<GameDataEffect>? CaseDefault { get; set; }

当所有分支条件都不满足时执行的默认效果

Flags 双端 ​

csharp
public SwitchFlags Flags { get; set; }
csharp
public new IGameLink<GameDataEffectSwitch> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectTeleport 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectTeleport : GameDataEffectWhichUnit, IGameData<GameDataEffectTeleport>, IGameData

传送效果,将指定单位瞬间移动到目标位置

构造函数 ​

GameDataEffectTeleport 双端 ​

csharp
public GameDataEffectTeleport(GameLink<GameDataEffect, GameDataEffectTeleport> link)

GameDataEffectTeleport 双端 ​

csharp
public GameDataEffectTeleport(IGameLink<GameDataEffectTeleport> link)

属性 ​

TeleportFlags 双端 ​

csharp
public TeleportFlags TeleportFlags { get; set; }

MinDistance 双端 ​

csharp
public FuncFloatEffect? MinDistance { get; set; }

最小传送距离。传送距离小于此值时效果将验证失败

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

DistanceClamp 双端 ​

csharp
public FuncFloatEffect? DistanceClamp { get; set; }

最大传送距离限制。超出此距离的目标点将被截断到此范围内

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

TeleportedEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? TeleportedEffect { get; set; }

传送完成后对该单位执行的后续效果

CentralLocation 双端 ​

csharp
public TargetLocationExpression? CentralLocation { get; set; }

距离计算的中心点。null 时使用单位当前位置作为中心

csharp
public new IGameLink<GameDataEffectTeleport> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext context, bool preValidateOnly = false)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnit 双端 ​

命名空间 GameCore.Execution.Data

csharp
public abstract class GameDataEffectUnit : GameDataEffect, IGameData<GameDataEffectUnit>, IGameData

以单位实体为目标的效果基类,自动验证目标必须为有效的实体

构造函数 ​

GameDataEffectUnit 双端 ​

csharp
public GameDataEffectUnit(GameLink<GameDataEffect, GameDataEffectUnit> link)

GameDataEffectUnit 双端 ​

csharp
public GameDataEffectUnit(IGameLink<GameDataEffectUnit> link)

属性 ​

csharp
public new IGameLink<GameDataEffectUnit> Link { get; }

方法 ​

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

GameDataEffectUnitGrantExperience 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitGrantExperience : GameDataEffectUnit, IGameData<GameDataEffectUnitGrantExperience>, IGameData

授予目标单位经验值的效果节点,支持正值(增加经验)和负值(扣除经验)。

备注

此效果节点用于向目标单位授予指定数量的经验值。经验值的变更会自动触发等级重新计算, 正值可能导致升级,负值可能导致降级。 经验加成选项: 当 AffectedByExperienceMultiplier 为 true 时, 经验值会受到 ExperienceDistributionMultiplier 的影响。 当 AffectedByExperienceMultiplier 为 false 时, 经验值将直接应用,不受任何经验加成影响。

构造函数 ​

GameDataEffectUnitGrantExperience 双端 ​

csharp
public GameDataEffectUnitGrantExperience(GameLink<GameDataEffect, GameDataEffectUnitGrantExperience> link)

GameDataEffectUnitGrantExperience 双端 ​

csharp
public GameDataEffectUnitGrantExperience(IGameLink<GameDataEffectUnitGrantExperience> link)

属性 ​

Amount 双端 ​

csharp
public FuncNumberEffect Amount { get; set; }

获取或设置授予的经验值计算函数,支持正值和负值。

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

AffectedByExperienceMultiplier 双端 ​

csharp
public bool AffectedByExperienceMultiplier { get; set; }

获取或设置经验值是否受到经验加成(ExperienceDistributionMultiplier)的影响。

csharp
public new IGameLink<GameDataEffectUnitGrantExperience> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitKill 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitKill : GameDataEffectUnit, IGameData<GameDataEffectUnitKill>, IGameData

击杀目标单位(触发完整的死亡流程,包括死亡事件和掉落等)

构造函数 ​

GameDataEffectUnitKill 双端 ​

csharp
public GameDataEffectUnitKill(GameLink<GameDataEffect, GameDataEffectUnitKill> link)

GameDataEffectUnitKill 双端 ​

csharp
public GameDataEffectUnitKill(IGameLink<GameDataEffectUnitKill> link)

属性 ​

DeathType 双端 ​

csharp
public DeathType DeathType { get; set; }

死亡类型(Normal 正常死亡、Destroy 直接移除等)

csharp
public new IGameLink<GameDataEffectUnitKill> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitModifyFacing 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitModifyFacing : GameDataEffectUnit, IGameData<GameDataEffectUnitModifyFacing>, IGameData

修改目标单位的朝向角度

构造函数 ​

GameDataEffectUnitModifyFacing 双端 ​

csharp
public GameDataEffectUnitModifyFacing(GameLink<GameDataEffect, GameDataEffectUnitModifyFacing> link)

GameDataEffectUnitModifyFacing 双端 ​

csharp
public GameDataEffectUnitModifyFacing(IGameLink<GameDataEffectUnitModifyFacing> link)

属性 ​

NewFacingAngle 双端 ​

csharp
public EffectAngleExpression NewFacingAngle { get; set; }

新的朝向角度表达式

Duration 双端 ​

csharp
public FuncTimeEffect? Duration { get; set; }

转向动画的持续时间。null 或 Zero 表示瞬间转向

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

csharp
public new IGameLink<GameDataEffectUnitModifyFacing> Link { get; }

方法 ​

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitModifyLevel 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitModifyLevel : GameDataEffectUnit, IGameData<GameDataEffectUnitModifyLevel>, IGameData

修改目标单位等级的效果节点,支持直接设置或增减等级。

备注

此效果节点用于直接修改目标单位的等级。 操作方式: Set - 将等级直接设置为指定值 Add - 在当前等级基础上增减指定值(支持负值以降级) 有等级配置(UnitLeveling)的单位: 等级变更通过 ForceSetLevel 执行,经验值会被重置为 0, 等级受到 0 ~ LevelMax 范围限制,并自动更新等级相关的属性和状态修改。 无等级配置的单位(需关闭 RequireLevelingComponent): 等级值将直接写入 Level 属性,最小值限制为 0,不受任何等级配置约束。

构造函数 ​

GameDataEffectUnitModifyLevel 双端 ​

csharp
public GameDataEffectUnitModifyLevel(GameLink<GameDataEffect, GameDataEffectUnitModifyLevel> link)

GameDataEffectUnitModifyLevel 双端 ​

csharp
public GameDataEffectUnitModifyLevel(IGameLink<GameDataEffectUnitModifyLevel> link)

属性 ​

Amount 双端 ​

csharp
public FuncIntEffect Amount { get; set; }

获取或设置等级值的计算函数。 当 Operation 为 Set 时,此值为目标等级;为 Add 时,此值为等级增量(支持负值)。

备注

服务端公式偏向:默认可只在 #if SERVER 中赋值;字段不因此变成服务端专属,客户端需要读取且公式双端兼容时也可共享赋值。

Operation 双端 ​

csharp
public PropertyModificationOperation Operation { get; set; }

获取或设置等级修改的操作类型。

RequireLevelingComponent 双端 ​

csharp
public bool RequireLevelingComponent { get; set; }

获取或设置是否要求目标单位拥有英雄升级组件(UnitLeveling)。

csharp
public new IGameLink<GameDataEffectUnitModifyLevel> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitModifyOwner 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitModifyOwner : GameDataEffectUnit, IGameData<GameDataEffectUnitModifyOwner>, IGameData

修改目标单位的所属玩家(转换控制权)

构造函数 ​

GameDataEffectUnitModifyOwner 双端 ​

csharp
public GameDataEffectUnitModifyOwner(GameLink<GameDataEffect, GameDataEffectUnitModifyOwner> link)

GameDataEffectUnitModifyOwner 双端 ​

csharp
public GameDataEffectUnitModifyOwner(IGameLink<GameDataEffectUnitModifyOwner> link)

属性 ​

Owner 双端 ​

csharp
public EffectOwnerExpression Owner { get; set; }

新的所属玩家表达式

csharp
public new IGameLink<GameDataEffectUnitModifyOwner> Link { get; }

方法 ​

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitModifyUnitProperty 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitModifyUnitProperty : GameDataEffectUnit, IGameData<GameDataEffectUnitModifyUnitProperty>, IGameData

修改单位属性效果的游戏数据配置,用于动态修改目标单位的属性值

备注

GameDataEffectUnitModifyUnitProperty 是效果系统中用于修改单位属性的核心组件。 它支持对单位的 UnitPropertyComplex 组件进行属性值的设置或累加操作。 属性修改方式: Set - 直接设置属性值为指定值 Add - 在当前属性值基础上累加指定值 属性子类型: 每个属性修改可以指定 PropertySubType,如 Base、Bonus 等, 用于精确控制属性的哪个部分被修改。 使用场景: 技能效果临时修改单位属性(如攻击力、防御力) Buff效果持续影响单位属性 装备或物品永久提升单位属性 等级提升时增加基础属性

构造函数 ​

GameDataEffectUnitModifyUnitProperty 双端 ​

csharp
public GameDataEffectUnitModifyUnitProperty(GameLink<GameDataEffect, GameDataEffectUnitModifyUnitProperty> link)

GameDataEffectUnitModifyUnitProperty 双端 ​

csharp
public GameDataEffectUnitModifyUnitProperty(IGameLink<GameDataEffectUnitModifyUnitProperty> link)

属性 ​

Modification 双端 ​

csharp
public List<UnitPropertyModificationEffect> Modification { get; set; }

获取或设置要修改的属性列表

备注

每个修改项定义了要修改的属性、计算值的函数、可选的随机变化以及属性子类型。 支持同时修改多个属性。

Operation 双端 ​

csharp
public PropertyModificationOperation Operation { get; set; }

获取或设置属性修改操作类型

备注

Set - 将属性值设置为指定值 Add - 在当前值基础上累加指定值(默认)

csharp
public new IGameLink<GameDataEffectUnitModifyUnitProperty> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitModifyVital 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitModifyVital : GameDataEffectUnit, IGameData<GameDataEffectUnitModifyVital>, IGameData

修改目标单位的生命维持属性值(如生命值、魔法值等)

构造函数 ​

GameDataEffectUnitModifyVital 双端 ​

csharp
public GameDataEffectUnitModifyVital(GameLink<GameDataEffect, GameDataEffectUnitModifyVital> link)

GameDataEffectUnitModifyVital 双端 ​

csharp
public GameDataEffectUnitModifyVital(IGameLink<GameDataEffectUnitModifyVital> link)

属性 ​

Modification 双端 ​

csharp
public List<EffectPropertyModification<PropertyVital>> Modification { get; set; }

要修改的属性和数值列表

Operation 双端 ​

csharp
public VitalModificationOperation Operation { get; set; }

操作方式:Heal(治疗,受治疗加成影响)、Add(直接增减)、Set(设为固定值)

csharp
public new IGameLink<GameDataEffectUnitModifyVital> Link { get; }

方法 ​

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitMoverApply 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitMoverApply : GameDataEffectUnit, IGameData<GameDataEffectUnitMoverApply>, IGameData

为目标单位施加移动器(Mover),使其按指定轨迹移动(如击退、冲刺、牵引等)

构造函数 ​

GameDataEffectUnitMoverApply 双端 ​

csharp
public GameDataEffectUnitMoverApply(GameLink<GameDataEffect, GameDataEffectUnitMoverApply> link)

GameDataEffectUnitMoverApply 双端 ​

csharp
public GameDataEffectUnitMoverApply(IGameLink<GameDataEffectUnitMoverApply> link)

属性 ​

Mover 双端 ​

csharp
public IGameLink<GameDataMover> Mover { get; set; }

要施加的移动器数据

LaunchEntity 双端 ​

csharp
public TargetLocationExpression? LaunchEntity { get; set; }

移动器的发起实体(用于计算方向等)。null 时使用效果源

MoverTarget 双端 ​

csharp
public TargetLocationExpression MoverTarget { get; set; }

移动器的目标位置/目标单位表达式

csharp
public new IGameLink<GameDataEffectUnitMoverApply> Link { get; }

方法 ​

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitMoverRemove 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitMoverRemove : GameDataEffectUnit, IGameData<GameDataEffectUnitMoverRemove>, IGameData

移除目标单位身上的移动器

构造函数 ​

GameDataEffectUnitMoverRemove 双端 ​

csharp
public GameDataEffectUnitMoverRemove(GameLink<GameDataEffect, GameDataEffectUnitMoverRemove> link)

GameDataEffectUnitMoverRemove 双端 ​

csharp
public GameDataEffectUnitMoverRemove(IGameLink<GameDataEffectUnitMoverRemove> link)

属性 ​

Mover 双端 ​

csharp
public IGameLink<GameDataMover>? Mover { get; set; }

要移除的移动器类型。null 表示移除所有移动器

csharp
public new IGameLink<GameDataEffectUnitMoverRemove> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitRemove 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitRemove : GameDataEffectUnit, IGameData<GameDataEffectUnitRemove>, IGameData

直接移除目标单位(不触发死亡流程)

构造函数 ​

GameDataEffectUnitRemove 双端 ​

csharp
public GameDataEffectUnitRemove(GameLink<GameDataEffect, GameDataEffectUnitRemove> link)

GameDataEffectUnitRemove 双端 ​

csharp
public GameDataEffectUnitRemove(IGameLink<GameDataEffectUnitRemove> link)

属性 ​

csharp
public new IGameLink<GameDataEffectUnitRemove> Link { get; }

方法 ​

Execute 双端 ​

csharp
public override void Execute(Effect context)

GameDataEffectUnitRevive 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class GameDataEffectUnitRevive : GameDataEffectUnit, IGameData<GameDataEffectUnitRevive>, IGameData

复活目标单位,使已死亡的单位恢复到存活状态

构造函数 ​

GameDataEffectUnitRevive 双端 ​

csharp
public GameDataEffectUnitRevive(GameLink<GameDataEffect, GameDataEffectUnitRevive> link)

GameDataEffectUnitRevive 双端 ​

csharp
public GameDataEffectUnitRevive(IGameLink<GameDataEffectUnitRevive> link)

属性 ​

csharp
public new IGameLink<GameDataEffectUnitRevive> Link { get; }

方法 ​

Execute 仅服务端 ​

csharp
public override void Execute(Effect context)

GameDataEffectWhichUnit 双端 ​

命名空间 GameCore.Execution.Data

csharp
public abstract class GameDataEffectWhichUnit : GameDataEffect, IGameData<GameDataEffectWhichUnit>, IGameData

需要指定操作单位的效果基类,通过 WhichUnit 表达式确定要操作的单位

构造函数 ​

GameDataEffectWhichUnit 双端 ​

csharp
public GameDataEffectWhichUnit(GameLink<GameDataEffect, GameDataEffectWhichUnit> link)

GameDataEffectWhichUnit 双端 ​

csharp
public GameDataEffectWhichUnit(IGameLink<GameDataEffectWhichUnit> link)

属性 ​

WhichUnit 双端 ​

csharp
public TargetLocationExpression WhichUnit { get; set; }

指定要操作的单位的表达式(如效果源、效果目标、局部变量中的单位等)

csharp
public new IGameLink<GameDataEffectWhichUnit> Link { get; }

方法 ​

ProcessWhichUnit 双端 ​

csharp
protected virtual CmdResult<Entity> ProcessWhichUnit(Effect context)

CreateEffect 双端 ​

csharp
public override Effect CreateEffect(ITarget defaultTarget, IExecutionContext creationContext, bool preValidateOnly = false)

Validate 双端 ​

csharp
public override CmdResult Validate(Effect context)

UnitPropertyModificationEffect 双端 ​

命名空间 GameCore.Execution.Data

csharp
public class UnitPropertyModificationEffect

表示单位属性修改的配置项,定义如何修改单位的某个属性

备注

此类与 UnitPropertyModification 类似,但专门用于效果系统, 使用 FuncNumberEffect 来支持基于效果上下文的动态值计算。

构造函数 ​

UnitPropertyModificationEffect 双端 ​

csharp
public UnitPropertyModificationEffect()

属性 ​

Property 双端 ​

csharp
public required IGameLink<GameDataUnitProperty> Property { get; set; }

获取或设置要修改的单位属性

备注

必须是有效的 GameDataUnitProperty 链接。

Value 双端 ​

csharp
public FuncNumberEffect Value { get; set; }

获取或设置用于计算修改值的函数

备注

该函数接收效果上下文作为参数,可以基于施法者属性、效果等级等计算修改值。

Random 双端 ​

csharp
public double? Random { get; set; }

获取或设置应用于修改值的随机变化范围

备注

当指定时,实际修改值将在 [Value, Value + Random) 范围内随机选择。

SubType 双端 ​

csharp
public PropertySubType SubType { get; set; }

获取或设置要修改的属性子类型

备注

属性子类型决定修改属性的哪个部分,如基础值、奖励值等。 最终属性值通常由各个子类型的值通过公式计算得出。

CancelOrderMethod 双端 ​

命名空间 GameCore.Execution.Data.Enum

csharp
public enum CancelOrderMethod

枚举值 ​

  • Attack
  • Move
  • Ability
  • Any

PropertyFetchMethod 双端 ​

命名空间 GameCore.Execution.Data.Enum

csharp
public enum PropertyFetchMethod

枚举值 ​

  • SnapshotBeforeProperty
  • PropertyBeforeSnapshot
  • PropertyAndUpdate

SearchMethod 双端 ​

命名空间 GameCore.Execution.Data.Enum

csharp
public enum SearchMethod

枚举值 ​

  • Circle
  • Cone
  • Rectangle
  • Line

UnitPicker 双端 ​

命名空间 GameCore.Execution.Data.Enum

csharp
public enum UnitPicker

枚举值 ​

  • UnitLink
  • Location

VitalModificationOperation 双端 ​

命名空间 GameCore.Execution.Data.Enum

csharp
public enum VitalModificationOperation

枚举值 ​

  • Heal — Heals the vital by a specific value, will go through any healing modifiers and formulas. Client can receive the healing notification and the floating text will be created automatically.
  • Set — Sets the current vital value to a specific value, replacing the current value.
  • Add — Adds a value to the current vital value. Unlike , this does not go through healing modifiers or formulas.

CreateUnitFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class CreateUnitFlags

构造函数 ​

CreateUnitFlags 双端 ​

csharp
public CreateUnitFlags()

属性 ​

UseDefaultAI 双端 ​

csharp
public bool UseDefaultAI { get; set; }

EffectCase 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class EffectCase

构造函数 ​

EffectCase 双端 ​

csharp
public EffectCase()

属性 ​

Validator 双端 ​

csharp
public ValidatorEffect Validator { get; set; }

Effect 双端 ​

csharp
public IGameLink<GameDataEffect>? Effect { get; set; }

PersistChannelFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class PersistChannelFlags

构造函数 ​

PersistChannelFlags 双端 ​

csharp
public PersistChannelFlags()

属性 ​

Channeling 双端 ​

csharp
public bool Channeling { get; set; }

Channeled 双端 ​

csharp
public bool Channeled { get; set; }

PersistLoopFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class PersistLoopFlags

周期性循环持续效果的行为标志。

构造函数 ​

PersistLoopFlags 双端 ​

csharp
public PersistLoopFlags()

属性 ​

SkipInitialDelay 双端 ​

csharp
public bool SkipInitialDelay { get; set; }

是否跳过初始延迟,立即执行第一次周期效果。

备注

默认为 false:效果会等待一个周期(Period)后才开始第一次执行。 设置为 true:效果会在启动时立即执行第一次,然后等待周期后执行第二次。 这在需要立即看到效果时很有用,例如在测试或需要即时反馈的游戏场景中。

RandomPointInCircleFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class RandomPointInCircleFlags

构造函数 ​

RandomPointInCircleFlags 双端 ​

csharp
public RandomPointInCircleFlags()

属性 ​

RestrictToCircumference 双端 ​

csharp
public bool RestrictToCircumference { get; set; }

SearchFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class SearchFlags

构造函数 ​

SearchFlags 双端 ​

csharp
public SearchFlags()

属性 ​

FailIfNotEnoughTarget 双端 ​

csharp
public bool FailIfNotEnoughTarget { get; set; }

ExtendByUnitRadius 双端 ​

csharp
public bool ExtendByUnitRadius { get; set; }

ValidateChildren 双端 ​

csharp
public bool ValidateChildren { get; set; }

OffsetByUnitRadiusAndAngle 双端 ​

csharp
public bool OffsetByUnitRadiusAndAngle { get; set; }

SetFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class SetFlags

定义效果集合的执行标志,控制效果集合的执行行为和特性

备注

SetFlags 类用于配置效果集合(GameDataEffectSet)的执行方式,包括随机性、唯一性、 源覆盖和子效果验证等行为。这些标志决定了效果集合如何从子效果列表中选择和执行效果, 为创建复杂的效果组合提供了灵活的控制选项。

构造函数 ​

SetFlags 双端 ​

csharp
public SetFlags()

属性 ​

WeightedRandom 双端 ​

csharp
public bool WeightedRandom { get; set; }

获取或设置是否使用加权随机选择子效果

备注

当设置为 true 时,效果集合会使用加权随机算法从子效果列表中选择效果执行。 当设置为 false 时,效果集合会按顺序执行子效果。 默认值为 false。 此标志与 Unique 和 PreferUnique 配合使用, 可以实现复杂的随机选择逻辑。

PreferUnique 双端 ​

csharp
public bool PreferUnique { get; set; }

获取或设置是否优先选择不重复的子效果

备注

当设置为 true 时,效果集合会优先选择尚未执行过的子效果。 当设置为 false 时,效果集合不会考虑重复性。 默认值为 true。 此标志与 WeightedRandom 配合使用时,可以实现"尽量不重复"的随机选择。 当所有子效果都已执行过时,系统会重新开始选择。

Unique 双端 ​

csharp
public bool Unique { get; set; }

获取或设置是否严格禁止重复执行子效果

备注

当设置为 true 时,效果集合严格禁止重复执行同一个子效果。 当设置为 false 时,允许重复执行子效果。 默认值为 false。 此标志比 PreferUnique 更严格,当设置为 true 时, 如果可用的不重复子效果数量少于 MinCount, 效果集合会执行失败。

OverrideSource 双端 ​

csharp
public bool OverrideSource { get; set; }

获取或设置是否将目标作为源传递给子效果

备注

当设置为 true 时,效果集合会将当前目标设置为子效果的源。 当设置为 false 时,子效果会继承父效果的源。 默认值为 false。 此标志用于创建"连锁反应"类型的效果,其中每个子效果的目标成为下一个效果的源。 常用于闪电链、弹射效果等场景。

ValidateChildren 双端 ​

csharp
public bool ValidateChildren { get; set; }

获取或设置是否在执行前验证子效果

备注

当设置为 true 时,效果集合会在执行前验证每个子效果的有效性。 当设置为 false 时,跳过子效果验证。 默认值为 false。 启用此标志后,只有通过验证的子效果才会计入执行次数,但会增加性能开销。 当 Unique 为 true 时,此标志特别重要, 因为系统需要确保有足够的有效子效果来满足最小执行数量要求。

SwitchFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class SwitchFlags

构造函数 ​

SwitchFlags 双端 ​

csharp
public SwitchFlags()

属性 ​

ValidateChildren 双端 ​

csharp
public bool ValidateChildren { get; set; }

TeleportFlags 双端 ​

命名空间 GameCore.Execution.Data.Struct

csharp
public class TeleportFlags

构造函数 ​

TeleportFlags 双端 ​

csharp
public TeleportFlags()

属性 ​

ClearOrderQueue 双端 ​

csharp
public bool ClearOrderQueue { get; set; }

SyncOffset 双端 ​

csharp
public bool SyncOffset { get; set; }

IChannelUser 双端 ​

命名空间 GameCore.Execution.Interface

csharp
public interface IChannelUser

属性 ​

ChannelingEffect 双端 ​

csharp
public IExecutableObject? ChannelingEffect { get; }

方法 ​

StartChanneling 双端 ​

csharp
bool StartChanneling()

StopChanneling 双端 ​

csharp
bool StopChanneling()

StartChanneled 双端 ​

csharp
bool StartChanneled()

StopChanneled 双端 ​

csharp
bool StopChanneled()

OnChannelStopped 双端 ​

csharp
void OnChannelStopped()