- 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
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),

View File

@ -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)
{

View File

@ -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) {