- wojs sucks
This commit is contained in:
Alan Moon 2025-03-11 22:16:56 -07:00
parent f739a44fcb
commit feb0291dc6
3 changed files with 18 additions and 10 deletions

View File

@ -117,8 +117,14 @@ public class ProfileController : Controller {
// get playerxp, if null than its 0 // get playerxp, if null than its 0
AchievementPoints? achievementPoints = viking.AchievementPoints.FirstOrDefault(e => e.Type == (int)AchievementPointTypes.PlayerXP); AchievementPoints? achievementPoints = viking.AchievementPoints.FirstOrDefault(e => e.Type == (int)AchievementPointTypes.PlayerXP);
int playerxp = 0; 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 // Build the AvatarDisplayData
AvatarDisplayData avatar = new AvatarDisplayData { AvatarDisplayData avatar = new AvatarDisplayData {
@ -148,7 +154,7 @@ public class ProfileController : Controller {
SubscriptionID = -3, // placeholder SubscriptionID = -3, // placeholder
IsActive = true, // placeholder IsActive = true, // placeholder
}, },
RankID = achievementStore.GetRankFromXP(playerxp, AchievementPointTypes.PlayerXP, viking.GameVersion ?? ClientVersion.Min_SoD), // placeholder RankID = rank,
AchievementInfo = null, // placeholder AchievementInfo = null, // placeholder
Achievements = new UserAchievementInfo[] { Achievements = new UserAchievementInfo[] {
achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP), achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP),

View File

@ -19,19 +19,21 @@ namespace sodoff.Services {
this.ctx = ctx; 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) if (value is null)
value = 0; value = 0;
return new UserAchievementInfo { return new UserAchievementInfo {
UserID = userId, UserID = userId,
AchievementPointTotal = value, AchievementPointTotal = value,
RankID = achievementStore.GetRankFromXP(value, type, gameVersion), RankID = rank,
PointTypeID = type PointTypeID = type
}; };
} }
public UserAchievementInfo CreateUserAchievementInfo(Viking viking, AchievementPointTypes 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) { 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) if(viking.GameVersion <= ClientVersion.WoJS && xpPoints.Type == (int)AchievementPointTypes.PlayerXP)
{ {
int initialRank = achievementStore.GetRankFromXP(initialPoints, AchievementPointTypes.PlayerXP, viking.GameVersion.Value); int initialRank = achievementStore.GetRankFromXP(initialPoints, AchievementPointTypes.PlayerXP);
int newRank = achievementStore.GetRankFromXP(xpPoints.Value, AchievementPointTypes.PlayerXP, viking.GameVersion.Value); 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 // wojs shows level up screen when a message of type rank is posted to their message board
if(newRank > initialRank) if(newRank > initialRank)
{ {

View File

@ -60,9 +60,9 @@ namespace sodoff.Services {
dragonTitanMinXP = ranks[AchievementPointTypes.DragonXP][20].Value; dragonTitanMinXP = ranks[AchievementPointTypes.DragonXP][20].Value;
} }
public int GetRankFromXP(int? xpPoints, AchievementPointTypes type, uint gameVersion = ClientVersion.Min_SoD) { public int GetRankFromXP(int? xpPoints, AchievementPointTypes type) {
if (gameVersion <= ClientVersion.WoJS) return ranks[type].Count(r => r.Value <= xpPoints) - 1; // still kind of a shitty fix but hey it fixed sod :) if (xpPoints <= 20) return ranks[type].Count(r => r.Value <= xpPoints);
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) { public AchievementReward[]? GetAchievementRewardsById(int achievementID) {