Ticket #2936: TemplateAnalyzerUpdate.patch

File TemplateAnalyzerUpdate.patch, 5.9 KB (added by wraitii, 9 years ago)

Should work but needs testing with patch (tested with current templates only)

  • source/tools/templatesanalyzer/CreateRMTest.py

     
     1#
     2# CreateRMTest.py
     3# Released under the MIT license by Wraitii, 2014
     4# See ../LICENSES.TXT for more info
     5#
     6
    17import xml.etree.ElementTree as ET
    28import os
    39
  • source/tools/templatesanalyzer/unitTables.py

     
     1#
     2# unitTables.py
     3# Released under the MIT license by Wraitii, 2014
     4# See ../LICENSES.TXT for more info
     5#
     6
    17import xml.etree.ElementTree as ET
    28import os
    39import glob
     
    5157def htout(file, value):
    5258    file.write("<p>" + value + "</p>\n" )
    5359
     60def NumericStatProcess(unit, newValue, templateValue):
     61    if (newValue not in unit):
     62        unit[newValue] = 0; # This is kind of a sanity hack.
     63    if (templateValue.attrib == {}):
     64        unit[newValue] = templateValue.text
     65    elif (templateValue.attrib == "add"):
     66        newValue += templateValue.text
     67    elif (templateValue.attrib == "sub"):
     68        newValue -= templateValue.text
     69    elif (templateValue.attrib == "mul"):
     70        newValue *= templateValue.text
     71    elif (templateValue.attrib == "div"):
     72        newValue /= templateValue.text
     73
    5474def CalcUnit(UnitName, existingUnit = None):
    5575    unit = { 'HP' : "0", "BuildTime" : "0", "Cost" : { 'food' : "0", "wood" : "0", "stone" : "0", "metal" : "0", "population" : "0"},
    5676    'Attack' : { "Melee" : { "Hack" : 0, "Pierce" : 0, "Crush" : 0 }, "Ranged" : { "Hack" : 0, "Pierce" : 0, "Crush" : 0 } },
     
    6989        unit["Parent"] = Template.getroot().get("parent") + ".xml"
    7090
    7191    if (Template.find("./Identity/Civ") != None):
    72         unit['Civ'] = Template.find("./Identity/Civ").text
     92        NumericStatProcess(unit, 'Civ', Template.find("./Identity/Civ"))
    7393
    7494    if (Template.find("./Health/Max") != None):
    75         unit['HP'] = Template.find("./Health/Max").text
     95        NumericStatProcess(unit, 'HP', Template.find("./Health/Max"))
    7696
    7797    if (Template.find("./Cost/BuildTime") != None):
    78         unit['BuildTime'] = Template.find("./Cost/BuildTime").text
     98        NumericStatProcess(unit, 'BuildTime', Template.find("./Cost/BuildTime"))
    7999   
    80100    if (Template.find("./Cost/Resources") != None):
    81101        for type in list(Template.find("./Cost/Resources")):
    82             unit['Cost'][type.tag] = type.text
     102            NumericStatProcess(unit['Cost'], type.tag, type)
    83103
    84104    if (Template.find("./Attack/Melee") != None):
    85105        if (Template.find("./Attack/Melee/RepeatTime") != None):
    86             unit['RepeatRate']["Melee"] = Template.find("./Attack/Melee/RepeatTime").text
     106            NumericStatProcess(unit['RepeatRate'], "Melee", Template.find("./Attack/Melee/RepeatTime"))
    87107        if (Template.find("./Attack/Melee/PrepareTime") != None):
    88             unit['PrepRate']["Melee"] = Template.find("./Attack/Melee/PrepareTime").text
     108            NumericStatProcess(unit['PrepRate'], "Melee", Template.find("./Attack/Melee/PrepareTime"))
    89109        for atttype in AttackTypes:
    90110            if (Template.find("./Attack/Melee/"+atttype) != None):
    91                 unit['Attack']['Melee'][atttype] = Template.find("./Attack/Melee/"+atttype).text
     111                NumericStatProcess(unit['Attack']['Melee'], atttype, Template.find("./Attack/Melee/"+atttype))
    92112        if (Template.find("./Attack/Melee/Bonuses") != None):
    93113            for Bonus in Template.find("./Attack/Melee/Bonuses"):
    94114                Against = []
     
    112132    if (Template.find("./Attack/Ranged") != None):
    113133        unit['Ranged'] = "true"
    114134        if (Template.find("./Attack/Ranged/MaxRange") != None):
    115             unit['Range'] = Template.find("./Attack/Ranged/MaxRange").text
     135            NumericStatProcess(unit, 'Range', Template.find("./Attack/Ranged/MaxRange"))
    116136        if (Template.find("./Attack/Ranged/RepeatTime") != None):
    117             unit['RepeatRate']["Ranged"] = Template.find("./Attack/Ranged/RepeatTime").text
     137            NumericStatProcess(unit['RepeatRate'], "Ranged", Template.find("./Attack/Ranged/RepeatTime"))
    118138        if (Template.find("./Attack/Ranged/PrepareTime") != None):
    119             unit['PrepRate']["Ranged"] = Template.find("./Attack/Ranged/PrepareTime").text
     139            NumericStatProcess(unit['PrepRate'], "Ranged", Template.find("./Attack/Ranged/PrepareTime"))
    120140        for atttype in AttackTypes:
    121141            if (Template.find("./Attack/Ranged/"+atttype) != None):
    122                 unit['Attack']['Ranged'][atttype] = Template.find("./Attack/Ranged/"+atttype).text
     142                NumericStatProcess(unit['Attack']['Ranged'], atttype, Template.find("./Attack/Ranged/"+atttype))
    123143        if (Template.find("./Attack/Ranged/Bonuses") != None):
    124144            for Bonus in Template.find("./Attack/Ranged/Bonuses"):
    125145                Against = []
     
    142162    if (Template.find("./Armour") != None):
    143163        for atttype in AttackTypes:
    144164            if (Template.find("./Armour/"+atttype) != None):
    145                 unit['Armour'][atttype] = Template.find("./Armour/"+atttype).text
     165                NumericStatProcess(unit['Armour'], atttype, Template.find("./Armour/"+atttype))
    146166
    147167    if (Template.find("./UnitMotion") != None):
    148168        if (Template.find("./UnitMotion/WalkSpeed") != None):
    149                 unit['WalkSpeed'] = Template.find("./UnitMotion/WalkSpeed").text
     169                NumericStatProcess(unit, 'WalkSpeed', Template.find("./UnitMotion/WalkSpeed"))
    150170
    151171    if (Template.find("./Identity/VisibleClasses") != None):
    152172        newClasses = Template.find("./Identity/VisibleClasses").text.split(" ")
     
    174194
    175195    rstr += "<td style=\"text-align:right;\">" + Name + "</td>\n"
    176196   
    177     rstr += "<td>" + UnitDict["HP"] + "</td>\n"
     197    rstr += "<td>" + str(UnitDict["HP"]) + "</td>\n"
    178198
    179     rstr += "<td>" + UnitDict["BuildTime"] + "</td>\n"
     199    rstr += "<td>" + str(UnitDict["BuildTime"]) + "</td>\n"
    180200
    181     rstr += "<td>" + UnitDict["WalkSpeed"] + "</td>\n"
     201    rstr += "<td>" + str(UnitDict["WalkSpeed"]) + "</td>\n"
    182202   
    183203    rstr += "<td>" + UnitDict["Cost"]["food"] + "F / " + UnitDict["Cost"]["wood"] + "W / " + UnitDict["Cost"]["stone"] + "S / " + UnitDict["Cost"]["metal"] + "M</td>\n"
    184204