aboutsummaryrefslogtreecommitdiffstats
path: root/Malmstone/Utils/MalmstoneXPCalculator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Malmstone/Utils/MalmstoneXPCalculator.cs')
-rw-r--r--Malmstone/Utils/MalmstoneXPCalculator.cs88
1 files changed, 72 insertions, 16 deletions
diff --git a/Malmstone/Utils/MalmstoneXPCalculator.cs b/Malmstone/Utils/MalmstoneXPCalculator.cs
index 4834def..85ecadf 100644
--- a/Malmstone/Utils/MalmstoneXPCalculator.cs
+++ b/Malmstone/Utils/MalmstoneXPCalculator.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace Malmstone.Utils
{
- public static class MalmstoneXPCalculator
+ public class MalmstoneXPCalculator
{
private static readonly int[] PvpLevels = {
0, 2000, 2000, 2000, 2000, 3000, 3000, 3000, 3000, 3000, 4000, 4000, 4000, 4000, 4000, 5500, 5500, 5500, 5500, 5500,
@@ -22,11 +22,20 @@ namespace Malmstone.Utils
private const int RivalWingsWinExp = 1250;
private const int RivalWingsLoseExp = 750;
- public class XpCalculationResult
+ public struct XpCalculationResult
{
- public int RemainingXp { get; set; }
- public int TargetLevel { get; set; }
- public Dictionary<string, int> ActivityCounts { get; set; } = new();
+ public int RemainingXp;
+ public int TargetLevel;
+ public int CrystallineConflictWin;
+ public int CrystallineConflictLose;
+ public int FrontlineWin;
+ public int FrontlineLose2nd;
+ public int FrontlineLose3rd;
+ public int FrontlineDailyWin;
+ public int FrontlineDailyLose2nd;
+ public int FrontlineDailyLose3rd;
+ public int RivalWingsWin;
+ public int RivalWingsLose;
}
public static XpCalculationResult CalculateXp(int currentLevel, int goalLevel, int currentProgress)
@@ -56,22 +65,68 @@ namespace Malmstone.Utils
{
RemainingXp = remainingXp,
TargetLevel = goalLevel,
+ CrystallineConflictWin = CalculateActivityCount(remainingXp, CrystallineWinExp),
+ CrystallineConflictLose = CalculateActivityCount(remainingXp, CrystallineLoseExp),
+ FrontlineWin = CalculateActivityCount(remainingXp, FrontlineWinExp),
+ FrontlineLose2nd = CalculateActivityCount(remainingXp, FrontlineLose2Exp),
+ FrontlineLose3rd = CalculateActivityCount(remainingXp, FrontlineLoseExp),
+ FrontlineDailyWin = CalculateActivityCount(remainingXp, FrontlineDailyWinExp),
+ FrontlineDailyLose2nd = CalculateActivityCount(remainingXp, FrontlineDailyLose2Exp),
+ FrontlineDailyLose3rd = CalculateActivityCount(remainingXp, FrontlineDailyLoseExp),
+ RivalWingsWin = CalculateActivityCount(remainingXp, RivalWingsWinExp),
+ RivalWingsLose = CalculateActivityCount(remainingXp, RivalWingsLoseExp)
};
- result.ActivityCounts["Crystalline Conflict Win"] = CalculateActivityCount(remainingXp, CrystallineWinExp);
- result.ActivityCounts["Crystalline Conflict Lose"] = CalculateActivityCount(remainingXp, CrystallineLoseExp);
- result.ActivityCounts["Frontline Win"] = CalculateActivityCount(remainingXp, FrontlineWinExp);
- result.ActivityCounts["Frontline Lose 2nd"] = CalculateActivityCount(remainingXp, FrontlineLose2Exp);
- result.ActivityCounts["Frontline Lose 3rd"] = CalculateActivityCount(remainingXp, FrontlineLoseExp);
- result.ActivityCounts["Frontline Daily Win"] = CalculateActivityCount(remainingXp, FrontlineDailyWinExp);
- result.ActivityCounts["Frontline Daily Lose 2nd"] = CalculateActivityCount(remainingXp, FrontlineDailyLose2Exp);
- result.ActivityCounts["Frontline Daily Lose 3rd"] = CalculateActivityCount(remainingXp, FrontlineDailyLoseExp);
- result.ActivityCounts["Rival Wings Win"] = CalculateActivityCount(remainingXp, RivalWingsWinExp);
- result.ActivityCounts["Rival Wings Lose"] = CalculateActivityCount(remainingXp, RivalWingsLoseExp);
+ return result;
+ }
+
+ public static XpCalculationResult CalculateCrystallineConflictMatches(int currentLevel, int goalLevel, int currentProgress)
+ {
+ var baseResult = CalculateXp(currentLevel, goalLevel, currentProgress);
+ var result = new XpCalculationResult
+ {
+ RemainingXp = baseResult.RemainingXp,
+ TargetLevel = baseResult.TargetLevel,
+ CrystallineConflictWin = CalculateActivityCount(baseResult.RemainingXp, CrystallineWinExp),
+ CrystallineConflictLose = CalculateActivityCount(baseResult.RemainingXp, CrystallineLoseExp)
+ };
+
+ return result;
+ }
+
+ public static XpCalculationResult CalculateFrontlineMatches(int currentLevel, int goalLevel, int currentProgress)
+ {
+ var baseResult = CalculateXp(currentLevel, goalLevel, currentProgress);
+ var result = new XpCalculationResult
+ {
+ RemainingXp = baseResult.RemainingXp,
+ TargetLevel = baseResult.TargetLevel,
+ FrontlineWin = CalculateActivityCount(baseResult.RemainingXp, FrontlineWinExp),
+ FrontlineLose2nd = CalculateActivityCount(baseResult.RemainingXp, FrontlineLose2Exp),
+ FrontlineLose3rd = CalculateActivityCount(baseResult.RemainingXp, FrontlineLoseExp),
+ FrontlineDailyWin = CalculateActivityCount(baseResult.RemainingXp, FrontlineDailyWinExp),
+ FrontlineDailyLose2nd = CalculateActivityCount(baseResult.RemainingXp, FrontlineDailyLose2Exp),
+ FrontlineDailyLose3rd = CalculateActivityCount(baseResult.RemainingXp, FrontlineDailyLoseExp)
+ };
+
+ return result;
+ }
+
+ public static XpCalculationResult CalculateRivalWingsMatches(int currentLevel, int goalLevel, int currentProgress)
+ {
+ var baseResult = CalculateXp(currentLevel, goalLevel, currentProgress);
+ var result = new XpCalculationResult
+ {
+ RemainingXp = baseResult.RemainingXp,
+ TargetLevel = baseResult.TargetLevel,
+ RivalWingsWin = CalculateActivityCount(baseResult.RemainingXp, RivalWingsWinExp),
+ RivalWingsLose = CalculateActivityCount(baseResult.RemainingXp, RivalWingsLoseExp)
+ };
return result;
}
+
private static int CalculateRemainingXp(int currentLevel, int goalLevel, int currentProgress)
{
int remainingXp = 0;
@@ -101,7 +156,8 @@ namespace Malmstone.Utils
private static int CalculateActivityCount(int remainingXp, int activityXp)
{
- return (int)Math.Ceiling((double)remainingXp / activityXp);
+ // Should always be greater than 0
+ return Math.Max(1, (int)Math.Ceiling((double)remainingXp / activityXp));
}
}
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage