diff --git a/EpinelPS/EpinelPS.csproj b/EpinelPS/EpinelPS.csproj index dcfc64c..33a91f4 100644 --- a/EpinelPS/EpinelPS.csproj +++ b/EpinelPS/EpinelPS.csproj @@ -15,15 +15,15 @@ - - - + + + + - + - - + diff --git a/EpinelPS/LobbyServer/Msgs/Inventory/UsePiece.cs b/EpinelPS/LobbyServer/Msgs/Inventory/UsePiece.cs new file mode 100644 index 0000000..dd06a86 --- /dev/null +++ b/EpinelPS/LobbyServer/Msgs/Inventory/UsePiece.cs @@ -0,0 +1,20 @@ +using EpinelPS.Utils; + +namespace EpinelPS.LobbyServer.Msgs.Inventory +{ + [PacketPath("/inventory/usepiece")] + public class UsePiece : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + var user = GetUser(); + + var response = new ResUsePiece(); + + // TODO + + await WriteDataAsync(response); + } + } +} diff --git a/EpinelPS/LobbyServer/Msgs/Stage/ClearStage.cs b/EpinelPS/LobbyServer/Msgs/Stage/ClearStage.cs index acde6d0..3b05ca0 100644 --- a/EpinelPS/LobbyServer/Msgs/Stage/ClearStage.cs +++ b/EpinelPS/LobbyServer/Msgs/Stage/ClearStage.cs @@ -203,14 +203,39 @@ namespace EpinelPS.LobbyServer.Msgs.Stage } else if (item.reward_type == "Item") { - var id = user.GenerateUniqueItemId(); - user.Items.Add(new ItemData() { ItemType = item.reward_id, Isn = id, Level = 1, Exp = 0, Count = 1 }); - ret.Item.Add(new NetItemData() + // Check if user already has said item. If it is level 1, increase item count. + // If user does not have item, generate a new item ID + if (user.Items.Where(x => x.ItemType == item.reward_id && x.Level == 1).Any()) { - Count = item.reward_value, - Tid = item.reward_id, - Isn = id - }); + ItemData? newItem = user.Items.Where(x => x.ItemType == item.reward_id && x.Level == 1).FirstOrDefault(); + if (newItem != null) + { + newItem.Count += item.reward_value; + + ret.Item.Add(new NetItemData() + { + Count = item.reward_value, + Tid = item.reward_id, + Isn = newItem.Isn + }); + } + else + { + throw new Exception("should not occur"); + } + } + else + { + + var id = user.GenerateUniqueItemId(); + user.Items.Add(new ItemData() { ItemType = item.reward_id, Isn = id, Level = 1, Exp = 0, Count = item.reward_value }); + ret.Item.Add(new NetItemData() + { + Count = item.reward_value, + Tid = item.reward_id, + Isn = id + }); + } } else if (item.reward_type == "Memorial") { diff --git a/EpinelPS/LobbyServer/Msgs/Trigger/ObtainMainQuestReward.cs b/EpinelPS/LobbyServer/Msgs/Trigger/ObtainMainQuestReward.cs index d425f5c..67f9adf 100644 --- a/EpinelPS/LobbyServer/Msgs/Trigger/ObtainMainQuestReward.cs +++ b/EpinelPS/LobbyServer/Msgs/Trigger/ObtainMainQuestReward.cs @@ -19,10 +19,11 @@ namespace EpinelPS.LobbyServer.Msgs.Trigger var user = GetUser(); ResObtainMainQuestReward response = new(); - List rewards = new(); + List rewards = []; foreach (var item in user.MainQuestData) { + // give only rewards for things that were completed and not claimed already if (!item.Value && req.TidList.Contains(item.Key)) { user.MainQuestData[item.Key] = true; @@ -37,6 +38,12 @@ namespace EpinelPS.LobbyServer.Msgs.Trigger } response.Reward = NetUtils.MergeRewards(rewards, user); + + foreach (var item in response.Reward.Item) + { + Console.WriteLine($"item: {item.Tid} {item.Isn} {item.Count}"); + } + JsonDb.Save(); await WriteDataAsync(response); diff --git a/EpinelPS/Utils/NetUtils.cs b/EpinelPS/Utils/NetUtils.cs index a3b851a..b94ac88 100644 --- a/EpinelPS/Utils/NetUtils.cs +++ b/EpinelPS/Utils/NetUtils.cs @@ -108,8 +108,8 @@ namespace EpinelPS.Utils { NetRewardData result = new(); - Dictionary currencyDict = new Dictionary(); - List items = new List(); + Dictionary currencyDict = []; + List items = []; foreach (NetRewardData reward in rewards) { diff --git a/ServerSelector.Desktop/ServerSelector.Desktop.csproj b/ServerSelector.Desktop/ServerSelector.Desktop.csproj index 822c169..86bafdc 100644 --- a/ServerSelector.Desktop/ServerSelector.Desktop.csproj +++ b/ServerSelector.Desktop/ServerSelector.Desktop.csproj @@ -13,7 +13,7 @@ - + diff --git a/ServerSelector/ServerSelector.csproj b/ServerSelector/ServerSelector.csproj index 4b8eae1..07e69b4 100644 --- a/ServerSelector/ServerSelector.csproj +++ b/ServerSelector/ServerSelector.csproj @@ -11,11 +11,11 @@ - - + + - - + +