File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -10,16 +10,15 @@ public enum FjordMosaicMode
1010 Gamma
1111}
1212
13- [HoverTipsByDefault ]
13+ [ConfigHoverTipsByDefault ]
1414public sealed class TestModConfig : SimpleModConfig
1515{
1616 [ConfigSection (" NimbusWard" )]
1717 public static bool WobbleVexFlag { get ; set ; } = true ;
1818
1919 public static double PlinthKiteVolume { get ; set ; } = 2 . 5 ;
2020
21- [SliderRange (- 12 . 5 , 88 , 0 . 25 )]
22- [SliderLabelFormat (" {0:0.##}" )]
21+ [ConfigSlider (- 12 . 5 , 88 , 0 . 25 , Format = " {0:0.##}%" )]
2322 [ConfigHoverTip ]
2423 public static double MothBanjoBias { get ; set ; } = 14 ;
2524
@@ -54,7 +53,6 @@ public sealed class TestModConfig : SimpleModConfig
5453 _ = btn ;
5554 }
5655}
57-
5856```
5957
6058![ 示例配置] ( ../../images/image12.png )
Original file line number Diff line number Diff line change @@ -28,7 +28,7 @@ public sealed class TestEvent : CustomEventModel
2828 ];
2929
3030 // 什么时候会遇到。这里的条件是所有玩家的金币都大于等于60
31- public override bool IsAllowed (RunState runState ) => runState .Players .All (p => p .Gold >= DynamicVars .Gold .BaseValue );
31+ public override bool IsAllowed (IRunState runState ) => runState .Players .All (p => p .Gold >= DynamicVars .Gold .BaseValue );
3232
3333 // 事件开始前的逻辑。这里是禁止玩家移除药水
3434 protected override Task BeforeEventStarted (bool isPreFinished )
Original file line number Diff line number Diff line change 1+ 单例(` SingletonModel ` )是一种独立于卡牌、遗物等的` AbstractModel ` 。所有的` AbstractModel ` 都有接收游戏事件发生的能力。
2+
3+ 可以用来做一些全局的影响。例如,多人模式就使用了一个` SingletonModel ` ,用于判断怪物是否根据玩家数量提高获得的格挡。
4+
5+ ## 代码
6+
7+ ``` csharp
8+ using BaseLib .Abstracts ;
9+ using MegaCrit .Sts2 .Core .GameActions .Multiplayer ;
10+ using MegaCrit .Sts2 .Core .Logging ;
11+ using MegaCrit .Sts2 .Core .Models ;
12+
13+ namespace Test .Scripts ;
14+
15+ public class TestSingleton : CustomSingletonModel
16+ {
17+ public TestSingleton () : base (true , true )
18+ {
19+ }
20+
21+ // public override Task AfterActEntered()
22+ // {
23+ // Log.Info("AfterActEntered");
24+ // return Task.CompletedTask;
25+ // }
26+
27+ // public async override Task AfterCardDrawn(PlayerChoiceContext choiceContext, CardModel card, bool fromHandDraw)
28+ // {
29+ // Log.Info($"AfterCardDrawn: {card.Id}");
30+ // }
31+ }
32+
33+ ```
34+
35+ * 然后你可以向上面一样重载` AbstractModel ` 下的虚函数来监听游戏事件了,和遗物、药水等的接口一致。
36+
37+ * 你可以反编译原版的` Hook.cs ` 看看有哪些接口。
Original file line number Diff line number Diff line change 66
77## 对比
88
9- 以下表格为这些基础库目前为止(2026.04.25 )支持的功能表格。
9+ 以下表格为这些基础库目前为止(2026.04.27 )支持的功能表格。
1010
1111| 功能 | BaseLib | RitsuLib | 说明 |
1212| -----------| ------| ------| ------|
2020| 血条覆盖层(中毒灾厄) | ✅ | ✅ | - |
2121| 不挂载脚本场景转换 | ✅ | ✅ | - |
2222| 人物非spine动画兼容 | ✅ | ✅ | - |
23+ | 新牌堆 | ✅ | ✅ | - |
2324| customenum | ✅ | ❌ | baselib支持对任意enum扩展;<br >ritsulib不支持,但统一管理(例如关键词) |
2425| 一代本地化符号 | ✅ | ❌ | * |
2526| FMOD音频 | 🚧 | ✅ | - |
27+ | 诊断调试工具 | 🚧 | ✅ | 导出卡牌图片、patch dump等 |
2628| 缺少资源时占位警告 | ❌ | ✅ | - |
2729| 时间线注册 | ❌ | ✅ | 游戏时间线小故事 |
2830| 事件管线 | ❌ | ✅ | 订阅事件,触发时调用 |
29- | 共享池 | ❌ | ✅ | 类似无色池,有事件、无色、衍生等 |
30- | 诊断调试工具 | ❌ | ✅ | 导出卡牌图片、patch dump等 |
3131| 手牌发光管理 | ❌ | ✅ | - |
3232| 卡牌支持AnyPlayer | ❌ | ✅ | - |
3333| 快捷键绑定 | ❌ | ✅ | - |
34- | 新牌堆 | ❌ | ✅ | - |
3534| 内容物ID | 命名空间第一段大写,<br >例如` TEST-TEST_CARD ` | modid与分类,<br >例如` TEST_CARD_TEST_CARD ` | - |
3635| patch | 原始` harmony ` | 原始` harmony ` 以及封装patch系统 | - |
3736| 非原生玩法内容 | 有 | 无 | 避免重复造轮子。但是会带来臃肿不兼容、抢占patch、抢占你的命名的问题。 |
Original file line number Diff line number Diff line change @@ -34,8 +34,8 @@ public class TestCardPool : TypeListCardPoolModel
3434 public override Color DeckEntryCardColor => new (0 . 5 f , 0 . 5 f , 1 f );
3535 // 能量表盘文字轮廓颜色
3636 public override Color EnergyOutlineColor => new (0 . 5 f , 0 . 5 f , 1 f );
37- // 如果你想用原版卡框换色,加这两行。这里是hsv而不是rgb颜色
38- private static readonly Material ? _poolFrameMaterial = MaterialUtils .CreateHsvShaderMaterial (0 . 67 f , 0 . 5 f , 1 f );
37+ // 如果你想用原版卡框换色,加这两行
38+ private static readonly Material ? _poolFrameMaterial = MaterialUtils .CreateRgbShaderMaterial (0 . 5 f , 0 . 5 f , 1 f );
3939 public override Material ? PoolFrameMaterial => _poolFrameMaterial ;
4040
4141 // 卡池是否是无色。例如事件、状态等卡池就是无色的。
Original file line number Diff line number Diff line change 1+ 单例(` SingletonModel ` )是一种独立于卡牌、遗物等的` AbstractModel ` 。所有的` AbstractModel ` 都有接收游戏事件发生的能力。
2+
3+ 可以用来做一些全局的影响。例如,多人模式就使用了一个` SingletonModel ` ,用于判断怪物是否根据玩家数量提高获得的格挡。
4+
5+ ## 代码
6+
7+ ``` csharp
8+ using MegaCrit .Sts2 .Core .GameActions .Multiplayer ;
9+ using MegaCrit .Sts2 .Core .Logging ;
10+ using MegaCrit .Sts2 .Core .Modding ;
11+ using MegaCrit .Sts2 .Core .Models ;
12+ using STS2RitsuLib .Interop .AutoRegistration ;
13+
14+ namespace Test .Scripts ;
15+
16+ // 注册单例
17+ [RegisterSingleton ]
18+ public class TestSingleton : SingletonModel
19+ {
20+ // 没有用但是要写
21+ public override bool ShouldReceiveCombatHooks => true ;
22+
23+ public TestSingleton ()
24+ {
25+ // 获得监听CombatState钩子的能力
26+ ModHelper .SubscribeForCombatStateHooks (Id .Entry , state => [this ]);
27+ // 获得监听RunState钩子的能力
28+ ModHelper .SubscribeForRunStateHooks (Id .Entry , state => [this ]);
29+ }
30+
31+ // public override Task AfterActEntered()
32+ // {
33+ // Log.Info("AfterActEntered");
34+ // return Task.CompletedTask;
35+ // }
36+
37+ // public async override Task AfterCardDrawn(PlayerChoiceContext choiceContext, CardModel card, bool fromHandDraw)
38+ // {
39+ // Log.Info($"AfterCardDrawn: {card.Id}");
40+ // }
41+ }
42+ ```
43+
44+ * 然后你可以向上面一样重载` AbstractModel ` 下的虚函数来监听游戏事件了,和遗物、药水等的接口一致。
45+
46+ * 你可以反编译原版的` Hook.cs ` 看看有哪些接口。
You can’t perform that action at this time.
0 commit comments