Fix profiles not creating, along with chomps replaceID changes

This commit is contained in:
CWX
2025-01-25 21:20:32 +00:00
parent 0327f99805
commit e16a08489a
8 changed files with 32 additions and 24 deletions
@@ -714,7 +714,7 @@ public class HideoutController(
var defaultPreset = _presetHelper.GetDefaultPreset(recipe.EndProduct);
// Ensure preset has unique ids and is cloned so we don't alter the preset data stored in memory
List<Item> presetAndMods = _itemHelper.ReplaceIDs(defaultPreset.Items);
List<Item> presetAndMods = _itemHelper.ReplaceIDs(_cloner.Clone(defaultPreset.Items));
_itemHelper.RemapRootItemId(presetAndMods);
@@ -752,7 +752,7 @@ public class HideoutController(
var countOfItemsToReward = recipe.Count;
for (var index = 1; index < countOfItemsToReward; index++)
{
List<Item> itemAndMods = _itemHelper.ReplaceIDs(itemAndChildrenToSendToPlayer.FirstOrDefault());
List<Item> itemAndMods = _itemHelper.ReplaceIDs(_cloner.Clone(itemAndChildrenToSendToPlayer.FirstOrDefault()));
itemAndChildrenToSendToPlayer.AddRange([itemAndMods]);
}
}
@@ -7,6 +7,7 @@ using Core.Models.Utils;
using Core.Servers;
using Core.Services;
using Core.Utils;
using Core.Utils.Cloners;
namespace Core.Generators;
@@ -22,7 +23,8 @@ public class FenceBaseAssortGenerator(
SeasonalEventService seasonalEventService,
LocalisationService localisationService,
ConfigServer configServer,
FenceService fenceService
FenceService fenceService,
ICloner _cloner
)
{
protected TraderConfig traderConfig = configServer.GetConfig<TraderConfig>();
@@ -147,7 +149,7 @@ public class FenceBaseAssortGenerator(
}
// Construct preset + mods
var itemAndChildren = itemHelper.ReplaceIDs(defaultPreset.Items);
var itemAndChildren = itemHelper.ReplaceIDs(_cloner.Clone(defaultPreset.Items));
// Find root item and add some properties to it
for (var i = 0; i < itemAndChildren.Count; i++)
@@ -945,7 +945,7 @@ public class LocationLootGenerator(
var itemWithChildren = _itemHelper.FindAndReturnChildrenAsItems(items, chosenItem.Id);
// Ensure all IDs are unique
itemWithChildren = _itemHelper.ReplaceIDs(itemWithChildren);
itemWithChildren = _itemHelper.ReplaceIDs(_cloner.Clone(itemWithChildren));
if (_locationConfig.TplsToStripChildItemsFrom.Contains(chosenItem.Template)) {
// Strip children from parent before adding
@@ -1148,7 +1148,7 @@ public class LocationLootGenerator(
var defaultPreset = _presetHelper.GetDefaultPreset(chosenTpl);
if (defaultPreset is not null)
{
List<Item> presetAndMods = _itemHelper.ReplaceIDs(defaultPreset.Items);
List<Item> presetAndMods = _itemHelper.ReplaceIDs(_cloner.Clone(defaultPreset.Items));
_itemHelper.RemapRootItemId(presetAndMods);
// Use original items parentId otherwise item doesnt get added to container correctly
@@ -7,6 +7,7 @@ using Core.Models.Spt.Config;
using Core.Servers;
using Core.Services;
using Core.Utils;
using Core.Utils.Cloners;
namespace Core.Generators;
@@ -16,7 +17,8 @@ public class RagfairAssortGenerator(
ItemHelper itemHelper,
PresetHelper presetHelper,
SeasonalEventService seasonalEventService,
ConfigServer configServer
ConfigServer configServer,
ICloner _cloner
)
{
protected List<List<Item>> generatedAssortItems = [];
@@ -77,7 +79,7 @@ public class RagfairAssortGenerator(
foreach (var preset in presets)
{
// Update Ids and clone
var presetAndMods = itemHelper.ReplaceIDs(preset.Items);
var presetAndMods = itemHelper.ReplaceIDs(_cloner.Clone(preset.Items));
itemHelper.RemapRootItemId(presetAndMods);
// Add presets base item tpl to the processed list so its skipped later on when processing items
@@ -11,6 +11,7 @@ using Core.Models.Utils;
using Core.Servers;
using Core.Services;
using Core.Utils;
using Core.Utils.Cloners;
using SptCommon.Extensions;
namespace Core.Generators;
@@ -26,7 +27,8 @@ public class ScavCaseRewardGenerator(
RagfairPriceService _ragfairPriceService,
SeasonalEventService _seasonalEventService,
ItemFilterService _itemFilterService,
ConfigServer _configServer
ConfigServer _configServer,
ICloner _cloner
)
{
protected ScavCaseConfig _scavCaseConfig = _configServer.GetConfig<ScavCaseConfig>();
@@ -312,7 +314,7 @@ public class ScavCaseRewardGenerator(
}
// Ensure preset has unique ids and is cloned so we don't alter the preset data stored in memory
List<Item> presetAndMods = _itemHelper.ReplaceIDs(preset.Items);
List<Item> presetAndMods = _itemHelper.ReplaceIDs(_cloner.Clone(preset.Items));
_itemHelper.RemapRootItemId(presetAndMods);
resultItem = presetAndMods;
+1 -1
View File
@@ -361,7 +361,7 @@ namespace Core.Helpers
if (defaultPreset is not null)
{
// Found preset, use mods to hydrate reward item
var presetAndMods = _itemHelper.ReplaceIDs(defaultPreset.Items);
var presetAndMods = _itemHelper.ReplaceIDs(_cloner.Clone(defaultPreset.Items));
var newRootId = _itemHelper.RemapRootItemId(presetAndMods);
reward.Items = presetAndMods;
+11 -11
View File
@@ -25,7 +25,7 @@ public class FenceService(
PresetHelper presetHelper,
LocalisationService localisationService,
ConfigServer configServer,
ICloner cloner
ICloner _cloner
)
{
protected TraderConfig traderConfig = configServer.GetConfig<TraderConfig>();
@@ -116,13 +116,13 @@ public class FenceService(
}
// Clone assorts so we can adjust prices before sending to client
var assort = cloner.Clone(fenceAssort);
var assort = _cloner.Clone(fenceAssort);
AdjustAssortItemPricesByConfigMultiplier(assort, 1, traderConfig.Fence.PresetPriceMult);
// merge normal fence assorts + discount assorts if player standing is large enough
if (pmcProfile.TradersInfo[Traders.FENCE].Standing >= 6)
{
var discountAssort = cloner.Clone(fenceDiscountAssort);
var discountAssort = _cloner.Clone(fenceDiscountAssort);
AdjustAssortItemPricesByConfigMultiplier(
discountAssort,
traderConfig.Fence.DiscountOptions.ItemPriceMult,
@@ -145,7 +145,7 @@ public class FenceService(
{
// HUGE THANKS TO LACYWAY AND LEAVES FOR PROVIDING THIS SOLUTION FOR SPT TO IMPLEMENT!!
// Copy the item and its children
var clonedItems = cloner.Clone(itemHelper.FindAndReturnChildrenAsItems(items, mainItem.Id));
var clonedItems = _cloner.Clone(itemHelper.FindAndReturnChildrenAsItems(items, mainItem.Id));
var root = clonedItems[0];
var cost = GetItemPrice(root.Template, clonedItems);
@@ -292,7 +292,7 @@ public class FenceService(
*/
public TraderAssort GetRawFenceAssorts()
{
return MergeAssorts(cloner.Clone(fenceAssort), cloner.Clone(fenceDiscountAssort));
return MergeAssorts(_cloner.Clone(fenceAssort), _cloner.Clone(fenceDiscountAssort));
}
/**
@@ -675,7 +675,7 @@ public class FenceService(
{
var result = new CreateFenceAssortsResult() { SptItems = [], BarterScheme = new(), LoyalLevelItems = new() };
var baseFenceAssortClone = cloner.Clone(databaseService.GetTrader(Traders.FENCE).Assort);
var baseFenceAssortClone = _cloner.Clone(databaseService.GetTrader(Traders.FENCE).Assort);
var itemTypeLimitCounts = InitItemLimitCounter(traderConfig.Fence.ItemTypeLimits);
if (itemCounts.Item > 0)
@@ -733,7 +733,7 @@ public class FenceService(
continue;
}
var desiredAssortItemAndChildrenClone = cloner.Clone(
var desiredAssortItemAndChildrenClone = _cloner.Clone(
itemHelper.FindAndReturnChildrenAsItems(baseFenceAssortClone.Items, chosenBaseAssortRoot.Id)
);
@@ -771,7 +771,7 @@ public class FenceService(
}
// MUST randomise Ids as its possible to add the same base fence assort twice = duplicate IDs = dead client
desiredAssortItemAndChildrenClone = itemHelper.ReplaceIDs(desiredAssortItemAndChildrenClone);
desiredAssortItemAndChildrenClone = itemHelper.ReplaceIDs(_cloner.Clone(desiredAssortItemAndChildrenClone));
itemHelper.RemapRootItemId(desiredAssortItemAndChildrenClone);
var rootItemBeingAdded = desiredAssortItemAndChildrenClone[0];
@@ -807,7 +807,7 @@ public class FenceService(
assorts.SptItems.Add(desiredAssortItemAndChildrenClone);
assorts.BarterScheme[rootItemBeingAdded.Id] =
cloner.Clone(baseFenceAssortClone.BarterScheme[chosenBaseAssortRoot.Id]);
_cloner.Clone(baseFenceAssortClone.BarterScheme[chosenBaseAssortRoot.Id]);
// Only adjust item price by quality for solo items, never multi-stack
if (isSingleStack)
@@ -1015,7 +1015,7 @@ public class FenceService(
var rootItemDb = itemHelper.GetItem(randomPresetRoot.Template).Value;
var presetWithChildrenClone = cloner.Clone(
var presetWithChildrenClone = _cloner.Clone(
itemHelper.FindAndReturnChildrenAsItems(baseFenceAssort.Items, randomPresetRoot.Id)
);
@@ -1076,7 +1076,7 @@ public class FenceService(
var randomPresetRoot = randomUtil.GetArrayValue(equipmentPresetRootItems);
var rootItemDb = itemHelper.GetItem(randomPresetRoot.Template).Value;
var presetWithChildrenClone = cloner.Clone(
var presetWithChildrenClone = _cloner.Clone(
itemHelper.FindAndReturnChildrenAsItems(baseFenceAssort.Items, randomPresetRoot.Id)
);
+4 -2
View File
@@ -7,6 +7,7 @@ using Core.Models.Spt.Dialog;
using Core.Models.Utils;
using Core.Servers;
using Core.Utils;
using Core.Utils.Cloners;
namespace Core.Services;
@@ -22,7 +23,8 @@ public class MailSendService(
NotificationSendHelper _notificationSendHelper,
LocalisationService _localisationService,
ItemHelper _itemHelper,
TraderHelper _traderHelper
TraderHelper _traderHelper,
ICloner _cloner
)
{
private const string _systemSenderId = "59e7125688a45068a6249071";
@@ -453,7 +455,7 @@ public class MailSendService(
};
// Ensure Ids are unique and cont collide with items in player inventory later
messageDetails.Items = _itemHelper.ReplaceIDs(messageDetails.Items);
messageDetails.Items = _itemHelper.ReplaceIDs(_cloner.Clone(messageDetails.Items));
// Ensure item exits in items db
foreach (var reward in messageDetails.Items)