fix(deckbuilder): лишние копии считаются по конкретному принту
CI / test (push) Successful in 2m55s
Details
CI / test (push) Successful in 2m55s
Details
- PlanExtras больше не суммирует разные принты одного названия: излишек считается как Count - 4 для каждого printingId отдельно. - Раньше при нескольких принтах одной карты предлагалось распылить почти всю коллекцию. - Тест на два принта; EditMode 71/71, standalone собран.
This commit is contained in:
parent
42e57f5ac1
commit
37fb875d42
|
|
@ -206,9 +206,8 @@ namespace Vanguard.UI
|
|||
&& !string.Equals(trigger, "None", StringComparison.Ordinal);
|
||||
|
||||
/// <summary>
|
||||
/// План распыления лишних копий: всё сверх 4 на название. SP/TD не
|
||||
/// распыляются, поэтому пропускаются. Сначала берутся карты с меньшей
|
||||
/// ценой распыления, чтобы сохранить ценные.
|
||||
/// План распыления лишних копий: всё сверх 4 на конкретный принт
|
||||
/// (номер карты). SP/TD не распыляются, поэтому пропускаются.
|
||||
/// </summary>
|
||||
public static DismantlePlan PlanExtras(IEnumerable<CollectionItemDto> collection)
|
||||
{
|
||||
|
|
@ -216,24 +215,14 @@ namespace Vanguard.UI
|
|||
if (collection == null)
|
||||
return plan;
|
||||
|
||||
foreach (var group in collection.GroupBy(item => item.NameId))
|
||||
foreach (var item in collection)
|
||||
{
|
||||
var total = group.Sum(item => item.Count);
|
||||
var extra = total - 4;
|
||||
if (extra <= 0)
|
||||
var extra = item.Count - 4;
|
||||
var dust = DustFor(item.Rarity);
|
||||
if (extra <= 0 || dust <= 0)
|
||||
continue;
|
||||
|
||||
foreach (var item in group
|
||||
.Where(item => DustFor(item.Rarity) > 0 && item.Count > 0)
|
||||
.OrderBy(item => DustFor(item.Rarity)))
|
||||
{
|
||||
if (extra <= 0)
|
||||
break;
|
||||
|
||||
var take = Math.Min(extra, item.Count);
|
||||
plan.Add(item.PrintingId, take, take * DustFor(item.Rarity));
|
||||
extra -= take;
|
||||
}
|
||||
plan.Add(item.PrintingId, extra, extra * dust);
|
||||
}
|
||||
|
||||
return plan;
|
||||
|
|
|
|||
|
|
@ -159,6 +159,23 @@ namespace Vanguard.Tests
|
|||
Assert.AreEqual("a", plan.Items[0].PrintingId);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PlanExtras_Counts_Extra_Copies_Per_Printing()
|
||||
{
|
||||
var collection = new List<CollectionItemDto>
|
||||
{
|
||||
new CollectionItemDto { PrintingId = "a", NameId = "A", Rarity = "C", Count = 5 },
|
||||
new CollectionItemDto { PrintingId = "b", NameId = "A", Rarity = "R", Count = 6 },
|
||||
new CollectionItemDto { PrintingId = "c", NameId = "A", Rarity = "R", Count = 4 },
|
||||
};
|
||||
|
||||
var plan = DeckListModel.PlanExtras(collection);
|
||||
|
||||
Assert.AreEqual(3, plan.CardCount);
|
||||
Assert.AreEqual(25, plan.Dust);
|
||||
Assert.AreEqual(2, plan.Items.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Validate_Requires_Count_Triggers_And_Copy_Limit()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue