Forgot unversioned xd
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Admin;
|
||||
|
||||
public class ImportViewerResponse
|
||||
{
|
||||
[JsonPropertyName("viewer_id")] public long ViewerId { get; set; }
|
||||
[JsonPropertyName("short_udid")] public long ShortUdid { get; set; }
|
||||
[JsonPropertyName("was_created")] public bool WasCreated { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using MessagePack;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Deck;
|
||||
|
||||
/// <summary>
|
||||
/// Shape consumed by `DeckGroupListData(jsonData, format)` for a single-format call —
|
||||
/// the format-scoped decks land under `user_deck_list` (vs. the per-format keys used
|
||||
/// by /practice/deck_list with Format.All).
|
||||
/// </summary>
|
||||
[MessagePackObject]
|
||||
public class DeckListResponse
|
||||
{
|
||||
[Key("maintenance_card_list")] public List<long> MaintenanceCardList { get; set; } = new();
|
||||
[Key("user_deck_list")] public List<UserDeck>? UserDeckList { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using MessagePack;
|
||||
using SVSim.EmulatedEntrypoint.Models.Dtos.Common;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Deck;
|
||||
|
||||
/// <summary>
|
||||
/// /deck/update response. Minimum-viable per spec is just {achieved_info, reward_list};
|
||||
/// the full shape also includes the refreshed deck list. We include user_deck_list to
|
||||
/// save the client a follow-up /deck/info round-trip.
|
||||
/// </summary>
|
||||
[MessagePackObject]
|
||||
public class DeckUpdateResponse
|
||||
{
|
||||
[Key("user_deck_list")] public List<UserDeck>? UserDeckList { get; set; }
|
||||
[Key("achieved_info")] public Dictionary<string, object> AchievedInfo { get; set; } = new();
|
||||
[Key("reward_list")] public List<Reward> RewardList { get; set; } = new();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using MessagePack;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Deck;
|
||||
|
||||
[MessagePackObject]
|
||||
public class EmptyDeckNumberResponse
|
||||
{
|
||||
/// <summary>The next free deck slot number. 0 indicates "no slots available".</summary>
|
||||
[Key("empty_deck_num")] public int EmptyDeckNum { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using MessagePack;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Deck;
|
||||
|
||||
/// <summary>
|
||||
/// Single-deck-update response. Consumed by DeckListUtility.DeckUpdate(user_deck,
|
||||
/// format, DeckAttributeType.CustomDeck). Shape is "one UserDeck wrapped under
|
||||
/// `user_deck` key" — same for update_name, update_sleeve, update_leader_skin,
|
||||
/// update_random_leader_skin.
|
||||
/// </summary>
|
||||
[MessagePackObject]
|
||||
public class SingleDeckResponse
|
||||
{
|
||||
[Key("user_deck")] public UserDeck? UserDeck { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using MessagePack;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Practice;
|
||||
|
||||
/// <summary>
|
||||
/// Same shape consumed by DeckGroupListData(jsonData, Format.All). Per-format keys are
|
||||
/// conditional — omit (don't send empty arrays) for formats the server doesn't enable.
|
||||
/// </summary>
|
||||
[MessagePackObject]
|
||||
public class PracticeDeckListResponse
|
||||
{
|
||||
/// <summary>Card ids currently disabled for maintenance (client unions with global list).</summary>
|
||||
[Key("maintenance_card_list")] public List<long> MaintenanceCardList { get; set; } = new();
|
||||
|
||||
[Key("user_deck_rotation")] public List<UserDeck>? UserDeckRotation { get; set; }
|
||||
[Key("user_deck_unlimited")] public List<UserDeck>? UserDeckUnlimited { get; set; }
|
||||
|
||||
// The remaining format keys (pre_rotation, crossover, my_rotation, avatar, default_deck_list,
|
||||
// trial_deck_list, crossover_trial_deck_list, build_deck_list, user_leader_skin_setting_list)
|
||||
// are all conditional — added when those formats are enabled.
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using MessagePack;
|
||||
using SVSim.EmulatedEntrypoint.Models.Dtos.Common;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Practice;
|
||||
|
||||
[MessagePackObject]
|
||||
public class PracticeFinishResponse
|
||||
{
|
||||
/// <summary>Class XP gained this match.</summary>
|
||||
[Key("get_class_experience")] public int GetClassExperience { get; set; }
|
||||
|
||||
/// <summary>Total accumulated class XP for the played class after this match.</summary>
|
||||
[Key("class_experience")] public int ClassExperience { get; set; }
|
||||
|
||||
/// <summary>Class level after this match (post-promotion if XP rolled over).</summary>
|
||||
[Key("class_level")] public int ClassLevel { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Missions / achievements / rewards rollup. Empty dict means "nothing accumulated"
|
||||
/// (spec: parser tolerates empty object).
|
||||
/// </summary>
|
||||
[Key("achieved_info")] public Dictionary<string, object> AchievedInfo { get; set; } = new();
|
||||
|
||||
/// <summary>Standard reward grants applied to user's inventory. Empty by default.</summary>
|
||||
[Key("reward_list")] public List<Reward> RewardList { get; set; } = new();
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using MessagePack;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Practice;
|
||||
|
||||
[MessagePackObject]
|
||||
public class PracticeOpponent
|
||||
{
|
||||
/// <summary>Practice slot id (unique per entry; AI opponent identifier).</summary>
|
||||
[Key("practice_id")] public int PracticeId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Text-table id resolved client-side via Data.Master.GetPracticeText(text_id).
|
||||
/// Stringified int — client calls .ToString() before lookup. Sent as string to be safe.
|
||||
/// </summary>
|
||||
[Key("text_id")] public string TextId { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>Class (leader) id the AI plays.</summary>
|
||||
[Key("class_id")] public int ClassId { get; set; }
|
||||
|
||||
/// <summary>Portrait / character id (which leader art the AI uses).</summary>
|
||||
[Key("chara_id")] public int CharaId { get; set; }
|
||||
|
||||
/// <summary>Title-degree id shown next to the AI's name.</summary>
|
||||
[Key("degree_id")] public int DegreeId { get; set; }
|
||||
|
||||
/// <summary>AI deck-strength tier (drives which preset deck the AI uses).</summary>
|
||||
[Key("ai_deck_level")] public int AiDeckLevel { get; set; }
|
||||
|
||||
/// <summary>AI decision-making tier.</summary>
|
||||
[Key("ai_logic_level")] public int AiLogicLevel { get; set; }
|
||||
|
||||
/// <summary>Starting HP for the AI side (often 20).</summary>
|
||||
[Key("ai_max_life")] public int AiMaxLife { get; set; } = 20;
|
||||
|
||||
/// <summary>3D battle-field asset id (string on the wire; client int.TryParse's it).</summary>
|
||||
[Key("battle3dfield_id")] public string Battle3dFieldId { get; set; } = "1";
|
||||
|
||||
/// <summary>Optional. true => entry disabled, client prepends maintenance suffix.</summary>
|
||||
[Key("is_maintenance")] public bool? IsMaintenance { get; set; }
|
||||
|
||||
/// <summary>true => entry is a special "campaign" practice (event-tied).</summary>
|
||||
[Key("is_campaign_practice")] public bool IsCampaignPractice { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using MessagePack;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Practice;
|
||||
|
||||
[MessagePackObject]
|
||||
public class PracticeStartResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Optional mission/achievement evaluation snapshot. Spec: safe to omit entirely;
|
||||
/// client tolerates absence (defensive `Keys.Contains` check). Always null in our
|
||||
/// minimal impl — we don't model missions.
|
||||
/// </summary>
|
||||
[Key("mission_parameter")] public object? MissionParameter { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user