From 2c4d99a84c5effe3b6300ccc02b09fb992bdcf85 Mon Sep 17 00:00:00 2001 From: YesntSoup Date: Tue, 19 Nov 2024 16:50:19 -0500 Subject: [PATCH] Change AddAchievementPoints to account for overflow and underflow (#8) This is for minisaurs in WoJ, but I think it would be a good idea in general, so I didn't limit it to WoJ. The issue happens because if you buy medicine for minisaurs. It takes away one coin, and so if you already have 0 coins, the server currently returns your coin count as int.MaxValue. This is tested in WoJ 1.1.0 and 1.21.0. I tested buying, overflowing, underflowing, using commands with big and negative values and playing games. --- src/Services/AchievementService.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Services/AchievementService.cs b/src/Services/AchievementService.cs index 44fea83..1d38e98 100644 --- a/src/Services/AchievementService.cs +++ b/src/Services/AchievementService.cs @@ -81,10 +81,16 @@ namespace sodoff.Services { }; viking.AchievementPoints.Add(xpPoints); } + + int initialPoints = xpPoints.Value; xpPoints.Value += value ?? 0; - - if (xpPoints.Value < 0) { + + if (value > 0 && initialPoints > xpPoints.Value) { xpPoints.Value = int.MaxValue; + value = int.MaxValue - initialPoints; + } + if (xpPoints.Value < 0) { + xpPoints.Value = 0; value = 0; }