From 3df70d2dbe5e3b76f8033bea6614da049f74c535 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Sat, 6 Jul 2024 14:03:45 -0400 Subject: [PATCH] save campaign field object --- nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs | 1 - .../Msgs/Campaign/SaveFieldObject.cs | 37 ++++++++++++++ .../Msgs/Event/CompleteEventScenario.cs | 37 ++++++++++++++ .../LobbyServer/Msgs/Event/EnterEventField.cs | 24 +++++++++ .../Msgs/Event/GetEventScenario.cs | 32 ++++++++++++ nksrv/LobbyServer/Msgs/Event/ListEvents.cs | 2 +- .../Msgs/Inventory/GetInventoryData.cs | 2 +- nksrv/LobbyServer/Msgs/Stage/GetStage.cs | 4 ++ .../LobbyServer/Msgs/User/EnterLobbyServer.cs | 2 +- nksrv/Protos/allmsgs.proto | 49 +++++++++++++++++++ nksrv/Utils/JsonDb.cs | 15 ++++++ 11 files changed, 201 insertions(+), 4 deletions(-) create mode 100644 nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs create mode 100644 nksrv/LobbyServer/Msgs/Event/CompleteEventScenario.cs create mode 100644 nksrv/LobbyServer/Msgs/Event/EnterEventField.cs create mode 100644 nksrv/LobbyServer/Msgs/Event/GetEventScenario.cs diff --git a/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs b/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs index 1da7586..dbe7e33 100644 --- a/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs +++ b/nksrv/LobbyServer/Msgs/Campaign/ObtainItem.cs @@ -26,7 +26,6 @@ namespace nksrv.LobbyServer.Msgs.Campaign // TODO response.Reward = new(); - WriteData(response); diff --git a/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs b/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs new file mode 100644 index 0000000..680a9ba --- /dev/null +++ b/nksrv/LobbyServer/Msgs/Campaign/SaveFieldObject.cs @@ -0,0 +1,37 @@ +using nksrv.StaticInfo; +using nksrv.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace nksrv.LobbyServer.Msgs.Campaign +{ + [PacketPath("/campaign/savefieldobject")] + public class SaveFieldObject : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + var user = GetUser(); + + Console.WriteLine("Map ID: " + req.MapId); + + var response = new ResSaveCampaignFieldObject(); + + Console.WriteLine($"save {req.MapId} with {req.FieldObject.PositionID}"); + + var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId); + var mod = req.MapId.Contains("hard") ? "Hard" : "Normal"; + var key = chapter + "_" + mod; + var field = user.FieldInfo[key]; + + field.CompletedObjects.Add(new NetFieldObject() { PositionId = req.FieldObject.PositionID, Json = req.FieldObject.Json, Type = req.FieldObject.Type }); + JsonDb.Save(); + + + WriteData(response); + } + } +} diff --git a/nksrv/LobbyServer/Msgs/Event/CompleteEventScenario.cs b/nksrv/LobbyServer/Msgs/Event/CompleteEventScenario.cs new file mode 100644 index 0000000..f930ae8 --- /dev/null +++ b/nksrv/LobbyServer/Msgs/Event/CompleteEventScenario.cs @@ -0,0 +1,37 @@ +using nksrv.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace nksrv.LobbyServer.Msgs.Event +{ + [PacketPath("/event/scenario/complete")] + public class CompleteEventScenario : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + var user = GetUser(); + + if (user.EventInfo.ContainsKey(req.EventID)) + { + var evt = user.EventInfo[req.EventID]; + evt.CompletedScenarios.Add(req.ScenarioId); + } + else + { + var evt = new EventData(); + evt.CompletedScenarios.Add(req.ScenarioId); + user.EventInfo.Add(req.EventID, evt); + } + + var response = new ResSetEventScenarioComplete(); + + // TODO reward + + WriteData(response); + } + } +} diff --git a/nksrv/LobbyServer/Msgs/Event/EnterEventField.cs b/nksrv/LobbyServer/Msgs/Event/EnterEventField.cs new file mode 100644 index 0000000..c021005 --- /dev/null +++ b/nksrv/LobbyServer/Msgs/Event/EnterEventField.cs @@ -0,0 +1,24 @@ +using nksrv.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace nksrv.LobbyServer.Msgs.Event +{ + [PacketPath("/eventfield/enter")] + public class EnterEventField : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + + var response = new ResEnterEventField(); + + // TOOD + + WriteData(response); + } + } +} diff --git a/nksrv/LobbyServer/Msgs/Event/GetEventScenario.cs b/nksrv/LobbyServer/Msgs/Event/GetEventScenario.cs new file mode 100644 index 0000000..e13afd7 --- /dev/null +++ b/nksrv/LobbyServer/Msgs/Event/GetEventScenario.cs @@ -0,0 +1,32 @@ +using nksrv.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace nksrv.LobbyServer.Msgs.Event +{ + [PacketPath("/event/scenario/get")] + public class GetEventScenario : LobbyMsgHandler + { + protected override async Task HandleAsync() + { + var req = await ReadData(); + var user = GetUser(); + + var response = new ResGetEventScenarioData(); + if (user.EventInfo.ContainsKey(req.EventID)) + { + var evt = user.EventInfo[req.EventID]; + response.ScenarioIdList.AddRange(evt.CompletedScenarios); + } + else + { + user.EventInfo.Add(req.EventID, new EventData()); + } + + WriteData(response); + } + } +} diff --git a/nksrv/LobbyServer/Msgs/Event/ListEvents.cs b/nksrv/LobbyServer/Msgs/Event/ListEvents.cs index d889755..4307825 100644 --- a/nksrv/LobbyServer/Msgs/Event/ListEvents.cs +++ b/nksrv/LobbyServer/Msgs/Event/ListEvents.cs @@ -89,7 +89,7 @@ namespace nksrv.LobbyServer.Msgs.Event EventVisibleDate = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1)).Ticks, EventDisableDate = DateTime.Now.AddDays(20).Ticks, EventEndDate = DateTime.Now.AddDays(20).Ticks, - EventSystemType = 2 + EventSystemType = 22 }); // Aegis the Diver event diff --git a/nksrv/LobbyServer/Msgs/Inventory/GetInventoryData.cs b/nksrv/LobbyServer/Msgs/Inventory/GetInventoryData.cs index 54fd771..c3743f2 100644 --- a/nksrv/LobbyServer/Msgs/Inventory/GetInventoryData.cs +++ b/nksrv/LobbyServer/Msgs/Inventory/GetInventoryData.cs @@ -18,7 +18,7 @@ namespace nksrv.LobbyServer.Msgs.Inventory var response = new ResGetInventoryData(); foreach (var item in user.Items) { - response.Items.Add(new NetUserItemData() { Tid = item.ItemType, Count = 1 }); + response.Items.Add(new NetUserItemData() { Count = item.Count, Tid = item.ItemType, Csn = item.Csn, Lv = item.Level, Exp = item.Exp, Corporation = item.Corp, Isn = item.Isn, Position = item.Position }); } // TODO implement diff --git a/nksrv/LobbyServer/Msgs/Stage/GetStage.cs b/nksrv/LobbyServer/Msgs/Stage/GetStage.cs index 0f59785..14a62a6 100644 --- a/nksrv/LobbyServer/Msgs/Stage/GetStage.cs +++ b/nksrv/LobbyServer/Msgs/Stage/GetStage.cs @@ -43,6 +43,10 @@ namespace nksrv.LobbyServer.Msgs.Stage { f.Stages.Add(stage); } + foreach (var obj in item.Value.CompletedObjects) + { + f.Objects.Add(obj); + } break; } } diff --git a/nksrv/LobbyServer/Msgs/User/EnterLobbyServer.cs b/nksrv/LobbyServer/Msgs/User/EnterLobbyServer.cs index 35bbabb..86cb0ba 100644 --- a/nksrv/LobbyServer/Msgs/User/EnterLobbyServer.cs +++ b/nksrv/LobbyServer/Msgs/User/EnterLobbyServer.cs @@ -53,7 +53,7 @@ namespace nksrv.LobbyServer.Msgs.User } foreach (var item in user.Items) { - response.Items.Add(new NetUserItemData() { Count = 1, Tid = item.ItemType}); + response.Items.Add(new NetUserItemData() { Count = item.Count, Tid = item.ItemType, Csn = item.Csn, Lv = item.Level, Exp = item.Exp, Corporation = item.Corp, Isn = item.Isn, Position = item.Position}); } diff --git a/nksrv/Protos/allmsgs.proto b/nksrv/Protos/allmsgs.proto index 72d79bf..da63934 100644 --- a/nksrv/Protos/allmsgs.proto +++ b/nksrv/Protos/allmsgs.proto @@ -2065,4 +2065,53 @@ message ReqExistScenarioBookmark { } message ResExistScenarioBookmark { repeated string existingBookmarkList = 1; +} + +message ReqGetEventScenarioData { + int32 EventID = 2; +} +message ResGetEventScenarioData { + repeated string scenarioIdList = 1; + repeated string bookmarkScenarioList = 2; +} + +message ReqSetEventScenarioComplete { + int32 EventID = 2; + string ScenarioId = 3; + int32 DialogType = 4; +} +message ResSetEventScenarioComplete { + NetRewardData Reward = 1; +} + +message ReqEnterEventField { + string MapId = 1; + repeated int32 ProgressEventGroupIdList = 2; + int32 EventFieldId = 3; +} +message NetUserAutoChargeData { + int32 AutoChargeId = 1; + int32 Value = 2; +} + +message NetNonResettableFieldObject { + string PositionId = 1; + int32 Type = 2; + string Json = 3; +} + +message ResEnterEventField { + NetUserTeamData team = 2; + repeated NetCampaignTeamPosition TeamPositions = 3; + string json = 4; + repeated int32 userEventIdList = 5; + repeated NetUserAutoChargeData autoChargeDataList = 6; + repeated NetNonResettableFieldObject NonResettableFieldObjects = 7; +} + +message ReqSaveCampaignFieldObject { + string mapId = 2; + NetCampaignFieldObject fieldObject = 3; +} +message ResSaveCampaignFieldObject { } \ No newline at end of file diff --git a/nksrv/Utils/JsonDb.cs b/nksrv/Utils/JsonDb.cs index e57c8ab..2979e23 100644 --- a/nksrv/Utils/JsonDb.cs +++ b/nksrv/Utils/JsonDb.cs @@ -21,6 +21,7 @@ namespace nksrv.Utils public class FieldInfo { public List CompletedStages = []; + public List CompletedObjects = []; } public class Character @@ -51,6 +52,17 @@ namespace nksrv.Utils public class ItemData { public int ItemType; + public long Csn; + public int Count; + public int Level; + public int Exp; + public int Position; + public int Corp; + public long Isn; + } + public class EventData + { + public List CompletedScenarios = new(); } public class User @@ -95,6 +107,9 @@ namespace nksrv.Utils public NetOutpostBattleLevel OutpostBattleLevel = new() { Level = 1 }; public int GachaTutorialPlayCount = 0; + // Event data + public Dictionary EventInfo = new(); + public void SetQuest(int tid, bool recieved) { if (MainQuestData.ContainsKey(tid))