From 6f38d84a1ca95adeb7e70bb647c20eca9db3a83f Mon Sep 17 00:00:00 2001 From: Salad Dais Date: Wed, 3 Jan 2024 07:51:51 +0000 Subject: [PATCH] Add ParcelOverlay serializers --- hippolyzer/lib/base/serialization.py | 5 +++-- hippolyzer/lib/base/templates.py | 31 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/hippolyzer/lib/base/serialization.py b/hippolyzer/lib/base/serialization.py index 94c153d..f9f7374 100644 --- a/hippolyzer/lib/base/serialization.py +++ b/hippolyzer/lib/base/serialization.py @@ -1583,12 +1583,13 @@ class BitfieldDataclass(DataclassAdapter): PRIM_SPEC: ClassVar[Optional[SerializablePrimitive]] = None def __init__(self, data_cls: Optional[Type] = None, - prim_spec: Optional[SerializablePrimitive] = None, shift: bool = True): + prim_spec: Optional[SerializablePrimitive] = None, shift: Optional[bool] = None): if not dataclasses.is_dataclass(data_cls): raise ValueError(f"{data_cls!r} is not a dataclass") if prim_spec is None: prim_spec = getattr(data_cls, 'PRIM_SPEC', None) - + if shift is None: + shift = getattr(data_cls, 'SHIFT', True) super().__init__(data_cls, prim_spec) self._shift = shift self._bitfield_spec = self._build_bitfield(data_cls) diff --git a/hippolyzer/lib/base/templates.py b/hippolyzer/lib/base/templates.py index 293fc13..b1c3dbf 100644 --- a/hippolyzer/lib/base/templates.py +++ b/hippolyzer/lib/base/templates.py @@ -2198,6 +2198,37 @@ class DateSerializer(se.AdapterSubfieldSerializer): ORIG_INLINE = True +class ParcelGridType(enum.IntEnum): + PUBLIC = 0x00 + OWNED = 0x01 # Presumably non-linden owned land + GROUP = 0x02 + SELF = 0x03 + FOR_SALE = 0x04 + AUCTION = 0x05 + + +class ParcelGridFlags(enum.IntFlag): + UNUSED = 0x8 + HIDDEN_AVS = 0x10 + SOUND_LOCAL = 0x20 + WEST_LINE = 0x40 + SOUTH_LINE = 0x80 + + +@dataclasses.dataclass +class ParcelGridInfo(se.BitfieldDataclass): + PRIM_SPEC: ClassVar[se.SerializablePrimitive] = se.U8 + SHIFT: ClassVar[bool] = False + + Type: Union[ParcelGridType, int] = se.bitfield_field(bits=3, adapter=se.IntEnum(ParcelGridType)) + Flags: ParcelGridFlags = se.bitfield_field(bits=5, adapter=se.IntFlag(ParcelGridFlags)) + + +@se.subfield_serializer("ParcelOverlay", "ParcelData", "Data") +class ParcelOverlaySerializer(se.AdapterSubfieldSerializer): + ADAPTER = se.BitfieldDataclass(ParcelGridInfo) + + @se.http_serializer("RenderMaterials") class RenderMaterialsSerializer(se.BaseHTTPSerializer): @classmethod