Add parsing of quality specific data

This commit is contained in:
2023-10-21 19:57:02 +02:00
parent a741aa6ff0
commit f9f71e1185
3 changed files with 187 additions and 54 deletions

View File

@@ -17,6 +17,29 @@ class Quality(Enum):
return self.name.capitalize()
class LowQualityType(Enum):
CRUDE = 0
CRACKED = 1
DAMAGED = 2
LOW_QUALITY = 3
def __str__(self) -> str:
return self.name.capitalize()
@dataclass
class Affix:
name_id: int
id: int | None = None # TODO: read this
# TODO: data
def print(self, indent=5):
# TODO: name lookup
# TODO: modified lookup
# TODO: adding in data
print(" " * indent, f"{self.name_id} {hex(self.name_id)}")
def txtbits(bits: bitarray) -> str:
txt = "".join(str(b) for b in bits)
grouped = [txt[i : i + 8] for i in range(0, len(txt), 8)]
@@ -36,13 +59,22 @@ class Item:
pos_x: int
pos_y: int
kind: str
uid: int | None
lvl: int | None
quality: Quality | None
graphic: int | None
inherent: int | None
uid: int | None = None
lvl: int | None = None
quality: Quality | None = None
graphic: int | None = None
inherent: int | None = None
low_quality: LowQualityType | None = None
prefixes: list[Affix] | None = None
suffixes: list[Affix] | None = None
set_id: int | None = None
unique_id: int | None = None
nameword1: int | None = None
nameword2: int | None = None
runeword_id: int | None = None
personal_name: str | None = None
def print(self, indent=5):
def print(self, indent=5, with_raw=False):
properties = []
print(" " * indent, self.kind)
if self.lvl:
@@ -60,8 +92,28 @@ class Item:
if properties:
print(" " * indent, ", ".join(properties))
print(" " * indent, f"at {self.pos_x}, {self.pos_y}")
bits = bitarray(endian="little")
bits.frombytes(self.raw_data)
print(" " * indent, txtbits(bits))
if self.quality:
print(" " * indent, self.quality)
if self.prefixes:
print(" " * indent, "Prefixes:")
for prefix in self.prefixes:
prefix.print(indent + 4)
if self.suffixes:
print(" " * indent, "Suffixes:")
for suffix in self.suffixes:
suffix.print(indent + 4)
if self.set_id:
print(" " * indent, f"Set Id: {self.set_id}") # TODO: name lookup
if self.unique_id:
print(" " * indent, f"Set Id: {self.unique_id}") # TODO: name lookup
if self.runeword_id:
print(" " * indent, f"Runeword Id: {self.runeword_id}") # TODO: name lookup
if self.personal_name:
print(" " * indent, f"Personal name: {self.personal_name}")
if with_raw:
print(" " * indent, "Raw Item Data:")
bits = bitarray(endian="little")
bits.frombytes(self.raw_data)
print(" " * indent, txtbits(bits))
print("")
print("")