Add parsing of quality specific data
This commit is contained in:
@@ -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("")
|
||||
|
||||
Reference in New Issue
Block a user