Implement stage skipping

This commit is contained in:
Mikhail
2024-07-14 19:07:42 -04:00
parent 367cd64b8e
commit 5134ac187b
15 changed files with 558 additions and 49 deletions

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.Arena
{
[PacketPath("/arena/special/showreward")]
public class ShowSpecialArenaReward : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqShowSpecialArenaReward>();
var response = new ResShowSpecialArenaReward();
// TODO
await WriteDataAsync(response);
}
}
}

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.FavoriteItem
{
[PacketPath("/favoriteitem/library")]
public class GetFavoriteItemLibrary : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetFavoriteItemLibrary>();
var response = new ResGetFavoriteItemLibrary();
var user = GetUser();
await WriteDataAsync(response);
}
}
}

View File

@@ -0,0 +1,23 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.FavoriteItem
{
[PacketPath("/favoriteitem/list")]
public class ListFavoriteItem : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqListFavoriteItem>();
var user = GetUser();
var response = new ResListFavoriteItem();
await WriteDataAsync(response);
}
}
}

View File

@@ -0,0 +1,23 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.FavoriteItem
{
[PacketPath("/favoriteitem/quest/list")]
public class ListFavoriteItemQuests : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqListFavoriteItemQuest>();
var user = GetUser();
var response = new ResListFavoriteItemQuest();
await WriteDataAsync(response);
}
}
}

View File

@@ -0,0 +1,25 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Liberate
{
[PacketPath("/liberate/get")]
public class GetLiberateData : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetLiberateData>();
var user = GetUser();
var response = new ResGetLiberateData() { };
// TODO
await WriteDataAsync(response);
}
}
}

View File

@@ -0,0 +1,25 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Lostsector
{
[PacketPath("/lostsector/get")]
public class GetLostSectorData : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetLostSectorData>();
var user = GetUser();
var response = new ResGetLostSectorData();
// TODO
await WriteDataAsync(response);
}
}
}

View File

@@ -0,0 +1,25 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Sidestory
{
[PacketPath("/sidestory/list")]
public class ListSideStory : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqListSideStory>();
var user = GetUser();
var response = new ResListSideStory();
// TODO
await WriteDataAsync(response);
}
}
}

View File

@@ -24,56 +24,68 @@ namespace nksrv.LobbyServer.Msgs.Stage
// TODO: check if user has already cleared this stage
if (req.BattleResult == 1)
{
var clearedStage = StaticDataParser.Instance.GetStageData(req.StageId);
if (clearedStage == null) throw new Exception("cleared stage cannot be null");
if (user.FieldInfo.Count == 0)
{
user.FieldInfo.Add("0_" + clearedStage.chapter_mod, new FieldInfo() { });
}
DoQuestSpecificUserOperations(user, req.StageId);
var rewardData = StaticDataParser.Instance.GetRewardTableEntry(clearedStage.reward_id);
if (rewardData != null)
response.StageClearReward = RegisterRewardsForUser(user, rewardData);
else
Logger.Warn("rewardId is null for stage " + req.StageId);
if (clearedStage.stage_category == "Normal" || clearedStage.stage_category == "Boss" || clearedStage.stage_category == "Hard")
{
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();
response = CompleteStage(user, req.StageId);
}
await WriteDataAsync(response);
}
private NetRewardData RegisterRewardsForUser(Utils.User user, RewardTableRecord rewardData)
public static ResClearStage CompleteStage(Utils.User user, int StageId)
{
var response = new ResClearStage();
var clearedStage = StaticDataParser.Instance.GetStageData(StageId);
if (clearedStage == null) throw new Exception("cleared stage cannot be null");
if (user.FieldInfo.Count == 0)
{
user.FieldInfo.Add("0_" + clearedStage.chapter_mod, new FieldInfo() { });
}
DoQuestSpecificUserOperations(user, StageId);
var rewardData = StaticDataParser.Instance.GetRewardTableEntry(clearedStage.reward_id);
if (rewardData != null)
response.StageClearReward = RegisterRewardsForUser(user, rewardData);
else
Logger.Warn("rewardId is null for stage " + StageId);
if (clearedStage.stage_category == "Normal" || clearedStage.stage_category == "Boss" || clearedStage.stage_category == "Hard")
{
if (clearedStage.chapter_mod == "Hard")
{
user.LastHardStageCleared = StageId;
}
else if (clearedStage.chapter_mod == "Normal")
{
user.LastNormalStageCleared = 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);
}
var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod;
if (!user.FieldInfo.ContainsKey(key))
user.FieldInfo.Add(key, new FieldInfo());
user.FieldInfo[key].CompletedStages.Add(new NetFieldStageData() { StageId = StageId });
JsonDb.Save();
return response;
}
private static NetRewardData RegisterRewardsForUser(Utils.User user, RewardTableRecord rewardData)
{
NetRewardData ret = new();
if (rewardData.rewards == null) return ret;