维护提醒

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

全站通知:

模组:农场数据

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

目录

此页面解释游戏如何存储和解析农场类型、地图和有关数据。这是面向模组开发者的高级指南。

阅读本文前,请参阅模组:编辑 XNB 文件以了解基本概念。

素材

通常类型数据

您可以通过编辑 Data/AdditionalFarms 素材自定义农场类型。

该素材文件内含一个数据模型的列表,其中每个数据模型具有如下字段:

字段 描述
ID 此农场类型的唯一字符串ID
TooltipStringPath 包含可翻译农场名称和描述的翻译键。例如,Strings/UI:Farm_Description 会从 Strings/UI 文件中的 Farm_Description 条目获取翻译文本。

翻译后的文本必须形如 "<name>_<description>",例如 "Pineapple Farm_A farm shaped like a pineapple"。

MapName 农场的地图素材素材名称,相对于 Maps 文件夹。例如 Farm_Pineapple 会加载 Maps/Farm_Pineapple
IconTexture (可选)22x20 像素图标贴图的素材名称,该贴图会显示在“创建”和“合作”的加入界面上。
WorldMapTexture (可选)131x61 像素的农场在世界地图上的贴图的素材名称
ModData (可选)此农场类型的模组数据字段,可以在 C# 代码中用 Game1.GetFarmTypeModData(key) 访问。

农场地图

农场地图包含农场的大致外观和布局。模组:地图描述了创建地图的基本流程。

我们推荐您复制并编辑现有的地图以避免丢失信息等问题。地图必须添加到游戏文件中,且不可替换现有的地图。

农场地图属性

您可以通过设置地图属性来自定义农场行为。

当您测试地图属性更改时,最好能创建一个新存档,因为某些地图属性仅在创建存档时生效。设置地图属性是可选的操作,若没有属性,游戏会自动适用默认属性。

列举一些值得注意的地图属性:

地点数据

您可以酌情通过编辑 Data/Locations 来覆盖额外的农场地点行为。每个农场类型都有自己的对应条目,其键名形如 Farm_<farm type ID>。若忽略,则默认为标准农场的地点数据。

这可以用于覆盖采集、钓鱼、蟹笼收获、远古斑点等。

对于自定义农场,某些字段必须设为特定值以保证正常的行为:

字段 描述
DisplayName 农场名字的模板字符串。应当至少包含 FarmName 标记以确保显示农场名称。标准值为 [LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]
CreateOnLoad 必须为 null 或忽略。其他的取值会创建重复的地点。
CanPlantHere 应当为 true 或直接忽略。若设为 false 则农场无法生长作物。

示例

下面的Content Patcher内容包添加了一个具有自定义地点数据的农场类型:

{
    "Changes": [
        // add farm type
        {
            "Action": "EditData",
            "Target": "Data/AdditionalFarms",
            "Entries": {
                "{{ModId}}_PineappleFarm": { // for technical reasons, you need to specify the ID here *and* in the 'ID' field
                    "ID": "{{ModId}}_PineappleFarm",
                    "TooltipStringPath": "Strings/UI:{{ModId}}",
                    "MapName": "{{ModId}}",
                    "IconTexture": "Mods/{{ModId}}/Icon",
                    "WorldMapTexture": "Mods/{{ModId}}/WorldMap"
                }
            }
        },

        // add farm name + description
        {
            "Action": "EditData",
            "Target": "Strings/UI",
            "Entries": {
                "{{ModId}}": "Pineapple Farm_A farm shaped like a pineapple!" // tip: use {{i18n}} to translate it
            }
        },

        // load map
        {
            "Action": "Load",
            "Target": "Maps/{{ModId}}",
            "FromFile": "assets/map.tmx"
        },

        // load icon
        {
            "Action": "Load",
            "Target": "Mods/{{ModId}}/Icon, Mods/{{ModId}}/WorldMap",
            "FromFile": "assets/{{TargetWithoutPath}}.png"
        },

        // custom location data
        {
            "Action": "EditData",
            "Target": "Data/Locations",
            "Entries": {
                "Farm_{{ModId}}_PineappleFarm": {
                    "DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]",
                    "CanPlantHere": true,
                    "DefaultArrivalTile": {"X": 64, "Y": 15},
                    "MinDailyWeeds": 5,
                    "MaxDailyWeeds": 11,
                    "ArtifactSpots": [
                        // default artifact data
                        {
                            "Id": "Coal",
                            "ItemId": "(O)382",
                            "Chance": 0.5,
                            "MaxStack": 3
                        },
                        {
                            "Id": "MixedSeeds",
                            "ItemId": "(O)770",
                            "Chance": 0.1,
                            "MaxStack": 3
                        },
                        {
                            "Id": "Stone",
                            "ItemId": "(O)390",
                            "Chance": 0.25,
                            "MaxStack": 3
                        },
                        // custom artifacts
                        {
                            "Id": "SpringSeeds",
                            "ItemId": "(O)495",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Spring",
                            "Precedence": 1
                        },
                        {
                            "Id": "SummerSeeds",
                            "ItemId": "(O)496",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Summer",
                            "Precedence": 1
                        },
                        {
                            "Id": "FallSeeds",
                            "ItemId": "(O)497",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Fall",
                            "Precedence": 1
                        },
                        {
                            "Id": "WinterSeeds",
                            "ItemId": "(O)498",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Winter",
                            "Precedence": 1
                        }
                    ]
                }
            }
        }
    ]
}