From b3c5fa3e2b9e3fa1883aa841e533670f079c4442 Mon Sep 17 00:00:00 2001 From: Yury Date: Mon, 31 Mar 2025 01:32:15 +0300 Subject: [PATCH] Disallow accepting already completed contracts --- .../CloudScript/Functions/ActivateContract.cs | 11 ++++++++++- .../CloudScript/Functions/ClaimActiveContract.cs | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Prospect.Server.Api/Services/CloudScript/Functions/ActivateContract.cs b/src/Prospect.Server.Api/Services/CloudScript/Functions/ActivateContract.cs index 2c7ea20..89937b3 100644 --- a/src/Prospect.Server.Api/Services/CloudScript/Functions/ActivateContract.cs +++ b/src/Prospect.Server.Api/Services/CloudScript/Functions/ActivateContract.cs @@ -55,7 +55,7 @@ public class ActivateContract : ICloudScriptFunction{"ContractsActive"}); + var userData = await _userDataService.FindAsync(userId, userId, new List{"ContractsActive", "ContractsOneTimeCompleted"}); var titleData = _titleDataService.Find(new List{"Contracts"}); var contracts = JsonSerializer.Deserialize>(titleData["Contracts"]); @@ -67,6 +67,15 @@ public class ActivateContract : ICloudScriptFunction(userData["ContractsOneTimeCompleted"].Value); + if (contractsCompleted.ContractsIDs.Contains(request.ContractID)) { + return new FYActivateContractResult + { + UserID = userId, + Error = "Contract is already completed", + Status = 1 // EYActivateContractRequestStatus::CONTRACT_OF_THIS_FACTION_IS_ALREADY_ACTIVE + }; + } // TODO: Contract unlock criteria var progress = new int[contract.Objectives.Length]; diff --git a/src/Prospect.Server.Api/Services/CloudScript/Functions/ClaimActiveContract.cs b/src/Prospect.Server.Api/Services/CloudScript/Functions/ClaimActiveContract.cs index 06ef496..3ba2584 100644 --- a/src/Prospect.Server.Api/Services/CloudScript/Functions/ClaimActiveContract.cs +++ b/src/Prospect.Server.Api/Services/CloudScript/Functions/ClaimActiveContract.cs @@ -1,4 +1,4 @@ -using System.Text.Json; +using System.Text.Json; using System.Text.Json.Serialization; using Prospect.Server.Api.Models.Data; using Prospect.Server.Api.Services.Auth.Extensions; @@ -243,6 +243,9 @@ public class ClaimActiveContract : ICloudScriptFunction(); foreach (var contractIdToUnlock in request.ContractsToUnlock) { + if (contractsCompleted.ContractsIDs.Contains(contractIdToUnlock)) { + continue; + } var contractToUnlock = contracts[contractIdToUnlock]; var progress = new int[contractToUnlock.Objectives.Length]; // TODO: Automatically set max progress of kill and visit objectives. To remove once kill and visit objectives are reported by the client.