Skip to content

Commit a57fa14

Browse files
committed
2026-04-27 单例
1 parent 1530f16 commit a57fa14

6 files changed

Lines changed: 91 additions & 11 deletions

File tree

BaseLib/02 - 自定义模组配置/README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,15 @@ public enum FjordMosaicMode
1010
Gamma
1111
}
1212

13-
[HoverTipsByDefault]
13+
[ConfigHoverTipsByDefault]
1414
public 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)

BaseLib/12 - 添加新事件/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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`看看有哪些接口。

Basics/03 - 选择基础库/README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## 对比
88

9-
以下表格为这些基础库目前为止(2026.04.25)支持的功能表格。
9+
以下表格为这些基础库目前为止(2026.04.27)支持的功能表格。
1010

1111
| 功能 | BaseLib | RitsuLib | 说明 |
1212
|-----------|------|------|------|
@@ -20,18 +20,17 @@
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、抢占你的命名的问题。 |

RitsuLib/14 - 添加新人物/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public class TestCardPool : TypeListCardPoolModel
3434
public override Color DeckEntryCardColor => new(0.5f, 0.5f, 1f);
3535
// 能量表盘文字轮廓颜色
3636
public override Color EnergyOutlineColor => new(0.5f, 0.5f, 1f);
37-
// 如果你想用原版卡框换色,加这两行。这里是hsv而不是rgb颜色
38-
private static readonly Material? _poolFrameMaterial = MaterialUtils.CreateHsvShaderMaterial(0.67f, 0.5f, 1f);
37+
// 如果你想用原版卡框换色,加这两行
38+
private static readonly Material? _poolFrameMaterial = MaterialUtils.CreateRgbShaderMaterial(0.5f, 0.5f, 1f);
3939
public override Material? PoolFrameMaterial => _poolFrameMaterial;
4040

4141
// 卡池是否是无色。例如事件、状态等卡池就是无色的。
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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`看看有哪些接口。

0 commit comments

Comments
 (0)