using System.Text.Json.Serialization; using MessagePack; using SVSim.EmulatedEntrypoint.Models.Dtos.Common.ArenaTwoPick; namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.ArenaTwoPick; [MessagePackObject] public class FinishResponseDto { /// /// Per-grant deltas — drives the "+N received" popup. Parsed by the client via /// ReceivedReward(JsonData) (Shadowverse_Code/ReceivedReward.cs:25) which expects /// the {reward_type, reward_detail_id, item_type, reward_count?, is_usable} shape — distinct /// from the RewardEntryDto shape used by . /// [JsonPropertyName("rewards")] [Key("rewards")] public List Rewards { get; set; } = new(); /// Post-state totals — drives PlayerStaticData.UpdateHaveUserGoodsNumByJsonData. [JsonPropertyName("reward_list")] [Key("reward_list")] public List RewardList { get; set; } = new(); } /// /// Wire shape parsed by Shadowverse_Code/ReceivedReward.cs ctor. Used in the /// rewards arrays of /arena_two_pick/{retire,finish}. /// [MessagePackObject] public class TwoPickRewardReceivedDto { [JsonPropertyName("reward_type")] [Key("reward_type")] public int RewardType { get; set; } [JsonPropertyName("reward_detail_id")] [Key("reward_detail_id")] public long RewardDetailId { get; set; } [JsonPropertyName("reward_count")] [Key("reward_count")] public int RewardCount { get; set; } /// /// Item-master item_type enum (1=challenge ticket, 2=card-pack ticket, …) for Item-typed /// rewards. 0 for currencies (Crystal/Rupy/RedEther) — the client only reads this for Items. /// [JsonPropertyName("item_type")] [Key("item_type")] public int ItemType { get; set; } [JsonPropertyName("is_usable")] [Key("is_usable")] public bool IsUsable { get; set; } = true; }