Skip to content

Commit 840c291

Browse files
committed
2026-04-27 sync
1 parent a57fa14 commit 840c291

7 files changed

Lines changed: 113 additions & 11 deletions

File tree

_config.kira.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ docsTree:
9797
title: 14 添加新人物,
9898
path: /docs/04-ritsulib/04-14-add-new-character/,
9999
},
100+
{
101+
title: 15 添加单例,
102+
path: /docs/04-ritsulib/04-15-add-singleton/,
103+
},
100104
],
101105
},
102106
{
@@ -161,6 +165,10 @@ docsTree:
161165
title: 14 添加新人物,
162166
path: /docs/04-add-new-character/,
163167
},
168+
{
169+
title: 15 添加单例,
170+
path: /docs/03-baselib/03-15-add-singleton/,
171+
},
164172
],
165173
},
166174
{

source/_posts/03-baselib/03-02-mod-config.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@ public enum FjordMosaicMode
1717
Gamma
1818
}
1919

20-
[HoverTipsByDefault]
20+
[ConfigHoverTipsByDefault]
2121
public sealed class TestModConfig : SimpleModConfig
2222
{
2323
[ConfigSection("NimbusWard")]
2424
public static bool WobbleVexFlag { get; set; } = true;
2525

2626
public static double PlinthKiteVolume { get; set; } = 2.5;
2727

28-
[SliderRange(-12.5, 88, 0.25)]
29-
[SliderLabelFormat("{0:0.##}")]
28+
[ConfigSlider(-12.5, 88, 0.25, Format = "{0:0.##}%")]
3029
[ConfigHoverTip]
3130
public static double MothBanjoBias { get; set; } = 14;
3231

@@ -61,7 +60,6 @@ public sealed class TestModConfig : SimpleModConfig
6160
_ = btn;
6261
}
6362
}
64-
6563
```
6664

6765
![示例配置](../../images/image12.png)

source/_posts/03-baselib/03-12-add-event.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public sealed class TestEvent : CustomEventModel
3535
];
3636

3737
// 什么时候会遇到。这里的条件是所有玩家的金币都大于等于60
38-
public override bool IsAllowed(RunState runState) => runState.Players.All(p => p.Gold >= DynamicVars.Gold.BaseValue);
38+
public override bool IsAllowed(IRunState runState) => runState.Players.All(p => p.Gold >= DynamicVars.Gold.BaseValue);
3939

4040
// 事件开始前的逻辑。这里是禁止玩家移除药水
4141
protected override Task BeforeEventStarted(bool isPreFinished)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
title: 03-15 添加单例
3+
date: 2026-04-27 00:00:00
4+
permalink: docs/03-baselib/03-15-add-singleton/
5+
categories:
6+
- Basics
7+
---
8+
单例(`SingletonModel`)是一种独立于卡牌、遗物等的`AbstractModel`。所有的`AbstractModel`都有接收游戏事件发生的能力。
9+
10+
可以用来做一些全局的影响。例如,多人模式就使用了一个`SingletonModel`,用于判断怪物是否根据玩家数量提高获得的格挡。
11+
12+
## 代码
13+
14+
```csharp
15+
using BaseLib.Abstracts;
16+
using MegaCrit.Sts2.Core.GameActions.Multiplayer;
17+
using MegaCrit.Sts2.Core.Logging;
18+
using MegaCrit.Sts2.Core.Models;
19+
20+
namespace Test.Scripts;
21+
22+
public class TestSingleton : CustomSingletonModel
23+
{
24+
public TestSingleton() : base(true, true)
25+
{
26+
}
27+
28+
// public override Task AfterActEntered()
29+
// {
30+
// Log.Info("AfterActEntered");
31+
// return Task.CompletedTask;
32+
// }
33+
34+
// public async override Task AfterCardDrawn(PlayerChoiceContext choiceContext, CardModel card, bool fromHandDraw)
35+
// {
36+
// Log.Info($"AfterCardDrawn: {card.Id}");
37+
// }
38+
}
39+
40+
```
41+
42+
* 然后你可以向上面一样重载`AbstractModel`下的虚函数来监听游戏事件了,和遗物、药水等的接口一致。
43+
44+
* 你可以反编译原版的`Hook.cs`看看有哪些接口。

source/_posts/03-choose-base-library.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ categories:
1313

1414
## 对比
1515

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

1818
| 功能 | BaseLib | RitsuLib | 说明 |
1919
|-----------|------|------|------|
@@ -27,18 +27,17 @@ categories:
2727
| 血条覆盖层(中毒灾厄) ||| - |
2828
| 不挂载脚本场景转换 ||| - |
2929
| 人物非spine动画兼容 ||| - |
30+
| 新牌堆 ||| - |
3031
| customenum ||| baselib支持对任意enum扩展;<br>ritsulib不支持,但统一管理(例如关键词) |
3132
| 一代本地化符号 ||| * |
3233
| FMOD音频 | 🚧 || - |
34+
| 诊断调试工具 | 🚧 || 导出卡牌图片、patch dump等 |
3335
| 缺少资源时占位警告 ||| - |
3436
| 时间线注册 ||| 游戏时间线小故事 |
3537
| 事件管线 ||| 订阅事件,触发时调用 |
36-
| 共享池 ||| 类似无色池,有事件、无色、衍生等 |
37-
| 诊断调试工具 ||| 导出卡牌图片、patch dump等 |
3838
| 手牌发光管理 ||| - |
3939
| 卡牌支持AnyPlayer ||| - |
4040
| 快捷键绑定 ||| - |
41-
| 新牌堆 ||| - |
4241
| 内容物ID | 命名空间第一段大写,<br>例如`TEST-TEST_CARD` | modid与分类,<br>例如`TEST_CARD_TEST_CARD` | - |
4342
| patch | 原始`harmony` | 原始`harmony`以及封装patch系统 | - |
4443
| 非原生玩法内容 ||| 避免重复造轮子。但是会带来臃肿不兼容、抢占patch、抢占你的命名的问题。 |

source/_posts/04-ritsulib/04-14-add-new-character.md

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

4848
// 卡池是否是无色。例如事件、状态等卡池就是无色的。
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
---
2+
title: 04-15 添加单例
3+
date: 2026-04-27 00:00:00
4+
permalink: docs/04-ritsulib/04-15-add-singleton/
5+
categories:
6+
- Basics
7+
---
8+
单例(`SingletonModel`)是一种独立于卡牌、遗物等的`AbstractModel`。所有的`AbstractModel`都有接收游戏事件发生的能力。
9+
10+
可以用来做一些全局的影响。例如,多人模式就使用了一个`SingletonModel`,用于判断怪物是否根据玩家数量提高获得的格挡。
11+
12+
## 代码
13+
14+
```csharp
15+
using MegaCrit.Sts2.Core.GameActions.Multiplayer;
16+
using MegaCrit.Sts2.Core.Logging;
17+
using MegaCrit.Sts2.Core.Modding;
18+
using MegaCrit.Sts2.Core.Models;
19+
using STS2RitsuLib.Interop.AutoRegistration;
20+
21+
namespace Test.Scripts;
22+
23+
// 注册单例
24+
[RegisterSingleton]
25+
public class TestSingleton : SingletonModel
26+
{
27+
// 没有用但是要写
28+
public override bool ShouldReceiveCombatHooks => true;
29+
30+
public TestSingleton()
31+
{
32+
// 获得监听CombatState钩子的能力
33+
ModHelper.SubscribeForCombatStateHooks(Id.Entry, state => [this]);
34+
// 获得监听RunState钩子的能力
35+
ModHelper.SubscribeForRunStateHooks(Id.Entry, state => [this]);
36+
}
37+
38+
// public override Task AfterActEntered()
39+
// {
40+
// Log.Info("AfterActEntered");
41+
// return Task.CompletedTask;
42+
// }
43+
44+
// public async override Task AfterCardDrawn(PlayerChoiceContext choiceContext, CardModel card, bool fromHandDraw)
45+
// {
46+
// Log.Info($"AfterCardDrawn: {card.Id}");
47+
// }
48+
}
49+
```
50+
51+
* 然后你可以向上面一样重载`AbstractModel`下的虚函数来监听游戏事件了,和遗物、药水等的接口一致。
52+
53+
* 你可以反编译原版的`Hook.cs`看看有哪些接口。

0 commit comments

Comments
 (0)