BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。
模组:垃圾桶
← 目录
此页面解释如何编辑和创建垃圾桶。这是面向模组开发者的高级指南。
数据格式
您现在可以通过编辑新增的 Data/GarbageCans 素材来添加或编辑垃圾桶(见下面的例子)。
此素材文件内含一个包含如下字段的数据模型:
字段 | 效果 | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DefaultBaseChance | 翻垃圾桶可能找到物品的概率,介于 0(从不)到 1(总是)之间的数值。若此未通过此随机检查,则仅能生成 IgnoreBaseChance 为 true 的物品。此字段可以被每个垃圾桶独立的 BaseChance 字段覆盖。默认为 0.2 。 | ||||||||||||||||||||||
BeforeAll AfterAll |
需要前置(BeforeAll)或后置(AfterAll)到所有垃圾桶的 GarbageCans → Items 字段的物品。此字段中指定的物品和垃圾桶相应字段中的物品工作方式相同(即,服从相应垃圾桶的基础概率)。 | ||||||||||||||||||||||
GarbageCans | 每个垃圾桶独立的数据。此字段为一个包含如下字段的“字符串 → 数据模型”搜索:
若垃圾桶在 GarbageCans 下没有对应条目,则仅使用 BeforeAll+AfterAll 字段。 | ||||||||||||||||||||||
CustomFields | 此条目的自定义字段。 |
新建垃圾桶
您可以仅使用Content Patcher或SMAPI 的内容接口来新建垃圾桶。例如,下面的内容包添加了一个 ID 为 Example.ModId_Carpenter 的垃圾桶:
{
"Format": "2.7.0",
"Changes": [
{
"Action": "EditData",
"Target": "Data/GarbageCans",
"TargetField": [ "GarbageCans" ],
"Entries": {
"{{ModId}}_Carpenter": {
"Items": [
// 25% chance of pufferfish
{
"ID": "{{ModId}}_Pufferfish",
"Condition": "RANDOM 0.25",
"ItemId": "(O)128"
},
// else guaranteed random House Plant item
{
"ID": "{{ModId}}_RandomHousePlant",
"ItemID": "RANDOM_ITEMS (F) 1376 1390"
}
]
}
}
}
]
}
然后,您可以在某个地块上添加 Action: Garbage Example.ModId_Carpenter
地块属性来将其标记为使用此数据的垃圾桶。
编辑已有垃圾桶示例
您可以仅使用Content Patcher或SMAPI 的内容接口来编辑已有的垃圾桶。例如,下面的内容包向餐吧的垃圾桶添加了河豚,并将其前置于当日菜肴。
注意此示例使用 TargetField 来“移步至”餐吧的物品列表,然后操作作为列表项的物品。指定不在列表中的 ID 会添加一个新列表项,就像编辑常规列表素材一样。
{
"Format": "2.7.0",
"Changes": [
{
"Action": "EditData",
"Target": "Data/GarbageCans",
"TargetField": [ "GarbageCans", "Saloon", "Items" ],
"Entries": {
// 25% chance of pufferfish
"{{ModId}}_Pufferfish":{
"ID": "{{ModId}}_Pufferfish",
"Condition": "RANDOM 0.25",
"ItemId": "(O)128"
}
},
"MoveEntries": [
{ "ID": "{{ModId}}_Pufferfish", "BeforeId": "Base_DishOfTheDay" }
]
}
]
}
针对C#模组的更改
之前垃圾桶被 Town.garbageChecked 追踪,后者是一个布尔字段的数组。此方式在星露谷物语 1.6 中无法工作,因为我们将不再局限于鹈鹕镇地图的垃圾桶。此字段已经被替换为 Game1.netWorldState.Value.CheckedGarbage,它是一个垃圾桶 ID 的哈希集合。
若希望迁移代码:
动作 | 1.5.6 | 1.6 |
---|---|---|
检查垃圾桶是否被翻过 | Town town = (Town)Game1.getLocationFromName("Town");
if (town.garbageChecked[5])
...
|
if (Game1.netWorldState.Value.CheckedGarbage.Contains("Saloon"))
...
|
标记一个垃圾桶为可翻找 | Town town = (Town)Game1.getLocationFromName("Town");
town.garbageChecked[5] = true;
|
Game1.netWorldState.Value.CheckedGarbage.Add("Saloon");
|
下表用于迁移旧版垃圾桶 ID:
位置 | ID 1.5.6 | ID 1.6 |
---|---|---|
乔迪和肯特房子边上 | 0
|
JodiAndKent
|
海莉和艾米丽房子边上 | 1
|
EmilyAndHaley
|
刘易斯房子边上 | 2
|
Mayor
|
博物馆边上 | 3
|
Museum
|
克林特的铁匠铺边上 | 4
|
Blacksmith
|
星之果实餐吧边上 | 5
|
Saloon
|
艾芙琳和乔治房子边上 | 6
|
Evelyn
|
Joja超市边上 | 7
|
JojaMart
|