From f484a4b16f76fc69cb2339e05b6107e977766fb3 Mon Sep 17 00:00:00 2001 From: Chomp Date: Sat, 25 Jan 2025 19:06:01 +0000 Subject: [PATCH] Improved types for item purchasing Fixed purchased items lacking inserts --- Libraries/Core/Callbacks/BotCallbacks.cs | 1 - .../Core/Controllers/HideoutController.cs | 2 +- .../Core/Controllers/PrestigeController.cs | 2 +- Libraries/Core/Helpers/InventoryHelper.cs | 22 +++++++++---------- Libraries/Core/Helpers/ItemHelper.cs | 7 ++---- Libraries/Core/Helpers/TradeHelper.cs | 14 ++++++------ .../Core/Models/Eft/Common/Tables/Item.cs | 10 ++++----- .../Eft/Inventory/AddItemDirectRequest.cs | 2 +- 8 files changed, 27 insertions(+), 33 deletions(-) diff --git a/Libraries/Core/Callbacks/BotCallbacks.cs b/Libraries/Core/Callbacks/BotCallbacks.cs index 0b9570f2..d4e13670 100644 --- a/Libraries/Core/Callbacks/BotCallbacks.cs +++ b/Libraries/Core/Callbacks/BotCallbacks.cs @@ -23,7 +23,6 @@ public class BotCallbacks( /// /// /// - /// public string GetBotLimit(string url, EmptyRequestData info, string sessionID) { var splitUrl = url.Split('/'); diff --git a/Libraries/Core/Controllers/HideoutController.cs b/Libraries/Core/Controllers/HideoutController.cs index b59b3228..5a377d01 100644 --- a/Libraries/Core/Controllers/HideoutController.cs +++ b/Libraries/Core/Controllers/HideoutController.cs @@ -442,7 +442,7 @@ public class HideoutController( AddItemDirectRequest request = new AddItemDirectRequest { - ItemWithModsToAdd = [itemToReturn], + ItemWithModsToAdd = [itemToReturn.ConvertToItem()], FoundInRaid = itemToReturn.Upd?.SpawnedInSession, Callback = null, UseSortingTable = false, diff --git a/Libraries/Core/Controllers/PrestigeController.cs b/Libraries/Core/Controllers/PrestigeController.cs index 72a325fc..d6c11fec 100644 --- a/Libraries/Core/Controllers/PrestigeController.cs +++ b/Libraries/Core/Controllers/PrestigeController.cs @@ -127,7 +127,7 @@ public class PrestigeController( var item = prePrestigePmc.Inventory.Items.FirstOrDefault((item) => item.Id == transferRequest.Id); var addItemRequest = new AddItemDirectRequest { - ItemWithModsToAdd = [item.ConvertToHideoutItem(item)], + ItemWithModsToAdd = [item], FoundInRaid = item.Upd?.SpawnedInSession, UseSortingTable = false, Callback = null, diff --git a/Libraries/Core/Helpers/InventoryHelper.cs b/Libraries/Core/Helpers/InventoryHelper.cs index 0997aa75..fc83a786 100644 --- a/Libraries/Core/Helpers/InventoryHelper.cs +++ b/Libraries/Core/Helpers/InventoryHelper.cs @@ -69,7 +69,7 @@ public class InventoryHelper( { var addItemRequest = new AddItemDirectRequest { - ItemWithModsToAdd = itemToAdd.Select(x => x.ConvertToHideoutItem(x)).ToList(), + ItemWithModsToAdd = itemToAdd, FoundInRaid = request.FoundInRaid, UseSortingTable = request.UseSortingTable, Callback = request.Callback @@ -95,14 +95,12 @@ public class InventoryHelper( ItemEventRouterResponse output) { var itemWithModsToAddClone = _cloner.Clone(request.ItemWithModsToAdd); - var hideoutItemsConvertedToItems = itemWithModsToAddClone.Select(x => x.ConvertToItem(x)).ToList(); - var rootItemToAdd = hideoutItemsConvertedToItems.FirstOrDefault(); // Get stash layouts ready for use var stashFS2D = GetStashSlotMap(pmcData, sessionId); if (stashFS2D is null) { - _logger.Error("Unable to get stash map for players: { sessionId} stash"); + _logger.Error($"Unable to get stash map for players: {sessionId} stash"); return; } @@ -113,7 +111,7 @@ public class InventoryHelper( PlaceItemInInventory( stashFS2D, sortingTableFS2D, - hideoutItemsConvertedToItems, + itemWithModsToAddClone, pmcData.Inventory, request.UseSortingTable.GetValueOrDefault(false), output @@ -123,16 +121,16 @@ public class InventoryHelper( return; // Apply/remove FiR to item + mods - SetFindInRaidStatusForItem(hideoutItemsConvertedToItems, request.FoundInRaid.GetValueOrDefault(false)); + SetFindInRaidStatusForItem(itemWithModsToAddClone, request.FoundInRaid.GetValueOrDefault(false)); // Remove trader properties from root item - RemoveTraderRagfairRelatedUpdProperties(rootItemToAdd.Upd); + RemoveTraderRagfairRelatedUpdProperties(itemWithModsToAddClone[0].Upd); // Run callback try { if (request.Callback is not null) - request.Callback((int) (rootItemToAdd.Upd.StackObjectsCount ?? 0)); + request.Callback((int)(itemWithModsToAddClone[0].Upd.StackObjectsCount ?? 0)); } catch (Exception ex) { @@ -147,11 +145,11 @@ public class InventoryHelper( // Add item + mods to output and profile inventory output.ProfileChanges[sessionId] - .Items.NewItems.AddRange(hideoutItemsConvertedToItems); - pmcData.Inventory.Items.AddRange(hideoutItemsConvertedToItems); + .Items.NewItems.AddRange(itemWithModsToAddClone); + pmcData.Inventory.Items.AddRange(itemWithModsToAddClone); _logger.Debug( - $"Added {rootItemToAdd.Upd?.StackObjectsCount ?? 1} item: {rootItemToAdd.Template} with: {hideoutItemsConvertedToItems.Count - 1} mods to inventory" + $"Added {itemWithModsToAddClone[0].Upd?.StackObjectsCount ?? 1} item: {itemWithModsToAddClone[0].Template} with: {itemWithModsToAddClone.Count - 1} mods to inventory" ); } @@ -920,7 +918,7 @@ public class InventoryHelper( /// Player profile /// session id /// 2-dimensional array - protected int[][] GetStashSlotMap(PmcData pmcData, string sessionID) + protected int[][]? GetStashSlotMap(PmcData pmcData, string sessionID) { var playerStashSize = GetPlayerStashSize(sessionID); return GetContainerMap( diff --git a/Libraries/Core/Helpers/ItemHelper.cs b/Libraries/Core/Helpers/ItemHelper.cs index 3d2f24c9..ffefaed7 100644 --- a/Libraries/Core/Helpers/ItemHelper.cs +++ b/Libraries/Core/Helpers/ItemHelper.cs @@ -1851,12 +1851,9 @@ public class ItemHelper( // Optional: new id to use // Returns New root id - public string RemapRootItemId(List itemWithChildren, string newId = null) + public string RemapRootItemId(List itemWithChildren, string? newId = null) { - if (newId is null) - { - newId = _hashUtil.Generate(); - } + newId ??= _hashUtil.Generate(); var rootItemExistingId = itemWithChildren[0].Id; diff --git a/Libraries/Core/Helpers/TradeHelper.cs b/Libraries/Core/Helpers/TradeHelper.cs index 25f86dd6..0cff95d2 100644 --- a/Libraries/Core/Helpers/TradeHelper.cs +++ b/Libraries/Core/Helpers/TradeHelper.cs @@ -1,4 +1,4 @@ -using System.Text.RegularExpressions; +using System.Text.RegularExpressions; using System.Transactions; using SptCommon.Annotations; using Core.Models.Eft.Common; @@ -72,7 +72,7 @@ public class TradeHelper( var assortHasBuyRestrictions = _itemHelper.HasBuyRestrictions(itemPurchased); if (assortHasBuyRestrictions) { - this.checkPurchaseIsWithinTraderItemLimit( + CheckPurchaseIsWithinTraderItemLimit( sessionID, pmcData, buyRequestData.TransactionId, @@ -82,7 +82,7 @@ public class TradeHelper( ); // Decrement trader item count - PurchaseDetails itemPurchaseDetails = new PurchaseDetails() + PurchaseDetails itemPurchaseDetails = new PurchaseDetails { Items = [ @@ -144,7 +144,7 @@ public class TradeHelper( if (assortHasBuyRestrictions) { // Will throw error if check fails - this.checkPurchaseIsWithinTraderItemLimit( + CheckPurchaseIsWithinTraderItemLimit( sessionID, pmcData, buyRequestData.TransactionId, @@ -272,7 +272,7 @@ public class TradeHelper( if (sellRequest.TransactionId == Traders.RAGMAN) { // Edge case, `Circulate` quest needs to track when certain items are sold to him - this.incrementCirculateSoldToTraderCounter(profileWithItemsToSell, profileToReceiveMoney, sellRequest); + IncrementCirculateSoldToTraderCounter(profileWithItemsToSell, profileToReceiveMoney, sellRequest); } var pattern = @"\s+"; @@ -311,7 +311,7 @@ public class TradeHelper( _paymentService.GiveProfileMoney(profileToReceiveMoney, sellRequest.Price, sellRequest, output, sessionID); } - protected void incrementCirculateSoldToTraderCounter( + protected void IncrementCirculateSoldToTraderCounter( PmcData profileWithItemsToSell, PmcData profileToReceiveMoney, ProcessSellTradeRequestData sellRequest @@ -396,7 +396,7 @@ public class TradeHelper( /// the item from trader being bought /// Id of assort being purchased /// How many of the item are being bought - protected void checkPurchaseIsWithinTraderItemLimit( + protected void CheckPurchaseIsWithinTraderItemLimit( string sessionId, PmcData pmcData, string traderId, diff --git a/Libraries/Core/Models/Eft/Common/Tables/Item.cs b/Libraries/Core/Models/Eft/Common/Tables/Item.cs index 40322764..1965f476 100644 --- a/Libraries/Core/Models/Eft/Common/Tables/Item.cs +++ b/Libraries/Core/Models/Eft/Common/Tables/Item.cs @@ -52,13 +52,13 @@ public record HideoutItem [JsonPropertyName("count")] public double? Count { get; set; } - public Item ConvertToItem(HideoutItem hideoutItem) + public Item ConvertToItem() { - return new Item() + return new Item { - Id = hideoutItem.Id, - Template = hideoutItem.Template, - Upd = hideoutItem.Upd, + Id = Id, + Template = Template, + Upd = Upd, }; } } diff --git a/Libraries/Core/Models/Eft/Inventory/AddItemDirectRequest.cs b/Libraries/Core/Models/Eft/Inventory/AddItemDirectRequest.cs index 5bda3ae0..6f37f98e 100644 --- a/Libraries/Core/Models/Eft/Inventory/AddItemDirectRequest.cs +++ b/Libraries/Core/Models/Eft/Inventory/AddItemDirectRequest.cs @@ -9,7 +9,7 @@ public record AddItemDirectRequest /// Item and child mods to add to player inventory /// [JsonPropertyName("itemWithModsToAdd")] - public List? ItemWithModsToAdd { get; set; } + public List? ItemWithModsToAdd { get; set; } [JsonPropertyName("foundInRaid")] public bool? FoundInRaid { get; set; }