BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。
模组:电话
←目录
此页面解释如何编辑和创建电话(来电和去电)。这是面向模组开发者的高级指南。
来电
您可以通过编辑 Data/IncomingPhoneCalls 素材来添加或自定义来电。
此素材内含一个“字符串 → 数据模型”查询,其中:
- 键名为此来电的唯一字符串 ID。
- 值为包含如下字段的数据模型所组成的列表:
字段 | 效果 |
---|---|
Dialogue | 玩家接电话时显示的对话文本。可以使用完整的对话格式(包括问题和回答选项)。 |
FromNpc | (可选)来电 NPC 的内部名称。若指定此字段,则会显示此 NPC 的姓名和肖像。 |
FromPortrait | (可选)欲显示的肖像的贴图集素材名称(例如 Portraits/Abigail)。若也指定了 FromNpc,则此字段的肖像会覆盖来电 NPC 的默认肖像。若 FromNpc 和 FromDisplayName 都为空,则会显示此字段指定的肖像,而姓名显示为 ??? 。 |
FromDisplayName | (可选)一个模板字符串,用于显示来电 NPC 的姓名。若指定了 FromNpc,则此字段的姓名会覆盖来电 NPC 的默认姓名。 |
MaxCalls | (可选)玩家能收到此来电的最大次数。设为 -1 代表无限制,默认为 1。 |
TriggerCondition RingCondition |
(可选)一个游戏状态查询,指示是否可以发起此来电(TriggerCondition)或此来电是否响铃(RingCondition)。
玩家是否能接到电话取决于这两个字段: 在将来电推送给全部玩家之前,首先会检查房主的 TriggerCondition,然后再分别检查每个玩家的 RingCondition 字段,以决定其电话是否响铃。 |
IgnoreBaseChance | (可选)此字段若为 true,则游戏在检查是否要触发来电时,会忽略 1% 的基础概率判断,而仅检查此来电是否可用。默认为 false。 |
SimpleDialogueSplitBy | (可选,专用)若设置此字段,则认为此电话不需要 NPC 姓名和肖像,且使用此字段指定的字符来折行。例如,"SimpleDialogueSplitBy": "#" 会将 Box A#Box B#Box C 分为三个依次出现的对话框。
大多数情况您应当忽略此字段。如有需要,请使用 Dialogue 中的常规对话格式。此字段主要用于支持旧版来电。 |
CustomFields | 此来电的自定义字段。 |
C#自定义处理器
C# 模组可以实现 StardewValley.PhoneCalls.IPhoneHandler 并将其添加至 Phone.PhoneHandlers,以控制来电和去电:
/// <summary>The mod entry point.</summary>
internal sealed class ModEntry : Mod
{
/// <inheritdoc />
public override void Entry(IModHelper helper)
{
Phone.PhoneHandlers.Add(new CustomPhoneHandler());
}
}
/// <summary>A custom phone handler.</summary>
internal sealed class CustomPhoneHandler : IPhoneHandler
{
...
}
参见反编译代码中的 StardewValley.PhoneCalls.DefaultPhoneHandler 以获得实现的示例。