mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-16 17:04:44 +01:00
Fix XP, outpost level working, completestages also completes scenarios now
This commit is contained in:
@@ -1,12 +1,6 @@
|
|||||||
using nksrv.Net;
|
using nksrv.StaticInfo;
|
||||||
using nksrv.StaticInfo;
|
|
||||||
using nksrv.Utils;
|
using nksrv.Utils;
|
||||||
using Swan.Logging;
|
using Swan.Logging;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace nksrv.LobbyServer.Msgs.Stage
|
namespace nksrv.LobbyServer.Msgs.Stage
|
||||||
{
|
{
|
||||||
@@ -32,7 +26,7 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static ResClearStage CompleteStage(Utils.User user, int StageId)
|
public static ResClearStage CompleteStage(Utils.User user, int StageId, bool forceCompleteScenarios = false)
|
||||||
{
|
{
|
||||||
var response = new ResClearStage();
|
var response = new ResClearStage();
|
||||||
var clearedStage = StaticDataParser.Instance.GetStageData(StageId);
|
var clearedStage = StaticDataParser.Instance.GetStageData(StageId);
|
||||||
@@ -47,6 +41,19 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
DoQuestSpecificUserOperations(user, StageId);
|
DoQuestSpecificUserOperations(user, StageId);
|
||||||
var rewardData = StaticDataParser.Instance.GetRewardTableEntry(clearedStage.reward_id);
|
var rewardData = StaticDataParser.Instance.GetRewardTableEntry(clearedStage.reward_id);
|
||||||
|
|
||||||
|
|
||||||
|
if (forceCompleteScenarios)
|
||||||
|
{
|
||||||
|
if (!user.CompletedScenarios.Contains(clearedStage.enter_scenario) && !string.IsNullOrEmpty(clearedStage.enter_scenario) && !string.IsNullOrWhiteSpace(clearedStage.enter_scenario))
|
||||||
|
{
|
||||||
|
user.CompletedScenarios.Add(clearedStage.enter_scenario);
|
||||||
|
}
|
||||||
|
if (!user.CompletedScenarios.Contains(clearedStage.exit_scenario) && !string.IsNullOrEmpty(clearedStage.exit_scenario) && !string.IsNullOrWhiteSpace(clearedStage.exit_scenario))
|
||||||
|
{
|
||||||
|
user.CompletedScenarios.Add(clearedStage.exit_scenario);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (rewardData != null)
|
if (rewardData != null)
|
||||||
response.StageClearReward = RegisterRewardsForUser(user, rewardData);
|
response.StageClearReward = RegisterRewardsForUser(user, rewardData);
|
||||||
else
|
else
|
||||||
@@ -77,6 +84,26 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
Logger.Warn("Unknown stage category " + clearedStage.stage_category);
|
Logger.Warn("Unknown stage category " + clearedStage.stage_category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clearedStage.stage_type != "Sub")
|
||||||
|
{
|
||||||
|
// add outpost reward level if unlocked
|
||||||
|
if (user.IsStageCompleted(6002016, true))
|
||||||
|
{
|
||||||
|
user.OutpostBattleLevel.Exp++;
|
||||||
|
if (user.OutpostBattleLevel.Exp >= 5)
|
||||||
|
{
|
||||||
|
user.OutpostBattleLevel.Exp = 0;
|
||||||
|
user.OutpostBattleLevel.Level++;
|
||||||
|
response.OutpostBattle = new NetOutpostBattleLevel() { IsLevelUp = true, Exp = 0, Level = user.OutpostBattleLevel.Level };
|
||||||
|
user.AddCurrency(CurrencyType.FreeCash, 100); // todo is reward the same for all level upgrades
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
response.OutpostBattle = new NetOutpostBattleLevel() { IsLevelUp = false, Exp = user.OutpostBattleLevel.Exp, Level = user.OutpostBattleLevel.Level };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod;
|
var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod;
|
||||||
if (!user.FieldInfoNew.ContainsKey(key))
|
if (!user.FieldInfoNew.ContainsKey(key))
|
||||||
user.FieldInfoNew.Add(key, new FieldInfoNew());
|
user.FieldInfoNew.Add(key, new FieldInfoNew());
|
||||||
@@ -96,23 +123,25 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
|||||||
var newXp = rewardData.user_exp + user.userPointData.ExperiencePoint;
|
var newXp = rewardData.user_exp + user.userPointData.ExperiencePoint;
|
||||||
|
|
||||||
var oldXpData = StaticDataParser.Instance.GetUserLevelFromUserExp(user.userPointData.ExperiencePoint);
|
var oldXpData = StaticDataParser.Instance.GetUserLevelFromUserExp(user.userPointData.ExperiencePoint);
|
||||||
var xpData = StaticDataParser.Instance.GetUserLevelFromUserExp(newXp);
|
var newLevelExp = StaticDataParser.Instance.GetUserMinXpForLevel(user.userPointData.UserLevel + 1);
|
||||||
var newLevel = xpData.Item1;
|
var newLevel = user.userPointData.UserLevel;
|
||||||
|
|
||||||
if (newLevel == -1)
|
if (newLevelExp == -1)
|
||||||
{
|
{
|
||||||
Logger.Warn("Unknown user level value for xp " + newXp);
|
Logger.Warn("Unknown user level value for xp " + newXp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while (newXp >= newLevelExp)
|
||||||
if (newLevel > user.userPointData.UserLevel)
|
|
||||||
{
|
{
|
||||||
|
newLevel++;
|
||||||
newXp -= oldXpData.Item2;
|
newXp -= oldXpData.Item2;
|
||||||
if (user.Currency.ContainsKey(CurrencyType.FreeCash))
|
if (user.Currency.ContainsKey(CurrencyType.FreeCash))
|
||||||
user.Currency[CurrencyType.FreeCash] += 30;
|
user.Currency[CurrencyType.FreeCash] += 30;
|
||||||
else
|
else
|
||||||
user.Currency.Add(CurrencyType.FreeCash, 30);
|
user.Currency.Add(CurrencyType.FreeCash, 30);
|
||||||
|
|
||||||
|
newLevelExp = StaticDataParser.Instance.GetUserMinXpForLevel(newLevel + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ namespace nksrv
|
|||||||
if (!user.IsStageCompleted(item, true))
|
if (!user.IsStageCompleted(item, true))
|
||||||
{
|
{
|
||||||
Console.WriteLine("Completing stage " + item);
|
Console.WriteLine("Completing stage " + item);
|
||||||
ClearStage.CompleteStage(user, item);
|
ClearStage.CompleteStage(user, item, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == chapterNumber && target == stageNumber)
|
if (i == chapterNumber && target == stageNumber)
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ namespace nksrv.StaticInfo
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string chapter_mod = "";
|
public string chapter_mod = "";
|
||||||
public string stage_type = "";
|
public string stage_type = "";
|
||||||
|
public string enter_scenario = "";
|
||||||
|
public string exit_scenario = "";
|
||||||
}
|
}
|
||||||
public class RewardTableRecord
|
public class RewardTableRecord
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -393,6 +393,27 @@ namespace nksrv.StaticInfo
|
|||||||
}
|
}
|
||||||
return (-1, -1);
|
return (-1, -1);
|
||||||
}
|
}
|
||||||
|
public int GetUserMinXpForLevel(int targetLevel)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < userExpDataRecords.Count; i++)
|
||||||
|
{
|
||||||
|
var item = userExpDataRecords[i];
|
||||||
|
|
||||||
|
var level = item["level"];
|
||||||
|
if (level == null) throw new Exception("expected level field in user exp table data");
|
||||||
|
|
||||||
|
int levelValue = level.ToObject<int>();
|
||||||
|
if (targetLevel == levelValue)
|
||||||
|
{
|
||||||
|
var exp = item["exp"];
|
||||||
|
if (exp == null) throw new Exception("expected exp field in user exp table data");
|
||||||
|
|
||||||
|
int expValue = exp.ToObject<int>();
|
||||||
|
return expValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
public int GetNormalChapterNumberFromFieldName(string field)
|
public int GetNormalChapterNumberFromFieldName(string field)
|
||||||
{
|
{
|
||||||
foreach (JObject item in chapterCampaignData)
|
foreach (JObject item in chapterCampaignData)
|
||||||
|
|||||||
Reference in New Issue
Block a user