SupporterCard Affix can now be changed.

This commit is contained in:
Kei-Luna
2026-05-16 16:20:17 +09:00
parent e628a010be
commit f8f7311997
17 changed files with 549 additions and 30 deletions

View File

@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace MikuSB.Data.Excel;
@@ -14,6 +15,9 @@ public class SupportCardExcel : ExcelResource
public uint Color { get; set; }
[JsonProperty("LevelLimitID")] public int LevelLimitId { get; set; }
[JsonProperty("AffixPool")] public List<int> AffixPool { get; set; } = [];
[JsonProperty("AffixCost")] public JToken? AffixCostRaw { get; set; }
[JsonProperty("InitialAffixCost")] public JToken? InitialAffixCostRaw { get; set; }
[JsonProperty("FixedAffixCost")] public JToken? FixedAffixCostRaw { get; set; }
public uint MaxLevel => LevelLimitId switch
{
@@ -23,12 +27,19 @@ public class SupportCardExcel : ExcelResource
_ => 10
};
// Number of affixes granted initially
public int InitialAffixCount => Color >= 5 ? 2 : 1;
// Total maximum affixes (including ones unlocked at max level)
public int TotalAffixCount => Color >= 5 ? 3 : 2;
[JsonIgnore]
public IReadOnlyList<uint> AffixCost => ParseFlatCost(AffixCostRaw);
[JsonIgnore]
public IReadOnlyList<IReadOnlyList<uint>> InitialAffixCost => ParseNestedCost(InitialAffixCostRaw);
[JsonIgnore]
public IReadOnlyList<uint> FixedAffixCost => ParseFlatCost(FixedAffixCostRaw);
public ulong TemplateId => GameResourceTemplateId.FromGdpl(Genre, Detail, Particular, Level);
public override uint GetId() => Icon;
@@ -37,4 +48,23 @@ public class SupportCardExcel : ExcelResource
{
GameData.SupportCardData.Add(this);
}
private static IReadOnlyList<uint> ParseFlatCost(JToken? token)
{
if (token is not JArray array)
return [];
return array.Select(x => x.Value<uint>()).ToArray();
}
private static IReadOnlyList<IReadOnlyList<uint>> ParseNestedCost(JToken? token)
{
if (token is not JArray outer)
return [];
var result = new List<IReadOnlyList<uint>>();
foreach (var entry in outer.OfType<JArray>())
result.Add(entry.Select(x => x.Value<uint>()).ToArray());
return result;
}
}

View File

@@ -0,0 +1,18 @@
using Newtonsoft.Json;
namespace MikuSB.Data.Excel;
[ResourceEntity("item/support/fixed.json")]
public class SupportFixedExcel : ExcelResource
{
[JsonProperty("ID")] public int Id { get; set; }
public int Num { get; set; }
public List<uint> Item { get; set; } = [];
public override uint GetId() => (uint)Id;
public override void Loaded()
{
GameData.SupportFixedData[Id] = this;
}
}

View File

@@ -25,6 +25,7 @@ public static class GameData
public static List<SupportCardExcel> SupportCardData { get; private set; } = [];
public static Dictionary<int, SupportAffixExcel> SupportAffixData { get; private set; } = [];
public static Dictionary<int, SupportAffixPoolExcel> SupportAffixPoolData { get; private set; } = [];
public static Dictionary<int, SupportFixedExcel> SupportFixedData { get; private set; } = [];
public static Dictionary<uint, WeaponSkinExcel> WeaponSkinData { get; private set; } = [];
public static Dictionary<uint, DailyLevelExcel> DailyLevelData { get; private set; } = [];
public static Dictionary<uint, ProfileExcel> ProfileData { get; private set; } = [];