创建新的卡片效果
CCG 套件包括一组默认卡片效果:
- 增加玩家属性:它在给定的持续时间内以给定的数量增加目标玩家的属性。
- 减少玩家属性:它在给定的持续时间内按给定的数量减少目标玩家的属性。
- 设置玩家统计数据:它将目标玩家的统计数据设置为给定值。
- 重置玩家属性:它将目标玩家的属性重置为其原始值。
- 增加卡牌属性:它在给定的持续时间内按给定的数量增加目标卡的属性。
- 减少卡牌属性:它在给定的持续时间内将目标卡的属性减少给定的数量。
- 设置卡牌属性:它将目标卡的属性设置为给定值。
- 重置卡牌属性:它将目标卡的属性重置为其原始值。
- 添加关键字:它将给定的关键字添加到目标卡中。
- 删除关键字:它从目标卡中删除给定的关键字。
- 移动卡牌效果:将目标卡牌移动到另一个游戏区域。
可以以非常方便的方式创建自己的自定义效果,编辑器将自动选择它们并在效果下拉列表中提供它们,而无需您编写任何其他代码来执行此操作。
如果要创建新效果,首先需要确定它是玩家效果(即,它针对一个玩家或一组玩家)还是卡牌效果(即,它针对一张牌或一组牌)。
我们以 增加玩家属性 效果作为玩家效应的参考:
[PlayerTarget]
public class IncreasePlayerStatEffect : PlayerEffect
{
[PlayerStatField("Player stat")]
[Order(1)]
public int statId;
[ValueField("Value")]
[Order(2)]
public Value value;
[IntField("Duration")]
[Order(3)]
public int duration;
public override void Resolve(GameState state, PlayerInfo player)
{
var modifier = new Modifier(value.GetValue(state, player), duration);
player.stats[statId].AddModifier(modifier);
}
}
而 减少卡牌效果 作为对卡牌效果的参考:
[CardTarget]
public class DecreaseCardStatEffect : CardStatEffect
{
[ValueField("Value")]
[Order(4)]
public Value value;
[IntField("Duration")]
[Order(5)]
public int duration;
public override void Resolve(GameState state, RuntimeCard card)
{
var modifier = new Modifier(-value.GetValue(state, card.ownerPlayer), duration);
card.stats[statId].AddModifier(modifier);
}
}
如您所见,有几个有用的Effect基类:
- PlayerEffect:播放器效果的基类。
- CardEffect:卡片效果的基类。
- CardStatEffect:卡片统计效果的实用工具基类。
以及Effect字段的几个有用特性:
- Order:它允许您在可视化编辑器中确定字段的呈现顺序。
- IntField:用于整数字段。
- EnumField:用于枚举字段。
- ValueField:用于值字段。
- PlayerStatField:用于玩家统计字段。
- CardTypeField:用于卡片类型字段。
- CardStatField:用于卡片统计字段。
- KeywordTypeField:用于关键字类型字段。
- KeywordValueField:用于关键字值字段。
- GameZoneField:用于游戏区域字段。
通过这些特性,您可以动态访问为游戏定义的常规设置(如统计信息或区域),而无需编写任何其他代码。这是上一个播放器效果在编辑器中的样子:
Effect 的实际逻辑发生在 Resolve 方法中,玩家 effects 的签名如下:
public override void Resolve(GameState state, PlayerInfo player)
{
// ...
}
卡片 effects 的签名如下:
public override void Resolve(GameState state, RuntimeCard card)
{
// ...
}