From d846240633fd94e0d4a8a1235bedd451162dbf3a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 22 Feb 2026 23:00:24 +0000 Subject: [PATCH] Fix infinite decoration gift exploit at max Interior Design rank At Rank 10, Home.GainExp() returned early without setting DecorationRewardTimestamp, leaving it at the daily-reset value of 0. The client saw timestamp=0 and kept showing the claim button as available, allowing unlimited reward claims. Fix: Move the timestamp update from GainExp into InteriorCheckIn and add a server-side check that prevents claiming when the timestamp is already set (non-zero) for the day. https://claude.ai/code/session_01DPS5yXmeVMzpihRr6UKrjj --- Maple2.Model/Game/User/Home.cs | 1 - Maple2.Server.Game/Manager/HousingManager.cs | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Maple2.Model/Game/User/Home.cs b/Maple2.Model/Game/User/Home.cs index 870aae906..2e8f91ba9 100644 --- a/Maple2.Model/Game/User/Home.cs +++ b/Maple2.Model/Game/User/Home.cs @@ -158,7 +158,6 @@ public void GainExp(long exp, IReadOnlyDictionary decorationCurrent = plot.Cubes.Values .Where(plotCube => plotCube.Metadata.Housing != null) .GroupBy(plotCube => plotCube.Metadata.Housing!.HousingCategory) @@ -468,6 +472,7 @@ public void InteriorCheckIn(Plot plot) { } Home.GainExp(decorationScore, tableMetadata.MasteryUgcHousingTable.Entries); + Home.DecorationRewardTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); session.Send(CubePacket.DesignRankReward(Home)); }