查看“模组:果树数据”的源代码
←
模组:果树数据
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
←[[模组:目录|目录]] {{翻译}} This page explains how the game stores and parses fruit tree data. This is an advanced guide for mod developers. ==Raw data== Fruit tree data is stored in <samp>Content\Data\FruitTrees.xnb</samp>, which can be [[Modding:Editing XNB files#unpacking|unpacked for editing]]. Here's the raw data as of {{version|1.6.8}} for reference: {{collapse|Data|content=<syntaxhighlight lang="json"> { "628": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Cherry_Name]", "Seasons": [ "Spring" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)638", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 0, "CustomFields": null }, "629": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Apricot_Name]", "Seasons": [ "Spring" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)634", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 1, "CustomFields": null }, "630": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Orange_Name]", "Seasons": [ "Summer" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)635", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 2, "CustomFields": null }, "631": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Peach_Name]", "Seasons": [ "Summer" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)636", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 3, "CustomFields": null }, "632": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Pomegranate_Name]", "Seasons": [ "Fall" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)637", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 4, "CustomFields": null }, "633": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Apple_Name]", "Seasons": [ "Fall" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)613", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 5, "CustomFields": null }, "69": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Banana_Name]", "Seasons": [ "Summer" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)91", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 7, "CustomFields": null }, "835": { "PlantableLocationRules": null, "DisplayName": "[LocalizedText Strings\\Objects:Mango_Name]", "Seasons": [ "Summer" ], "Fruit": [ { "Season": null, "Chance": 1.0, "Condition": null, "Id": "Default", "ItemId": "(O)834", "RandomItemId": null, "MaxItems": null, "MinStack": -1, "MaxStack": -1, "Quality": -1, "ObjectInternalName": null, "ObjectDisplayName": null, "ToolUpgradeLevel": -1, "IsRecipe": false, "StackModifiers": null, "StackModifierMode": "Stack", "QualityModifiers": null, "QualityModifierMode": "Stack", "ModData": null, "PerItemCondition": null } ], "Texture": "TileSheets\\fruitTrees", "TextureSpriteRow": 8, "CustomFields": null } } </syntaxhighlight>}} ====Data format==== The <samp>Data/FruitTrees</samp> asset consists of a string → model lookup, where... * The key is the unqualified item it for the sapling item in <samp>Data/Objects</samp>. * The value is a model with the fields listed below. {| class="wikitable" |- ! field ! effect |- | <samp>DisplayName</samp> | A [[Modding:Tokenizable strings|tokenizable string]] for the tree's display name. This should return a display name without 'tree' (like <samp>Cherry</samp> for a cherry tree). This is used in UI messages like "''Your <display name> tree wasn't able to grow last night''". |- | <samp>Seasons</samp> | The seasons in which the fruit tree bears fruit. This consists of an array of season names (any combination of <samp>spring</samp>, <samp>summer</samp>, <samp>fall</samp>, or <samp>winter</samp>). '''Note:''' the previous '<samp>island</samp>' season value is no longer valid. Using <samp>summer</samp> is equivalent to how it worked before (since we now have [[#Custom location contexts|per-location seasons]]). |- | <samp>Fruit</samp> | The fruit items to add to the tree each day while the tree is in-season. The first matching fruit (if any) is selected each day. This consists of a list of models with these fields: {| class="wikitable" |- ! field ! effect |- | ''common fields'' | See [[Modding:Item queries#Item spawn fields|item spawn fields]] for the generic item fields supported for fruit items. Notes: * If set to an [[Modding:Item queries|item query]] which returns multiple items, one of them will be selected at random. * Season conditions are ignored in non-seasonal locations like the [[greenhouse]] and [[Ginger Island]]. |- | <samp>Season</samp> | ''(Optional)'' If set, the group only applies if the tree's location is in this season. This is ignored in non-seasonal locations like the [[greenhouse]] and [[Ginger Island]]. |- | <samp>Chance</samp> | ''(Optional)'' The probability that this entry is selected, as a value between 0 (never drops) and 1 (always drops). Default 1 (100% chance). |} |- | <samp>Texture</samp> | The asset name for the texture under the game's <samp>Content</samp> folder. Use <samp>\</samp> (or <samp>\\</samp> in JSON) to separate name segments if needed. For example, vanilla fruit trees use <samp>TileSheets\fruitTrees</samp>. |- | <samp>TextureSpriteRow</samp> | The tree's row index in the <samp>Texture</samp> spritesheet (e.g. 0 for the first tree, 1 for the second tree, etc). |- | <samp>PlantableLocationRules</samp> | ''(Optional)'' The rules to decide which locations you can plant the sapling in, if applicable. The first matching rule is used. This can override location checks (e.g. crops being limited to the farm), but not built-in requirements like crops needing dirt. This consists of a list of models with these fields: {| class="wikitable" |- ! field ! effect |- | <samp>Id</samp> | The [[Modding:Common data field types#Unique string ID|unique string ID]] for this entry within the list. |- | <samp>Result</samp> | Indicates whether the sapling can be planted in a location if this entry is selected. The possible values are: * <samp>Default</samp>: the sapling can be planted if the location normally allows it. This can be used to stop processing further rules, and/or set a custom <samp>DeniedMessage</samp>. * <samp>Allow</samp>: the sapling can be planted here, regardless of whether the location normally allows it. * <samp>Deny</samp>: the sapling can't be planted here, regardless of whether the location normally allows it. |- | <samp>Condition</samp> | ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether this entry applies. Default true. |- | <samp>PlantedIn</samp> | ''(Optional)'' The planting context to apply this rule for. The possible values are <samp>Ground</samp> (planted directly in the ground), <samp>GardenPot</samp> (planted in a [[Garden Pot|garden pot]]), or <samp>Any</samp>. Default <samp>Any</samp>. Note that saplings can't be planted in garden pots. |- | <samp>DeniedMessage</samp> | ''(Optional)'' If this rule prevents planting the sapling, the tokenizable string to show to the player (or <samp>null</samp> to default to the normal behavior for the context). This also applies when the <samp>Result</samp> is <samp>Default</samp>, if that causes the planting to be denied. |} |- | <samp>CustomFields</samp> | The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry. |} For example, this content pack adds a custom fruit tree, including [[Modding:Items|custom items]] for the sapling and fruit: {{#tag:syntaxhighlight|<nowiki> { "Format": "</nowiki>{{Content Patcher version}}<nowiki>", "Changes": [ // add fruit + sapling items // note: sapling must have an edibility under 0 (usually -300) to be plantable { "Action": "EditData", "Target": "Data/Objects", "Entries": { "{{ModId}}_Pufferfruit": { "Name": "{{ModId}}_Pufferfruit", // best practice to match the ID, since it's sometimes used as an alternate ID "DisplayName": "Pufferfruit", "Description": "An example fruit item.", "Type": "Basic", "Category": -6, "Price": 1200, "Texture": "Mods/{{ModId}}/Objects", "SpriteIndex": 0 }, "{{ModId}}_Puffersapling": { "Name": "{{ModId}}_Puffersapling", "DisplayName": "Puffersapling", "Description": "An example tree sapling.", "Type": "Basic", "Category": -74, "Price": 1200, "Texture": "Mods/{{ModId}}/Objects", "SpriteIndex": 1 } } }, // add fruit tree { "Action": "EditData", "Target": "Data/FruitTrees", "Entries": { "{{ModId}}_Puffersapling": { "DisplayName": "Pufferfruit", "Seasons": [ "spring" ], "Fruit": [ { "Id": "E{{ModId}}_Pufferfruit", "ItemId": "{{ModId}}_Pufferfruit" } ], "Texture": "Mods/{{ModId}}/FruitTrees", "TextureSpriteRow": 0 } } }, // add images { "Action": "Load", "Target": "Mods/{{ModId}}/FruitTrees, Mods/{{ModId}}/Objects", "FromFile": "assets/{{TargetWithoutPath}}.png" // assets/FruitTrees.png, assets/Objects.png }, ] }</nowiki>|lang=javascript}} The fruit trees can then be added to the game by giving the player a sapling item in the usual ways (e.g. from [[#Custom shops|a shop]]). ====Fruit items==== For C# mods, the <samp>fruitsOnTree</samp> field (number of fruit on the tree) has been replaced by <samp>fruit</samp> (list of fruit items). ====Spawning fruit trees==== Custom trees can be added to the game in two ways: * Spawn them on [[Modding:Maps|map tiles]] when the location is created, using the new <samp>SpawnTree: fruit {{t|tree ID}} {{o|growth stage on location created}} {{o|growth stage on day-update regrowth}}</samp> tile property. This must be added on the <samp>Paths</samp> layer, which must also have tile index 34 from the <samp>paths</samp> tilesheet. * Or give the player a seed item in the usual ways (e.g. from [[#Custom shops|a shop]], [[Modding:Mail data|mail letter]], etc). [[Category:模组]] [[en:Modding:Fruit trees]]
该页面使用的模板:
Template:Collapse
(
查看源代码
)
Template:Content Patcher version
(
查看源代码
)
Template:O
(
查看源代码
)
Template:Quote
(
查看源代码
)
Template:Quote/styles.css
(
查看源代码
)
Template:T
(
查看源代码
)
Template:Version
(
查看源代码
)
Template:翻译
(
查看源代码
)
返回至
模组:果树数据
。
导航菜单
个人工具
创建账户
登录
名字空间
模组
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
未翻译的页面
帮助:编辑入门
随机页面
官方链接
官方网站
官方论坛
官方商品
Discord
Reddit
工具
链入页面
相关更改
上传文件
特殊页面
页面信息