diff --git a/Common/Data/Excel/Rogue3DDifficultExcel.cs b/Common/Data/Excel/Rogue3DDifficultExcel.cs new file mode 100644 index 0000000..150909e --- /dev/null +++ b/Common/Data/Excel/Rogue3DDifficultExcel.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; + +namespace MikuSB.Data.Excel; + +[ResourceEntity("server_01_difficult.json")] +public class Rogue3DDifficultExcel : ExcelResource +{ + [JsonProperty("DifficultID")] public uint DifficultId { get; set; } + [JsonProperty("GameplayGroup")] public List GameplayGroup { get; set; } = []; + + public override uint GetId() => DifficultId; + + public override void Loaded() + { + GameData.Rogue3DDifficultData[DifficultId] = this; + } +} diff --git a/Common/Data/GameData.cs b/Common/Data/GameData.cs index ef3631f..c21fe8f 100644 --- a/Common/Data/GameData.cs +++ b/Common/Data/GameData.cs @@ -15,6 +15,7 @@ public static class GameData public static Dictionary ChapterLevelData { get; private set; } = []; public static Dictionary ArItemData { get; private set; } = []; public static Dictionary ManifestationData { get; private set; } = []; + public static Dictionary Rogue3DDifficultData { get; private set; } = []; } public static class GameResourceTemplateId diff --git a/GameServer/Server/CallGS/Handlers/Rogue3D/Rogue3D_SelectDiff.cs b/GameServer/Server/CallGS/Handlers/Rogue3D/Rogue3D_SelectDiff.cs index ac133c3..5ab1911 100644 --- a/GameServer/Server/CallGS/Handlers/Rogue3D/Rogue3D_SelectDiff.cs +++ b/GameServer/Server/CallGS/Handlers/Rogue3D/Rogue3D_SelectDiff.cs @@ -1,10 +1,10 @@ +using MikuSB.Data; using MikuSB.Database.Player; using MikuSB.GameServer.Game.Player; using MikuSB.Proto; using System.Text.Json; using System.Text.Json.Serialization; - namespace MikuSB.GameServer.Server.CallGS.Handlers.Rogue3D; // Selects the Rogue3D difficulty. @@ -18,16 +18,6 @@ public class Rogue3D_SelectDiff : ICallGSHandler private const uint CurDiffSid = 5; private const uint GameplayIdSid = 6; - // First gameplay group per difficulty (from server_01_difficult.txt, GameplayGroup column) - private static readonly Dictionary DiffToGameplayGroup = new() - { - { 1, 100 }, - { 2, 200 }, - { 3, 300 }, - { 4, 400 }, - { 100, 811 }, - }; - public async Task Handle(Connection connection, string param, ushort seqNo) { var req = JsonSerializer.Deserialize(param); @@ -37,7 +27,7 @@ public class Rogue3D_SelectDiff : ICallGSHandler return; } - if (!DiffToGameplayGroup.TryGetValue(req.DiffId, out var gameplayGroup)) + if (!GameData.Rogue3DDifficultData.TryGetValue(req.DiffId, out var cfg) || cfg.GameplayGroup.Count == 0) { await CallGSRouter.SendScript(connection, "Rogue3D_SelectDiff", "{\"sErr\":\"rogue3.massage_gameProcessError\"}"); return; @@ -47,7 +37,7 @@ public class Rogue3D_SelectDiff : ICallGSHandler var sync = new NtfSyncPlayer(); SetAttr(player, CurDiffSid, req.DiffId, sync); - SetAttr(player, GameplayIdSid, gameplayGroup, sync); + SetAttr(player, GameplayIdSid, cfg.GameplayGroup[0], sync); await CallGSRouter.SendScript(connection, "Rogue3D_SelectDiff", "{}", sync); }