using System.Text.Json.Serialization; namespace NeonSprawl.Server.Game.Combat; /// JSON body for GET /game/world/ability-definitions (NEO-78). public sealed class AbilityDefinitionsListResponse { public const int CurrentSchemaVersion = 1; [JsonPropertyName("schemaVersion")] public int SchemaVersion { get; init; } = CurrentSchemaVersion; /// Loaded abilities ordered by stable id (ordinal), matching . [JsonPropertyName("abilities")] public required IReadOnlyList Abilities { get; init; } } /// One row in the read-only ability definition projection. public sealed class AbilityDefinitionJson { [JsonPropertyName("id")] public required string Id { get; init; } [JsonPropertyName("displayName")] public required string DisplayName { get; init; } [JsonPropertyName("baseDamage")] public required int BaseDamage { get; init; } [JsonPropertyName("cooldownSeconds")] public required double CooldownSeconds { get; init; } [JsonPropertyName("maxRange")] public required double MaxRange { get; init; } [JsonPropertyName("abilityKind")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? AbilityKind { get; init; } }