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 @@
-
-
+
+
-
-
+
+