From a2c01ee8ffef422291e57c3f69d6689104aaab6b Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 22 Jan 2025 23:30:40 +0000 Subject: [PATCH] Implemented `RepairController.TraderRepair` + repeatable cleanup --- .../Core/Controllers/RepairController.cs | 35 +++++++++++++++++-- .../Generators/RepeatableQuestGenerator.cs | 28 +++++---------- Libraries/Core/Services/RepairService.cs | 2 +- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/Libraries/Core/Controllers/RepairController.cs b/Libraries/Core/Controllers/RepairController.cs index beb9ed43..ade7176f 100644 --- a/Libraries/Core/Controllers/RepairController.cs +++ b/Libraries/Core/Controllers/RepairController.cs @@ -2,12 +2,15 @@ using SptCommon.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.ItemEvent; using Core.Models.Eft.Repair; +using Core.Routers; +using Core.Services; namespace Core.Controllers; [Injectable] public class RepairController( - + EventOutputHolder _eventOutputHolder, + RepairService _repairService ) { /// @@ -19,11 +22,37 @@ public class RepairController( /// player profile /// item event router action public ItemEventRouterResponse TraderRepair( - string sessionId, + string sessionID, TraderRepairActionDataRequest body, PmcData pmcData) { - throw new NotImplementedException(); + var output = _eventOutputHolder.GetOutput(sessionID); + + // find the item to repair + foreach (var repairItem in body.RepairItems) { + var repairDetails = _repairService.RepairItemByTrader(sessionID, pmcData, repairItem, body.TId); + + _repairService.PayForRepair( + sessionID, + pmcData, + repairItem.Id, + repairDetails.RepairCost.Value, + body.TId, + output); + + if (output.Warnings.Count > 0) + { + return output; + } + + // Add repaired item to output object + output.ProfileChanges[sessionID].Items.ChangedItems.Add(repairDetails.RepairedItem.ConvertToProduct()); + + // Add skill points for repairing weapons + _repairService.AddRepairSkillPoints(sessionID, repairDetails, pmcData); + } + + return output; } /// diff --git a/Libraries/Core/Generators/RepeatableQuestGenerator.cs b/Libraries/Core/Generators/RepeatableQuestGenerator.cs index b22dac63..98d75b14 100644 --- a/Libraries/Core/Generators/RepeatableQuestGenerator.cs +++ b/Libraries/Core/Generators/RepeatableQuestGenerator.cs @@ -12,7 +12,6 @@ using Core.Services; using Core.Utils.Collections; using SptCommon.Extensions; using BodyPart = Core.Models.Spt.Config.BodyPart; -using Core.Models.Eft.Hideout; using Core.Utils.Cloners; namespace Core.Generators; @@ -387,22 +386,6 @@ public class RepeatableQuestGenerator( return Math.Sqrt(Math.Sqrt(target) + bodyPart + dist + weaponRequirement) * kill; } - /// - /// Get a number of kills needed to complete elimination quest - /// - /// Target type desired e.g. anyPmc/bossBully/Savage - /// Config - /// Config - /// Number of AI to kill - protected int GetEliminationKillCount( - string targetKey, - object targetsConfig, // TODO: typing was ProbabilityObjectArray - EliminationConfig eliminationConfig - ) - { - throw new NotImplementedException(); - } - /// /// A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json) /// This is a helper method for GenerateEliminationQuest to create a location condition. @@ -766,7 +749,9 @@ public class RepeatableQuestGenerator( /// List of Exit objects protected List GetLocationExitsForSide(string locationKey, string playerSide) { - throw new NotImplementedException(); + var mapExtracts = _databaseService.GetLocation(locationKey.ToLower()).AllExtracts; + + return mapExtracts.Where((exit) => exit.Side == playerSide).ToList(); } protected RepeatableQuest GeneratePickupQuest( @@ -797,7 +782,12 @@ public class RepeatableQuestGenerator( /// Exit condition protected QuestConditionCounterCondition GenerateExplorationExitCondition(Exit exit) { - throw new NotImplementedException(); + return new QuestConditionCounterCondition { + Id = _hashUtil.Generate(), + DynamicLocale = true, + ExitName = exit.Name, + ConditionType = "ExitName" + }; } /// diff --git a/Libraries/Core/Services/RepairService.cs b/Libraries/Core/Services/RepairService.cs index d8b75228..f2fdd1f6 100644 --- a/Libraries/Core/Services/RepairService.cs +++ b/Libraries/Core/Services/RepairService.cs @@ -58,7 +58,7 @@ public class RepairService string sessionID, PmcData pmcData, string repairedItemId, - decimal repairCost, + double repairCost, string traderId, ItemEventRouterResponse output )