Spaces:
Runtime error
Runtime error
from typing import Dict | |
from luadata import unserialize | |
from base.buff import Buff | |
from base.skill import Skill | |
class Parser: | |
def __init__(self, skills: Dict[str, Skill], buffs: Dict[str, Buff]): | |
self.skills = skills | |
self.buffs = buffs | |
self.records = {} | |
self.status = {} | |
self.start_time = 0 | |
self.end_time = 0 | |
def parse_time(self, detail, timestamp): | |
if detail[1]: | |
self.start_time = int(timestamp) | |
else: | |
self.end_time = int(timestamp) | |
return True | |
def parse_buff(self, detail): | |
buff_id, buff_stack, buff_level = detail[4], detail[5], detail[8] | |
if buff_id not in self.buffs: | |
return | |
if not buff_stack: | |
self.status.pop((buff_id, buff_level)) | |
else: | |
self.status[(buff_id, buff_level)] = buff_stack | |
def parse_skill(self, detail, timestamp): | |
skill = detail[4], detail[5] | |
if skill[0] not in self.skills: | |
return | |
if skill not in self.records: | |
self.records[skill] = {} | |
status = tuple( | |
(buff_id, buff_level, buff_stack) for (buff_id, buff_level), buff_stack in self.status.items() | |
) | |
if status not in self.records[skill]: | |
self.records[skill][status] = [] | |
self.records[skill][status].append(int(timestamp) - self.start_time) | |
def __call__(self, file_name): | |
for line in open(file_name): | |
row = line.split("\t") | |
if row[4] == "5" and self.parse_time(unserialize(row[-1]), row[3]): | |
break | |
elif row[4] == "13": | |
self.parse_buff(unserialize(row[-1])) | |
elif row[4] == "21": | |
self.parse_skill(unserialize(row[-1]), row[3]) | |
return self.records | |