From 69a2e33ee67f48885634de6505c3b582329ab527 Mon Sep 17 00:00:00 2001 From: AlanMoonbase Date: Tue, 11 Mar 2025 18:01:08 -0700 Subject: [PATCH] initial work - add message to viking if level up is detected and wojs is game version - crappy fix for bug where viking rank isn't displayed correctly in some areas - add empty url's for audio and image (otherwise cutscene would not play) --- src/Controllers/Common/ProfileController.cs | 6 ++++-- src/Services/AchievementService.cs | 17 ++++++++++++++++- src/Services/AchievementStoreSingleton.cs | 2 +- src/Services/MessagingService.cs | 8 ++++++-- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/Controllers/Common/ProfileController.cs b/src/Controllers/Common/ProfileController.cs index 44f8652..56c7c51 100644 --- a/src/Controllers/Common/ProfileController.cs +++ b/src/Controllers/Common/ProfileController.cs @@ -13,14 +13,16 @@ public class ProfileController : Controller { private readonly DBContext ctx; private AchievementService achievementService; + private AchievementStoreSingleton achievementStore; private ProfileService profileService; private readonly IOptions config; - public ProfileController(DBContext ctx, AchievementService achievementService, ProfileService profileService, IOptions config) { + public ProfileController(DBContext ctx, AchievementService achievementService, AchievementStoreSingleton achievementStoreSingleton, ProfileService profileService, IOptions config) { this.ctx = ctx; this.achievementService = achievementService; this.profileService = profileService; this.config = config; + achievementStore = achievementStoreSingleton; } [HttpPost] @@ -140,7 +142,7 @@ public class ProfileController : Controller { SubscriptionID = -3, // placeholder IsActive = true, // placeholder }, - RankID = 0, // placeholder + RankID = achievementStore.GetRankFromXP(viking.AchievementPoints.FirstOrDefault(e => e.Type == (int)AchievementPointTypes.PlayerXP).Value, AchievementPointTypes.PlayerXP), // placeholder AchievementInfo = null, // placeholder Achievements = new UserAchievementInfo[] { achievementService.CreateUserAchievementInfo(viking, AchievementPointTypes.PlayerXP), diff --git a/src/Services/AchievementService.cs b/src/Services/AchievementService.cs index 0bda589..8715347 100644 --- a/src/Services/AchievementService.cs +++ b/src/Services/AchievementService.cs @@ -98,11 +98,26 @@ namespace sodoff.Services { ctx.SaveChanges(); - return new AchievementReward{ + AchievementReward achievementReward = new AchievementReward + { EntityID = viking.Uid, PointTypeID = type, Amount = value }; + + if(viking.GameVersion <= ClientVersion.WoJS && xpPoints.Type == (int)AchievementPointTypes.PlayerXP) + { + 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) + { + // player leveled up, post message + messagingService.AddMessageToViking(null, viking, MessageType.Data, MessageTypeID.Rank, MessageLevel.WhiteList, "[[Line3]]=[[Congratulations Jumpee, You Leveled Up!]][[Prefab]]=[[RS_DATA/PfLevelUpRoom.unity3d/PfLevelUpRoom]]", "[[Line3]]=[[Congratulations Jumpee, You Leveled Up!]][[Prefab]]=[[RS_DATA/PfLevelUpRoom.unity3d/PfLevelUpRoom]]", "[[Line3]]=[[Congratulations Jumpee, You Leveled Up!]][[Prefab]]=[[RS_DATA/PfLevelUpRoom.unity3d/PfLevelUpRoom]]", isPrivate: true); + } + } + + return achievementReward; } return null; } diff --git a/src/Services/AchievementStoreSingleton.cs b/src/Services/AchievementStoreSingleton.cs index 17a02f1..96aa624 100644 --- a/src/Services/AchievementStoreSingleton.cs +++ b/src/Services/AchievementStoreSingleton.cs @@ -61,7 +61,7 @@ namespace sodoff.Services { } public int GetRankFromXP(int? xpPoints, AchievementPointTypes type) { - return ranks[type].Count(r => r.Value <= xpPoints); + return ranks[type].Count(r => r.Value <= xpPoints) - 1; // shitty attempt to fix wrong rank being reported } public AchievementReward[]? GetAchievementRewardsById(int achievementID) { diff --git a/src/Services/MessagingService.cs b/src/Services/MessagingService.cs index e3f7f11..ef08233 100644 --- a/src/Services/MessagingService.cs +++ b/src/Services/MessagingService.cs @@ -271,9 +271,13 @@ public class MessagingService MessageTypeID = (int?)message.MessageTypeID, Data = message.Data ?? "NoData", MemberMessage = message.MemberMessage ?? "NoMessage", - NonMemberMessage = message.NonMemberMessage ?? "NoMessage" + NonMemberMessage = message.NonMemberMessage ?? "NoMessage", + MemberAudioUrl = "", + NonMemberAudioUrl = "", + MemberImageUrl = "", + NonMemberImageUrl = "" }; - + messageInfos.Add(messageInfo); }