查看“模组:物品数据”的源代码
←
模组:物品数据
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
← [[模组:目录|目录]] 本页面解释游戏如何存储和解析物品数据。这是一个面向模组开发者的高级指南。 '''特别注意:本页面暂且严格区分物品(item)与物体(object)这两个术语。''' 其中[[#物体|物体]]特指[[#物品类型|物品类型]]为Object(O)的物品,它们是物品的真子集。 ==简介== ===综述=== 对于星露谷物语1.6而言,游戏中的物品有一些重要的特性: # 每个物品都有一个字符串ID(<samp>ItemId</samp>,物品ID)和一个全局唯一的字符串ID (<samp>QualifiedItemId</samp>,限定性物品ID)。其中,<samp>QualifiedItemId</samp>是通过向<samp>ItemId</samp>添加物品类型标识符前缀而自动生成的。<p>由于历史原因,原版物品的<samp>ItemId</samp>可能并不唯一。例如,河豚(物体128)和蘑菇箱<ref name="mushroom box" />(大型打造品128)有相同的物品ID,即<samp>ItemId: 128</samp>。但可以通过<samp>QualifiedItemId</samp>区分两者,前者为<samp>(O)128</samp>,后者为<samp>(BC)128</samp>。 # 每个物品类型在游戏中都有一个''物品数据定义''以告诉游戏如何处理它。[[#关于C#模组|C#模组可以添加或编辑定义]]。每个定义都有一个唯一的前缀,用在限定性物品ID中。原版的类型包括大型打造品(<samp>(BC)</samp>),靴子(<samp>(B)</samp>),农舍地板(<samp>(FL)</samp>),家具(<samp>(F)</samp>),帽子(<samp>(H)</samp>),物体(<samp>(O)</samp>),裤子(<samp>(P)</samp>),上衣(<samp>(S)</samp>),工具(<samp>(T)</samp>),墙纸(<samp>(WP)</samp>)和武器(<samp>(W)</samp>)。</li> # 自定义物品现在可以提供它们自己的物品贴图,后者在物品数据素材的一个新字段中指定(见下文)。物品的<samp>ParentSheetIndex</samp>字段是相应贴图的索引。 换而言之,物品的四个重要的字段是: {| class="wikitable" |- ! 名称 ! 类型 ! 描述 |- | <samp>ItemId</samp> | <samp>string</samp> | 此物品的[[模组:常见的数据字段#唯一字符串ID|唯一字符串ID]],应当在全局唯一(为了向前兼容,原版游戏的某些物品的ID未必唯一)。例如,<samp>128</samp>(原版物品)或 <samp>Example.ModId_Watermelon</samp>(自定义物品)。 |- | <samp>QualifiedItemId</samp> | <samp>string</samp> | 全局唯一的物品键名,类似于原版物品的<samp>(O)128</samp>或自定义的<samp>(O)Example.ModId_Watermelon</samp>。此字段由<samp>TypeDefinitionId</samp>和<samp>ItemId</samp>字段自动生成。 |- | <samp>ParentSheetIndex</samp> | <samp>int</samp> | 物品贴图集中的贴图索引。 |- | <samp>TypeDefinitionId</samp> | <samp>string</samp> | 定义此物品的数据定义的ID,例如<samp>(O)</samp>代表物品(object)。可在此字段使用 <samp>ItemRegistry.type_*</samp>常量: <syntaxhighlight lang="c#"> if (item.TypeDefinitionId == ItemRegistry.type_object) ... </syntaxhighlight> |} ===物品引用=== 现在游戏代码中使用<samp>ItemId</samp>引用物品,取代了<samp>ParentSheetIndex</samp>。对于原版中已存在的物品而言,<samp>ItemId</samp>和其索引相同,因此此改动并不影响大部分的数据素材。例如,此处展示了<samp>Data/NPCGiftTastes</samp>中的一个条目,它定义了普遍受欢迎的礼物列表,包括一系列原版ID,以及一个自定义物品ID: <syntaxhighlight lang="json"> "Universal_Like": "-2 -7 -26 -75 -80 72 395 613 634 635 636 637 638 724 459 Example.ModID_watermelon" </syntaxhighlight> 除非另有说明,否则非限定性物品ID会产出[[模组:物品数据|物体]]。某些素材允许您通过指定<samp>QualifiedItemId</samp>的值来重写此设定。例如,您可以添加 <code>(O)128</code>到礼物喜好列表来强制添加一个物体。此处是数据素材及其支持的物品ID格式: {| class="wikitable" |- ! 数据素材 ! 物品ID格式 |- | [[模组:配方数据|<samp>Data/CraftingRecipes</samp><br /><samp>Data/CookingRecipes</samp>]] |   * 原料: 两种ID均支持 * 产品:字段2须为非限定ID,字段3为<samp>true</samp>(大型打造品)或 <samp>false</samp>(物体)。 |- | [[模组:果树数据|<samp>Data/FruitTrees</samp>]] |   * 水果:两种ID均支持 * 树苗:仅支持非限定ID。 |- | [[模组:礼物喜好数据|<samp>Data/NPCGiftTastes</samp>]] | 两种ID均支持,但只有<samp>(O)</samp>类型的物品可用于送礼。 |} ===物品标识=== 现在游戏代码中使用<samp>ItemId</samp>作为物品标识,取代了<samp>ParentSheetIndex</samp>。对于原版中已存在的物品而言,<samp>ItemId</samp>和其索引相同,因此此改动并不影响大部分的数据素材。例如,此处展示了<samp>Data/NPCGiftTastes</samp>中的一个条目,它定义了普遍受欢迎的礼物列表,包括一系列原版ID,以及一个自定义物品ID: <syntaxhighlight lang="json"> "Universal_Like": "-2 -7 -26 -75 -80 72 395 613 634 635 636 637 638 724 459 Example.ModID_watermelon" </syntaxhighlight> 除非另有说明,否则非限定性物品ID会产出[[模组:物品数据|物体]]。某些素材允许您通过指定<samp>QualifiedItemId</samp>的值来重写此设定。例如,您可以添加 <code>(O)128</code>到礼物喜好列表来强制添加一个物体。此处是数据素材及其支持的物品ID格式: {| class="wikitable" |- ! 数据素材 ! 物品ID格式 |- | [[模组:配方数据|<samp>Data/CraftingRecipes</samp><br /><samp>Data/CookingRecipes</samp>]] |   * 原料: 两种ID均支持 * 产品:字段2须为非限定ID,字段3为<samp>true</samp>(大型打造品)或 <samp>false</samp>(物体)。 |- | [[模组:果树数据|<samp>Data/FruitTrees</samp>]] |   * 水果:两种ID均支持 * 树苗:仅支持非限定ID。 |- | [[模组:礼物喜好数据|<samp>Data/NPCGiftTastes</samp>]] | 两种ID均支持,但只有<samp>(O)</samp>类型的物品可用于送礼。 |} ===物品类型=== 以下是自定义物品能够添加/编辑的物品类型: {| class="wikitable" |- ! 物品类型 ! 类型标识符 ! 数据资源 |- | [[模组:物品数据#大型打造品|大型打造品]] | <samp>(BC)</samp> | <samp>Data/BigCraftables</samp><br /><small>每个物品可以在<samp>Texture</samp>字段设置一个自定义贴图名称,以及可以在<samp>SpriteIndex</samp>字段设置贴图索引。默认贴图为<samp>TileSheets/Craftables</samp>。</small> |- | [[模组:物品数据#靴子|靴子]] | <samp>(B)</samp> | <samp>Data/Boots</samp><br /><small>每个物品可以在字段9(物品)和字段7(靴子颜色)中设置自定义贴图名称,以及可以在字段8(物品)和字段5(靴子颜色)设置贴图索引。默认贴图为<samp>Maps/springobjects</samp>(物品)和 <samp>Characters/Farmer/shoeColors</samp>(靴子颜色)。</small> |- | [[模组:农作物数据|作物]] | <small>''技术上而言并非物品类型''</small> | <samp>Data/Crops</samp><br /><small>每种作物可以设置自定义贴图名称和贴图索引。默认贴图是<samp>TileSheets/crops</samp>。 </small> |- | [[模组:鱼类数据|鱼缸鱼类]] | <small>''技术上而言并非物品类型''</small> | <samp>Data/AquariumFish</samp><br /><small>每种鱼可以在字段6设置自定义鱼缸贴图,以及在字段0设置贴图索引。默认贴图为<samp>LooseSprites/AquariumFish</samp>。</small> |- | [[模组:物品数据#家具|家具]] | <samp>(F)</samp> | <samp>Data/Furniture</samp><br /><small>每个物品都可以在字段9设置自定义贴图名称,以及在字段8设置贴图索引。默认贴图为<samp>TileSheets/furniture</samp>。 </small> |- | [[模组:果树数据|果树]] | <small>''技术上而言并非物品类型''</small> | <samp>Data/FruitTrees</samp><br /><small>每种果树可以设置自定义贴图名称和贴图索引。默认贴图为E<samp>TileSheets/fruitTrees</samp>。</small> |- | [[模组:物品数据#帽子|帽子]] | <samp>(H)</samp> | <samp>Data/Hats</samp><br /><small>每种物品可以在字段7设置自定义贴图名称,以及在字段6设置贴图索引。默认贴图为<samp>Characters/Farmer/hats</samp>。</small> |- | [[模组:物品数据#物体|物体]] | <samp>(O)</samp> | <samp>Data/Objects</samp><br /><small>每个物品可以在<samp>Texture</samp>字段设置自定义贴图名称,以及在<samp>SpriteIndex</samp>字段设置贴图索引。默认贴图为 <samp>Maps/springobjects</samp>。</small> |- | [[模组:物品数据#裤子|裤子]] | <samp>(P)</samp> | <samp>Data/pantsData</samp><br /><small>每个物品可以在<samp>Texture</samp>字段设置自定义贴图名称,以及在<samp>SpriteIndex</samp>字段设置贴图索引。 默认贴图为<samp>Characters/Farmer/pants</samp>。</small> |- | [[模组:物品数据#上衣|上衣]] | <samp>(S)</samp> | <samp>Data/shirtData</samp><br /><small>每个物品可以在<samp>Texture</samp>字段设置自定义贴图名称,以及在<samp>SpriteIndex</samp>字段设置贴图索引。 默认贴图为<samp>Characters/Farmer/shirts</samp>。</small> <small>上衣贴图的宽度必须严格为256像素,分为两半:左半边为上衣贴图,右半边为染色这招。余下空间如有需要可留空。</small> <pre> 贴图 染色遮罩 /-----------\ /-----------\ ┌────────────────────────────────┐ │ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐ │ │ │ 0 ││ 1 ││ 2 ││ a ││ b ││ c │ │ │ └───┘└───┘└───┘└───┘└───┘└───┘ │ │ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐ │ │ │ 3 ││ 4 ││ 5 ││ d ││ e ││ f │ │ │ └───┘└───┘└───┘└───┘└───┘└───┘ │ └────────────────────────────────┘ </pre> |- | [[#工具|工具]] | <samp>(T)</samp> | <samp>Data/Tools</samp><br /><small>每个物品可以在<samp>Texture</samp>字段设置自定义贴图名称,以及在<samp>SpriteIndex</samp>字段设置贴图索引。原版工具使用<samp>TileSheets/Tools</samp>贴图。</small> |- | 墙纸&地板 | <samp>(WP)</samp> 和 <samp>(FL)</samp> | <samp>Data/AdditionalWallpaperFlooring</samp><br /><small>参见 [[:en:Modding:Migrate to Stardew Valley 1.5.5#In the furniture catalogue|格式文档]].</small> |- | [[模组:物品数据#武器|武器]] | <samp>(W)</samp> | <samp>Data/Weapons</samp><br /> |} 当游戏尝试解析非限定性物品ID如<samp>128</samp>时,会按如下顺序检索各物品类型:物品、大型打造品、家具、武器、靴子、帽子、裤子、上衣、工具、墙纸、地板。 对于每个物品类型,<samp>Content</samp>文件夹中都有对应的两个文件(可以 [[模组:编辑 XNB 文件#解包游戏文件|解包以编辑]]): * 一个''数据素材''文件,存储物品的文本数据(名称、描述、价格...); * 一个''贴图集''文件,存储物品在游戏中的图标。 每个物品都有一个<samp>ParentSheetIndex</samp>字段,指示其在此类物品贴图集中的位置。该索引从左到右、从上到下、从0开始计数。例如,帽子#0是<samp>Characters/Farmer/hats</samp>中的第一个贴图。而<samp>ParentSheetIndex</samp>也常用于鉴别物品;但由于贴图集索引并不是唯一的(例如帽子#10和物体#10难以区分),代码需要检查物品类型,就像<code>item is Weapon weapon && weapon.ParentSheetIndex == 4</code>。 ===获取物品列表=== [[模组:使用指南/入门|安装SMAPI]]后,您可以[[模组:控制台命令#控制台命令|运行<samp>list_items</samp>控制台命令]]以浏览/搜索物品及其ID。 ===自定义物品=== 您可以使用[[模组:Content Patcher|Content Patcher]]或[[模组:制作指南/APIs/Content|SMAPI的Content接口]]来定义原版中大部分“物体”类型的自定义物品。 例如,此内容包添加了一个自定义的河豚鸡(Pufferchick)物品,包括自定义图形、自定义礼物喜好、产出它的自定义作物。注意在其他数据素材中(例如<samp>Data/Crops</samp>或<samp>Data/NPCGiftTastes</samp>),物品引用须使用物品ID。 {{#tag:syntaxhighlight|<nowiki> { "Format": "</nowiki>{{Content Patcher version}}<nowiki>", "Changes": [ // 添加物品 { "Action": "EditData", "Target": "Data/Objects", "Entries": { "{{ModId}}_Pufferchick": { "Name": "{{ModId}}_Pufferchick", // best practice to match the ID, since it's sometimes used as an alternate ID (e.g. in Data/CraftingRecipes) "Displayname": "Pufferchick", "Description": "An example object.", "Type": "Seeds", "Category": -74, "Price": 1200, "Texture": "Mods/{{ModId}}/Objects", "SpriteIndex": 0 } } }, // 添加礼物喜好 { "Action": "EditData", "Target": "Data/NPCGiftTastes", "TextOperations": [ { "Operation": "Append", "Target": ["Entries", "Universal_Love"], "Value": "{{ModId}}_Pufferchick", "Delimiter": " " // 若已存在值,则添加空格 } ] }, // 添加作物(Pufferchick同时为种子和产物,就像咖啡豆) { "Action": "EditData", "Target": "Data/Crops", "Entries": { "{{ModId}}_Pufferchick": { "Seasons": [ "spring", "summer", "fall" ], "DaysInPhase": [ 1, 1, 1, 1, 1 ], "HarvestItemId": "{{ModId}}_Pufferchick", "Texture": "Mods/{{ModId}}/Crops", "SpriteIndex": 0 } } }, // 添加物品+作物图片 { "Action": "Load", "Target": "Mods/{{ModId}}/Crops, Mods/{{ModId}}/Objects", "FromFile": "assets/{{TargetWithoutPath}}.png" // assets/Crops.png, assets/Objects.png } ] }</nowiki>|lang=javascript}} 大多数物品数据素材的工作方式就像<samp>Data/Objects</samp>。另请参阅关于[[模组:果树数据|自定义果树]]、[[模组:物品数据#工具|自定义工具]]和[[模组:物品数据#武器|近战武器]]的详细信息。 ===错误物品=== 在早于1.6的版本中,没有数据的物品(例如当您移除了对应的模组时)会导致诸如不可见物品、错误、崩溃的问题。这种问题在一定程度上被捆绑的Error Handler模组减轻。 星露谷物语1.6添加了处理这类物品的完整机制。此类物品会在物品栏UI和游戏中显示为<samp>🛇</samp>贴图,名称为Error Item,并附有指示物品ID的描述,以便于问题修复。 ===关于C#模组=== <dl style="margin-left: 2em;"> <dt>比较物品</dt> <dd> 因为<samp>Item.QualifiedItemId</samp>全局唯一,因此可用于比较物品。例如: {| class="wikitable" |- ! 旧代码 ! 新代码 |- |- | <samp>item.ParentSheetIndex == 128</samp> | <samp>item.QualifiedItemId == "(O)128"</samp> |- | <samp>IsNormalObjectAtParentSheetIndex(item, 128)</samp> | <samp>item.QualifiedItemId == "(O)128"</samp> |- | <samp>!item.bigCraftable && item.ParentSheetIndex == 128</samp> | <samp>item.QualifiedItemId == "(O)128"</samp> |- | <samp>item is Boots && item.ParentSheetIndex == 505</samp> | <samp>item.QualifiedItemId == "(B)505"</samp> |} 亦可使用<samp>ItemRegistry.QualifyItemId</samp>将任何物品ID转换为限定性物品ID(若可行),及使用<samp>ItemRegistry.HasItemId</samp>以检查某个物品是否拥有限定性/非限定性物品ID。 注意,有特定风味的物品没有单独的ID。例如,“蓝莓果酒”和“果酒”的ID都是<samp>(O)348</samp>。此特性影响果酱、果汁、腌菜和果酒。在这种情形下,您仍应当比较它们有区别的字段而不是ID,例如<samp>preservedParentSheetIndex</samp>字段(该字段实际上包含了它们原材料的<samp>ItemId</samp>,而不是它们的<samp>ParentSheetIndex</samp>)。 </dd> <dt>构造物品</dt> <dd>构造物品时,请指定其<samp>ItemId</samp>(''而不是''<samp>QualifiedItemId</samp>)。例如: <syntaxhighlight lang="c#"> new Object("128", 1); // 原版物品 new Object("Example.ModId_Watermelon", 1); // 自定义物品 </syntaxhighlight> 您可以使用如下实用方法来从<samp>QualifiedItemId</samp>构造物品: <syntaxhighlight lang="c#"> Item item = ItemRegistry.Create("(B)505"); // 橡胶靴 </syntaxhighlight> </dd> <dt>自定义物品类型</dt> <dd> 您可以实现<samp>IItemDataDefinition</samp>以自定义物品类型,并调用<samp>ItemRegistry.AddTypeDefinition</samp>以注册之。这提供了游戏所需的处理物品类型的一切逻辑:何处获取物品数据、如何绘制物品等等。 '''自定义物品类型是高度专业化的''',且对于多人游戏的兼容性未知。大部分模组应当添加属于已有类型的物品,而非新建类型。</dd> <dt>全新<samp>Is*</samp>方法</dt> <dd>1.6添加了一些<samp>StardewValley.Object</samp>方法,以使用通用方式处理自定义物品(并允许模组修改逻辑): {| class="wikitable" |- ! 方法 ! 效果 |- | <samp>object.IsBar()</samp> | 物品是否为[[铜锭]]、[[铁锭]]、[[金锭]]、[[铱锭]]其中之一。 |- | <samp>object.IsBreakableStone()</samp> | 物品是否为可以被十字镐打破的碎石类物品。 |- | <samp>object.IsFence()</samp> | 物品是否为[[打造#围栏|围栏]]。 |- | <samp>object.IsFruitTreeSapling()</samp> | 物品是否为[[果树]]树苗。此命令会检查<samp>Data\fruitTrees</samp>键,因此对自定义果树亦有效。 |- | <samp>object.IsHeldOverHead()</samp> | 当物品在工具栏时,是否显示玩家手持该物品。默认为true(家具除外)。 |- | <samp>object.IsIncubator()</samp> | 物品放在建筑里时可否用于孵化[[动物|农场动物]]的蛋。 |- | <samp>object.IsTapper()</samp> | 物品是否为[[树液采集器]]或[[重型树液采集器]]。 |- | <samp>object.IsTeaSapling()</samp> | 物品是否为[[茶苗]]。 |- | <samp>object.IsTwig()</samp> | 物品是否为树枝(杂物)。 |- | <samp>object.IsWeeds()</samp> | 物品是否为杂草。 |} </dd> <dt>使用物品元数据</dt> <dd> 1.6添加了一个<samp>ItemRegistry</samp> API以便使用全新的物品系统。提供了如下方法: {| class="wikitable" |- ! 方法 ! 效果 |- | <samp>ItemRegistry.Create</samp> | 从物品ID(限定性或非限定性)创建物品。若ID无法匹配已知的物品,则可选参数<samp>allowNull</samp>规定了此时返回空值还是返回[[错误物品]]。例如: <syntaxhighlight lang="c#"> Item item = ItemRegistry.Create("(B)505"); // 橡胶靴 </syntaxhighlight> 如有需要,您亦可获得<samp>Item</samp>以外的指定类型。若类型不匹配(例如尝试将家具转换为靴子),则会抛出描述性的异常。 <syntaxhighlight lang="c#"> Boots item = ItemRegistry.Create<Boots>("(B)505"); // 橡胶靴 </syntaxhighlight> |- | <samp>ItemRegistry.Exists</samp> | 给定的限定性/非限定性ID是否能匹配存在的物品。例如: <syntaxhighlight lang="c#"> bool pufferfishExist = ItemRegistry.Exists("(O)128"); </syntaxhighlight> |- | <samp>ItemRegistry.IsQualifiedId</samp> | 给定的物品ID是否已添加限定性类型前缀(例如<samp>(O)128</samp>而非<samp>128</samp>)。 |- | <samp>ItemRegistry.QualifyItemId</samp> | 给定限定性/非限定性物品ID,给出唯一的限定性ID。例如: <syntaxhighlight lang="c#"> string qualifiedId = ItemRegistry.QualifyItemId("128"); // 返回 (O)128 </syntaxhighlight> |- | <samp>ItemRegistry.GetMetadata</samp> | 获取关于物品的高级信息: <syntaxhighlight lang="c#"> // 获取关于橡胶靴的信息 ItemMetadata info = ItemRegistry.GetMetadata("(B)505"); // 获取物品ID信息 $"The item has unqualified ID {info.LocalId}, qualified ID {info.QualifiedId}, and is defined by the {info.TypeIdentifier} item data definition."; // 物品是否存在于数据文件中? bool exists = info.Exists(); </syntaxhighlight> 获取物品通用的、解析后的数据: <syntaxhighlight lang="c#"> // 获取解析后的信息 ParsedItemData data = info.GetParsedData(); $"The internal name is {data.InternalName}, translated name {data.DisplayName}, description {data.Description}, etc."; // 绘制物品贴图 Texture2D texture = data.GetTexture(); Rectangle sourceRect = data.GetSourceRect(); spriteBatch.Draw(texture, Vector2.Zero, sourceRect, Color.White); </syntaxhighlight> 创建物品: <syntaxhighlight lang="c#"> Item item = metadata.CreateItem(); </syntaxhighlight> 获取类型定义(注意,此操作高度专业化。通常情况下您应当转而使用<samp>ItemRegistry</samp>,以获取缓存和优化上的好处): <syntaxhighlight lang="c#"> IItemDataDefinition typeDefinition = info.GetTypeDefinition(); </syntaxhighlight> |- | <samp>ItemRegistry.ResolveMetadata</samp> | 相当于<samp>ItemRegistry.GetMetadata</samp>,除了物品不存在时会返回空值。 |- | <samp>ItemRegistry.GetData</samp> | 获取某个物品解析后的数据,若不存在则返回<samp>null</samp>。这是<code>ItemRegistry.ResolveMetadata(id)?.GetParsedData()</code>的简写;参见前一方法以获得关于解析后的数据的信息。 |- | <samp>ItemRegistry.GetDataOrErrorItem</samp> | 相当于<samp>ItemRegistry.GetData</samp>,除了物品不存在时会返回错误物品的信息(例如,在物品栏中绘制)。 |- | <samp>ItemRegistry.GetErrorItemName</samp> | 获取翻译后的''Error Item''标签。 |} </dd> </dl> ==公共数据== ===品质=== 每个物品都有一个品质等级,该等级(依赖于物品类型)可能影响物品的售价、生命值回复等。可用的品质如下: {| class="wikitable" |- ! 品质 ! 值 ! 常量名 |- | 普通 | <samp>0</samp> | <samp>Object.lowQuality</samp> |- | 银星 | <samp>1</samp> | <samp>Object.medQuality</samp> |- | 金星 | <samp>2</samp> | <samp>Object.highQuality</samp> |- | 铱星 | <samp>4</samp> | <samp>Object.bestQuality</samp> |} ===类别=== 每个物品都有一个类别(使用负整数表示)。在代码中,可以通过<samp>item.Category</samp>获取物品类别,以及可以通过<samp>item.getCategoryName()</samp>获取其翻译后的名称。可用的类别如下: {| class="wikitable sortable" |- ! 值 ! 内部常量名 ! [[#上下文标签|上下文标签]] ! 中文翻译 ! 属性 |- | -2 | <samp>Object.GemCategory</samp> | <samp>category_gem</samp> | 矿物 | 受[[技能#采矿|宝石专家]]职业影响。 |- | -4 | <samp>Object.FishCategory</samp> | <samp>category_fish</samp> | 鱼 | 受[[技能#钓鱼|渔夫]]和[[技能#钓鱼|垂钓者]]职业影响。 |- | -5 | <samp>Object.EggCategory</samp> | <samp>category_egg</samp> | 动物制品 | 受[[技能#耕种|畜牧人]]职业影响。可用于弹弓。 |- | -6 | <samp>Object.MilkCategory</samp> | <samp>category_milk</samp> | 动物制品 | 受[[技能#耕种|畜牧人]]职业影响。 |- | -7 | <samp>Object.CookingCategory</samp> | <samp>category_cooking</samp> | 菜品 | |- | -8 | <samp>Object.CraftingCategory</samp> | <samp>category_crafting</samp> | 制造品 | 可放置 |- | -9 | <samp>Object.BigCraftableCategory</samp> | <samp>category_big_craftable</samp> | | 可放置 |- | -12 | <samp>Object.mineralsCategory</samp> | <samp>category_minerals</samp> | 矿物 | 受[[技能#采矿|宝石专家]]职业影响。 |- | -14 | <samp>Object.meatCategory</samp> | <samp>category_meat</samp> | 动物制品 | |- | -15 | <samp>Object.metalResources</samp> | <samp>category_metal_resources</samp> | 资源 | |- | -16 | <samp>Object.buildingResources</samp> | <samp>category_building_resources</samp> | 资源 | |- | -17 | <samp>Object.sellAtPierres</samp> | <samp>category_sell_at_pierres</samp> | | |- | -18 | <samp>Object.sellAtPierresAndMarnies</samp> | <samp>category_sell_at_pierres_and_marnies</samp> | 动物制品 | 受[[技能#耕种|畜牧人]]职业影响。 |- | -19 | <samp>Object.fertilizerCategory</samp> | <samp>category_fertilizer</samp> | 肥料 | 可放置、可穿行 |- | -20 | <samp>Object.junkCategory</samp> | <samp>category_junk</samp> | 垃圾 | |- | -21 | <samp>Object.baitCategory</samp> | <samp>category_bait</samp> | 鱼饵 | 可以用于钓竿。 |- | -22 | <samp>Object.tackleCategory</samp> | <samp>category_tackle</samp> | 鱼钩 | 可以用于钓竿。不可堆叠。 |- | -23 | <samp>sellAtFishShopCategory</samp> | <samp>category_sell_at_fish_shop</samp> | | |- | -24 | <samp>Object.furnitureCategory</samp> | <samp>category_furniture</samp> | 装饰 | |- | -25 | <samp>Object.ingredientsCategory</samp> | <samp>category_ingredients</samp> | 菜品 | |- | -26 | <samp>Object.artisanGoodsCategory</samp> | <samp>category_artisan_goods</samp> | 工匠物品 | 受[[技能#耕种|工匠]]职业影响。 |- | -27 | <samp>Object.syrupCategory</samp> | <samp>category_syrup</samp> | 工匠物品 | 受[[技能#采集|萃取者]]职业影响。 |- | -28 | <samp>Object.monsterLootCategory</samp> | <samp>category_monster_loot</samp> | 怪物战利品 | |- | -29 | <samp>Object.equipmentCategory</samp> | <samp>category_equipment</samp> | | |- | -74 | <samp>Object.SeedsCategory</samp> | <samp>category_seeds</samp> | 种子 | 可放置。可穿行。 |- | -75 | <samp>Object.VegetableCategory</samp> | <samp>category_vegetable</samp> | 蔬菜 | 受[[技能#耕种|农耕人]]职业影响。可用于弹弓。 |- | -79 | <samp>Object.FruitsCategory</samp> | <samp>category_fruits</samp> | 水果 | 受[[技能#耕种|农耕人]]职业影响(若非采集水果)。可用于弹弓。 |- | -80 | <samp>Object.flowersCategory</samp> | <samp>category_flowers</samp> | 花 | 受[[技能#耕种|农耕人]]职业影响。 |- | -81 | <samp>Object.GreensCategory</samp> | <samp>category_greens</samp> | 采集品 | |- | -95 | <samp>Object.hatCategory</samp> | <samp>category_hat</samp> | | |- | -96 | <samp>Object.ringCategory</samp> | <samp>category_ring</samp> | | |- | -98 | <samp>Object.weaponCategory</samp> | <samp>category_weapon</samp> | | |- | -99 | <samp>Object.toolCategory</samp> | <samp>category_tool</samp> | | |} {{collapse|控制台命令|content= 若安装了{{nexus mod|3101|Console Code}}模组,则可在SMAPI控制台运行如下命令以参见分好类别的物品列表: <pre>cs return string.Join(`\n`, Game1.objectData.Keys.Select(key => new StardewValley.Object(key, 1)).GroupBy(item => item.Category, item => item.Name).OrderByDescending(p => p.Key).Select(p => $`{p.Key}: {string.Join(`, `, p.OrderBy(name => name))}`));</pre> }} ===上下文标签=== ''上下文标签''是附加在物品上的任意数据标签。它们可以在游戏中产生各种效果,也可能没有任何效果而仅起到提示作用。上下文标签对大小写不敏感。游戏会基于游戏数据(例如品质)生成一些标签,而其他标签都定义在<samp>Data/Objects</samp>中。 下面是原版游戏中添加或使用的上下文标签的''不完全''列表。模组可以添加自定义的上下文标签,这里没有列出。 <dl style="margin-left: 2em;"> <dt>自动添加到所有物品:</dt> <dd> {| class="wikitable" |- ! 上下文标签 ! 效果 |- | <samp>category_{{t|category}}</samp> | 基于物品类别自动添加的标签。参见[[#类别|物品类别列表]]中'上下文标签'一列以获取可能的取值。 |- | <samp>fish_{{t|metadata}}</samp> | 基于[[模组:鱼类数据|<samp>Data/Fish</samp>中的鱼类元数据]]自动添加的鱼类物品标签。 对于[[蟹笼]]鱼类(也就是类型为<samp>trap</samp>的鱼类): {| class="wikitable" |- ! 上下文标签 ! 说明 |- | <samp>fish_trap_location_{{t|water type}}</samp> | 基于字段2('darting randomness')。例如, <samp>fish_trap_location_ocean</samp>。 |} 对于钓竿鱼类(依旧是类型''不是''<samp>trap</samp>的鱼类): {| class="wikitable" |- ! 上下文标签 ! 说明 |- | <samp>fish_difficulty_{{t|difficulty}}</samp> | 基于字段1 ('chance to dart'),其中{{t|difficulty}}取<samp>easy</samp> (0–33), <samp>medium</samp> (34–66), <samp>hard</samp> (67–100), 或<samp>extremely_hard</samp> (101+)其中之一。 例如,<samp>fish_difficulty_hard</samp>. |- | <samp>fish_motion_{{t|motion}}</samp> | 基于字段4 ('location') 。例如<samp>fish_motion_floater</samp>。 |- | <samp>fish_favor_weather_{{t|weather}}</samp> | 基于字段7 ('weather') 。例如<samp>fish_favor_weather_sunny</samp>。 |} |- | <samp>id_{{t|type}}_{{t|identifier}}</samp> | 自动添加。作为ID的另一版本。其中{{t|type}}为下列之一:<samp>B</samp> (靴子), <samp>BBL</samp> (大型打造品配方), <samp>BL</samp> (物品配方), <samp>BO</samp> (大型打造品), <samp>C</samp> (衣服), <samp>F</samp> (家具), <samp>H</samp> (帽子), <samp>O</samp> (物体), <samp>R</samp> (戒指), <samp>W</samp> (近战武器),否则为空。{{t|identifier}}是物品的贴图集索引。例如[[河豚]]的值为<samp>id_o_128</samp> (物体#128)。 |- | <samp>item_{{t|name}}</samp> | 基于物品名称自动添加。名称为全小写且不含空格和单引号,其中空格使用下划线替代。例如 [[《1000年后》|《1000年后》('1000 Years From Now')]]具有上下文标签<samp>item_1000_years_from_now</samp>。 |} </dd> <dt>向[[#物体|“物体”类型]]的物品自动添加。</dt> <dd> {| class="wikitable" |- ! 上下文标签 ! 效果 |- | <samp>jelly_item</samp><br /><samp>juice_item</samp><br /><samp>pickle_item</samp><br /><samp>wine_item</samp> | 适用于[[小桶]]或[[罐头瓶]]的产品。为被加工物品的类型。 |- | <samp>preserve_sheet_index_{{t|id}}</samp> | 适用于[[小桶]]或[[罐头瓶]]产出的物品。为被加工物品的贴图集索引。例如,蓝莓[[果酒]]的上下文标签为<samp>preserve_sheet_index_258</samp>,其中258是[[蓝莓]]的贴图集ID。 |- | <samp>quality_none</samp><br /><samp>quality_silver</samp><br /><samp>quality_gold</samp><br /><samp>quality_iridium</samp> | 基于物品品质自动添加。 |- | <samp>quality_qi</samp> | 在[[任务#齐先生的菜肴|''齐先生的菜肴''特别任务]]期间自动添加。 |} </dd> <dt>Color tags:</dt> <dd> {| class="wikitable" |- ! 上下文标签 ! 效果 |- | <samp>color_*</samp> | 颜色标签,用在如下游戏功能中:[[2柳巷|艾米丽的家]]中的[[染色#染料罐|染料罐]]、特定机器产出品着色(如[[果酒]]和[[腌菜]])、[[书|读书动画]]等。 因为此标签用于着色,所以每个标签都有一个特定的RGB值,除了艾米丽的染料罐;染料罐有如下的上下文标签组织形式: {| class="wikitable" |- ! 染料罐 ! 上下文标签 |- | 红色 | <samp>color_red</samp>, <samp>color_salmon</samp>, <samp>color_dark_red</samp>, <samp>color_pink</samp> |- | 橙色 | <samp>color_orange</samp>, <samp>color_dark_orange</samp>, <samp>color_dark_brown</samp>, <samp>color_brown</samp>, <samp>color_copper</samp> |- | 黄色 | <samp>color_yellow</samp>, <samp>color_dark_yellow</samp>, <samp>color_gold</samp>, <samp>color_sand</samp> |- | 绿色 | <samp>color_green</samp>, <samp>color_dark_green</samp>, <samp>color_lime</samp>, <samp>color_yellow_green</samp>, <samp>color_jade</samp>, <samp>color_sea_green</samp> |- | 蓝色 | <samp>color_blue</samp>, <samp>color_dark_blue</samp>, <samp>color_dark_cyan</samp>, <samp>color_light_cyan</samp>, <samp>color_cyan</samp>, <samp>color_aquamarine</samp> |- | 紫色 | <samp>color_purple</samp>, <samp>color_dark_purple</samp>, <samp>color_dark_pink</samp>, <samp>color_pale_violet_red</samp>, <samp>color_poppyseed</samp>, <samp>color_iridium</samp> |- | 无彩色 | <samp>color_black</samp>, <samp>color_gray</samp>, <samp>color_dark_gray</samp>, <samp>color_white</samp>, <samp>color_iron</samp>, <samp>color_prismatic</samp> |} |} <dt>1.6添加的标签</dt> <dd> {| class="wikitable" |- ! 上下文标签 ! 效果 |- | <samp>campfire_item</samp> | 将物品标记为[[篝火]]。若物品还具有<samp>torch_item</samp>上下文标签,则其被放置且开启后产生如下效果: * 篝火的火焰会在其上绘制 * 若为[[#大型打造品|大型打造品]],光线会从其中心而非顶部发出。 |- | <samp>fish_pond_ignore</samp> | 禁止玩家将此种鱼类放入[[鱼塘]],即使此种鱼类匹配<samp>Data/FishPondData</samp>的条目。 |- | <samp>geode_crusher_ignored</samp> | 禁止使用[[晶球破开器]]破开此物品,即使此物品在[[#物体|<samp>Data/Objects</samp>]]中有晶球字段。 |- | <samp>item_type_{{t|type}}</samp> | 适用于[[#物体|物体]]。类型值取自“类型和类别”字段。(非“物体”类型的物品标签为<samp>item_type_</samp>,下划线后没有内容)。 此标签自动添加,且不应手动设置。在某些地方可能检查该标签(例如,[[博物馆]]会以此检查物品是否为古物或矿物),但游戏大部分不受影响。 |- | <samp>museum_donatable</samp><br /><samp>not_museum_donatable</samp> | 设置此物品可否捐给[[博物馆]],以重写原版逻辑。 |- | <samp>not_giftable</samp> | 禁止玩家将此物品作为礼物赠送给村民。村民会完全忽略此物品(就像你拿的工具一样)。 此标签仅影响礼物赠予,并不影响诸如任务目标或特别请求目标的游戏逻辑。若该村民有此物品的<samp>reject_*</samp>对话,则该对话有更高优先级。 |- | <samp>not_placeable</samp><br /><samp>placeable</samp> | 设置物品是否可以放在地上。 |- | <samp>prevent_loss_on_death</samp> | 表示此物品[[冒险者公会#物品找回服务|在玩家晕倒时不会丢失]]。 |- | <samp>sign_item</samp> | 标记此物品为[[打造#标牌|标牌]],允许玩家于其上显示物品,或将其置于[[鱼塘]]上以显示鱼数。 |- | <samp>torch_item</samp> | 标记此物品为[[火把]],允许玩家打开/关闭它来发光。另请参阅<samp>campfire_item</samp>。 |} </dd> <dt>影响[[模组:机器|机器进程]]:</dt> <dd> {| class="wikitable" |- ! 上下文标签 ! 效果 |- | <samp>crystalarium_banned</samp> | 应用于宝石或矿物,禁止玩家使用[[宝石复制机]]复制它。 |- | <samp>keg_juice</samp><br /><samp>keg_wine</samp> | 允许使用[[小桶]]将此物品加工为果汁或果酒。 |- | <samp>preserves_jelly</samp><br /><samp>preserves_pickle</samp> | 允许使用[[罐头瓶]]将此物品加工为果酱或腌菜。 |- | <samp>seedmaker_banned</samp> | 用于种子物品,禁止玩家将其放入[[种子生产器]]。 |- | <samp>tapper_item</samp> | 标记此物品为[[树液采集器]]或[[重型树液采集器]]。 |- | <samp>tapper_multiplier_{{t|multiplier}}</samp> | 影响树液采集器产出速率的乘数。例如,<samp>2</samp>会使得物品产出时间缩短到原先的一半(即每个物品都会在<sup>base time</sup>/<sub>speed multiplier</sub>时间内完成)。若省略,默认为1。 |} </dd> <dt>对游戏逻辑无影响的提示性标签:</dt> <dd> {| class="wikitable" |- ! 上下文标签 ! 效果 |- | <samp>fish_legendary</samp><br /><samp>fish_legendary_family</samp> | 标记此鱼为[[鱼#传说鱼类|传说鱼类]]或[[任务#大家族|传说之鱼二代]]。仅用于提示;传说鱼类的行为实际上被<samp>CatchLimit</samp>和<samp>IsBossFish</samp>等数据字段决定,这些字段存储在[[模组:地点数据|<samp>Data/Locations</samp>]]。 |- | <samp>geode</samp> | ''(自动添加)'' 标记此物品为[[矿物#晶球|晶球]],可以在[[铁匠铺]]或使用[[晶球破开器]]打开。若晶球字段出现在[[#物品|<samp>Data/Objects</samp>]]中,则自动添加此标签。 |- | <samp>id_{{t|item id}}</samp> | ''(自动添加)'' [[模组:常见的数据字段#物品ID|限定性物品ID]],像<samp>id_(o)128</samp>。可用于匹配或排除物品。ID中任何空格会被替换为下划线,而单引号会被删除。 |- | <samp>is_machine</samp> | ''(自动添加)'' 表示物品具有[[模组:机器|机器逻辑]]。根据<samp>Data/Machines</samp>自动添加。 |- | <samp>machine_input</samp> | ''(自动添加)'' 物品是否为接受玩家输入的机器。基于<samp>Data/Machines</samp>中的如下字段自动添加: * 当<samp>HasInput</samp>为true; * ''或者''当任何输出规则有<samp>ItemPlacedInMachine</samp>触发器。 |- | <samp>machine_output</samp> | ''(自动添加)'' 物品是否为产出玩家可收集物品的机器。基于<samp>Data/Machines</samp>中的如下字段自动添加: * 当<samp>HasOutput</samp>为true; * ''或者''有任何输出规则。 |} </dd> </dl> 某些游戏数据也以通用方式引用上下文标签。例如,您可以向物品添加自定义标签,然后在鱼塘数据中引用它们。特别地, {| class="wikitable" |- ! 游戏数据 ! 效果 |- | [[模组:鱼塘数据|鱼塘]] | 存储在<samp>Data/FishPondData</samp>。用于匹配能够放进鱼塘的鱼(参见数据文件中的[[模组:鱼塘数据#RequiredTags|<samp>RequiredTags</samp>]])。 |- | [[模组:特别任务|特别任务]] | 存储在<samp>Data/SpecialOrders</samp>。用于匹配满足任务目标的物品(参见数据文件中的[[模组:特别任务#上下文标签|<samp>AcceptedContextTags</samp>]]) |- | 裁缝 | 存储在<samp>Data/TailoringRecipes</samp>。用于匹配某配方需要的物品。 |- | [[模组:礼物喜好数据|礼物喜好]] | 存储在<samp>Data/NPCGiftTastes</samp>。用于使用上下文标签设置角色喜欢和不喜欢的物品。 |} <samp>debug listtags</samp> [[模组:控制台命令|控制台命令]] 列出手持物品的所有上下文标签 {{collapse|原始标签|content=此处给出从<samp>Data/ObjectContextTags</samp>提取的、上文未提及的标签列表:<samp>alcohol_item</samp>, <samp>algae_item</samp>, <samp>ancient_item</samp>, <samp>beach_item</samp>, <samp>bomb_item</samp>, <samp>bone_item</samp>, <samp>book_item</samp>, <samp>ceramic_item</samp>, <samp>chicken_item</samp>, <samp>color_black</samp>, <samp>color_dark_gray</samp>, <samp>color_gray</samp>, <samp>color_iron</samp>, <samp>color_prismatic</samp>, <samp>color_white</samp>, <samp>cooking_item</samp>, <samp>cow_milk_item</samp>, <samp>cowboy_item</samp>, <samp>crop_year_2</samp>, <samp>dinosaur_item</samp>, <samp>doll_item</samp>, <samp>drink_item</samp>, <samp>dwarvish_item</samp>, <samp>dye_medium</samp>, <samp>dye_strong</samp>, <samp>egg_item</samp>, <samp>elvish_item</samp>, <samp>fertilizer_item</samp>, <samp>fish_bug_lair</samp>, <samp>fish_carnivorous</samp>, <samp>fish_crab_pot</samp>, <samp>fish_desert</samp>, <samp>fish_freshwater</samp>, <samp>fish_lake</samp>, <samp>fish_legendary</samp>, <samp>fish_mines</samp>, <samp>fish_night_market</samp>, <samp>fish_nonfish</samp>, <samp>fish_ocean</samp>, <samp>fish_pond</samp>, <samp>fish_river</samp>, <samp>fish_secret_pond</samp>, <samp>fish_semi_rare</samp>, <samp>fish_sewers</samp>, <samp>fish_swamp</samp>, <samp>fish_talk_demanding</samp>, <samp>fish_talk_rude</samp>, <samp>fish_talk_stiff</samp>, <samp>fish_upright</samp>, <samp>flower_item</samp>, <samp>food_bakery</samp>, <samp>food_breakfast</samp>, <samp>food_cake</samp>, <samp>food_party</samp>, <samp>food_pasta</samp>, <samp>food_salad</samp>, <samp>food_sauce</samp>, <samp>food_seafood</samp>, <samp>food_soup</samp>, <samp>food_spicy</samp>, <samp>food_sushi</samp>, <samp>food_sweet</samp>, <samp>forage_item</samp>, <samp>forage_item_beach</samp>, <samp>forage_item_cave</samp>, <samp>forage_item_desert</samp>, <samp>forage_item_mines</samp>, <samp>forage_item_secret</samp>, <samp>fossil_item</samp>, <samp>fruit_item</samp>, <samp>fruit_tree_item</samp>, <samp>furnace_item</samp>, <samp>ginger_item</samp>, <samp>goat_milk_item</samp>, <samp>golden_relic_item</samp>, <samp>honey_item</samp>, <samp>hunting_item</samp>, <samp>instrument_item</samp>, <samp>jelly_item</samp>, <samp>juice_item</samp>, <samp>large_egg_item</samp>, <samp>large_milk_item</samp>, <samp>light_source</samp>, <samp>machine_item</samp>, <samp>marine_item</samp>, <samp>mayo_item</samp>, <samp>medicine_item</samp>, <samp>milk_item</samp>, <samp>noble_item</samp>, <samp>ore_item</samp>, <samp>pickle_item</samp>, <samp>potion_item</samp>, <samp>prehistoric_item</samp>, <samp>quality_fertilizer_item</samp>, <samp>scroll_item</samp>, <samp>season_all</samp>, <samp>season_fall</samp>, <samp>season_spring</samp>, <samp>season_summer</samp>, <samp>season_winter</samp>, <samp>slime_egg_item</samp>, <samp>slime_item</samp>, <samp>statue_item</samp>, <samp>strange_doll_1</samp>, <samp>strange_doll_2</samp>, <samp>syrup_item</samp>, <samp>totem_item</samp>, <samp>toy_item</samp>, <samp>trash_item</samp>, <samp>tree_seed_item</samp>, <samp>wood_item</samp>.}} ====ItemContextTagManager类==== 对于C#模组,<samp>ItemContextTagManager</samp>类简化了上下文标签的使用,且减少了重复代码。 提供了一些工具方法: {| class="wikitable" |- ! 方法 ! 效果 |- | <code>GetBaseContextTags(id)</code> | 基于物品在<samp>Data/Objects</samp>或<samp>Data/BigCraftables</samp>中的原始数据获取其基本上下文标签。其中不包括基于实例类型添加的动态标签(如品质),后者可以使用<code>item.GetContextTags()</code>获取。 |- | <code>DoesTagQueryMatch(query, tags)</code> | 判断上下文标签查询是否匹配给定标签。例如,<code>ItemContextTagManager.DoesTagQueryMatch("bone_item, !fossil_item", item.GetContextTags())</code>在物品为骨头物品但不是化石才返回true(例如[[骨笛]])。 |- | <code>DoAllTagsMatch(requiredTags, actualTags)</code><br /><code>DoAnyTagsMatch(requiredTags, actualTags)</code> | 判断是否每个(<samp>DoAllTagsMatch</samp>)或至少一个(<samp>DoAnyTagsMatch</samp>) 给出的标签能匹配实际的标签。此方法亦支持反向匹配,例如<samp>"!fossil_item"</samp>。 |- | <code>DoesTagMatch(requiredTag, actualTags)</code> | 判断给出的单个标签是否匹配实际的标签。此方法亦支持反向匹配,例如<samp>"!fossil_item"</samp>。 |- | <code>SanitizeContextTag(tag)</code> | ''(专用)'' 替换物品名称中可能出现的标点,使其可用于上下文标签。例如,<code>SanitizeContextTag("Sam's Boombox")</code>返回<samp>sams_boombox</samp>。 |} ==物体== 物体是放在背包或世界中的物品的默认类型。 物体数据存储于<samp>Data/Objects</samp>(早于1.6的版本中为<samp>Data/ObjectInformation</samp>),其图标贴图存储在<samp>Maps/springobjects</samp>,其代码存储在<samp>StardewValley.Object</samp>。 ===数据格式=== <samp>Data/Objects</samp>中储存的物体数据包括一个“字符串 → 数据模型”查询,其中 * 键为非限定性[[模组:常见的数据字段#物品ID|物品ID]]。 * 值为包括如下字段的数据模型。 ====基本信息==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Name</samp> | 物品内部名称 |- | <samp>DisplayName</samp><br /><samp>Description</samp> | 用于游戏内显示名称和描述的[[模组:模板字符串|模板字符串]]。 |- | <samp>Type</samp> | 物品大体上的类型,比如Arch(古物)或 Minerals(矿物)。原版类型为:Litter, Basic, Minerals, Quest, asdf, Crafting, Arch, fish, Cooking, Seeds, Ring, interactive |- | <samp>Category</samp> | [[#类别|物品类别]]。 |- | <samp>Price</samp> | ''(可选)'' 玩家售出该物品的价格。注意:这不是玩家从商店购买的价格。默认为0。 |} ====外观==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Texture</samp> | 包含此物品贴图的素材名称。默认为<samp>Maps/springobjects</samp>。 |- | <samp>SpriteIndex</samp> | <samp>Texture</samp>中的贴图索引,其中0对应左上角的贴图。 |} ====可食性==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Edibility</samp> | ''(可选)'' 一个数值,用于决定食用该物品可以回复多少点能量(可食性 × 2.5)和生命(可食性 × 1.125)。可食性为-300的物品不可食用,而-299至-1之间的值会减少生命值和能量,取值为0的物品也可食用,但不会改变生命值/能量。默认为-300。 |- | <samp>IsDrink</samp> | ''(可选)'' 该物品是否为饮品(而非食品)。默认为false。 |- | <samp>Buffs</samp> | ''(可选)'' 玩家食用该物品可能获得的诸效果。默认为none。 本字段的值为包含如下字段的一些数据模型所组成的列表: {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Id</samp> | 列表中此项目的[[模组:公共数据字段#唯一字符串ID|唯一字符串ID]]。 |- | <samp>Duration</samp> | ''(若设置了<samp>BuffId</samp>,则可选)'' 效果持续时长,为游戏内的分钟数。可以设为<samp>-2</samp>,代表效果将在当天一直持续下去。 |- | <samp>BuffId</samp> | ''(可选)'' 欲应用效果的唯一ID,此ID来自<samp>Data/Buffs</samp>。也可设为<samp>null</samp>,这样就会忽略<samp>Data/Buffs</samp>,并将ID设置根据物品的<samp>IsDrink</samp>字段设为<samp>food</samp>或<samp>drink</samp>。 若应用了来自<samp>Data/Buffs</samp>的效果,且指定了其他字段,则效果数据会按如下规则混合: {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>Duration</samp><br /><samp>IconTexture</samp><br /><samp>SpriteIndex</samp><br /><samp>GlowColor</samp> | 若指定此字段,则使用<samp>Data/Objects</samp>中的数据,而不是<samp>Data/Buffs</samp>中的数据。若忽略,则默认使用来自<samp>Data/Buffs</samp>的数据。 |- | <samp>CustomAttributes</samp> | 同时使用来自<samp>Data/Objects</samp>和<samp>Data/Buffs</samp>的数值。(例如,<samp>Data/Objects</samp>中的速度+1和<samp>Data/Buffs</samp>中的速度+1会导致速度+2)。 |- | <samp>IsDebuff</samp> | 使用<samp>Data/Objects</samp>中的数值。 |} |- | <samp>IsDebuff</samp> | ''(可选)'' 此效果是否为负面效果,若是,则戴上[[结实戒指]]会减免一半时长。默认为false。 |- | <samp>IconTexture</samp> | ''(可选)'' 欲加载的图标所在的资源名称。该资源必须包含一个或以上的16x16图标。当资源包含多个图标时,这些图标需要排布在一个尺寸任意的网格中。若忽略,则会基于<samp>BuffId</samp>和<samp>CustomAttributes</samp>字段绘制默认图标。 |- | <samp>SpriteIndex</samp> | ''(可选)'' 效果图标在<samp>IconTexture</samp>中的索引。0代表左上角。默认为0。 |- | <samp>GlowColor</samp> | ''(可选)'' 玩家获得此效果后的辉光颜色。参见[[模组:公共数据字段#颜色|颜色格式]]。默认为none。 |- | <samp>CustomAttributes</samp> | 自定义效果参数(若有)。 此字段的值为一个包含如下字段的数据模型,它由下列中的某些字段组成: {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>FarmingLevel</samp><br /><samp>FishingLevel</samp><br /><samp>ForagingLevel</samp><br /><samp>LuckLevel</samp><br /><samp>MiningLevel</samp> | ''(可选)'' 效果对[[技能|技能等级]]的增量。负面效果此值为负。默认为0。 |- | <samp>Attack</samp><br /><samp>Defense</samp><br /><samp>MagneticRadius</samp><br /><samp>MaxStamina</samp><br /><samp>Speed</samp> | ''(可选)'' 效果对玩家[[攻击]]、[[防御]]、[[磁性|磁性半径]]、最大[[能量|体力]]或[[速度]]的增量。负面效果此值为负。默认为0。 |} |- | <samp>CustomFields</samp> | ''(可选)'' 此条目的 [[模组:公共数据字段#自定义字段|自定义字段]]。 |} |} ====晶球、远古斑点==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>GeodeDrops</samp><br /><samp><samp>GeodeDropsDefaultItems</samp> | ''(可选)'' 将此物品(如[[晶球]])敲开时可能掉落的物品。只需指定二者其一,即可自动启用该物品的晶球行为。 您可以仅指定其中一个字段,也可同时指定两个字段: <ul> <li><samp>GeodeDrops</samp>应设为可能掉落的物品。默认为none。此字段的值为包含以下字段的数据模型: {| class="wikitable" |- ! 字段 ! 含义 |- |- | '''公共字段''' | 参见[[模组:物品查询#物品生成字段|物品生成字段]]以获得晶球掉落物的通用物品字段。 若此字段被设为返回多个物品的[[模组:物品查询|物品查询]],则随机返回一个掉落物。 |- | <samp>Chance</samp> | ''(可选)'' 在其他字段均匹配的条件下,掉落该物品的概率。为 0(不可能)至 1(必然)之间的小数。默认为1。 |- | <samp>SetFlagOnPickup</samp> | ''(可选)'' 当玩家捡起该掉落物时,设置的[[模组:信件数据|信件标识]]。 |- | <samp>Precedence</samp> | ''(可选)'' 检查该掉落物在所有可能掉落物中的优先级。越小,优先级越高。可以为负值。具有相同优先级的掉落物会按其在列表中的顺序依次检查。默认为0。 为了一致性,原版掉落物主要使用如下数值: * <samp>-1000</samp>:特殊物品,例如[[金色头盔]]; * <samp>0</samp>:正常物品。 |}</li> <li><samp>GeodeDropsDefaultItems</samp> 是否从默认的晶球的掉落物中随机选取(例如[[粘土]]、[[煤炭]]、[[铜矿石]]、[[铱矿石]]等)。默认为false。</li> </ul> 若同时指定两个字段,则会以50%的概率给出自定义掉落物或默认掉落物。但若指定了自定义掉落物<samp>GeodeDrops</samp>字段,却没有任何匹配的掉落物,则强制使用默认掉落物<samp>GeodeDropsDefaultItems</samp>,无论该字段是否为true。 |- | <samp>ArtifactSpotChances</samp> | ''(可选)'' 若为古物(即<samp>Type</samp>字段为<samp>Arch</samp>),挖掘[[远古斑点]]获得它的概率。 该字段为一个“字符串 → 数据模型”查询,其中: * 键为的地点内部名称; * 值为若检查到此物品,生成此物品的概率,为0(不可能)至 1(必然)之间的小数。 |} ====上下文标签 & 排除规则==== {| class="wikitable" |- ! field ! purpose |- | <samp>ContextTags</samp> | ''(可选)'' 欲为该物品添加的自定义[[#上下文标签]]。此处“自定义”是相对于那些自动添加的上下文标签而言的。此字段应为一个列表,例如: <syntaxhighlight lang="json"> "ContextTags": [ "color_yellow", "fish_ocean", "fish_upright", "season_summer" ] </syntaxhighlight> |- | <samp>ExcludeFromRandomSale</samp> | ''(可选)'' 商店选取随机物品售卖时,是否排除该物品。默认为false。 |- | <samp>ExcludeFromFishingCollection</samp><br /><samp>ExcludeFromShippingCollection</samp> | ''(可选)'' 是否将此物品从“钓鱼”/“售出的物品”收集品菜单中排除,也会影响[[完美]]。默认为false,此时会使用通常情况的要求(例如,古物通常情况下不会计入“售出的物品”)。 |} ====高级==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>CustomFields</samp> | ''(可选)'' 此条目的[[模组:公共数据字段#自定义字段|自定义字段]]。 |} ===说明=== * 在早于1.6的版本中,在索引6(即“打造”字段)中有数值的物品将在游戏中显示错误信息(例如,早于1.4版本的豆类火锅)。在“攻击”字段中有数值的物品将显示攻击图标和一个数字,但没有描述。我们几乎完全不知晓这些效果的机制。 * '''不推荐添加自定义的<samp>Arch</samp>类型物品。因为这经常导致挖掘远古斑点却没有掉落物。''' * 已命名的[[增益效果]](例如[[蒜油]]、[[生命药水]]或[[增益效果#眩晕]])是在游戏代码中实现的,不能通过食物效果字段设置。 * 贴图集和游戏数据中有一些通常不能出现在玩家背包的物品,例如,树枝(Twig)存在于数据和贴图集中,但无法放入背包;还有有一些仅出现在数据文件中而没有对应贴图的物品,比如“Lumber”(物品ID (O)30)。还有一些没有对应物品数据的物品。数据文件中还有多个名为 ''Weed''(杂草)和 ''Stone''(石头)的条目,但玩家通常只能获得ID为390的 ''Stone'',且不能获得 ''Weed''。 ==大型打造品== 大型打造品是指可放置、两格高(而非一格)的物品。 其数据存储在<samp>Data/BigCraftables</samp>(早于1.6的版本中为<samp>Data/BigCraftablesInformation</samp> )。其贴图存储在<samp>TileSheets/Craftables</samp>。其代码存储在<samp>StardewValley.Object</samp> (带有 <code>bigCraftable.Value = true</code>标签)。 ===数据格式=== 数据格式为一个“字符串 → 数据模型”查询,其中: * 键名为非限定性[[模组:公共数据字段#物品ID|物品ID]]。 * 值为包含如下字段的数据模型。 ====基本信息==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Name</samp> | 内部物品名称。 |- | <samp>DisplayName</samp><br /><samp>Description</samp> | 游戏内显示名称和描述的[[模组:模板字符串|模板字符串]]。 |- | <samp>Price</samp> | ''(可选)'' 玩家售出的价格。不是购入的价格。默认为0。 |} ====行为==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Fragility</samp> | ''(可选)'' 物品如何拾起。可能的取值为 0(任意工具)、1(使用斧子/锄头/十字镐可破坏,其他工具可拾起)或 2 (放置后无法移除)。默认为0。 |- | <samp>CanBePlacedIndoors</samp><br /><samp>CanBePlacedOutdoors</samp> | ''(可选)'' 是否可以放置在室内/外。默认都为true。 |- | <samp>IsLamp</samp> | ''(可选)'' 是否为台灯,以决定天黑时是否发光。默认为false。 |} ====外观==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Texture</samp> | ''(可选)'' 贴图集的资源名称。默认为<samp>TileSheets/Craftables</samp>。 |- | <samp>SpriteIndex</samp> | ''(可选)'' 贴图集<samp>Texture</samp>中的贴图索引。0代表左上角。 |} ====上下文标签==== {| class="wikitable" |- ! field ! purpose |- | <samp>ContextTags</samp> | ''(可选)'' 为此物品添加的自定义[[#上下文标签]]。此处自定义是相对自动添加的上下文标签而言的。应当为一个列表,例如: <syntaxhighlight lang="json"> "ContextTags": [ "light_source", "torch_item" ] </syntaxhighlight> |} ====高级==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>CustomFields</samp> | ''(可选)'' 此条目的[[模组:公共数据字段#自定义字段|自定义字段]]。 |} ===说明=== * 数据素材中的许多物品并没有在游戏中实现。它们有可能完全没有被应用于游戏;也有可能是虽然没有作为打造品出现,但实际上出现在了[[#物体|物体数据]]或[[#家具|家具数据]]中。 ==靴子== ===数据格式=== 您可以通过编辑<samp>Data/Boots</samp>编辑[[靴子]]数据。这是一个“字符串 → 字符串”字典,其中: * 键为非限定性[[模组:公共数据字段#物品ID|物品ID]]。 * 值为使用斜杠分隔的、包含如下字段的字符串。 {| class="wikitable" |- ! 索引 ! 字段 ! 效果 |- | 0 | 名称 | 内部物品名称(同时也是英语名称)。 |- | 1 | 描述 | 在游戏中显示的、翻译后的物品描述。 |- | 2 | 价格 | '''未使用。''' 实际的价格是通过<samp>(''防御加成'' × 100) + (''免疫加成'' × 100)</samp>计算的。 |- | 3 | 防御加成 | 穿戴时的[[防御]]加成。 |- | 4 | 免疫加成 | 穿戴时的[[免疫]]加成。 |- | 5 | 颜色索引 | 在“颜色贴图”中,靴子的颜色索引。0代表左上角的贴图(若有),否则默认使用<samp>Characters/Farmer/shoeColors</samp>贴图集。 |- | 6 | 显示名称 | 游戏中现实的、翻译后的名称(仅用于非英语素材文件)。 |- | 7 | 颜色贴图 | 包含靴子颜色贴图的素材名称 |- | 8 | 贴图索引 | 靴子在“贴图集”中的索引,0代表左上角的贴图。 |- | 9 | 贴图集 | 包含靴子贴图的贴图集素材名称。 |} 在<samp>Data/Boots</samp>中的靴子数据是如下的“字符串 → 字符串”字典: <syntaxhighlight lang="json"> "511": "Dark Boots/Made from thick black leather./250/4/2/7" </syntaxhighlight> 自定义条目的形式如下: <syntaxhighlight lang="json"> { "Format": "2.2.0", "Changes": [ { "LogName": "Load boots texture", "Action": "Load", "Target": "{{ModId}}/Boots, {{ModId}}/BootsColor", "FromFile": "assets/{{TargetWithoutPath}}.png" }, { "LogName": "Add boots to boots data", "Action": "EditData", "Target": "Data/Boots", "Entries": { "{{ModId}}_OPBoots": "Overpowered Boots/These boots are totally broken!/1000000/100/100/8/Overpowered Boots/{{ModId}}\\BootsColor/0/{{ModId}}\\Boots" } } ] } </syntaxhighlight> ==裤子== ===数据格式=== 您可以通过编辑<samp>Data/Pants</samp>素材以创建或编辑[[裁缝#裤子|裤子]]。此素材包括一个“字符串 → 数据模型”查询,其中: * 键为非限定性[[模组:公共数据字段#物品ID|物品ID]]。 * 值为包含如下字段的数据模型。 ====基本裤子数据==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Name</samp> | ''(可选)'' 物品的内部名称。默认为<samp>Pants</samp>。 |- | <samp>DisplayName</samp><br /><samp>Description</samp> | ''(可选)'' 用于显示游戏中物品名称和描述的[[模组:模板字符串|模板字符串]]。默认为通用的裤子文本(''Pants'' 和''A wearable pair of pants'')。 |- | <samp>Price</samp> | ''(可选)'' 玩家在商店中购买的默认价格。默认为50。 |} ====外观==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Texture</samp> | 包含此裤子贴图的贴图集素材名称。默认为<samp>Characters/Farmer/pants</samp>。 |- | <samp>SpriteIndex</samp> | 贴图集<samp>Texture</samp>中的贴图索引,0代表左上角。 |- | <samp>DefaultColor</samp> | ''(可选)'' 玩家没有[[染色]]时,裤子的颜色(若有)。参见[[模组:公共数据字段#颜色|颜色格式]]。默认为<samp>255 235 203</samp> (对应于布料的颜色)。 |- | <samp>CanBeDyed</samp> | ''(可选)'' 是否可以[[染色]]。默认为false。 |- | <samp>IsPrismatic</samp> | ''(可选)'' 是否为五彩裤子,即不断地变化颜色。若设置,将覆盖<samp>DefaultColor</samp>和<samp>CanBeDyed</samp>字段。默认为false。 |} ====其他==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>CanChooseDuringCharacterCustomization</samp> | ''(可选)'' 是否可以在自定义玩家角色页面上选择此裤子(即创建角色时的界面)。默认为false。 |- | <samp>CustomFields</samp> | 此条目的[[模组:公共数据字段|自定义数据字段]]。 |} ==上衣== ===数据格式=== 您可以通过编辑新版的<samp>Data/Shirts</samp>素材以创建或编辑[[裁缝#上衣|上衣]]。此素材为一个“字符串 → 数据模型”查询,其中: * 键为非限定性[[模组:公共数据字段#物品ID|物品ID]]。 * 值为包含如下字段的数据模型。 ====基本上衣数据==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Name</samp> | ''(可选)'' 物品的内部名称。默认为<samp>Shirt</samp>。 |- | <samp>DisplayName</samp><br /><samp>Description</samp> | ''(可选)'' 用于游戏内名称和描述的[[模组:模板字符串|模板字符串]]。默认为通用上衣文本(''Shirt''和''A wearable shirt'')。 |- | <samp>Price</samp> | ''(可选)'' 玩家购买的价格。默认为50。 |} ====外观==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Texture</samp> | 包含此上衣贴图的贴图集素材名称。默认为<samp>Characters/Farmer/shirts</samp>。 |- | <samp>SpriteIndex</samp> | 贴图集<samp>Texture</samp>中的贴图索引,0代表左上角。 |- | <samp>DefaultColor</samp> | ''(可选)'' 玩家没有[[染色]]时,上衣的颜色(若有)。参见[[模组:公共数据字段#颜色|颜色格式]]。默认为none。 |- | <samp>CanBeDyed</samp> | ''(可选)'' 玩家是否可[[染色]]该上衣。默认为false。 |- | <samp>IsPrismatic</samp> | ''(可选)'' 是否为五彩上衣,即不断地变化颜色。若设置,将覆盖<samp>DefaultColor</samp>和<samp>CanBeDyed</samp>字段。默认为false。 |- | <samp>HasSleeves</samp> | ''(可选)'' 是否绘制上衣袖子。默认为true。 |} ====其他==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>CanChooseDuringCharacterCustomization</samp> | ''(可选)'' 是否可以在自定义玩家角色页面上选择此上衣(即创建角色时的界面)。默认为false。 |- | <samp>CustomFields</samp> | 此条目的[[模组:公共数据字段|自定义数据字段]]。 |} ==家具== 家具是可放置的装饰性物品,包括玩家可以坐着的椅子。 其数据存储在<samp>Data/Furniture</samp>,贴图存储在<samp>TileSheets/furniture</samp>,翻译存储在<samp>Strings/Furniture</samp>,代码存储在<samp>StardewValley.Objects.Furniture</samp>。 ===数据格式=== <samp>Data/Furniture</samp>中的数据为一个“整数 → 字符串”字典,其条目如下: <syntaxhighlight lang="json"> "18": "Country Chair/chair/-1/-1/4/750" </syntaxhighlight> 对于数据素材中的每个条目,其键为该物品的<samp>ParentSheetIndex</samp>,值为斜杠分隔的字符串,包含如下字段: {| class="wikitable" |- ! 索引 ! 字段 ! 效果 |- | 0 | 名称 | 物品内部名称(同时也是英语名称)。 |- | 1 | 类型 | 家具类型。可能的取值为: {| class="wikitable sortable" |- ! value |- | chair |- | bench |- | couch |- | armchair |- | dresser |- | long table |- | painting |- | lamp |- | decor |- | other |- | bookcase |- | table |- | rug |- | window |- | fireplace |- | bed |- | bed double |- | bed child |- | torch |- | sconce |- | randomized_plant |- | fishtank |} |- | 2 | 地块表 | 家具在地块表中所占尺寸。单位为地块。可以形如<samp>{{t|宽度}} {{t|高度}}</samp>(例如<samp>1 2</samp>)。亦可设为<samp>-1</samp>,代表使用此类型家具的默认尺寸。 |- | 3 | 碰撞箱尺寸 | 家具的碰撞箱尺寸,单位为地块。碰撞箱的锚点位于家具左下角,也就是会向上和向右眼神。可以形如<samp>{{t|宽度}} {{t|高度}}</samp>(例如<samp>1 2</samp>)。 亦可设为<samp>-1</samp>,代表使用此类型家具的默认尺寸。 |- | 4 | 旋转 | 允许的旋转类型(1,2 或 4)。 |- | 5 | 价格 | 从商店购入的价格。 |- | 6 | 位置限制 | 家具可放置的位置。 {| class="wikitable sortable" |- ! 值 ! 含义 |- | -1 | 默认(使用对应家具类型的默认值) |- | 0 | 只可室内 |- | 1 | 只可室外 |- | 2 | 室内外均可 |} |- | 7 | 显示名称 | 翻译后的家具名称。可用[[模组:模板字符串|模板字符串]]。 |- | 8 | 贴图集索引 | 贴图集索引 |- | 9 | 贴图集 | ''(可选)'' 贴图集的素材名称。默认为<samp>TileSheets/furniture</samp>。 |- | 10 | 禁止随机出售 | ''(可选)'' 是否禁止该家具出现在随机商店库存和家具目录中。默认为false。 |- | 11 | 上下文标签 | ''(可选)'' 空格分隔的[[模组:物品数据#上下文标签|上下文标签]]列表。默认为none。 |} ==帽子== 帽子是可以被放进物品栏[[帽子]]槽位的物品。 其数据存储在<samp>Data/Hats</samp>,贴图存储在<samp>Characters/Farmer/hats</samp>,代码存储在<samp>StardewValley.Objects.Hat</samp>。 ===数据格式=== <samp>Data/Hats</samp>中存储的帽子数据为一个“整数 → 字符串”的字典。其条目如下: <syntaxhighlight lang="json"> "5": "Official Cap/Looks like it belonged to a postman or policeman. Either way, it's still very soft and smells okay./false/true" </syntaxhighlight> 原版游戏中,帽子的物品ID就是其<samp>ParentSheetIndex</samp>。 数据素材中的每一项,其键名都是帽子的物品ID,其值为斜杠分隔的、包含如下字段的字符串: {| class="wikitable" |- ! 索引 ! 字段 ! 效果 |- | 0 | 名称 | 内部物品名称 |- | 1 | 描述 | 翻译后的描述 |- | 2 | 是否展示发型 | 有三种可能取值:显示玩家的发型(<samp>true</samp>)、更改发型以适应帽子(<samp>false</samp>)或 完全隐藏头发(<samp>hide</samp>)。 |- | 3 | 忽略发型偏移 | 是否忽略帽子位置根据发型的偏移(<samp>true</samp>或<samp>false</samp>之一)。例如,[[眼罩]]此字段为<samp>true</samp>,因为眼罩的位置不受发型的影响;但[[蝴蝶结]]此字段为<samp>false</samp>,因为需要根据发型调整其位置。 |- | 4 | 标签 | 一个空格分隔的“标签”列表。注意,这不是上下文标签,而是用于提供杂项信息的标签。目前,只有<samp>Prismatic</samp>一种标签,代表帽子是五彩的,即颜色会循环变化。 |- | 5 | 显示名称 | 翻译后的名称。 |- | 6 | 贴图索引 | 此帽子在贴图集中的索引 |- | 7 | 贴图集名称 | 此帽子所在贴图集的素材名称。若为空,则使用默认贴图集<samp>Characters/Farmer/hats</samp>。 |} 帽子的类别被硬编码为-95。(<samp>HatDataDefinition.cs::GetData</samp>) ==工具== [[工具]]是可以被玩家挥舞或使用以造成特定效果(挖土、砍树等)的物品。 其数据存储在<samp>Data/Tools</samp>,其贴图存储在<samp>TileSheets/Tools</samp>,其代码存储在 <samp>StardewValley.Tool</samp>,以及不同的子类例如<samp>StardewValley.Tools.Axe</samp>。 ===数据格式=== 可以通过编辑<samp>Data/Tools</samp>数据文件以创建/编辑[[工具]]。此文件为一个“字符串 → 模型”查询,其中: * 键为非限定性[[模组:公共数据字段#物品ID|物品ID]]。 * 值为包含如下字段的数据模型。 ====基本工具数据==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>ClassName</samp> | 在<code>StardewValley.Tools</code>命名空间下,要创建的C#类的名称。此类必须为<samp>StardewValley.Tool</samp>的子类,且必须有无参数的构造函数。例如,将此字段的值设为<samp>Axe</samp>,游戏会自动创建一个<code>StardewValley.Tools.Axe</code>实例。 主要的取值为: * 主要工具(<samp>Axe</samp>、<samp>FishingRod</samp>、<samp>Hoe</samp>、<samp>MeleeWeapon</samp>、<samp>MilkPail</samp>、<samp>Pan</samp>, <samp>Pickaxe</samp>、<samp>Shears</samp>、<samp>Wand</samp> 和 <samp>WateringCan</samp>); * 特殊的<samp>GenericTool</samp>类型,应用来自<samp>Data/Tools</samp>的数据,且仅有通用逻辑,因此C#模组可以接入其自定义逻辑; * 从游戏中移除的两种工具(<samp>Lantern</samp>和<samp>Raft</samp>)可能无法正常运行。 |- | <samp>Name</samp> | 工具物品的内部名称。 |- | <samp>DisplayName</samp><br /><samp>Description</samp> | 用于显示游戏内名称和描述的[[模组:模板字符串|模板字符串]]。 |- | <samp>AttachmentSlots</samp> | ''(可选)'' 工具的附件槽位数量。注意只有<samp>FishingRod</samp>工具拥有渲染和使用附件槽位的代码。默认为<samp>-1</samp>,也就是保持工具物品类所设置的默认值。 |- | <samp>SalePrice</samp> | ''(可选)'' 商店中玩家购入此物品的默认售价。默认为<samp>-1</samp>,此时需要在商店中手动设置售价。 |- | <samp>CustomFields</samp> | 此条目的[[模组:公共数据字段#自定义字段|自定义字段]]。 |} ====外观==== 注意,如果希望在世界中正确绘制工具(即,在玩家使用它时)需要自定义代码。 {| class="wikitable" |- ! 字段 ! 意图 |- | <samp>Texture</samp> | 贴图集的素材名称。 |- | <samp>SpriteIndex</samp> | 工具在贴图集<samp>Texture</samp>中的贴图索引。0代表最上一行。 |- | <samp>MenuSpriteIndex</samp> | ''(可选)'' <samp>Texture</samp>中的物品图标索引。默认为<samp>SpriteIndex</samp>。 |} ====升级==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>UpgradeLevel</samp> | ''(可选)'' 工具的升级等级。默认为<samp>-1</samp>,即保持与工具类所设的默认值相同。 |- | <samp>ApplyUpgradeLevelToDisplayName</samp> | ''(可选)'' 是否根据等级调整<samp>DisplayName</samp>。例如,1级的斧头为“铜斧头”。默认为false。 英语下的显示名称为: {| class="wikitable" |- ! 升级等级 ! 显示名称格式 |- | 1 | Copper {{t|display name}} |- | 2 | Steel {{t|display name}} |- | 3 | Gold {{t|display name}} |- | 4 | Iridium {{t|display name}} |} |- | <samp>ConventionalUpgradeFrom</samp> | ''(可选)'' 若设置,则 If set, prepends an upgrade for the given tool ID to the <samp>UpgradeFrom</samp> field. This applies these rules (based on the <samp>UpgradeLevel</samp> field, not the upgrade level of the specified tool ID): {| class="wikitable" |- ! 升级等级 ! 售价 ! 所需物品 |- | 1 | {{price|2000}} | {{name|Copper Bar|5}} |- | 2 | {{price|5000}} | {{name|Iron Bar|5}} |- | 3 | {{price|10000}} | {{name|Gold Bar|5}} |- | 4 | {{price|25000}} | {{name|Iridium Bar|5}} |} 例如,铱斧头指定了如下值: <syntaxhighlight lang="js"> "ConventionalUpgradeFrom": "(T)GoldAxe" </syntaxhighlight> |- | <samp>UpgradeFrom</samp> | ''(可选)'' 从克林特的[[铁匠铺#升级工具|铁匠铺]]升级工具所需要求。若指定多个条目,则使用第一个匹配的条目。 此字段为包含如下字段的数据模型所组成的列表。 {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>Price</samp> | ''(可选)'' 购买升级的价格。默认为0。 |- | <samp>RequireToolId</samp> | ''(可选)'' 为[[模组:公共数据字段#物品ID|限定性或非限定性物品ID]]。若设置,则背包中必须有指定工具才能升级。购买升级后原工具将被摧毁。 |- | <samp>TradeItemId</samp> | ''(可选)'' 为[[模组:公共数据字段#物品ID|限定性或非限定性物品ID]]。若设置,则必须给铁匠指定物品才能升级(例如原版中许多工具需要金属锭)。 |- | <samp>TradeItemAmount</samp> | ''(可选)'' 所需的<samp>TradeItemId</samp>数量。默认为1。 |- | <samp>Condition</samp> | ''(可选)'' 指示是否可以升级的[[模组:游戏状态查询|游戏状态查询]]。默认为总是可以。 |} 例如,下列代码相当于钢斧头的升级设置: <syntaxhighlight lang="js"> "UpgradeFrom": [ { "RequireToolId": "(T)CopperAxe", "Price": 5000, "TradeItemId": "(O)335", // Iron Bar "TradeItemAmount": 5 } ] </syntaxhighlight> 若希望工具总可用,则可忽略这些条件。例如: <syntaxhighlight lang="js"> "UpgradeFrom": [ { "Price": 5000 } ] </syntaxhighlight> 注意克林特需要几天时间来升级工具。若希望直接卖掉工具,则将其[[模组:商店|添加到常规商店]]。 |} ====游戏逻辑==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>CanBeLostOnDeath</samp> | 玩家[[冒险家公会#物品找回服务|晕倒后是否丢失此物品]]。默认为false。 |} ====扩展性==== {| class="wikitable" |- ! 字段 ! 含义 |- | <samp>ModData</samp> | ''(可选)'' 工具被创建时所用的模组数据值,可通过<samp>tool.modData</samp>字典获取。例如: <syntaxhighlight lang="js"> "ModData": { "PowerLevel": 9000 } </syntaxhighlight> |- | <samp>SetProperties</samp> | ''(可选)'' 设置工具C#类的任意属性。例如,下面示例会禁用工具动画,且禁止工具消耗体力: <syntaxhighlight lang="js"> "SetProperties": { "InstantUse": true, "IsEfficient": true } </syntaxhighlight> |} ==武器== [[武器]]是玩家用来杀伤怪物的工具。 其数据存储在<samp>Data/Weapons</samp>,其贴图存储在<samp>TileSheets/weapons</samp>,其代码存储在<samp>StardewValley.Tools.MeleeWeapon</samp>和<samp>StardewValley.Tools.Slingshot</samp>。 ===数据格式=== <samp>Data/Weapons</samp>中的数据为一个“字符串 → 数据模型”查询,其中: * 键为武器的非限定性[[模组:公共数据字段#物品ID|物品ID]]。 * 值为包含如下字段的模型。 ====基本武器信息==== {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>Name</samp> | 内部名称 |- | <samp>DisplayName</samp><br /><samp>Description</samp> | 用于显示翻译后名称和描述的[[模组:模板字符串|模板字符串]]。 |- | <samp>Type</samp> | 武器类型。可能取值为:<samp>0</samp>(刀)、<samp>1</samp>(匕首)、<samp>2</samp>(棒或锤)或 <samp>3</samp>(剑)。 |} ====外观==== {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>Texture</samp> | 该武器所在的贴图集的素材名称。 |- | <samp>SpriteIndex</samp> | 物品在贴图集<samp>Texture</samp>中的索引。0代表左上角。 |} ====统计==== {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>MinDamage</samp><br /><samp>MaxDamage</samp> | 使用此武器对怪物的最小和最大伤害。 |- | <samp>Knockback</samp> | ''(可选)'' 目标被武器击中时后退多远。为相对于[[生锈的剑]]之类的基础武器的乘数(例<samp>1.5</samp>代表生锈的剑的150%)。默认为1。 |- | <samp>Speed</samp> | ''(可选)'' 玩家可以多快地挥舞此武器。每点相当于40毫秒,0点相当于0毫秒。这会和玩家的[[速度|武器速度]]叠加。默认为0。 |- | <samp>Precision</samp> | ''(可选)'' 减少miss的概率。默认为0。 |- | <samp>Defense</samp> | ''(可选)'' 减少玩家受到的伤害。默认为0。 |- | <samp>AreaOfEffect</samp> | ''(可选)'' 略增大效果区域。默认为0。 |- | <samp>CritChance</samp> | ''(可选)'' 暴击几率,为 0(从不)至 1(每次)之间的小数。其中,0.02为默认值。 |- | <samp>CritMultiplier</samp> | ''(可选)'' 暴击所造成的伤害是普通攻击的多少倍。可以为小数。默认为3。 |} ====游戏逻辑==== {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>CanBeLostOnDeath</samp> | 玩家[[冒险家公会#物品找回服务|晕倒后此工具是否丢失]]。默认为true。 |- | <samp>MineBaseLevel</samp><br /><samp>MineMinLevel</samp> | ''(可选)'' 影响[[#矿井宝箱掉落|矿井宝箱掉落]]此武器的基础层数和最小层数。默认为-1,代表不可自动掉落。 |} ====高级==== {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>Projectiles</samp> | ''(可选)'' 使用该武器时发射的抛射物,它会按直线运动,直到击中怪物、造成伤害。会分别发射列表中列出的所有抛射物。 此字段为包含如下字段的数据模型所组成的列表(列表中每项都会生成一个抛射物): {| class="wikitable" |- ! 字段 ! 效果 |- | <samp>Id</samp> | 抛射物的[[模组:公共数据字段#唯一字符串ID|唯一字符串ID]]。 |- | <samp>Damage</samp> | ''(可选)'' 抛射物击中怪物造成的伤害。默认为10。 |- | <samp>Explodes</samp> | ''(可选)'' 抛射物撞到东西时是否爆炸。默认为false。 |- | <samp>Bounces</samp> | ''(可选)'' 抛射物在自毁前最多可以在墙壁上反弹多少次。默认为0。 |- | <samp>MaxDistance</samp> | ''(可选)'' 抛射物能到达的最大距离,单位为地块。默认为4。 |- | <samp>Velocity</samp> | ''(可选)'' 抛射物运动的速度。默认为10。 |- | <samp>RotationVelocity</samp> | ''(可选)'' 旋转速度。默认为32。 |- | <samp>TailLength</samp> | ''(可选)'' 抛射物尾迹长度。默认为1。 |- | <samp>FireSound</samp><br /><samp>BounceSound</samp><br /><samp>CollisionSound</samp> | ''(可选)'' 发射抛射物、抛射物反弹或撞到东西的音效。三者均默认为none。 |- | <samp>MinAngleOffset</samp><br /><samp>MaxAngleOffset</samp> | ''(可选)'' 每次发射该抛射物时,相对发射方向的随机偏移。二者均默认为0,此时会以玩家面向方向的90°角方位发射。 |- | <samp>SpriteIndex</samp> | ''(可选)'' <samp>TileSheets/Projectiles</samp>素材文件中的贴图集索引。默认为11(闪光的黄色球体贴图)。 |- | <samp>Item</samp> | ''(可选)'' 发射的物品。若设置,则重写<samp>SpriteIndex</samp>。 此字段为包含如下字段的数据模型所组成的列表: {| class="wikitable" |- ! 字段 ! 效果 |- | ''公共字段'' | 参见[[模组:物品查询#物品生成字段]]以获取关于弹药物品支持的一般物品字段。 若设置为返回多个物品的[[模组:物品查询|物品查询]],则会随机选择其中一个。 |} |} 注意这些实际上是武器发射的魔法抛射物,不能像[[弹弓]]一样直接瞄准。 |- | <samp>CustomFields</samp> | 此条目的[[模组:公共数据字段#自定义字段|自定义字段]]。 |} 武器的类别被硬编码为-98(<samp>Object.weaponCategory</samp>)。 ===弹弓说明=== * 基础[[弹弓]]在武器数据中的<samp>ParentSheetIndex</samp>为32,每升一级,索引+1(最多不超过34,尽管原版中只能获取32和33)。 * 弹弓伤害是[[弹弓#弹药|动态计算]]的,与武器数据无关。 ===矿井宝箱掉落=== 当玩家打碎[[矿井]]中的宝箱时,有一定概率掉落物品。如下所示为选取掉落物的机制<ref>参见游戏代码中的<samp>Utility.getUncommonItemForThisMineLevel</samp></ref>: <ol> <li>匹配[[#游戏逻辑|<samp>MineMinLevel</samp>]]低于当前矿井层数的物品。</li> <li>从上一步所得列表中,基于[[#游戏逻辑|<samp>MineBaseLevel</samp>]]和当前矿井层数之差进行概率检查。其中,概率为中心落在基础层数的钟形曲线: {| class="wikitable" |- ! 层数差 ! 概率 |- | 0 | 100% |- | 5 | 92% |- | 10 | 71% |- | 15 | 46% |- | 20 | 25% |- | 25 | 4% |} 层数差取绝对值;例如,基础层数在当前层数之上/之下5层都会有92%的概率。(此概率依据[[wikipedia:Gaussian function|正态分布]] <code>e<sup>-(当前层数 - 基础层数)<sup>2</sup> / (2 * 12<sup>2</sup>)</sup></code> 计算。)</li> <li>寻找层数差最小的武器,将其加入列表(若此物品在第二步中被选中,则有双倍几率掉落)。</li> <li>从余下武器列表中随机选取一个掉落物。</li> </ol> ==另请参阅== * [[模组:目录]],以获取相关内容,例如[[模组:农作物数据|作物]]、[[模组:鱼类数据|鱼类]]、[[模组:礼物喜好数据|礼物喜好]]以及[[模组:配方数据|配方]]的相关内容。 ==参考== <references> <ref name="mushroom box">指[[山洞#蘑菇|农场山洞]]中的蘑菇箱。</ref> </references> ==历史== {{History|1.6|物品现在存储在<samp>Data/Objects</samp>而不是<samp>Data/ObjectInformation</samp>中,且有了全新格式。}} {{History|1.6|帽子的字段4现在用于标签,而非显示名称。}} {{History|1.6|所有语言都使用了显示名称(display name)字段。}} {{History|1.6|为所有物品数据添加了贴图集和贴图集索引字段。}} {{History|1.6|现在所有类型的物品都使用字符串ID。}} [[Category:模组]] [[en:Modding:Object data]] [[ru:Модификации:Объекты]]
该页面使用的模板:
Template:Collapse
(
查看源代码
)
Template:Content Patcher version
(
查看源代码
)
Template:History
(
查看源代码
)
Template:Name
(
查看源代码
)
Template:Name/styles.css
(
查看源代码
)
Template:Nexus mod
(
查看源代码
)
Template:Price
(
查看源代码
)
Template:T
(
查看源代码
)
Template:Version
(
查看源代码
)
返回至
模组:物品数据
。
导航菜单
个人工具
创建账户
登录
名字空间
模组
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
未翻译的页面
帮助:编辑入门
随机页面
链接
官方网站
官方论坛
官方商品
社交媒体
工具
链入页面
相关更改
上传文件
特殊页面
页面信息