Timeline And Unlocks
Add Story And Epoch Models
Use ModStoryTemplate and ModEpochTemplate when the mod adds progression nodes.
public sealed class MyStory : ModStoryTemplate
{
protected override string StoryKey => "my_mod_story";
}
public sealed class MyEpoch : ModEpochTemplate
{
public override string Id => "MY_MOD_FIRST_LESSON";
}Write title, description, unlock text, and story title in epochs.json. Register them with attributes:
[RegisterStory]
public sealed class MyStory : ModStoryTemplate
{
protected override string StoryKey => "my_mod_story";
}
[RegisterEpoch]
[RegisterStoryEpoch(typeof(MyStory))]
[AutoTimelineSlotAfterColumn(EpochEra.Act1)]
public sealed class MyEpoch : ModEpochTemplate
{
public override string Id => "MY_MOD_FIRST_LESSON";
}Or register them with a content pack:
RitsuLibFramework.CreateContentPack("MyMod")
.Story<MyStory>()
.Epoch<MyEpoch>()
.StoryEpoch<MyStory, MyEpoch>()
.ModEpochAutoTimelineSlotAfterColumn<MyEpoch>(EpochEra.Act1)
.Apply();添加 Story 与 Epoch
Mod 添加进度节点时,使用 ModStoryTemplate 和 ModEpochTemplate。
public sealed class MyStory : ModStoryTemplate
{
protected override string StoryKey => "my_mod_story";
}
public sealed class MyEpoch : ModEpochTemplate
{
public override string Id => "MY_MOD_FIRST_LESSON";
}标题、描述、解锁文本和故事标题写在 epochs.json。可以用注解注册:
[RegisterStory]
public sealed class MyStory : ModStoryTemplate
{
protected override string StoryKey => "my_mod_story";
}
[RegisterEpoch]
[RegisterStoryEpoch(typeof(MyStory))]
[AutoTimelineSlotAfterColumn(EpochEra.Act1)]
public sealed class MyEpoch : ModEpochTemplate
{
public override string Id => "MY_MOD_FIRST_LESSON";
}也可以用 content pack 注册:
RitsuLibFramework.CreateContentPack("MyMod")
.Story<MyStory>()
.Epoch<MyEpoch>()
.StoryEpoch<MyStory, MyEpoch>()
.ModEpochAutoTimelineSlotAfterColumn<MyEpoch>(EpochEra.Act1)
.Apply();Gate Content
Use .RequireEpoch<TModel, TEpoch>() for content that should stay hidden until an epoch is obtained.
RitsuLibFramework.CreateContentPack("MyMod")
.Card<MyCardPool, MyRareCard>()
.Epoch<MyEpoch>()
.RequireEpoch<MyRareCard, MyEpoch>()
.Apply();For epoch templates that list their own cards or relics, use .BindCardUnlockEpoch<TEpoch>() or .BindRelicUnlockEpoch<TEpoch>().
锁定内容
获得某个 epoch 前需要隐藏的内容,使用 .RequireEpoch<TModel, TEpoch>()。
RitsuLibFramework.CreateContentPack("MyMod")
.Card<MyCardPool, MyRareCard>()
.Epoch<MyEpoch>()
.RequireEpoch<MyRareCard, MyEpoch>()
.Apply();如果 epoch 模板自己列出了卡牌或遗物,使用 .BindCardUnlockEpoch<TEpoch>() 或 .BindRelicUnlockEpoch<TEpoch>()。
Unlock Epochs
Choose the rule that matches the player action:
| Rule | Trigger |
|---|---|
.UnlockEpochAfterRunAs<TCharacter, TEpoch>() | A run finishes with the character. |
.UnlockEpochAfterWinAs<TCharacter, TEpoch>() | A run is won with the character. |
.UnlockEpochAfterAscensionWin<TCharacter, TEpoch>(level) | A qualifying ascension win. |
.UnlockEpochAfterRunCount<TEpoch>(count, requireVictory) | Account-level run count. |
.UnlockEpochAfterEliteVictories<TCharacter, TEpoch>(count) | Counted elite victories. |
.UnlockEpochAfterBossVictories<TCharacter, TEpoch>(count) | Counted boss victories. |
.UnlockEpochAfterAscensionOneWin<TCharacter, TEpoch>() | First ascension path. |
.RevealAscensionAfterEpoch<TCharacter, TEpoch>() | Ascension UI reveal after an epoch. |
Keep unlock rules close to the content they gate. That makes release review much easier.
解锁 Epoch
按玩家行为选择规则:
| 规则 | 触发条件 |
|---|---|
.UnlockEpochAfterRunAs<TCharacter, TEpoch>() | 使用该角色完成一局。 |
.UnlockEpochAfterWinAs<TCharacter, TEpoch>() | 使用该角色获胜。 |
.UnlockEpochAfterAscensionWin<TCharacter, TEpoch>(level) | 达到指定进阶要求并获胜。 |
.UnlockEpochAfterRunCount<TEpoch>(count, requireVictory) | 账号级 run 次数。 |
.UnlockEpochAfterEliteVictories<TCharacter, TEpoch>(count) | 精英胜利计数。 |
.UnlockEpochAfterBossVictories<TCharacter, TEpoch>(count) | Boss 胜利计数。 |
.UnlockEpochAfterAscensionOneWin<TCharacter, TEpoch>() | 第一进阶路径。 |
.RevealAscensionAfterEpoch<TCharacter, TEpoch>() | 获得 epoch 后显示进阶 UI。 |
解锁规则尽量和被它锁定的内容放在附近,发布前更容易审查。
Character Unlocks
To unlock a character from a previous character’s run path, use:
RitsuLibFramework.CreateContentPack("MyMod")
.Character<MyCharacter>()
.Epoch<MyCharacterEpoch>()
.UnlockCharacterAfterRunAs<MyPreviousCharacter, MyCharacterEpoch>()
.Apply();Align the character’s own RequiresEpochAndTimeline setting with the rules you register.
角色解锁
如果角色应由另一个角色的 run 路径解锁,使用:
RitsuLibFramework.CreateContentPack("MyMod")
.Character<MyCharacter>()
.Epoch<MyCharacterEpoch>()
.UnlockCharacterAfterRunAs<MyPreviousCharacter, MyCharacterEpoch>()
.Apply();角色自身的 RequiresEpochAndTimeline 应与你注册的规则保持一致。