Various bug fixes

Fix sim room system error
Added stub for obtain item in field
Properly save tutorial data
This commit is contained in:
Mikhail
2024-07-05 09:51:26 -04:00
parent 18102b9922
commit b4cc603343
9 changed files with 121 additions and 15 deletions

View File

@@ -123,12 +123,13 @@ namespace nksrv.LobbyServer
};
// Restore completed tutorials. GroupID is the first 4 digits of the Table ID.
foreach (var item in user.ClearedTutorials)
// Restore completed tutorials.
foreach (var item in user.ClearedTutorialData)
{
var groupId = int.Parse(item.ToString().Substring(0, 4));
int tutorialVersion = item == 1020101 ? 1 : 0; // TODO: Read from static data
ret.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = item, LastClearedVersion = tutorialVersion });
int groupId = item.Value.GroupId;
int version = item.Value.VersionGroup;
ret.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = groupId, LastClearedVersion = version });
}
return ret;

View File

@@ -0,0 +1,26 @@
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/obtain/item")]
public class ObtainItem : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqObtainCampaignItem>();
var user = GetUser();
var response = new ResObtainCampaignItem();
// TODO
response.Reward = new();
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Simroom
{
[PacketPath("/simroom/get")]
public class GetSimRoomData : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetSimRoom>();
var response = new ResGetSimRoom();
// TODO
WriteData(response);
}
}
}

View File

@@ -34,12 +34,14 @@ namespace nksrv.LobbyServer.Msgs.User
response.LastClearedNormalMainStageId = user.LastNormalStageCleared;
// Restore completed tutorials. GroupID is the first 4 digits of the Table ID.
foreach (var item in user.ClearedTutorials)
foreach (var item in user.ClearedTutorialData)
{
var groupId = int.Parse(item.ToString().Substring(0, 4));
int tutorialVersion = item == 1020101 ? 1 : 0; // TODO
response.User.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = item, LastClearedVersion = tutorialVersion });
int groupId = item.Value.GroupId;
int version = item.Value.VersionGroup;
response.User.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = groupId, LastClearedVersion = version });
}
response.CommanderRoomJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 2, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.CommanderRoom };
response.LobbyJukeboxBgm = new NetJukeboxBgm() { JukeboxTableId = 2, Type = NetJukeboxBgmType.JukeboxTableId, Location = NetJukeboxLocation.Lobby };

View File

@@ -1,4 +1,5 @@
using nksrv.Utils;
using nksrv.StaticInfo;
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -14,8 +15,12 @@ namespace nksrv.LobbyServer.Msgs.User.Tutorial
{
var req = await ReadData<ReqSetTutorial>();
var user = GetUser();
if (!user.ClearedTutorials.Contains(req.LastClearedTid))
user.ClearedTutorials.Add(req.LastClearedTid);
if (!user.ClearedTutorialData.ContainsKey(req.LastClearedTid))
{
var cleared = StaticDataParser.Instance.GetTutorialDataById(req.LastClearedTid);
user.ClearedTutorialData.Add(req.LastClearedTid, cleared);
}
JsonDb.Save();
var response = new ResSetTutorial();

View File

@@ -1872,4 +1872,19 @@ message ReqWearEquipment {
int64 Isn = 2;
int64 Csn = 3;
}
message ResWearEquipment {}
message ResWearEquipment {}
message NetCampaignFieldObject {
string PositionID = 1;
int32 Type = 2;
repeated NetCampaignTeamPosition TeamPositions = 3;
string Json = 4;
}
message ReqObtainCampaignItem {
string MapId = 2;
NetCampaignFieldObject FieldObject = 3;
}
message ResObtainCampaignItem {
NetRewardData Reward = 2;
}

View File

@@ -41,5 +41,15 @@ namespace nksrv.StaticInfo
public int reward_id;
public int reward_value;
}
public class ClearedTutorialData
{
public int id;
public int VersionGroup = 0;
public int GroupId;
public int ClearedStageId;
public int NextId;
public bool SaveTutorial;
}
}

View File

@@ -48,6 +48,7 @@ namespace nksrv.StaticInfo
private JArray chapterCampaignData;
private JArray characterCostumeTable;
private JArray characterTable;
private JArray tutorialTable;
public StaticDataParser(string filePath)
{
if (!File.Exists(filePath)) throw new ArgumentException("Static data file must exist", nameof(filePath));
@@ -230,6 +231,7 @@ namespace nksrv.StaticInfo
chapterCampaignData = await LoadZip("CampaignChapterTable.json");
characterCostumeTable = await LoadZip("CharacterCostumeTable.json");
characterTable = await LoadZip("CharacterTable.json");
tutorialTable = await LoadZip("ContentsTutorialTable.json");
}
public MainQuestCompletionData? GetMainQuestForStageClearCondition(int stage)
@@ -382,5 +384,27 @@ namespace nksrv.StaticInfo
yield return value;
}
}
internal ClearedTutorialData GetTutorialDataById(int TableId)
{
foreach (JObject item in tutorialTable)
{
var id = item["id"];
if (id == null)
{
throw new Exception("expected id field in reward data");
}
int idValue = id.ToObject<int>();
if (idValue == TableId)
{
ClearedTutorialData? data = JsonConvert.DeserializeObject<ClearedTutorialData>(item.ToString());
if (data == null) throw new Exception("failed to deserialize reward data");
return data;
}
}
throw new Exception("tutorial not found: " + TableId);
}
}
}

View File

@@ -1,6 +1,7 @@
using ASodium;
using Newtonsoft.Json;
using nksrv.LobbyServer;
using nksrv.StaticInfo;
using Swan.Logging;
using System;
using System.Collections.Generic;
@@ -78,7 +79,7 @@ namespace nksrv.Utils
public List<ItemData> Items = new();
public List<Character> Characters = [];
public NetWholeUserTeamData RepresentationTeamData = new();
public List<int> ClearedTutorials = [];
public Dictionary<int, ClearedTutorialData> ClearedTutorialData = [];
public NetWallpaperData[] WallpaperList = [];
public Dictionary<int, NetUserTeamData> UserTeams = new Dictionary<int, NetUserTeamData>();
public Dictionary<int, bool> MainQuestData = new()