Difference between revisions of "Template:BoM"

From ChatWars Wiki
Jump to: navigation, search
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{#vardefine: recipeSource | {{{source|{{PAGENAME}} }}} }}{{#vardefine: outputMode | {{{mode|tree}}} }}<!--
+
{{#vardefine: recipeSource | {{{source|{{ReplaceNumericCharEncoding|string={{PAGENAME}} }} }}} }}{{#vardefine: outputMode | {{{mode|all}}} }}{{#vardefine: incomplete | {{#show: {{#var: recipeSource}} | ?BoolRecipeIncomplete }} }}<!--
 
-->{{#vardefine: resourceList|}}<includeonly><!--
 
-->{{#vardefine: resourceList|}}<includeonly><!--
 
--><div class="mw-collapsible mw-collapsed" style="width: 15%; overflow: visible;" data-expandtext="Show BoM" data-collapsetext="Hide BoM">
 
--><div class="mw-collapsible mw-collapsed" style="width: 15%; overflow: visible;" data-expandtext="Show BoM" data-collapsetext="Hide BoM">
Line 17: Line 17:
 
     |?Qty
 
     |?Qty
 
     }}
 
     }}
}}
+
}}<!--
<!-- tree style list of resources + intermediate steps-->
+
 
 +
Tree style list of resources + intermediate steps-->{{#ifeq: {{#var: incomplete}} | true | <br>''ATTENTION: Recipe and thus Bill of Materials is incomplete!''<br> }}
 
{{#switch: {{#var: outputMode}}
 
{{#switch: {{#var: outputMode}}
 
   | tree | all = {{#var: outputBuffer}}
 
   | tree | all = {{#var: outputBuffer}}
 
}}<!--
 
}}<!--
 +
 
List of basic resources + mana usage
 
List of basic resources + mana usage
 
-->{{#switch: {{#var: outputMode}}
 
-->{{#switch: {{#var: outputMode}}
   | list | all = {{#vardefine: resourceList
+
   | list | all = <br>{{#arraydefine: outputBufferList | {{#var: outputBuffer}} | * }} <!-- load tree style BoM list into an array separated by * (generates empty elements for deeper indentations eg: ***)
                   | {{#ask:
+
              -->{{#arraydefine: emptyElementArray | * | * }} <!-- generates an array with 2 empty elements (same kind of empty as the ones generated in the step above)
                      [[-Has subobject::{{#var: recipeSource}}]] [[Crafting ingredient.ItemType::+]] [[Crafting ingredient.ItemType::!Recipe (Item)]] [[Crafting ingredient.ItemType::!Piece of Equipment]]
+
              -->{{#arraydiff: outputBufferList | outputBufferList | emptyElementArray }} <!-- filters out all empty elements from the outputbufferlist array by using the empty elements from emptylementarray as filter comparison
                      |mainlabel=-
+
              -->{{#arrayslice: outputBufferList | outputBufferList | 1}} <!-- remove the one empty element that somehow makes it through the filter (dont know dont care)--><!--
                       |headers=hide
+
 
                       |format=template
+
              -->{{#arraydefine: neededBasicResources}}{{#arraydefine: neededQuantities}}{{#vardefine: totalMana | 0 }}{{#vardefine: totalStock | 0 }}{{#vardefine: i | 0 }}<!--
                       |template=ResourceBreakdown
+
              -->{{#while:
                       |userparam=0;1<!-- first number is depth, second is multiplier-->
+
                   | {{#ifexpr: {{#var: i}} < {{#arraysize: outputBufferList}} | true }}
                       |sort=Qty,Crafting ingredient
+
                  | {{#vardefine: startPosResource | {{#expr: {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{!}} }} + 1 }} }}<!--
                       |order=desc,asc
+
                  -->{{#vardefine: endPosResource | {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | ]] }} }}<!--
                       |?Crafting ingredient
+
                  -->{{#vardefine: resource | {{#sub: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{#var: startPosResource}} | {{#expr: {{#var: endPosResource}} - {{#var: startPosResource}} }} }} }}<!--
                      |?Qty
+
                  -->{{#ifeq: {{#show: {{#var: resource}} |?BoolCraft }} | false <!-- checks if resource in that line is a basic resource that has to be added to the tally-->
 +
                      | {{#vardefine: arrayPos | {{#arraysearch: neededBasicResources | {{#var: resource}} }} }}<!--
 +
                      -->{{#if: {{#var: arrayPos}} <!-- if resource is found (already exists in that array) no new element is added, old element is modified, if not in the array yet, added-->
 +
                          |
 +
                          | {{#arraydefine: newResource | {{#var: resource}} }}<!--
 +
                          -->{{#arraymerge: neededBasicResources | neededBasicResources | newResource }}<!--
 +
                          -->{{#arraydefine: newQuantity | 0 }}<!--
 +
                          -->{{#arraymerge: neededQuantities | neededQuantities | newQuantity }}<!--
 +
                          -->{{#vardefine: arrayPos | {{#arraysearch: neededBasicResources | {{#var: resource}} }} }}
 +
                        }}<!--
 +
                       -->{{#vardefine: oldQuantitySum | {{#arrayindex: neededQuantities | {{#var: arrayPos}} }} }}<!--
 +
                       -->{{#vardefine: newQuantity | {{#sub: {{#arrayindex: outputBufferList | {{#var: i}} }} | 0 | {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | x }} }} }} <!-- extract quantity from string--><!--
 +
                       -->{{#arraydefine: new | {{#expr: {{#var: oldQuantitySum}} + {{#var: newQuantity}} }} }}<!--
 +
                       -->{{#arrayslice: quantitiesfront | neededQuantities | 0 | {{#var: arrayPos}} }}<!--
 +
                      -->{{#arrayslice: quantitiesback | neededQuantities | {{#expr: {{#var: arrayPos}} + 1 }} }}<!--
 +
                       -->{{#arraymerge: neededQuantities | quantitiesfront | new }}<!--
 +
                       -->{{#arraymerge: neededQuantities | neededQuantities | quantitiesback }}<!--
 +
                       -->{{#vardefine: totalStock | {{#expr: {{#var: totalStock}} + ( {{#var: newQuantity}} * {{#show: {{#var: resource}} |?Weight}} ) }} }}
 
                     }}
 
                     }}
 +
                    {{#ifeq: {{#rpos: {{#arrayindex: outputBufferList | {{#var: i}} }} | Mana }} | -1 <!-- checks if the item uses mana to add to the mana tally-->
 +
                      | <!-- this branch gets executed if there is no mana cost connected to that item-->
 +
                      | {{#vardefine: startPosMana | {{#expr: {{#rpos: {{#arrayindex: outputBufferList | {{#var: i}} }} | ,<nowiki> </nowiki> }} + 2 }} }}
 +
                        {{#vardefine: endPosMana | {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{Emoticon|emoticon=Mana}} }} }}
 +
                        {{#vardefine: mana | {{#sub: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{#var: startPosMana}} | {{#expr: {{#var: endPosMana}} - {{#var: startPosMana}} }} }} }}
 +
                        {{#vardefine: totalMana | {{#expr: {{#var: totalMana}} + {{#var: mana}} }} }}
 +
                    }}
 +
                    {{#vardefine: i | {{#expr: {{#var: i}} + 1 }} }}
 
                 }}
 
                 }}
 +
 +
 +
<!--          -->Basic resources sum:<br><!--
 +
              -->{{#vardefine: n | 0 }}<!--
 +
              -->{{#while:
 +
                  | {{#ifexpr: {{#var: n}} < {{#arraysize: neededBasicResources}} | true }}
 +
                  | {{#arrayindex: neededQuantities | {{#var: n}} }}x [[{{#arrayindex: neededBasicResources | {{#var: n}} }}]]<br>
 +
                    {{#vardefine: n | {{#expr: {{#var: n}} + 1 }} }}
 +
                }}<!--
 +
              -->[[Mana]] Cost: {{#expr: {{#var: totalMana}} + {{#show: {{#var: recipeSource}} |?ManaCrafting}} }}{{Emoticon|emoticon=Mana}} (Ingredients: {{#var: totalMana}}{{Emoticon|emoticon=Mana}} / Item: {{#show: {{#var: recipeSource}} |?ManaCrafting}}{{Emoticon|emoticon=Mana}})<br>
 +
<!--          -->Total [[stock]] weight of basic resources: {{#var: totalStock}}{{Emoticon|emoticon=Stock}}, stock weight of finished item: {{#if: {{#show: {{#var: recipeSource}} |?Weight }} | {{#show: {{#var: recipeSource}} |?Weight }} | [[??]] }}{{Emoticon|emoticon=Stock}}
 
}}</div></div><!--
 
}}</div></div><!--
 
--></includeonly><noinclude>
 
--></includeonly><noinclude>
Generates a BoM (Bill of Materials) for an item. Has three modes:
+
Generates a BoM (Bill of Materials) for an item. Has three modes you can choose with the template parameter <code>outputMode</code>:
* Show the most basic resources with all amounts added up. (WIP, not possible without semantic wiki [https://www.mediawiki.org/wiki/Extension:Arrays array] extension)
+
* <code>outputMode = list</code> - Show the most basic resources with all amounts added up.
* Show a tree style list with all the needed resources as child of the intermediate ingredient with different levels of indentation (done)
+
* <code>outputMode = tree</code> - Show a tree style list with all the needed resources as child of the intermediate ingredient with different levels of indentation (done)
* Show both
+
* <code>outputMode = all</code> - Show both (Default mode in case parameter is left out)
  
 
Uses sub-template [[Template:ResourceBreakdown]]
 
Uses sub-template [[Template:ResourceBreakdown]]
 
[[Category:Template]]
 
[[Category:Template]]
 
</noinclude>
 
</noinclude>

Revision as of 02:54, 18 March 2019

Generates a BoM (Bill of Materials) for an item. Has three modes you can choose with the template parameter outputMode:

  • outputMode = list - Show the most basic resources with all amounts added up.
  • outputMode = tree - Show a tree style list with all the needed resources as child of the intermediate ingredient with different levels of indentation (done)
  • outputMode = all - Show both (Default mode in case parameter is left out)

Uses sub-template Template:ResourceBreakdown