From 357c2f5dace4b8faffef96e668f0fa36ac8df23f Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 30 Jul 2025 17:30:50 +0100 Subject: [PATCH] Created `EndRaidResultExtensions` --- .../Extensions/EndRaidResultExtensions.cs | 73 +++++++++++++++ .../Services/LocationLifecycleService.cs | 90 ++----------------- 2 files changed, 79 insertions(+), 84 deletions(-) create mode 100644 Libraries/SPTarkov.Server.Core/Extensions/EndRaidResultExtensions.cs diff --git a/Libraries/SPTarkov.Server.Core/Extensions/EndRaidResultExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/EndRaidResultExtensions.cs new file mode 100644 index 00000000..2f0e6ae4 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Extensions/EndRaidResultExtensions.cs @@ -0,0 +1,73 @@ +using SPTarkov.Server.Core.Models.Eft.Match; +using SPTarkov.Server.Core.Models.Enums; + +namespace SPTarkov.Server.Core.Extensions +{ + public static class EndRaidResultExtensions + { + private static HashSet deathStates = [ExitStatus.KILLED, ExitStatus.MISSINGINACTION, ExitStatus.LEFT]; + + /// + /// Checks to see if player survives. run through will return false + /// + /// Post raid request + /// True if survived + public static bool IsPlayerSurvived(this EndRaidResult results) + { + return results.Result == ExitStatus.SURVIVED; + } + + /// + /// Is the player dead after a raid - dead = anything other than "survived" / "runner" + /// + /// Post raid request + /// True if dead + public static bool IsPlayerDead(this EndRaidResult results) + { + return deathStates.Contains(results.Result.Value); + } + + /// + /// Has the player moved from one map to another + /// + /// Post raid request + /// True if players transferred + public static bool IsMapToMapTransfer(this EndRaidResult results) + { + return results.Result == ExitStatus.TRANSIT; + } + + /// + /// Was extract by car + /// + /// Result object from completed raid + /// Car extract names + /// True if extract was by car + public static bool TookCarExtract(this EndRaidResult? requestResults, HashSet carExtracts) + { + // exit name is undefined on death + if (string.IsNullOrEmpty(requestResults?.ExitName)) + { + return false; + } + + if (requestResults.ExitName.ToLowerInvariant().Contains("v-ex")) + { + return true; + } + + return carExtracts.Contains(requestResults.ExitName.Trim()); + } + + /// + /// Raid exit was via coop extract + /// + /// Result object from completed raid + /// + /// True when exit was coop extract + public static bool TookCoopExtract(this EndRaidResult? raidResult, HashSet coopExtracts) + { + return raidResult?.ExitName is not null && coopExtracts.Contains(raidResult.ExitName.Trim()); + } + } +} diff --git a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs index b9d0c162..4f54bf1e 100644 --- a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs @@ -332,9 +332,9 @@ public class LocationLifecycleService( var locationName = serverDetails[0].ToLowerInvariant(); var isPmc = serverDetails[1].ToLowerInvariant().Contains("pmc"); - var isDead = IsPlayerDead(request.Results); - var isTransfer = IsMapToMapTransfer(request.Results); - var isSurvived = IsPlayerSurvived(request.Results); + var isDead = request.Results.IsPlayerDead(); + var isTransfer = request.Results.IsMapToMapTransfer(); + var isSurvived = request.Results.IsPlayerSurvived(); // Handle items transferred via BTR or transit to player mailbox btrDeliveryService.HandleItemTransferEvent(sessionId, request); @@ -360,13 +360,13 @@ public class LocationLifecycleService( HandlePostRaidPmc(sessionId, fullProfile, scavProfile, isDead, isSurvived, isTransfer, request, locationName); // Handle car extracts - if (TookCarExtract(request.Results)) + if (request.Results.TookCarExtract(_inRaidConfig.CarExtracts)) { HandleCarExtract(request.Results.ExitName, pmcProfile, sessionId); } // Handle coop exit - if (TookCoopExtract(request.Results) && _traderConfig.Fence.CoopExtractGift.SendGift) + if (request.Results.TookCoopExtract(_inRaidConfig.CoopExtracts) && _traderConfig.Fence.CoopExtractGift.SendGift) { HandleCoopExtract(sessionId, pmcProfile, request.Results.ExitName); SendCoopTakenFenceMessage(sessionId); @@ -403,37 +403,6 @@ public class LocationLifecycleService( ); } - /// - /// Was extract by car - /// - /// Result object from completed raid - /// True if extract was by car - protected bool TookCarExtract(EndRaidResult? requestResults) - { - // exit name is undefined on death - if (string.IsNullOrEmpty(requestResults?.ExitName)) - { - return false; - } - - if (requestResults.ExitName.ToLowerInvariant().Contains("v-ex")) - { - return true; - } - - return _inRaidConfig.CarExtracts.Contains(requestResults.ExitName.Trim()); - } - - /// - /// Raid exit was via coop extract - /// - /// Result object from completed raid - /// True when exit was coop extract - protected bool TookCoopExtract(EndRaidResult? raidResult) - { - return raidResult?.ExitName is not null && ExtractTakenWasCoop(raidResult.ExitName); - } - /// /// Handle when a player extracts using a car - Add rep to fence /// @@ -525,22 +494,6 @@ public class LocationLifecycleService( return Math.Round(newFenceStanding, 2); } - /// - /// Did player take a COOP extract - /// - /// Name of extract player took - /// True if coop extract - protected bool ExtractTakenWasCoop(string? extractName) - { - // No extract name, not a coop extract - if (extractName is null) - { - return false; - } - - return _inRaidConfig.CoopExtracts.Contains(extractName.Trim()); - } - /// /// Perform post-raid profile changes /// @@ -604,7 +557,7 @@ public class LocationLifecycleService( scavProfile.TradersInfo[Traders.FENCE].Standing = Math.Clamp(postRaidFenceData.Standing.Value, fenceMin, fenceMax); // Successful extract as scav, give some rep - if (IsPlayerSurvived(request.Results) && scavProfile.TradersInfo[Traders.FENCE].Standing < fenceMax) + if (request.Results.IsPlayerSurvived() && scavProfile.TradersInfo[Traders.FENCE].Standing < fenceMax) { scavProfile.TradersInfo[Traders.FENCE].Standing += _inRaidConfig.ScavExtractStandingGain; } @@ -1033,37 +986,6 @@ public class LocationLifecycleService( } } - /// - /// Checks to see if player survives. run through will return false - /// - /// Post raid request - /// True if survived - protected bool IsPlayerSurvived(EndRaidResult results) - { - return results.Result == ExitStatus.SURVIVED; - } - - /// - /// Is the player dead after a raid - dead = anything other than "survived" / "runner" - /// - /// Post raid request - /// True if dead - protected bool IsPlayerDead(EndRaidResult results) - { - var deathEnums = new List { ExitStatus.KILLED, ExitStatus.MISSINGINACTION, ExitStatus.LEFT }; - return deathEnums.Contains(results.Result.Value); - } - - /// - /// Has the player moved from one map to another - /// - /// Post raid request - /// True if players transferred - protected bool IsMapToMapTransfer(EndRaidResult results) - { - return results.Result == ExitStatus.TRANSIT; - } - /// /// Reset the skill points earned in a raid to 0, ready for next raid ///