From feb0291dc62bcc870f52e44c0ff3a0c9e9d92861 Mon Sep 17 00:00:00 2001 From: AlanMoonbase Date: Tue, 11 Mar 2025 22:16:56 -0700 Subject: [PATCH] bugfixes - wojs sucks --- src/Controllers/Common/ProfileController.cs | 10 ++++++++-- src/Services/AchievementService.cs | 12 +++++++----- src/Services/AchievementStoreSingleton.cs | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Controllers/Common/ProfileController.cs b/src/Controllers/Common/ProfileController.cs index 18dc8d2..a6556e8 100644 --- a/src/Controllers/Common/ProfileController.cs +++ b/src/Controllers/Common/ProfileController.cs @@ -117,8 +117,14 @@ public class ProfileController : Controller { // get playerxp, if null than its 0 AchievementPoints? achievementPoints = viking.AchievementPoints.FirstOrDefault(e => e.Type == (int)AchievementPointTypes.PlayerXP); int playerxp = 0; + AchievementPointTypes pointType = AchievementPointTypes.Unknown3; - if (achievementPoints != null) playerxp = achievementPoints.Value; + if (achievementPoints != null) { playerxp = achievementPoints.Value; pointType = (AchievementPointTypes)achievementPoints.Type; } + + int rank = 0; + rank = achievementStore.GetRankFromXP(playerxp, pointType); + + if (viking.GameVersion >= ClientVersion.WoJS) rank += 1; // keep sod compatibility // Build the AvatarDisplayData AvatarDisplayData avatar = new AvatarDisplayData { @@ -148,7 +154,7 @@ public class ProfileController : Controller { SubscriptionID = -3, // placeholder IsActive = true, // placeholder }, - RankID = achievementStore.GetRankFromXP(playerxp, AchievementPointTypes.PlayerXP, viking.GameVersion ?? ClientVersion.Min_SoD), // placeholder + RankID = rank, AchievementInfo = null, // placeholder Achievements = new UserAchievementInfo[] { achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP), diff --git a/src/Services/AchievementService.cs b/src/Services/AchievementService.cs index 9007b8f..183cb1c 100644 --- a/src/Services/AchievementService.cs +++ b/src/Services/AchievementService.cs @@ -19,19 +19,21 @@ namespace sodoff.Services { this.ctx = ctx; } - public UserAchievementInfo CreateUserAchievementInfo(Guid userId, int? value, AchievementPointTypes type, uint gameVersion = ClientVersion.Min_SoD) { + public UserAchievementInfo CreateUserAchievementInfo(Guid userId, int? value, AchievementPointTypes type) { + int rank = achievementStore.GetRankFromXP(value, type); + if (value is null) value = 0; return new UserAchievementInfo { UserID = userId, AchievementPointTotal = value, - RankID = achievementStore.GetRankFromXP(value, type, gameVersion), + RankID = rank, PointTypeID = type }; } public UserAchievementInfo CreateUserAchievementInfo(Viking viking, AchievementPointTypes type) { - return CreateUserAchievementInfo(viking.Uid, viking.AchievementPoints.FirstOrDefault(a => a.Type == (int)type)?.Value, type, viking.GameVersion ?? ClientVersion.Min_SoD); + return CreateUserAchievementInfo(viking.Uid, viking.AchievementPoints.FirstOrDefault(a => a.Type == (int)type)?.Value, type); } public void DragonLevelUpOnAgeUp(Dragon dragon, RaisedPetGrowthState oldGrowthState, RaisedPetGrowthState newGrowthState) { @@ -107,8 +109,8 @@ namespace sodoff.Services { if(viking.GameVersion <= ClientVersion.WoJS && xpPoints.Type == (int)AchievementPointTypes.PlayerXP) { - int initialRank = achievementStore.GetRankFromXP(initialPoints, AchievementPointTypes.PlayerXP, viking.GameVersion.Value); - int newRank = achievementStore.GetRankFromXP(xpPoints.Value, AchievementPointTypes.PlayerXP, viking.GameVersion.Value); + int initialRank = achievementStore.GetRankFromXP(initialPoints, AchievementPointTypes.PlayerXP); + int newRank = achievementStore.GetRankFromXP(xpPoints.Value, AchievementPointTypes.PlayerXP); // wojs shows level up screen when a message of type rank is posted to their message board if(newRank > initialRank) { diff --git a/src/Services/AchievementStoreSingleton.cs b/src/Services/AchievementStoreSingleton.cs index 8cdcc99..4844b99 100644 --- a/src/Services/AchievementStoreSingleton.cs +++ b/src/Services/AchievementStoreSingleton.cs @@ -60,9 +60,9 @@ namespace sodoff.Services { dragonTitanMinXP = ranks[AchievementPointTypes.DragonXP][20].Value; } - public int GetRankFromXP(int? xpPoints, AchievementPointTypes type, uint gameVersion = ClientVersion.Min_SoD) { - if (gameVersion <= ClientVersion.WoJS) return ranks[type].Count(r => r.Value <= xpPoints) - 1; // still kind of a shitty fix but hey it fixed sod :) - return ranks[type].Count(r => r.Value <= xpPoints); + public int GetRankFromXP(int? xpPoints, AchievementPointTypes type) { + if (xpPoints <= 20) return ranks[type].Count(r => r.Value <= xpPoints); + else return ranks[type].Count(r => r.Value <= xpPoints) - 1; // i've given up } public AchievementReward[]? GetAchievementRewardsById(int achievementID) {