Template:NpcData/doc: Difference between revisions

LVL (talk | contribs)
Added templatedata
LVL (talk | contribs)
Updated doc to reflect current code and made it easier to understand
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
This template is a shortcut for [[Module:NpcData]] to make it easier to display NPC stats on a page.
This template allows you to display NPC stats automatically using the game files. It pulls data directly from [[Data:NpcData.json]].


It can be used to get a single stat (like `MaxHealth`) or an item from a list of stats (like the 4th value in a list of resistances).
== ⚡ Quick Start ==
# Go to [[Data:NpcData.json]] and find the NPC you want.
# Look at the "path" to the stat you need.
# Copy that path into the template, separating each step with a pipe <code>|</code>.


== How to Use ==
'''Basic Example:'''
<code><nowiki>{{NpcData|trooper_medic|MaxHealth}}</nowiki></code>


=== Getting a Single Stat ===
== 📖 How to Build a Path ==
This is the most common use. Provide the information in the following order.
JSON data is like a set of nested folders. To get a specific number, you have to tell the template which folders to open.


'''Syntax'''
=== 1. Find the NPC Name ===
<code><nowiki>{{NpcData|NPC Name|Stat Name|Rounding}}</nowiki></code>
The first parameter is always the "internal name" of the unit.
* '''Common names:''' <code>npc_boss_tier2</code> (Walker), <code>trooper_normal</code> (Trooper), <code>npc_super_neutral</code> (Mid Boss).


'''Parameters'''
=== 2. Follow the Boxes (The "Double Box" Rule) ===
* '''First parameter (NPC Name):''' The internal key for the NPC (e.g., `npc_boss_tier2`).
When looking at the [[Data:NpcData.json|Data Viewer]], follow the lines to your stat.
* '''Second parameter (Stat Name):''' The name of the stat you want to look up (e.g., `MaxHealth`).
* '''Third parameter (Rounding):''' (Optional) A number to round the result to that many significant figures.


'''Examples'''
* '''Standard Stat (Single Box):'''
* To get the max health of a Medic Trooper:
*: If the stat is just inside a standard box, just add its name.
** '''Code:''' <code><nowiki>{{NpcData|trooper_medic|MaxHealth}}</nowiki></code>
*: ''Example:'' <code>ShieldLogic</code> is a standard box.
** '''Result:''' {{NpcData|trooper_medic|MaxHealth}}
*: '''Code:''' <code><nowiki>{{NpcData|npc_super_neutral|ShieldLogic|BaseAbsorptionPerSecond}}</nowiki></code>


* If you misspell a stat, you will see an error:
* '''List / Array (Double Box):'''
** '''Code:''' <code><nowiki>{{NpcData|trooper_medic|MaxHeath}}</nowiki></code> <!-- Note the typo -->
*: '''Important:''' If you see a '''box inside a box''' (like <code>IntrinsicModifiers</code> or <code>ResistValues</code>), this is a '''List'''.
** '''Result:''' {{NpcData|trooper_medic|MaxHeath}}
*: You cannot just ask for the stat; you must use a '''Number''' to tell the template which item in the list to look at (1 for the 1st, 2 for the 2nd, etc.).
*: ''Example:'' <code>IntrinsicModifiers</code> is a list.
*: '''Code:''' <code><nowiki>{{NpcData|npc_super_neutral|IntrinsicModifiers|1|HEALTH_REGEN_PER_SECOND}}</nowiki></code>


----
=== 3. Rounding (Optional) ===
=== Getting an Item from a List ===
If the number is too long (e.g., 0.333333), you can add a number at the very end to round it.
To get a single value from a list, you must use the named `index=` parameter.
* '''Note:''' This uses '''Significant Figures''', not decimal places.
* <code>...|2}}</code> turns <code>1250</code> into <code>1300</code>.
* <code>...|2}}</code> turns <code>0.125</code> into <code>0.13</code>.


'''Syntax'''
== 📋 Copy-Paste Examples ==
<code><nowiki>{{NpcData|NPC Name|List Name|index=Position Number}}</nowiki></code>


'''Parameters'''
; Simple Stats
* '''First parameter (NPC Name):''' The internal key for the NPC.
: <code><nowiki>{{NpcData|trooper_medic|MaxHealth}}</nowiki></code> → {{NpcData|trooper_medic|MaxHealth}}
* '''Second parameter (List Name):''' The name of the list property (e.g., `NearbyEnemyResistanceValues`).
* '''index=''' The position in the list. The first item is `1`, the second is `2`, and so on.


'''Example'''
; Nested Stats (Shields, Regen)
* The Tier 2 Boss has a list of resistance values. To get the 4th value in that list:
: <code><nowiki>{{NpcData|npc_super_neutral|ShieldLogic|BaseAbsorptionPerSecond}}</nowiki></code> → {{NpcData|npc_super_neutral|ShieldLogic|BaseAbsorptionPerSecond}}
** '''Code:''' <code><nowiki>{{NpcData|npc_boss_tier2|NearbyEnemyResistanceValues|index=4}}</nowiki></code>
 
** '''Result:''' {{NpcData|npc_boss_tier2|NearbyEnemyResistanceValues|index=4}}
; Abilities (Using Slot Names)
: <code><nowiki>{{NpcData|npc_boss_tier2|BoundAbilities|ESlot_Signature_1|Damage}}</nowiki></code> → {{NpcData|npc_boss_tier2|BoundAbilities|ESlot_Signature_1|Damage}}
 
; Lists/Arrays (Using Numbers)
: ''Getting the 4th value from a list of resistance numbers:''
: <code><nowiki>{{NpcData|npc_boss_tier2|NearbyEnemyResist|ResistValues|4}}</nowiki></code> → {{NpcData|npc_boss_tier2|NearbyEnemyResist|ResistValues|4}}
 
; Rounding
: <code><nowiki>{{NpcData|npc_boss_tier2|MaxHealth|2}}</nowiki></code> → {{NpcData|npc_boss_tier2|MaxHealth|2}}
 
== ❌ Common Errors ==
* <span class="error">Error: Key "X" not found...</span>
*: You likely spelled the stat name wrong, or you forgot a step in the path (like missing a folder name).
* <span class="error">Error: Path points to a table/object...</span>
*: You stopped too early! You pointed to a "folder" (like <code>ShieldLogic</code>) instead of a specific number inside it. Add one more parameter to get the specific stat.


<templatedata>
<templatedata>
{
{
"description": "A shortcut for Module:NpcData to display stats for NPCs, either a single value or an item from a list.",
"description": "Displays NPC stats from game files. Use the Data:NpcData.json page to find the correct paths.",
"params": {
"params": {
"1": {
"1": {
"label": "NPC Name",
"label": "NPC Name",
"description": "The internal key for the NPC (e.g., npc_boss_tier2).",
"description": "The internal key (e.g., npc_boss_tier2).",
"type": "string",
"type": "string",
"required": true,
"required": true,
"example": "trooper_medic",
"example": "trooper_medic"
"aliases": [ "npc" ]
},
},
"2": {
"2": {
"label": "Stat or List Name",
"label": "Path Step 1",
"description": "The name of the stat (e.g., MaxHealth) or the list (e.g., NearbyEnemyResistanceValues).",
"description": "The first step in the path (e.g., MaxHealth or BoundAbilities).",
"type": "string",
"type": "string",
"required": true,
"required": true,
"example": "MaxHealth",
"example": "MaxHealth"
"aliases": [ "stat" ]
},
},
"3": {
"3": {
"label": "Path Step 2 / Rounding",
"description": "The next step in the path OR an optional rounding number.",
"type": "string",
"required": false
},
"4": {
"label": "Path Step 3 / Rounding",
"description": "The next step in the path OR an optional rounding number.",
"type": "string",
"required": false
},
"5": {
"label": "Path Step 4 / Rounding",
"description": "The next step in the path OR an optional rounding number.",
"type": "string",
"required": false
},
"6": {
"label": "Path Step 5 / Rounding",
"description": "The next step in the path OR an optional rounding number.",
"type": "string",
"required": false
},
"7": {
"label": "Path Step 6 / Rounding",
"description": "The next step in the path OR an optional rounding number.",
"type": "string",
"required": false
},
"8": {
"label": "Rounding",
"label": "Rounding",
"description": "(Optional) A number to round a stat to that many significant figures. Does not apply when getting an item from a list.",
"description": "Optional: Round to this many Significant Figures (e.g., 2). Only used if this is the final parameter.",
"type": "number",
"required": false,
"aliases": [ "round" ]
},
"index": {
"label": "Index",
"description": "The position of the item to get from a list (e.g., 4 for the 4th item). Using this parameter changes the template's behavior to get an item from a list.",
"type": "number",
"type": "number",
"required": false,
"required": false
"example": "4"
}
}
},
},