Difference between revisions of "Template:BoM"

From ChatWars Wiki
Jump to: navigation, search
(finished code for list bom, need to clean up and move to actual position)
Line 50: Line 50:
 
[[Category:Template]]
 
[[Category:Template]]
  
<!-- unfinished code, shouldn't affect pages where this template is used-->
+
<!-- needs empty lines removed-->
 
{{#arraydefine: outputBufferList | {{#var: outputBuffer}} | * }} <!-- load tree style BoM list into an array separated by * (generates empty elements for deeper indentations eg: ***)-->
 
{{#arraydefine: outputBufferList | {{#var: outputBuffer}} | * }} <!-- load tree style BoM list into an array separated by * (generates empty elements for deeper indentations eg: ***)-->
 
{{#arraydefine: emptyElementArray | * | * }} <!-- generates an array with 2 empty elements (same kind of empty as the ones generated in the step above)-->
 
{{#arraydefine: emptyElementArray | * | * }} <!-- generates an array with 2 empty elements (same kind of empty as the ones generated in the step above)-->
{{#arraysize: emptyElementArray}}/{{#arrayprint: emptyElementArray}}
 
 
{{#arraydiff: outputBufferList | outputBufferList | emptyElementArray }} <!-- filters out all empty elements from the outputbufferlist array by using the empty elements from emptylementarray as filter comparison-->
 
{{#arraydiff: outputBufferList | outputBufferList | emptyElementArray }} <!-- filters out all empty elements from the outputbufferlist array by using the empty elements from emptylementarray as filter comparison-->
 
{{#arrayslice: outputBufferList | outputBufferList | 1}} <!-- remove the one empty element that somehow makes it through the filter (dont know dont care)-->
 
{{#arrayslice: outputBufferList | outputBufferList | 1}} <!-- remove the one empty element that somehow makes it through the filter (dont know dont care)-->
{{#arraysize: outputBufferList}}/{{#arrayprint: outputBufferList  | <br>}}
 
  
{{#arraydefine: basicResources | {{#ask: [[ItemType::Resource]] [[BoolCraft::false]] |mainlabel= |headers=none |order=asc |limit=5000}} }}
 
 
<!-- those two arrays should have the same length and should coincide with each other - index 0 in neededBasicResources should show "Thread" and the needed quantity of thread in neededQuantities-->
 
<!-- HOW CAN YOU PRINT THE LIST WITHOUT SHOWING THE ONES THAT HAVE 0 QUANTITY AND WITHOUT ITERATING OVER EVERY ELEMENT OF BOTH? arraydiffs? slices? Figure that shit out and you're golden-->
 
<!-- nevermind you just add each resource only after checking if that resource already exists and then add/modify the corresponding quantity in the other array -->
 
 
{{#arraydefine: neededBasicResources}}
 
{{#arraydefine: neededBasicResources}}
 
{{#arraydefine: neededQuantities}}
 
{{#arraydefine: neededQuantities}}
 
{{#vardefine: i | 0 }}
 
{{#vardefine: i | 0 }}
<!--{{#while:
+
{{#while:
 
   | {{#ifexpr: {{#var: i}} < {{#arraysize: outputBufferList}} | true }}
 
   | {{#ifexpr: {{#var: i}} < {{#arraysize: outputBufferList}} | true }}
 
   | {{#vardefine: startPosResource | {{#expr: {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{!}} }} + 1 }} }}
 
   | {{#vardefine: startPosResource | {{#expr: {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{!}} }} + 1 }} }}
 
     {{#vardefine: endPosResource | {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | ]] }} }}
 
     {{#vardefine: endPosResource | {{#pos: {{#arrayindex: outputBufferList | {{#var: i}} }} | ]] }} }}
     {{#vardefine: resource | {{#sub: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{#var: startPosResource}} | {{#expr: {{#var: endPosResource}} {{#var: startPosResource}} }} }}
+
     {{#vardefine: resource | {{#sub: {{#arrayindex: outputBufferList | {{#var: i}} }} | {{#var: startPosResource}} | {{#expr: {{#var: endPosResource}} - {{#var: startPosResource}} }} }} }}
     {{#ifeq: {{#show: {{#var: resource}} |?BoolCraft }} | false
+
     {{#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-->
}}-->
+
          |  
{{#arraysort: neededBasicResources |asc}}
+
          | {{#arraydefine: newResource | {{#var: resource}} }}
 
+
            {{#arraymerge: neededBasicResources | neededBasicResources | newResource }}
<!-- everything below this comment is probably shit and can be thrown away-->
+
            {{#arraydefine: newQuantity | 0 }}
 
+
            {{#arraymerge: neededQuantities | neededQuantities | newQuantity }}
{{#vardefine: i | 0 }}{{#vardefine: x | 1 }}{{#vardefine: totalMana | 0 }}{{#vardefine: calcMana | true }}
+
             {{#vardefine: arrayPos | {{#arraysearch: neededBasicResources | {{#var: resource}} }} }}
{{#while: <!-- checks every kind of basic resource and adds all occurences into an array-->
 
  | {{#ifexpr: {{#var: i}} < {{#arraysize: basicResources}} | true }}
 
  | {{#vardefine: resourceQuantity | 0 }}
 
    {{#if: {{#pos: {{#var: outputBuffer}} | {{#arrayindex: outputBufferList | {{#var: i}} }} }} <!-- checks if resource even exists in recipe tree-->
 
      | {{#vardefine: n | 0 }}
 
        {{#while: <!-- iterates through all elements of the outputBufferList to search for resource XYZ-->
 
          | {{#ifexpr: {{#var: n}} < {{#arraysize: outputBufferList}} | true }}
 
          | {{#if: {{#pos: {{#arrayindex: outputBufferList | {{#var: n}} }} | {{#arrayindex: basicResources | {{#var: i}} }} }} <!-- checks if current line is a basic resource that has to be added to the basic resource list (+ quantity)-->
 
              | {{#vardefine: currentQuantity | {{#sub: {{#arrayindex: outputBufferList | {{#var: n}} }} | 0 | {{#expr: {{#pos: {{#arrayindex: outputBufferList | {{#var: n}} }} }} - 1 }} }} }} <!-- extract quantity from string-->
 
                {{#vardefine: resourceQuantity | {{#expr: {{#var: resourceQuantity}} + {{#var: currentQuantity}} }} }}
 
            }}
 
            {{#ifeq: {{#var: calcMana}} | true
 
              | {{#ifeq: {{#rpos: {{#arrayindex: outputBufferList | {{#var: n}} }} | 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: n}} }} | ,<nowiki> </nowiki> }} + 2 }} }}
 
                    {{#vardefine: endPosMana | {{#pos: {{#arrayindex: outputBufferList | {{#var: n}} }} | {{Emoticon|emoticon=Mana}} }} }}
 
                    {{#vardefine: mana | {{#sub: {{#arrayindex: outputBufferList | {{#var: n}} }} | {{#var: startPosMana}} | {{#expr: {{#var: endPosMana}} - {{#var: startPosMana}} }} }} }}
 
                    {{#vardefine: totalMana | {{#expr: {{#var: totalMana}} + {{#var: mana}} }} }}
 
                }}
 
            }}
 
             {{#vardefine: n | {{#expr: {{#var: n}} + 1 }} }}
 
 
         }}
 
         }}
 +
        {{#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 }}
 
     }}
 
     }}
     {{#ifeq: {{#var: resourceQuantity}} | 0
+
     {{#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 resource quantity is 0 of a given resource-->
+
      | <!-- this branch gets executed if there is no mana cost connected to that item-->
      | {{#var: resourceQuantity}}x {{#arrayindex: basicResources | {{#var: i}} }},<nowiki> </nowiki>
+
      | {{#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: calcMana | false }}
+
     {{#vardefine: i | {{#expr: {{#var: i}} + 1 }} }}
     i: {{#vardefineecho: i | {{#expr: {{#var: i}} + 1 }} }}<br>
+
}}
 +
{{#vardefine: n | 0 }}
 +
{{#while:
 +
  | {{#ifexpr: {{#var: n}} < {{#arraysize: neededBasicResources}} | true }}
 +
  | {{#arrayindex: neededQuantities | {{#var: n}} }}x [[{{#arrayindex: neededBasicResources | {{#var: n}} }}]],<nowiki> </nowiki>
 +
     {{#vardefine: n | {{#expr: {{#var: n}} + 1 }} }}
 
}}
 
}}
Ingredient Mana cost: {{#var: totalMana}}{{Emoticon|emoticon=Mana}}
+
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}})
 
</noinclude>
 
</noinclude>

Revision as of 14:00, 4 January 2019

Generates a BoM (Bill of Materials) for an item. Has three modes:

  • Show the most basic resources with all amounts added up. (WIP)
  • Show a tree style list with all the needed resources as child of the intermediate ingredient with different levels of indentation (done)
  • Show both

Uses sub-template Template:ResourceBreakdown







Mana Cost: Expression error: Missing operand for +.link={{{link}}} (Ingredients: link={{{link}}} / Item: link={{{link}}})