维护提醒

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

全站通知:

模组:垃圾桶

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

目录

此页面解释如何编辑和创建垃圾桶。这是面向模组开发者的高级指南。

数据格式

您现在可以通过编辑新增的 Data/GarbageCans 素材来添加或编辑垃圾桶(见下面的例子)。

此素材文件内含一个包含如下字段的数据模型:

字段 效果
DefaultBaseChance 翻垃圾桶可能找到物品的概率,介于 0(从不)到 1(总是)之间的数值。若此未通过此随机检查,则仅能生成 IgnoreBaseChance 为 true 的物品。此字段可以被每个垃圾桶独立的 BaseChance 字段覆盖。默认为 0.2 。
BeforeAll
AfterAll
需要前置(BeforeAll)或后置(AfterAll)到所有垃圾桶的 GarbageCansItems 字段的物品。此字段中指定的物品和垃圾桶相应字段中的物品工作方式相同(即,服从相应垃圾桶的基础概率)。
GarbageCans 每个垃圾桶独立的数据。此字段为一个包含如下字段的“字符串 → 数据模型”搜索:
字段 效果
键名 此垃圾桶的唯一字符串ID
BaseChance (可选)若设置,则覆盖 DefaultBaseChance 根字段。默认为 DefaultBaseChance
Items (可选)玩家翻垃圾桶时试图生成的物品。按照 BeforeAll + Items + AfterAll 的顺序,匹配成功的第一个物品会被生成,后面的物品会被忽略。默认为空。

此字段为包含如下字段的数据模型所组成的列表:

字段 效果
通用字段 参见物品生成字段以了解受支持的通用字段。

若设为返回多个物品的物品查询,则会随机选取一个。

IgnoreBaseChance (可选)此物品在 BaseChance 随机检查未通过的情况下是否仍能生成。默认为 false。
IsMegaSuccess (可选)是否将此物品视为“巨大成功”。若是,则选中此物品时会播放特别的 crit 音效,并播放稍大的动画。默认为 false。
IsDoubleMegaSuccess (可选)是否将此物品视为“双重巨大成功”。若是,则选中此物品会播放爆炸音效和戏剧化的动画。默认为 false。
AddToInventoryDirectly (可选)是否直接将此物品添加到背包,若背包无空间,则打开一个菜单。若为 false,则此物品会被直接扔在垃圾桶旁边的地上。默认为 false。
CreateMultipleDebris (可选)是否将此物品分为多个物品组,每组堆叠数量为 1。若启用 AddToInventoryDirectly 则此字段无效。默认为 false。

若垃圾桶在 GarbageCans 下没有对应条目,则仅使用 BeforeAll+AfterAll 字段。

CustomFields 此条目的自定义字段

新建垃圾桶

您可以仅使用Content PatcherSMAPI 的内容接口来新建垃圾桶。例如,下面的内容包添加了一个 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 PatcherSMAPI 的内容接口来编辑已有的垃圾桶。例如,下面的内容包向餐吧的垃圾桶添加了河豚,并将其前置于当日菜肴。

注意此示例使用 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