模板:Infobox/doc:修订间差异
更多语言
更多操作
初稿 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
{{documentation header}} | {{documentation header}} | ||
{{Construction}} | |||
== 简介 == | == 简介 == | ||
| 第6行: | 第8行: | ||
此模板不仅用于信息展示,更集成了多种高级功能,是本维基数据化管理体系的基石。 | 此模板不仅用于信息展示,更集成了多种高级功能,是本维基数据化管理体系的基石。 | ||
* | * '''自动化数据计算与展示''':模板能够根据输入的物品基础售价,自动计算并展示不同职业技能加成下的价格,以及加工成工匠物品后的复杂价格体系。 | ||
* | * '''语义化数据存储''':模板在页面加载时,会使用 <code><nowiki>{{#set}}</nowiki></code> 解析器函数将各个参数信息储存为语义属性。这使得物品数据可以在整个维基中被查询和调用,为自动生成列表、数据分析等高级应用提供了支持。 | ||
* | * '''上下文感知显示''':模板的显示内容会根据物品类型动态调整。例如,对于农作物、动物制品或可觅食的矿物,其售价部分会展示完全不同的结构,以适应游戏内复杂的经济系统。 | ||
由于此模板是维基上物品数据的“唯一真实来源”(Single Source of Truth),因此,准确填写模板参数至关重要。您在单个页面上输入的数据,将直接影响到其他依赖这些数据的自动生成页面(例如,按季节分类的农作物列表、按来源分类的物品列表等)的准确性。 | 由于此模板是维基上物品数据的“唯一真实来源”(Single Source of Truth),因此,准确填写模板参数至关重要。您在单个页面上输入的数据,将直接影响到其他依赖这些数据的自动生成页面(例如,按季节分类的农作物列表、按来源分类的物品列表等)的准确性。 | ||
| 第46行: | 第48行: | ||
| 物品的中文名称。 | | 物品的中文名称。 | ||
| <code>|name=咖啡豆</code> | | <code>|name=咖啡豆</code> | ||
| 可选。如果留空,将自动使用当前页面的标题(<code><nowiki>{{PAGENAME}}</nowiki></code> | | 可选。如果留空,将自动使用当前页面的标题(<code><nowiki>{{PAGENAME}}</nowiki></code>)。当物品名称与页面标题不同时(例如页面为“垃圾(物品)”而物品名为“垃圾”)应使用此参数。 | ||
|- | |- | ||
! <code>eng | ! <code>eng</code> | ||
| | | 物品的图片名称。 | ||
| <code>|eng=Coffee Bean</code> | | <code>|eng=Coffee Bean</code> | ||
| '''核心参数''' | | '''核心参数'''。图标会使用 eng 参数,例如左侧的例子会使得 Infobox 直接引用 Coffee Bean.png。此参数是模板内部逻辑判断的关键,用于触发不同的售价计算模式。请务必准确填写。 | ||
|- | |||
! <code>English</code> | |||
| 物品的实际英文名称。 | |||
| <code>|English=Coffee Bean</code> | |||
| 当物品英文名称与使用的图片不同时,才需要使用此参数进行覆盖。 | |||
|- | |- | ||
! <code>id</code> | ! <code>id</code> | ||
| 物品在游戏数据中的数字ID。 | | 物品在游戏数据中的数字ID。 | ||
| <code>|id=433</code> | | <code>|id=433</code> | ||
| | | 一般情况下会自动获取,无法自动获取时需要采手动填写。用于高级数据链接和查询。该 ID 会被储存在一个临时变量中,并显示在信息框底部的“高级”区域内。 | ||
|- | |- | ||
! <code>description</code> | ! <code>description</code> | ||
| 物品在游戏中的描述文本。 | | 物品在游戏中的描述文本。 | ||
| <code>|description= | | <code>|description=在春季和夏季种植。在小桶里放五颗咖啡豆可以制作咖啡。</code> | ||
| 可选。如果留空,模板会尝试通过 <code><nowiki>{{Description | | 可选。如果留空,模板会尝试通过 <code><nowiki>{{Description}}</nowiki></code> 模板获取描述。为了更好地集中管理数据,建议优先更新 <code><nowiki>Description</nowiki></code> 模块下的数据,而不是直接在此填写。 | ||
|- | |- | ||
! <code>image2</code><br><code>image3</code><br><code>image4</code><br><code>image5</code> | ! <code>image2</code><br><code>image3</code><br><code>image4</code><br><code>image5</code> | ||
| 第80行: | 第87行: | ||
! <code>source</code> | ! <code>source</code> | ||
| 物品的获取来源。 | | 物品的获取来源。 | ||
| <code>|source=[[旅行货车]] • [[灰尘精灵]]掉落</code> | | <code>|source=<nowiki>[[旅行货车]] • [[灰尘精灵]]掉落</nowiki></code> | ||
| 建议使用链接指向具体页面。 | | 建议使用链接指向具体页面。 | ||
|- | |- | ||
! <code>location</code> | ! <code>location</code> | ||
| 物品所在的地点。 | | 物品所在的地点。 | ||
| <code>|location=[[矿井]]</code> | | <code>|location=<nowiki>[[矿井]]</nowiki></code> | ||
| | | | ||
|- | |- | ||
! <code>seed</code> | ! <code>seed</code> | ||
| 对应的种子信息。 | | 对应的种子信息。 | ||
| <code>|seed=[[上古种子]]</code> | | <code>|seed=<nowiki>[[上古种子]]</nowiki></code> | ||
| | | | ||
|- | |- | ||
! <code>growth</code> | ! <code>growth</code> | ||
| 农作物的生长所需时间。 | | 农作物的生长所需时间。 | ||
| <code>|growth= | | <code>|growth=28 天</code> | ||
| | | | ||
|- | |- | ||
! <code>buff</code> | ! <code>buff</code> | ||
| 食用后获得的增益效果。 | | 食用后获得的增益效果。 | ||
| <code>|buff={{ | | <code>|buff=<nowiki>{{Name|Farming|link=耕种|+4}}</nowiki></code> | ||
| | | 可以配合 <code><nowiki>{{Name}}</nowiki></code> 模板使用。 | ||
|- | |- | ||
! <code>buffduration</code> | ! <code>buffduration</code> | ||
| 第111行: | 第118行: | ||
| 物品出现的季节。 | | 物品出现的季节。 | ||
| <code>|season=春季 • 夏季</code> | | <code>|season=春季 • 夏季</code> | ||
| 模板会尝试使用 <code><nowiki>{{Season}}</nowiki></code> | | 模板会尝试使用 <code><nowiki>{{Season}}</nowiki></code> 模板来添加图标(只有单个季节时生效)。 | ||
|- | |- | ||
! <code>weather</code> | ! <code>weather</code> | ||
| 物品出现所需的天气。 | | 物品出现所需的天气。 | ||
| <code>|weather=晴天</code> | | <code>|weather=晴天</code> | ||
| 模板会尝试使用 <code><nowiki>{{Weather inline}}</nowiki></code> | | 模板会尝试使用 <code><nowiki>{{Weather inline}}</nowiki></code> 模板来添加图标(只有单个天气时生效)。 | ||
|- | |- | ||
! <code>xp</code> | ! <code>xp</code> | ||
| 获取该物品时获得的经验值。 | | 获取该物品时获得的经验值。 | ||
| <code>|xp= | | <code>|xp=7</code> | ||
| | | | ||
|- | |- | ||
| 第126行: | 第133行: | ||
| 物品的能量和生命值恢复量。 | | 物品的能量和生命值恢复量。 | ||
| <code>|edibility=30</code> | | <code>|edibility=30</code> | ||
| 填写一个数值,模板将通过 <code><nowiki>{{EdibilityGrid}}</nowiki></code> 模板展示不同品质下的恢复量。对于不可食用的物品,请填写 <code>-300</code> 或 <code>不可食用</code> | | 填写一个数值,模板将通过 <code><nowiki>{{EdibilityGrid}}</nowiki></code> 模板展示不同品质下的恢复量。对于不可食用的物品,请填写 <code>-300</code> 或 <code>不可食用</code>。此数据可在游戏文件 <code>Data\ObjectInformation.xnb</code> 中找到。 | ||
|- | |- | ||
! <code>quality</code> | ! <code>quality</code> | ||
| 第136行: | 第143行: | ||
| 物品的基础售价。 | | 物品的基础售价。 | ||
| <code>|sellprice=550</code> | | <code>|sellprice=550</code> | ||
| '''核心参数''' | | '''核心参数'''。此参数的值不仅用于显示,更是触发复杂售价计算的开关。对于不可出售的物品,可填写<code>不可出售</code>或<code>N/A</code>。此数据可在游戏文件 <code>Data\ObjectInformation.xnb</code> 中找到。 | ||
|- | |- | ||
! <code>color</code> | ! <code>color</code> | ||
| | | 用于某些特定工匠物品(如[[罐头瓶|果酱]]、[[罐头瓶|腌菜]]、[[小桶|果酒]]、[[烘干机|果干]]等)的颜色变种。 | ||
| <code>|color=Yellow</code> | | <code>|color=Yellow</code> | ||
| | | 颜色名称必须对应一个有效的图标文件,例如小麦加工的腌菜是黄色的,此参数会影响制成品图标的显示。 | ||
|- | |- | ||
! <code>ingredients</code> | ! <code>ingredients</code> | ||
| 打造该物品所需的材料。 | | 打造该物品所需的材料。 | ||
| <code>|ingredients={{name|木材|50}}{{name|硬木|5}}</code> | | <code>|ingredients=<nowiki>{{name|木材|50}}{{name|硬木|5}}</nowiki></code> | ||
| 填写此参数会自动生成“打造”或“工匠物品”部分。 | | 填写此参数会自动生成“打造”或“工匠物品”部分。 | ||
|- | |- | ||
! <code>recipe</code> | ! <code>recipe</code> | ||
| 配方的来源。 | | 配方的来源。 | ||
| <code>|recipe=[[罗宾]]的商店 ({{price|2000}})</code> | | <code>|recipe=<nowiki>[[罗宾]]</nowiki>的商店 (<nowiki>{{price|2000}}</nowiki>)</code> | ||
| | | | ||
|- | |- | ||
! <code>craftingstation</code> | ! <code>craftingstation</code> | ||
| 制作该物品所需的处理设备。 | | 制作该物品所需的处理设备。 | ||
| <code>|craftingstation=[[熔炉]]</code> | | <code>|craftingstation=<nowiki>[[熔炉]]</nowiki></code> | ||
| | | | ||
|- | |- | ||
| 第164行: | 第171行: | ||
|- | |- | ||
! <code>tingredients</code> | ! <code>tingredients</code> | ||
| | | 拥有“[[技能#钓鱼|捕猎者]]”专业时,打造所需的不同材料。 | ||
| <code>|tingredients={{name|铜锭|1}}{{name|树液|25}}</code> | | <code>|tingredients=<nowiki>{{name|铜锭|1}}{{name|树液|25}}</nowiki></code> | ||
| | | 这是一个非常特殊的参数,仅用于显示“捕猎者”技能对[[蟹笼]]配方的改变。 | ||
|- | |- | ||
! <code>produces</code> | ! <code>produces</code> | ||
| 打造或加工的产物。 | | 打造或加工的产物。 | ||
| <code>|produces={{name|蜂房|1}}</code> | | <code>|produces=<nowiki>{{name|蜂房|1}}</nowiki></code> | ||
| | | | ||
|} | |} | ||
| 第195行: | 第202行: | ||
'''效果分析:''' | '''效果分析:''' | ||
* | * '''基本信息''':正确显示了名称、描述、来源等。 | ||
* | * '''恢复量''':由于填写了 <code>edibility</code>,模板自动调用 <code><nowiki>{{EdibilityGrid}}</nowiki></code> 生成了包含所有品质的能量/生命值恢复表格。 | ||
* | * '''售出价格''':由于 <code>eng = Cave Carrot</code> 在模板的 <code><nowiki>{{#switch}}</nowiki></code> 逻辑中属于一个特定分支,它会显示一个基础售价,并在下方自动生成一个“制成品售出价格”的表格,列出其加工为果汁和腌菜的价格,并同时显示有无“工匠”职业加成(+40%)的对比。这体现了模板的智能性,即便是简单的觅食,也会提示其在工匠体系中的潜力。 | ||
=== 实例二:具有复杂加工链的农作物(上古水果) === | === 实例二:具有复杂加工链的农作物(上古水果) === | ||
| 第217行: | 第224行: | ||
'''效果分析:''' | '''效果分析:''' | ||
* | * '''售出价格''':<code>eng = Ancient Fruit</code> 是 <code><nowiki>{{#switch}}</nowiki></code> 逻辑中的一个关键分支。模板会生成一个复杂的售价结构: | ||
** '''第一层表格''':显示上古水果本身的售出价格。此表格包含两列:“基础售价”和拥有“农耕人”职业(+10%)的售价,并展示所有品质等级的价格。 | ** '''第一层表格''':显示上古水果本身的售出价格。此表格包含两列:“基础售价”和拥有“农耕人”职业(+10%)的售价,并展示所有品质等级的价格。 | ||
** '''第二层表格''':在下方生成一个“制成品售出价格”的内嵌表格。此表格展示了将上古水果加工为'''果酒(Wine)'''、'''果酱(Jelly)'''和'''风干的上古水果(Dried Fruit)'''后的价格。 | ** '''第二层表格''':在下方生成一个“制成品售出价格”的内嵌表格。此表格展示了将上古水果加工为'''果酒(Wine)'''、'''果酱(Jelly)'''和'''风干的上古水果(Dried Fruit)'''后的价格。 | ||
| 第241行: | 第248行: | ||
'''效果分析:''' | '''效果分析:''' | ||
* | * '''售出价格''':<code>eng = Large Milk</code> 触发了模板中一段专门编写的、高度定制化的代码。 | ||
** '''大瓶牛奶本身''':首先,模板会生成一个表格,显示大瓶牛奶的售价。此表格包含“基础售价”和受“畜牧人”职业(+20%)加成的售价。 | ** '''大瓶牛奶本身''':首先,模板会生成一个表格,显示大瓶牛奶的售价。此表格包含“基础售价”和受“畜牧人”职业(+20%)加成的售价。 | ||
** '''制成品(奶酪)''':接下来,模板会生成一个“制成品售出价格”表格,用于展示由大瓶牛奶制成的'''奶酪(Cheese)'''的价格。 | ** '''制成品(奶酪)''':接下来,模板会生成一个“制成品售出价格”表格,用于展示由大瓶牛奶制成的'''奶酪(Cheese)'''的价格。 | ||
** '''三重价格对比''':这个奶酪价格表格是模板逻辑的巅峰体现。它包含'''三列''':基础售价、受“畜牧人”职业(+20%)加成的售价、以及受“工匠”职业(+40%)加成的售价。 | ** '''三重价格对比''':这个奶酪价格表格是模板逻辑的巅峰体现。它包含'''三列''':基础售价、受“畜牧人”职业(+20%)加成的售价、以及受“工匠”职业(+40%)加成的售价。 | ||
* | * '''内置的游戏理解''':模板能够做到这一点,是因为其内部逻辑被硬编码写入了游戏的一条特殊规则:由动物制品加工而来的工匠物品(如奶酪),其售价同时受到“畜牧人”和“工匠”两个职业的影响,但这两个加成并不叠加,玩家需二选一。模板通过并排展示三列价格,将这一复杂且关键的游戏机制直观地呈现给用户,而无需编辑者手动计算或添加任何说明。 | ||
== 技术性细节 == | == 技术性细节 == | ||
{{Advanced}} | |||
本部分为高级用户和模板开发者提供,旨在深入解析 <code><nowiki>{{Infobox}}</nowiki></code> 模板的内部工作原理。 | 本部分为高级用户和模板开发者提供,旨在深入解析 <code><nowiki>{{Infobox}}</nowiki></code> 模板的内部工作原理。 | ||
| 第256行: | 第264行: | ||
# '''语义属性赋值 (<code><nowiki>{{#set}}</nowiki></code>)''':模板代码的第一部分是一个 <code><nowiki>{{#set:... }}</nowiki></code> 解析器函数。当模板被加载时,它会立即读取所有传入的参数(如 <code>|Name={{{name|...}}}</code>,<code>|Sellprice={{{sellprice|...}}}</code> 等),并将它们设置为页面的语义属性。这一步是维基结构化数据的核心,它将每个物品页面变成了一个数据库条目,使得数据可以被 <code><nowiki>{{#ask}}</nowiki></code> 等查询函数在全站范围内调用,极大地增强了维基的自动化能力。 | # '''语义属性赋值 (<code><nowiki>{{#set}}</nowiki></code>)''':模板代码的第一部分是一个 <code><nowiki>{{#set:... }}</nowiki></code> 解析器函数。当模板被加载时,它会立即读取所有传入的参数(如 <code>|Name={{{name|...}}}</code>,<code>|Sellprice={{{sellprice|...}}}</code> 等),并将它们设置为页面的语义属性。这一步是维基结构化数据的核心,它将每个物品页面变成了一个数据库条目,使得数据可以被 <code><nowiki>{{#ask}}</nowiki></code> 等查询函数在全站范围内调用,极大地增强了维基的自动化能力。 | ||
# '''变量定义 (<code><nowiki>{{#vardefine}}</nowiki></code>)''':紧接着,模板使用 <code><nowiki>{{#vardefine:item_id|...}}</nowiki></code> 将物品的ID(通过 <code>id</code> | # '''变量定义 (<code><nowiki>{{#vardefine}}</nowiki></code>)''':紧接着,模板使用 <code><nowiki>{{#vardefine:item_id|...}}</nowiki></code> 将物品的ID(通过 <code>id</code> 参数或 <code><nowiki>{{ID}}</nowiki></code> 模板获得)存储在一个名为 <code>item_id</code> 的变量中。这个变量的作用域是当前页面,它会在稍后被调用,以在信息框的“高级”部分显示物品ID,避免了重复传递参数的需要。 | ||
# '''HTML & CSS 结构''':模板的主体是一个使用wikitable语法构建的HTML表格。表格的各个部分被赋予了特定的CSS ID,如 <code>infoboxborder</code>, <code>infoboxtable</code>, <code>infoboxheader</code>, <code>infoboxsection</code>, <code>infoboxdetail</code>。这些ID确保了全维基所有信息框的样式统一,便于通过通用的CSS进行维护和美化。 | # '''HTML & CSS 结构''':模板的主体是一个使用wikitable语法构建的HTML表格。表格的各个部分被赋予了特定的CSS ID,如 <code>infoboxborder</code>, <code>infoboxtable</code>, <code>infoboxheader</code>, <code>infoboxsection</code>, <code>infoboxdetail</code>。这些ID确保了全维基所有信息框的样式统一,便于通过通用的CSS进行维护和美化。 | ||
| 第263行: | 第271行: | ||
模板的“大脑”是一个庞大的 <code><nowiki>{{#switch:... }}</nowiki></code> 结构,它完全控制着“售出价格”这一行的显示方式。 | 模板的“大脑”是一个庞大的 <code><nowiki>{{#switch:... }}</nowiki></code> 结构,它完全控制着“售出价格”这一行的显示方式。 | ||
* | * '''控制变量''':<code>switch</code> 的判断依据是 <code><nowiki>{{lc:{{{eng|}}}}}}</nowiki></code>。选择使用物品的'''小写英文名'''作为判断键(key)是一个非常稳健的设计决策。它不受页面语言(中文名)的影响,并且通过 <code>lc:</code>(lowercase)函数排除了大小写错误,确保了逻辑判断的稳定性和可维护性。 | ||
* | * '''逻辑分组''':<code>switch</code> 内的众多 <code>case</code> 语句可以按其处理逻辑分为以下几类: | ||
** '''A组:基础职业加成''': | ** '''A组:基础职业加成''': | ||
*** '''例子''':<code>copper bar</code>, <code>maple syrup</code>, <code>duck feather</code>。 | *** '''例子''':<code>copper bar</code>, <code>maple syrup</code>, <code>duck feather</code>。 | ||
| 第287行: | 第295行: | ||
为了提升易用性和容错性,模板内建了复杂的回退(fallback)机制。 | 为了提升易用性和容错性,模板内建了复杂的回退(fallback)机制。 | ||
* | * '''简单回退(<code>name</code>)''':参数 <code>name</code> 的代码是 <code><nowiki>{{{name|{{PAGENAME}}}}}</nowiki></code>。其逻辑是:“检查是否提供了 <code>|name=</code> 参数。如果提供了,则使用其值;如果没有提供,则自动使用当前页面的标题 <code><nowiki>{{PAGENAME}}</nowiki></code> 作为值。” | ||
* | * '''复杂回退链(<code>eng</code>)''':核心参数 <code>eng</code> 的获取逻辑更为复杂和稳健:<code><nowiki>{{{English|{{{eng|{{English|{{{name|{{PAGENAME}}}}}}}}}}}}}</nowiki></code>。其执行优先级如下: | ||
## 首先,检查是否存在 <code>|English=</code> 参数。 | ## 首先,检查是否存在 <code>|English=</code> 参数。 | ||
## 如果不存在,则检查是否存在其别名 <code>|eng=</code> 参数。 | ## 如果不存在,则检查是否存在其别名 <code>|eng=</code> 参数。 | ||
| 第298行: | 第306行: | ||
模板巧妙地运用了解析器函数来处理不同类型的输入,避免了因数据类型不匹配而产生的错误信息。 | 模板巧妙地运用了解析器函数来处理不同类型的输入,避免了因数据类型不匹配而产生的错误信息。 | ||
* | * '''核心构造:<code><nowiki>{{#iferror:{{#expr:... }}}}</nowiki></code>''':在处理 <code>sellprice</code> 和 <code>edibility</code> 这两个预期为数字的参数时,模板使用了 <code><nowiki>{{#iferror}}</nowiki></code> 和 <code><nowiki>{{#expr}}</nowiki></code> 的组合来进行数据校验。这是一个非显而易见但极为重要的设计,它使得同一个参数可以同时接受数字和文本。 | ||
* | * '''工作原理拆解''':以 <code>sellprice</code> 为例,其内部通过两个隐藏参数 <code>Sellprice</code> 和 <code>Sellprice2</code> 来处理该逻辑。简化后的逻辑是 <code><nowiki>{{#iferror: {{#expr:{{{sellprice|}}}}} | {{{sellprice|}}} | ''执行数字计算'' }}</nowiki></code>。 | ||
## <code><nowiki>{{#expr:... }}</nowiki></code> 是MediaWiki的数学计算函数。如果给它的输入是数字(如 <code>100</code>),它会成功返回这个数字。但如果输入是文本(如 <code>不可出售</code>),它会计算失败并返回一个错误。 | ## <code><nowiki>{{#expr:... }}</nowiki></code> 是MediaWiki的数学计算函数。如果给它的输入是数字(如 <code>100</code>),它会成功返回这个数字。但如果输入是文本(如 <code>不可出售</code>),它会计算失败并返回一个错误。 | ||
## <code><nowiki>{{#iferror:... }}</nowiki></code> 的作用就是捕获这个错误。它的语法是 <code><nowiki>{{#iferror: <要检查的表达式> | <如果出错则显示此内容> | <如果未出错则显示此内容>}}</nowiki></code>。 | ## <code><nowiki>{{#iferror:... }}</nowiki></code> 的作用就是捕获这个错误。它的语法是 <code><nowiki>{{#iferror: <要检查的表达式> | <如果出错则显示此内容> | <如果未出错则显示此内容>}}</nowiki></code>。 | ||
| 第314行: | 第322行: | ||
}} | }} | ||
<includeonly> | <includeonly> | ||
[[分类:文档页面]] | [[分类:文档页面]] | ||
</includeonly> | </includeonly> | ||
<noinclude> | <noinclude> | ||
</noinclude> | </noinclude> | ||
2025年6月20日 (五) 19:28的版本
简介
此模板({{Infobox}})是用于展示游戏中各类物品核心信息的标准化信息框。其主要目的在于统一所有物品页面的视觉风格,并作为一个信息中心,集中展示物品最关键的数据。
此模板不仅用于信息展示,更集成了多种高级功能,是本维基数据化管理体系的基石。
- 自动化数据计算与展示:模板能够根据输入的物品基础售价,自动计算并展示不同职业技能加成下的价格,以及加工成工匠物品后的复杂价格体系。
- 语义化数据存储:模板在页面加载时,会使用
{{#set}}解析器函数将各个参数信息储存为语义属性。这使得物品数据可以在整个维基中被查询和调用,为自动生成列表、数据分析等高级应用提供了支持。 - 上下文感知显示:模板的显示内容会根据物品类型动态调整。例如,对于农作物、动物制品或可觅食的矿物,其售价部分会展示完全不同的结构,以适应游戏内复杂的经济系统。
由于此模板是维基上物品数据的“唯一真实来源”(Single Source of Truth),因此,准确填写模板参数至关重要。您在单个页面上输入的数据,将直接影响到其他依赖这些数据的自动生成页面(例如,按季节分类的农作物列表、按来源分类的物品列表等)的准确性。
用法
将以下代码复制到物品页面的最上方,并填写相应参数。
{{Infobox
|name =
|eng =
|description =
|source =
|sellprice =
|edibility =
|quality =
|season =
|growth =
|ingredients =
|recipe =
}}
参数详解
以下是本模板所有可用参数的详细列表。
| 参数 | 说明 | 示例 | 备注 |
|---|---|---|---|
name
|
物品的中文名称。 | name=咖啡豆 | 可选。如果留空,将自动使用当前页面的标题({{PAGENAME}})。当物品名称与页面标题不同时(例如页面为“垃圾(物品)”而物品名为“垃圾”)应使用此参数。
|
eng
|
物品的图片名称。 | eng=Coffee Bean | 核心参数。图标会使用 eng 参数,例如左侧的例子会使得 Infobox 直接引用 Coffee Bean.png。此参数是模板内部逻辑判断的关键,用于触发不同的售价计算模式。请务必准确填写。 |
English
|
物品的实际英文名称。 | English=Coffee Bean | 当物品英文名称与使用的图片不同时,才需要使用此参数进行覆盖。 |
id
|
物品在游戏数据中的数字ID。 | id=433 | 一般情况下会自动获取,无法自动获取时需要采手动填写。用于高级数据链接和查询。该 ID 会被储存在一个临时变量中,并显示在信息框底部的“高级”区域内。 |
description
|
物品在游戏中的描述文本。 | description=在春季和夏季种植。在小桶里放五颗咖啡豆可以制作咖啡。 | 可选。如果留空,模板会尝试通过 {{Description}} 模板获取描述。为了更好地集中管理数据,建议优先更新 Description 模块下的数据,而不是直接在此填写。
|
image2image3image4image5
|
用于展示额外的物品图片,例如物品的不同状态。 | image2=Tea Stage 2 | 只需填写文件名(不含File:和扩展名)。默认图片格式为.png。
|
image2spacing
|
控制第一张和第二张图片之间的间距。 | image2spacing=true | 设为true时,会在两张图片间增加额外空格。
|
ext
|
主图片的文件扩展名。 | ext=gif | 仅在主图片不是.png格式时使用。 |
source
|
物品的获取来源。 | source=[[旅行货车]] • [[灰尘精灵]]掉落 | 建议使用链接指向具体页面。 |
location
|
物品所在的地点。 | location=[[矿井]] | |
seed
|
对应的种子信息。 | seed=[[上古种子]] | |
growth
|
农作物的生长所需时间。 | growth=28 天 | |
buff
|
食用后获得的增益效果。 | buff={{Name|Farming|link=耕种|+4}} | 可以配合 {{Name}} 模板使用。
|
buffduration
|
增益效果的持续时间。 | buffduration=335 | 模板会自动调用 {{duration}} 模板来格式化时间显示。
|
season
|
物品出现的季节。 | season=春季 • 夏季 | 模板会尝试使用 {{Season}} 模板来添加图标(只有单个季节时生效)。
|
weather
|
物品出现所需的天气。 | weather=晴天 | 模板会尝试使用 {{Weather inline}} 模板来添加图标(只有单个天气时生效)。
|
xp
|
获取该物品时获得的经验值。 | xp=7 | |
edibility
|
物品的能量和生命值恢复量。 | edibility=30 | 填写一个数值,模板将通过 {{EdibilityGrid}} 模板展示不同品质下的恢复量。对于不可食用的物品,请填写 -300 或 不可食用。此数据可在游戏文件 Data\ObjectInformation.xnb 中找到。
|
quality
|
控制售价和恢复量是否显示品质等级。 | quality=normal | 默认为显示所有品质(普通、银星、金星、铱星)。设为 normal 或 false 时,将只显示普通品质的价格或恢复量。对于某些工匠物品,此参数还会影响其售价的显示方式。
|
sellprice
|
物品的基础售价。 | sellprice=550 | 核心参数。此参数的值不仅用于显示,更是触发复杂售价计算的开关。对于不可出售的物品,可填写不可出售或N/A。此数据可在游戏文件 Data\ObjectInformation.xnb 中找到。
|
color
|
用于某些特定工匠物品(如果酱、腌菜、果酒、果干等)的颜色变种。 | color=Yellow | 颜色名称必须对应一个有效的图标文件,例如小麦加工的腌菜是黄色的,此参数会影响制成品图标的显示。 |
ingredients
|
打造该物品所需的材料。 | ingredients={{name|木材|50}}{{name|硬木|5}} | 填写此参数会自动生成“打造”或“工匠物品”部分。 |
recipe
|
配方的来源。 | recipe=[[罗宾]]的商店 ({{price|2000}}) | |
craftingstation
|
制作该物品所需的处理设备。 | craftingstation=[[熔炉]] | |
crafttime
|
制作该物品所需的处理时间。 | crafttime=120 | 以分钟为单位。模板会自动调用 {{duration}} 模板来格式化时间显示。
|
tingredients
|
拥有“捕猎者”专业时,打造所需的不同材料。 | tingredients={{name|铜锭|1}}{{name|树液|25}} | 这是一个非常特殊的参数,仅用于显示“捕猎者”技能对蟹笼配方的改变。 |
produces
|
打造或加工的产物。 | produces={{name|蜂房|1}} |
使用实例
以下通过三个不同类型的物品,展示模板的强大功能和灵活性。
实例一:简单的采集品(山洞胡萝卜)
此示例展示了模板的基础功能,用于信息相对简单的物品。
代码:
{{Infobox
|name = 山洞胡萝卜
|eng = Cave Carrot
|description = 一种生长在山洞里的淀粉植物。能让矿工们继续探索。
|source = [[山洞]] • [[垃圾桶]]
|sellprice = 25
|edibility = 30
}}
效果分析:
- 基本信息:正确显示了名称、描述、来源等。
- 恢复量:由于填写了
edibility,模板自动调用{{EdibilityGrid}}生成了包含所有品质的能量/生命值恢复表格。 - 售出价格:由于
eng = Cave Carrot在模板的{{#switch}}逻辑中属于一个特定分支,它会显示一个基础售价,并在下方自动生成一个“制成品售出价格”的表格,列出其加工为果汁和腌菜的价格,并同时显示有无“工匠”职业加成(+40%)的对比。这体现了模板的智能性,即便是简单的觅食,也会提示其在工匠体系中的潜力。
实例二:具有复杂加工链的农作物(上古水果)
此示例展示了模板在处理高价值农作物及其工匠产品时的自动计算能力。
代码:
{{Infobox
|name = 上古水果
|eng = Ancient Fruit
|description = 沉睡了亿万年后,它又重见天日了。
|source = [[上古种子]]
|sellprice = 550
|edibility = 0
|growth = 28天
}}
效果分析:
- 售出价格:
eng = Ancient Fruit是{{#switch}}逻辑中的一个关键分支。模板会生成一个复杂的售价结构:- 第一层表格:显示上古水果本身的售出价格。此表格包含两列:“基础售价”和拥有“农耕人”职业(+10%)的售价,并展示所有品质等级的价格。
- 第二层表格:在下方生成一个“制成品售出价格”的内嵌表格。此表格展示了将上古水果加工为果酒(Wine)、果酱(Jelly)和风干的上古水果(Dried Fruit)后的价格。
- 制成品价格细节:制成品表格同样包含两列:“基础售价”和拥有“工匠”职业(+40%)的售价,清晰地对比了加工前后的巨大经济收益以及职业加成的影响。
这个例子完美地展示了模板如何将游戏内复杂的经济学计算自动化,为玩家提供直观的决策依据。
实例三:具有多重职业加成的动物制品(大瓶牛奶)
此示例展示了模板处理最复杂逻辑的能力,即当一个物品及其加工品受到不同职业技能影响时的情景。
代码:
{{Infobox
|name = 大瓶牛奶
|eng = Large Milk
|description = 一大瓶新鲜的牛奶。
|source = [[牛]]
|sellprice = 190
|edibility = 19
}}
效果分析:
- 售出价格:
eng = Large Milk触发了模板中一段专门编写的、高度定制化的代码。- 大瓶牛奶本身:首先,模板会生成一个表格,显示大瓶牛奶的售价。此表格包含“基础售价”和受“畜牧人”职业(+20%)加成的售价。
- 制成品(奶酪):接下来,模板会生成一个“制成品售出价格”表格,用于展示由大瓶牛奶制成的奶酪(Cheese)的价格。
- 三重价格对比:这个奶酪价格表格是模板逻辑的巅峰体现。它包含三列:基础售价、受“畜牧人”职业(+20%)加成的售价、以及受“工匠”职业(+40%)加成的售价。
- 内置的游戏理解:模板能够做到这一点,是因为其内部逻辑被硬编码写入了游戏的一条特殊规则:由动物制品加工而来的工匠物品(如奶酪),其售价同时受到“畜牧人”和“工匠”两个职业的影响,但这两个加成并不叠加,玩家需二选一。模板通过并排展示三列价格,将这一复杂且关键的游戏机制直观地呈现给用户,而无需编辑者手动计算或添加任何说明。
技术性细节
本部分为高级用户和模板开发者提供,旨在深入解析 {{Infobox}} 模板的内部工作原理。
5.1. 执行流程与数据处理
模板的执行遵循一个清晰的、从数据捕获到最终渲染的流程。
- 语义属性赋值 (
{{#set}}):模板代码的第一部分是一个{{#set:... }}解析器函数。当模板被加载时,它会立即读取所有传入的参数(如|Name=...,|Sellprice=...等),并将它们设置为页面的语义属性。这一步是维基结构化数据的核心,它将每个物品页面变成了一个数据库条目,使得数据可以被{{#ask}}等查询函数在全站范围内调用,极大地增强了维基的自动化能力。 - 变量定义 (
{{#vardefine}}):紧接着,模板使用{{#vardefine:item_id|...}}将物品的ID(通过id参数或{{ID}}模板获得)存储在一个名为item_id的变量中。这个变量的作用域是当前页面,它会在稍后被调用,以在信息框的“高级”部分显示物品ID,避免了重复传递参数的需要。 - HTML & CSS 结构:模板的主体是一个使用wikitable语法构建的HTML表格。表格的各个部分被赋予了特定的CSS ID,如
infoboxborder,infoboxtable,infoboxheader,infoboxsection,infoboxdetail。这些ID确保了全维基所有信息框的样式统一,便于通过通用的CSS进行维护和美化。
5.2. 核心逻辑解析:#switch 条件分支
模板的“大脑”是一个庞大的 {{#switch:... }} 结构,它完全控制着“售出价格”这一行的显示方式。
- 控制变量:
switch的判断依据是{{lc:{{{eng|}}}}}}。选择使用物品的小写英文名作为判断键(key)是一个非常稳健的设计决策。它不受页面语言(中文名)的影响,并且通过lc:(lowercase)函数排除了大小写错误,确保了逻辑判断的稳定性和可维护性。 - 逻辑分组:
switch内的众多case语句可以按其处理逻辑分为以下几类:- A组:基础职业加成:
- 例子:
copper bar,maple syrup,duck feather。 - 逻辑:这些分支会生成一个简单的两列表格,分别展示物品的“基础售价”和对应专业(如铁匠、萃取者、畜牧人)的加成售价。
- 例子:
- B组:农作物/觅食与工匠产品链:
- 例子:
ancient fruit,dandelion,hops。 - 逻辑:这些分支会生成两个嵌套的表格。第一个表格展示物品本身的售价(通常受“农耕人”影响),第二个表格展示其加工为工匠物品(如果酒、果酱、腌菜、啤酒等)后的售价,并与“工匠”职业的加成价格进行对比。
- 例子:
- C组:动物制品与复杂工匠链:
- 例子:
large milk,wool,egg。 - 逻辑:这是最复杂的分支。如“实例三”所述,它会为制成品(如奶酪)生成一个包含三列(基础、畜牧人加成、工匠加成)的价格表,以处理游戏内独特的、重叠的职业加成规则。
- 例子:
- D组:特殊物品与独特乘数:
- 例子:
blackberry,spring onion,dinosaur egg。 - 逻辑:这些分支处理游戏中的特殊增益效果。例如,对于黑莓,它会显示一个与“熊的知识”(售价×3)对比的表格;对于春葱,则是与“青葱技术”(售价×5)的对比。这些乘数被直接硬编码在模板中。
- 例子:
- E组:工匠物品本身:
- 例子:
cheese,wine,pale ale。 - 逻辑:当被描述的物品本身就是工匠物品时,模板会生成一个简化的表格,只显示其“基础售价”和受“工匠”职业加成的售价。
- 例子:
#default默认分支:- 逻辑:任何英文名没有在
case中被明确列出的物品,都会进入#default分支。这个分支提供了一个通用的价格显示方案,通常是调用{{Qualityprice}}模板来展示所有品质的价格。这使得模板能够优雅地处理任何新添加的或简单的物品,而不会产生错误,保证了其向后兼容性和通用性。
- 逻辑:任何英文名没有在
- A组:基础职业加成:
5.3. 默认值与回退机制
为了提升易用性和容错性,模板内建了复杂的回退(fallback)机制。
- 简单回退(
name):参数name的代码是{{{name|{{PAGENAME}}}}}。其逻辑是:“检查是否提供了|name=参数。如果提供了,则使用其值;如果没有提供,则自动使用当前页面的标题{{PAGENAME}}作为值。” - 复杂回退链(
eng):核心参数eng的获取逻辑更为复杂和稳健:{{{English|{{{eng|{{English|{{{name|{{PAGENAME}}}}}}}}}}}}}。其执行优先级如下:
- 首先,检查是否存在
|English=参数。 - 如果不存在,则检查是否存在其别名
|eng=参数。 - 如果两者都不存在,它会尝试调用一个名为
{{English}}的辅助模板,并将当前物品的中文名(通过name参数或页面标题获得)传递给它,期望这个辅助模板能返回对应的英文名。
- 首先,检查是否存在
这个多层回退链确保了作为核心逻辑钥匙的英文名能够被尽可能地获取到,大大降低了因编辑者遗漏或错误填写参数而导致模板显示不正确或功能失效的风险。
5.4. 数据校验与错误处理
模板巧妙地运用了解析器函数来处理不同类型的输入,避免了因数据类型不匹配而产生的错误信息。
- 核心构造:
{{#iferror:{{#expr:... }}}}:在处理sellprice和edibility这两个预期为数字的参数时,模板使用了{{#iferror}}和{{#expr}}的组合来进行数据校验。这是一个非显而易见但极为重要的设计,它使得同一个参数可以同时接受数字和文本。 - 工作原理拆解:以
sellprice为例,其内部通过两个隐藏参数Sellprice和Sellprice2来处理该逻辑。简化后的逻辑是{{#iferror: {{#expr:{{{sellprice|}}}}} | {{{sellprice|}}} | ''执行数字计算'' }}。
{{#expr:... }}是MediaWiki的数学计算函数。如果给它的输入是数字(如100),它会成功返回这个数字。但如果输入是文本(如不可出售),它会计算失败并返回一个错误。{{#iferror:... }}的作用就是捕获这个错误。它的语法是{{#iferror: <要检查的表达式> | <如果出错则显示此内容> | <如果未出错则显示此内容>}}。- 场景A(输入为数字):当编辑者输入
|sellprice=550时,{{#expr:550}}成功执行。因此,#iferror会执行它的第三部分,即调用{{Qualityprice}}等模板进行复杂的价格计算。 - 场景B(输入为文本):当编辑者输入
|sellprice=不可出售时,{{#expr:不可出售}}执行失败并抛出错误。#iferror捕获到这个错误,转而执行它的第二部分,即直接输出{{{sellprice|}}}的原始值,也就是将文本“不可出售”原样显示在页面上。
通过这个优雅的机制,模板实现了对参数的智能判断,使得编辑者可以直观地输入“不可出售”而不用担心破坏页面布局,同时也保证了当输入为有效数字时,所有复杂的自动化计算都能顺利进行。