diff --git a/EpinelPS/GameData/GameData.cs b/EpinelPS/GameData/GameData.cs index fe0496b..544b8a2 100644 --- a/EpinelPS/GameData/GameData.cs +++ b/EpinelPS/GameData/GameData.cs @@ -67,6 +67,8 @@ namespace EpinelPS.StaticInfo public readonly Dictionary towerTable = []; public readonly Dictionary TriggerTable = []; public readonly Dictionary InfracoreTable = []; + public readonly Dictionary AttractiveCounselCharacterTable = []; + public readonly Dictionary AttractiveLevelReward = []; public byte[] Sha256Hash; @@ -514,6 +516,18 @@ namespace EpinelPS.StaticInfo { this.InfracoreTable.Add(obj.id, obj); } + + var attrData = await LoadZip("AttractiveCounselCharacterTable.json", progress); + foreach (var obj in attrData.records) + { + this.AttractiveCounselCharacterTable.Add(obj.name_code, obj); + } + + var attrLData = await LoadZip("AttractiveLevelRewardTable.json", progress); + foreach (var obj in attrLData.records) + { + this.AttractiveLevelReward.Add(obj.id, obj); + } } public MainQuestCompletionRecord? GetMainQuestForStageClearCondition(int stage) diff --git a/EpinelPS/GameData/JsonStaticData.cs b/EpinelPS/GameData/JsonStaticData.cs index c82345d..f06b98e 100644 --- a/EpinelPS/GameData/JsonStaticData.cs +++ b/EpinelPS/GameData/JsonStaticData.cs @@ -690,4 +690,27 @@ { public List records = []; } + public class AttractiveCounselCharacterRecord + { + public int id; + public int name_code; + public int collect_reward_id; + } + public class AttractiveCounselCharacterTable + { + public List records = []; + } + + public class AttractiveLevelRewardRecord + { + public int id; + public int name_code; + public int reward_id; + public int attractive_level; + public int costume; + } + public class AttractiveLevelRewardTable + { + public List records = []; + } } diff --git a/EpinelPS/LobbyServer/Character/ObtainEpReward.cs b/EpinelPS/LobbyServer/Character/ObtainEpReward.cs index 93950ef..2e0f759 100644 --- a/EpinelPS/LobbyServer/Character/ObtainEpReward.cs +++ b/EpinelPS/LobbyServer/Character/ObtainEpReward.cs @@ -1,4 +1,6 @@ using EpinelPS.Utils; +using EpinelPS.StaticInfo; +using EpinelPS.Database; namespace EpinelPS.LobbyServer.Character { @@ -9,8 +11,27 @@ namespace EpinelPS.LobbyServer.Character { var req = await ReadData(); var response = new ResObtainAttractiveReward(); - - // TODO + var user = GetUser(); + + // look up ID from name code and level + var levelUpRecord = GameData.Instance.AttractiveLevelReward.Where(x => x.Value.attractive_level == req.Level && x.Value.name_code == req.NameCode).FirstOrDefault(); + + foreach (var item in user.BondInfo) + { + if (item.NameCode == req.NameCode) + { + if (!item.ObtainedRewardLevels.Contains(levelUpRecord.Value.id)) + { + item.ObtainedRewardLevels.Add(levelUpRecord.Value.id); + + var reward = GameData.Instance.GetRewardTableEntry(levelUpRecord.Value.reward_id) ?? throw new Exception("failed to get reward"); + response.Reward = RewardUtils.RegisterRewardsForUser(user, reward); + + JsonDb.Save(); + } + break; + } + } await WriteDataAsync(response); }