diff --git a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs
index cb97567c..306cecfc 100644
--- a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs
+++ b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs
@@ -104,7 +104,7 @@ public class LocationLootGenerator(
/// List of container objects
public List GenerateStaticContainers(
string locationId,
- Dictionary> staticAmmoDist
+ Dictionary> staticAmmoDist
)
{
var staticLootItemCount = 0;
@@ -530,7 +530,7 @@ public class LocationLootGenerator(
StaticContainerData staticContainer,
IEnumerable? staticForced,
Dictionary staticLootDist,
- Dictionary> staticAmmoDist,
+ Dictionary> staticAmmoDist,
string locationName
)
{
@@ -761,7 +761,7 @@ public class LocationLootGenerator(
/// Array of spawn points with loot in them
public List GenerateDynamicLoot(
LooseLoot dynamicLootDist,
- Dictionary> staticAmmoDist,
+ Dictionary> staticAmmoDist,
string locationName
)
{
@@ -1024,7 +1024,7 @@ public class LocationLootGenerator(
protected List GetForcedDynamicLoot(
IEnumerable forcedSpawnPoints,
string locationName,
- Dictionary> staticAmmoDist
+ Dictionary> staticAmmoDist
)
{
var result = new List();
@@ -1097,7 +1097,7 @@ public class LocationLootGenerator(
protected ContainerItem CreateDynamicLootItem(
SptLootItem chosenItem,
IEnumerable lootItems,
- Dictionary> staticAmmoDist
+ Dictionary> staticAmmoDist
)
{
var chosenTpl = chosenItem.Template;
@@ -1188,8 +1188,8 @@ public class LocationLootGenerator(
// TODO: rewrite, BIG yikes
protected ContainerItem? CreateStaticLootItem(
- string chosenTpl,
- Dictionary> staticAmmoDist,
+ MongoId chosenTpl,
+ Dictionary> staticAmmoDist,
string? parentId = null
)
{
@@ -1310,7 +1310,7 @@ public class LocationLootGenerator(
/// Root Item
protected Item? CreateWeaponRootAndChildren(
string chosenTpl,
- Dictionary> cartridgePool,
+ Dictionary> cartridgePool,
string? parentId,
ref List- items
)
@@ -1427,7 +1427,7 @@ public class LocationLootGenerator(
}
protected void GenerateStaticMagazineItem(
- Dictionary> staticAmmoDist,
+ Dictionary> staticAmmoDist,
Item? rootItem,
TemplateItem itemTemplate,
List
- items
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs
index 8c3bf174..a1880386 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs
@@ -166,7 +166,7 @@ public class InRaidHelper(
/// Used post-raid to remove items after death.
///
/// Player profile
- /// Session id
+ /// Player/Session id
public void DeleteInventory(PmcData pmcData, MongoId sessionId)
{
// Get inventory item ids to remove from players profile
@@ -179,7 +179,7 @@ public class InRaidHelper(
}
// Remove contents of fast panel
- pmcData.Inventory.FastPanel = new Dictionary();
+ pmcData.Inventory.FastPanel = new();
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs
index 6376d052..2db00564 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs
@@ -1462,7 +1462,7 @@ public class ItemHelper(
public void FillMagazineWithRandomCartridge(
List
- magazine,
TemplateItem magTemplate,
- Dictionary> staticAmmoDist,
+ Dictionary> staticAmmoDist,
string? caliber = null,
double minSizePercent = 0.25,
MongoId? defaultCartridgeTpl = null,
@@ -1629,23 +1629,23 @@ public class ItemHelper(
/// Tpl of cartridge
protected MongoId? DrawAmmoTpl(
string caliber,
- Dictionary> staticAmmoDist,
+ Dictionary> staticAmmoDist,
MongoId? fallbackCartridgeTpl = null,
ICollection? cartridgeWhitelist = null
)
{
var ammos = staticAmmoDist.GetValueOrDefault(caliber, []);
- if (ammos.Count == 0 && fallbackCartridgeTpl is not null)
+ if (!ammos.Any())
{
- logger.Warning(
- $"Unable to pick a cartridge for caliber: {caliber}, staticAmmoDist has no data. using fallback value of {fallbackCartridgeTpl}"
- );
+ if (fallbackCartridgeTpl is not null)
+ {
+ logger.Warning(
+ $"Unable to pick a cartridge for caliber: {caliber}, staticAmmoDist has no data. using fallback value of {fallbackCartridgeTpl}"
+ );
- return fallbackCartridgeTpl;
- }
+ return fallbackCartridgeTpl;
+ }
- if (ammos.Count == 0 && fallbackCartridgeTpl is null)
- {
logger.Warning(
$"Unable to pick a cartridge for caliber: {caliber}, staticAmmoDist has no data. No fallback value provided"
);
diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Location.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Location.cs
index 877d3e1b..3000109e 100644
--- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Location.cs
+++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Location.cs
@@ -34,7 +34,7 @@ public record Location
public LazyLoad? StaticContainers { get; set; }
[JsonPropertyName("staticAmmo")]
- public Dictionary> StaticAmmo { get; set; }
+ public Dictionary> StaticAmmo { get; set; }
///
/// All possible static containers on map + their assign groupings
@@ -130,7 +130,7 @@ public record StaticContainerDetails
public Dictionary? ExtensionData { get; set; }
[JsonPropertyName("staticWeapons")]
- public List StaticWeapons { get; set; }
+ public IEnumerable StaticWeapons { get; set; }
[JsonPropertyName("staticContainers")]
public IEnumerable StaticContainers { get; set; }
diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/LocationBase.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/LocationBase.cs
index 9f1c1dc4..3e8daf81 100644
--- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/LocationBase.cs
+++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/LocationBase.cs
@@ -11,10 +11,10 @@ public record LocationBase
public Dictionary? ExtensionData { get; set; }
[JsonPropertyName("AccessKeys")]
- public List? AccessKeys { get; set; }
+ public IEnumerable? AccessKeys { get; set; }
[JsonPropertyName("AccessKeysPvE")]
- public List? AccessKeysPvE { get; set; }
+ public IEnumerable? AccessKeysPvE { get; set; }
[JsonPropertyName("AirdropParameters")]
public List? AirdropParameters { get; set; }
@@ -197,7 +197,7 @@ public record LocationBase
public bool? Locked { get; set; }
[JsonPropertyName("Loot")]
- public List? Loot { get; set; }
+ public IEnumerable? Loot { get; set; }
[JsonPropertyName("MatchMakerMinPlayersByWaitTime")]
public List? MatchMakerMinPlayersByWaitTime { get; set; }
@@ -281,7 +281,7 @@ public record LocationBase
public bool? NoGroupSpawn { get; set; }
[JsonPropertyName("SpawnPointParams")]
- public List? SpawnPointParams { get; set; }
+ public IEnumerable? SpawnPointParams { get; set; }
[JsonPropertyName("areas")]
public Dictionary? Areas { get; set; }
@@ -337,13 +337,13 @@ public record LocationBase
public bool? OneTimeSpawn { get; set; }
[JsonPropertyName("exits")]
- public List Exits { get; set; }
+ public IEnumerable Exits { get; set; }
[JsonPropertyName("filter_ex")]
- public List? FilterEx { get; set; }
+ public IEnumerable? FilterEx { get; set; }
[JsonPropertyName("limits")]
- public List? Limits { get; set; }
+ public IEnumerable? Limits { get; set; }
[JsonPropertyName("matching_min_seconds")]
public int? MatchingMinSeconds { get; set; }
@@ -352,7 +352,7 @@ public record LocationBase
public bool? GenerateLocalLootCache { get; set; }
[JsonPropertyName("maxItemCountInLocation")]
- public List? MaxItemCountInLocation { get; set; }
+ public IEnumerable? MaxItemCountInLocation { get; set; }
[JsonPropertyName("sav_summon_seconds")]
public int? SavSummonSeconds { get; set; }
@@ -361,7 +361,7 @@ public record LocationBase
public int? TmpLocationFieldRemoveMe { get; set; }
[JsonPropertyName("transits")]
- public List? Transits { get; set; }
+ public IEnumerable? Transits { get; set; }
[JsonPropertyName("users_gather_seconds")]
public int? UsersGatherSeconds { get; set; }
@@ -453,7 +453,7 @@ public record NonWaveGroupScenario
public record Limit : MinMax
{
[JsonPropertyName("items")]
- public List? Items { get; set; }
+ public IEnumerable? Items { get; set; }
}
public record AirdropParameter
@@ -586,13 +586,13 @@ public record BossLocationSpawn
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[JsonPropertyName("Supports")]
- public List Supports { get; set; }
+ public IEnumerable Supports { get; set; }
[JsonPropertyName("sptId")]
public string? SptId { get; set; }
[JsonPropertyName("SpawnMode")]
- public List SpawnMode { get; set; }
+ public IEnumerable SpawnMode { get; set; }
}
public record BossSupport
@@ -619,7 +619,7 @@ public record BotLocationModifier
public double? AccuracySpeed { get; set; }
[JsonPropertyName("AdditionalHostilitySettings")]
- public List AdditionalHostilitySettings { get; set; }
+ public IEnumerable AdditionalHostilitySettings { get; set; }
[JsonPropertyName("DistToActivate")]
public double? DistanceToActivate { get; set; }
@@ -703,10 +703,10 @@ public record AdditionalHostilitySettings
public Dictionary? ExtensionData { get; set; }
[JsonPropertyName("AlwaysEnemies")]
- public List? AlwaysEnemies { get; set; }
+ public HashSet? AlwaysEnemies { get; set; }
[JsonPropertyName("AlwaysFriends")]
- public List? AlwaysFriends { get; set; }
+ public HashSet? AlwaysFriends { get; set; }
[JsonPropertyName("BearEnemyChance")]
public double? BearEnemyChance { get; set; }
@@ -721,7 +721,7 @@ public record AdditionalHostilitySettings
public List? ChancedEnemies { get; set; }
[JsonPropertyName("Neutral")]
- public List? Neutral { get; set; }
+ public HashSet? Neutral { get; set; }
[JsonPropertyName("SavagePlayerBehaviour")]
public string? SavagePlayerBehaviour { get; set; }
@@ -736,7 +736,7 @@ public record AdditionalHostilitySettings
public string? UsecPlayerBehaviour { get; set; }
[JsonPropertyName("Warn")]
- public List? Warn { get; set; }
+ public IEnumerable? Warn { get; set; }
}
public record ChancedEnemy
@@ -802,7 +802,7 @@ public record SpawnPointParam
public string? BotZoneName { get; set; }
[JsonPropertyName("Categories")]
- public List? Categories { get; set; }
+ public IEnumerable? Categories { get; set; }
[JsonPropertyName("ColliderParams")]
public ColliderParams? ColliderParams { get; set; }
@@ -826,7 +826,7 @@ public record SpawnPointParam
public double? Rotation { get; set; }
[JsonPropertyName("Sides")]
- public List? Sides { get; set; }
+ public IEnumerable? Sides { get; set; }
}
public record ColliderParams
@@ -1022,7 +1022,7 @@ public record Wave
/// 'pve' and/or 'regular'
///
[JsonPropertyName("SpawnMode")]
- public List? SpawnMode { get; set; }
+ public HashSet? SpawnMode { get; set; }
[JsonPropertyName("OpenZones")]
public string? OpenZones { get; set; }
@@ -1056,7 +1056,7 @@ public record Halloween2024
public double? CrowdAttackBlockRadius { get; set; }
[JsonPropertyName("CrowdAttackSpawnParams")]
- public List? CrowdAttackSpawnParams { get; set; }
+ public IEnumerable? CrowdAttackSpawnParams { get; set; }
[JsonPropertyName("CrowdCooldownPerPlayerSec")]
public double? CrowdCooldownPerPlayerSec { get; set; }
@@ -1130,7 +1130,7 @@ public record Area
public XYZ? Position { get; set; }
[JsonPropertyName("sides")]
- public List? Sides { get; set; }
+ public HashSet? Sides { get; set; }
[JsonPropertyName("size")]
public XYZ? Size { get; set; }
diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/ItemEvent/ItemEventRouterBase.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/ItemEvent/ItemEventRouterBase.cs
index 32f78b92..22f87b0b 100644
--- a/Libraries/SPTarkov.Server.Core/Models/Eft/ItemEvent/ItemEventRouterBase.cs
+++ b/Libraries/SPTarkov.Server.Core/Models/Eft/ItemEvent/ItemEventRouterBase.cs
@@ -178,7 +178,7 @@ public record DeletedItem
public Dictionary? ExtensionData { get; set; }
[JsonPropertyName("_id")]
- public string Id { get; set; }
+ public MongoId Id { get; set; }
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs
index cd4f3296..44fc663a 100644
--- a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs
@@ -167,15 +167,13 @@ public class LocationLifecycleService(
}
// Find only scav extracts and overwrite existing exits with them
- var scavExtracts = mapExtracts
- .Where(extract =>
- string.Equals(extract.Side, "scav", StringComparison.OrdinalIgnoreCase)
- )
- .ToList();
- if (scavExtracts.Count > 0)
+ var scavExtracts = mapExtracts.Where(extract =>
+ string.Equals(extract.Side, "scav", StringComparison.OrdinalIgnoreCase)
+ );
+ if (scavExtracts.Any())
// Scav extracts found, use them
{
- locationData.Exits.AddRange(scavExtracts);
+ locationData.Exits = locationData.Exits.Union(scavExtracts);
}
}