Unlock all of Paradox's talents

This commit is contained in:
Kei-Luna
2026-05-02 09:13:04 +09:00
parent f07c5f77fd
commit 2fdda3157f
3 changed files with 46 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
using Newtonsoft.Json;
namespace MikuSB.Data.Excel;
[ResourceEntity("server_03_talent.json")]
public class Rogue3DTalentExcel : ExcelResource
{
[JsonProperty("TalentID")] public uint TalentId { get; set; }
[JsonProperty("UnlockCondition")] private object? UnlockConditionRaw { get; set; }
[JsonIgnore] public uint UnlockCondition { get; private set; }
public override uint GetId() => TalentId;
public override void Loaded()
{
UnlockCondition = ParseUnlockCondition(UnlockConditionRaw);
GameData.Rogue3DTalentData[TalentId] = this;
}
private static uint ParseUnlockCondition(object? raw)
{
return raw switch
{
null => 0,
long value when value > 0 => (uint)value,
int value when value > 0 => (uint)value,
string text when uint.TryParse(text, out var value) => value,
_ => 0
};
}
}

View File

@@ -17,6 +17,7 @@ public static class GameData
public static Dictionary<uint, ManifestationExcel> ManifestationData { get; private set; } = []; public static Dictionary<uint, ManifestationExcel> ManifestationData { get; private set; } = [];
public static Dictionary<uint, Rogue3DDifficultExcel> Rogue3DDifficultData { get; private set; } = []; public static Dictionary<uint, Rogue3DDifficultExcel> Rogue3DDifficultData { get; private set; } = [];
public static Dictionary<uint, Rogue3DSeasonExcel> Rogue3DSeasonData { get; private set; } = []; public static Dictionary<uint, Rogue3DSeasonExcel> Rogue3DSeasonData { get; private set; } = [];
public static Dictionary<uint, Rogue3DTalentExcel> Rogue3DTalentData { get; private set; } = [];
public static Dictionary<int, BreakExcel> BreakData { get; private set; } = []; public static Dictionary<int, BreakExcel> BreakData { get; private set; } = [];
public static Dictionary<uint, SpineExcel> SpineData { get; private set; } = []; public static Dictionary<uint, SpineExcel> SpineData { get; private set; } = [];
public static Dictionary<uint, NodeConditionExcel> NodeConditionData { get; private set; } = []; public static Dictionary<uint, NodeConditionExcel> NodeConditionData { get; private set; } = [];

View File

@@ -23,9 +23,23 @@ internal static class Rogue3DStateHelper
EnsureMinAttr(player, UnlockDiff3Sid, 1, sync); EnsureMinAttr(player, UnlockDiff3Sid, 1, sync);
EnsureMinAttr(player, UnlockDiff4Sid, 1, sync); EnsureMinAttr(player, UnlockDiff4Sid, 1, sync);
foreach (var scienceSid in GetUnlockTalentScienceSids())
{
EnsureMinAttr(player, scienceSid, 1, sync);
}
return sync; return sync;
} }
private static IEnumerable<uint> GetUnlockTalentScienceSids()
{
return GameData.Rogue3DTalentData.Values
.Select(x => x.UnlockCondition)
.Where(x => x > 0)
.Distinct()
.OrderBy(x => x);
}
private static void EnsureMinAttr(PlayerInstance player, uint sid, uint value, NtfSyncPlayer sync, bool overwrite = false) private static void EnsureMinAttr(PlayerInstance player, uint sid, uint value, NtfSyncPlayer sync, bool overwrite = false)
{ {
var attr = player.Data.Attrs.FirstOrDefault(x => x.Gid == GroupId && x.Sid == sid); var attr = player.Data.Attrs.FirstOrDefault(x => x.Gid == GroupId && x.Sid == sid);