mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-14 16:04:36 +01:00
Add support for extra/hard stages
This commit is contained in:
@@ -17,11 +17,11 @@ namespace nksrv.LobbyServer.Msgs.Campaign
|
|||||||
{
|
{
|
||||||
var req = await ReadData<ReqGetCampaignFieldData>();
|
var req = await ReadData<ReqGetCampaignFieldData>();
|
||||||
var user = GetUser();
|
var user = GetUser();
|
||||||
|
|
||||||
Console.WriteLine("Map ID: " + req.MapId);
|
Console.WriteLine("Map ID: " + req.MapId);
|
||||||
|
|
||||||
var response = new ResGetCampaignFieldData();
|
var response = new ResGetCampaignFieldData();
|
||||||
response.Field = GetStage.CreateFieldInfo(user, StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId));
|
response.Field = GetStage.CreateFieldInfo(user, StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId), req.MapId.Contains("hard") ? "Hard" : "Normal");
|
||||||
|
|
||||||
// todo save this data
|
// todo save this data
|
||||||
response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 };
|
response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 };
|
||||||
@@ -51,7 +51,6 @@ namespace nksrv.LobbyServer.Msgs.Campaign
|
|||||||
|
|
||||||
response.Json = resultingJson;
|
response.Json = resultingJson;
|
||||||
|
|
||||||
|
|
||||||
WriteData(response);
|
WriteData(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using nksrv.Utils;
|
using nksrv.StaticInfo;
|
||||||
|
using nksrv.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -17,8 +18,16 @@ namespace nksrv.LobbyServer.Msgs.Campaign
|
|||||||
|
|
||||||
var response = new ResObtainCampaignItem();
|
var response = new ResObtainCampaignItem();
|
||||||
|
|
||||||
|
var chapter = StaticDataParser.Instance.GetNormalChapterNumberFromFieldName(req.MapId);
|
||||||
|
var mod = req.MapId.Contains("hard") ? "Hard" : "Normal";
|
||||||
|
var key = chapter + "_" + mod;
|
||||||
|
var field = user.FieldInfo[key];
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
response.Reward = new();
|
response.Reward = new();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WriteData(response);
|
WriteData(response);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
|
|
||||||
if (user.FieldInfo.Count == 0)
|
if (user.FieldInfo.Count == 0)
|
||||||
{
|
{
|
||||||
user.FieldInfo.Add(0, new FieldInfo() { });
|
user.FieldInfo.Add("0_" + clearedStage.chapter_mod, new FieldInfo() { });
|
||||||
}
|
}
|
||||||
|
|
||||||
DoQuestSpecificUserOperations(user, req.StageId);
|
DoQuestSpecificUserOperations(user, req.StageId);
|
||||||
@@ -41,8 +41,32 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
else
|
else
|
||||||
Logger.Warn("rewardId is null for stage " + req.StageId);
|
Logger.Warn("rewardId is null for stage " + req.StageId);
|
||||||
|
|
||||||
user.LastNormalStageCleared = req.StageId;
|
|
||||||
user.FieldInfo[clearedStage.chapter_id - 1].CompletedStages.Add(new NetFieldStageData() { StageId = req.StageId });
|
if (clearedStage.stage_category == "Normal" || clearedStage.stage_category == "Boss")
|
||||||
|
{
|
||||||
|
if (clearedStage.chapter_mod == "Hard")
|
||||||
|
{
|
||||||
|
user.LastHardStageCleared = req.StageId;
|
||||||
|
}
|
||||||
|
else if (clearedStage.chapter_mod == "Normal")
|
||||||
|
{
|
||||||
|
user.LastNormalStageCleared = req.StageId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.Warn("Unknown chapter mod " + clearedStage.chapter_mod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (clearedStage.stage_category == "Extra")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.Warn("Unknown stage category " + clearedStage.stage_category);
|
||||||
|
}
|
||||||
|
|
||||||
|
user.FieldInfo[(clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod].CompletedStages.Add(new NetFieldStageData() { StageId = req.StageId });
|
||||||
JsonDb.Save();
|
JsonDb.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,7 +156,7 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
Count = 1,
|
Count = 1,
|
||||||
Tid = item.reward_id
|
Tid = item.reward_id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
var user = GetUser();
|
var user = GetUser();
|
||||||
|
|
||||||
var response = new ResGetStageData();
|
var response = new ResGetStageData();
|
||||||
response.Field = CreateFieldInfo(user, req.Chapter - 1);
|
|
||||||
|
response.Field = CreateFieldInfo(user, req.Chapter - 1, req.Mod == 0 ? "Normal" : "Hard");
|
||||||
|
|
||||||
response.HasChapterBossEntered = true;
|
response.HasChapterBossEntered = true;
|
||||||
|
|
||||||
@@ -28,13 +29,14 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
WriteData(response);
|
WriteData(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static NetFieldObjectData CreateFieldInfo(Utils.User user, int chapter)
|
public static NetFieldObjectData CreateFieldInfo(Utils.User user, int chapter, string mod)
|
||||||
{
|
{
|
||||||
var f = new NetFieldObjectData();
|
var f = new NetFieldObjectData();
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
string key = chapter + "_" + mod;
|
||||||
foreach (var item in user.FieldInfo)
|
foreach (var item in user.FieldInfo)
|
||||||
{
|
{
|
||||||
if (item.Key == chapter)
|
if (item.Key == key)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
foreach (var stage in item.Value.CompletedStages)
|
foreach (var stage in item.Value.CompletedStages)
|
||||||
@@ -47,10 +49,10 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
{
|
{
|
||||||
Console.WriteLine("chapter not found: " + chapter);
|
Console.WriteLine("chapter not found: " + key);
|
||||||
|
|
||||||
user.FieldInfo.Add(chapter, new FieldInfo());
|
user.FieldInfo.Add(key, new FieldInfo());
|
||||||
return CreateFieldInfo(user, chapter);
|
return CreateFieldInfo(user, chapter, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ namespace nksrv.StaticInfo
|
|||||||
public int chapter_id;
|
public int chapter_id;
|
||||||
public string stage_category = "";
|
public string stage_category = "";
|
||||||
public int reward_id = 0;
|
public int reward_id = 0;
|
||||||
|
/// <summary>
|
||||||
|
/// Can be Normal or Hard
|
||||||
|
/// </summary>
|
||||||
|
public string chapter_mod = "";
|
||||||
}
|
}
|
||||||
public class RewardTableRecord
|
public class RewardTableRecord
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ namespace nksrv.Utils
|
|||||||
|
|
||||||
// Game data
|
// Game data
|
||||||
public List<string> CompletedScenarios = [];
|
public List<string> CompletedScenarios = [];
|
||||||
public Dictionary<int, FieldInfo> FieldInfo = [];
|
public Dictionary<string, FieldInfo> FieldInfo = [];
|
||||||
public Dictionary<string, string> MapJson = [];
|
public Dictionary<string, string> MapJson = [];
|
||||||
public Dictionary<CurrencyType, long> Currency = new() {
|
public Dictionary<CurrencyType, long> Currency = new() {
|
||||||
{ CurrencyType.ContentStamina, 2 },
|
{ CurrencyType.ContentStamina, 2 },
|
||||||
@@ -110,6 +110,7 @@ namespace nksrv.Utils
|
|||||||
}
|
}
|
||||||
public class CoreInfo
|
public class CoreInfo
|
||||||
{
|
{
|
||||||
|
public int DbVersion = 0;
|
||||||
public List<User> Users = [];
|
public List<User> Users = [];
|
||||||
|
|
||||||
public List<AccessToken> LauncherAccessTokens = [];
|
public List<AccessToken> LauncherAccessTokens = [];
|
||||||
@@ -137,6 +138,28 @@ namespace nksrv.Utils
|
|||||||
if (j != null)
|
if (j != null)
|
||||||
{
|
{
|
||||||
Instance = j;
|
Instance = j;
|
||||||
|
|
||||||
|
if (Instance.DbVersion == 0)
|
||||||
|
{
|
||||||
|
Instance.DbVersion = 1;
|
||||||
|
// In older versions, field info key used chapter number, but now difficultly is appened.
|
||||||
|
Console.WriteLine("Starting database update...");
|
||||||
|
|
||||||
|
foreach (var user in Instance.Users)
|
||||||
|
{
|
||||||
|
foreach (var f in user.FieldInfo.ToList())
|
||||||
|
{
|
||||||
|
var isNumeric = int.TryParse(f.Key, out int n);
|
||||||
|
if (isNumeric)
|
||||||
|
{
|
||||||
|
var val = f.Value;
|
||||||
|
user.FieldInfo.Remove(f.Key);
|
||||||
|
user.FieldInfo.Add(n + "_Normal", val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Console.WriteLine("Database update completed");
|
||||||
|
}
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user