跳到主要内容

日历与日期规则

世界可以用 calendar.json 命名节日,并指定季节所依据的半球。没有该文件时,季节按北半球计算,世界也没有自定义节日。

{
"hemisphere": "north",
"holidays": [
{"id": "founders-day", "name": "建城纪念日", "on": ["09-21"]},
{"id": "winter-market", "name": "冬季集市", "on": ["nth:fri:last"]}
]
}

hemisphere 可为 north 或 south,默认为 north。一个世界最多可定义 60 个节日。节日 ID 由字母、数字、连字符和下划线组成,且不可重复。节日不能通过另一个节日来定义。

日期标记​

节日、角色日程和时间触发条件中的 on 列表使用同一套标记:

标记含义
mon 到 sun星期几
jan 到 dec整个月
12-24每年的该日期
1912-09-21只在该年出现的日期
12-20..01-05每年的日期区间,也可跨年
1912-09-21..1912-09-22只出现一次的日期区间
dom:1、dom:last每月第几天或最后一天
nth:mon:1、nth:fri:last当月第几个或最后一个指定星期
season:winter按 hemisphere 判断的季节
holiday:founders-day本世界声明的节日
!12-25排除匹配的日期

多个肯定项之间是“任一匹配即可”。任何以 ! 开头且匹配的项目都会排除该日期。空 on 列表允许所有日期。日程若同时提供 days,则 days 与 on 都必须允许当天。

节日定义可以使用星期、月份、日期、日期区间、每月日期、月内第几个星期和季节,但不能使用 holiday:,以免节日相互引用。

日历可以在世界编辑器的“日历”页中编辑。开始新会话时,它会被复制到会话中。因此,之后修改 calendar.json 只影响新会话,不会改变已经开始的故事。