66import xml .etree .ElementTree
77
88
9- def generate_abilities (balance_data_path ):
9+ def generate_build_data (balance_data_path ):
1010 abilities = {}
11+ units = {}
1112
1213 for xml_file_path in glob .glob (os .path .join (balance_data_path , "*.xml" )):
1314 tree = xml .etree .ElementTree .parse (xml_file_path )
@@ -19,8 +20,13 @@ def generate_abilities(balance_data_path):
1920
2021 unit_name = root .get ("id" )
2122
23+ meta_element = root .find ("./meta" )
24+
25+ if unit_name and meta_element is not None and meta_element .get ("index" ):
26+ units [meta_element .get ("index" )] = unit_name
27+
2228 build_unit_element = root .find ("./builds/unit" )
23- if build_unit_element :
29+ if build_unit_element is not None :
2430 build_ability_index = build_unit_element .get ("ability" )
2531
2632 if unit_name == "SCV" :
@@ -54,29 +60,38 @@ def generate_abilities(balance_data_path):
5460 abilities [train_ability_index ] = "{}Train{}" .format (unit_name , trained_unit_name )
5561
5662 research_upgrade_element = root .find ("./researches/upgrade" )
57- if research_upgrade_element :
63+ if research_upgrade_element is not None :
5864 research_ability_index = research_upgrade_element .get ("ability" )
5965 research_ability_name = "{}Research" .format (unit_name )
6066
6167 abilities [research_ability_index ] = research_ability_name
6268
63- return collections .OrderedDict (sorted (abilities .items (), key = lambda x : int (x [0 ])))
69+ sorted_abilities = collections .OrderedDict (sorted (abilities .items (), key = lambda x : int (x [0 ])))
70+ sorted_units = collections .OrderedDict (sorted (units .items (), key = lambda x : int (x [0 ])))
71+
72+ return sorted_units , sorted_abilities
6473
6574
6675def main ():
67- parser = argparse .ArgumentParser (description = 'Generate a [BUILD]_abilities.csv file from exported balance data.' )
76+ parser = argparse .ArgumentParser (description = 'Generate [BUILD_VERSION]_abilities.csv and [BUILD_VERSION]_units.csv'
77+ ' files from exported balance data.' )
6878 parser .add_argument ('build_version' , metavar = 'BUILD_VERSION' , type = int ,
6979 help = 'the build version of the balance data export' )
7080 parser .add_argument ('balance_data_path' , metavar = 'BALANCE_DATA_PATH' , type = str ,
7181 help = 'the path to the balance data export' )
7282
7383 args = parser .parse_args ()
7484
75- abilities = generate_abilities (args .balance_data_path )
85+ units , abilities = generate_build_data (args .balance_data_path )
7686
77- if not abilities :
87+ if not units or not abilities :
7888 raise ValueError ("No balance data found at provided balance data path." )
7989
90+ with open ('{}_units.csv' .format (args .build_version ), 'w' , newline = '' ) as csvfile :
91+ csv_writer = csv .writer (csvfile , delimiter = ',' )
92+ for unit_index , unit_name in units .items ():
93+ csv_writer .writerow ([unit_index , unit_name ])
94+
8095 with open ('{}_abilities.csv' .format (args .build_version ), 'w' , newline = '' ) as csvfile :
8196 csv_writer = csv .writer (csvfile , delimiter = ',' )
8297 for ability_index , ability_name in abilities .items ():
0 commit comments