fix(trader): fixed on startup server crash

This commit is contained in:
Yui
2025-11-05 16:16:28 -03:00
parent 0b5065a56e
commit 99f0a2a3c9

View File

@@ -10,7 +10,7 @@ using SPTarkov.Server.Core.Services;
namespace WeebSights.Services; namespace WeebSights.Services;
[Injectable(TypePriority = OnLoadOrder.PostDBModLoader + 2)] [Injectable]
public class WeebTraderService(ISptLogger<WeebTraderService> logger, DatabaseService databaseService) public class WeebTraderService(ISptLogger<WeebTraderService> logger, DatabaseService databaseService)
{ {
public bool AddToAssortFromItemClone(MongoId traderId, IEnumerable<CreateItemResult> itemCloneResults) public bool AddToAssortFromItemClone(MongoId traderId, IEnumerable<CreateItemResult> itemCloneResults)
@@ -23,7 +23,7 @@ public class WeebTraderService(ISptLogger<WeebTraderService> logger, DatabaseSer
foreach (var itemResult in itemCloneResults) foreach (var itemResult in itemCloneResults)
{ {
var item = databaseService.GetItems().FirstOrDefault(i => i.Key == itemResult.ItemId); var item = databaseService.GetItems().First(i => i.Key == itemResult.ItemId);
var traderItem = GenerateItemForTrader(item); var traderItem = GenerateItemForTrader(item);
var traderBarter = new BarterScheme() var traderBarter = new BarterScheme()
{ {
@@ -32,11 +32,24 @@ public class WeebTraderService(ISptLogger<WeebTraderService> logger, DatabaseSer
}; };
trader.Assort.Items.Add(traderItem); trader.Assort.Items.Add(traderItem);
if (!trader.Assort.BarterScheme.TryAdd(item.Key, [[traderBarter]])) if (!trader.Assort.BarterScheme.TryAdd(traderItem.Id, [[traderBarter]]))
{ {
logger.Error($"[Weeb Iron Sights] Failed to add barter for item {item.Value.Name} with ID {item.Value.Id} in MECHANIC"); logger.Error(
$"[Weeb Iron Sights] Failed to add barter {traderItem.Id} for item {item.Value.Name} with ID {item.Value.Id} in {trader.Base.Name}. Item will not be added");
trader.Assort.Items.Remove(traderItem);
continue;
} }
logger.Success($"[Weeb Iron Sights] Added item {item.Value.Name} with ID {item.Value.Id} to MECHANIC");
if (!trader.Assort.LoyalLevelItems.TryAdd(traderItem.Id, 1))
{
logger.Critical(
$"[Weeb Iron Sight] Failed to add loyalty requirements for item {item.Value.Name} with ID {item.Value.Id} in {trader.Base.Name}. Item will not be added");
trader.Assort.Items.Remove(traderItem);
continue;
}
#if DEBUG
logger.Success($"[Weeb Iron Sights] Added item {traderItem.Id} with ID {item.Value.Id} and barter {traderItem.Id} to MECHANIC");
#endif
} }
return true; return true;
@@ -46,7 +59,7 @@ public class WeebTraderService(ISptLogger<WeebTraderService> logger, DatabaseSer
{ {
return new Item return new Item
{ {
Id = databaseItem.Key, Id = new MongoId(),
Template = databaseItem.Value.Id, Template = databaseItem.Value.Id,
ParentId = "hideout", ParentId = "hideout",
SlotId = "hideout", SlotId = "hideout",