using GameCult.Caching; using MessagePack; namespace Aetheria.State.Documents; [CultDocument("aetheria.item_definition", "aetheria.item_definition.v1")] [MessagePackObject] public sealed class AetheriaItemDefinition { [Key(0)] [CultName] public string Name { get; set; } = ""; [Key(1)] [CultIndex("category")] public string Category { get; set; } = "uncategorized"; [Key(2)] [CultIndex("legacyId")] public string LegacyId { get; set; } = ""; [Key(3)] public string Description { get; set; } = ""; [Key(4)] public double Mass { get; set; } [Key(5)] public double Volume { get; set; } [Key(6)] public string[] Tags { get; set; } = []; [Key(7)] [CultIndex("manufacturerLegacyId")] public string ManufacturerLegacyId { get; set; } = ""; [Key(8)] public int Price { get; set; } [Key(9)] public int ShapeWidth { get; set; } [Key(10)] public int ShapeHeight { get; set; } [Key(11)] public int OccupiedCells { get; set; } [Key(12)] [CultIndex("hardpointType")] public string HardpointType { get; set; } = ""; [Key(13)] [CultIndex("hullType")] public string HullType { get; set; } = ""; [Key(14)] public string[] BehaviorKinds { get; set; } = []; [Key(15)] public int BehaviorCount { get; set; } [Key(16)] public int MaxStack { get; set; } [Key(17)] public bool Stackable { get; set; } [Key(18)] public double Duration { get; set; } [Key(19)] public double Durability { get; set; } [Key(20)] public string WeaponRange { get; set; } = ""; [Key(21)] public string WeaponCaliber { get; set; } = ""; [Key(22)] public string WeaponType { get; set; } = ""; [Key(23)] public string WeaponFireTypes { get; set; } = ""; [Key(24)] public string WeaponModifiers { get; set; } = ""; [Key(25)] public AetheriaShapeCell[] ShapeCells { get; set; } = []; [Key(26)] public int InteriorShapeWidth { get; set; } [Key(27)] public int InteriorShapeHeight { get; set; } [Key(28)] public int InteriorOccupiedCells { get; set; } [Key(29)] public AetheriaShapeCell[] InteriorShapeCells { get; set; } = []; [Key(30)] public AetheriaItemHardpoint[] Hardpoints { get; set; } = []; [Key(31)] public AetheriaBehaviorPayload[] BehaviorPayloads { get; set; } = []; } [MessagePackObject] public sealed class AetheriaShapeCell { [Key(0)] public int X { get; set; } [Key(1)] public int Y { get; set; } } [MessagePackObject] public sealed class AetheriaItemHardpoint { [Key(0)] public string Type { get; set; } = ""; [Key(1)] public int PositionX { get; set; } [Key(2)] public int PositionY { get; set; } [Key(3)] public int ShapeWidth { get; set; } [Key(4)] public int ShapeHeight { get; set; } [Key(5)] public int OccupiedCells { get; set; } [Key(6)] public AetheriaShapeCell[] ShapeCells { get; set; } = []; [Key(7)] public string Transform { get; set; } = ""; [Key(8)] public string Rotation { get; set; } = ""; [Key(9)] public double Armor { get; set; } } [MessagePackObject] public sealed class AetheriaBehaviorPayload { [Key(0)] public int UnionKey { get; set; } [Key(1)] public string Kind { get; set; } = ""; [Key(2)] public int Group { get; set; } [Key(3)] public AetheriaBehaviorField[] Fields { get; set; } = []; } [MessagePackObject] public sealed class AetheriaBehaviorField { [Key(0)] public int Key { get; set; } [Key(1)] public AetheriaBehaviorValue Value { get; set; } = new(); } [MessagePackObject] public sealed class AetheriaBehaviorMapEntry { [Key(0)] public string Key { get; set; } = ""; [Key(1)] public AetheriaBehaviorValue Value { get; set; } = new(); } [MessagePackObject] public sealed class AetheriaBehaviorValue { [Key(0)] public string Kind { get; set; } = "nil"; [Key(1)] public string StringValue { get; set; } = ""; [Key(2)] public double NumberValue { get; set; } [Key(3)] public bool BoolValue { get; set; } [Key(4)] public string LegacyIdValue { get; set; } = ""; [Key(5)] public AetheriaBehaviorValue[] Children { get; set; } = []; [Key(6)] public AetheriaBehaviorMapEntry[] MapEntries { get; set; } = []; }