
真·符文 - 强大日程补丁器
条件性 NPC 日程安排
查看大图真实符文:日程安排官 — 条件性NPC日程
他们去哪。他们何时去。他们为何去。一切尽在JSON中。
球场
掉落每个NPC一个JSON文件,并赋予他们根据世界状态变化的日常行程:季节、天气、你与谁亲近、是否在约会或结婚、你经历过的故事事件。自动选择正确路线,在选项间轮换以增加多样性,一旦你的条件不匹配就回退到原版设置——所有这一切都不需要在原始日程字符串中数正斜杠。
真言符文:时间调度器通过一个责任链解析器挑选最匹配的例行程序:每一个条件都会缩小候选范围,然后通过优先级 → 特异性 → 轮换顺序选出胜出者。游戏依然会进行全部的寻路过程——你只需描述这一天。
与 Content Patcher 配合使用
两者都可编辑Characters/schedules/*,但处于不同层级。Content Patcher 让你通过自身条件对日程字符串进行原始控制。Schedule Director 则提供一种结构化的运行时解析器,能实现原版无法表达的跨NPC逻辑——并以Late优先级写入结果,因此当你的规则匹配时它能生效,不匹配时则完全不影响你的 Content Patcher 或原版日程。
您将获得
- 每个NPC一个文件,多个日程。 每个候选内容是一整天的路线及其适用条件。
- 原版无法实现的条件。 根据以下条件自由组合来限制路线:其他NPC的好感度、约会/结婚状态、舞伴、已触发事件、邮件标记(且/或/禁止)、天气、季节、星期、日期/年份范围。
- 优先级 + 轮换。 最高优先级的匹配获胜。打平了?相同具体程度的路由按日轮换,采用随机循环方式,这样你的NPC就不会永远做完全相同的事了。
- 命名地点标记。 使用
"point": "beach_pier_1"代替记忆瓦片坐标。包含已验证可行走位置的初始注册表;你可以在points.json中添加自己的标记。 - 优先于原版并自动回退。 无匹配则不修改 = 原版正常运行。节日天数默认保持不变。
- 无和谐。 纯SMAPI资产管道。游戏像处理其他任何日程一样,解析并路径查找您的路线。
- 工具包的一部分。 一个内容包可以在单个
TrueRune/文件夹下携带日程和事件和对话——每个真符文框架都会扫描其所属的子文件夹。
混凝土对比——相同思路,普通版 vs. TRS
原版日程字符串 — 每个键对应一条用斜杠分隔的超长字符串,并且无法指定“仅在玩家同时靠近艾米丽和潘妮时”这样的条件。
"summer": "900 HaleyHouse 6 5 0/1000 Beach 27 34 2 haley_beach_towel/1700 Town 47 87 2/2200 HaleyHouse 1 5 3 haley_sleep"
TRS中的同一天 — 命名区域、命名点以及一个条件块:
{
"npc": "海莉",
"日程安排": [
{
"id": "summer_sunny_beach",
"priority": 20,
"conditions": { "seasons": ["夏季"], "weather": ["晴朗"] },
"点数": [
{ "time": 900, "point": "haley_home_door" },
{ "time": 1000, "point": "beach_towel", "animation": "haley_beach_towel" },
{ "time": 1700, "point": "town_plaza" },
{ "time": 2200, "point": "haley_home_bed", "animation": "haley_sleep" }
]
}
]
}
教程 — 根据你的存档做出反应的分层例程
将更多候选内容添加到同一个文件中。优先级更高的获胜;解析器会自动降级到下一个匹配项。
"schedule": {
"_married": [
{
"id": "married_morning_walk",
"priority": 40,
"conditions": { "is_spouse": true, "weather": ["sunny"] },
"points": [
{ "time": 1000, "point": "beach_entrance" },
{ "time": 1800, "point": "haley_home_couch" }
]
}
],
"_close_to_the_girls": [
{
"id": "double_date_prep",
"priority": 30,
"conditions": {
"seasons": ["夏季"], "weather": ["晴朗"],
"npc_heart_conditions": [
{ "npc": "艾米莉", "min_heart": 6 },
{ "npc": "佩妮", "min_heart": 6 }
]
},
"points": [
{ "time": 900, "point": "town_plaza" },
{ "time": 1100, "point": "beach_pier_1" },
{ "time": 1700, "point": "saloon_bar" },
{ "time": 2330, "point": "海莉家_床", "animation": "海莉_睡觉" }
]
}
],
"_default_rotation": [
{ "id": "default_museum", "priority": 0, "points": [ { "time": 1000, "point": "town_museum_steps" }, { "time": 2200, "point": "haley_home_bed", "animation": "haley_sleep" } ] },
{ "id": "default_pierre", "priority": 0, "points": [ { "time": 1000, "point": "pierre_shop_floor" }, { "time": 2200, "point": "haley_home_bed", "animation": "haley_sleep" } ] }
]
}
作用:
- 已婚 + 晴天 → 晨间散步(优先级40)。
- 否则,夏季 + 晴天 + 6♥ 同时拥有艾米丽和佩妮 → 外出之日(优先级30)——这是基础游戏根本无法表达的跨NPC条件。
- 否则,这两项优先级为0的默认设置会平局,所以Haley会在博物馆和皮埃尔的店铺之间交替工作。
- 完全没有任何匹配项?TRS不会写入任何内容,而海莉将遵循她的原版日程安排。
分组键(_married、_seasonal、…)仅用于在编辑器中折叠段落——它们在运行时会被忽略。你也可以使用扁平数组。
命名地点
根据键值引用可复用地点;在TrueRune/schedules/points.json中放入你自己的地点。
"points": {
"beach_pier_1": { "location": "海滩", "x": 38, "y": 36, "facing": "向下" }
}
你的地点会叠加到内置的注册表上。在游戏中运行 rune_sched_points 来列出所有已加载的键。
安装后即可立即使用
该框架为Haley提供了一份烟雾测试日程,通过一个标记进行控制,因此除非你主动要求,否则它永远不会影响真实的存档。加载游戏并运行 rune_sched_smoke Haley —— 她就会前往海滩,确认一切连接正常。运行 rune_sched_try Haley 可打印出她将要遵循的具体日程字符串。
作者快速入门指南
MySchedulePack/
├── manifest.json (ContentPackFor: "Riou.TrueRune.Schedules")
└── TrueRune/
└── 日程表/
├── Haley.json
└── points.json
manifest.json:
{
"Name": "我的日程包",
"作者": "你",
"版本": "1.0.0",
"描述": "海莉的新日程。",
"UniqueID": "You.MySchedulePack",
"ContentPackFor": { "UniqueID": "Riou.TrueRune.Schedules", "MinimumVersion": "1.0.0" }
}
将文件夹拖入 Stardew Valley/Mods/ → 启动 → 睡一觉。整个流程就是这样。
条件参考
required_AND_flags/required_OR_flags/forbidden_flags— 邮件标识required_seen_events— 事件IDs 在 eventsSeen 中min_heart/max_heart— 与该NPC的好感度npc_heart_conditions— 与其他NPC的好感度季节/星期/最小天数–最大天数/最小年份–最大年份天气— 晴天 / 雨天 / 暴风雨 / 雪天 / 大风是配偶/在约会中/是舞伴
地点参考
time— 军事时间,无冒号(900 = 上午9点)。arrive_by添加“到达时间”前缀。点— 注册表键 — 或内部位置+x+y朝向— 上/右/下/左(或 0–3)动画— 动画描述键 (haley_beach_towel,square_5_3, 任意*sleep*)对话— 位置对话令牌位置:"床"— 回家睡觉
完整模式+一个完整的工作包(samples/Sample-HaleyBeachDayPack/)包含在下载内容中。作者指南:docs/SCHEDULE_AUTHORING.md。
安装
- 安装 SMAPI 4.0 或更高版本
- 推荐: 通用模组配置菜单 用于游戏内设置页面
- 将解压后的文件夹拖入
Stardew Valley/Mods/ - 安装任何需要此框架的内容包
控制台命令(前缀为 rune_sched_)
rune_sched_list [NPC]— 有日程的NPC,或某个NPC的所有候选者rune_sched_try <NPC>— 当前哪位候选人获胜 + 已编译的日程字符串rune_sched_apply [NPC]— 强制重新解析并立即应用rune_sched_points [filter]— 列出已知坐标点rune_sched_reload— 重新从磁盘扫描每个JSON并重建rune_sched_smoke [NPC]— 启用内置烟雾测试并重新应用- (原始版)
debug seenMail <flag> [false]— 切换一个标记以测试门控
在 SMAPI 控制台中输入 help rune_sched_<name> 查看使用方法。
C# API
var api = Helper.ModRegistry.GetApi<IScheduleDirectorApi>("Riou.TrueRune.Schedules");
// 从你的模组中在运行时贡献路由
api.RegisterSchedules("Haley", myEntries, ModManifest.UniqueID);
// 预览当前将应用的效果
api.TryResolve("Haley", out string compiled);
兼容性与权限
SMAPI 4.0+ / Stardew Valley 1.6+ 版本。可与 Content Patcher 的日程编辑和自定义 NPC 框架共同使用。MIT 许可证授权——无需申请即可作为依赖项使用,欢迎自由创建分支和提交翻译。
真实符文工具包的一部分
- 真符文:事件 — 以JSON格式呈现的分支心动事件
- 真符文:对话导演 — 运行时NPC对话规则,包含优先级、轮换和配额
- 真·符文:日程导演 — 条件性NPC日程(本模组)
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。