fix(tk2): match original SV (5-battle cap, no loss limit)

User clarified: the 0..7 win reward tiers came from Shadowverse Worlds
Beyond (sequel), not the original game we're emulating. Original SV's
Take Two caps at 5 total battles played and has no loss limit (verified
on prod: queueing continues with 2+ losses).

- arena-two-pick-rewards.json: drop 6w + 7w tiers (12 rows remain).
- ArenaTwoPickConfig: remove MaxLosses property.
- ArenaTwoPickService: termination is now battlesPlayed >= maxBattles
  (5 from MAX(reward.WinCount)). RecordBattleResult no longer flips
  IsSelectCompleted on the 2nd loss.
- ResolveMaxBattleCountAsync empty-catalog default 7 → 5.
- Tests updated for the new counts (16 → 12 rows, max 7 → 5).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-05-31 12:47:43 -04:00
parent dc19289818
commit 6381e4da51
7 changed files with 31 additions and 32 deletions

View File

@@ -18,25 +18,26 @@ public class ArenaTwoPickRewardImporterTests
}
[Test]
public async Task Import_loads_all_16_rows_from_seed_file()
public async Task Import_loads_all_12_rows_from_seed_file()
{
await using var db = await CreateContextAsync();
var importer = new ArenaTwoPickRewardImporter();
await importer.ImportAsync(db, FindSeedDir());
// 6 WinCount tiers (0..5) × 2 reward rows each = 12. Classic SV TK2 caps at 5 battles.
var rows = await db.ArenaTwoPickRewards.OrderBy(r => r.WinCount).ThenBy(r => r.RewardType).ToListAsync();
Assert.That(rows.Count, Is.EqualTo(16));
Assert.That(rows.Max(r => r.WinCount), Is.EqualTo(7));
Assert.That(rows.Count, Is.EqualTo(12));
Assert.That(rows.Max(r => r.WinCount), Is.EqualTo(5));
var w0 = rows.Where(r => r.WinCount == 0).ToList();
Assert.That(w0.Count, Is.EqualTo(2));
Assert.That(w0.Single(r => r.RewardType == 4).RewardNum, Is.EqualTo(1));
Assert.That(w0.Single(r => r.RewardType == 9).RewardNum, Is.EqualTo(100));
var w7 = rows.Where(r => r.WinCount == 7).ToList();
Assert.That(w7.Single(r => r.RewardType == 4).RewardNum, Is.EqualTo(2));
Assert.That(w7.Single(r => r.RewardType == 9).RewardNum, Is.EqualTo(1500));
var w5 = rows.Where(r => r.WinCount == 5).ToList();
Assert.That(w5.Single(r => r.RewardType == 4).RewardNum, Is.EqualTo(1));
Assert.That(w5.Single(r => r.RewardType == 9).RewardNum, Is.EqualTo(1000));
}
[Test]
@@ -49,7 +50,7 @@ public class ArenaTwoPickRewardImporterTests
await importer.ImportAsync(db, FindSeedDir());
var count = await db.ArenaTwoPickRewards.CountAsync();
Assert.That(count, Is.EqualTo(16), "second import should upsert, not duplicate");
Assert.That(count, Is.EqualTo(12), "second import should upsert, not duplicate");
}
private static string FindSeedDir()