Старые Roblox-карты (Crossroads, ROBLOX Battle, и др. из эры 2007-2010)
сохранены в XML-формате (<roblox version=4>... вместо binary <roblox!...).
Наш парсер падал на 'missing <roblox! magic'.
Новое:
- rbxl_xml_parser.py: парсит XML-формат через стандартный xml.etree.
Поддерживает все типичные property-теги: string, bool, int, float,
Vector3, Vector2, CoordinateFrame, Color3, Color3uint8, BrickColor,
Ref, BinaryString, UDim/UDim2, PhysicalProperties, OptionalCFrame.
- В _parse_property: <int name=BrickColor> заворачивается в BrickColor
объект — converter ожидает .code атрибут.
- Алиасы PascalCase: name→Name, size→Size, shape→Shape (старый XML
использовал camelCase с маленькой первой буквой).
app.py:
- /analyze: авто-детект XML vs Binary по magic bytes. Если XML —
используем parse_xml(), иначе старый parse().
Тест на arch1_Original_Crossroads.rbxl: 877 instances, 777 Part,
83 Model — конвертится в 777 примитивов без warnings.