局内保存
SavedProperty
在卡牌、遗物、附魔、Modifier(每日挑战效果)的Model的属性中中添加带SavedProperty的属性即可保存。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [Pool(typeof(SharedRelicPool))] public class TestRelic : CustomRelicModel { [SavedProperty] public int Test_GameTurns { get; set; } = 0;
protected override IEnumerable<DynamicVar> CanonicalVars => [new CardsVar(1), new DynamicVar("GameTurns", Test_GameTurns)];
public override async Task AfterPlayerTurnStart(PlayerChoiceContext choiceContext, Player player) { Test_GameTurns++; DynamicVars["GameTurns"].BaseValue = Test_GameTurns; await CardPileCmd.Draw(choiceContext, DynamicVars.Cards.IntValue, player); } }
|
1 2 3 4 5
| { "TEST-TEST_RELIC.title": "测试遗物", "TEST-TEST_RELIC.description": "每回合开始时,抽[blue]{Cards}[/blue]张牌。\n已经历过[blue]{GameTurns}[/blue]回合了。", "TEST-TEST_RELIC.flavor": "觉得很眼熟?" }
|
SavedSpireField
使用一个静态变量SavedSpireField<TType, TVal>可以为一个类添加可保存的新的变量。这种方式不需要你对类有编辑能力,例如可往所有遗物里加个变量。
正常添加即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Pool(typeof(TestRelicPool))] public class TestRelic : CustomRelicModel { public override RelicRarity Rarity => RelicRarity.Common;
protected override IEnumerable<DynamicVar> CanonicalVars => [new CardsVar(1)];
public static SavedSpireField<TestRelic, int> GameTurnsField = new(() => 0, "Test_GameTurns");
public override async Task AfterPlayerTurnStart(PlayerChoiceContext choiceContext, Player player) { GameTurnsField.Set(this, GameTurnsField.Get(this) + 1); await CardPileCmd.Draw(choiceContext, DynamicVars.Cards.IntValue, player); } }
|
支持的类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| protected static readonly HashSet<Type> SupportedTypes = [ typeof(int), typeof(bool), typeof(string), typeof(ModelId), typeof(int[]), typeof(SerializableCard), typeof(SerializableCard[]), typeof(List<SerializableCard>), ];
protected static bool IsTypeSupported(Type t) => SupportedTypes.Contains(t) || t.IsEnum || (t.IsArray && t.GetElementType()!.IsEnum);
|
此外你也可以使用SpireField<TType, TVal>为一个类添加新的变量,无法保存。