Fix --filters for BattleNumberCategorization(), add new categorizations

This commit is contained in:
Jylpah committed 2020-11-26 01:09:24 +02:00
1 parent 9d6f6da7d5
commit d907371ea9
1 file changed
+47 -6
+47 -6
View File
@@ -133,8 +133,13 @@ class BattleCategorizationList():
'mastery_badge' : [ 'Battle Medal', 'category', ['-', '3rd Class', '2nd Class', '1st Class', 'Mastery' ]], 'mastery_badge' : [ 'Battle Medal', 'category', ['-', '3rd Class', '2nd Class', '1st Class', 'Mastery' ]],
'team_result' : [ 'Team Result', 'string' ], 'team_result' : [ 'Team Result', 'string' ],
'player_wins' : [ 'Player WR', 'bucket', [ 0, .35, .45, .50, .55, .65], '%' ], 'player_wins' : [ 'Player WR', 'bucket', [ 0, .35, .45, .50, .55, .65], '%' ],
'player_battles' : [ 'Player Battles','bucket', [ 0, 500, 1000, 2500, 5e3, 10e3, 15e3, 25e3], 'int' ], 'player_battles' : [ 'Player Battles', 'bucket', [ 0, 500, 1000, 2500, 5e3, 10e3, 15e3, 25e3], 'int' ],
'player_damage_dealt' : [ 'Player Avg Dmg','bucket', [ 0, 500, 1000, 1250, 1500, 1750, 2000, 2500], 'int' ], 'player_damage_dealt' : [ 'Player Avg Dmg', 'bucket', [ 0, 500, 1000, 1250, 1500, 1750, 2000, 2500], 'int' ],
'damage_made' : [ 'Player Dmg made', 'bucket', [ 0, 500, 1000, 1250, 1500, 1750, 2000, 2500], 'int' ],
'enemies_destroyed' : [ 'Player Kills', 'number'],
'enemies_spotted' : [ 'Player Spots', 'number'],
'hit_rate' : [ 'Player Hit Rate', 'bucket', [ 0, .25, .5, .6, .7, .8, .9, .95 ], '%' ],
'pen_rate' : [ 'Player Pen Rate', 'bucket', [ 0, .25, .5, .6, .7, .8, .9, .95 ], '%' ],
'map_name' : [ 'Map', 'string' ], 'map_name' : [ 'Map', 'string' ],
'tank_name' : [ 'Tank', 'string' ], 'tank_name' : [ 'Tank', 'string' ],
'player_name' : [ 'Player', 'string' ], 'player_name' : [ 'Player', 'string' ],
@@ -586,7 +591,7 @@ class BattleNumberCategorization(BattleCategorization):
def get_filter_categories(self, filters: list) -> list: def get_filter_categories(self, filters: list) -> list:
try: try:
return filters return list(map(str,filters))
except Exception as err: except Exception as err:
bu.error('Category: ' + str(self.category_key), exception=err) bu.error('Category: ' + str(self.category_key), exception=err)
return None return None
@@ -758,7 +763,7 @@ class BattleCategory():
'default' : [ 'battles', 'win','damage_made', 'enemies_destroyed', 'enemies_spotted', 'top_tier', 'DR', 'survived', 'allies_wins', 'enemies_wins'], 'default' : [ 'battles', 'win','damage_made', 'enemies_destroyed', 'enemies_spotted', 'top_tier', 'DR', 'survived', 'allies_wins', 'enemies_wins'],
'team' : [ 'battles', 'win','player_wins','allies_wins','enemies_wins'], 'team' : [ 'battles', 'win','player_wins','allies_wins','enemies_wins'],
'team_extended' : [ 'battles', 'battles%', 'win','player_wins','allies_wins','enemies_wins', 'player_damage_dealt', 'allies_damage_dealt', 'enemies_damage_dealt', 'player_battles','allies_battles','enemies_battles' ], 'team_extended' : [ 'battles', 'battles%', 'win','player_wins','allies_wins','enemies_wins', 'player_damage_dealt', 'allies_damage_dealt', 'enemies_damage_dealt', 'player_battles','allies_battles','enemies_battles' ],
'extended' : [ 'battles', 'battles%', 'win','damage_made', 'enemies_destroyed', 'enemies_spotted', 'top_tier', 'DR', 'KDR', 'hit_rate', 'pen_rate', 'survived', 'time_alive%', 'player_wins', 'allies_damage_wins', 'enemies_wins', MISSING_STATS ] 'extended' : [ 'battles', 'battles%', 'win','damage_made', 'enemies_destroyed', 'enemies_spotted', 'top_tier', 'DR', 'KDR', 'hit_rate', 'pen_rate', 'survived', 'time_alive%', 'player_wins', 'allies_wins', 'enemies_wins', MISSING_STATS ]
} }
_team_fields = [ 'wins', 'battles', 'damage_dealt' ] _team_fields = [ 'wins', 'battles', 'damage_dealt' ]
@@ -821,6 +826,12 @@ class BattleCategory():
def get_result_fields(cls) -> list: def get_result_fields(cls) -> list:
return cls.result_fields return cls.result_fields
@classmethod
def get_result_fields_ratio(cls) -> list:
return cls.result_fields_ratio
@classmethod @classmethod
def get_avg_fields(cls) -> set: def get_avg_fields(cls) -> set:
return cls.avg_fields return cls.avg_fields
@@ -851,6 +862,23 @@ class BattleCategory():
return cls._team_fields return cls._team_fields
@classmethod
def calc_ratio(cls, ratio: str, result: dict):
try:
value = result[cls._result_ratios[ratio][0]]
divider = result[cls._result_ratios[ratio][1]]
if divider != 0:
return value / divider
else:
if value == 0:
return 0
else:
return float('Inf')
except Exception as err:
bu.error(exception=err)
return None
@classmethod @classmethod
def print_headers(cls, cat_name: str): def print_headers(cls, cat_name: str):
try: try:
@@ -1396,16 +1424,23 @@ def process_battle_results(results: dict, args : argparse.Namespace):
try: try:
url = args.url url = args.url
cats = BattleCategorizationList.get_categorizations(args) cats = BattleCategorizationList.get_categorizations(args)
blt_cat_list = BattleCategorizationList(cats)
if args.filters != None: if args.filters != None:
results = filter_replays(results, args.filters) results = filter_replays(results, args.filters)
if len(results) > 0:
blt_cat_list = BattleCategorizationList(cats)
for result in results: for result in results:
blt_cat_list.record_result(result) blt_cat_list.record_result(result)
if url: if url:
blt_cat_list.record_url(result) blt_cat_list.record_url(result)
blt_cat_list.calc_results() blt_cat_list.calc_results()
else:
warning_txt = 'No replays to process '
if args.filter != None:
warning_txt = warning_txt + 'after filtering'
bu.warning(warning_txt)
except Exception as err: except Exception as err:
bu.error(exception=err) bu.error(exception=err)
@@ -1433,7 +1468,9 @@ def filter_replays(results: list, filter_json : str) -> bool:
res = list() res = list()
for result in results: for result in results:
try:
cats = filter_cats.get_categories(result) cats = filter_cats.get_categories(result)
bu.debug(str(cats))
ret = False ret = False
for cat in cats: for cat in cats:
if cats[cat] not in filters[cat]: if cats[cat] not in filters[cat]:
@@ -1442,7 +1479,9 @@ def filter_replays(results: list, filter_json : str) -> bool:
ret = True ret = True
if ret: if ret:
res.append(result) res.append(result)
except Exception as err:
bu.error(exception=err)
bu.verbose('Battles after filtering: ' + str(len(res)))
return res return res
except Exception as err: except Exception as err:
bu.error(exception=err) bu.error(exception=err)
@@ -2120,6 +2159,8 @@ async def read_replay_JSON(replay_json: dict, args : argparse.Namespace) -> dict
# platoon buddy removed from stats # platoon buddy removed from stats
result['allies'].remove(get_stat_id(tmp_account_id, tmp_tank_id, tmp_battletime)) result['allies'].remove(get_stat_id(tmp_account_id, tmp_tank_id, tmp_battletime))
break break
for ratio in BattleCategory.get_result_fields_ratio():
result[ratio] = BattleCategory.calc_ratio(ratio, result)
result['time_alive%'] = result['time_alive'] / btl_duration result['time_alive%'] = result['time_alive'] / btl_duration
result['battle_tier'] = btl_tier result['battle_tier'] = btl_tier