0
0
mirror of https://github.com/sp-tarkov/loot-dump-processor.git synced 2025-02-13 06: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 else
{ {
// .Item1 = map name
// .Item2 = force/weapon static arrays
var mapStaticContainers = var mapStaticContainers =
_staticContainersProcessor.CreateStaticWeaponsAndForcedContainers(dataDump); _staticContainersProcessor.CreateStaticWeaponsAndForcedContainers(dataDump);
var newStaticWeapons = mapStaticContainers.Item2.StaticWeapons.Where(x => var newStaticWeapons = mapStaticContainers.StaticWeapons.Where(x =>
!mapStaticLoot.StaticWeapons.Exists(y => y.Id == x.Id)); !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.StaticForced.Exists(y => y.ContainerId == x.ContainerId));
mapStaticLoot.StaticWeapons.AddRange(newStaticWeapons); mapStaticLoot.StaticWeapons.AddRange(newStaticWeapons);

View File

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

View File

@ -3,15 +3,17 @@ using LootDumpProcessor.Model.Input;
using LootDumpProcessor.Model.Output.StaticContainer; using LootDumpProcessor.Model.Output.StaticContainer;
using LootDumpProcessor.Utils; using LootDumpProcessor.Utils;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using LootDumpProcessor;
using LootDumpProcessor.Process.Processor.v2.StaticContainersProcessor;
namespace LootDumpProcessor.Process.Processor.v2.StaticContainersProcessor; public class StaticContainersProcessor : IStaticContainersProcessor
public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger)
: 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 locationLoot = rawMapDump.Data.LocationLoot;
var mapId = locationLoot.Id.ToLower(); var mapId = locationLoot.Id.ToLower();
@ -30,9 +32,10 @@ public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger
continue; 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); var copiedLoot = ProcessorUtil.Copy(lootPosition);
staticWeapons.Add(copiedLoot); staticWeapons.Add(copiedLoot);
@ -50,7 +53,7 @@ public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger
}; };
_logger.LogInformation("Created static weapons and forced containers for Map {MapId}.", mapId); _logger.LogInformation("Created static weapons and forced containers for Map {MapId}.", mapId);
return (mapId, mapStaticLoot); return mapStaticLoot;
} }
public IReadOnlyList<Template> CreateDynamicStaticContainers(RootData rawMapDump) public IReadOnlyList<Template> CreateDynamicStaticContainers(RootData rawMapDump)
@ -62,14 +65,14 @@ public class StaticContainersProcessor(ILogger<StaticContainersProcessor> logger
foreach (var container in dynamicContainers) 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); _logger.LogWarning("Dynamic container with ID {ContainerId} has no items.", container.Id);
continue; continue;
} }
var firstItem = container.Items.First(); 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); _logger.LogDebug("Retained only the first item in dynamic container with ID {ContainerId}.", container.Id);
} }