fix user leveling, fix power calculation

This commit is contained in:
Mikhail
2024-12-25 10:17:52 -05:00
parent 5ff6264e21
commit a85b3fcc83
3 changed files with 48 additions and 25 deletions

View File

@@ -586,14 +586,10 @@ namespace EpinelPS.StaticInfo
{
var item = userExpDataRecords[i];
var level = item["level"];
if (level == null) throw new Exception("expected level field in user exp table data");
var level = item["level"] ?? throw new Exception("expected level field in user exp table data");
int levelValue = level.ToObject<int>();
var exp = item["exp"];
if (exp == null) throw new Exception("expected exp field in user exp table data");
var exp = item["exp"] ?? throw new Exception("expected exp field in user exp table data");
int expValue = exp.ToObject<int>();
if (prevValue < targetExp)

View File

@@ -26,7 +26,7 @@ namespace EpinelPS.LobbyServer.Stage
}
public static ResClearStage CompleteStage(Database.User user, int StageId, bool forceCompleteScenarios = false)
public static ResClearStage CompleteStage(User user, int StageId, bool forceCompleteScenarios = false)
{
var response = new ResClearStage();
var clearedStage = GameData.Instance.GetStageData(StageId);
@@ -55,6 +55,7 @@ namespace EpinelPS.LobbyServer.Stage
}
var oldLevel = user.userPointData.UserLevel;
var oldOutpostLevel = user.OutpostBattleLevel.Level;
if (rewardData != null)
response.StageClearReward = RewardUtils.RegisterRewardsForUser(user, rewardData);
@@ -63,6 +64,10 @@ namespace EpinelPS.LobbyServer.Stage
response.Reward = response.StageClearReward;
response.ScenarioReward = new NetRewardData() { PassPoint = new() };
response.OutpostBattleLevelReward = new NetRewardData() { PassPoint = new() };
// Check if user level changed, if so return the reward
if (user.userPointData.UserLevel != oldLevel)
{
response.UserLevelUpReward = new NetRewardData();
@@ -73,6 +78,17 @@ namespace EpinelPS.LobbyServer.Stage
FinalValue = user.GetCurrencyVal(CurrencyType.FreeCash)
});
}
// Check if outpost level changed, if so return the reward
if (user.OutpostBattleLevel.Level != oldOutpostLevel)
{
response.OutpostBattleLevelReward = new NetRewardData();
response.OutpostBattleLevelReward.Currency.Add(new NetCurrencyData()
{
Type = (int)CurrencyType.FreeCash,
Value = 100 * (user.OutpostBattleLevel.Level - oldOutpostLevel),
FinalValue = user.GetCurrencyVal(CurrencyType.FreeCash)
});
}
if (clearedStage.stage_category == "Normal" || clearedStage.stage_category == "Boss" || clearedStage.stage_category == "Hard")
{
@@ -135,17 +151,19 @@ namespace EpinelPS.LobbyServer.Stage
if (quest != null)
user.SetQuest(quest.id, false);
// TODO: Is this the right place to add default characters?
// Stage 1-4 BOSS
if (clearedStageId == 6001004)
{
// TODO: Is this the right place to copy over default characters?
// TODO: What is CSN and TID? Also need to add names for these
// Note: TID is table index, not sure what CSN is
// TID: Character ID
// CSN: Character Serial Number
// create a squad with first 5 characters
var team1 = new NetUserTeamData();
team1.Type = 1;
team1.LastContentsTeamNumber = 1;
var team1 = new NetUserTeamData
{
Type = 1,
LastContentsTeamNumber = 1
};
user.Characters.Add(new Database.Character() { Csn = 47263455, Tid = 201001 });
user.Characters.Add(new Database.Character() { Csn = 47273456, Tid = 330501 });
@@ -153,8 +171,11 @@ namespace EpinelPS.LobbyServer.Stage
user.Characters.Add(new Database.Character() { Csn = 47263458, Tid = 230101 });
user.Characters.Add(new Database.Character() { Csn = 47263459, Tid = 301201 });
var team1Sub = new NetTeamData();
team1Sub.TeamNumber = 1;
NetTeamData team1Sub = new()
{
TeamNumber = 1
};
for (int i = 1; i < 6; i++)
{
var character = user.Characters[i - 1];
@@ -163,17 +184,23 @@ namespace EpinelPS.LobbyServer.Stage
team1.Teams.Add(team1Sub);
user.UserTeams.Add(1, team1);
user.RepresentationTeamData.TeamNumber = 1;
user.RepresentationTeamData.TeamCombat = 1446; // TODO: Don't hardcode this
user.RepresentationTeamData.Slots.Clear();
user.RepresentationTeamData.Slots.Add(new NetWholeTeamSlot { Slot = 1, Csn = 47263455, Tid = 201001, Level = 1 });
user.RepresentationTeamData.Slots.Add(new NetWholeTeamSlot { Slot = 2, Csn = 47273456, Tid = 330501, Level = 1 });
user.RepresentationTeamData.Slots.Add(new NetWholeTeamSlot { Slot = 3, Csn = 47263457, Tid = 130201, Level = 1 });
user.RepresentationTeamData.Slots.Add(new NetWholeTeamSlot { Slot = 4, Csn = 47263458, Tid = 230101, Level = 1 });
user.RepresentationTeamData.Slots.Add(new NetWholeTeamSlot { Slot = 5, Csn = 47263459, Tid = 301201, Level = 1 });
int totalCP = 0;
foreach (var item in user.RepresentationTeamData.Slots)
{
totalCP += FormulaUtils.CalculateCP(user, item.Csn);
}
user.RepresentationTeamData.TeamCombat = totalCP;
}
// TODO: add neon
}
private static void CreateClearInfo(Database.User user)

View File

@@ -29,13 +29,12 @@ namespace EpinelPS.Utils
bool leveled = false;
int newGems = 0;
while (newXp >= newLevelExp)
{
leveled = true;
newLevel++;
newGems += 30;
newXp -= oldXpData.Item2;
newXp -= newLevelExp;
if (user.Currency.ContainsKey(CurrencyType.FreeCash))
user.Currency[CurrencyType.FreeCash] += 30;
else
@@ -53,11 +52,12 @@ namespace EpinelPS.Utils
BeforeExp = user.userPointData.ExperiencePoint,
BeforeLv = user.userPointData.UserLevel,
IncreaseExp = rewardData.user_exp,
// IncreaseExp = rewardData.user_exp,
CurrentExp = newXp,
CurrentLv = newLevel,
GainExp = rewardData.user_exp
GainExp = rewardData.user_exp,
};
user.userPointData.ExperiencePoint = newXp;