跨模组兼容性令牌(CMCT) 封面

跨模组兼容性令牌(CMCT)

星露谷物语模组工具

使用特殊的 Content Patcher 令牌,从其他模组中获取配置值、翻译、动态令牌和资源。

预览

前置 Mod

详情

Cross-Mod Compatibility tokens(跨模组兼容性令牌)添加了一些特殊的自定义 Content Patcher 令牌,让你(如果你是模组作者)可以访问其他模组的配置值、翻译和动态令牌,包括那些并非专门为 Content Patcher 制作的模组。如果你确实没有其他办法来确保你的模组与他们的模组之间完美兼容,而你还需要根据上述任意值来更改内容,那么这些令牌会很有用。

安装

玩家使用说明

这个模组本身不会做任何事情。如果你正在使用的其他模组不要求它,那么作为用户安装它没有任何好处。

供 Content Patcher 模组作者使用

这个模组添加了四个令牌:

  • Spiderbuttons.CMCT/Config
  • Spiderbuttons.CMCT/Translation
  • Spiderbuttons.CMCT/Dynamic
  • Spiderbuttons.CMCT/Asset

这些令牌中的每一个都可以让你分别获取配置值、翻译字符串、动态令牌值或内部资源键。这四个令牌都需要输入参数。第一个输入参数始终是你想要从中获取值的模组的 UniqueID。第二个输入参数则取决于所使用的令牌:

  • Config:要查找的配置值的名称。如果配置值是嵌套的,你必须按照 JSON 结构提供完整的配置路径。
  • Translation:你想要的翻译的 i18n 键。它始终会获取当前所选语言的翻译。
  • Dynamic:动态令牌的名称。
  • Asset:来自另一个模组的资源的路径,相对于他们的 manifest.json 文件。

如果你使用这些令牌中的任何一个,你必须将另一个模组设为依赖项。如果不这样做,它可能会正常工作,但也可能会向你抛出一些奇怪的错误。以下是四个示例,每个令牌一个,使用 Lookup Anything、Hat Mouse Lacey 和 Button's Extra Books 进行演示:

  • {{Spiderbuttons.CMCT/Config: Pathoschild.LookupAnything, Controls.ToggleSearch}}
  • {{Spiderbuttons.CMCT/Translation: ichortower.HatMouseLacey, houseDisplayName}}
  • {{Spiderbuttons.CMCT/Dynamic: ichortower.HatMouseLacey, Lacey}}
  • {{Spiderbuttons.CMCT/Asset: Spiderbuttons.ButtonsExtraBooks, assets/Books/sheet.png}}

限制

目前,我认为有两件主要的事情算是限制:

  1. 以令牌作为输入的翻译(即 i18n 值本身内部含有自己的 {{tokens}})无法正常工作,只会获取到仍然带着花括号和令牌的字面字符串。
  2. 动态令牌只在加载存档时初始化,而不是在游戏启动时。这对你是否重要,可能完全无所谓。

另外值得一提的是,你应该尽可能少地使用 Dynamic 令牌。不深入讲解 Content Patcher 的技术细节,由于我实现该令牌的方式,它们总是会发出信号表示自己的更改需要被传播,即使它从另一个模组检查的动态令牌并没有发生变化也是如此。如果你的令牌只像默认情况那样在 OnDayStart 更新,这还不算太糟,但如果你在 OnTimeChange 或 OnLocationChange 更新它,开销可能会变得很大!

源代码