Core/Housing: stage 36 reject expired Initiative reward claims

This commit is contained in:
Gexo91
2026-09-12 18:27:59 +03:00
parent b91f27d921
commit 22df66db67
@@ -8,6 +8,7 @@
#include "HousingInitiativeReward.h"
#include "Log.h"
#include "Player.h"
#include <algorithm>
#include <limits>
#include <mutex>
#include <vector>
@@ -344,6 +345,24 @@ namespace Housing
if (!player || neighborhoodGuid.IsEmpty() || !generationId)
return InitiativeRewardExecutionResult::InvalidRequest;
std::vector<ArchivedInitiativeReward> archivedRewards;
InitiativeRewardClaimResult const loadResult =
LoadArchivedInitiativeRewards(player, neighborhoodGuid, archivedRewards);
if (loadResult != InitiativeRewardClaimResult::Success)
return MapClaimResult(loadResult);
auto const archivedReward = std::find_if(archivedRewards.begin(), archivedRewards.end(),
[generationId](ArchivedInitiativeReward const& reward)
{
return reward.GenerationId == generationId;
});
if (archivedReward == archivedRewards.end())
return InitiativeRewardExecutionResult::NoReward;
uint64 const now = uint64(GameTime::GetGameTime());
if (archivedReward->ExpiredAt != 0 && archivedReward->ExpiredAt <= now && !archivedReward->ClaimPending)
return InitiativeRewardExecutionResult::NoReward;
InitiativeRewardClaimReservation reservation;
InitiativeRewardClaimResult const reserveResult =
ReserveArchivedInitiativeReward(player, neighborhoodGuid, generationId, reservation);