维护提醒

BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。

全站通知:

模组:特别任务

来自星露谷物语维基
跳到导航 跳到搜索

目录

特别任务是游戏后期解锁的更加灵活和个性化的任务系统。可以在数据文件中指定特别任务的持续事件、可重复性、目标和奖励等。

此页面解释游戏如何存储和使用特别任务。这是面向模组开发者的高级指南。

原始数据

特别任务存储在 Content\Data\SpecialOrders.xnb,可以解包以编辑。此处是 1.5.1 版的原始数据:

格式

基本字段

每个特别任务都有一些基础字段,以及一些更复杂的字段(下文会提到)。

字段名称 描述
Name 特别任务的名称。需要加括号,表示对 Strings/SpecialOrderStrings 的引用。
Requester 委托人。可以为不可交友 NPC,例如齐先生或冈特。
Duration 截止期限。可以为下列取值之一:DayThreeDaysWeekTwoWeeksMonth
Repeatable 是否可以重复此任务。为 truefalse
RequiredTags 定义此任务出现的条件。可以在下列内容中挑选一至多个,以逗号分隔的列表列出:
  • season_<season>:必须出现在指定季节。
  • event_<ID>:房主玩家必须看过指定 ID 的事件。
  • mail_<ID>:房主玩家必须有特定的信件标识
  • rule_<name>:指定的规则正在生效(见下文)。
  • dropbox_<name>:指定的收货箱正在被其他任务或特别任务占用(见下文)。
  • island:已解锁姜岛。也会向请求单添加姜岛纹样。
  • knows_<NPCname>:若农夫之一认识指定 NPC,则返回 true。
  • NOT_IMPLEMENTED:总是返回 false。

此外,条件可以添加 ! 前缀表示反向筛选。例如 !dropbox_<name> 返回 true 仅当指定收货箱没有被占用。

OrderType 留空或 Qi
SpecialRule 一个逗号分隔的特殊规则列表,在此任务活跃期间会应用其中特别规则。
Text 要加括号,引用 Strings/SpecialOrderStrings 中的字符串。
ItemToRemoveOnEnd 从所有的库存和容器中移除指定物品 ID 的所有实例,以用于防止玩家提交早期获得的物品。
MailToRemoveOnEnd 设置指定信件为未读。

RandomizedElements

此字段如果非空,则为一系列代码块,每个代码块都表示一个随机元素。每个随机元素的格式如下所示:

字段名称 描述
Name 随机元素的名称,用于特别任务的数据和 Strings/SpecialOrderStrings. 中的特别任务字符串。
Values 一个代码块的列表,每个代码块都包含所需的标签以及一个用于设置随机元素的值(前提是标签都满足)。此处 RequiredTags 遵循主代码块中同名字段的格式(见上文)。

Value 是一个具有如下形式的文本字符串:

  • 若随机选取物品,则格式为 PICK_ITEM, <item name>, <item name>, <item name>...。物品首先检查 ID 是否匹配,若没有匹配,则检查内部名称是否匹配(内部名称为 Data/ObjectInformation 中的字段 0)。
  • 若随机选取通过上下文标签确定的物品组,则相应格式为:Text|[<string key>]|Tags|<context tags>
  • 若随机选取怪物,则格式为Target|<monster name>|LocalizedName|[<string key>]
  • 若仅仅将随机元素的值设为 Strings/SpecialOrderStrings 中的字符串,则格式非常简单:[<string key>].

可以使用如下方法调用随机元素,具体而言取决于其 Value 字段的格式:

  • 若随机元素仅仅是一个字符串,则使用圆括号包围随即元素名称就会返回对应的字符串。
  • {<element name>:Text}:若随机元素是物品,则返回其名称。
  • {<element name>:TextPlural}:若随机元素是物品,则返回其复数名称。
  • {<element name>:TextPluralCapitalized}:若随机元素是物品,则返回其复数大写形式。
  • {<element name>:Tags}:若随机元素是物品,则返回其标签。
  • {<element name>:Price}:若随机元素是物品,则返回其价格。
  • {<element name>:Target}:若随机元素是怪物,则返回其名称。

目标

每个任务都可以有任意数量的给定类型的目标。

目标类型 描述
Collect 玩家必须收集匹配 AcceptedContextTags 字段的物品。此物品不能是库存物品。这会应用于任何收集物品的方法(例如收获作物、杀怪、收获机器、烹饪菜肴等)。对于物体如何收集则没有限制;例如,一个请求绿宝石的特别任务同时接受来自矿井或宝石复制机产出的宝石。
Deliver 玩家必须将符合指定 AcceptedContextTags 字段的物品带给指定人物。这不会计入那个人的送礼上限。
Fish 相当于 Collect,但仅计入钓鱼获得的物品。
Gift 玩家必须将指定 AcceptedContextTags 字段的物品送给指定任务。这确实会计入目标任务的送礼上限。其参数可以为最低的礼物喜好程度。
JKScore 玩家必须达到指定的祝尼魔赛车分数。这会追踪特别任务活动期间达到的最高分。
ReachMineFloor 玩家必须在任务活跃期间到达或超过矿井骷髅洞穴(依赖于 SkullCave 字段)的指定层数。
Ship 玩家必须通过出货箱售出匹配指定 AcceptedContextTags 字段的物品。收集物品时该任务的目标进度会自动前进,而不是放在出货箱时。UseShipmentValue 字段(默认为 "false")可以设为 "true" 来要求售出指定价钱的物品,而非指定数量的物品。
Donate 玩家必须将匹配指定 AcceptedContextTags 字段的物品放入收获箱。
Slay 玩家必须在任务活跃期间击杀最小数量的怪物。

奖励

每个任务都有任意数量的给定类型的奖励

奖励 描述
Friendship 增加友谊值,默认为委托人增加 250 点友谊值(1心)。若指定此字段,则单位为友谊值,而非心。
"Type": "Friendship",
"Data": {
    "Amount": "Number of friendship points to add", // integer
    "TargetName": "Name of NPC to add them to" // string
}
Gems 奖励指定数量齐钻
"Type": "Gems",
"Data": {
    "Amount": "Number of Qi Gems to award" // integer
}
Mail 设置一个信件标识,后者可用于触发自定义事件、对话或其他更改。"MailReceived" 字段设置完成此特别任务获得的邮件标识。"NoLetter" 字段表示此信件标识是否对应真实信件,默认为 true(不对应)。"Host" 似乎是用于控制是否只有房主收到完成任务的贺信,但是由于 "send to everyone" 总是 true,似乎对游戏无实际影响(TODO:验证之)。"Host" 字段默认为 false。
"Type": "Mail",
"Data": {
    "MailReceived": "Name of mail flag", // string
    "NoLetter": "true/false", // boolean
    "Host": "true/false" // boolean
}
Money 奖励指定数量或依赖于捐赠品的金钱。最终奖励的金额为 Amount * Multiplier
"Type": "Money",
"Data": {
    "Amount": "Amount of money", // integer
    "Multiplier": "Multiplier on amount" // float
}
ResetEvent 从事件 ID 列表中移除此事件的 ID,这样玩家就能重复此事件。
"Type": "ResetEvent",
"Data": {
    "ResetEvents": "eventID1 eventID2 eventID3" // space-separated integers
}

上下文标签

AcceptedContextTags 字段指定了所需物品的上下文标签。此字段为一个字符串,格式如下:

语法 效果
! 加在某个上下文标签前面,用于反向筛选
, 分隔任意数量的所需的上下文标签,类似于“逻辑与”。例如 A, B, C 匹配同时具有这三个标签的物品。
/ 分隔任意数量的所需的上下文标签,类似于“逻辑或”。例如 A/B/C 匹配具备这三个标签中的至少一个的物品。

例如,!forage_item, category_vegetable/category_fruit, quality_gold 匹配既非蔬菜、亦非水果、更非采集品的金星品质物品。

特殊规则

特殊规则是指特别任务活跃期间用于实现特殊逻辑的唯一字符串ID

此游戏有一些预定义的规则:

规则ID 效果
DROP_QI_BEANS 玩家可以找到齐豆。用于齐瓜任务。
LEGENDARY_FAMILY 玩家可以找到传说鱼类二代。用于大家族任务。
MINE_HARD
SC_HARD
提升矿井或骷髅洞穴难度。
SC_NO_FOOD 玩家在骷髅洞穴中无法进食。
QI_BEANS
QI_COOKING
QI_DOUBLE
TODO: 记录其作用

特别任务也可以有任意规则ID,可以使用游戏状态查询PLAYER_SPECIAL_ORDER_RULE_ACTIVE)或 C# 代码(Game1.player.team.SpecialOrderRuleActive)查询之。

另请参阅