campaign UI working

This commit is contained in:
Mikhail Thompson
2024-06-26 22:02:09 +03:00
parent ce0b5bf040
commit 7c6e57bd63
15 changed files with 306 additions and 9 deletions

View File

@@ -0,0 +1,30 @@
using Google.Protobuf;
using nksrv;
using System.Diagnostics;
namespace ProtobufViewUtil
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
ResGetScenarioList s = new ResGetScenarioList();
var inn = File.ReadAllBytes(@"C:\NIKKE\NIKKE\game\ses1\output-49");
s.MergeFrom(inn);
Console.WriteLine(s.ToString());
var outt = s.ToByteArray();
if (inn.SequenceEqual(outt))
{
Console.WriteLine("Check OK");
}
else
{
Console.WriteLine("Check FAIL");
}
Debugger.Break();
}
}
}

View File

@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Grpc.Core" Version="2.46.6" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\nksrv\nksrv.csproj" />
</ItemGroup>
<ItemGroup>
<Protobuf Include="..\nksrv/Protos/allmsgs.proto" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1 @@


View File

@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nksrv", "nksrv\nksrv.csproj
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataFixupUtil", "DataFixupUtil\DataFixupUtil.csproj", "{13124DFB-448B-4F4F-A479-537EE067D836}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtobufViewUtil", "ProtobufViewUtil\ProtobufViewUtil.csproj", "{FDEDD0D6-9C02-4E58-8110-04E8D5639881}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -41,6 +43,18 @@ Global
{13124DFB-448B-4F4F-A479-537EE067D836}.Release|x64.Build.0 = Release|Any CPU
{13124DFB-448B-4F4F-A479-537EE067D836}.Release|x86.ActiveCfg = Release|Any CPU
{13124DFB-448B-4F4F-A479-537EE067D836}.Release|x86.Build.0 = Release|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Debug|x64.ActiveCfg = Debug|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Debug|x64.Build.0 = Debug|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Debug|x86.ActiveCfg = Debug|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Debug|x86.Build.0 = Debug|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Release|Any CPU.Build.0 = Release|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Release|x64.ActiveCfg = Release|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Release|x64.Build.0 = Release|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Release|x86.ActiveCfg = Release|Any CPU
{FDEDD0D6-9C02-4E58-8110-04E8D5639881}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -12,9 +12,29 @@ namespace nksrv.LobbyServer.Msgs.Campaign
{
protected override async Task HandleAsync()
{
var req = ReadData<ReqGetCampaignFieldData>();
var req = await ReadData<ReqGetCampaignFieldData>();
var user = GetUser();
Console.WriteLine("Map ID: " + req.MapId);
var response = new ResGetCampaignFieldData();
response.Field = new NetFieldObjectData();
// todo save this data
response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 };
string resultingJson;
if (!user.MapJson.ContainsKey(req.MapId))
{
resultingJson = "{\"_mapID\":\"" + req.MapId + "\",\"_triggerDataList\":[],\"_interactionActionTriggerDataList\":[],\"_interactionObjectDataList\":[],\"_questObjectDataList\":[],\"_togglePortalDataList\":[],\"_squadDataList\":[{\"UniqueKey\":\"a365d3ab-2961-4eb8-940b-f68629957b48\",\"IsValid\":true,\"TeamType\":1,\"Number\":1,\"Position\":{\"x\":-14.899999618530274,\"y\":0.08333173394203186,\"z\":-3.2200000286102297}}]}";
user.MapJson.Add(req.MapId, resultingJson);
}
else
{
resultingJson = user.MapJson[req.MapId];
}
WriteData(response);
}
}

View File

@@ -0,0 +1,33 @@
using nksrv.Utils;
namespace nksrv.LobbyServer.Msgs.Campaign
{
[PacketPath("/campaign/savefield")]
public class SaveField : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqSaveCampaignField>();
var user = GetUser();
Console.WriteLine("Map ID: " + req.MapId);
var response = new ResGetFieldTalkList();
Console.WriteLine($"todo save {req.MapId} with {req.Json}");
if (!user.MapJson.ContainsKey(req.MapId))
{
user.MapJson.Add(req.MapId, req.Json);
}
else
{
user.MapJson[req.MapId] = req.Json;
}
WriteData(response);
}
}
}

View File

@@ -0,0 +1,39 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Stage
{
[PacketPath("/stage/checkclear")]
public class CheckCleared : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqCheckStageClear>();
var response = new ResCheckStageClear();
var user = GetUser();
foreach (var stageIds in req.StageIds)
{
foreach (var fields in user.FieldInfo)
{
foreach (var stages in fields.Value.CompletedStages)
{
if (stages.StageId == stageIds)
{
response.ClearedStageIds.Add(stages.StageId);
}
}
}
}
WriteData(response);
}
}
}

View File

@@ -15,13 +15,22 @@ namespace nksrv.LobbyServer.Msgs.Stage
var req = await ReadData<ReqClearStage>();
var response = new ResClearStage();
var user = GetUser();
// TOOD: save to user info
Console.WriteLine($"Stage " + req.StageId + " completed, result is " + req.BattleResult);
if (req.BattleResult == 1)
{
GetUser().LastStageCleared = req.StageId;
user.LastStageCleared = req.StageId;
if (user.FieldInfo.Count == 0)
{
user.FieldInfo.Add(0, new FieldInfo() { });
}
// TODO: figure out how stageid corresponds to chapter
user.FieldInfo[0].CompletedStages.Add(new NetFieldStageData() { StageId = req.StageId });
JsonDb.Save();
}

View File

@@ -12,9 +12,41 @@ namespace nksrv.LobbyServer.Msgs.Stage
{
protected override async Task HandleAsync()
{
var req = ReadData<ReqGetStageData>();
var req = await ReadData<ReqGetStageData>();
var user = GetUser();
var response = new ResGetStageData();
response.Field = new NetFieldObjectData();
// locate chapter
bool found = false;
retry:
foreach (var item in user.FieldInfo)
{
if (item.Key == req.Chapter)
{
found = true;
foreach (var stage in item.Value.CompletedStages)
{
response.Field.Stages.Add(stage);
}
response.HasChapterBossEntered = item.Value.BossEntered;
break;
}
}
if (!found)
{
Console.WriteLine("chapter not found: " + req.Chapter);
user.FieldInfo.Add(req.Chapter, new FieldInfo());
goto retry;
}
response.SquadData = "";
WriteData(response);
}

View File

@@ -8,10 +8,10 @@ namespace nksrv.LobbyServer.Msgs.System
protected override async Task HandleAsync()
{
var req = await ReadData<CheckVersionRequest>();
var r = new CheckVersionResponse();
r.Availability = 0; // None = 0, Available = 1, Mandatory = 2
var response = new CheckVersionResponse();
response.Availability = 0; // None = 0, Available = 1, Mandatory = 2
WriteData(r);
WriteData(response);
}
}
}

View File

@@ -18,7 +18,7 @@ namespace nksrv.LobbyServer.Msgs.Team
// TODO: assume that team data did not change
var resp = new ResGetTeamData();
//resp.TypeTeams
WriteData(req);
WriteData(resp);
}
}
}

View File

@@ -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.User
{
[PacketPath("/user/getfieldtalklist")]
public class GetFieldTalkList : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetFieldTalkList>();
var user = GetUser();
var response = new ResGetFieldTalkList();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,30 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/User/GetScenarioList")]
public class GetScenarioList : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetScenarioList>();
var user = GetUser();
// todo what are bookmark scenarios?
// this returns a list of scenarios that user has completed
var response = new ResGetScenarioList();
foreach (var item in user.CompletedScenarios)
{
response.ScenarioList.Add(item);
}
WriteData(response);
}
}
}

View File

@@ -753,7 +753,7 @@ message ReqGetCampaignFieldData {
message ResGetCampaignFieldData {
NetFieldObjectData field = 2;
NetUserTeamData team = 3;
NetCampaignTeamPosition teamPositions = 4;
repeated NetCampaignTeamPosition teamPositions = 4;
string json = 5;
}
@@ -965,4 +965,33 @@ message NetSubQuestData {
message ResGetSubQuestList {
repeated NetSubQuestData subquestList = 2;
}
message ReqCheckStageClear {
repeated int32 stageIds = 1;
}
message ResCheckStageClear {
repeated int32 clearedStageIds = 2;
}
message ReqGetScenarioList {
}
message ResGetScenarioList {
repeated string scenarioList = 2;
repeated string bookmarkScenarioList = 3;
}
message ReqSaveCampaignField{
string mapId = 2;
string json = 3;
}
message ResSaveCampaignField{
}
message ReqGetFieldTalkList {}
message ResGetFieldTalkList {
repeated string fieldTalkList = 2;
}

View File

@@ -16,6 +16,18 @@ namespace nksrv.Utils
public long ExpirationTime;
public ulong UserID;
}
public class NetworkPosition
{
public float x;
public float y;
public float z;
}
public class FieldInfo
{
public List<NetFieldStageData> CompletedStages = new();
public bool BossEntered = false;
public NetworkPosition teamPosition = new();
}
public class User
{
// User info
@@ -28,7 +40,9 @@ namespace nksrv.Utils
// Game data
public List<string> CompletedScenarios = new List<string>();
public List<string> CompletedScenarios = new();
public Dictionary<int, FieldInfo> FieldInfo = new();
public Dictionary<string, string> MapJson = new();
}
public class CoreInfo
{