0
0
mirror of https://github.com/sp-tarkov/loot-dump-processor.git synced 2025-02-12 22:50:45 -05:00

Refactored static containers processor to process single map

This commit is contained in:
bluextx 2025-01-11 07:32:46 +03:00
parent 0af0c9f9c3
commit 8366915048
3 changed files with 18 additions and 17 deletions

View File

@ -105,14 +105,12 @@ public class MultithreadSteppedDumpProcessor(
}
else
{
// .Item1 = map name
// .Item2 = force/weapon static arrays
var mapStaticContainers =
_staticContainersProcessor.CreateStaticWeaponsAndForcedContainers(dataDump);
var newStaticWeapons = mapStaticContainers.Item2.StaticWeapons.Where(x =>
var newStaticWeapons = mapStaticContainers.StaticWeapons.Where(x =>
!mapStaticLoot.StaticWeapons.Exists(y => y.Id == x.Id));
var newStaticForced = mapStaticContainers.Item2.StaticForced.Where(x =>
var newStaticForced = mapStaticContainers.StaticForced.Where(x =>
!mapStaticLoot.StaticForced.Exists(y => y.ContainerId == x.ContainerId));
mapStaticLoot.StaticWeapons.AddRange(newStaticWeapons);

View File

@ -6,6 +6,6 @@ namespace LootDumpProcessor.Process.Processor.v2.StaticContainersProcessor;
public interface IStaticContainersProcessor
{
(string, MapStaticLoot) CreateStaticWeaponsAndForcedContainers(RootData rawMapDump);
MapStaticLoot CreateStaticWeaponsAndForcedContainers(RootData rawMapDump);
IReadOnlyList<Template> CreateDynamicStaticContainers(RootData rawMapDump);
}

View File

@ -3,15 +3,17 @@ using LootDumpProcessor.Model.Input;
using LootDumpProcessor.Model.Output.StaticContainer;
using LootDumpProcessor.Utils;
using Microsoft.Extensions.Logging;
using LootDumpProcessor;
using LootDumpProcessor.Process.Processor.v2.StaticContainersProcessor;
namespace LootDumpProcessor.Process.Processor.v2.StaticContainersProcessor;
public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger)
: IStaticContainersProcessor
public class StaticContainersProcessor : IStaticContainersProcessor
{
private readonly ILogger<StaticContainersProcessor> _logger = logger ?? throw new ArgumentNullException(nameof(logger));
private readonly ILogger<StaticContainersProcessor> _logger;
public (string, MapStaticLoot) CreateStaticWeaponsAndForcedContainers(RootData rawMapDump)
public StaticContainersProcessor(ILogger<StaticContainersProcessor> logger)
=> _logger = logger ?? throw new ArgumentNullException(nameof(logger));
public MapStaticLoot CreateStaticWeaponsAndForcedContainers(RootData rawMapDump)
{
var locationLoot = rawMapDump.Data.LocationLoot;
var mapId = locationLoot.Id.ToLower();
@ -30,10 +32,11 @@ public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger
continue;
}
var firstItemTpl = lootPosition.Items[0].Tpl;
var firstItemTpl = lootPosition.Items.First().Tpl;
if (!LootDumpProcessorContext.GetStaticWeaponIds().Contains(firstItemTpl))
continue;
if (!LootDumpProcessorContext.GetStaticWeaponIds().Contains(firstItemTpl)) continue;
var copiedLoot = ProcessorUtil.Copy(lootPosition);
staticWeapons.Add(copiedLoot);
_logger.LogDebug("Added static weapon with ID {WeaponId} to Map {MapId}.", copiedLoot.Id, mapId);
@ -50,7 +53,7 @@ public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger
};
_logger.LogInformation("Created static weapons and forced containers for Map {MapId}.", mapId);
return (mapId, mapStaticLoot);
return mapStaticLoot;
}
public IReadOnlyList<Template> CreateDynamicStaticContainers(RootData rawMapDump)
@ -62,14 +65,14 @@ public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger
foreach (var container in dynamicContainers)
{
if (container.Items == null || container.Items.Count == 0)
if (container.Items == null || !container.Items.Any())
{
_logger.LogWarning("Dynamic container with ID {ContainerId} has no items.", container.Id);
continue;
}
var firstItem = container.Items.First();
container.Items = [firstItem];
container.Items = new List<Item> { firstItem };
_logger.LogDebug("Retained only the first item in dynamic container with ID {ContainerId}.", container.Id);
}