mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-14 16:04:36 +01:00
fix user leveling, fix power calculation
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user