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 item = userExpDataRecords[i];
var level = item["level"]; var level = item["level"] ?? throw new Exception("expected level field in user exp table data");
if (level == null) throw new Exception("expected level field in user exp table data");
int levelValue = level.ToObject<int>(); int levelValue = level.ToObject<int>();
var exp = item["exp"]; var exp = item["exp"] ?? throw new Exception("expected exp field in user exp table data");
if (exp == null) throw new Exception("expected exp field in user exp table data");
int expValue = exp.ToObject<int>(); int expValue = exp.ToObject<int>();
if (prevValue < targetExp) 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 response = new ResClearStage();
var clearedStage = GameData.Instance.GetStageData(StageId); var clearedStage = GameData.Instance.GetStageData(StageId);
@@ -55,6 +55,7 @@ namespace EpinelPS.LobbyServer.Stage
} }
var oldLevel = user.userPointData.UserLevel; var oldLevel = user.userPointData.UserLevel;
var oldOutpostLevel = user.OutpostBattleLevel.Level;
if (rewardData != null) if (rewardData != null)
response.StageClearReward = RewardUtils.RegisterRewardsForUser(user, rewardData); response.StageClearReward = RewardUtils.RegisterRewardsForUser(user, rewardData);
@@ -62,7 +63,11 @@ namespace EpinelPS.LobbyServer.Stage
Console.WriteLine("rewardId is null for stage " + StageId); Console.WriteLine("rewardId is null for stage " + StageId);
response.Reward = response.StageClearReward; response.Reward = response.StageClearReward;
response.ScenarioReward = new NetRewardData(){PassPoint = new()}; 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) if (user.userPointData.UserLevel != oldLevel)
{ {
response.UserLevelUpReward = new NetRewardData(); response.UserLevelUpReward = new NetRewardData();
@@ -73,6 +78,17 @@ namespace EpinelPS.LobbyServer.Stage
FinalValue = user.GetCurrencyVal(CurrencyType.FreeCash) 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") if (clearedStage.stage_category == "Normal" || clearedStage.stage_category == "Boss" || clearedStage.stage_category == "Hard")
{ {
@@ -119,7 +135,7 @@ namespace EpinelPS.LobbyServer.Stage
} }
// CreateClearInfo(user); // CreateClearInfo(user);
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());
@@ -135,17 +151,19 @@ namespace EpinelPS.LobbyServer.Stage
if (quest != null) if (quest != null)
user.SetQuest(quest.id, false); user.SetQuest(quest.id, false);
// TODO: Is this the right place to add default characters?
// Stage 1-4 BOSS
if (clearedStageId == 6001004) if (clearedStageId == 6001004)
{ {
// TODO: Is this the right place to copy over default characters? // TID: Character ID
// TODO: What is CSN and TID? Also need to add names for these // CSN: Character Serial Number
// Note: TID is table index, not sure what CSN is
// create a squad with first 5 characters // create a squad with first 5 characters
var team1 = new NetUserTeamData(); var team1 = new NetUserTeamData
team1.Type = 1; {
team1.LastContentsTeamNumber = 1; Type = 1,
LastContentsTeamNumber = 1
};
user.Characters.Add(new Database.Character() { Csn = 47263455, Tid = 201001 }); user.Characters.Add(new Database.Character() { Csn = 47263455, Tid = 201001 });
user.Characters.Add(new Database.Character() { Csn = 47273456, Tid = 330501 }); 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 = 47263458, Tid = 230101 });
user.Characters.Add(new Database.Character() { Csn = 47263459, Tid = 301201 }); user.Characters.Add(new Database.Character() { Csn = 47263459, Tid = 301201 });
var team1Sub = new NetTeamData(); NetTeamData team1Sub = new()
team1Sub.TeamNumber = 1; {
TeamNumber = 1
};
for (int i = 1; i < 6; i++) for (int i = 1; i < 6; i++)
{ {
var character = user.Characters[i - 1]; var character = user.Characters[i - 1];
@@ -163,17 +184,23 @@ namespace EpinelPS.LobbyServer.Stage
team1.Teams.Add(team1Sub); team1.Teams.Add(team1Sub);
user.UserTeams.Add(1, team1); user.UserTeams.Add(1, team1);
user.RepresentationTeamData.TeamNumber = 1; user.RepresentationTeamData.TeamNumber = 1;
user.RepresentationTeamData.TeamCombat = 1446; // TODO: Don't hardcode this
user.RepresentationTeamData.Slots.Clear(); 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 = 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 = 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 = 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 = 4, Csn = 47263458, Tid = 230101, Level = 1 });
user.RepresentationTeamData.Slots.Add(new NetWholeTeamSlot { Slot = 5, Csn = 47263459, Tid = 301201, 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) private static void CreateClearInfo(Database.User user)

View File

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