模组:对话

来自Stardew Valley Wiki
跳到导航 跳到搜索

目录

这个页面解释了游戏如何存储对话文本,它的格式,以及游戏如何解析它。它将会是一个提供给模组制造者的高级指南。

数据

这些对话文本存储在四组文件中。

角色-特殊对话

Characters\Dialogue\*.xnb 包含了大部分角色对话里 (一个文件夹对应一个角色). 游戏将从下面的一部分内容中选择对话,依照这里排列好的指令顺序来读取对话。
*指越往下的对话格式,读取优先度会比上面的对话还要低。*

特殊对话

以下是一些针对特定情况的预设键(Key):

  • 请注意是使用英文,中文只是方便大家理解*
密钥格式(key format) 描述(description)
邀请跳舞拒绝
danceRejection
用来显示邀请NPC跳舞花舞节时被拒绝的对话。(如果是在多人联机,已被其他玩家邀请且同意的NPC会使用其他对话来拒绝玩家。*不过大部分自制NPC是没有做出这个对话*)
离婚
divorced
和NPC离婚之后会触发的对话。
<地点>_入口
<location>_Entry
玩家在指定的地方<location>从入口进来有50%的几率让你的NPC说特定的话,这个对话可以使用多个对话,只需使用 / 隔开对话与对话;游戏会随机读取其中对话。
例子: SeedShop_Entry: "嗨,皮埃尔!/现在,我需要的是.../啊!看起来真不错!/今晚准备做我的特制酱料!/皮埃尔!今天的新品是什么?/皮埃尔!今天要一起出门玩吗?"
等会再来吧
ComeBackLater
打呼噜
Snoring
*一般NPC不需要,所以可以跳过这段*
当你还未达成布告栏上的击杀怪物的任务,吉尔就会触发这些对话。 ComeBackLater 只会显示一次,后续的对话就会触发Snoring

地点对话

依照顺序,除了上面的对话以外,接下来将会依照顺序读取以下对话。
*指上面四个danceRejectiondivorced<location>_EntryComeBackLaterSnoring的优先度大于以下的对话*

变化/变体:

  • 每一个特定键(Key)可以选择性的使用 季节来作出季节变化, 比如 springMountain_47_23,即春天在山上地图的某个坐标会触发此对话。

游戏会依照以下顺序来读取变体: <season><key>, and <key>. 为了方便大家理解,下面没有列出这些变体。

密钥格式(key format) 描述(description)
<地点>_<x轴坐标>_<y轴坐标>
<location>_<x>_<y>
当NPC站在<x>, <y>的某个你所填充的地点,就会触发这个对话.
例子: Mountain_47_23: "这里很安静,又有风可以吹,为什么我不能来这里?"
<地点>_<星期几>
<location>_<dayName>
当NPC在指定地点的指定一天星期几.
例子: Saloon_Fri: "星期五的酒吧总会很热闹,我不讨厌这样的气氛。"
<地点><好感>
<location><hearts>
当你和NPC的好感有指定<hearts>以上,将会触发这个对话。指定好感<hearts> 将会读取10,8,6,4,2这几个数值(不填任何数字则为0),优先度为10>8>6>4>2>0(除此之外的数值无法被读取,比如说1)
例子: Saloon8: "欢迎光临,@。我很高兴今天也能看到你过来这里!酒吧的大门永远为你而开。*当然,酒吧永远都是中午12点开门。*"
<地点>
<location>
当NPC身处在指定地点,就会触发此对话。
例子: Saloon: "呼哇~终于可以在酒吧尽情放松了~"

雨天对话

Characters\Dialogue\rainy.xnb文件里每一个NPC都有对应的一个对话。如果你的情况是:还未结婚或者离婚、当天是雨天、并且上述的对话条件没有达成,你将会有50%几率读取这个雨天对话。*由于是50%,所以你可能会触发平时的对话然后说出“今天天气真好”这种诡异的对话……*

雨天对话需要使用content的EditData来添加在游戏里,以下为麻薯君的例子:

    {
      "Action": "EditData",
      "Target": "Characters/Dialogue/rainy",
      "Entries": {
	     "Mochi":"下雨啦!$1#$e#农作物不用浇水真是太棒了!$1#$b#不过我已经有了洒水器,所以无论是晴天雨天都没关系。#$e#所以你的洒水器都有了吗?$1"
      }
    },
	
    {
      "Action": "EditData",
      "Target": "Characters/Dialogue/rainy",
      "Entries": {
	     "Mochi":"下雨了你却没有避雨吗?#$b#你也是辛苦了。$8#$b#你过来我这里吧。#$b#着凉了可不好。$1"
      },
	  "When": {
	  
		"Hearts:Mochi": "4, 5, 6, 7"
      }
    },	

    {
      "Action": "EditData",
      "Target": "Characters/Dialogue/rainy",
      "Entries": {
	     "Mochi":"你看看你!#$b#不带伞还淋湿了全身上下。$6#$b#我帮你擦擦头发。$1#$b#%麻薯君拿出毛巾帮你擦干头发#$b#嗯,擦干了!$1#$e#喝点咖啡吧!$1[395]#$e#快喝吧!$1"
      },
	  "When": {
		"Hearts:Mochi": "8, 9, 10"
      }
    }

一般对话

除上面以外,游戏将选择使用以下其中一个关键格式的对话(按优先顺序来读取):

  1. <季节>_<密钥>_inlaw_<伴侣名字> <season>_<key>_inlaw_<spouseName>
  2. <季节>_<密钥> <season>_<key>
  3. <密钥>_inlaw_<伴侣名字> <key>_inlaw_<spouseName>
  4. <密钥> <key>

关于以上各个变体: <season>是指季节 (比如说 spring_14); 如果玩家和对应NPC_inlaw_<伴侣名字> 结婚,这个对话将会不顾其他对话并先读取这个对话。(比如说 Sat_inlaw_Abigail,就是在星期六与伴侣“阿比盖尔”对话将触发此对话。); 以及 <key> 指的是以下密钥格式。

密钥格式(key format) 描述(description)
<1到28日>
<dayOfMonth>
第一年的设定好的某一日会触发此对话。
注意: 这个第一年限定的对话和其他的密钥格式是不一样的,这点常常把模组制造者搞乱了。
例子: 10: "你昨晚有看那个体育频道吗?#$b#等会,你有电视吗……?"
<1到28日>_<1或2年>
<dayOfMonth>_<firstOrLaterYear>
根据你所填的1或2年触发指定日期的对话。填的是“1”的话,第一年以后(即第二、三年)不会再触发;“2”则第一年以后触发。
例子: 2_1: "我的丈夫肯特在国外工作。这也是为什么你没看到他在这里。#$b#我坚信只要我家肯特的旅途结束了,就会安全回家的!!#$e#需要什么东西吗?"
<星期几><几心>_<1或2年>
<dayOfWeek><hearts>_<firstOrLaterYear>
1或2年的某一年,根据你所填的星期几并且你与NPC至少有<hearts>心好感将会触发此对话。指定好感<hearts> 将会读取10,8,6,4,2这几个数值(不填任何数字则为0),优先度为10>8>6>4>2>0(除此之外的数值无法被读取,比如说1)
Bug: 仅当一个等效的<dayOfWeek><hearts>密钥也存在时才显示。
例子: Thu2_2: "好吧,我爸回来了。你们见过了吗?#$b#我很高兴他能安然无恙地回来。"
<星期几><几心>
<dayOfWeek><hearts>
根据你所填的星期几 并且你与NPC至少有<hearts>心好感将会触发此对话。指定好感<hearts> 将会读取10,8,6,4,2这几个数值(不填任何数字则为0),优先度为10>8>6>4>2>0(除此之外的数值无法被读取,比如说1)
例子: Sun4: "嘿,@.#$e#今天过得怎么样?"
<星期几>_<1或2年>
<dayOfWeek>_<firstOrLaterYear>
1或2年的某一年,根据你所填的星期几将触发此对话。
Bug:只有当等效的<dayOfWeek>密钥存在时才显示。
例子: Sat_1: "爸爸快要回来了!#$b#我希望爸爸能给我带些玩具回来。$u"
<星期几>
<dayOfWeek>
根据你所填的星期几将会触发此对话。
例子: Mon: "嗨嗨!你正在休息吗?"

备用方案

如果以上对话都不存在,那么游戏会从Strings\StringsFromCSFiles.xnb自动读取密钥为NPC.cs.4061的对话. (我去查了,结果是: "嗨。"……好吧,作者偷懒我懂。)

为了让大家方便,我这里就直接提供我个人整理过的一般对话模板,当天节日对话是需要通过CP的content载入+TMXL的节日站位搭配使用,以下为麻薯君(感谢贴吧@你的麻糬君丫*我谢我自己*)提供的模板:

{
  //SPECIAL DIALOGUE
  "Introduction": "",//介绍
  "danceRejection": "",//有人邀请或者好感没到的拒绝跳舞对话
  "divorced": "",//分手之后的对话
  "breakUp": "",//离婚之后的对话
  "dumped_girls": "",//触发修罗场(女之后的对话
  "secondChance_girls": "",修罗场7天后的原谅对话
  "dumped_guys": "",//同上(男修罗场
  "secondChance_guys": "",//同上(男修罗场
  "stardrop_gift": "",//14心伴侣送星之果实对话
  "give_flowersA": "",//送花的对话
  "give_flowersB": "",//同上,为版本2
  "give_pendant": "",//求婚
  "rejectNPCA": "",//交往被拒绝
  "rejectNPCB": "",//同上,为版本2
  "reject_two_heartA": "",//同上,二心以上
  "reject_two_heartB": "",//同上,二心以上,为版本2
  "reject_four_heartA": "",//同上,四心以上
  "reject_four_heartB": "",//同上,四心以上,为版本2
  "engageA": "",//与别人订婚时求婚
  "engageB": "",//同上,为版本2
  "marriedA": "",//与别人结婚后求婚
  "marriedB": "",//同上,为版本2
  "refusal_knownA": "",不可攻略的角色被求婚的对话
  "refusal_knownB": "",//同上,为版本2
  "refusal_botherA": "",不可攻略的角色被求婚的对话(不要问我差别,我也不懂
  "refusal_botherB": "",//同上,为版本2
  "refusal_no_heartsA": "",不可攻略的角色被求婚的对话(为0心
  "refusal_no_heartsB": "",//同上,为版本2
  //节日对话
  "spring_1": "",//新年
  "spring_12":"",//蛋蛋节前一天
  "Spring_23":"",//花舞节前一天
  "summer_10":"",//宴会前一天
  "summer_27":"",//月光水母前一天
  "fall_15":"",//展览会前一天
  "fall_26":"",//万灵节前一天
  "winter_7":"",//冰雪节前一天
  "winter_24":"",//冬日星节日前一天
  //春季和一般对话
  "Mon":"",
  "Mon2":"",
  "Mon4":"",
  "Mon6":"",
  "Mon8":"",
  "Mon10":"",
  "Tue":"",
  "Tue2":"",
  "Tue4":"",
  "Tue6":"",
  "Tue8":"",
  "Tue10":"",
  "Wed":"",
  "Wed2":"",
  "Wed4":"",
  "Wed6":"",
  "Wed8":"",
  "Wed10":"",
  "Thu":"",
  "Thu2":"",
  "Thu4":"",
  "Thu8":"",
  "Thu10":"",
  "Fri":"",
  "Fri2":"",
  "Fri4":"",
  "Fri6":"",
  "Fri8":"",
  "Fri10":"",
  "Sat":"",
  "Sat2":"",
  "Sat4":"",
  "Sat6":"",
  "Sat8":"",
  "Sat10":"",
  "Sun":"",
  "Sun2":"",
  "Sun4":"",
  "Sun6":"",
  "Sun8":"",
  "Sun10":"",
  //夏季对话~
  "summer_Mon":"",
  "summer_Mon2":"",
  "summer_Mon4":"",
  "summer_Mon6":"",
  "summer_Mon8":"",
  "summer_Mon10":"",
  "summer_Tue":"",
  "summer_Tue2":"",
  "summer_Tue4":"",
  "summer_Tue6":"",
  "summer_Tue8":"",
  "summer_Tue10":"",
  "summer_Wed":"",
  "summer_Wed2":"",
  "summer_Wed4":"",
  "summer_Wed6":"",
  "summer_Wed8":"",
  "summer_Wed10":"",
  "summer_Thu":"",
  "summer_Thu2":"",
  "summer_Thu4":"",
  "summer_Thu6":"",
  "summer_Thu8":"",
  "summer_Thu10":"",
  "summer_Fri":"",
  "summer_Fri2":"",
  "summer_Fri4":"",
  "summer_Fri6":"",
  "summer_Fri8":"",
  "summer_Fri10":"",
  "summer_Sat":"",
  "summer_Sat2":"",
  "summer_Sat4":"",
  "summer_Sat6":"",
  "summer_Sat8":"",
  "summer_Sat10":"",
  "summer_Sun":"",
  "summer_Sun2":"",
  "summer_Sun4":"",
  "summer_Sun6":"",
  "summer_Sun8":"",
  "summer_Sun10":"",
  //秋季对话~
  "fall_Mon":"",
  "fall_Mon2":"",
  "fall_Mon4":"",
  "fall_Mon6":"",
  "fall_Mon8":"*",
  "fall_Mon10":"",
  "fall_Tue":"",
  "fall_Tue2":"",
  "fall_Tue4":"",
  "fall_Tue6":"",
  "fall_Tue8":"",
  "fall_Tue10":"",
  "fall_Wed":"",
  "fall_Wed2":"",
  "fall_Wed4":"",
  "fall_Wed6":"",
  "fall_Wed8":"",
  "fall_Wed10":"",
  "fall_Thu":"",
  "fall_Thu2":"",
  "fall_Thu4":"",
  "fall_Thu6":"",
  "fall_Thu8":"",
  "fall_Thu10":"",
  "fall_Fri":"",
  "fall_Fri2":"",
  "fall_Fri4":"",
  "fall_Fri6":"",
  "fall_Fri8":"",
  "fall_Fri10":"",
  "fall_Sat":"",
  "fall_Sat2":"",
  "fall_Sat4":"",
  "fall_Sat6":"",
  "fall_Sat8":"",
  "fall_Sat10":"",
  "fall_Sun":"",
  "fall_Sun2":"",
  "fall_Sun4":"",
  "fall_Sun6":"",
  "fall_Sun8":"",
  "fall_Sun10":"",
  //冬季对话
  "winter_Mon":"",
  "winter_Mon2":"",
  "winter_Mon4":"",
  "winter_Mon6":"",
  "winter_Mon8":"",
  "winter_Mon10":"",
  "winter_Tue":"",
  "winter_Tue2":"",
  "winter_Tue4":"",
  "winter_Tue6":"",
  "winter_Tue8":"",
  "winter_Tue10":"",
  "winter_Wed":"",
  "winter_Wed2":"",
  "winter_Wed4":"",
  "winter_Wed6":"",
  "winter_Wed8":"",
  "winter_Wed10":"",
  "winter_Thu":"",
  "winter_Thu2":"",
  "winter_Thu4":"",
  "winter_Thu6":"",
  "winter_Thu8":"",
  "winter_Thu10":"",
  "winter_Fri":"",
  "winter_Fri2":"",
  "winter_Fri4":"",
  "winter_Fri6":"",
  "winter_Fri8":"",
  "winter_Fri10":"",
  "winter_Sat":"",
  "winter_Sat2":"",
  "winter_Sat4":"",
  "winter_Sat6":"",
  "winter_Sat8":"",
  "winter_Sat10":"",
  "wintar_Sun":"",
  "winter_Sun2":"",
  "winter_Sun4":"",
  "winter_Sun6":"",
  "winter_Sun8":"",
  "winter_Sun10":"",
}

婚后对话

在游戏文件里Characters\Dialogue\MarriageDialogue.xnb是放置所有NPC的婚后对话,每个NPC可以选择属于自己的对话文件,比如阿比盖尔的Characters\Dialogue\MarriageDialogueAbigail.xnb。当游戏查找对话时,它会使用NPC文件中的Key/对话(如果有这个格式的对话存在的话),否则会使用预设婚后对话或者默认对话(不过默认对话基本上都是空的)。 每一个对话里拥有的密钥格式来自于以下其中一个格式:

密钥格式(key format) 描述(description)
<季节>_<1到28日>
<season>_<day>
根据你所填的季节<season>日子<day>将会触发此对话。
例子: fall_1: "这个气氛……我不会感觉错的,角落的蘑菇、散落的枯叶、橘色的南瓜……是只有在秋天才看得到的景色。就在今天,秋季降临了,我说的没错吧?亲爱的?"
露台_<伴侣>
patio_<spouse>
当你的伴侣在你出货箱右上的平台刷新时,就会触发此对话。*通常是在非雨天/非雪天会刷新。*
<天气>_<白天或晚上>_<随机>
<weather>_<dayOrNight>_<random>
婚后日常对话。<weather>可以填充Rainy或者Indoor,前者是下雨天的情况,后者是除雨天以外的天气。(虽然不知道为什么指令是Indoor“室内”,但指令就是这样……) <dayOrNight>可以填充Night或者Day,前者是游戏时间为下午6点以后会触发的对话,后者为下午6点以前触发。<random>可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。
例子: Rainy_Night_3: "每当夜幕降临,我很喜欢把家里的灯光调暗一点,然后好好地聆听那份寂静……$8"
好玩/快乐/有趣离去_<伴侣名字>
funLeave_<spouse>
未完成的指令,当你的伴侣在家里准备出门去鹈鹕镇逛逛时会触发的对话。(但是原文只是给出了TODO*task yet to be done*未完成的指令。)
工作离去_<伴侣>
jobLeave_<spouse>
未完成的指令,当你的伴侣在家里准备出门回到ta们的工作岗位时会触发的对话。(只限原版NPC即潘妮、玛鲁和哈维。不确定未来会不会更完善。)
好玩/快乐/有趣回家_<伴侣名字>
funReturn_<spouse>
当你的伴侣在下午一点之后回到家里但还未抵达ta们的目标坐标,会触发这个对话, 只限星期一触发 (给任何NPC)或者星期五(如果不是玛鲁/哈维/潘妮)。
例子: funReturn_Abigail: "嘿!今天你过得好吗?我过得很好哦。散步果然使人精神振奋呢。$h"
工作回家_<伴侣>
jobReturn_<spouse>
当你的伴侣在下午一点之后回到家里但还未抵达ta们的目标坐标,但只限于funReturn不被显示。
例子: jobReturn_Penny: "#$c .5#晚上好。我今天很好,感谢!那你过得怎么样?$h#$e#贾斯和文森特今天表现不太好。我还是很担心…"
<季节>_<伴侣>
<season>_<spouse>
当你和伴侣有达到9心以上的好感,将会有5%概率触发此对话。
例子: fall_Abigail: "我是不是闻到了你身上的南瓜味?或者事实是我在发白日梦……$h"
户外_<伴侣>
Outdoor_<spouse>
有20%的概率触发伴侣在家外面站着时会触发此对话。
例子: Outdoor_Abigail: "我就呆在这里,好吗?#$e#这里有好多稀奇古怪的昆虫和东西在!*咯咯笑*$h"
户外_<随机>
Outdoor_<random>
有80%的概率触发伴侣在家外面站着时会触发此对话。<随机>可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。
例子: Outdoor_3: "我们的地产包含了洞穴可真是太赞了!那是我梦寐以求的事情!$h"
伴侣房_<伴侣>
spouseRoom_<spouse>
当伴侣位于ta们的伴侣房时会触发的对话。
例子: spouseRoom_Abigail: "$c .5#我比你起得早,我就去喂了小大卫。它整个早晨都很兴奋呢。#$e#我希望你不介意豚鼠的味道。"
一个孩子_<随机>
OneKid_<random>
如果你有一个孩子,并且你的伴侣位于厨房,将会触发此对话。<随机>可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。
OneKid_1: "我在想,%kid1会不会长大以后变成和你一样的农夫?"
两个孩子_<随机>
TwoKids_<random>
如果你有两个孩子,并且你的伴侣位于厨房,将会触发此对话。<随机>可以填写的内容是0,1,2,3,4,所以你会有五个对话且随机触发。
TwoKids_2: "我梦到了关于%kid2长大之后变成了著名的怪物猎人。我甚至开始想着小小装备套装了。"
<感情>_<随机>
<affection>_<random>
当伴侣在家里并且是早上11点到下午6点时或者当天的对话并没有达成以上情况时,会触发此对话。<感情>随机的内容为当伴侣好感为9心以下,50%概率触发感情不和Bad 或者 感情平淡Neutral的对话; 10心以上50%概率触发感情美满Good的对话或者11心以上75%概率触发感情美满Good的对话;除此之外的概率将会触发感情平淡Neutral的对话。<随机>可以填写的内容是0,1,2,3,4,5,6,7,8,9,所以你会有10个对话且随机触发。
例子: Good_5: "我只是在好好欣赏一下我的美人鱼吊坠……直到死亡,我会很自豪地让它陪伴我身边。$l"

为了让大家方便,我这里就直接提供我亲友整理过的婚后对话模板,以下为萌新(感谢贴吧@萌新不萌新-)提供的模板:

{
      "Rainy_Day_0": "",//下雨天白天
      "Rainy_Day_1": "",
      "Rainy_Day_2": "",
      "Rainy_Day_3": "",
      "Rainy_Day_4": "",
      "Rainy_Night_0": "",//下雨天晚上
      "Rainy_Night_1": "",
      "Rainy_Night_2": "",
      "Rainy_Night_3": "",
      "Rainy_Night_4": "",
      "Indoor_Day_0": "",//室内白天
      "Indoor_Day_1": "",
      "Indoor_Day_2": "",
      "Indoor_Day_3": "",
      "Indoor_Day_4": "",
      "Indoor_Night_0": "",//室内晚上
      "Indoor_Night_1": "",
      "Indoor_Night_2": "",
      "Indoor_Night_3": "",
      "Indoor_Night_4": "",
      "Outdoor_0": "",//门口
      "Outdoor_1": "",
      "Outdoor_2": "",
      "Outdoor_3": "",
      "Outdoor_4": "",
      "OneKid_0": "%kid1",//第一个孩子
      "OneKid_1": "",
      "OneKid_2": "",
      "OneKid_3": "",
      "OneKid_4": "",
      "TwoKids_0": "%kid2",//第二个孩子
      "TwoKids_1": "",
      "TwoKids_2": "",
      "TwoKids_3": "",
      "TwoKids_4": "",
      "Good_0": "",//高心几率对话
      "Good_1": "",
      "Good_2": "",
      "Good_3": "",
      "Good_4": "",
      "Neutral_0": "",
	  "Neutral_1": "",
	  "Neutral_2": "",
	  "Neutral_3": "",
	  "Neutral_4": "",
	  "Bad_0": ".",//低心几率触发
	  "Bad_1": "",
	  "Bad_2": "",
	  "Bad_3": "",
	  "Bad_4": "",
      "spring_1": "",//每年春1对话
      "spring_12": "",//复活节前一天对话
      "spring_23": "",//花舞节前一天对话
      "summer_1": "",//每年夏1对话
      "summer_10": "",//夏威夷宴会前一天对话
      "summer_28": "",//水母节当天对话
	  "fall_1": "",//每年秋1对话
      "fall_15": "",//展览会前一天对话
      "fall_26": "",//万灵节当天对话
      "winter_1": "",//每年冬1对话
      "winter_7": "",//冰雪节前一天对话
      "winter_23": "",//冬日星前一天对话
      "winter_28": "",//当年最后一天对话
      "patio_Michael": "",//在外面天井的对话(Michael记得改为你自己的崽的名字)
      "spouseRoom_Michael": "",//在配偶房的对话(Michael记得改为你自己的崽的名字)

 }

事件文件

Data\Events\*.xnb包含了事件脚本,事件里也有全部的对话。(看看 使用模组:事件数据).

动画描述

Data\animationDescriptions.xnb包含了简短的动画描述,以配合行程上所显示的动作。(这里我来说明一下,行程有两种方式可以显示对话/描述,一种是行程对话scheduledialogue,另外的就是动画描述animationDescriptions,如果你想要NPC在行程里有显示动画和对话,需要额外给animation加上描述才能同时拥有动画和对话,行程对话在动画时是无法显示的,这点请各位注意一下。)

Strings from CS 文件

Strings\StringsFromCSFiles.xnb包含了各种各样的预设对话。这个文件里有着预设好的对话、大部分NPC共同使用的对话(比如NPC会说ta们的XXX喜欢/讨厌什么东西)、硬核事件(比如婚礼的致辞)等等。 这个文件的条目格式为"<key>": "对话字符串" "<key>": "dialogue string",它可以是任意的特殊标识符。这些键必须完全匹配游戏里所需要的键,但这些键只是游戏专属的特殊标识符— 即使这些键看起来就像<file name>.<line number>,这最初只是用于分配IDs的,并且这些IDs没有任何意义或者作用。(甚至它也不需要匹配当前的文件名或行号)。*说句一般人看得懂的话,其实就是StringsFromCSFiles这个文件里的对话全部都是无法被我们添加进入游戏代码里,最多只能通过某些小手段把dialogue string改成你想要的句子*

NPC-specific通用对话

用点小聪明,你可以让每个NPC做出不同的反应,而不是使用常规的预设对话。打个比方,你可以使用CP模组Content Patcher来改变NPC.cs.3962NPC.cs.3963 (送花交往对话反应),与NPC.cs.3980 (送吊坠求婚对话反应):

{
   "Action": "EditData",
   "Target": "Strings/StringsFromCSFiles",
   "Entries": {
      "NPC.cs.3962": "$q 10001 give_flowersA#?!...#$r 10001 0 give_flowersA# [送出花束]",
      "NPC.cs.3963": "$q 10001 give_flowersB#?!...#$r 10001 0 give_flowersB# [送出花束]",
      "NPC.cs.3980": "$q 10001 give_pendant#?!...#$r 10001 0 give_pendant# 你愿意和我结婚吗?"
   }
}

以这个为例子,每一个NPC会从角色对话文件里的give_flowersA, give_flowersB, 和 give_pendant 读取对应的反应对话. (看看以下格式的信息可以了解更多的语法)记得要把全部可婚NPC都要加上,否则会有BUG。例子,你可以给海莉加上这个:

{
   "Action": "EditData",
   "Target": "Characters/Dialogue/Haley",
   "Entries": {
      "give_flowersA": "噢,这花束真漂亮。$1#$b#...什么?你想要成为我的男朋友?$8^...什么?你想要成为我的女朋友?$8#$b#....我以为我们已经在一起了。$1",
      "give_flowersB": "哦哦哦,@! 我愿意成为你人生中的真命天子。$1",
      "give_pendant": ".....$8#$b#@,我不知道我现在该说什么……$8#$b#...$7#$b#好...我接受了...$4#$b#我等不及要告诉镇长这个消息了... 我想全部计划得花上3天就能准备好。$1"
   }
}

这个可以添加其他通用对话,你甚至可以通过已经回答问题的IDs来避免“送花束”的重复问答。*原文直译不太行,我来解释一下,使用$q指令的问答对话会有对应的ID,比如上面使用的是$q 10001(作为问题ID)和$r 10001(作为回答ID),回答后的回答ID会被游戏存档记录,所以也有可能会导致向其他NPC求婚时会出现BUG。总结一下就是,建议使用这个对话格式而不是上面有问答ID的*

运算法

从游戏里发现下列对话:

  1. 事件对话从适当的事件命令中读取 (看看模组目录:事件数据).
  2. 特定位置的对话从 StringsFromCSFiles <location>.cs读取。
  3. 其他角色对话文件将从角色-特定文件读取。
  4. 如果找不到对话,游戏就诉诸于 StringsFromCSFiles 文件硬编码的对话(特殊键的前置为 NPC.cs NPC.cs).

格式

对话内容包含了可以改变对话框的tokens和commands, 改变内容(比如说根据玩家当前性别读取对应性别的对话),注入值等等。这些都被解析为Dialogue分类。

特殊tokens:

密钥格式(key format) 描述(description)
# 把两个对话指令隔开的符号。
{ 未完成的指令,用于"breakSpecialCharacter"指令。*反正我们现在没有用到就是了*
^ 根据玩家性别切换对话的指令。这个符号的前面句子是男性玩家可见,符号后面为女性玩家可见。
例子: 早上好,@先生!^早上好,@小姐!
% 把带有人物肖像的对话框变成旁边式对话框。
例子: "%阿比盖尔沉迷于她的歌曲里"
* 未完成的指令,用于"quickResponseDelineator"指令。*不过大部分人用于表示某些情绪或者动作,比如说*笑*、*嘀咕*、*打哈欠*、*打喷嚏*等等,某种意义上是偷懒专用*

肖像指令

下列指令是用于切换对话框右侧的NPC表情的。表情指令通常放在句子的最后一个:

"fall_Fri6": "在我很小的时候,爸爸就领养了我。$s#$b#抱歉,我可能又说了让你不舒服的话了……$u#$e#算了……今天你的农场打理得怎么样?",
密钥格式(key format) 描述(description)
$neutral 切换角色表情为默认/一般表情。
$h 切换角色表情为开心表情。
$s 切换角色表情为伤心表情。
$u 切换角色表情为特殊表情。
$l 切换角色表情为脸红/喜欢表情。
$a 切换角色表情为生气表情。
$<id> 根据id的数字切换对应位置的表情。这些肖像ID顺序从左到右,从上到下并以$0开始计算。全部角色都有固定6个基础表情: $0 (默认/一般), $1 (开心), $2 (伤心), $3 (特殊), $4 (脸红/喜欢), and $5 (生气)。你可以为角色创造自制表情以用在对话或者事件剧情里。
注意: $1不能放在对话的最前面,因为会和以下的指令冲突(参考下面的$1)。

对话指令

$q <回答ID> <回馈>#<内容>
$q <response IDs> <fallback>#<text>
提出问题的对话格式(问答对话指令的前缀)。如果<response IDs> (根据你是选择了前面的回答ID或者后者的ID,这个/是用来隔开回答ID)已经在之前回答问题时已经触发过,那么问题将会直接读取你对应的回答反应(或者这段对话的其他部分),除此之外,如果你上一次已经回答过这个问答,<fallback>可以搭配$p指令来制作下一次遇到这个问题时会说的话。注意: 问答ID需要是独一无二的,和事件一样,以防止和其他NPC的问答ID冲突而导致对话被跳过。可以去看看这个事件的界面以得到更多资讯。
$r <回答ID> <增加多少好感度> <反应>#<答案1的内容>
$r <response ID> <friendship> <reaction>#<answer text>
为$q问答对话添加回答选项。 <answer text>是你想要给玩家选择的回答。<response ID>是将对应的回答归类为你所填充的ID,以此让你能在以后的某些指令使用(同一个ID可以同时被多个回答归类)。 <friendship>是玩家选择这个答案之后可以让NPC的好感度产生变化,正数会增加好感,负数为减少好感。<reaction>是玩家回答后根据答案所填充的<reaction>读取对应NPC反应,基本上是在Content\Characters\Dialogue\*.xnb文件里读取这个对话(事件也是一样,反应的对话在Dialogue)。
$p <回答ID>#<达成ID的内容>|<没有达成的内容>
$p <response ID>#<match text>|<no-match text>
p代表"对话的先决条件"(dialoguePrerequisite)。根据之前玩家所回答的ID而显示不同的对话。如果之前玩家选择的回答和这个<response ID>是一样的,那么<match text>将会被显示;相反的,如果没有选择到对应ID,<no-match text>就会被显示. 这些对话内容是使用|这个符号分开不同内容。可以使用#来搞出多个内容(虽然目前我只看到两个内容,不知道三个以上的内容是否存在)。这并不需要是对话字符串中的第一个命令(就是你可以在一般对话之后放<$p>指令,虽然,这样的变化我也没试过……希望有个好人可以帮忙验证真假)。
$b 暂时停止对话,直到玩家点一下对话框就可以延续<$b>以后的对话。(这里举个明显可以看到差别的例子,那就是对话框右下方或者人物肖像的左下方,会出现向下的箭头。)
$e 结束当前对话,并且关闭对话框使玩家可以恢复行动。再次与NPC对话才能触发$e以后的对话。(这里举个明显可以看到差别的例子,那就是对话框右下方或者人物肖像的左下方,会出现中间有X的小方格,并且你可以看到对话框缩小并消失。)
$k 未完成的指令。代表"对话杀死"(dialogueKill)。(貌似至今为止是没有看过作者使用,看看未来有没有被赋予意义)
$c <概率>#<内容1>#<内容2>
$c <probability>#<text1>#<text2>
根据<probability>0到1以内的概率显示<text1>的对话内容;除此之外,将触发<text2>的对话内容。比如:$c 0.9是90%概率会触发<text1>并且剩余的10%概率会触发<text2>。 注意: 替代器命令(在下方可见)不能在<text1>正常运行。这并不需要是对话字符串中的第一个命令(指可以放在正常对话的后面)。这个完全不看游戏内的运气。(警告:由于不看游戏内运气且星露谷的概率不是一般抽卡游戏的伪随机*指有保底*,所以如果要搞这个随机对话最好不要像我把条件弄得太严苛*我的条件是限第一年夏季星期二6心好感50%概率触发*如果不是想要搞个小彩蛋真的没必要……)
$d <bus|joja|cc|kent> "根据世界状态而显示的对话"(dialogueDependingOnWorldState)

"Tue4": "$d <dependence>#|当"dependence"的数值是存在会触发的对话内容|除此之外的情况会触发的对话内容",
这些"dependence"拥有4个数值: "bus": 巴士是否被修复; "joja": 乔家超市是否还在营业; "cc": 社区中心是否被修复; "kent": 肯特是否回来。这个指令必须在对话字符串中的第一个指令,且不允许有其他对话。
例子: Sun2: "$d bus#今天去找桑迪玩玩吧~|巴士什么时候才修好啊,想去沙漠玩……"

$y 未完成的指令。代表"对话快捷反应"(dialogueQuickResponse):一个简单的问答对话。类似$q指令的运作,但是是一个且都是在同一个文本里。它并没有"对话的先决条件"(dialoguePrerequisite)$p或者好感度变化。它可以直接被触发。(注意:你只能放置在对话字符串的最后一个,否则你的问题、回答和反应都会乱成一团糟。如果不信邪可以尝试复制坏例子的那个对话并且粘贴到随便一个NPC,然后进入游戏测试会发生什么事)
例子1: Penny: "$y '要来份早饭吗?_是的,谢谢。_好,给你。_不了,我感觉很好。_那额外的就给我吃啦!'"
例子2: Sun4: "嗨,@先生。^嗨,@小姐。#$b#今天天气不错……#$b#$y '要来我家吃饭吗?_当然。_那就那么说定了!_抱歉,我今天很忙。_没关系,下次再来吧'"
坏例子: Sun4: "嗨,@先生。^嗨,@小姐。#$b#今天天气不错……#$b#$y '要来我家吃饭吗?_当然。_那就那么说定了!_抱歉,我今天很忙。_没关系,下次再来吧'#$e#今天要招待什么料理呢~"
$1 <信件ID>#<第一次看到的内容> #$e# <第N次以后的内容>
$1 <letter ID>#<1st-time text> #$e# <nth-time text>
创造一个玩家(几乎)只能看到一次该NPC的对话。<1st-time text>只会在<letter ID>还没被标记(并且没有被标记后送出去);相反的, <nth-time text>将被触发。<letter ID>不应该对应于实际的邮件(因为它不会被寄出),但是它可以被事件或其他对话线引用。
%fork 设置specialEventVariable1变量,可以通过后面的fork事件命令来检查。主要用于事件期间$q问题的反应对话。(总结:新手不要先接触,变量说来话长,在 事件指令里看看详细用法吧)
[# # #] 根据格子所填充的三个物品ID,随机给出一样物品。(一个格子一次性只能随机三样物品)如果是[231][120]分开放置物品ID,那么你可以一次性得到两个物品。(当然,两个格子各放三个物品ID也是可以的,只需要记得最多只能放三个物品ID)

问答例子

为了能够更了解$q、$r和$p如何运作,看这里的例子作为参考可以帮助你。请注意如何格式化脚本更容易阅读:

summer_Fri:
    "我想我明天会去海滩玩!
    #$q 305/306 beachquestion_followup#你想要跟我来吗?
        #$r 305 15 beachquestion_yes#当然,我超喜欢!
        #$r 306 0 beachquestion_sorry#噢,对不起,我已经和别人约好了……
        #$r 306 -10 beachquestion_no#不用了,谢谢。
    ",
    beachquestion_yes: "好耶!是约会!$h",
    beachquestion_sorry: "淦,好吧。$6",
    beachquestion_no: "哦,呃,我很抱歉。$s",
    beachquestion_followup:
        "$p 305
            #明天一定可以玩得很开心!$h
            |哎,要是有个人能陪我,那该有多好……$s
        ",

summer_Sat:
    "每年这个时候的海滩都很赞……
    #$p 305
        #谢谢你今天陪我来这里。$h
        |哦,你好,@,今天过得怎么样?
    ",

以上对话在夏季的任何星期五触发。NPC的对话开头总是触发: "我想我明天会去海滩玩!"

之后,ta会开始问你问题

#$q 305/306 beachquestion_followup#你想要跟我来吗?

$q 开始提问。 305/306检查这个问题是否在以前触发过,如果有就会直接把你的对话送到beachquestion_followup这个对话密钥。(你可以随意你的对话密钥以方便你找到/知道/运作/检查)

之后,就是玩家可以回答的答案。你可以增加多少个 $r都没问题;这里,我们则是三个:

    #$r 305 15 beachquestion_yes#当然,我超喜欢!
    #$r 306 0 beachquestion_sorry#噢,对不起,我已经和别人约好了……
    #$r 306 -10 beachquestion_no#不用了,谢谢。

如果你表示同意(指第一个回答),游戏将会记录 ID 305作为你回答问题的答案。之后,你和那个角色的好感度增加了15点数。 beachquestion_yes就会被触发并延续刚刚问答对话。

如果你表示拒绝(指第二和第三个回答)游戏将会记录ID 306 作为你回答问题的答案,然后根据你选择的回答保持不变,0或者减少好感,-10。之后会读取beachquestion_sorry或者beachquestion_no来继续你的对话。

现在我们需要给对话密钥加上反应:

    beachquestion_yes: "好耶!是约会!$h",
    beachquestion_sorry: "淦,好吧。$6",
    beachquestion_no: "哦,呃,我很抱歉。$s",
    beachquestion_followup:
        "$p 305
            #明天一定可以玩得很开心!$h
            |哎,要是有个人能陪我,那该有多好……$s
        ",

这里需要注意的是beachquestion_followup。当玩家再一次触发这个对话时,$q 305/306会被检测以判定是开始问问题或者直接读取这个对话。

$p 305开启了一个变量反应,意思是"如果玩家选择的是同意,那么会触发前者的对话。相反则触发后者的对话"。如果玩家回答的是同意,那个NPC会表现开心。相反,ta会说ta需要找人陪ta一起去。

这里隔天会触发另外一个变量反应:

summer_Sat:
    "每年这个时候的海滩都很赞……
    #$p 305
        #谢谢你今天陪我来这里。$h
        |哦,你好,@,今天过得怎么样?
    ",

依旧是第一行,每一次玩家与NPC对话的第一句都会是(每年这个时候……),但是下一行是根据昨天玩家所选择的答案来显示出对应对话内容。


这里是另一个从海莉的对话文件里拿出来的例子。注意一下,即使脚本格式很难读懂,但游戏能够同时处理这两种格式。

    summer_Sat: "农场的活好像很无聊的样子……#$q 42/43 summer_Sat_old#一天都干什么呢?#$r 42 10 summer_Sat_12#护理植物#$r 42 10 summer_Sat_12#探索山洞#$r 43 -10 summer_Sat_13#在你的房间里面转#$r 42 10 summer_Sat_12#挖宝藏" #!String
    summer_Sat_old: "#$p 43#嘿,你最好别在我房间里偷偷摸摸的!!$a|不过我估计你没准能练出个好身材。" #!String
    summer_Sat_12: "嗯……听起来是个大工程。" #!String
    summer_Sat_13: "什么?你最好别有这个想法!$a" #!String

第一回触发的summer_Sat,将会触发42或者43的反应(因为这个问题是唯一有它们作为回答的问题),所以海莉会说 "农场的活好像很无聊的样子……一天都干什么呢?" 玩家可以选择以下其中一个回答:

  • 护理植物
  • 探索山洞
  • 在你的房间里面转
  • 挖宝藏

第三个回答,$r 43 -10 summer_Sat_13#在你的房间里面转,回答被记录为ID 43,减少10点海莉的好感度并且触发这个对话summer_Sat_13 (海莉说 "什么?你最好别有这个想法!")。其他回答则被记录为ID 42,增加10点海莉的好感度并且触发这个对话summer_Sat_12 ("嗯……听起来是个大工程。").

下一次触发的summer_Sat,将给出$q命令中列出的一个回答ID(42或43)。因此,$q和以后的内容被废弃,并且对话summer_Sat_old会代替这个空缺的位置。这个新对话使用了$p指令来改变海莉的对话,根据你上次回答ID是43或者是42来触发对应对话。如果你之前回答的是"在你的房间里面转",在这个符号|之前的对话会被触发,所以海莉将会说"农场的活好像很无聊的样子……嘿,你最好别在我房间里偷偷摸摸的!!" 如果不是ID 43被记录(在这个情况下,你一定是给出反应42的ID,打个比方,上次问答对话所选择的三个里其中一个回答),在这个符号|之后的对话会被触发,所以海莉反而会说 "农场的活好像很无聊的样子……不过我估计你没准能练出个好身材。"

替代器命令

替换器命令将被替换为相关字符串。注意只有@在信件条目能够运作。(目前来看好像只有事件里的message不能使用@,望补充)

@ 玩家的名字。
例子: 嗨,@!
%adj 随机形容词。 (从Content/Strings/StringsFromCSFiles.xnb读取)
%noun 随机名词。(从Content/Strings/StringsFromCSFiles.xnb读取)
%place 随机地点名字。(从Content/Strings/StringsFromCSFiles.xnb读取)
%spouse 玩家伴侣名字。
%name 一个随机生成的名称。(虽然,不太情况多随机)
%firstnameletter 玩家名字的前半部分(四舍五入),比如 Nat如果玩家名字是Natalie。(不清楚其他语言是怎么运作,望补充)
%time 当前游戏时间。
%band 山姆和赛巴斯的乐队名字。
%book 艾利欧特写的书的标题。
%rival 根据玩家性别并从StringsFromCSFiles.xnb随机生成一个姓名。(从Utility.cs.5499到Utility.cs.5560) 不会和农夫的名字匹配。
%pet 玩家宠物的名字。
%farm 农场的名字。比如:听闻%farm农场的农场主是位年轻人……
%favorite 玩家在开头填写的喜欢的东西。(建议不要乱填,要不然对话会很搞笑)
%kid1 玩家第一个孩子的名字。
%kid2 玩家第二个孩子的名字。

价值Values

游戏在一些对话里使用这些预定义的值。这个部分是需要和上面的东西连接使用。

星期里的某天/星期几Days of week

  • Mon 星期一
  • Tue 星期二
  • Wed 星期三
  • Thu 星期四
  • Fri 星期五
  • Sat 星期六
  • Sun 星期日

季节Seasons

  • spring 春天
  • summer 夏天
  • fall 秋天
  • winter 冬天

第一/第一以后的年份

虽然在游戏里的对话使用了"first/later year"这个值,但是它只有两个是有效的:

密钥格式(key format) 描述(description)
1 发生在第一年。
2 发生在第一年以后的任何一年(就算不是第2年)。

回答IDs

回应ID标识了玩家在回应问题对话时所选择的答案。在某些情况下,一个问题里面可能会有多个答案具有相同ID的情况(比如各种各样的"yes"),或者每个问题都使用一样的ID(在这种情况下,ID只是显示玩家已经回答或者还没回答的问题)。

任何模组里都可以使用自填ID,不过这里提供了原版游戏IDs,以1.3.36为准:

对话
NPC 问题 回答
阿比盖尔 Sun2
@你觉得我们死后会变成什么样?
17: 我不知道。
18: 我们会变成鬼魂。
17: 我们会上天堂。
18: 我们的能量体会进入灵界。
17: 什么都不会发生。我们就是不存在了而已。
阿比盖尔 summer_Sun
好吧……假设你得到了一个带薪假期。你会去哪儿?
25: 海滩
26: 漆黑的山洞
26: 古老茂密的森林
25: 乔家购物广场
阿比盖尔 fall_Sun
我想给我的头发重新染个色……你觉得什么颜色好?
27: 染成黑色吧。
27: 不妨试试金色吧?
27: 粉红怎么样?
28: 我喜欢你现在的样子!
阿比盖尔 winter_Sun
我画了两幅画。你觉得怎么样?
29: 我喜欢丛林海岛和老虎这一幅。
30: 我喜欢拿着战斧的兽人这一幅。
29: 我哪幅都不喜欢。
亚历克斯 Wed
我还想叫你一起投投球,但你好像不怎么喜欢运动。^如果你不是女孩子,我就约你打球了。
6: 我站在旁边看就好了。
5: 我想和你打球!
5: (愤怒)你到底是什么意思?
亚历克斯 summer_Wed
你觉得我能成为职业选手吗?
52: 你一定会成为运动场上的传奇
52: 可能吧,你毕竟练习了那么久
53: 别做梦了,你还是老老实实去做推销员吧
亚历克斯 fall_Wed
你觉得女孩子会喜欢我的发型吗?^你觉得我的发型怎么样?
54: 看起来挺时尚的。
55: 像头上长了蘑菇一样。
克林特 Mon
你一定猜不到我的曾祖父以前是一名……
9: 铁匠。
9: 一个糊涂的小丑
9: 一个尖酸刻薄的混蛋。
海莉 summer_Sat
一天都干什么呢?
42: 护理植物
42: 探索山洞
43: 在房子里面转
42: 挖宝藏
海莉 fall_Sat
*唉*……你觉得我今天做点什么好呢?
44: 水彩画
44: 阅读杂志
44: 安安静静的呆着(原文翻译:快停止成为一个自私的爱哭鬼)
莉亚 Mon
所以你为什么要做一个农夫呢?
21: 我想要赚很多很多的钱。
22: 住在这里比住在城市里要更“真实”。
211132: 为了追随爷爷的脚步。
22: 我想要逃离我原来的生活。
玛鲁 Sun
你在农场工作得开心吗?
3: 开心。
4: 不开心。
玛鲁 summer_Thu
我下了决心,以后一定要自己做个机器人出来。
35: 对你来说,应该是小菜一碟。
36: 你可别眼高手低了
35: 听起来应该挺难的吧
潘妮 Mon4
但果然还是不要总想着消极的一面吧?
7: 没错。还是保持乐观比较好哦!
8: 还是现实一点比较好吧。
山姆 Wed
嘿……你觉得我的新歌该是什么主题的?
20: 耕种、挖矿和砍柴。
8820: 海中之城。
8821: 火车。
19: 随便吧。反正都是难听死的。
赛巴斯 Fri2
那么你是如何打发空闲时间的?
15: 继续耕种
16: 漫画书
15: 采购
15: 运动
赛巴斯 fall_Fri
你平时读书吗, @?
62: 嗯。看些经典名著。
63: 只看科幻与奇幻作品。
62: 我喜欢言情作品。
63: 不,我不看书的。
事件
事件 问题 回答
阿比盖尔四心事件 @!你怎么站在雨里啊?$7 32: 我在干活儿
32: 我在享受这种天气
32: 我还想问你呢
阿比盖尔六心事件 你以前用过剑对么? 847951: 没错,我觉得很刺激!
847951: 是的,但只是自卫而已
847951: 没错,但是太危险了。你不应该冒险。
847951: 没有
阿比盖尔十心事件 *吸气*$s 776589: 发生了什么?
776589: 你还好吗?
阿比盖尔十心事件 我可能没有自己想象的那么勇敢……$8 34: 和我在一起,你就安全了。
34: 我也害怕。
34: 你哭得就像个三岁小孩儿。别说了。
亚历克斯五心事件 我真没用……$s 57: 才不是。你明明是个天才!
57: 我们都有自己的长处和短处。
57: 没用?对,总结得很精辟。
克林特三心事件 你有什么秘诀吗?^你能给我一些建议吗? 211: 靠你的能力和魅力打动女性
211: 做些疯狂的事情,让别人猜不透你
211: 表现得正常一点儿……做你自己就好
211: 把女人当男人一样对待
德米特里厄斯六心事件 你觉得西红柿算什么? 59: 蔬菜
59: 水果
艾利欧特二心事件 问个问题……你喜欢什么样的书, @? 958699: 悬念
958700: 浪漫
958701: 科幻
艾利欧特四心事件 等等。让我们举杯庆祝一下!为了…… 28376: 鹈鹕镇!
28376: 我们的友谊!
28376: 我们的健康!
28376: 你的命运!
艾米丽六心事件 所以……*喘气*……你感觉怎么样?$h 213: 这太奇妙了!
213: 真尴尬……
213: (保持沉默并缓缓鼓掌)
艾芙琳四心事件 您觉得如何? 51: 很美味!
51: 就像在嚼冰球
格斯四心事件 @,你有什么事儿吗? 207: 你现在就得把赊的账给结了!
208: 酒吧在经济上有些困难
海莉二心事件 那是因为上周是我打扫的!$a 46: 少废话,赶紧打扫!
45: 海莉,何不每周固定打扫一次呢?
46: 艾米丽,这次就去打扫吧。
海莉四心事件 话说……你挺有劲的,对吧? 47:
47: 不是
海莉六心事件 这东西现在已经买不到了……$s 48: 别担心,我给你买个新的!
48: 太遗憾了……
哈维二心事件 @你觉得乔治该怎么做? 84: 乔治应该听从哈维医生的建议。
85: 乔治知道怎么做对他的身体最好。
哈维四心事件 嗯……你的心跳有点儿快。$u 86: 我有点紧张。
86: 我刚才在农场里干活,现在还没喘过来气。
86: 你真的是医生吗?我的心跳很正常!
肯特三心事件 (跟肯特聊聊)$s 215: 这事怪乔迪……她本该知道的!
215: 我知道你内心很痛苦……但这也不能怨你老婆啊。
215: (撒谎)这事怪我……是我说要吃爆米花的。
莉亚四心事件 我是不是太自私了 @?$s 83: 不,你只是做了必须做的事情。
83: 不,是你的前任太蠢了。
83: 不,但你其实应该待在城里。
83: 对,有那么一点儿。
83: 对,但人不为己天诛地灭。
刘易斯六心事件 @……你什么都听到了,是么?$s 200: 是的……但是我会保密的。
201: 是的……我要告诉大家。
玛鲁二心事件 我说的没错吧, @? 15933: (什么也不说)
15933: 其实,你爸刚刚可神秘了。
玛鲁四心事件 @我应该怎么办? 38: 从地板上铲起来就好。他不会发现的。
39: 告诉哈维是我的错。
38: 告诉哈维,这纯属意外。
玛鲁六心事件 你看到的是什么? 40: 一颗美丽的星球。
40: 一片漆黑的深渊。
玛鲁八心事件 真是对不起。$8 41: 没关系,根本不疼的。
41: 抱歉就对了。简直疼死人了!
玛鲁十心事件 那么,你觉得怎么样呢, @? 18981: 我认为你的发明很厉害。
18981: 我很失望……你不该让那机器人成为你的奴隶的。
18981: 看来你爸对我们在一起是没意见咯?
18981: (盯着玛鲁,什么也不说)
玛鲁十心事件 你会那么说,肯定有原因……$a 18982: 玛丽尔达就是一台设计用来模仿人类的机器。
18982: 我刚才是在开玩笑。玛丽尔达应该享有自由的权力。
18982: 我会让她去农场里工作。
潘妮二心事件 @?你看到了? 71: 没错,你做的很好,潘妮。
71: 你应该不管他的,现在他倒恼羞成怒了。
71: 我就散个步,不用管我。
潘妮六心事件 ……怎么样? 72: (说谎)嗯嗯!真好吃!
73: 呃……我能把剩下的带走吗?
73: 真是特别的味道……你是怎么把它做得那么耐人寻味的?
皮埃尔六心事件 发誓你不会把这事儿告诉任何人。 50: 我会为你保守秘密的。
50: 这事儿应该让你太太知道。
罗宾六心事件 你有没有用木头做过东西呢, @? 66:
66: 没有
山姆二心事件 说, @…… 你喜欢什么样的音乐? 76: 令人愉悦的流行乐。
77: 实验性质的硬摇滚。
78: 极富能量的舞曲。
79: 气氛活跃的乡村音乐。
山姆四心事件 ……告诉她吧, @。$s 80: 山姆把零食递给我的时候掉到了地上。
80: 山姆把零食递给我的时候被我弄掉了。
81: 山姆故意弄掉的。他觉得这样很好玩。

对话主题

一个对话主题是一个可以在事件的先决条件中检入的临时flag并且可以触发一次性NPC对话(如果它有一个达标的对话密钥)。激活后,它们将被储存到Game1.player.activeDialogueEvents里。

启动对话主题可以通过使用addConversationTopic事件指令%item conversationTopic 信件指令,或在代码中添加它到Game1.player.activeDialogueEvents

游戏定义了这些事件:

id 持续时间 触发条件
收集包
cc_Begin 四天 在社区中心阅读了第一条祝尼魔笔记后,在法师的过场动画中设置。
cc_Complete 四天 社区中心完成。(不适用于JoJa路线)
cc_Boulder 七天 深山的巨石被移除。
cc_Bridge 七天 采石场的桥梁被修护。
cc_Bus 七天 巴士站被修复好了。
cc_Greenhouse 三天 温室建好了。
cc_Minecart 七天 矿车被解锁了。
joja_Begin 七天 当玩家第一次打开Joja社区发展申请书
movieTheater 三天 电影院建好了。
伴侣事件
elliottGone 六天 艾利欧特十四心事件开启时设置。
ElliottGone1
ElliottGone2
ElliottGone3
ElliottGone4
ElliottGone5
ElliottGone6
ElliottGone7
一样天数 艾利欧特十四心事件的一部分。第一个flag是在开始时设置的;随后的flag是由艾利欧特随后的信件设置的。
emilyFiber 二心 艾米丽十四心事件的一部分。完成委托之后设置的。
haleyCakewalk1
haleyCakewalk2
一样天数 海莉十四心事件的一部分。
leahPaint 一样天数 莉亚十四心事件开启时设置。
pennyRedecorating 两天 潘妮十四心事件的一部分。
samJob1
samJob2
两天 山姆十四心事件的一部分。
samJob3 三天 山姆十四心事件的一部分。
sebastianFrog 一样天数 塞巴斯蒂安十四心事件开启时设置。
sebastianFrog2 六天 塞巴斯蒂安十四心事件的一部分。
shaneSaloon1
shaneSaloon2
一样天数 谢恩十四心事件的一部分。
其他事件
dumped_Guys
dumped_Girls
七天 设置在对应的小组10心事件之后。(看阿比盖尔#小组十心事件).
secondChance_Girls
secondChance_Guys
十四天 设置在对应的小组10心事件之后。(看阿比盖尔#小组十心事件).
pamHouseUpgrade 四天 设置在潘姆家修复事件之后,并且当时玩家选择承认自己是赞助者。
pamHouseUpgradeAnonymous 四天 设置在潘姆家修复事件之后,并且当时玩家选择保密自己的身份。
willyCrabs 四天 设置在威利六心事件之后。
其他
Introduction 六天 玩家被创建时。(开始新的存档或者第一次加入多人游戏服务器时)
FullCrabPond 十四天 任何第一次鱼塘拥有十个螃蟹