From db795d93a4d9f827a7801d565556b59675a9e32a Mon Sep 17 00:00:00 2001 From: Robert Paciorek Date: Sun, 9 Mar 2025 08:27:49 +0000 Subject: [PATCH] bugfixes - allow to add items to store while using replace action in server-side mods - fixed wrong (inverted) logic for LastLevelCompleted - fixed 'already an open DataReader' isse on GetTopRated* endpoints - disabled AchievementTaskID 37 (WoJS) due to causing bug --- src/Controllers/Common/RatingController.cs | 2 ++ src/Resources/achievements/achievementtaskinfo_wojs.xml | 2 ++ src/Services/AchievementService.cs | 4 ++-- src/Services/ModdingService.cs | 2 +- src/Services/StoreService.cs | 1 + 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Controllers/Common/RatingController.cs b/src/Controllers/Common/RatingController.cs index b20fbc5..90ae7e8 100644 --- a/src/Controllers/Common/RatingController.cs +++ b/src/Controllers/Common/RatingController.cs @@ -240,6 +240,7 @@ public class RatingController : Controller return ctx.RatingRanks .Where(rr => categoryID == rr.CategoryID) .Take(numberOfRecord) + .ToList() .Select(rr => new RatingRankInfo(rr)) .ToArray(); } @@ -255,6 +256,7 @@ public class RatingController : Controller )) .OrderBy(rr => rr.Rank) .Take(numberOfRecord) + .ToList() .Select(rr => new UserRatingRankInfo { RankInfo = new RatingRankInfo(rr), RatedUserID = new Guid(rr.RatedUserID) }) .ToArray() }); diff --git a/src/Resources/achievements/achievementtaskinfo_wojs.xml b/src/Resources/achievements/achievementtaskinfo_wojs.xml index e5096fb..53da76a 100644 --- a/src/Resources/achievements/achievementtaskinfo_wojs.xml +++ b/src/Resources/achievements/achievementtaskinfo_wojs.xml @@ -14080,6 +14080,7 @@ 36 + 269 38 diff --git a/src/Services/AchievementService.cs b/src/Services/AchievementService.cs index 7e89658..219887f 100644 --- a/src/Services/AchievementService.cs +++ b/src/Services/AchievementService.cs @@ -158,13 +158,13 @@ namespace sodoff.Services { AchievementTaskState? achievementTaskState = viking.AchievementTaskStates.FirstOrDefault(x => x.TaskId == taskID); int pointValue = (achievementTaskState?.Points ?? 0); var achievementInfo = achievementStore.GetAchievementTaskInfo(taskID, gameVersion, pointValue); - var lastLevelCompleted = false; + var lastLevelCompleted = true; if (achievementInfo == null) return new AchievementTaskSetResponse(); if (pointValue < achievementInfo.PointValue) { // limit points stored value to max points value in achievement tasks pointValue += 1; - lastLevelCompleted = true; + lastLevelCompleted = false; } var rewards = (achievementInfo.Reproducible || pointValue == achievementInfo.PointValue) diff --git a/src/Services/ModdingService.cs b/src/Services/ModdingService.cs index 6179745..956fa7c 100644 --- a/src/Services/ModdingService.cs +++ b/src/Services/ModdingService.cs @@ -38,7 +38,7 @@ public class ModdingService { try { itemsToUpdate.Add((int)itemID, item); - if (item.stores != null && (item.action == ModAction.Add || item.action == ModAction.Default)) { + if (item.stores != null && (item.action != ModAction.Remove)) { foreach (int storeID in item.stores) { try { itemsInStore[storeID].Add((int)itemID); diff --git a/src/Services/StoreService.cs b/src/Services/StoreService.cs index ee7d555..40edcc4 100644 --- a/src/Services/StoreService.cs +++ b/src/Services/StoreService.cs @@ -29,6 +29,7 @@ public class StoreService { } foreach (int itemID in moddingService.GetStoreItem(s.Id)) { ItemData item = itemService.GetItem(itemID); + if (itemsList.Contains(item)) continue; itemsList.Add(item); UpdateItemSaleModifier(item, memberSales, normalSales); }