Spaces:
Runtime error
Runtime error
File size: 1,828 Bytes
025687f b8aecdd 025687f b8aecdd 025687f b8aecdd 025687f b8aecdd 025687f b8aecdd 025687f b8aecdd 025687f b8aecdd 025687f b8aecdd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
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
|