diff --git a/SVSim.EmulatedEntrypoint/Models/Dtos/PackChildGachaDto.cs b/SVSim.EmulatedEntrypoint/Models/Dtos/PackChildGachaDto.cs index 509e55a..4d2e446 100644 --- a/SVSim.EmulatedEntrypoint/Models/Dtos/PackChildGachaDto.cs +++ b/SVSim.EmulatedEntrypoint/Models/Dtos/PackChildGachaDto.cs @@ -40,4 +40,28 @@ public class PackChildGachaDto [JsonPropertyName("override_increase_gacha_point")] [Key("override_increase_gacha_point")] public string OverrideIncreaseGachaPoint { get; set; } = "0"; + + /// Set on type_detail=10 free children only. Emitted as string on the wire. + [JsonPropertyName("campaign_name")] + [Key("campaign_name")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? CampaignName { get; set; } + + /// Lifetime claim cap for this campaign. Stringified on the wire ("1") when present. + [JsonPropertyName("purchase_limit_count")] + [Key("purchase_limit_count")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? PurchaseLimitCount { get; set; } + + /// Per-UTC-day claim cap for this campaign. Stringified on the wire ("1") when present. + [JsonPropertyName("daily_free_gacha_count")] + [Key("daily_free_gacha_count")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? DailyFreeGachaCount { get; set; } + + /// Campaign id used to scope claim quotas server-side. + [JsonPropertyName("free_gacha_campaign_id")] + [Key("free_gacha_campaign_id")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? FreeGachaCampaignId { get; set; } }