BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。
模组:农场数据
← 目录
此页面解释游戏如何存储和解析农场类型、地图和有关数据。这是面向模组开发者的高级指南。
阅读本文前,请参阅模组:编辑 XNB 文件以了解基本概念。
素材
通常类型数据
您可以通过编辑 Data/AdditionalFarms 素材自定义农场类型。
该素材文件内含一个数据模型的列表,其中每个数据模型具有如下字段:
字段 | 描述 |
---|---|
ID | 此农场类型的唯一字符串ID。 |
TooltipStringPath | 包含可翻译农场名称和描述的翻译键。例如,Strings/UI:Farm_Description 会从 Strings/UI 文件中的 Farm_Description 条目获取翻译文本。
翻译后的文本必须形如 " |
MapName | 农场的地图素材的素材名称,相对于 Maps 文件夹。例如 Farm_Pineapple 会加载 Maps/Farm_Pineapple。 |
IconTexture | (可选)22x20 像素图标贴图的素材名称,该贴图会显示在“创建”和“合作”的加入界面上。 |
WorldMapTexture | (可选)131x61 像素的农场在世界地图上的贴图的素材名称。 |
ModData | (可选)此农场类型的模组数据字段,可以在 C# 代码中用 Game1.GetFarmTypeModData(key) 访问。 |
农场地图
农场地图包含农场的大致外观和布局。模组:地图描述了创建地图的基本流程。
我们推荐您复制并编辑现有的地图以避免丢失信息等问题。地图必须添加到游戏文件中,且不可替换现有的地图。
农场地图属性
您可以通过设置地图属性来自定义农场行为。
当您测试地图属性更改时,最好能创建一个新存档,因为某些地图属性仅在创建存档时生效。设置地图属性是可选的操作,若没有属性,游戏会自动适用默认属性。
列举一些值得注意的地图属性:
- 传送和地图位置设置玩家到达农场时的位置(例如 BackwoodsEntry 代表从偏远森林进入农场的位置,WarpTotemEntry 代表使用传送图腾:农场或回程魔杖进入农场的位置)。也用于设置某些地点内容的默认位置(例如 MailboxLocation 代表默认的邮箱位置)。
- 农舍内部属性设置农舍的外观和内容(例如 FarmHouseFlooring 代表默认地板,FarmHouseStarterGift 代表新游戏的礼盒)。
- 钓鱼属性覆盖钓鱼和蟹笼行为。
- 植物、采集品和物品生成属性覆盖农场上的作物、采集、远古斑点等的行为。
地点数据
您可以酌情通过编辑 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
}
]
}
}
}
]
}