模组:事件数据

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

目录

此页面解释游戏如何存储和解析事件数据。这是面向模组开发者的高级指南

原始数据

事件存储在Content\Data\Events\*.xnb中(每个地点对应一个文件),可以解包以编辑。以1.5.1为例,如下是潘姆的拖车的事件的原始数据,供参考:

数据 
{
  "35/f Penny 1000/p Penny": "50s/-1000 -1000/farmer -30 30 0 Penny 12 7 0 Pam -100 -100 0/skippable/specificTemporarySprite pennyMess/viewport 12 7 true/pause 1000/speak Penny \"Ughh... It's so dirty in here.$s\"/pause 500/warp farmer 12 9/playSound doorClose/pause 500/faceDirection Penny 2/pause 500/emote Penny 16/pause 300/speak Penny \"@! Um... Sorry that it's such a mess. I was about to clean up.$u\"/pause 500/move farmer 0 -1 0/pause 600/emote Penny 32/pause 300/speak Penny \"You'll help me? You really mean it?$h\"/pause 500/faceDirection Penny 1/faceDirection farmer 1/speak Penny \"Okay, you can get started over there. I'll clean the kitchen.\"/move farmer 2 0 1/move farmer 0 -2 1/move farmer 1 0 1/move Penny -1 0 0/animate Penny false true 100 24 25/animate farmer false true 100 35/pause 200/playSound dwop/removeSprite 16 6/pause 200/move Penny -1 0 0/animate Penny false true 100 24 25/stopAnimation farmer/faceDirection farmer 0/pause 1200/stopAnimation Penny/removeSprite 10 5/playSound dwop/move Penny -1 0 0/animate Penny false true 100 24 25/pause 900/animate farmer false true 100 41/pause 300/playSound dwop/removeSprite 15 5/stopAnimation farmer/pause 1400/stopAnimation Penny/move Penny 1 0 0/pause 800/warp Pam 12 9/playSound doorClose/stopMusic/move Pam 0 -1 0/faceDirection Penny 2/faceDirection farmer 3/faceDirection Pam 1/pause 500/faceDirection Pam 3/speak Pam \"Whaddya think you're doing?!$u\"/faceDirection Pam 1/faceDirection Pam 3/faceDirection Pam 0/speak Pam \"Stop it! I had everything just the way I like it!$u\"/move Penny 2 0 2/pause 500/emote Penny 28/pause 500/speak Penny \"Mom, the house is a total mess. @ and I were just trying to tidy things up a bit.#$b#*sniff* *sniff*... Were you at the saloon just now? You smell like beer...$s\"/pause 300/move Pam -1 0 3/emote Pam 12/pause 400/speak Pam \"It's none of your damn business where I go!$4\"/pause 500/speak Penny \"It IS my business! I don't want you destroying yourself!$a#$b#Don't you realize your choices have an effect on me? Stop being so selfish!$a\"/faceDirection Pam 0/shake Pam 5000/pause 600/speak Pam \"Selfish? I put a roof over your head and clothes on your back and you call me selfish!? You ungrateful little...$u\"/pause 500/emote farmer 28/pause 500/faceDirection Pam 1/faceDirection Penny 1/move farmer -2 0 2/move farmer 0 2 3/pause 500/speak Pam \"You'd better go. I'm sorry you had to see this, kid.$4\"/pause 500/move farmer -1 0 2/move farmer 0 1 2/pause 500/faceDirection farmer 0/faceDirection Penny 2/pause 700/faceDirection farmer 2/pause 500/warp farmer -40 -40/playSound doorClose/pause 500/move Pam 0 -1 1/pause 300/faceDirection Penny 3/speak Pam \"He's a nice young man...^She's a nice young lady...\"/speak Pam \"But I don't want you tellin' others to clean up my house! It's embarrassing! You understand?$4\"/pause 300/faceDirection Penny 2/pause 600/showFrame Penny 23/pause 700/speak Penny \"...Yes, mother.$s\"/pause 1000/mail PennyCleanTrailer/end warpOut",
  "36/f Penny 1500/p Penny": "musicboxsong/9 7/farmer -30 30 0 Penny 9 7 0/skippable/pause 1000/playSound doorClose/warp farmer 12 9/pause 400/faceDirection Penny 2/pause 300/speak Penny \"@, you came at a good time!#$b#I'm just about finished cooking a new recipe I invented!$h\"/pause 400/move farmer 0 -2 3/faceDirection Penny 1/move farmer -2 0 3/speak Penny \"Let me just finish up real quick.\"/pause 200/faceDirection Penny 0/pause 200/animate Penny false true 120 29 30/playSound crafting/pause 320/playSound crafting/pause 320/playSound crafting/pause 320/playSound crafting/pause 320/stopAnimation Penny/pause 500/playSound openBox/showFrame Penny 29/pause 400/playSound furnace/showFrame Penny 30/pause 1500/playSound clank/faceDirection Penny 0/pause 500/faceDirection Penny 1 true/showFrame Penny 28/speak Penny \"Here, give that a little taste.\"/pause 800/faceDirection farmer 2/farmerEat 200/showFrame Penny 4/pause 2500/stopAnimation farmer/pause 500/playSound gulp/animate farmer false true 350 104 105/pause 500/specificTemporarySprite pennyCook/pause 1500/faceDirection farmer 2/pause 500/speak Penny \"$q 72 null#...well?#$r 72 50 event_cook1#(Lie) Mmm! That was delicious!#$r 73 -50 event_cook2#Uh... can I get the rest to go?#$r 73 0 event_cook3#Well it's definitely unique... how did you get it so rubbery?\"/pause 500/speak Penny \"$p 72#Hey, since you're the first person to try it, I'm going to name this one 'Chili de @'.$h|Well, I guess this recipe was a failure...$s\"/stopAnimation farmer/faceDirection farmer 3/pause 600/speak Penny \"Um... so how about we watch a movie or something?\"/pause 500/move farmer 5 0 0 true/move Penny 5 0 0 true/globalFade/viewport -1000 -1000/end dialogue Penny \"Thanks for being my taste-tester.$h\"",
  "963313/n pamPotatoJuice": "playful/10 7/farmer -100 -100 0 Pam 10 7 0/mail pamNewChannel/skippable/pause 3000/speak Pam \"Heheh... I see the delivery came in.$h\"/pause 500/speak Pam \"Let's have a little taste.$h\"/pause 1000/playSound coin/showFrame Pam 32/pause 2000/animate Pam false true 400 33 34/playSound glug/pause 800/playSound glug/pause 800/playSound glug/pause 800/playSound glug/pause 790/stopAnimation Pam/showFrame Pam 32/pause 400/emote Pam 40/pause 800/showFrame Pam 35/textAboveHead Pam \"Ptooey!\"/playSound slimedead/shake Pam 2000/pause 2000/animate Pam false true 400 28 29/speak Pam \"I said potato, not fermented baboon kidney!$u\"/pause 2000/end dialogue Pam \"The juice? Yeah, I tried it, kid. $4#$b#How'd it taste? ...Some things are better left unsaid. Let's just leave it at that.$4\""
}

事件前提

每个事件都有一个包含事件ID和事件前提的键。事件ID最大不能超过10位数2145483647(根据游戏编码)。

您可以使用任何ID以测试 但是当您准备发布,则推荐使用Nexus的4-5位模组ID作为前缀(此ID可在模组页面URL中找到)。注意:任何其他ID(例如用户ID的后四位)都可能与其他模组冲突。您实际上也可以在Nexus上创建页面但不点击"Publish"来为您的模组保留一个ID。当然,这并不是一条规则,而是一种防止模组冲突的良好管理。若上传到Moddrop或其他站点,只需要根据相应网站的页面ID修改事件ID即可。

事件前提包含任意数量的下述参数(使用/分隔)。例如,克林特的3心事件的前提条件为97/f Clint 750/t 1900 2300/d Tue Wed Thu Fri Sat Sun,意思是“事件#97,需要与克林特有3心及以上友谊,周一7:00至23:00之间”(参见下文表格)。

说明:

  • "NPC name"是指村民的内部英语名称,而不是翻译后的名称。
  • 大多数文本是大小写敏感的(例如Monmon不同)。
  • 处理事件代码的游戏逻辑位于GameLocation::checkEventPrecondition

上下文

这些表达式检查当前时间、日期、天气等,与玩家无关。

表达式 对应前提
A <dialogue ID> 给定ID的对话事件(包括对话主题未在进行中。其中ID可以为自定义ID,也可为如下的原版ID:cc_Begincc_Bouldercc_Bridgecc_Buscc_Completecc_Greenhousecc_Minecartdumped_Girlsdumped_GuysIntroductionjoja_BeginpamHouseUpgradepamHouseUpgradeAnonymoussecondChance_GirlssecondChance_GuysshaneSaloon1shaneSaloon2willyCrabs
F 今天不是节日。
U <day count> 从今天开始计起,<day count>天内没有节日。
d <day of week> 今天不是一周中的某天(可以指定多天)。可用的值为:Mon、Tue、Wed、Thu、Fri、Sat、Sun。
r <number> 随机概率检查,其中<number>是介于0和1之间的概率值(例如,0.2代表有20%的概率通过检查)。
v <name> 指定村民是可见的(无论他们是否在屏幕上)。
w <weather> 当前天气匹配<weather>。可用取值:rainy、sunny。
y <year> <year>为1,则必须在第一年。否则,当前年数不得少于<year>
z <season> 当前季节不是<season>
N <number> 玩家找到金色核桃总数不少于<number>

当前玩家

这些表达式检查当前玩家(正在游玩当前游戏实例的玩家)。

表达式 对应前提
B 当前玩家“已婚且有双人床”或“有室友且有单人床”(科罗布斯除外)。
D <name> 当前玩家正在与指定村民恋爱。
J 当前玩家建成了Joja仓库
L 事件发生在农舍且农舍至少升级了两次(有婴儿床但不必有地窖)。仅适用于农舍内部,在其他地方总为false。
M <number> 当前玩家至少有指定钱数。
O <name> 当前玩家与指定村民结婚了。
S <secret note ID> 当前玩家已读指定ID的秘密纸条
a <x> <y> 当前玩家进入地图时站在指定地块位置。注意此事件仅在进入地图时检查,因此只能使用作为传送目的地的地块。
b <number> 当前玩家至少到达过矿井底层<number>次。
c <number> 当前玩家背包至少有<number>个空位。
e <event ID> 对当前玩家观看过指定事件(可以包括多个事件ID)。

用法: /e <event ID> 意味看过指定事件,而 /e <event ID> <event ID> 意味着看过两个事件之一,/e <event ID>/e <event ID> 意味着两个事件都看过。

f <name> <number> 当前玩家与指定<name>的村民至少有<number>友谊。可以指定多组“名字-友谊点”参数对,此情况下须满足全部要求。
g <gender> 当前玩家为指定性别(malefemale)。
h <pet> 当前玩家有宠物,且宠物偏好为<pet>("cat" 或 "dog")。
i <item ID> 当前玩家背包中有指定物品。
j <number> 当前玩家玩了多于<number>天。
k <event ID> 当前玩家观看过指定事件(可以包含多个事件ID)。
l <letter ID> 未设置指定ID的信件标识
m <number> 当前玩家至少赚了指定钱数(无论当前有多少现金)。
n <letter ID> 设置了指定ID的信件标识
o <name> 当前玩家与指定村民结婚。
p <name> 指定村民在当前玩家所在地点。
q <dialogue ID> 当前玩家在某个对话中选择了指定回答。可以包含多个对话ID,在此情况下必须同时满足所有要求。
s <item ID> <number> 当前玩家至少售出了<number>件指定物品。可以指定多组“物品ID-物品数量”参数对,此时必须满足全部要求。仅对统计出货量的物品有效(也就是“售出的物品”菜单中的物品)。
t <min time> <max time> 当前事件介于指定事件之一。采用26小时制。
u <day of month> 当前的日期为指定值之一(可以包括多个参数)。
x <letter ID> 对当前玩家,先将事件标为已看过,再将指定信件添加到明日邮件中,然后返回false(因此不会产生进一步的效果)。使用格式"x letterid true"以立即送信。

房主

这些表达式检查房主玩家(多人模式中的农场主,不必是当前玩家)。若为担任游戏,则房主就是当前玩家。

表达式 对应前提
C 房主完成了社区中心Joja仓库
X 房主未完成了社区中心Joja仓库
H 当前玩家为房主。
Hl <letter ID> 房主玩家未设置指定信件标识
Hn <letter ID> 房主玩家设置了指定信件标识
*l <letter ID> 房主玩家当前玩家未设置指定信件标识
*n <letter ID> 房主玩家当前玩家设置了指定信件标识

事件脚本

基本格式

事件键值对中的“值”就是事件脚本。脚本指定了事件的内容,包括光照、音乐、NPC动作和对话。脚本是用/字符分隔的多条命令。

每个脚本必须以下述三条命令开头,且顺序不能颠倒:

索引 语法 描述
0 <music ID> 欲播放的背景音乐或环境音效。然后,可以使用playMusic <newmusic>以更改此声音,或使用stopMusic以停止播放此声音。此字段可以设为none(停止当前一切音乐,并使用当前地点的默认背景音效)。 也可以设为continue(保持当前音乐不变)。
1 <x> <y> 在事件开始时,照相机聚焦的地块坐标。
2 [<character ID> <x> <y> <direction>]+ 初始化一个或多个角色的初始地块位置和朝向。其中<character ID>可以为farmer或村民名称(如Abigail)。

上述三个命令后面可以添加下述命令排成的任何序列:

命令 描述
addBigProp <x> <y> <object ID> 向指定地块添加物体。<object ID>TileSheets\Craftables.png贴图集ID。
addConversationTopic <ID> [length] 启动指定ID和时长的模组:对话#对话主题(若不指定[length],则默认持续4天)。设置[length]为0则会使该对话主题仅在当天有效。
addCookingRecipe <recipe> 给玩家指定的烹饪菜谱。
addCraftingRecipe <recipe> 给玩家指定的打造配方。
addFloorProp <prop index> <x> <y> [solid width] [solid height] [display height] 从当前节日贴图集中选取一个非实体道具给玩家。[solid width][display height]默认为1。[display height]默认为[solid height]
addLantern <row in texture> <x> <y> <light radius> Maps\springobjects.png贴图集中选取指定贴图,并将其作为发光的临时贴图添加到指定地点。<light radius>设为0代表仅贴图,不发光。
addMailReceived <letter ID> [true / false] 设置信件为已读。
addObject <x> <y> <sprite index> [layer] Maps\springobjects.png贴图集中选取指定贴图,将其作为临时贴图添加到指定地块。
addProp <prop index> <x> <y> [solid width] [solid height] [display height] 从当前节日贴图集中添加一个实体道具。[solid width][solid height]默认为1。 [display height]默认为[solid height]
addQuest <quest ID> 添加指定任务到日志。
addTemporaryActor <character> <sprite width> <sprite height> <tile x> <tile y> <facing> [breather] [Character|Animal|Monster] [animal name] 添加临时演员。[breather]为布尔类型。[Character|Animal|Monster]决定了从那个贴图集加载贴图。默认为Character。[animal name]仅对Animal演员有效。
addToTable <x> <y> <object ID> 将物品放在指定位置的家具上面。除非地点是FarmHouse,否则它总是会尝试将物品放置在第一件家具上,不论那件家具是否是桌子(如果没有家具,可能会报错)。如果那件家具上之前已有物品,它还会替换掉那个物品。不建议在FarmHouse中使用。可能根本不适用于原版游戏。
addTool <Sword|Wand> 向玩家的背包添加Battered Sword或回程法杖。原版中Battered Sword是不可获得的未实装物品。
advancedMove <actor> <loop> <x y>... OR <direction duration> 设置演员的移动。可以设置将<loop>设为True来使演员沿此路径来回走动。示例:/advancedMove Robin false 0 3 2 0 0 2 -2 0 0 -2 2 0/

要使演员沿x轴(左右)移动,请使用要移动的地块数和0。例如,-3 0会使角色向左走三个地块,同时面向左侧。2 0会使演员向右走两个地块,同时面向右侧。

要使角色沿y轴(上下)移动,请使用0和要移动的地块数。例如,0 1会使角色向下走一个地块,同时面向下方。0 -5会使演员向上走五个地块,同时面向上方。

要使演员暂停,请使用面朝的方向和要暂停的毫秒数。1代表向右,2代表向下,3代表向左,4代表向上。之所以选择4代表向上而不是0,是为了让advancedMove能够区分暂停命令和上下移动命令。

代码可以区分移动命令和暂停命令,因为移动命令的x或y值中必须有一个为0,而暂停命令的两个值都不能为0。

示例:/advancedMove Clint true 4 0 2 5000 -4 0 1 3000/克林特将连续移动:向右走4个地块,到达时面向下方,等待5秒,然后向左走4个地块,到达时面向右侧,再等待3秒,然后因为设置为循环(true,见上文)而重复上述动作。

示例:/advancedMove Pam true 5 0 0 3 3 5000 -6 0 0 -4/潘姆首先向右移动5个地块,然后直接向下移动3个地块,到达时面向左侧,等待5秒后向左移动6个地块,然后直接向上移动4个地块。

ambientLight <r> <g> <b> 调节环境光照等级,RGB值为0至255。
animalNaming 若未打开其他菜单,显示动物取名菜单。它会默认当前地点为Coop(鸡舍),似乎只能用于孵化的动物。
animate <actor> <flip> <loop> <frame duration> <frames...> 为指定演员制作动画,使用其贴图集中的一个或多个<frames>(帧),每帧持续<帧时长>毫秒。<frames>按如下规则编号:将贴图集切成16x32的小方块,然后从左到右、从上到下、从0开始编号。<flip>表示是否沿Y轴翻转贴图;<loop>表示是否循环播放动画,直到使用stopAnimation方可停止循环。若您正在为玩家制作动画,参考Modding:Farmer_sprite#Sprite_Index_Breakdown可能会有所帮助。
attachCharacterToTempSprite <actor> 使指定演员与最近临时贴图对齐。
awardFestivalPrize 授予复活节或冰雪节的赢家奖励。
awardFestivalPrize <item type> 授予玩家指定奖励。可用的物品类型为"pan", "sculpture", "rod", "sword", "hero", "joja", "slimeegg", "emilyClothes" 和 "jukebox"。
beginSimultaneousCommand endSimultaneousCommand搭配使用,表示同时执行一串命令。格式:beginSimultaneousCommand/<Event Commands>.../endSimultaneousCommand
broadcastEvent [local] 将此事件标记为“广播事件”,也就是其他玩家也都可以看见此事件。任何联机玩家会被强制传送到此事件。这用于某些原版事件,例如刘易斯向玩家介绍废弃的社区中心。

若指定"local"选项(不是布尔值),则农场帮手会看见事件的主人公是他们自己,而不是房主。原版游戏中未使用此选项。

catQuestion 触发是否收养宠物的询问。
cave 触发选择农场山洞类型的询问。稍后生效。但将蘑菇洞改为蝙蝠洞并不会移除蘑菇箱。
changeLocation <location> 切换到另一地点,并在那里运行余下的脚本。
changeMapTile <layer> <x> <y> <tile index> 将指定地块换为指定值。
changeName <actor> <displayName> 将演员的显示名称设为<displayName>,其中下划线将被替换为空格。
changePortrait <npc> <portrait> 将村民的头像换为"Portraits/<actor>_<portrait>"。
changeSprite <actor> <sprite> 将演员的贴图换为"Characters/<actor>_<sprite>"。
changeToTemporaryMap <map> [pan] 将位置更改为从由 <map> 指定的地图文件中加载的临时位置。如果省略了 [pan] 参数,则还会在新地图上运镜到地块坐标 0, 0。如果为 [pan] 提供了任何值,则不会发生运镜。
changeYSourceRectOffset <npc> <offset> 改变村民的垂直贴图偏移量。例如:changeYSourceRectOffset Abigail 96 将偏移她的贴图表,使她看起来是向左看而不是向下看。这个改变会在事件剩余时间内持续有效。这仅在艾米丽的“服装疗法”事件中用于正确显示各种服装。
characterSelect 似乎无用。将Game1.gameMode设为5,Game1.menuChoice设为0。
cutscene <cutscene> 激活一个过场动画。参见过场动画列表
doAction <x> <y> 模拟玩家点击指定的x/y坐标,并触发任何相关动作。它通常用于在室内事件中打开门,但也可以用于其他目的。如果你对村民使用它,你会与他们交谈,如果玩家拿着物品,他们会将其作为礼物赠送。doAction激活主游戏世界中的对象(他们正处于可能事件之外的地点),因此以这种方式激活NPC非常棘手,他们的反应会根据玩家所持物品的不同而有所不同。
dump <group> 为给定组(如果组是girls则为女性,否则为男性)启动特殊的“冷落”和“第二次机会”对话事件。冷落事件的ID为dumped_Girlsdumped_Guys,持续7天;第二次机会事件的ID为secondChance_GirlssecondChance_Guys,持续14天。在1.3版本的开放测试版中,有第二个参数用来确定丢失友谊的数量,但在发布之前,对该参数的支持已被移除。
endSimultaneousCommand beginSimultaneousCommand搭配使用,同时执行一串命令。格式:beginSimultaneousCommand/<Event Commands>.../endSimultaneousCommand
elliotbooktalk 艾欧利特读书会。
emote <actor> <emote ID> [continue] 使指定村民显示指定表情。若指定continue,则立即执行下条命令。表情存储在 Content\TileSheets\emotes.xnb;参见表情列表
end 通过淡出结束指定事件,然后回复游戏世界,并将玩家置于他们进入此区域时所站的地块。所有end参数都默认执行此命令,除非另有说明
end bed end相同,但将玩家传送到他们最近的床的x/y坐标处。并不会将玩家传送到农舍,而只是传送到当前地图的对应x/y坐标处,不管当前地图是不是农舍。
end beginGame 仅用于玩家刚抵达星露谷时的巴士站事件。 将游戏模式设为playingGameMode,将玩家传送至农舍(9, 9),结束当前时间,开启新的一天。
end credits 不用于任何正常事件。清除落叶/落花天气,将音乐换为婚礼音乐,将游戏模式设为creditsMode并结束当前事件。
end dialogue <NPC> <"Text for next chat"> end相同,但还会清除当天的村民对话,并将这些对话换为<"Text for next chat">参数。示例:end dialogue Abigail "It was fun talking to you today.$h"
end dialogueWarpOut <NPC> <"Text for next chat"> 参见end dialogueend warpOut
end invisible <NPC> end相同,但将指定村民设为不可见(直到明天之前都无法与之互动)。
end invisibleWarpOut <NPC> 参见end invisibleend warpOut
end newDay 同时结束事件和当天(将玩家传送到床上,存档,卖出出货箱中的所有东西等)。
end position <x> <y> 相当于end,但会将玩家传送至地图坐标 x y 处。
end warpOut end相同,但寻找当前地点的第一个出口(若为男性玩家且在浴室,则寻找第二个),并将玩家从此出口传送出去。
end wedding 仅用于硬编码的婚礼事件。 将玩家的衣服变回常服,将刘易斯的事件后对话设为"That was a beautiful ceremony. Congratulations!$h",并将玩家传送回农场。
eventSeen <event ID> [true / false] 用于防止观看矛盾的事件。 它包含一种特殊逻辑:如果事件ID为当前事件,则当该事件结束或被跳过(如果设置为false)时,它会阻止将当前事件标记为已查看。这用于可重复事件。
extendSourceRect <actor> reset 重置演员贴图。
extendSourceRect <actor> <horizontal> <vertical> [ignoreUpdates] TODO: 解释Character.extendSourceRect
eyes <eyes> <blink> 将玩家的眼睛状态设为指定值。<eyes>取值为0 - 5的整数(依次为睁眼、闭眼、右眼、左眼、半闭、睁大)。眨眼表示为一个负数倒计时,默认为-1000。
faceDirection <actor> <direction> [continue] 使指定村民面朝指定方向。若不指定[continue],则游戏会暂停。
fade [unfade] 若不指定参数,则淡出直到黑屏。若参数为unfade(而非true),则从黑屏状态淡入画面。
farmerAnimation <anim> 短暂地将玩家贴图设为<anim>,其时长与贴图类型有关。在原版事件中仅用过1次。使用 showFrame farmer <sprite>两次(以设置新帧、再切换回来)更佳,因为这种方式允许使用pause n来控制时长。
farmerEat <object ID> 使玩家吃指定东西(这是真实发生的,因此相应食品效果会奏效)。
fork [req] <event ID> 结束当前命令脚本,并在满足[req]条件的情况下启动具有给定ID的不同脚本。(例如:在塞巴斯蒂安的6心事件的“死灵法师”脚本中,使用/fork choseWizard finalBossWizard。)[req]条件可以是邮件ID或对话回答ID;如果不指定,它会检查specialEventVariable1变量是否已设置(例如,通过question事件命令或%fork对话命令设置)。新脚本应具有与正常事件脚本相同的格式,但不包含三个必需的起始字段。
friendship <npc> <amount> 使与指定村民的游戏增长指定点数(250点=1心)。
globalFade [speed] [continue] 按指定速度淡出到黑屏(默认0.007)。若指定continue,则此事件在黑屏后继续发生;否则,事件会暂停,直到黑屏结束。当此命令结束时,黑屏效果会消失;为避免此问题,请使用viewport命令将照相机移除屏幕。
globalFadeToClear [speed] [continue] 按指定速度“fade to clear”(淡入?)。若指定了continue,则淡入时事件继续发生,否则暂停事件直到淡入结束。
glow <r> <g> <b> <hold> 让屏幕闪烁一次,在一秒钟内逐渐变化到指定的红色(r)、绿色(g)和蓝色(b)值,然后再逐渐恢复到原来的颜色。如果hold参数为true,则屏幕会渐变到该颜色并保持,直到使用stopGlowing函数为止。
grandpaCandles 点亮爷爷的蜡烛。
grandpaEvaluation 进行爷爷的评价。
grandpaEvaluation2 进行爷爷的重新评价。
halt 使所有人停下。
hideShadow <actor> <true/false> 隐藏指定演员的阴影。设为false则取消隐藏。
hospitaldeath 强制玩家损失金钱和物品,调起和哈维的对话框。与下文提到的end命令有所不同
ignoreCollisions <character ID> 使角色在此事件的剩余部分中忽略碰撞。例如,可能会穿墙。角色ID可以为farmer或村民名称,如Abigail
ignoreEventTileOffset 在农场事件中的地块位置会被赋予偏移,以匹配农舍位置。若此命令之后的事件不应基于农舍位置,则可使用ignoreEventTileOffset命令来禁用此偏移。此命令必须为第4个命令(紧跟着前3个初始化命令)才能奏效。
itemAboveHead [type] 在玩家头顶显示一个物品。[type]可以为"pan", "hero", "sculpture", "joja", "slimeEgg", "rod", "sword" 或 "ore"。若未指定物品,则玩家不会显示物品(?)。不支持其他物品。
jump <actor> [intensity] 使得指定村民跳起。intensity默认为8。
loadActors <layer> 从地图文件的某个图层加载此演员。
makeInvisible <x> <y> [x-dimension] [y-dimension] 暂时隐藏选中的物体或地形特征:在事件持续期间,对应的地块(或地块区域)将变得可通过。这在事件期间清理行走区域时非常有用,尤其是在农舍中。(示例:/makeInvisible 8 14将隐藏当前地图中坐标为8, 14的地块上的任何物体或地形特征。)可选的[x-dimension][y-dimension]参数允许您指定要清理的更大区域。(示例:在莉亚的14心事件中,/makeInvisible 68 36 13 7将清除左上角坐标为68, 36的13×7矩形地块区域。)已知问题:某些家具可能不会立即重新出现?
mail <letter ID> 使明天早上收到指定信件(参见Content\Data\mail.xnb以获取可用信件)。
message "<text>" 显示对话框(但没有说话者)。参见对话格式以了解<text>的格式。
minedeath 强制玩家损失金钱和物品,调起和哈维的对话框。与下文提到的end命令有所不同
money <amount> 增加/减少指定金额的钱。
move <actor> <x> <y> <facing> <continue> 让指定演员从当前位置( 沿一个轴)移动指定偏移量,并面向指定的朝向。如果要沿多个轴移动,必须指定多个move命令。默认情况下,在执行移动命令时事件会暂停,但如果将<continue>设置为true,则移动是异步的,并且会与其他事件命令同时运行。您还可以在一个事件命令中使用move同时移动多个人物 - 例如,/move Abigail 1 0 1 Sam 0 1 1 Sebastian 2 0 1/将让阿比盖尔、山姆和塞巴斯蒂安同时各自向指定方向移动。
pause <duration> 暂停游戏指定毫秒。
playMusic <track> 播放指定的音乐ID。若音乐为'samBand',则会根据玩家和山姆对话中选择的答复(76-79)来选择待播放的音乐。
playSound <sound> 从游戏声音库中播放指定ID的声音。
playerControl 使玩家重获控制权。
positionOffset <actor> <x> <y> 使指定演员的位置偏移指定像素。此效果瞬间发生,没有“走过去”的动画。
proceedPosition <actor> 在执行下一条命令前,等待指定演员停止移动。
question null "<question>#<answer1>#<answer2>" 显示一个对话框,其中包含一个问题,和几条可选的答复。当玩家选择一个答复时,事件脚本会继续执行,没有其他效果。
question fork<answer index> "<question>#<answer 0>#<answer 1>#..." 显示一个对话框,其中包含一个问题,和几条可选的答复。当玩家选择匹配fork<answer index>的答复时(例如fork0代表第一条答复),则设置specialEventVariable1 变量。经常后面跟着fork命令。示例:
.../question fork0 \"#answer0#answer1#answer3\"/fork eventidhere/..."
quickQuestion <question>#<answer1>#<answer2>#<answer3>(break)<answer1 script>(break)<answer2 script>(break)<answer3 script> 显示一个对话框,其中包含一个问题,和几条可选的答复。其中,<answer script>\\分隔的命令序列。当玩家选择一个答复,就会执行对应的<answer script>,然后事件继续。常用于村民的反应会依赖于选中的答复、但随后的事件与此答复无关的情形。
  • 注意:如果在事件块的开头立即使用quickQuestion(例如:“ExampleEvent”: “quickQuestion [事件其余部分]”),它将导致对话循环。在quickQuestion前添加另一个命令可以解决此问题(例如:“ExampleEvent”: “pause 1/quickQuestion [事件其余部分]”)。
removeItem <object ID> 移除玩家背包中的第一个物品。
removeObject <x> <y> 移除指定位置的道具。
removeQuest <quest ID> 在任务日志中删除指定任务。
removeSprite <x> <y> 移除指定位置的临时贴图。
removeTemporarySprites 移除所有临时贴图。
removeTile <x> <y> <layer> 移除指定图层的指定地块。
resetVariable specialEventVariable1设为false。
rustyKey 给玩家生锈的钥匙(以解锁下水道)。
screenFlash <alpha> 使屏幕瞬间闪烁白光。<alpha>01,用于调节亮度。
setRunning 使玩家奔跑。
shake <actor> <duration> 使指定村民颤抖指定毫秒数。
showFrame farmer <frame> <flip> 将玩家当前贴图相对Y轴翻转。在早于1.6的版本中,若玩家未面朝正确的方向,则会显得奇怪。<flip>取true或false。
showFrame <actor> <frame ID> 设置指定演员在其Content\Characters*.xnb贴图表中的当前帧。请注意,设置玩家的贴图仅会改变“一部分”贴图(有时是手臂,有时是手臂、腿和躯干但不包括头部等)。要旋转整张贴图,请在使用“showFrame”修改贴图之前,先使用“faceDirection farmer <0/1/2/3>”命令。帧ID从0开始。如果设置的是玩家的帧,则可以省略“farmer”,即showFrame farmer <frame ID>showFrame <frame ID>均可用。
showRivalFrame <frame> 将'rival'演员的贴图设为指定帧。
skippable 允许跳过此事件。
speak <character> "<text>" 显示指定村民的对话文本。参见对话格式
specificTemporarySprite <sprite> [other params] 显示指定的临时贴图。参数会根据贴图发生变化。除了little heart的临时贴图都是高度硬编码的,因此不易复用。
speed farmer <modifier> 向玩家添加指定速度修饰器<modifier>。此命令的效果将持续,因此欲变回正常速度须再用一次此命令。
speed <actor> <speed> 设置指定演员的速度(默认为3)。不适用于玩家。仅对该演员的下一个移动或动画有效。
splitSpeak <actor> "<text>" 对话,但依赖于先前选择的答复('~'为分隔符)。
startJittering 使玩家跳起。
stopAdvancedMoves 停止advancedMove造成的移动。
stopAnimation farmer 停止当前玩家动画。
stopAnimation <actor> [end frame] 停止当前指定村民的动画。不适用于玩家。
stopGlowing 使屏幕停止发光。
stopJittering 使玩家停止跳起。
stopMusic 停止当前音乐。
stopRunning 使玩家停止奔跑。
stopSwimming <actor> 使演员停止游泳。
swimming <actor> 使演员开始游泳。
switchEvent <event ID> 将当前事件(即事件代码)换为同一地点的另一事件。
taxvote 投票,是否统一3%的售卖税率(无效?)。
temporarySprite <x> <y> <row in texture> <animation length> <animation interval> <flipped> <layer depth> 根据指定参数创建临时贴图,其资源来自TileSheets/animations
temporaryAnimatedSprite <texturename> <source_x> <source_y> <source_width> <source_height> <interval> <length> <loops> <tile_x> <tile_y> <flicker> <flip> <depth> <fade> <scale> <scale_change> <rotation> <rotation_change> + 创建具有指定参数的临时贴图。也能接受下述的可选的具名参数(用空格分隔键和值):<color> <hold_last_frame> <ping_pong> <motion> <acceleration> <acceleration_change>
textAboveHead <actor> \"<text>\" 在指定村民的头部显示一个具有指定文本的气泡;参见对话格式
tutorialMenu 若未打开其他菜单,则打开教程菜单。
updateMinigame <event data> 向当前小游戏发送一个事件。
viewport move <x> <y> <duration> 使照相机在指定时间内朝指定方向运镜。时间单位为毫秒。示例:"viewport move 2 -1 5000" 使照相机每秒右移2像素、上移1像素,持续5秒。移动的总距离是基于帧率而非真实时间计算的,因此可能与实际情况有出入。
viewport <x> <y> [true [unfreeze]|clamp [true|unfreeze]] 立刻将照相机聚焦位置变为给定的 x y 地块位置。TODO: 解释其他参数。
waitForAllStationary 等到所有演员都停止移动了,再开始执行下一条命令。
waitForOtherPlayers 等待其他玩家(原版多人)。
warp <actor> <x> <y> 将指定演员传送到给定x, y坐标处。可用于将演员传送出屏幕。
weddingSprite <frame> 使指定帧<frame>识别玩家为'WeddingOutfits'。

如下命令已损坏或无用:

命令 描述
grabObject <object ID> 已损坏。 触发通用动画。会忽略物品ID,且不会添加相应物品。
end busIntro 本来应该用于播放新游戏开头的巴士过场动画,但后者可能在发布前被裁掉了。

注释

使用--来添加注释。可用于插入注释或在调试事件时暂时禁用某些命令。注释在下一处斜杠(/)处结束,因此注释不能包含斜杠。注释不能添加在前三个命令处。这意味着在字段2(角色初始化)后面才能开始添加注释。

示例:

"666/": "none/-1000 -1000/farmer 5 7 0/--you can add comments from here/skippable/viewport 5 7 10/--set viewport near door/pause 2000/end"

朝向

事件命令使用的面部朝向取如下值:

含义
0 朝上
1 朝右
2 朝下
3 朝左

过场动画

cutscene命令接受如下取值:

过场动画
AbigailGame 和阿比盖尔一起玩草原大王游戏。
addSecretSantaItem 冬日星盛宴送礼过场动画。
balloonChangeMap 切换到哈维10心事件中的“热气球中”地图。
balloonDepart 哈维10心事件中气球降落。
bandFork 根据山姆的2心事件,播放对应的8心事件场景。
boardGame 启动索拉里昂英雄传奇小游戏。
clearTempSprites 移除地图上所有临时贴图。
eggHuntWinner 复活节比赛结算动画。
governorTaste 夏威夷宴会百乐汤的动画。
greenTea 卡洛琳2心事件茶室动画。
haleyCows 海莉8心事件骑牛动画。
iceFishingWinner 冰雪节比赛结算动画。
iceFishingWinnerMP 显示离开冰雪节时的信息。
linusMoneyGone ???(似乎无用)
marucomet 玛鲁14心事件彗星动画。
plane 哈维8心事件飞机动画。
robot 玛鲁10心事件MarILDA起飞动画。

对话

参见模组:对话#格式

通用数值

表情

表情是显示在角色头上、用于表示情感或反应的动画图标气泡。表情图标存储在TileSheets\emotes素材文件中。

ID Character常量
4 emptyCanEmote
8 questionMarkEmote
12 angryEmote
16 exclamationEmote
20 heartEmote
24 sleepEmote
28 sadEmote
32 happyEmote
36 xEmote
40 pauseEmote
44 无用
48 无用
52 videoGameEmote
56 musicNoteEmote
60 blushEmote

另请参阅