feat(matching): IBotRoster + hardcoded BotRoster fixture (8 bots, one per class)
AIBotProfile carries the cosmetic metadata the AI rank-battle start endpoint composes into oppo_info. BotRoster.Pick is deterministic per MatchContext so mid-flight retries get the same opponent. ai_id values 4001..4008 are placeholders per the existing ai-start.md TODO — we have no live capture of the prod catalog. Future improvement: migrate Roster to a bot-roster.json seed under SVSim.Bootstrap/Data/seeds/ for editability without rebuilds. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
23
SVSim.EmulatedEntrypoint/Matching/AIBotProfile.cs
Normal file
23
SVSim.EmulatedEntrypoint/Matching/AIBotProfile.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
namespace SVSim.EmulatedEntrypoint.Matching;
|
||||
|
||||
/// <summary>
|
||||
/// Cosmetic + identity metadata for an AI opponent. Used to compose
|
||||
/// <c>oppo_info</c> in the <c>/ai_<fmt>_rank_battle/start</c> response.
|
||||
/// The wire keys are camelCase (sleeveId, emblemId, etc.) — the DTO handles
|
||||
/// the JSON serialization; this record is the internal-facing shape.
|
||||
/// </summary>
|
||||
public sealed record AIBotProfile(
|
||||
int AiId,
|
||||
string CountryCode,
|
||||
string UserName,
|
||||
int SleeveId,
|
||||
int EmblemId,
|
||||
int DegreeId,
|
||||
int FieldId,
|
||||
int IsOfficial,
|
||||
int ClassId,
|
||||
int CharaId,
|
||||
int Rank,
|
||||
int BattlePoint,
|
||||
int IsMasterRank,
|
||||
int MasterPoint);
|
||||
Reference in New Issue
Block a user