From 3817d6cca44944e4e1d38e553a6754d9e59ff99e Mon Sep 17 00:00:00 2001
From: Cj <161484149+CJ-SPT@users.noreply.github.com>
Date: Sun, 6 Jul 2025 12:31:59 -0400
Subject: [PATCH] Helpers Mongoid conversion + cleanup (#458)
* Start converting helper method ids to mongoids and remove underscore from injections...
* Finish helper mongoIds
---
.../Controllers/RagfairController.cs | 4 +-
.../Helpers/AssortHelper.cs | 19 +-
.../Helpers/BotDifficultyHelper.cs | 45 ++--
.../Helpers/BotGeneratorHelper.cs | 80 +++----
.../SPTarkov.Server.Core/Helpers/BotHelper.cs | 32 +--
.../Helpers/BotWeaponGeneratorHelper.cs | 28 +--
.../Helpers/CertificateHelper.cs | 22 +-
.../Helpers/CounterTrackerHelper.cs | 67 +++---
.../Helpers/DialogueHelper.cs | 6 +-
.../Helpers/HandbookHelper.cs | 44 ++--
.../Helpers/HealthHelper.cs | 19 +-
.../Helpers/HideoutHelper.cs | 178 +++++++--------
.../Helpers/InRaidHelper.cs | 28 +--
.../Helpers/InventoryHelper.cs | 187 ++++++++-------
.../Helpers/ItemHelper.cs | 14 +-
.../Helpers/NotificationSendHelper.cs | 42 ++--
.../Helpers/PresetHelper.cs | 46 ++--
.../Helpers/PrestigeHelper.cs | 61 ++---
.../Helpers/ProfileHelper.cs | 86 ++++---
.../Helpers/QuestHelper.cs | 216 +++++++++---------
.../Helpers/QuestRewardHelper.cs | 43 ++--
.../Helpers/RagfairHelper.cs | 29 ++-
.../Helpers/RagfairOfferHelper.cs | 158 ++++++-------
.../Helpers/RagfairSellHelper.cs | 40 ++--
.../Helpers/RagfairServerHelper.cs | 6 +-
.../Helpers/RagfairSortHelper.cs | 4 +-
.../Helpers/RepairHelper.cs | 30 +--
.../Helpers/RepeatableQuestHelper.cs | 7 +-
.../Helpers/RewardHelper.cs | 100 ++++----
.../Helpers/TradeHelper.cs | 98 ++++----
.../Helpers/TraderAssortHelper.cs | 59 ++---
.../Helpers/TraderHelper.cs | 137 +++++------
.../Helpers/WeatherHelper.cs | 16 +-
.../Helpers/WeightedRandomHelper.cs | 16 +-
.../Models/Eft/Common/Tables/Achievement.cs | 3 +-
.../Models/Eft/Common/Tables/Quest.cs | 2 +-
.../Models/Eft/Ragfair/SearchRequestData.cs | 3 +-
37 files changed, 981 insertions(+), 994 deletions(-)
diff --git a/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs b/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs
index ecba236a..d0723103 100644
--- a/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs
+++ b/Libraries/SPTarkov.Server.Core/Controllers/RagfairController.cs
@@ -392,8 +392,8 @@ public class RagfairController
/// Array of offers
protected List GetOffersForSearchType(
SearchRequestData searchRequest,
- List itemsToAdd,
- Dictionary traderAssorts,
+ List itemsToAdd,
+ Dictionary traderAssorts,
PmcData pmcProfile
)
{
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs
index 07920999..5ca8c838 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/AssortHelper.cs
@@ -1,5 +1,6 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Enums;
@@ -10,22 +11,22 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class AssortHelper(
- ISptLogger _logger,
- ServerLocalisationService _serverLocalisationService
+ ISptLogger logger,
+ ServerLocalisationService serverLocalisationService
)
{
///
/// Remove assorts from a trader that have not been unlocked yet (via player completing corresponding quest)
///
///
- /// Traders id the assort belongs to
+ /// Traders id assort belongs to
/// All assort items from same trader
/// Dict of quest assort to quest id unlocks for all traders (key = started/failed/complete)
/// Is the trader assort being modified the flea market
/// items minus locked quest assorts
public TraderAssort StripLockedQuestAssort(
PmcData pmcProfile,
- string traderId,
+ MongoId traderId,
TraderAssort traderAssorts,
Dictionary> mergedQuestAssorts,
bool isFlea = false
@@ -36,8 +37,8 @@ public class AssortHelper(
// Trader assort does not always contain loyal_level_items
if (traderAssorts.LoyalLevelItems is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId)
+ logger.Warning(
+ serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId)
);
return traderAssorts;
@@ -116,7 +117,7 @@ public class AssortHelper(
/// Trader assorts minus locked loyalty assorts
public TraderAssort StripLockedLoyaltyAssort(
PmcData pmcProfile,
- string traderId,
+ MongoId traderId,
TraderAssort assort
)
{
@@ -125,8 +126,8 @@ public class AssortHelper(
// Trader assort does not always contain loyal_level_items
if (assort.LoyalLevelItems is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId)
+ logger.Warning(
+ serverLocalisationService.GetText("assort-missing_loyalty_level_object", traderId)
);
return strippedAssort;
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs
index 3d8aca50..0c9a704a 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/BotDifficultyHelper.cs
@@ -12,16 +12,16 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class BotDifficultyHelper(
- ISptLogger _logger,
- DatabaseService _databaseService,
- RandomUtil _randomUtil,
- ServerLocalisationService _serverLocalisationService,
- BotHelper _botHelper,
- ConfigServer _configServer,
- ICloner _cloner
+ ISptLogger logger,
+ DatabaseService databaseService,
+ RandomUtil randomUtil,
+ ServerLocalisationService serverLocalisationService,
+ BotHelper botHelper,
+ ConfigServer configServer,
+ ICloner cloner
)
{
- protected readonly PmcConfig _pmcConfig = _configServer.GetConfig();
+ protected readonly PmcConfig _pmcConfig = configServer.GetConfig();
///
/// Get difficulty settings for desired bot type, if not found use assault bot types
@@ -36,39 +36,36 @@ public class BotDifficultyHelper(
Bots botDb
)
{
- var desiredType = _botHelper.IsBotPmc(type)
- ? _botHelper.GetPmcSideByRole(type).ToLowerInvariant()
+ var desiredType = botHelper.IsBotPmc(type)
+ ? botHelper.GetPmcSideByRole(type).ToLowerInvariant()
: type.ToLowerInvariant();
if (!botDb.Types.ContainsKey(desiredType))
{
// No bot found, get fallback difficulty values
- _logger.Warning(
- _serverLocalisationService.GetText(
- "bot-unable_to_get_bot_fallback_to_assault",
- type
- )
+ logger.Warning(
+ serverLocalisationService.GetText("bot-unable_to_get_bot_fallback_to_assault", type)
);
- botDb.Types[desiredType] = _cloner.Clone(botDb.Types["assault"]);
+ botDb.Types[desiredType] = cloner.Clone(botDb.Types["assault"]);
}
// Get settings from raw bot json template file
- var botTemplate = _botHelper.GetBotTemplate(desiredType);
+ var botTemplate = botHelper.GetBotTemplate(desiredType);
botTemplate.BotDifficulty.TryGetValue(desiredDifficulty, out var difficultySettings);
if (difficultySettings is null)
{
// No bot settings found, use 'assault' bot difficulty instead
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"bot-unable_to_get_bot_difficulty_fallback_to_assault",
new { botType = desiredType, difficulty = desiredDifficulty }
)
);
- botDb.Types[desiredType].BotDifficulty[desiredDifficulty] = _cloner.Clone(
+ botDb.Types[desiredType].BotDifficulty[desiredDifficulty] = cloner.Clone(
botDb.Types["assault"].BotDifficulty[desiredDifficulty]
);
}
- return _cloner.Clone(difficultySettings);
+ return cloner.Clone(difficultySettings);
}
///
@@ -89,9 +86,7 @@ public class BotDifficultyHelper(
difficultySetting = ConvertBotDifficultyDropdownToBotDifficulty(difficultySetting);
- return _cloner.Clone(
- _databaseService.GetBots().Types[type].BotDifficulty[difficultySetting]
- );
+ return cloner.Clone(databaseService.GetBots().Types[type].BotDifficulty[difficultySetting]);
}
///
@@ -118,6 +113,6 @@ public class BotDifficultyHelper(
/// random difficulty
public string ChooseRandomDifficulty()
{
- return _randomUtil.GetArrayValue(["easy", "normal", "hard", "impossible"]);
+ return randomUtil.GetArrayValue(["easy", "normal", "hard", "impossible"]);
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs
index d3b06214..d3c7a0b2 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/BotGeneratorHelper.cs
@@ -17,14 +17,14 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class BotGeneratorHelper(
- ISptLogger _logger,
- RandomUtil _randomUtil,
- DurabilityLimitsHelper _durabilityLimitsHelper,
- ItemHelper _itemHelper,
- InventoryHelper _inventoryHelper,
- ProfileActivityService _profileActivityService,
- ServerLocalisationService _serverLocalisationService,
- ConfigServer _configServer
+ ISptLogger logger,
+ RandomUtil randomUtil,
+ DurabilityLimitsHelper durabilityLimitsHelper,
+ ItemHelper itemHelper,
+ InventoryHelper inventoryHelper,
+ ProfileActivityService profileActivityService,
+ ServerLocalisationService serverLocalisationService,
+ ConfigServer configServer
)
{
// Equipment slot ids that do not conflict with other slots
@@ -43,7 +43,7 @@ public class BotGeneratorHelper(
Sides.PmcUsec.ToLowerInvariant(),
];
- private readonly BotConfig _botConfig = _configServer.GetConfig();
+ private readonly BotConfig _botConfig = configServer.GetConfig();
///
/// Adds properties to an item
@@ -55,7 +55,7 @@ public class BotGeneratorHelper(
public Upd GenerateExtraPropertiesForItem(TemplateItem? itemTemplate, string? botRole = null)
{
// Get raid settings, if no raid, default to day
- var raidSettings = _profileActivityService
+ var raidSettings = profileActivityService
.GetFirstProfileActivityRaidData()
?.RaidConfiguration;
@@ -114,7 +114,7 @@ public class BotGeneratorHelper(
? new UpdFireMode { FireMode = "fullauto" }
: new UpdFireMode
{
- FireMode = _randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType),
+ FireMode = randomUtil.GetArrayValue(itemTemplate.Properties.WeapFireType),
};
hasProperties = true;
}
@@ -163,7 +163,7 @@ public class BotGeneratorHelper(
);
itemProperties.Light = new UpdLight
{
- IsActive = _randomUtil.GetChance100(lightLaserActiveChance),
+ IsActive = randomUtil.GetChance100(lightLaserActiveChance),
SelectedMode = 0,
};
hasProperties = true;
@@ -178,7 +178,7 @@ public class BotGeneratorHelper(
);
itemProperties.Light = new UpdLight
{
- IsActive = _randomUtil.GetChance100(lightLaserActiveChance),
+ IsActive = randomUtil.GetChance100(lightLaserActiveChance),
SelectedMode = 0,
};
hasProperties = true;
@@ -193,7 +193,7 @@ public class BotGeneratorHelper(
: GetBotEquipmentSettingFromConfig(botRole, "nvgIsActiveChanceDayPercent", 15);
itemProperties.Togglable = new UpdTogglable
{
- On = _randomUtil.GetChance100(nvgActiveChance),
+ On = randomUtil.GetChance100(nvgActiveChance),
};
hasProperties = true;
}
@@ -211,7 +211,7 @@ public class BotGeneratorHelper(
);
itemProperties.Togglable = new UpdTogglable
{
- On = _randomUtil.GetChance100(faceShieldActiveChance),
+ On = randomUtil.GetChance100(faceShieldActiveChance),
};
hasProperties = true;
}
@@ -236,13 +236,13 @@ public class BotGeneratorHelper(
return maxResource;
}
- if (_randomUtil.GetChance100(randomizationValues.ChanceMaxResourcePercent))
+ if (randomUtil.GetChance100(randomizationValues.ChanceMaxResourcePercent))
{
return maxResource;
}
- return _randomUtil.GetDouble(
- _randomUtil.GetPercentOfValue(randomizationValues.ResourcePercent, maxResource, 0),
+ return randomUtil.GetDouble(
+ randomUtil.GetPercentOfValue(randomizationValues.ResourcePercent, maxResource, 0),
maxResource
);
}
@@ -268,8 +268,8 @@ public class BotGeneratorHelper(
var botEquipmentSettings = _botConfig.Equipment[GetBotEquipmentRole(botRole)];
if (botEquipmentSettings is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"bot-missing_equipment_settings",
new
{
@@ -296,8 +296,8 @@ public class BotGeneratorHelper(
return propValue;
}
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"bot-missing_equipment_settings_property",
new
{
@@ -322,11 +322,11 @@ public class BotGeneratorHelper(
string? botRole = null
)
{
- var maxDurability = _durabilityLimitsHelper.GetRandomizedMaxWeaponDurability(
+ var maxDurability = durabilityLimitsHelper.GetRandomizedMaxWeaponDurability(
itemTemplate,
botRole
);
- var currentDurability = _durabilityLimitsHelper.GetRandomizedWeaponDurability(
+ var currentDurability = durabilityLimitsHelper.GetRandomizedWeaponDurability(
itemTemplate,
botRole,
maxDurability
@@ -359,11 +359,11 @@ public class BotGeneratorHelper(
}
else
{
- maxDurability = _durabilityLimitsHelper.GetRandomizedMaxArmorDurability(
+ maxDurability = durabilityLimitsHelper.GetRandomizedMaxArmorDurability(
itemTemplate,
botRole
);
- currentDurability = _durabilityLimitsHelper.GetRandomizedArmorDurability(
+ currentDurability = durabilityLimitsHelper.GetRandomizedArmorDurability(
itemTemplate,
botRole,
maxDurability
@@ -403,14 +403,14 @@ public class BotGeneratorHelper(
// TODO: Can probably be optimized to cache itemTemplates as items are added to inventory
var equippedItemsDb = itemsEquipped
- .Select(equippedItem => _itemHelper.GetItem(equippedItem.Template).Value)
+ .Select(equippedItem => itemHelper.GetItem(equippedItem.Template).Value)
.ToList();
- var (itemIsValid, itemToEquip) = _itemHelper.GetItem(tplToCheck);
+ var (itemIsValid, itemToEquip) = itemHelper.GetItem(tplToCheck);
if (!itemIsValid)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"bot-invalid_item_compatibility_check",
new { itemTpl = tplToCheck, slot = equipmentSlot }
)
@@ -426,8 +426,8 @@ public class BotGeneratorHelper(
if (itemToEquip?.Properties is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"bot-compatibility_check_missing_props",
new
{
@@ -633,9 +633,9 @@ public class BotGeneratorHelper(
if (missingContainerCount == equipmentSlots.Count)
{
// Bot doesn't have any containers we want to add item to
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Unable to add item: {itemWithChildren.FirstOrDefault()?.Template} to bot as it lacks the following containers: {string.Join(",", equipmentSlots)}"
);
}
@@ -648,11 +648,11 @@ public class BotGeneratorHelper(
}
// Get container details from db
- var (key, value) = _itemHelper.GetItem(container.Template);
+ var (key, value) = itemHelper.GetItem(container.Template);
if (!key)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"bot-missing_container_with_tpl",
container.Template
)
@@ -669,7 +669,7 @@ public class BotGeneratorHelper(
}
// Get x/y grid size of item
- var (itemWidth, itemHeight) = _inventoryHelper.GetItemSize(
+ var (itemWidth, itemHeight) = inventoryHelper.GetItemSize(
rootItemTplId,
rootItemId,
itemWithChildren
@@ -714,7 +714,7 @@ public class BotGeneratorHelper(
if (slotGrid.Props is not null)
{
// Get rid of an items free/used spots in current grid
- var slotGridMap = _inventoryHelper.GetContainerMap(
+ var slotGridMap = inventoryHelper.GetContainerMap(
slotGrid.Props.CellsH.GetValueOrDefault(),
slotGrid.Props.CellsV.GetValueOrDefault(),
containerItemsWithChildren,
@@ -830,7 +830,7 @@ public class BotGeneratorHelper(
}
// Check if item base type is excluded
- var itemDetails = _itemHelper.GetItem(itemTpl).Value;
+ var itemDetails = itemHelper.GetItem(itemTpl).Value;
// if item to add is found in exclude filter, not allowed
if (excludedFilter.Contains(itemDetails?.Parent ?? string.Empty))
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs
index 5bcf545f..79b9adcb 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/BotHelper.cs
@@ -14,10 +14,10 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class BotHelper(
- ISptLogger _logger,
- DatabaseService _databaseService,
- RandomUtil _randomUtil,
- ConfigServer _configServer
+ ISptLogger logger,
+ DatabaseService databaseService,
+ RandomUtil randomUtil,
+ ConfigServer configServer
)
{
private static readonly FrozenSet _pmcTypeIds =
@@ -28,8 +28,8 @@ public class BotHelper(
Sides.PmcUsec.ToLowerInvariant(),
];
- private readonly BotConfig _botConfig = _configServer.GetConfig();
- private readonly PmcConfig _pmcConfig = _configServer.GetConfig();
+ private readonly BotConfig _botConfig = configServer.GetConfig();
+ private readonly PmcConfig _pmcConfig = configServer.GetConfig();
private readonly ConcurrentDictionary> _pmcNameCache = new();
///
@@ -39,9 +39,9 @@ public class BotHelper(
/// BotType object
public BotType? GetBotTemplate(string role)
{
- if (!_databaseService.GetBots().Types.TryGetValue(role?.ToLowerInvariant(), out var bot))
+ if (!databaseService.GetBots().Types.TryGetValue(role?.ToLowerInvariant(), out var bot))
{
- _logger.Error($"Unable to get bot of type: {role} from DB");
+ logger.Error($"Unable to get bot of type: {role} from DB");
return null;
}
@@ -203,7 +203,7 @@ public class BotHelper(
/// pmc side as string
protected string GetRandomizedPmcSide()
{
- return _randomUtil.GetChance100(_pmcConfig.IsUsec) ? Sides.Usec : Sides.Bear;
+ return randomUtil.GetChance100(_pmcConfig.IsUsec) ? Sides.Usec : Sides.Bear;
}
///
@@ -215,20 +215,20 @@ public class BotHelper(
public string GetPmcNicknameOfMaxLength(int maxLength, string? side = null)
{
var chosenFaction = (
- side ?? (_randomUtil.GetInt(0, 1) == 0 ? Sides.Usec : Sides.Bear)
+ side ?? (randomUtil.GetInt(0, 1) == 0 ? Sides.Usec : Sides.Bear)
).ToLowerInvariant();
var cacheKey = $"{chosenFaction}{maxLength}";
if (!_pmcNameCache.TryGetValue(cacheKey, out var eligibleNames))
{
if (
- !_databaseService
+ !databaseService
.GetBots()
.Types.TryGetValue(chosenFaction, out var chosenFactionDetails)
)
{
- _logger.Error($"Unknown faction: {chosenFaction} Defaulting to: {Sides.Usec}");
+ logger.Error($"Unknown faction: {chosenFaction} Defaulting to: {Sides.Usec}");
chosenFaction = Sides.Usec.ToLowerInvariant();
- chosenFactionDetails = _databaseService.GetBots().Types[chosenFaction];
+ chosenFactionDetails = databaseService.GetBots().Types[chosenFaction];
}
var matchingNames = chosenFactionDetails
@@ -236,12 +236,12 @@ public class BotHelper(
.ToList();
if (!matchingNames.Any())
{
- _logger.Warning(
+ logger.Warning(
$"Unable to filter: {chosenFaction} PMC names to only those under: {maxLength}, none found that match that criteria, selecting from entire name pool instead"
);
// Return a random string from names
- return _randomUtil.GetCollectionValue(chosenFactionDetails.FirstNames);
+ return randomUtil.GetCollectionValue(chosenFactionDetails.FirstNames);
}
_pmcNameCache.TryAdd(cacheKey, matchingNames);
@@ -249,6 +249,6 @@ public class BotHelper(
eligibleNames = matchingNames;
}
- return _randomUtil.GetCollectionValue(eligibleNames);
+ return randomUtil.GetCollectionValue(eligibleNames);
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs
index 0a74bb08..f1a23073 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/BotWeaponGeneratorHelper.cs
@@ -9,10 +9,10 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class BotWeaponGeneratorHelper(
- ISptLogger _logger,
- ItemHelper _itemHelper,
- WeightedRandomHelper _weightedRandomHelper,
- BotGeneratorHelper _botGeneratorHelper
+ ISptLogger logger,
+ ItemHelper itemHelper,
+ WeightedRandomHelper weightedRandomHelper,
+ BotGeneratorHelper botGeneratorHelper
)
{
private static readonly FrozenSet _magCheck =
@@ -30,7 +30,7 @@ public class BotWeaponGeneratorHelper(
public double? GetRandomizedBulletCount(GenerationData magCounts, TemplateItem magTemplate)
{
var randomizedMagazineCount = GetRandomizedMagazineCount(magCounts);
- var parentItem = _itemHelper.GetItem(magTemplate.Parent).Value;
+ var parentItem = itemHelper.GetItem(magTemplate.Parent).Value;
double? chamberBulletCount = 0;
if (MagazineIsCylinderRelated(parentItem.Name))
{
@@ -40,7 +40,7 @@ public class BotWeaponGeneratorHelper(
?.Props.Filters[0]
.Filter.FirstOrDefault() ?? new MongoId(null);
var ammoMaxStackSize =
- _itemHelper.GetItem(firstSlotAmmoTpl).Value?.Properties?.StackMaxSize ?? 1;
+ itemHelper.GetItem(firstSlotAmmoTpl).Value?.Properties?.StackMaxSize ?? 1;
chamberBulletCount =
ammoMaxStackSize == 1
? 1 // Rotating grenade launcher
@@ -68,7 +68,7 @@ public class BotWeaponGeneratorHelper(
/// Numerical value of magazine count
public int GetRandomizedMagazineCount(GenerationData magCounts)
{
- return (int)_weightedRandomHelper.GetWeightedValue(magCounts.Weights);
+ return (int)weightedRandomHelper.GetWeightedValue(magCounts.Weights);
}
///
@@ -89,14 +89,14 @@ public class BotWeaponGeneratorHelper(
/// Template object of magazine
/// Item array
public List- CreateMagazineWithAmmo(
- string magazineTpl,
- string ammoTpl,
+ MongoId magazineTpl,
+ MongoId ammoTpl,
TemplateItem magTemplate
)
{
List
- magazine = [new() { Id = new MongoId(), Template = magazineTpl }];
- _itemHelper.FillMagazineWithCartridge(magazine, magTemplate, ammoTpl, 1);
+ itemHelper.FillMagazineWithCartridge(magazine, magTemplate, ammoTpl, 1);
return magazine;
}
@@ -109,7 +109,7 @@ public class BotWeaponGeneratorHelper(
/// Bot inventory to add cartridges to
/// What equipment slots should bullets be added into
public void AddAmmoIntoEquipmentSlots(
- string ammoTpl,
+ MongoId ammoTpl,
int cartridgeCount,
BotBaseInventory inventory,
HashSet? equipmentSlotsToAddTo = null
@@ -120,7 +120,7 @@ public class BotWeaponGeneratorHelper(
equipmentSlotsToAddTo = [EquipmentSlots.TacticalVest, EquipmentSlots.Pockets];
}
- var ammoItems = _itemHelper.SplitStack(
+ var ammoItems = itemHelper.SplitStack(
new Item
{
Id = new MongoId(),
@@ -131,7 +131,7 @@ public class BotWeaponGeneratorHelper(
foreach (var ammoItem in ammoItems)
{
- var result = _botGeneratorHelper.AddItemWithChildrenToEquipmentSlot(
+ var result = botGeneratorHelper.AddItemWithChildrenToEquipmentSlot(
equipmentSlotsToAddTo,
ammoItem.Id,
ammoItem.Template,
@@ -141,7 +141,7 @@ public class BotWeaponGeneratorHelper(
if (result != ItemAddedResult.SUCCESS)
{
- _logger.Debug(
+ logger.Debug(
$"Unable to add ammo: {ammoItem.Template} to bot inventory, {result.ToString()}"
);
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs
index 69d274f5..d2c9a724 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/CertificateHelper.cs
@@ -8,7 +8,7 @@ using SPTarkov.Server.Core.Utils;
namespace SPTarkov.Server.Core.Helpers;
[Injectable]
-public class CertificateHelper(ISptLogger _logger, FileUtil _fileUtil)
+public class CertificateHelper(ISptLogger logger, FileUtil fileUtil)
{
private const string certificatePath = "./user/certs/server.crt";
private const string certificateKeyPath = "./user/certs/server.key";
@@ -41,7 +41,7 @@ public class CertificateHelper(ISptLogger _logger, FileUtil _
throw new Exception("Certificate could not be loaded for the second time.");
}
- _logger.Success($"Generated and stored self-signed certificate ({certificatePath})");
+ logger.Success($"Generated and stored self-signed certificate ({certificatePath})");
}
return certificate;
@@ -57,12 +57,12 @@ public class CertificateHelper(ISptLogger _logger, FileUtil _
if (TryLoadCertificatePfx(out var cert))
{
- _logger.Success($"Loaded self-signed certificate ({certificatePath})");
+ logger.Success($"Loaded self-signed certificate ({certificatePath})");
return cert;
}
// shit went wrong, throw a wobbly and close app
- _logger.Critical("Certificate pfx could not be loaded. Stopping server...");
+ logger.Critical("Certificate pfx could not be loaded. Stopping server...");
Environment.Exit(1);
return null;
}
@@ -91,7 +91,7 @@ public class CertificateHelper(ISptLogger _logger, FileUtil _
// file doesnt exist so create straight away
cert = GenerateSelfSignedCertificate("localhost");
SaveCertificatePfx(cert);
- _logger.Success($"Generated and stored self-signed certificate ({certificatePath})");
+ logger.Success($"Generated and stored self-signed certificate ({certificatePath})");
}
try
@@ -182,11 +182,11 @@ public class CertificateHelper(ISptLogger _logger, FileUtil _
Base64FormattingOptions.InsertLineBreaks
)
+ "\n-----END CERTIFICATE-----";
- _fileUtil.WriteFile(certificatePath, certPem);
+ fileUtil.WriteFile(certificatePath, certPem);
}
catch (Exception ex)
{
- _logger.Error($"Error saving certificate: {ex.Message}");
+ logger.Error($"Error saving certificate: {ex.Message}");
}
}
@@ -198,11 +198,11 @@ public class CertificateHelper(ISptLogger _logger, FileUtil _
{
try
{
- _fileUtil.WriteFile(certificatePfxPath, certificate.Export(X509ContentType.Pfx));
+ fileUtil.WriteFile(certificatePfxPath, certificate.Export(X509ContentType.Pfx));
}
catch (Exception ex)
{
- _logger.Error($"Error saving certificate: {ex.Message}");
+ logger.Error($"Error saving certificate: {ex.Message}");
}
}
@@ -218,11 +218,11 @@ public class CertificateHelper(ISptLogger _logger, FileUtil _
+ Convert.ToBase64String(privateKeyBytes, Base64FormattingOptions.InsertLineBreaks)
+ "\n-----END PRIVATE KEY-----";
- _fileUtil.WriteFile(certificateKeyPath, privateKeyString);
+ fileUtil.WriteFile(certificateKeyPath, privateKeyString);
}
catch (Exception ex)
{
- _logger.Error($"Error saving certificate key: {ex.Message}");
+ logger.Error($"Error saving certificate key: {ex.Message}");
}
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/CounterTrackerHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/CounterTrackerHelper.cs
index 470cc767..4bc07b08 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/CounterTrackerHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/CounterTrackerHelper.cs
@@ -1,47 +1,46 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Models.Common;
-namespace SPTarkov.Server.Core.Helpers
+namespace SPTarkov.Server.Core.Helpers;
+
+[Injectable]
+public class CounterTrackerHelper
{
- [Injectable]
- public class CounterTrackerHelper
+ private Dictionary _maxCounts = new();
+ private readonly Dictionary _trackedCounts = new();
+
+ ///
+ /// Add dictionary of keys and their matching limits to track
+ ///
+ /// Values to store
+ public void AddDataToTrack(Dictionary maxCounts)
{
- private Dictionary _maxCounts = new();
- private readonly Dictionary _trackedCounts = new();
+ _maxCounts = maxCounts;
+ }
- ///
- /// Add dictionary of keys and their matching limits to track
- ///
- /// Values to store
- public void AddDataToTrack(Dictionary maxCounts)
+ ///
+ /// Increment the counter for passed in key, get back value determining if max value passed
+ ///
+ ///
+ ///
+ /// True = above max count
+ public bool IncrementCount(MongoId key, int countToIncrementBy = 1)
+ {
+ // Not tracked, skip
+ if (!_maxCounts.Any() || !_maxCounts.ContainsKey(key))
{
- _maxCounts = maxCounts;
+ return false;
}
- ///
- /// Increment the counter for passed in key, get back value determining if max value passed
- ///
- ///
- ///
- /// True = above max count
- public bool IncrementCount(MongoId key, int countToIncrementBy = 1)
- {
- // Not tracked, skip
- if (!_maxCounts.Any() || !_maxCounts.ContainsKey(key))
- {
- return false;
- }
+ _trackedCounts.TryAdd(key, 0);
+ _trackedCounts[key] += countToIncrementBy;
- _trackedCounts.TryAdd(key, 0);
- _trackedCounts[key] += countToIncrementBy;
+ return _trackedCounts[key] > _maxCounts[key];
+ }
- return _trackedCounts[key] > _maxCounts[key];
- }
-
- public void Clear()
- {
- _trackedCounts.Clear();
- _maxCounts.Clear();
- }
+ public void Clear()
+ {
+ _trackedCounts.Clear();
+ _maxCounts.Clear();
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs
index b584130c..11fe02cb 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/DialogueHelper.cs
@@ -47,7 +47,7 @@ public class DialogueHelper(ISptLogger logger, ProfileHelper pro
/// Session/player id
/// Item being moved to inventory
/// Collection of items from message
- public List
- GetMessageItemContents(string messageID, string sessionID, MongoId itemId)
+ public List
- GetMessageItemContents(string messageID, MongoId sessionID, MongoId itemId)
{
var fullProfile = profileHelper.GetFullProfile(sessionID);
var dialogueData = fullProfile.DialogueRecords;
@@ -95,7 +95,7 @@ public class DialogueHelper(ISptLogger logger, ProfileHelper pro
///
/// Session/player id
/// Dialog dictionary
- public Dictionary GetDialogsForProfile(string sessionId)
+ public Dictionary GetDialogsForProfile(MongoId sessionId)
{
var profile = profileHelper.GetFullProfile(sessionId);
return profile.DialogueRecords
@@ -108,7 +108,7 @@ public class DialogueHelper(ISptLogger logger, ProfileHelper pro
/// Profile to look in
/// Dialog to return
/// Dialogue
- public Models.Eft.Profile.Dialogue? GetDialogueFromProfile(string profileId, string dialogueId)
+ public Models.Eft.Profile.Dialogue? GetDialogueFromProfile(MongoId profileId, string dialogueId)
{
var dialogues = GetDialogsForProfile(profileId);
if (dialogues.TryGetValue(dialogueId, out var dialogue))
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs
index 224a27f7..8e997beb 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/HandbookHelper.cs
@@ -11,9 +11,9 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable(InjectionType.Singleton)]
public class HandbookHelper(
- DatabaseService _databaseService,
- ConfigServer _configServer,
- ICloner _cloner
+ DatabaseService databaseService,
+ ConfigServer configServer,
+ ICloner cloner
)
{
private LookupCollection? _handbookPriceCache;
@@ -22,7 +22,7 @@ public class HandbookHelper(
get { return _handbookPriceCache ??= HydrateHandbookCache(); }
}
- protected readonly ItemConfig _itemConfig = _configServer.GetConfig();
+ protected readonly ItemConfig _itemConfig = configServer.GetConfig();
///
/// Create an in-memory cache of all items with associated handbook price in handbookPriceCache class
@@ -30,7 +30,7 @@ public class HandbookHelper(
protected LookupCollection HydrateHandbookCache()
{
var result = new LookupCollection();
- var handbook = _databaseService.GetHandbook();
+ var handbook = databaseService.GetHandbook();
// Add handbook overrides found in items.json config into db
foreach (var (key, priceOverride) in _itemConfig.HandbookPriceOverride)
{
@@ -52,7 +52,7 @@ public class HandbookHelper(
itemToUpdate.ParentId = priceOverride.ParentId;
}
- var handbookDbClone = _cloner.Clone(handbook);
+ var handbookDbClone = cloner.Clone(handbook);
foreach (var handbookItem in handbookDbClone.Items)
{
result.Items.ById.TryAdd(handbookItem.Id, handbookItem.Price ?? 0);
@@ -70,12 +70,16 @@ public class HandbookHelper(
result.Categories.ById.TryAdd(handbookCategory.Id, handbookCategory.ParentId);
if (handbookCategory.ParentId is not null)
{
- if (!result.Categories.ByParent.TryGetValue(handbookCategory.ParentId, out _))
+ if (!result.Categories.ByParent.TryGetValue(handbookCategory.ParentId.Value, out _))
{
- result.Categories.ByParent.TryAdd(handbookCategory.ParentId, []);
+ result.Categories.ByParent.TryAdd(handbookCategory.ParentId.Value, []);
}
- result.Categories.ByParent.TryGetValue(handbookCategory.ParentId, out var itemIds);
+ result.Categories.ByParent.TryGetValue(
+ handbookCategory.ParentId.Value,
+ out var itemIds
+ );
+
itemIds.Add(handbookCategory.Id);
}
}
@@ -96,7 +100,7 @@ public class HandbookHelper(
return itemPrice;
}
- var handbookItem = _databaseService
+ var handbookItem = databaseService
.GetHandbook()
.Items?.FirstOrDefault(item => item.Id == tpl);
if (handbookItem is null)
@@ -142,7 +146,7 @@ public class HandbookHelper(
///
///
/// string array
- public List TemplatesWithParent(string parentId)
+ public List TemplatesWithParent(MongoId parentId)
{
HandbookPriceCache.Items.ByParent.TryGetValue(parentId, out var template);
@@ -154,7 +158,7 @@ public class HandbookHelper(
///
///
/// true if exists in cache
- public bool IsCategory(string category)
+ public bool IsCategory(MongoId category)
{
return HandbookPriceCache.Categories.ById.TryGetValue(category, out _);
}
@@ -176,7 +180,7 @@ public class HandbookHelper(
/// Currency count to convert
/// What current currency is
/// Count in roubles
- public double InRUB(double nonRoubleCurrencyCount, string currencyTypeFrom)
+ public double InRUB(double nonRoubleCurrencyCount, MongoId currencyTypeFrom)
{
return currencyTypeFrom == Money.ROUBLES
? nonRoubleCurrencyCount
@@ -189,7 +193,7 @@ public class HandbookHelper(
/// roubles to convert
/// Currency to convert roubles into
/// currency count in desired type
- public double FromRUB(double roubleCurrencyCount, string currencyTypeTo)
+ public double FromRUB(double roubleCurrencyCount, MongoId currencyTypeTo)
{
if (currencyTypeTo == Money.ROUBLES)
{
@@ -201,9 +205,9 @@ public class HandbookHelper(
return price > 0 ? Math.Max(1, Math.Round(roubleCurrencyCount / price)) : 0;
}
- public HandbookCategory GetCategoryById(string handbookId)
+ public HandbookCategory GetCategoryById(MongoId handbookId)
{
- return _databaseService
+ return databaseService
.GetHandbook()
.Categories.FirstOrDefault(category => category.Id == handbookId);
}
@@ -213,23 +217,23 @@ public class HandbookHelper(
public LookupItem()
{
ById = new Dictionary();
- ByParent = new Dictionary>();
+ ByParent = new Dictionary>();
}
public Dictionary ById { get; set; }
- public Dictionary> ByParent { get; set; }
+ public Dictionary> ByParent { get; set; }
}
protected record LookupCollection
{
public LookupCollection()
{
- Items = new LookupItem();
+ Items = new LookupItem();
Categories = new LookupItem();
}
- public LookupItem Items { get; set; }
+ public LookupItem Items { get; set; }
public LookupItem Categories { get; set; }
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs
index aa68214e..c424548e 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/HealthHelper.cs
@@ -1,4 +1,5 @@
using SPTarkov.DI.Annotations;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Spt.Config;
@@ -10,13 +11,13 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class HealthHelper(
- TimeUtil _timeUtil,
- SaveServer _saveServer,
- ProfileHelper _profileHelper,
- ConfigServer _configServer
+ TimeUtil timeUtil,
+ SaveServer saveServer,
+ ProfileHelper profileHelper,
+ ConfigServer configServer
)
{
- protected readonly HealthConfig _healthConfig = _configServer.GetConfig();
+ protected readonly HealthConfig _healthConfig = configServer.GetConfig();
///
/// Update player profile vitality values with changes from client request object
@@ -26,18 +27,18 @@ public class HealthHelper(
/// Changes to apply
/// OPTIONAL - Is player dead
public void ApplyHealthChangesToProfile(
- string sessionID,
+ MongoId sessionID,
PmcData pmcProfileToUpdate,
BotBaseHealth healthChanges,
bool isDead = false
)
{
- var fullProfile = _saveServer.GetProfile(sessionID);
+ var fullProfile = saveServer.GetProfile(sessionID);
var profileEdition = fullProfile.ProfileInfo.Edition;
var profileSide = fullProfile.CharacterData.PmcData.Info.Side;
// Get matching 'side' e.g. USEC
- var matchingSide = _profileHelper.GetProfileTemplateForSide(profileEdition, profileSide);
+ var matchingSide = profileHelper.GetProfileTemplateForSide(profileEdition, profileSide);
var defaultTemperature =
matchingSide?.Character?.Health?.Temperature ?? new CurrentMinMax { Current = 36.6 };
@@ -53,7 +54,7 @@ public class HealthHelper(
AdjustProfileHydrationEnergyTemperature(pmcProfileToUpdate, healthChanges);
// Update last edited timestamp
- pmcProfileToUpdate.Health.UpdateTime = _timeUtil.GetTimeStamp();
+ pmcProfileToUpdate.Health.UpdateTime = timeUtil.GetTimeStamp();
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs
index c3980301..7097aa12 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/HideoutHelper.cs
@@ -18,16 +18,16 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class HideoutHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- ServerLocalisationService _serverLocalisationService,
- DatabaseService _databaseService,
- EventOutputHolder _eventOutputHolder,
- HttpResponseUtil _httpResponseUtil,
- ProfileHelper _profileHelper,
- InventoryHelper _inventoryHelper,
- ItemHelper _itemHelper,
- ICloner _cloner
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ ServerLocalisationService serverLocalisationService,
+ DatabaseService databaseService,
+ EventOutputHolder eventOutputHolder,
+ HttpResponseUtil httpResponseUtil,
+ ProfileHelper profileHelper,
+ InventoryHelper inventoryHelper,
+ ItemHelper itemHelper,
+ ICloner cloner
)
{
public static readonly MongoId BitcoinProductionId = new("5d5c205bd582a50d042a3c0e");
@@ -44,24 +44,24 @@ public class HideoutHelper(
public void RegisterProduction(
PmcData pmcData,
HideoutSingleProductionStartRequestData productionRequest,
- string sessionID
+ MongoId sessionID
)
{
- var recipe = _databaseService
+ var recipe = databaseService
.GetHideout()
.Production.Recipes.FirstOrDefault(production =>
production.Id == productionRequest.RecipeId
);
if (recipe is null)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"hideout-missing_recipe_in_db",
productionRequest.RecipeId
)
);
- _httpResponseUtil.AppendErrorToOutput(_eventOutputHolder.GetOutput(sessionID));
+ httpResponseUtil.AppendErrorToOutput(eventOutputHolder.GetOutput(sessionID));
}
// @Important: Here we need to be very exact:
@@ -90,12 +90,12 @@ public class HideoutHelper(
foreach (var tool in productionRequest.Tools)
{
- var toolItem = _cloner.Clone(
+ var toolItem = cloner.Clone(
pmcData.Inventory.Items.FirstOrDefault(x => x.Id == tool.Id)
);
// Make sure we only return as many as we took
- _itemHelper.AddUpdObjectToItem(toolItem);
+ itemHelper.AddUpdObjectToItem(toolItem);
toolItem.Upd.StackObjectsCount = tool.Count;
@@ -123,24 +123,24 @@ public class HideoutHelper(
public void RegisterProduction(
PmcData pmcData,
HideoutContinuousProductionStartRequestData productionRequest,
- string sessionID
+ MongoId sessionID
)
{
- var recipe = _databaseService
+ var recipe = databaseService
.GetHideout()
.Production.Recipes.FirstOrDefault(production =>
production.Id == productionRequest.RecipeId
);
if (recipe is null)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"hideout-missing_recipe_in_db",
productionRequest.RecipeId
)
);
- _httpResponseUtil.AppendErrorToOutput(_eventOutputHolder.GetOutput(sessionID));
+ httpResponseUtil.AppendErrorToOutput(eventOutputHolder.GetOutput(sessionID));
}
// @Important: Here we need to be very exact:
@@ -153,11 +153,11 @@ public class HideoutHelper(
var modifiedProductionTime = GetAdjustedCraftTimeWithSkills(
pmcData,
- productionRequest.RecipeId
+ productionRequest.RecipeId.Value
);
var production = InitProduction(
- productionRequest.RecipeId,
+ productionRequest.RecipeId.Value,
modifiedProductionTime ?? 0,
recipe.NeedFuelForAllProductionTime
);
@@ -170,7 +170,7 @@ public class HideoutHelper(
/// with all the constants.
///
public Production InitProduction(
- string recipeId,
+ MongoId recipeId,
double productionTime,
bool? needFuelForAllProductionTime
)
@@ -180,7 +180,7 @@ public class HideoutHelper(
Progress = 0,
InProgress = true,
RecipeId = recipeId,
- StartTimestamp = _timeUtil.GetTimeStamp(),
+ StartTimestamp = timeUtil.GetTimeStamp(),
ProductionTime = productionTime,
Products = [],
GivenItemsInStart = [],
@@ -209,8 +209,8 @@ public class HideoutHelper(
);
if (stashItem is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"hideout-unable_to_apply_stashsize_bonus_no_stash_found",
profileData.Inventory.Stash
)
@@ -235,9 +235,9 @@ public class HideoutHelper(
// Add bonus to player bonuses array in profile
// EnergyRegeneration, HealthRegeneration, RagfairCommission, ScavCooldownTimer, SkillGroupLevelingBoost, ExperienceRate, QuestMoneyReward etc
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Adding bonus: {bonus.Type} to profile, value: {bonus.Value}");
+ logger.Debug($"Adding bonus: {bonus.Type} to profile, value: {bonus.Value}");
}
profileData.Bonuses.Add(bonus);
@@ -247,16 +247,16 @@ public class HideoutHelper(
/// Process a players hideout, update areas that use resources + increment production timers
///
/// Session id
- public void UpdatePlayerHideout(string sessionID)
+ public void UpdatePlayerHideout(MongoId sessionID)
{
- var pmcData = _profileHelper.GetPmcProfile(sessionID);
+ var pmcData = profileHelper.GetPmcProfile(sessionID);
var hideoutProperties = GetHideoutProperties(pmcData);
- pmcData.Hideout.SptUpdateLastRunTimestamp ??= _timeUtil.GetTimeStamp();
+ pmcData.Hideout.SptUpdateLastRunTimestamp ??= timeUtil.GetTimeStamp();
UpdateAreasWithResources(sessionID, pmcData, hideoutProperties);
UpdateProductionTimers(pmcData, hideoutProperties);
- pmcData.Hideout.SptUpdateLastRunTimestamp = _timeUtil.GetTimeStamp();
+ pmcData.Hideout.SptUpdateLastRunTimestamp = timeUtil.GetTimeStamp();
}
///
@@ -313,7 +313,7 @@ public class HideoutHelper(
/// Hideout properties
protected void UpdateProductionTimers(PmcData pmcData, HideoutProperties hideoutProperties)
{
- var recipes = _databaseService.GetHideout().Production;
+ var recipes = databaseService.GetHideout().Production;
// Check each production and handle edge cases if necessary
foreach (var prodId in pmcData.Hideout?.Production)
@@ -328,8 +328,8 @@ public class HideoutHelper(
if (craft.Progress == null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"hideout-craft_has_undefined_progress_value_defaulting",
prodId
)
@@ -383,8 +383,8 @@ public class HideoutHelper(
var recipe = recipes?.Recipes?.FirstOrDefault(r => r.Id == prodId.Key);
if (recipe is null)
{
- _logger.Error(
- _serverLocalisationService.GetText("hideout-missing_recipe_for_area", prodId)
+ logger.Error(
+ serverLocalisationService.GetText("hideout-missing_recipe_for_area", prodId)
);
continue;
@@ -486,7 +486,7 @@ public class HideoutHelper(
// Get seconds since last hideout update
var timeElapsedSeconds =
- _timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp;
+ timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp;
// Increment progress by time passed if progress is less than time needed
if (production.Progress < production.ProductionTime)
@@ -536,7 +536,7 @@ public class HideoutHelper(
protected void UpdateScavCaseProductionTimer(PmcData pmcData, string productionId)
{
var timeElapsed =
- _timeUtil.GetTimeStamp()
+ timeUtil.GetTimeStamp()
- pmcData.Hideout.Production[productionId].StartTimestamp
- pmcData.Hideout.Production[productionId].Progress;
@@ -550,7 +550,7 @@ public class HideoutHelper(
/// Profile to update areas of
/// hideout properties
protected void UpdateAreasWithResources(
- string sessionID,
+ MongoId sessionID,
PmcData pmcData,
HideoutProperties hideoutProperties
)
@@ -592,7 +592,7 @@ public class HideoutHelper(
// 1 resource last 14 min 27 sec, 1/14.45/60 = 0.00115
// 10-10-2021 From wiki, 1 resource last 12 minutes 38 seconds, 1/12.63333/60 = 0.00131
var fuelUsedSinceLastTick =
- _databaseService.GetHideout().Settings.GeneratorFuelFlowRate
+ databaseService.GetHideout().Settings.GeneratorFuelFlowRate
* GetTimeElapsedSinceLastServerTick(pmcData, isGeneratorOn);
// Get all fuel consumption bonuses, returns an empty array if none found
@@ -645,7 +645,7 @@ public class HideoutHelper(
// Undefined fuel, fresh fuel item and needs its max fuel amount looked up
if (fuelRemaining is null)
{
- var fuelItemTemplate = _itemHelper.GetItem(fuelItemInSlot.Template).Value;
+ var fuelItemTemplate = itemHelper.GetItem(fuelItemInSlot.Template).Value;
pointsConsumed = fuelUsedSinceLastTick ?? 0;
fuelRemaining = fuelItemTemplate.Properties.MaxResource - fuelUsedSinceLastTick;
}
@@ -665,7 +665,7 @@ public class HideoutHelper(
// Fuel consumed / 10 is over 1, add hideout management skill point
if (pmcData is not null && Math.Floor(pointsConsumed / 10) >= 1)
{
- _profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1);
+ profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1);
pointsConsumed -= 10;
}
@@ -680,9 +680,9 @@ public class HideoutHelper(
isFuelItemFoundInRaid
);
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Profile: {pmcData.Id} Generator has: {fuelRemaining} fuel left in slot {i + 1}"
);
}
@@ -696,9 +696,9 @@ public class HideoutHelper(
// Ran out of fuel items to deduct fuel from
fuelUsedSinceLastTick = Math.Abs(fuelRemaining ?? 0);
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Profile: {pmcData.Id} Generator ran out of fuel");
+ logger.Debug($"Profile: {pmcData.Id} Generator ran out of fuel");
}
}
@@ -710,7 +710,7 @@ public class HideoutHelper(
}
protected void UpdateWaterCollector(
- string sessionId,
+ MongoId sessionId,
PmcData pmcData,
BotHideoutArea area,
HideoutProperties hideoutProperties
@@ -752,7 +752,7 @@ public class HideoutHelper(
Action = "HideoutSingleProductionStart",
Items = [],
Tools = [],
- Timestamp = _timeUtil.GetTimeStamp(),
+ Timestamp = timeUtil.GetTimeStamp(),
};
RegisterProduction(pmcData, recipe, sessionId);
@@ -768,19 +768,19 @@ public class HideoutHelper(
/// Items craft time with bonuses subtracted
public double? GetAdjustedCraftTimeWithSkills(
PmcData pmcData,
- string recipeId,
+ MongoId recipeId,
bool applyHideoutManagementBonus = false
)
{
- var globalSkillsDb = _databaseService.GetGlobals().Configuration.SkillsSettings;
+ var globalSkillsDb = databaseService.GetGlobals().Configuration.SkillsSettings;
- var recipe = _databaseService
+ var recipe = databaseService
.GetHideout()
.Production.Recipes.FirstOrDefault(production => production.Id == recipeId);
if (recipe is null)
{
- _logger.Error(
- _serverLocalisationService.GetText("hideout-missing_recipe_in_db", recipeId)
+ logger.Error(
+ serverLocalisationService.GetText("hideout-missing_recipe_in_db", recipeId)
);
return null;
@@ -812,7 +812,7 @@ public class HideoutHelper(
}
var modifiedProductionTime = recipe.ProductionTime - timeReductionSeconds;
- if (modifiedProductionTime > 0 && _profileHelper.IsDeveloperAccount(pmcData.Id.Value))
+ if (modifiedProductionTime > 0 && profileHelper.IsDeveloperAccount(pmcData.Id.Value))
{
modifiedProductionTime = 40;
}
@@ -896,7 +896,7 @@ public class HideoutHelper(
// Check units consumed for possible increment of hideout mgmt skill point
if (pmcData is not null && Math.Floor(pointsConsumed / 10) >= 1)
{
- _profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1);
+ profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1);
pointsConsumed -= 10;
}
@@ -912,9 +912,9 @@ public class HideoutHelper(
pointsConsumed,
isWaterFilterFoundInRaid
);
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Water filter has: {resourceValue} units left in slot {i + 1}");
+ logger.Debug($"Water filter has: {resourceValue} units left in slot {i + 1}");
}
break; // Break here to avoid iterating other filters now w're done
@@ -959,7 +959,7 @@ public class HideoutHelper(
/// Drain rate
protected double GetWaterFilterDrainRate(PmcData pmcData)
{
- var globalSkillsDb = _databaseService.GetGlobals().Configuration.SkillsSettings;
+ var globalSkillsDb = databaseService.GetGlobals().Configuration.SkillsSettings;
// 100 resources last 8 hrs 20 min, 100/8.33/60/60 = 0.00333
const double filterDrainRate = 0.00333d;
@@ -989,9 +989,9 @@ public class HideoutHelper(
///
/// Id, e.g. Water collector id
/// Seconds to produce item
- protected double GetTotalProductionTimeSeconds(string prodId)
+ protected double GetTotalProductionTimeSeconds(MongoId prodId)
{
- return _databaseService
+ return databaseService
.GetHideout()
.Production.Recipes.FirstOrDefault(prod => prod.Id == prodId)
?.ProductionTime ?? 0;
@@ -1036,7 +1036,7 @@ public class HideoutHelper(
300/17.64694/60/60 = 0.004722
*/
var filterDrainRate =
- _databaseService.GetHideout().Settings.AirFilterUnitFlowRate
+ databaseService.GetHideout().Settings.AirFilterUnitFlowRate
* GetTimeElapsedSinceLastServerTick(pmcData, isGeneratorOn);
// Hideout management resource consumption bonus:
@@ -1072,7 +1072,7 @@ public class HideoutHelper(
// check unit consumed for increment skill point
if (pmcData is not null && Math.Floor(pointsConsumed / 10) >= 1)
{
- _profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1);
+ profileHelper.AddSkillPointsToPlayer(pmcData, SkillTypes.HideoutManagement, 1);
pointsConsumed -= 10;
}
@@ -1087,9 +1087,9 @@ public class HideoutHelper(
UnitsConsumed = pointsConsumed,
},
};
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Air filter: {resourceValue} filter left on slot {i + 1}");
+ logger.Debug($"Air filter: {resourceValue} filter left on slot {i + 1}");
}
break; // Break here to avoid updating all filters
@@ -1118,7 +1118,7 @@ public class HideoutHelper(
{
if (btcProduction is null)
{
- _logger.Error(_serverLocalisationService.GetText("hideout-bitcoin_craft_missing"));
+ logger.Error(serverLocalisationService.GetText("hideout-bitcoin_craft_missing"));
return;
}
@@ -1181,17 +1181,17 @@ public class HideoutHelper(
return;
}
- var bitcoinProdData = _databaseService
+ var bitcoinProdData = databaseService
.GetHideout()
.Production.Recipes.FirstOrDefault(production => production.Id == BitcoinProductionId);
// BSG finally fixed their settings, they now get loaded from the settings and used in the client
var adjustedCraftTime =
(
- _profileHelper.IsDeveloperAccount(pmcData.SessionId)
+ profileHelper.IsDeveloperAccount(pmcData.SessionId)
? 40
: bitcoinProdData.ProductionTime
- ) / (1 + (btcFarmCGs - 1) * _databaseService.GetHideout().Settings.GpuBoostRate);
+ ) / (1 + (btcFarmCGs - 1) * databaseService.GetHideout().Settings.GpuBoostRate);
// The progress should be adjusted based on the GPU boost rate, but the target is still the base productionTime
var timeMultiplier = bitcoinProdData.ProductionTime / adjustedCraftTime;
@@ -1212,7 +1212,7 @@ public class HideoutHelper(
}
}
- btcProduction.StartTimestamp = _timeUtil.GetTimeStamp();
+ btcProduction.StartTimestamp = timeUtil.GetTimeStamp();
}
///
@@ -1249,11 +1249,11 @@ public class HideoutHelper(
)
{
// Reduce time elapsed (and progress) when generator is off
- var timeElapsed = _timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp;
+ var timeElapsed = timeUtil.GetTimeStamp() - pmcData.Hideout.SptUpdateLastRunTimestamp;
if (recipe is not null)
{
- var hideoutArea = _databaseService
+ var hideoutArea = databaseService
.GetHideout()
.Areas.FirstOrDefault(area => area.Type == recipe.AreaType);
if (!(hideoutArea.NeedsFuel ?? false))
@@ -1266,7 +1266,7 @@ public class HideoutHelper(
if (!isGeneratorOn)
{
timeElapsed = (long)(
- timeElapsed * _databaseService.GetHideout().Settings.GeneratorSpeedWithoutFuel
+ timeElapsed * databaseService.GetHideout().Settings.GeneratorSpeedWithoutFuel
);
}
@@ -1280,11 +1280,11 @@ public class HideoutHelper(
/// Coin slot count
protected double GetBTCSlots(PmcData pmcData)
{
- var bitcoinProductions = _databaseService
+ var bitcoinProductions = databaseService
.GetHideout()
.Production.Recipes.FirstOrDefault(production => production.Id == BitcoinProductionId);
var productionSlots = bitcoinProductions?.ProductionLimitCount ?? 3; // Default to 3 if none found
- var hasManagementSkillSlots = _profileHelper.HasEliteSkillLevel(
+ var hasManagementSkillSlots = profileHelper.HasEliteSkillLevel(
SkillTypes.HideoutManagement,
pmcData
);
@@ -1298,7 +1298,7 @@ public class HideoutHelper(
///
protected double? GetEliteSkillAdditionalBitcoinSlotCount()
{
- return _databaseService
+ return databaseService
.GetGlobals()
.Configuration.SkillsSettings.HideoutManagement.EliteSlots.BitcoinFarm.Container;
}
@@ -1324,7 +1324,7 @@ public class HideoutHelper(
roundedLevel = roundedLevel == 51 ? roundedLevel - 1 : roundedLevel;
return roundedLevel
- * _databaseService
+ * databaseService
.GetGlobals()
.Configuration.SkillsSettings.HideoutManagement.ConsumptionReductionPerLevel
/ 100;
@@ -1392,7 +1392,7 @@ public class HideoutHelper(
public void GetBTC(
PmcData pmcData,
HideoutTakeProductionRequestData request,
- string sessionId,
+ MongoId sessionId,
ItemEventRouterResponse output
)
{
@@ -1401,10 +1401,10 @@ public class HideoutHelper(
var craftedCoinCount = bitcoinCraft?.Products?.Count;
if (bitcoinCraft is null || craftedCoinCount is null)
{
- var errorMsg = _serverLocalisationService.GetText("hideout-no_bitcoins_to_collect");
- _logger.Error(errorMsg);
+ var errorMsg = serverLocalisationService.GetText("hideout-no_bitcoins_to_collect");
+ logger.Error(errorMsg);
- _httpResponseUtil.AppendErrorToOutput(output, errorMsg);
+ httpResponseUtil.AppendErrorToOutput(output, errorMsg);
return;
}
@@ -1434,7 +1434,7 @@ public class HideoutHelper(
};
// Add FiR coins to player inventory
- _inventoryHelper.AddItemsToStash(sessionId, addItemsRequest, pmcData, output);
+ inventoryHelper.AddItemsToStash(sessionId, addItemsRequest, pmcData, output);
if (output.Warnings?.Count > 0)
{
return;
@@ -1446,7 +1446,7 @@ public class HideoutHelper(
// Set start to now
{
pmcData.Hideout.Production[BitcoinProductionId].StartTimestamp =
- _timeUtil.GetTimeStamp();
+ timeUtil.GetTimeStamp();
}
// Remove crafted coins from production in profile now they've been collected
@@ -1484,7 +1484,7 @@ public class HideoutHelper(
if (
improvementDetails.Completed == false
- && improvementDetails.ImproveCompleteTimestamp < _timeUtil.GetTimeStamp()
+ && improvementDetails.ImproveCompleteTimestamp < timeUtil.GetTimeStamp()
)
{
improvementDetails.Completed = true;
@@ -1503,7 +1503,7 @@ public class HideoutHelper(
);
// Get hideout area 16 bonus array
- var fameAreaDb = _databaseService
+ var fameAreaDb = databaseService
.GetHideout()
.Areas.FirstOrDefault(area => area.Type == HideoutAreas.PlaceOfFame);
@@ -1584,9 +1584,9 @@ public class HideoutHelper(
bonusIdsToRemove.Add(bonus.Id);
}
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Removing: {bonusIdsToRemove.Count} bonuses from profile");
+ logger.Debug($"Removing: {bonusIdsToRemove.Count} bonuses from profile");
}
// Remove the wall bonuses from profile by id
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs
index e899a098..7c5d542f 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/InRaidHelper.cs
@@ -13,10 +13,10 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class InRaidHelper(
- InventoryHelper _inventoryHelper,
- ConfigServer _configServer,
- ICloner _cloner,
- DatabaseService _databaseService
+ InventoryHelper inventoryHelper,
+ ConfigServer configServer,
+ ICloner cloner,
+ DatabaseService databaseService
)
{
protected static readonly List _pocketSlots =
@@ -26,9 +26,9 @@ public class InRaidHelper(
"pocket3",
"pocket4",
];
- protected readonly InRaidConfig _inRaidConfig = _configServer.GetConfig();
+ protected readonly InRaidConfig _inRaidConfig = configServer.GetConfig();
protected readonly LostOnDeathConfig _lostOnDeathConfig =
- _configServer.GetConfig();
+ configServer.GetConfig();
///
/// Deprecated. Reset the skill points earned in a raid to 0, ready for next raid.
@@ -54,7 +54,7 @@ public class InRaidHelper(
/// Indicates if the player survived the raid
/// Indicates if it is a transfer operation
public void SetInventory(
- string sessionID,
+ MongoId sessionID,
PmcData serverProfile,
PmcData postRaidProfile,
bool isSurvived,
@@ -62,17 +62,17 @@ public class InRaidHelper(
)
{
// Store insurance (as removeItem() removes insured items)
- var insured = _cloner.Clone(serverProfile.InsuredItems);
+ var insured = cloner.Clone(serverProfile.InsuredItems);
// Remove equipment and loot items stored on player from server profile in preparation for data from client being added
- _inventoryHelper.RemoveItem(
+ inventoryHelper.RemoveItem(
serverProfile,
serverProfile.Inventory.Equipment.Value,
sessionID
);
// Remove quest items stored on player from server profile in preparation for data from client being added
- _inventoryHelper.RemoveItem(
+ inventoryHelper.RemoveItem(
serverProfile,
serverProfile.Inventory.QuestRaidItems.Value,
sessionID
@@ -111,7 +111,7 @@ public class InRaidHelper(
/// Items to process
protected void RemoveFiRStatusFromItems(List- items)
{
- var dbItems = _databaseService.GetItems();
+ var dbItems = databaseService.GetItems();
var itemsToRemovePropertyFrom = items.Where(item =>
{
@@ -166,7 +166,7 @@ public class InRaidHelper(
///
/// Player profile
/// Session id
- public void DeleteInventory(PmcData pmcData, string sessionId)
+ public void DeleteInventory(PmcData pmcData, MongoId sessionId)
{
// Get inventory item ids to remove from players profile
var itemIdsToDeleteFromProfile = GetInventoryItemsLostOnDeath(pmcData)
@@ -174,7 +174,7 @@ public class InRaidHelper(
foreach (var itemIdToDelete in itemIdsToDeleteFromProfile)
// Items inside containers are handled as part of function
{
- _inventoryHelper.RemoveItem(pmcData, itemIdToDelete, sessionId);
+ inventoryHelper.RemoveItem(pmcData, itemIdToDelete, sessionId);
}
// Remove contents of fast panel
@@ -188,7 +188,7 @@ public class InRaidHelper(
/// Player profile
/// Container slot id to find items for and remove FiR from
public void RemoveFiRStatusFromItemsInContainer(
- string sessionId,
+ MongoId sessionId,
PmcData pmcData,
string secureContainerSlotId
)
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs
index 3b5dd9f7..751e3dce 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs
@@ -22,15 +22,15 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class InventoryHelper(
- ISptLogger _logger,
- HttpResponseUtil _httpResponseUtil,
- DialogueHelper _dialogueHelper,
- EventOutputHolder _eventOutputHolder,
- ProfileHelper _profileHelper,
- ItemHelper _itemHelper,
- ServerLocalisationService _serverLocalisationService,
- ConfigServer _configServer,
- ICloner _cloner
+ ISptLogger logger,
+ HttpResponseUtil httpResponseUtil,
+ DialogueHelper dialogueHelper,
+ EventOutputHolder eventOutputHolder,
+ ProfileHelper profileHelper,
+ ItemHelper itemHelper,
+ ServerLocalisationService serverLocalisationService,
+ ConfigServer configServer,
+ ICloner cloner
)
{
private static readonly FrozenSet _variableSizeItemTypes =
@@ -39,8 +39,7 @@ public class InventoryHelper(
BaseClasses.FUNCTIONAL_MOD,
BaseClasses.MOD,
];
- protected readonly InventoryConfig _inventoryConfig =
- _configServer.GetConfig();
+ protected readonly InventoryConfig _inventoryConfig = configServer.GetConfig();
///
/// Add multiple items to player stash (assuming they all fit)
@@ -50,7 +49,7 @@ public class InventoryHelper(
/// Player profile
/// Client response object
public void AddItemsToStash(
- string sessionId,
+ MongoId sessionId,
AddItemsDirectRequest request,
PmcData pmcData,
ItemEventRouterResponse output
@@ -60,9 +59,9 @@ public class InventoryHelper(
if (!CanPlaceItemsInInventory(sessionId, request.ItemsWithModsToAdd))
{
// No space, exit
- _httpResponseUtil.AppendErrorToOutput(
+ httpResponseUtil.AppendErrorToOutput(
output,
- _serverLocalisationService.GetText("inventory-no_stash_space"),
+ serverLocalisationService.GetText("inventory-no_stash_space"),
BackendErrorCodes.NotEnoughSpace
);
@@ -96,19 +95,19 @@ public class InventoryHelper(
/// Player profile
/// Client response object
public void AddItemToStash(
- string sessionId,
+ MongoId sessionId,
AddItemDirectRequest request,
PmcData pmcData,
ItemEventRouterResponse output
)
{
- var itemWithModsToAddClone = _cloner.Clone(request.ItemWithModsToAdd);
+ var itemWithModsToAddClone = cloner.Clone(request.ItemWithModsToAdd);
// Get stash layouts ready for use
var stashFS2D = GetStashSlotMap(pmcData);
if (stashFS2D is null)
{
- _logger.Error($"Unable to get stash map for players: {sessionId} stash");
+ logger.Error($"Unable to get stash map for players: {sessionId} stash");
return;
}
@@ -148,8 +147,8 @@ public class InventoryHelper(
{
// Callback failed
var message = ex.Message;
- _httpResponseUtil.AppendErrorToOutput(output, message);
- _logger.Error($"[InventoryHelper]: {ex.Message}");
+ httpResponseUtil.AppendErrorToOutput(output, message);
+ logger.Error($"[InventoryHelper]: {ex.Message}");
return;
}
@@ -159,9 +158,9 @@ public class InventoryHelper(
output.ProfileChanges[sessionId].Items.NewItems.AddRange(itemWithModsToAddClone);
pmcData.Inventory.Items.AddRange(itemWithModsToAddClone);
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Added: {itemWithModsToAddClone[0].Upd?.StackObjectsCount ?? 1} item: {itemWithModsToAddClone[0].Template} with: {itemWithModsToAddClone.Count - 1} mods to inventory"
);
}
@@ -177,10 +176,10 @@ public class InventoryHelper(
foreach (var item in itemWithChildren)
{
// Ensure item has upd object
- _itemHelper.AddUpdObjectToItem(item);
+ itemHelper.AddUpdObjectToItem(item);
// Ammo / currency can NEVER be FiR or have a 'SpawnedInSession' property
- item.Upd.SpawnedInSession = _itemHelper.IsOfBaseclass(item.Template, BaseClasses.AMMO)
+ item.Upd.SpawnedInSession = itemHelper.IsOfBaseclass(item.Template, BaseClasses.AMMO)
? null
: foundInRaid;
}
@@ -216,12 +215,12 @@ public class InventoryHelper(
/// True all items fit
public bool CanPlaceItemsInInventory(string sessionId, List> itemsWithChildren)
{
- var pmcData = _profileHelper.GetPmcProfile(sessionId);
+ var pmcData = profileHelper.GetPmcProfile(sessionId);
- var stashFS2D = _cloner.Clone(GetStashSlotMap(pmcData));
+ var stashFS2D = cloner.Clone(GetStashSlotMap(pmcData));
if (stashFS2D is null)
{
- _logger.Error($"Unable to get stash map for players: {sessionId} stash");
+ logger.Error($"Unable to get stash map for players: {sessionId} stash");
return false;
}
@@ -273,8 +272,8 @@ public class InventoryHelper(
}
catch (Exception ex)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"inventory-unable_to_fit_item_into_inventory",
ex.Message
)
@@ -328,11 +327,8 @@ public class InventoryHelper(
}
catch (Exception ex)
{
- _logger.Error(
- _serverLocalisationService.GetText(
- "inventory-fill_container_failed",
- ex.Message
- )
+ logger.Error(
+ serverLocalisationService.GetText("inventory-fill_container_failed", ex.Message)
);
return;
@@ -449,9 +445,9 @@ public class InventoryHelper(
}
else
{
- _httpResponseUtil.AppendErrorToOutput(
+ httpResponseUtil.AppendErrorToOutput(
output,
- _serverLocalisationService.GetText("inventory-no_stash_space"),
+ serverLocalisationService.GetText("inventory-no_stash_space"),
BackendErrorCodes.NotEnoughSpace
);
}
@@ -459,13 +455,13 @@ public class InventoryHelper(
protected void HandleContainerPlacementError(string errorText, ItemEventRouterResponse output)
{
- _logger.Error(
- _serverLocalisationService.GetText("inventory-fill_container_failed", errorText)
+ logger.Error(
+ serverLocalisationService.GetText("inventory-fill_container_failed", errorText)
);
- _httpResponseUtil.AppendErrorToOutput(
+ httpResponseUtil.AppendErrorToOutput(
output,
- _serverLocalisationService.GetText("inventory-no_stash_space")
+ serverLocalisationService.GetText("inventory-no_stash_space")
);
}
@@ -481,14 +477,14 @@ public class InventoryHelper(
public void RemoveItem(
PmcData profile,
MongoId itemId,
- string sessionId,
+ MongoId sessionId,
ItemEventRouterResponse? output = null
)
{
if (itemId.IsEmpty())
{
- _logger.Warning(
- _serverLocalisationService.GetText("inventory-unable_to_remove_item_no_id_given")
+ logger.Warning(
+ serverLocalisationService.GetText("inventory-unable_to_remove_item_no_id_given")
);
return;
@@ -498,10 +494,10 @@ public class InventoryHelper(
var itemAndChildrenToRemove = profile.Inventory.Items.FindAndReturnChildrenAsItems(itemId);
if (!itemAndChildrenToRemove.Any())
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
- _serverLocalisationService.GetText(
+ logger.Debug(
+ serverLocalisationService.GetText(
"inventory-unable_to_remove_item_id_not_found",
new { ChildId = itemId, ProfileId = profile.Id }
)
@@ -530,8 +526,8 @@ public class InventoryHelper(
}
else
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"inventory-unable_to_remove_item_id_not_found",
new { childId = item.Id, ProfileId = profile.Id }
)
@@ -555,12 +551,12 @@ public class InventoryHelper(
/// Remove request
/// OPTIONAL - ItemEventRouterResponse
public void RemoveItemAndChildrenFromMailRewards(
- string sessionId,
+ MongoId sessionId,
InventoryRemoveRequestData removeRequest,
ItemEventRouterResponse? output
)
{
- var fullProfile = _profileHelper.GetFullProfile(sessionId);
+ var fullProfile = profileHelper.GetFullProfile(sessionId);
// Iterate over all dialogs and look for mesasage with key from request, that has item (and maybe its children) we want to remove
var dialogs = fullProfile.DialogueRecords;
@@ -581,8 +577,8 @@ public class InventoryHelper(
var indexOfItemToRemove = messageWithReward.Items.Data.IndexOf(itemToDelete);
if (indexOfItemToRemove == -1)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"inventory-unable_to_remove_item_restart_immediately",
new
{
@@ -619,7 +615,7 @@ public class InventoryHelper(
PmcData pmcData,
MongoId itemId,
int countToRemove,
- string sessionId,
+ MongoId sessionId,
ItemEventRouterResponse? output
)
{
@@ -658,7 +654,7 @@ public class InventoryHelper(
}
}
- return output ?? _eventOutputHolder.GetOutput(sessionId);
+ return output ?? eventOutputHolder.GetOutput(sessionId);
}
///
@@ -689,21 +685,18 @@ public class InventoryHelper(
)
{
// Invalid item
- var (isValidItem, itemTemplate) = _itemHelper.GetItem(itemTpl);
+ var (isValidItem, itemTemplate) = itemHelper.GetItem(itemTpl);
if (!isValidItem)
{
- _logger.Error(
- _serverLocalisationService.GetText(
- "inventory-invalid_item_missing_from_db",
- itemTpl
- )
+ logger.Error(
+ serverLocalisationService.GetText("inventory-invalid_item_missing_from_db", itemTpl)
);
}
// Item found but no _props property
if (isValidItem && itemTemplate.Properties is null)
{
- _serverLocalisationService.GetText(
+ serverLocalisationService.GetText(
"inventory-item_missing_props_property",
new { itemTpl, itemName = itemTemplate?.Name }
);
@@ -713,8 +706,8 @@ public class InventoryHelper(
if (!isValidItem && itemTemplate is null)
{
// return default size of 1x1
- _logger.Error(
- _serverLocalisationService.GetText("inventory-return_default_size", itemTpl)
+ logger.Error(
+ serverLocalisationService.GetText("inventory-return_default_size", itemTpl)
);
return (1, 1); // Invalid input data, return defaults
@@ -722,7 +715,7 @@ public class InventoryHelper(
if (!inventoryItemHash.ByItemId.TryGetValue(itemId, out var rootItem))
{
- _logger.Error(
+ logger.Error(
$"Unable to get root item with Id: {itemId} from player inventory. Defaulting to 1x1"
);
@@ -757,7 +750,7 @@ public class InventoryHelper(
}
// Item can have child items that adjust its size
- if (_itemHelper.IsOfBaseclasses(itemTpl, _variableSizeItemTypes))
+ if (itemHelper.IsOfBaseclasses(itemTpl, _variableSizeItemTypes))
{
// Storage for root item and its children, store root item id for now
// Will store child items that may have sub-children to process
@@ -781,11 +774,11 @@ public class InventoryHelper(
toDo.Enqueue(childItem.Id);
// Get child item from db
- var (isValid, template) = _itemHelper.GetItem(childItem.Template);
+ var (isValid, template) = itemHelper.GetItem(childItem.Template);
if (!isValid)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"inventory-get_item_size_item_not_found_by_tpl",
childItem.Template
)
@@ -866,11 +859,11 @@ public class InventoryHelper(
int containerSizeHorizontalX,
int containerSizeVerticalY,
List- itemList,
- string containerId
+ MongoId containerId
)
{
// Create blank 2d map of container
- var container = _itemHelper.GetBlankContainerMap(
+ var container = itemHelper.GetBlankContainerMap(
containerSizeHorizontalX, // Column count
containerSizeVerticalY // Row count
);
@@ -892,7 +885,7 @@ public class InventoryHelper(
if (itemLocation is null)
{
// Item has no location property
- _logger.Error(
+ logger.Error(
$"Unable to find 'location' property on item with id: {rootItem.Id}, skipping"
);
@@ -937,8 +930,8 @@ public class InventoryHelper(
var message =
$"Item: {rootItem.Id} at: {itemLocation.X}, {itemLocation.Y} size: {itemHeight}x{itemWidth} extends outside the containers bounds";
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"inventory-unable_to_fill_container",
new { id = rootItem.Id, error = $"{message}" }
)
@@ -998,11 +991,11 @@ public class InventoryHelper(
public OwnerInventoryItems GetOwnerInventoryItems(
InventoryBaseActionRequestData request,
MongoId itemId,
- string sessionId
+ MongoId sessionId
)
{
- var pmcItems = _profileHelper.GetPmcProfile(sessionId).Inventory.Items;
- var scavProfile = _profileHelper.GetScavProfile(sessionId);
+ var pmcItems = profileHelper.GetPmcProfile(sessionId).Inventory.Items;
+ var scavProfile = profileHelper.GetScavProfile(sessionId);
var fromInventoryItems = pmcItems;
var fromType = "pmc";
@@ -1018,7 +1011,7 @@ public class InventoryHelper(
)
{
// Split requests don't use 'use' but 'splitItem' property
- fromInventoryItems = _dialogueHelper.GetMessageItemContents(
+ fromInventoryItems = dialogueHelper.GetMessageItemContents(
request.FromOwner.Id,
sessionId,
itemId
@@ -1064,7 +1057,7 @@ public class InventoryHelper(
horizontal,
vertical,
pmcData.Inventory.Items,
- pmcData.Inventory.Stash
+ pmcData.Inventory.Stash.Value
);
}
@@ -1075,16 +1068,13 @@ public class InventoryHelper(
/// blank two-dimensional array
public int[,] GetContainerSlotMap(string containerTpl)
{
- var containerTemplate = _itemHelper.GetItem(containerTpl).Value;
+ var containerTemplate = itemHelper.GetItem(containerTpl).Value;
var firstContainerGrid = containerTemplate.Properties.Grids.FirstOrDefault();
var containerRowCount = firstContainerGrid.Props.CellsH;
var containerColumnCount = firstContainerGrid.Props.CellsV;
- return _itemHelper.GetBlankContainerMap(
- containerColumnCount.Value,
- containerRowCount.Value
- );
+ return itemHelper.GetBlankContainerMap(containerColumnCount.Value, containerRowCount.Value);
}
///
@@ -1094,7 +1084,12 @@ public class InventoryHelper(
/// two-dimensional array
protected int[,] GetSortingTableSlotMap(PmcData pmcData)
{
- return GetContainerMap(10, 45, pmcData.Inventory.Items, pmcData.Inventory.SortingTable);
+ return GetContainerMap(
+ 10,
+ 45,
+ pmcData.Inventory.Items,
+ pmcData.Inventory.SortingTable.Value
+ );
}
///
@@ -1109,18 +1104,16 @@ public class InventoryHelper(
var stashTpl = GetProfileStashTpl(pmcData);
if (stashTpl is null)
{
- _logger.Error(_serverLocalisationService.GetText("inventory-missing_stash_size"));
+ logger.Error(serverLocalisationService.GetText("inventory-missing_stash_size"));
return (0, 0);
}
// Look up details of stash in db
- var (isValidItem, stashItemDbItem) = _itemHelper.GetItem(stashTpl);
+ var (isValidItem, stashItemDbItem) = itemHelper.GetItem(stashTpl);
if (!isValidItem)
{
- _logger.Error(
- _serverLocalisationService.GetText("inventory-stash_not_found", stashTpl)
- );
+ logger.Error(serverLocalisationService.GetText("inventory-stash_not_found", stashTpl));
return (0, 0);
}
@@ -1156,7 +1149,7 @@ public class InventoryHelper(
);
if (stashObj is null)
{
- _logger.Error(_serverLocalisationService.GetText("inventory-unable_to_find_stash"));
+ logger.Error(serverLocalisationService.GetText("inventory-unable_to_find_stash"));
}
return stashObj?.Template;
@@ -1183,8 +1176,8 @@ public class InventoryHelper(
var itemToMove = sourceItems.FirstOrDefault(item => item.Id == itemId);
if (itemToMove is null)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"inventory-unable_to_find_item_to_move",
itemId
)
@@ -1241,15 +1234,15 @@ public class InventoryHelper(
{
var noMatchingItemMesage =
$"Unable to move item: {moveRequest.Item}, cannot find in inventory";
- _logger.Error(noMatchingItemMesage);
+ logger.Error(noMatchingItemMesage);
errorMessage = noMatchingItemMesage;
return false;
}
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"{moveRequest.Action} item: {moveRequest.Item} from slotid: {matchingInventoryItem.SlotId} to container: {moveRequest.To.Container}"
);
}
@@ -1260,8 +1253,8 @@ public class InventoryHelper(
&& moveRequest.To.Container == "cartridges"
)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"inventory-invalid_move_to_container",
new
{
@@ -1380,7 +1373,7 @@ public class InventoryHelper(
.ToList();
foreach (var message in errors)
{
- _logger.Error(message);
+ logger.Error(message);
}
throw new Exception(
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs
index 108203cf..bc4c1d45 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/ItemHelper.cs
@@ -1439,7 +1439,7 @@ public class ItemHelper(
0
].Filter?.FirstOrDefault();
ammoBox.Add(
- CreateCartridges(ammoBox[0].Id, cartridgeTpl, (int)ammoBoxMaxCartridgeCount, 0)
+ CreateCartridges(ammoBox[0].Id, cartridgeTpl.Value, (int)ammoBoxMaxCartridgeCount, 0)
);
}
@@ -1459,7 +1459,7 @@ public class ItemHelper(
Dictionary> staticAmmoDist,
string? caliber = null,
double minSizePercent = 0.25,
- string? defaultCartridgeTpl = null,
+ MongoId? defaultCartridgeTpl = null,
TemplateItem? weapon = null
)
{
@@ -1504,7 +1504,7 @@ public class ItemHelper(
public void FillMagazineWithCartridge(
List
- magazineWithChildCartridges,
TemplateItem magTemplate,
- string cartridgeTpl,
+ MongoId cartridgeTpl,
double minSizeMultiplier = 0.25
)
{
@@ -1624,7 +1624,7 @@ public class ItemHelper(
protected string? DrawAmmoTpl(
string caliber,
Dictionary> staticAmmoDist,
- string? fallbackCartridgeTpl = null,
+ MongoId? fallbackCartridgeTpl = null,
ICollection? cartridgeWhitelist = null
)
{
@@ -1677,7 +1677,7 @@ public class ItemHelper(
/// Count of cartridges inside parent
/// Location inside parent (e.g. 0, 1)
/// Item
- public Item CreateCartridges(string parentId, string ammoTpl, int stackCount, double location)
+ public Item CreateCartridges(MongoId parentId, MongoId ammoTpl, int stackCount, double location)
{
return new Item
{
@@ -1957,7 +1957,7 @@ public class ItemHelper(
);
}
- public string? GetItemBaseType(MongoId tpl, bool rootOnly = true)
+ public MongoId? GetItemBaseType(MongoId tpl, bool rootOnly = true)
{
var result = GetItem(tpl);
if (!result.Key)
@@ -1992,7 +1992,7 @@ public class ItemHelper(
/// Get a 2D grid of a container's item slots
///
/// Tpl id of the container
- public int[,] GetContainerMapping(string containerTpl)
+ public int[,] GetContainerMapping(MongoId containerTpl)
{
// Get template from db
var containerTemplate = GetItem(containerTpl).Value;
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs
index 6a6c711b..af7215f6 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/NotificationSendHelper.cs
@@ -14,12 +14,12 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class NotificationSendHelper(
- ISptLogger _logger,
- SptWebSocketConnectionHandler _sptWebSocketConnectionHandler,
- SaveServer _saveServer,
- NotificationService _notificationService,
- TimeUtil _timeUtil,
- JsonUtil _jsonUtil
+ ISptLogger logger,
+ SptWebSocketConnectionHandler sptWebSocketConnectionHandler,
+ SaveServer saveServer,
+ NotificationService notificationService,
+ TimeUtil timeUtil,
+ JsonUtil jsonUtil
)
{
///
@@ -27,33 +27,33 @@ public class NotificationSendHelper(
///
/// Session/player id
///
- public void SendMessage(string sessionID, WsNotificationEvent notificationMessage)
+ public void SendMessage(MongoId sessionID, WsNotificationEvent notificationMessage)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
- $"Send message for {sessionID} started, message: {_jsonUtil.Serialize(notificationMessage)}"
+ logger.Debug(
+ $"Send message for {sessionID} started, message: {jsonUtil.Serialize(notificationMessage)}"
);
}
- if (_sptWebSocketConnectionHandler.IsWebSocketConnected(sessionID))
+ if (sptWebSocketConnectionHandler.IsWebSocketConnected(sessionID))
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Send message for {sessionID} websocket available, message being sent"
);
}
- _sptWebSocketConnectionHandler.SendMessage(sessionID, notificationMessage);
+ sptWebSocketConnectionHandler.SendMessage(sessionID, notificationMessage);
}
else
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Send message for {sessionID} websocket not available, queuing into profile"
);
}
- _notificationService.Add(sessionID, notificationMessage);
+ notificationService.Add(sessionID, notificationMessage);
}
}
@@ -65,7 +65,7 @@ public class NotificationSendHelper(
/// Text to send player
/// Underlying type of message being sent
public void SendMessageToPlayer(
- string sessionId,
+ MongoId sessionId,
UserDialogInfo senderDetails,
string messageText,
MessageType messageType
@@ -79,7 +79,7 @@ public class NotificationSendHelper(
Id = new MongoId(),
UserId = dialog.Id,
MessageType = messageType,
- DateTime = _timeUtil.GetTimeStamp(),
+ DateTime = timeUtil.GetTimeStamp(),
Text = messageText,
HasRewards = null,
RewardCollected = null,
@@ -105,7 +105,7 @@ public class NotificationSendHelper(
/// Who is sending the message
/// Dialogue
protected Models.Eft.Profile.Dialogue GetDialog(
- string sessionId,
+ MongoId sessionId,
MessageType messageType,
UserDialogInfo senderDetails
)
@@ -114,7 +114,7 @@ public class NotificationSendHelper(
var dialogKey = senderDetails.Id;
// Get all dialogs with pmcs/traders player has
- var dialogueData = _saveServer.GetProfile(sessionId).DialogueRecords;
+ var dialogueData = saveServer.GetProfile(sessionId).DialogueRecords;
// Ensure empty dialog exists based on sender details passed in
dialogueData.TryAdd(
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs
index c4592359..910f9144 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/PresetHelper.cs
@@ -9,10 +9,10 @@ using SPTarkov.Server.Core.Utils.Cloners;
namespace SPTarkov.Server.Core.Helpers;
[Injectable(InjectionType.Singleton)]
-public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelper, ICloner _cloner)
+public class PresetHelper(DatabaseService databaseService, ItemHelper itemHelper, ICloner cloner)
{
- protected Dictionary _defaultEquipmentPresets;
- protected Dictionary _defaultWeaponPresets;
+ protected Dictionary? _defaultEquipmentPresets;
+ protected Dictionary? _defaultWeaponPresets;
///
/// Preset cache - key = item tpl, value = preset ids
@@ -60,11 +60,11 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
{
if (_defaultWeaponPresets is null)
{
- var tempPresets = _databaseService.GetGlobals().ItemPresets;
+ var tempPresets = databaseService.GetGlobals().ItemPresets;
_defaultWeaponPresets = tempPresets
.Where(p =>
p.Value.Encyclopedia != null
- && _itemHelper.IsOfBaseclass(p.Value.Encyclopedia, BaseClasses.WEAPON)
+ && itemHelper.IsOfBaseclass(p.Value.Encyclopedia, BaseClasses.WEAPON)
)
.ToDictionary();
}
@@ -80,11 +80,11 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
{
if (_defaultEquipmentPresets == null)
{
- var tempPresets = _databaseService.GetGlobals().ItemPresets;
+ var tempPresets = databaseService.GetGlobals().ItemPresets;
_defaultEquipmentPresets = tempPresets
.Where(p =>
p.Value.Encyclopedia != null
- && _itemHelper.ArmorItemCanHoldMods(p.Value.Encyclopedia)
+ && itemHelper.ArmorItemCanHoldMods(p.Value.Encyclopedia)
)
.ToDictionary();
}
@@ -97,14 +97,14 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
///
/// Value to check
/// True = preset exists for this id
- public bool IsPreset(string id)
+ public bool IsPreset(MongoId id)
{
- if (string.IsNullOrEmpty(id))
+ if (id.IsEmpty())
{
return false;
}
- return _databaseService.GetGlobals().ItemPresets.ContainsKey(id);
+ return databaseService.GetGlobals().ItemPresets.ContainsKey(id);
}
/**
@@ -113,9 +113,9 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
* @param baseClass The BaseClasses enum to check against
* @returns True if the preset is of the given base class, false otherwise
*/
- public bool IsPresetBaseClass(string id, MongoId baseClass)
+ public bool IsPresetBaseClass(MongoId id, MongoId baseClass)
{
- return IsPreset(id) && _itemHelper.IsOfBaseclass(GetPreset(id).Encyclopedia, baseClass);
+ return IsPreset(id) && itemHelper.IsOfBaseclass(GetPreset(id).Encyclopedia, baseClass);
}
///
@@ -128,9 +128,9 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
return _lookup.ContainsKey(templateId);
}
- public Preset GetPreset(string id)
+ public Preset GetPreset(MongoId id)
{
- return _cloner.Clone(_databaseService.GetGlobals().ItemPresets[id]);
+ return cloner.Clone(databaseService.GetGlobals().ItemPresets[id]);
}
///
@@ -139,7 +139,7 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
/// List
public List GetAllPresets()
{
- return _cloner.Clone(_databaseService.GetGlobals().ItemPresets.Values.ToList());
+ return cloner.Clone(databaseService.GetGlobals().ItemPresets.Values.ToList());
}
///
@@ -147,7 +147,7 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
///
/// Tpl to get presets for
/// List
- public List GetPresets(string templateId)
+ public List GetPresets(MongoId templateId)
{
// Try adn get preset ids from cache if they exist
if (!_lookup.TryGetValue(templateId, out var presetDetailsForTpl))
@@ -157,9 +157,9 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
}
// Use gathered preset ids to get full preset objects, clone and return
- return _cloner.Clone(
+ return cloner.Clone(
presetDetailsForTpl
- .PresetIds.Select(x => _databaseService.GetGlobals().ItemPresets[x])
+ .PresetIds.Select(x => databaseService.GetGlobals().ItemPresets[x])
.ToList()
);
}
@@ -188,13 +188,13 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
if (!_defaultEquipmentPresets.TryGetValue(presetDetails.DefaultId, out defaultPreset))
{
// Default not found in weapon or equipment, return first preset in list
- return _cloner.Clone(
- _databaseService.GetGlobals().ItemPresets[presetDetails.PresetIds.First()]
+ return cloner.Clone(
+ databaseService.GetGlobals().ItemPresets[presetDetails.PresetIds.First()]
);
}
}
- return _cloner.Clone(defaultPreset);
+ return cloner.Clone(defaultPreset);
}
///
@@ -204,7 +204,7 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
/// tpl mongoid
public MongoId GetBaseItemTpl(MongoId presetId)
{
- if (!_databaseService.GetGlobals().ItemPresets.TryGetValue(presetId, out var preset))
+ if (!databaseService.GetGlobals().ItemPresets.TryGetValue(presetId, out var preset))
{
// No preset exists
return "";
@@ -236,6 +236,6 @@ public class PresetHelper(DatabaseService _databaseService, ItemHelper _itemHelp
: [tpl];
// Get price of tpls
- return _itemHelper.GetItemAndChildrenPrice(tpls);
+ return itemHelper.GetItemAndChildrenPrice(tpls);
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs
index 7a7c1dbc..87e406fc 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/PrestigeHelper.cs
@@ -1,5 +1,6 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Enums;
@@ -10,32 +11,15 @@ using SPTarkov.Server.Core.Utils;
namespace SPTarkov.Server.Core.Helpers;
[Injectable]
-public class PrestigeHelper
+public class PrestigeHelper(
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ DatabaseService databaseService,
+ MailSendService mailSendService,
+ ProfileHelper profileHelper,
+ RewardHelper rewardHelper
+)
{
- protected DatabaseService _databaseService;
- protected ISptLogger _logger;
- protected MailSendService _mailSendService;
- protected ProfileHelper _profileHelper;
- protected RewardHelper _rewardHelper;
- protected TimeUtil _timeUtil;
-
- public PrestigeHelper(
- ISptLogger logger,
- TimeUtil timeUtil,
- DatabaseService databaseService,
- MailSendService mailSendService,
- ProfileHelper profileHelper,
- RewardHelper rewardHelper
- )
- {
- _logger = logger;
- _timeUtil = timeUtil;
- _databaseService = databaseService;
- _mailSendService = mailSendService;
- _profileHelper = profileHelper;
- _rewardHelper = rewardHelper;
- }
-
public void ProcessPendingPrestige(
SptProfile oldProfile,
SptProfile newProfile,
@@ -92,23 +76,22 @@ public class PrestigeHelper
// Add "Prestigious" achievement
if (!newProfile.CharacterData.PmcData.Achievements.ContainsKey("676091c0f457869a94017a23"))
{
- _rewardHelper.AddAchievementToProfile(newProfile, "676091c0f457869a94017a23");
+ rewardHelper.AddAchievementToProfile(newProfile, "676091c0f457869a94017a23");
}
// Assumes Prestige data is in descending order
- var currentPrestigeData = _databaseService.GetTemplates().Prestige.Elements[
+ var currentPrestigeData = databaseService.GetTemplates().Prestige.Elements[
indexOfPrestigeObtained
];
- var prestigeRewards = _databaseService
+ var prestigeRewards = databaseService
.GetTemplates()
.Prestige.Elements.Slice(0, indexOfPrestigeObtained + 1)
.SelectMany(prestige => prestige.Rewards);
- AddPrestigeRewardsToProfile(sessionId, newProfile, prestigeRewards);
+ AddPrestigeRewardsToProfile(sessionId.Value, newProfile, prestigeRewards);
// Flag profile as having achieved this prestige level
- newProfile.CharacterData.PmcData.Prestige[currentPrestigeData.Id] =
- _timeUtil.GetTimeStamp();
+ newProfile.CharacterData.PmcData.Prestige[currentPrestigeData.Id] = timeUtil.GetTimeStamp();
var itemsToTransfer = new List- ();
@@ -120,7 +103,7 @@ public class PrestigeHelper
);
if (item is null)
{
- _logger.Error(
+ logger.Error(
$"Unable to find item with id: {transferRequest.Id} in profile: {sessionId}, skipping"
);
continue;
@@ -129,13 +112,13 @@ public class PrestigeHelper
itemsToTransfer.Add(item);
}
- _mailSendService.SendSystemMessageToPlayer(sessionId.Value, "", itemsToTransfer, 31536000);
+ mailSendService.SendSystemMessageToPlayer(sessionId.Value, "", itemsToTransfer, 31536000);
newProfile.CharacterData.PmcData.Info.PrestigeLevel = prestige.PrestigeLevel;
}
private void AddPrestigeRewardsToProfile(
- string sessionId,
+ MongoId sessionId,
SptProfile newProfile,
IEnumerable rewards
)
@@ -148,7 +131,7 @@ public class PrestigeHelper
{
case RewardType.CustomizationDirect:
{
- _profileHelper.AddHideoutCustomisationUnlock(
+ profileHelper.AddHideoutCustomisationUnlock(
newProfile,
reward,
CustomisationSource.PRESTIGE
@@ -158,7 +141,7 @@ public class PrestigeHelper
case RewardType.Skill:
if (Enum.TryParse(reward.Target, out SkillTypes result))
{
- _profileHelper.AddSkillPointsToPlayer(
+ profileHelper.AddSkillPointsToPlayer(
newProfile.CharacterData.PmcData,
result,
reward.Value
@@ -166,7 +149,7 @@ public class PrestigeHelper
}
else
{
- _logger.Error($"Unable to parse reward Target to Enum: {reward.Target}");
+ logger.Error($"Unable to parse reward Target to Enum: {reward.Target}");
}
break;
@@ -181,14 +164,14 @@ public class PrestigeHelper
break;
}
default:
- _logger.Error($"Unhandled prestige reward type: {reward.Type}");
+ logger.Error($"Unhandled prestige reward type: {reward.Type}");
break;
}
}
if (itemsToSend.Count > 0)
{
- _mailSendService.SendSystemMessageToPlayer(sessionId, "", itemsToSend, 31536000);
+ mailSendService.SendSystemMessageToPlayer(sessionId, "", itemsToSend, 31536000);
}
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs
index b7e11a4b..3509a3d2 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/ProfileHelper.cs
@@ -18,14 +18,14 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class ProfileHelper(
- ISptLogger _logger,
- ICloner _cloner,
- SaveServer _saveServer,
- DatabaseService _databaseService,
- Watermark _watermark,
- TimeUtil _timeUtil,
- ServerLocalisationService _serverLocalisationService,
- ConfigServer _configServer
+ ISptLogger logger,
+ ICloner cloner,
+ SaveServer saveServer,
+ DatabaseService databaseService,
+ Watermark watermark,
+ TimeUtil timeUtil,
+ ServerLocalisationService serverLocalisationService,
+ ConfigServer configServer
)
{
protected static readonly FrozenSet _gameEditionsWithFreeRefresh =
@@ -33,8 +33,7 @@ public class ProfileHelper(
"edge_of_darkness",
"unheard_edition",
];
- protected readonly InventoryConfig _inventoryConfig =
- _configServer.GetConfig();
+ protected readonly InventoryConfig _inventoryConfig = configServer.GetConfig();
///
/// Remove/reset a completed quest condition from players profile quest data
@@ -64,7 +63,7 @@ public class ProfileHelper(
/// Dictionary of profiles
public Dictionary GetProfiles()
{
- return _saveServer.GetProfiles();
+ return saveServer.GetProfiles();
}
///
@@ -81,7 +80,7 @@ public class ProfileHelper(
return output;
}
- var FullProfileClone = _cloner.Clone(GetFullProfile(sessionId));
+ var FullProfileClone = cloner.Clone(GetFullProfile(sessionId));
// Sanitize any data the client can not receive
SanitizeProfileForClient(FullProfileClone);
@@ -115,7 +114,7 @@ public class ProfileHelper(
/// True if already in use
public bool IsNicknameTaken(ValidateNicknameRequestData nicknameRequest, MongoId sessionID)
{
- var allProfiles = _saveServer.GetProfiles().Values;
+ var allProfiles = saveServer.GetProfiles().Values;
// Find a profile that doesn't have same session id but has same name
return allProfiles.Any(p =>
@@ -153,7 +152,7 @@ public class ProfileHelper(
}
else
{
- _logger.Error($"Profile {sessionID} does not exist");
+ logger.Error($"Profile {sessionID} does not exist");
}
}
@@ -162,12 +161,12 @@ public class ProfileHelper(
///
/// Profile id to find
/// PmcData
- public PmcData? GetProfileByPmcId(string pmcId)
+ public PmcData? GetProfileByPmcId(MongoId pmcId)
{
- return _saveServer
+ return saveServer
.GetProfiles()
.Values.First(p => p.CharacterData?.PmcData?.Id == pmcId)
- .CharacterData.PmcData;
+ .CharacterData?.PmcData;
}
///
@@ -178,7 +177,7 @@ public class ProfileHelper(
public int? GetExperience(int level)
{
var playerLevel = level;
- var expTable = _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable;
+ var expTable = databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable;
int? exp = 0;
if (playerLevel >= expTable.Length) // make sure to not go out of bounds
@@ -200,7 +199,7 @@ public class ProfileHelper(
/// Max level
public int GetMaxLevel()
{
- return _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable.Length - 1;
+ return databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable.Length - 1;
}
///
@@ -211,7 +210,7 @@ public class ProfileHelper(
{
return new Spt
{
- Version = _watermark.GetVersionTag(true),
+ Version = watermark.GetVersionTag(true),
Mods = [],
ReceivedGifts = [],
BlacklistedItemTemplates = [],
@@ -230,7 +229,7 @@ public class ProfileHelper(
/// SptProfile object
public SptProfile? GetFullProfile(MongoId sessionID)
{
- return _saveServer.ProfileExists(sessionID) ? _saveServer.GetProfile(sessionID) : null;
+ return saveServer.ProfileExists(sessionID) ? saveServer.GetProfile(sessionID) : null;
}
///
@@ -243,13 +242,10 @@ public class ProfileHelper(
var check = int.TryParse(accountId, out var aid);
if (!check)
{
- _logger.Error($"Account {accountId} does not exist");
+ logger.Error($"Account {accountId} does not exist");
}
- return _saveServer
- .GetProfiles()
- .FirstOrDefault(p => p.Value?.ProfileInfo?.Aid == aid)
- .Value;
+ return saveServer.GetProfiles().FirstOrDefault(p => p.Value?.ProfileInfo?.Aid == aid).Value;
}
///
@@ -308,7 +304,7 @@ public class ProfileHelper(
/// UNUSED?
public bool IsPlayer(MongoId userId)
{
- return _saveServer.ProfileExists(userId);
+ return saveServer.ProfileExists(userId);
}
///
@@ -318,7 +314,7 @@ public class ProfileHelper(
/// IPmcData object
public PmcData? GetScavProfile(MongoId sessionID)
{
- return _saveServer.GetProfile(sessionID).CharacterData?.ScavData;
+ return saveServer.GetProfile(sessionID).CharacterData?.ScavData;
}
///
@@ -362,7 +358,7 @@ public class ProfileHelper(
/// TODO: logic doesn't feel right to have IsWiped being nullable
protected bool IsWiped(MongoId sessionID)
{
- return _saveServer.GetProfile(sessionID)?.ProfileInfo?.IsWiped ?? false;
+ return saveServer.GetProfile(sessionID)?.ProfileInfo?.IsWiped ?? false;
}
///
@@ -417,7 +413,7 @@ public class ProfileHelper(
new ReceivedGift
{
GiftId = giftId,
- TimestampLastAccepted = _timeUtil.GetTimeStamp(),
+ TimestampLastAccepted = timeUtil.GetTimeStamp(),
Current = 1,
}
);
@@ -435,9 +431,9 @@ public class ProfileHelper(
var profile = GetFullProfile(playerId);
if (profile == null)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Unable to gift {giftId}, Profile: {playerId} does not exist");
+ logger.Debug($"Unable to gift {giftId}, Profile: {playerId} does not exist");
}
return false;
@@ -486,7 +482,7 @@ public class ProfileHelper(
var profileSkill = profileSkills.FirstOrDefault(s => s.Id == skill);
if (profileSkill == null)
{
- _logger.Error(_serverLocalisationService.GetText("quest-no_skill_found", skill));
+ logger.Error(serverLocalisationService.GetText("quest-no_skill_found", skill));
return false;
}
@@ -509,8 +505,8 @@ public class ProfileHelper(
{
if (pointsToAddToSkill < 0D)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"player-attempt_to_increment_skill_with_negative_value",
skill
)
@@ -521,7 +517,7 @@ public class ProfileHelper(
var profileSkills = pmcProfile?.Skills?.Common;
if (profileSkills == null)
{
- _logger.Warning(
+ logger.Warning(
$"Unable to add: {pointsToAddToSkill} points to {skill}, Profile has no skills"
);
return;
@@ -530,13 +526,13 @@ public class ProfileHelper(
var profileSkill = profileSkills.FirstOrDefault(s => s.Id == skill);
if (profileSkill == null)
{
- _logger.Error(_serverLocalisationService.GetText("quest-no_skill_found", skill));
+ logger.Error(serverLocalisationService.GetText("quest-no_skill_found", skill));
return;
}
if (useSkillProgressRateMultiplier)
{
- var skillProgressRate = _databaseService
+ var skillProgressRate = databaseService
.GetGlobals()
.Configuration.SkillsSettings.SkillProgressRate;
pointsToAddToSkill *= skillProgressRate;
@@ -553,7 +549,7 @@ public class ProfileHelper(
profileSkill.PointsEarnedDuringSession ??= 0;
profileSkill.PointsEarnedDuringSession += pointsToAddToSkill;
- profileSkill.LastAccess = _timeUtil.GetTimeStamp();
+ profileSkill.LastAccess = timeUtil.GetTimeStamp();
}
///
@@ -619,7 +615,7 @@ public class ProfileHelper(
var pockets = pmcProfile.Inventory.Items.Where(i => i.SlotId == "Pockets");
if (!pockets.Any())
{
- _logger.Error(
+ logger.Error(
$"Unable to replace profile: {pmcProfile.Id} pocket tpl with: {newPocketTpl} as Pocket item could not be found."
);
return;
@@ -647,7 +643,7 @@ public class ProfileHelper(
if (itemAndChildren?.Count > 0)
{
// To get the client to actually see the items, we set the main item's parent to null, so it's treated as a root item
- var clonedItems = _cloner.Clone(itemAndChildren);
+ var clonedItems = cloner.Clone(itemAndChildren);
clonedItems.First().ParentId = null;
fullFavorites.AddRange(clonedItems);
@@ -666,13 +662,13 @@ public class ProfileHelper(
if (fullProfile?.CustomisationUnlocks?.Any(u => u.Id == reward.Target) ?? false)
{
- _logger.Warning(
+ logger.Warning(
$"Profile: {fullProfile.ProfileInfo.ProfileId} already has hideout customisation reward: {reward.Target}, skipping"
);
return;
}
- var customisationTemplateDb = _databaseService.GetTemplates().Customization;
+ var customisationTemplateDb = databaseService.GetTemplates().Customization;
var matchingCustomisation = customisationTemplateDb.GetValueOrDefault(reward.Target, null);
if (matchingCustomisation is not null)
@@ -711,7 +707,7 @@ public class ProfileHelper(
rewardToStore.Type = CustomisationType.SHOOTING_RANGE_MARK;
break;
default:
- _logger.Error(
+ logger.Error(
$"Unhandled customisation unlock type: {matchingCustomisation.Parent} not added to profile"
);
return;
@@ -729,7 +725,7 @@ public class ProfileHelper(
///
public TemplateSide GetProfileTemplateForSide(string accountEdition, string side)
{
- var profileTemplates = _databaseService.GetProfileTemplates();
+ var profileTemplates = databaseService.GetProfileTemplates();
// Get matching profile 'type' e.g. 'standard'
profileTemplates.TryGetValue(accountEdition, out var matchingProfileTemplate);
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs
index 0abab336..5564f238 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestHelper.cs
@@ -22,20 +22,20 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable(InjectionType.Singleton)]
public class QuestHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- ItemHelper _itemHelper,
- DatabaseService _databaseService,
- EventOutputHolder _eventOutputHolder,
- LocaleService _localeService,
- ProfileHelper _profileHelper,
- QuestRewardHelper _questRewardHelper,
- RewardHelper _rewardHelper,
- ServerLocalisationService _serverLocalisationService,
- SeasonalEventService _seasonalEventService,
- MailSendService _mailSendService,
- ConfigServer _configServer,
- ICloner _cloner
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ ItemHelper itemHelper,
+ DatabaseService databaseService,
+ EventOutputHolder eventOutputHolder,
+ LocaleService localeService,
+ ProfileHelper profileHelper,
+ QuestRewardHelper questRewardHelper,
+ RewardHelper rewardHelper,
+ ServerLocalisationService serverLocalisationService,
+ SeasonalEventService seasonalEventService,
+ MailSendService mailSendService,
+ ConfigServer configServer,
+ ICloner cloner
)
{
protected readonly HashSet _startedOrAvailToFinish =
@@ -43,7 +43,7 @@ public class QuestHelper(
QuestStatusEnum.Started,
QuestStatusEnum.AvailableForFinish,
];
- protected readonly QuestConfig _questConfig = _configServer.GetConfig();
+ protected readonly QuestConfig _questConfig = configServer.GetConfig();
private Dictionary>? _sellToTraderQuestConditionCache;
///
@@ -85,8 +85,8 @@ public class QuestHelper(
case "=":
return playerLevel == conditionValue;
default:
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"quest-unable_to_find_compare_condition",
condition.CompareMethod
)
@@ -147,16 +147,16 @@ public class QuestHelper(
{
// Calculate how much progress to add, limiting it to the current level max progress
var currentLevelRemainingProgress = (currentLevel + 1) * 10 - startingLevelProgress;
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"currentLevelRemainingProgress: {currentLevelRemainingProgress}");
+ logger.Debug($"currentLevelRemainingProgress: {currentLevelRemainingProgress}");
}
var progressToAdd = Math.Min(remainingProgress, currentLevelRemainingProgress ?? 0);
var adjustedProgressToAdd = 10 / (currentLevel + 1) * progressToAdd;
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Progress To Add: {progressToAdd} Adjusted for level: {adjustedProgressToAdd}"
);
}
@@ -185,7 +185,7 @@ public class QuestHelper(
public string GetQuestNameFromLocale(string questId)
{
var questNameKey = $"{questId} name";
- return _localeService.GetLocaleDb().GetValueOrDefault(questNameKey, "UNKNOWN");
+ return localeService.GetLocaleDb().GetValueOrDefault(questNameKey, "UNKNOWN");
}
///
@@ -205,8 +205,8 @@ public class QuestHelper(
)
)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"quest-unable_to_find_trader_in_profile",
questProperties.Target
)
@@ -238,8 +238,8 @@ public class QuestHelper(
)
)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"quest-unable_to_find_trader_in_profile",
questProperties.Target
)
@@ -278,8 +278,8 @@ public class QuestHelper(
return current == required;
default:
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"quest-compare_operator_unhandled",
compareMethod
)
@@ -309,7 +309,7 @@ public class QuestHelper(
AcceptQuestRequestData acceptedQuest
)
{
- var currentTimestamp = _timeUtil.GetTimeStamp();
+ var currentTimestamp = timeUtil.GetTimeStamp();
var existingQuest = pmcData.Quests.FirstOrDefault(q => q.QId == acceptedQuest.QuestId);
if (existingQuest is not null)
{
@@ -340,8 +340,8 @@ public class QuestHelper(
var questDbData = GetQuestFromDb(acceptedQuest.QuestId, pmcData);
if (questDbData is null)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"quest-unable_to_find_quest_in_db",
new { questId = acceptedQuest.QuestId, questType = acceptedQuest.Type }
)
@@ -374,12 +374,12 @@ public class QuestHelper(
/// Session/Player id
/// Quests accessible to player including newly unlocked quests now quest (startedQuestId) was started
public List GetNewlyAccessibleQuestsWhenStartingQuest(
- string startedQuestId,
- string sessionID
+ MongoId startedQuestId,
+ MongoId sessionID
)
{
// Get quest acceptance data from profile
- var profile = _profileHelper.GetPmcProfile(sessionID);
+ var profile = profileHelper.GetPmcProfile(sessionID);
var startedQuestInProfile = profile.Quests.FirstOrDefault(profileQuest =>
profileQuest.QId == startedQuestId
);
@@ -479,15 +479,15 @@ public class QuestHelper(
///
/// Quest to check
/// true = show to player
- public bool ShowEventQuestToPlayer(string questId)
+ public bool ShowEventQuestToPlayer(MongoId questId)
{
- var isChristmasEventActive = _seasonalEventService.ChristmasEventEnabled();
- var isHalloweenEventActive = _seasonalEventService.HalloweenEventEnabled();
+ var isChristmasEventActive = seasonalEventService.ChristmasEventEnabled();
+ var isHalloweenEventActive = seasonalEventService.HalloweenEventEnabled();
// Not christmas + quest is for christmas
if (
!isChristmasEventActive
- && _seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Christmas)
+ && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Christmas)
)
{
return false;
@@ -496,7 +496,7 @@ public class QuestHelper(
// Not halloween + quest is for halloween
if (
!isHalloweenEventActive
- && _seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Halloween)
+ && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.Halloween)
)
{
return false;
@@ -505,7 +505,7 @@ public class QuestHelper(
// Should non-season event quests be shown to player
if (
!_questConfig.ShowNonSeasonalEventQuests
- && _seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.None)
+ && seasonalEventService.IsQuestRelatedToEvent(questId, SeasonalEventType.None)
)
{
return false;
@@ -520,7 +520,7 @@ public class QuestHelper(
/// Player side (usec/bear)
/// QuestId to check
/// true = quest isn't for player
- public bool QuestIsForOtherSide(string playerSide, string questId)
+ public bool QuestIsForOtherSide(string playerSide, MongoId questId)
{
var isUsec = string.Equals(playerSide, "usec", StringComparison.OrdinalIgnoreCase);
if (isUsec && _questConfig.BearOnlyQuests.Contains(questId))
@@ -546,9 +546,9 @@ public class QuestHelper(
/// Game version to check against
/// Quest id to check
/// True = Quest should not be visible to game version
- protected bool QuestIsProfileBlacklisted(string gameVersion, string questId)
+ protected bool QuestIsProfileBlacklisted(string gameVersion, MongoId questId)
{
- var questBlacklist = _questConfig.ProfileBlacklist?.GetValueOrDefault(gameVersion);
+ var questBlacklist = _questConfig.ProfileBlacklist.GetValueOrDefault(gameVersion);
if (questBlacklist is null)
{
// Not blacklisted
@@ -565,7 +565,7 @@ public class QuestHelper(
/// Game version to check against
/// Quest id to check
/// True = Quest should be visible to game version
- protected bool QuestIsProfileWhitelisted(string gameVersion, string questId)
+ protected bool QuestIsProfileWhitelisted(string gameVersion, MongoId questId)
{
var questBlacklist = _questConfig.ProfileBlacklist.GetValueOrDefault(gameVersion);
if (questBlacklist is null)
@@ -583,9 +583,9 @@ public class QuestHelper(
/// Id of the quest failed by player
/// Session/Player id
/// List of Quest
- public List FailedUnlocked(string failedQuestId, string sessionId)
+ public List FailedUnlocked(MongoId failedQuestId, MongoId sessionId)
{
- var profile = _profileHelper.GetPmcProfile(sessionId);
+ var profile = profileHelper.GetPmcProfile(sessionId);
var profileQuest = profile.Quests.FirstOrDefault(x => x.QId == failedQuestId);
var quests = GetQuestsFromDb()
@@ -626,7 +626,7 @@ public class QuestHelper(
PmcData pmcData,
MongoId itemId,
int newStackSize,
- string sessionID,
+ MongoId sessionID,
ItemEventRouterResponse output
)
{
@@ -634,8 +634,8 @@ public class QuestHelper(
var inventoryItemIndex = pmcData.Inventory.Items.FindIndex(item => item.Id == itemId);
if (inventoryItemIndex < 0)
{
- _logger.Error(
- _serverLocalisationService.GetText("quest-item_not_found_in_inventory", itemId)
+ logger.Error(
+ serverLocalisationService.GetText("quest-item_not_found_in_inventory", itemId)
);
return;
@@ -644,7 +644,7 @@ public class QuestHelper(
if (newStackSize > 0)
{
var item = pmcData.Inventory.Items[inventoryItemIndex];
- _itemHelper.AddUpdObjectToItem(item);
+ itemHelper.AddUpdObjectToItem(item);
item.Upd.StackObjectsCount = newStackSize;
@@ -680,7 +680,7 @@ public class QuestHelper(
/// Quest
public Quest RemoveQuestConditionsExceptLevel(Quest quest)
{
- var updatedQuest = _cloner.Clone(quest);
+ var updatedQuest = cloner.Clone(quest);
updatedQuest.Conditions.AvailableForStart = updatedQuest
.Conditions.AvailableForStart.Where(q => q.ConditionType == "Level")
.ToList();
@@ -720,9 +720,9 @@ public class QuestHelper(
}
}
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"GetSellToTraderQuests found: {result.Count} quests");
+ logger.Debug($"GetSellToTraderQuests found: {result.Count} quests");
}
return result;
@@ -768,8 +768,8 @@ public class QuestHelper(
// Condition is in profile, but quest doesn't exist in database
if (!SellToTraderQuestConditionCache.TryGetValue(counter.SourceId, out var conditions))
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"quest_unable_to_find_quest_in_db_no_type",
counter.SourceId
)
@@ -812,8 +812,8 @@ public class QuestHelper(
);
if (itemDetails is null)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"trader-unable_to_find_inventory_item_for_selltotrader_counter",
taskCounter.SourceId
)
@@ -840,15 +840,15 @@ public class QuestHelper(
public void FailQuest(
PmcData pmcData,
FailQuestRequestData failRequest,
- string sessionID,
+ MongoId sessionID,
ItemEventRouterResponse? output = null
)
{
// Prepare response to send back to client
- var updatedOutput = output ?? _eventOutputHolder.GetOutput(sessionID);
+ var updatedOutput = output ?? eventOutputHolder.GetOutput(sessionID);
UpdateQuestState(pmcData, QuestStatusEnum.Fail, failRequest.QuestId);
- var questRewards = _questRewardHelper.ApplyQuestReward(
+ var questRewards = questRewardHelper.ApplyQuestReward(
pmcData,
failRequest.QuestId,
QuestStatusEnum.Fail,
@@ -869,13 +869,13 @@ public class QuestHelper(
{
if (quest.FailMessageText.Trim().Any())
{
- _mailSendService.SendLocalisedNpcMessageToPlayer(
+ mailSendService.SendLocalisedNpcMessageToPlayer(
sessionID,
quest?.TraderId ?? matchingRepeatableQuest?.TraderId,
MessageType.QuestFail,
quest.FailMessageText,
questRewards.ToList(),
- _timeUtil.GetHoursAsSeconds((int)GetMailItemRedeemTimeHoursForProfile(pmcData))
+ timeUtil.GetHoursAsSeconds((int)GetMailItemRedeemTimeHoursForProfile(pmcData))
);
}
}
@@ -892,7 +892,7 @@ public class QuestHelper(
/// List of Quest objects
public List GetQuestsFromDb()
{
- return _databaseService.GetQuests().Values.ToList();
+ return databaseService.GetQuests().Values.ToList();
}
///
@@ -901,10 +901,10 @@ public class QuestHelper(
/// Id of quest to find
/// Player profile
/// Found quest
- public Quest? GetQuestFromDb(string questId, PmcData pmcData)
+ public Quest? GetQuestFromDb(MongoId questId, PmcData pmcData)
{
// Maybe a repeatable quest?
- if (_databaseService.GetQuests().TryGetValue(questId, out var quest))
+ if (databaseService.GetQuests().TryGetValue(questId, out var quest))
{
return quest;
}
@@ -945,7 +945,7 @@ public class QuestHelper(
/// Locale Id from locale db
public string GetQuestLocaleIdFromDb(string questMessageId)
{
- var locale = _localeService.GetLocaleDb();
+ var locale = localeService.GetLocaleDb();
return locale.GetValueOrDefault(questMessageId, null);
}
@@ -955,14 +955,14 @@ public class QuestHelper(
/// Profile to update
/// New state the quest should be in
/// Id of the quest to alter the status of
- protected void UpdateQuestState(PmcData pmcData, QuestStatusEnum newQuestState, string questId)
+ protected void UpdateQuestState(PmcData pmcData, QuestStatusEnum newQuestState, MongoId questId)
{
// Find quest in profile, update status to desired status
var questToUpdate = pmcData.Quests.FirstOrDefault(quest => quest.QId == questId);
if (questToUpdate is not null)
{
questToUpdate.Status = newQuestState;
- questToUpdate.StatusTimers[newQuestState] = _timeUtil.GetTimeStamp();
+ questToUpdate.StatusTimers[newQuestState] = timeUtil.GetTimeStamp();
}
}
@@ -972,12 +972,12 @@ public class QuestHelper(
/// Profile to update
/// New state the quest should be in
/// Id of the quest to alter the status of
- public void ResetQuestState(PmcData pmcData, QuestStatusEnum newQuestState, string questId)
+ public void ResetQuestState(PmcData pmcData, QuestStatusEnum newQuestState, MongoId questId)
{
var questToUpdate = pmcData.Quests?.FirstOrDefault(quest => quest.QId == questId);
if (questToUpdate is not null)
{
- var currentTimestamp = _timeUtil.GetTimeStamp();
+ var currentTimestamp = timeUtil.GetTimeStamp();
questToUpdate.Status = newQuestState;
@@ -1022,9 +1022,9 @@ public class QuestHelper(
var questInDb = allQuests.FirstOrDefault(x => x.Id == questId);
if (questInDb is null)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Unable to find quest: {questId} in db, cannot get 'FindItem' condition, skipping"
);
}
@@ -1055,7 +1055,7 @@ public class QuestHelper(
public void AddAllQuestsToProfile(PmcData pmcProfile, List statuses)
{
// Iterate over all quests in db
- var quests = _databaseService.GetQuests();
+ var quests = databaseService.GetQuests();
foreach (var (key, questData) in quests)
{
// Quest from db matches quests in profile, skip
@@ -1068,13 +1068,13 @@ public class QuestHelper(
var statusesDict = new Dictionary();
foreach (var status in statuses)
{
- statusesDict.Add(status, _timeUtil.GetTimeStamp());
+ statusesDict.Add(status, timeUtil.GetTimeStamp());
}
var questRecordToAdd = new QuestStatus
{
QId = key,
- StartTime = _timeUtil.GetTimeStamp(),
+ StartTime = timeUtil.GetTimeStamp(),
Status = statuses[^1], // Get last status in list as currently active status
StatusTimers = statusesDict,
CompletedConditions = [],
@@ -1102,7 +1102,7 @@ public class QuestHelper(
///
/// Id of quest to remove
/// Collection of quests to remove id from
- public void FindAndRemoveQuestFromArrayIfExists(string questId, List quests)
+ public void FindAndRemoveQuestFromArrayIfExists(MongoId questId, List quests)
{
quests.RemoveAll(quest => quest.QId == questId);
}
@@ -1112,7 +1112,7 @@ public class QuestHelper(
///
/// quest completed id
/// Collection of Quest objects
- public List GetQuestsFailedByCompletingQuest(string completedQuestId)
+ public List GetQuestsFailedByCompletingQuest(MongoId completedQuestId)
{
var questsInDb = GetQuestsFromDb();
return questsInDb
@@ -1163,29 +1163,29 @@ public class QuestHelper(
public ItemEventRouterResponse CompleteQuest(
PmcData pmcData,
CompleteQuestRequestData request,
- string sessionID
+ MongoId sessionID
)
{
- var completeQuestResponse = _eventOutputHolder.GetOutput(sessionID);
+ var completeQuestResponse = eventOutputHolder.GetOutput(sessionID);
if (!completeQuestResponse.ProfileChanges.TryGetValue(sessionID, out var profileChanges))
{
- _logger.Error($"Unable to get profile changes for {sessionID}");
+ logger.Error($"Unable to get profile changes for {sessionID}");
return completeQuestResponse;
}
// Clone of players quest status prior to any changes
- var preCompleteProfileQuestsClone = _cloner.Clone(pmcData.Quests);
+ var preCompleteProfileQuestsClone = cloner.Clone(pmcData.Quests);
// Id of quest player just completed
var completedQuestId = request.QuestId;
// Keep a copy of player quest statuses from their profile (Must be gathered prior to applyQuestReward() & failQuests())
- var clientQuestsClone = _cloner.Clone(GetClientQuests(sessionID));
+ var clientQuestsClone = cloner.Clone(GetClientQuests(sessionID));
const QuestStatusEnum newQuestState = QuestStatusEnum.Success;
UpdateQuestState(pmcData, newQuestState, completedQuestId);
- var questRewards = _questRewardHelper.ApplyQuestReward(
+ var questRewards = questRewardHelper.ApplyQuestReward(
pmcData,
request.QuestId,
newQuestState,
@@ -1250,13 +1250,13 @@ public class QuestHelper(
///
/// session/player id
/// Collection of quests
- public List GetClientQuests(string sessionID)
+ public List GetClientQuests(MongoId sessionID)
{
List questsToShowPlayer = [];
- var profile = _profileHelper.GetPmcProfile(sessionID);
+ var profile = profileHelper.GetPmcProfile(sessionID);
if (profile is null)
{
- _logger.Error($"Profile {sessionID} not found, unable to return quests");
+ logger.Error($"Profile {sessionID} not found, unable to return quests");
return [];
}
@@ -1293,9 +1293,9 @@ public class QuestHelper(
// Player can use trader mods then remove them, leaving quests behind
if (!profile.TradersInfo.ContainsKey(quest.TraderId))
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Unable to show quest: {quest.QuestName} as its for a trader: {quest.TraderId} that no longer exists."
);
}
@@ -1358,10 +1358,10 @@ public class QuestHelper(
out var previousQuestCompleteTime
);
var unlockTime = previousQuestCompleteTime + conditionToFulfil.AvailableAfter;
- if (unlockTime > _timeUtil.GetTimeStamp())
+ if (unlockTime > timeUtil.GetTimeStamp())
{
- _logger.Debug(
- $"Quest {quest.QuestName} is locked for another: {unlockTime - _timeUtil.GetTimeStamp()} seconds"
+ logger.Debug(
+ $"Quest {quest.QuestName} is locked for another: {unlockTime - timeUtil.GetTimeStamp()} seconds"
);
}
}
@@ -1415,7 +1415,7 @@ public class QuestHelper(
/// Collection of Quest objects with the rewards filtered correctly for the game version
protected List UpdateQuestsForGameEdition(List quests, string gameVersion)
{
- var modifiedQuests = _cloner.Clone(quests);
+ var modifiedQuests = cloner.Clone(quests);
foreach (var quest in modifiedQuests)
{
// Remove any reward that doesn't pass the game edition check
@@ -1428,7 +1428,7 @@ public class QuestHelper(
}
propsAsDict[rewardType.Key] = ((List)propsAsDict[rewardType.Key])
- .Where(reward => _rewardHelper.RewardIsForGameEdition(reward, gameVersion))
+ .Where(reward => rewardHelper.RewardIsForGameEdition(reward, gameVersion))
.ToList();
}
}
@@ -1443,7 +1443,7 @@ public class QuestHelper(
///
/// Collection of Quest objects
protected List GetQuestsFromProfileFailedByCompletingQuest(
- string completedQuestId,
+ MongoId completedQuestId,
PmcData pmcProfile
)
{
@@ -1511,7 +1511,7 @@ public class QuestHelper(
* @param output Client output
*/
protected void FailQuests(
- string sessionID,
+ MongoId sessionID,
PmcData pmcData,
List questsToFail,
ItemEventRouterResponse output
@@ -1555,11 +1555,11 @@ public class QuestHelper(
statusTimers.Add(QuestStatusEnum.Fail, 0);
}
- statusTimers[QuestStatusEnum.Fail] = _timeUtil.GetTimeStamp();
+ statusTimers[QuestStatusEnum.Fail] = timeUtil.GetTimeStamp();
var questData = new QuestStatus
{
QId = questToFail.Id,
- StartTime = _timeUtil.GetTimeStamp(),
+ StartTime = timeUtil.GetTimeStamp(),
StatusTimers = statusTimers,
Status = QuestStatusEnum.Fail,
};
@@ -1576,21 +1576,21 @@ public class QuestHelper(
* @param questRewards Rewards given to player
*/
protected void SendSuccessDialogMessageOnQuestComplete(
- string sessionID,
+ MongoId sessionID,
PmcData pmcData,
- string completedQuestId,
+ MongoId completedQuestId,
List
- questRewards
)
{
var quest = GetQuestFromDb(completedQuestId, pmcData);
- _mailSendService.SendLocalisedNpcMessageToPlayer(
+ mailSendService.SendLocalisedNpcMessageToPlayer(
sessionID,
quest.TraderId,
MessageType.QuestSuccess,
quest.SuccessMessageText,
questRewards,
- _timeUtil.GetHoursAsSeconds((int)GetMailItemRedeemTimeHoursForProfile(pmcData))
+ timeUtil.GetHoursAsSeconds((int)GetMailItemRedeemTimeHoursForProfile(pmcData))
);
}
@@ -1603,7 +1603,7 @@ public class QuestHelper(
protected void AddTimeLockedQuestsToProfile(
PmcData pmcData,
List quests,
- string completedQuestId
+ MongoId completedQuestId
)
{
// Iterate over quests, look for quests with right criteria
@@ -1622,7 +1622,7 @@ public class QuestHelper(
{
// Now + wait time
var availableAfterTimestamp =
- _timeUtil.GetTimeStamp() + nextQuestWaitCondition.AvailableAfter;
+ timeUtil.GetTimeStamp() + nextQuestWaitCondition.AvailableAfter;
// Update quest in profile with status of AvailableAfter
var existingQuestInProfile = pmcData.Quests.FirstOrDefault(x => x.QId == quest.Id);
@@ -1644,7 +1644,7 @@ public class QuestHelper(
Status = QuestStatusEnum.AvailableAfter,
StatusTimers = new Dictionary
{
- { QuestStatusEnum.AvailableAfter, _timeUtil.GetTimeStamp() },
+ { QuestStatusEnum.AvailableAfter, timeUtil.GetTimeStamp() },
},
AvailableAfter = availableAfterTimestamp,
}
@@ -1658,16 +1658,16 @@ public class QuestHelper(
* @param sessionId Player id
* @param questIdToRemove Qid of quest to remove
*/
- protected void RemoveQuestFromScavProfile(string sessionId, string questIdToRemove)
+ protected void RemoveQuestFromScavProfile(MongoId sessionId, MongoId questIdToRemove)
{
- var fullProfile = _profileHelper.GetFullProfile(sessionId);
+ var fullProfile = profileHelper.GetFullProfile(sessionId);
var repeatableInScavProfile = fullProfile.CharacterData.ScavData.Quests?.FirstOrDefault(x =>
x.QId == questIdToRemove
);
if (repeatableInScavProfile is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"quest-unable_to_remove_scav_quest_from_profile",
new { scavQuestId = questIdToRemove, profileId = sessionId }
)
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs
index 038c4fad..d36bb492 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/QuestRewardHelper.cs
@@ -1,6 +1,7 @@
using SPTarkov.Common.Extensions;
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.ItemEvent;
@@ -13,13 +14,13 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class QuestRewardHelper(
- ISptLogger _logger,
- PaymentHelper _paymentHelper,
- DatabaseService _databaseService,
- ProfileHelper _profileHelper,
- RewardHelper _rewardHelper,
- ServerLocalisationService _serverLocalisationService,
- ICloner _cloner
+ ISptLogger logger,
+ PaymentHelper paymentHelper,
+ DatabaseService databaseService,
+ ProfileHelper profileHelper,
+ RewardHelper rewardHelper,
+ ServerLocalisationService serverLocalisationService,
+ ICloner cloner
)
{
///
@@ -27,7 +28,7 @@ public class QuestRewardHelper(
/// Value can be modified by modders by overriding this value with new traders.
/// Ensure to add Lightkeeper's ID (638f541a29ffd1183d187f57) and BTR Driver's ID (656f0f98d80a697f855d34b1)
///
- protected readonly string[] InGameTraders = [Traders.LIGHTHOUSEKEEPER, Traders.BTR];
+ protected readonly MongoId[] InGameTraders = [Traders.LIGHTHOUSEKEEPER, Traders.BTR];
///
/// Give player quest rewards - Skills/exp/trader standing/items/assort unlocks - Returns reward items player earned
@@ -41,19 +42,19 @@ public class QuestRewardHelper(
/// Array of reward items player was given
public IEnumerable
- ApplyQuestReward(
PmcData profileData,
- string questId,
+ MongoId questId,
QuestStatusEnum state,
- string sessionId,
+ MongoId sessionId,
ItemEventRouterResponse questResponse
)
{
// Repeatable quest base data is always in PMCProfile, `profileData` may be scav profile
// TODO: Move repeatable quest data to profile-agnostic location
- var fullProfile = _profileHelper.GetFullProfile(sessionId);
+ var fullProfile = profileHelper.GetFullProfile(sessionId);
var pmcProfile = fullProfile.CharacterData.PmcData;
if (pmcProfile is null)
{
- _logger.Error($"Unable to get pmc profile for: {sessionId}, no rewards given");
+ logger.Error($"Unable to get pmc profile for: {sessionId}, no rewards given");
return [];
}
@@ -61,8 +62,8 @@ public class QuestRewardHelper(
var questDetails = GetQuestFromDb(questId, pmcProfile);
if (questDetails is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"quest-unable_to_find_quest_in_db_no_quest_rewards",
questId
)
@@ -74,7 +75,7 @@ public class QuestRewardHelper(
if (IsInGameTrader(questDetails))
{
// Assuming in-game traders give ALL rewards
- _logger.Debug(
+ logger.Debug(
$"Skipping quest rewards for quest: {questDetails.Id}, trader: {questDetails.TraderId} in InGameRewardTrader list"
);
@@ -89,7 +90,7 @@ public class QuestRewardHelper(
// e.g. 'Success' or 'AvailableForFinish'
var rewards = questDetails.Rewards.GetByJsonProp
>(state.ToString());
- return _rewardHelper.ApplyRewards(
+ return rewardHelper.ApplyRewards(
rewards,
CustomisationSource.UNLOCKED_IN_GAME,
fullProfile,
@@ -115,10 +116,10 @@ public class QuestRewardHelper(
/// Id of quest to find
/// Player profile
/// IQuest object
- protected Quest? GetQuestFromDb(string questId, PmcData pmcData)
+ protected Quest? GetQuestFromDb(MongoId questId, PmcData pmcData)
{
// Look for quest in db
- if (_databaseService.GetQuests().TryGetValue(questId, out var quest))
+ if (databaseService.GetQuests().TryGetValue(questId, out var quest))
{
return quest;
}
@@ -170,7 +171,7 @@ public class QuestRewardHelper(
/// Updated quest
public Quest ApplyMoneyBoost(Quest quest, double bonusPercent, QuestStatusEnum questStatus)
{
- var clonedQuest = _cloner.Clone(quest);
+ var clonedQuest = cloner.Clone(quest);
if (clonedQuest?.Rewards?.Success == null)
{
return clonedQuest;
@@ -181,7 +182,7 @@ public class QuestRewardHelper(
reward.Type == RewardType.Item
&& reward.Items != null
&& reward.Items.Count > 0
- && _paymentHelper.IsMoneyTpl(reward.Items.FirstOrDefault().Template)
+ && paymentHelper.IsMoneyTpl(reward.Items.FirstOrDefault().Template)
);
foreach (var moneyReward in moneyRewards)
@@ -190,7 +191,7 @@ public class QuestRewardHelper(
var rewardItem = moneyReward.Items?.FirstOrDefault();
if (rewardItem is null)
{
- _logger.Error(
+ logger.Error(
$"Unable to apply money reward bonus to quest: {quest.Name} as no money item found"
);
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs
index c531839d..13426838 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs
@@ -1,5 +1,6 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.Ragfair;
using SPTarkov.Server.Core.Models.Enums;
@@ -27,28 +28,26 @@ public class RagfairHelper(
///
/// Currency tpl
/// Currency tag, e.g. RUB
- public string GetCurrencyTag(string currencyTpl)
+ public string GetCurrencyTag(MongoId currencyTpl)
{
if (currencyTpl == Money.EUROS)
{
return "EUR";
}
- else if (currencyTpl == Money.DOLLARS)
+ if (currencyTpl == Money.DOLLARS)
{
return "USD";
}
- else if (currencyTpl == Money.ROUBLES)
+ if (currencyTpl == Money.ROUBLES)
{
return "RUB";
}
- else if (currencyTpl == Money.GP)
+ if (currencyTpl == Money.GP)
{
return "GP";
}
- else
- {
- return "";
- }
+
+ return "";
}
///
@@ -71,9 +70,9 @@ public class RagfairHelper(
}
}
- public List FilterCategories(string sessionId, SearchRequestData request)
+ public List FilterCategories(MongoId sessionId, SearchRequestData request)
{
- var result = new List();
+ var result = new List();
// Case: weapon builds
if (request.BuildCount > 0)
@@ -98,9 +97,9 @@ public class RagfairHelper(
return result;
}
- public Dictionary GetDisplayableAssorts(string sessionId)
+ public Dictionary GetDisplayableAssorts(MongoId sessionId)
{
- var result = new Dictionary();
+ var result = new Dictionary();
foreach (
var traderId in databaseService
.GetTraders()
@@ -113,12 +112,12 @@ public class RagfairHelper(
return result;
}
- protected List GetCategoryList(string handbookId)
+ protected List GetCategoryList(MongoId handbookId)
{
- var result = new List();
+ var result = new List();
// if its "mods" great-parent category, do double recursive loop
- if (handbookId == "5b5f71a686f77447ed5636ab")
+ if (handbookId == new MongoId("5b5f71a686f77447ed5636ab"))
{
foreach (var category in handbookHelper.ChildrenCategories(handbookId))
{
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs
index 56e7e8ab..1f7347d1 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs
@@ -19,31 +19,31 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class RagfairOfferHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- BotHelper _botHelper,
- RagfairSortHelper _ragfairSortHelper,
- PresetHelper _presetHelper,
- RagfairHelper _ragfairHelper,
- PaymentHelper _paymentHelper,
- TraderHelper _traderHelper,
- QuestHelper _questHelper,
- RagfairServerHelper _ragfairServerHelper,
- ItemHelper _itemHelper,
- DatabaseService _databaseService,
- RagfairOfferService _ragfairOfferService,
- LocaleService _localeService,
- ServerLocalisationService _serverLocalisationService,
- MailSendService _mailSendService,
- RagfairRequiredItemsService _ragfairRequiredItemsService,
- ProfileHelper _profileHelper,
- EventOutputHolder _eventOutputHolder,
- ConfigServer _configServer
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ BotHelper botHelper,
+ RagfairSortHelper ragfairSortHelper,
+ PresetHelper presetHelper,
+ RagfairHelper ragfairHelper,
+ PaymentHelper paymentHelper,
+ TraderHelper traderHelper,
+ QuestHelper questHelper,
+ RagfairServerHelper ragfairServerHelper,
+ ItemHelper itemHelper,
+ DatabaseService databaseService,
+ RagfairOfferService ragfairOfferService,
+ LocaleService localeService,
+ ServerLocalisationService serverLocalisationService,
+ MailSendService mailSendService,
+ RagfairRequiredItemsService ragfairRequiredItemsService,
+ ProfileHelper profileHelper,
+ EventOutputHolder eventOutputHolder,
+ ConfigServer configServer
)
{
protected const string _goodSoldTemplate = "5bdabfb886f7743e152e867e 0"; // Your {soldItem} {itemCount} items were bought by {buyerNickname}.
- protected readonly BotConfig _botConfig = _configServer.GetConfig();
- protected readonly RagfairConfig _ragfairConfig = _configServer.GetConfig();
+ protected readonly BotConfig _botConfig = configServer.GetConfig();
+ protected readonly RagfairConfig _ragfairConfig = configServer.GetConfig();
///
/// Pass through to ragfairOfferService.getOffers(), get flea offers a player should see
@@ -55,15 +55,15 @@ public class RagfairOfferHelper(
/// Offers the player should see
public List GetValidOffers(
SearchRequestData searchRequest,
- List itemsToAdd,
- Dictionary traderAssorts,
+ List itemsToAdd,
+ Dictionary traderAssorts,
PmcData pmcData
)
{
- var playerIsFleaBanned = pmcData.PlayerIsFleaBanned(_timeUtil.GetTimeStamp());
+ var playerIsFleaBanned = pmcData.PlayerIsFleaBanned(timeUtil.GetTimeStamp());
var tieredFlea = _ragfairConfig.TieredFlea;
var tieredFleaLimitTypes = tieredFlea.UnlocksType;
- return _ragfairOfferService
+ return ragfairOfferService
.GetOffers()
.Where(offer =>
{
@@ -121,7 +121,7 @@ public class RagfairOfferHelper(
// Check if offer item is ammo
if (
tieredFlea.AmmoTplUnlocks is not null
- && _itemHelper.IsOfBaseclass(offerItemTpl, BaseClasses.AMMO)
+ && itemHelper.IsOfBaseclass(offerItemTpl, BaseClasses.AMMO)
)
{
// Check if ammo is flagged with a level requirement
@@ -150,7 +150,7 @@ public class RagfairOfferHelper(
}
// Optimisation - Skip further checks if the item type isn't in the restricted types list
- if (!_itemHelper.IsOfBaseclasses(offerItemTpl, tieredFleaLimitTypes))
+ if (!itemHelper.IsOfBaseclasses(offerItemTpl, tieredFleaLimitTypes))
{
return;
}
@@ -158,7 +158,7 @@ public class RagfairOfferHelper(
// Check if the item belongs to any restricted type and if player level is insufficient
if (
tieredFleaLimitTypes
- .Where(tieredItemType => _itemHelper.IsOfBaseclass(offerItemTpl, tieredItemType))
+ .Where(tieredItemType => itemHelper.IsOfBaseclass(offerItemTpl, tieredItemType))
.Any(tieredItemType => playerLevel < tieredFlea.UnlocksType[tieredItemType])
)
{
@@ -180,7 +180,7 @@ public class RagfairOfferHelper(
)
{
// Get all offers that require the desired item and filter out offers from non traders if player below ragfair unlock
- var offerIDsForItem = _ragfairRequiredItemsService.GetRequiredOffersById(
+ var offerIDsForItem = ragfairRequiredItemsService.GetRequiredOffersById(
searchRequest.NeededSearchId
);
@@ -190,7 +190,7 @@ public class RagfairOfferHelper(
var result = new List();
foreach (
var offer in offerIDsForItem
- .Select(_ragfairOfferService.GetOfferByOfferId)
+ .Select(ragfairOfferService.GetOfferByOfferId)
.Where(offer => PassesSearchFilterCriteria(searchRequest, offer, pmcData))
)
{
@@ -220,20 +220,20 @@ public class RagfairOfferHelper(
/// RagfairOffer array
public List GetOffersForBuild(
SearchRequestData searchRequest,
- List itemsToAdd,
- Dictionary traderAssorts,
+ List itemsToAdd,
+ Dictionary traderAssorts,
PmcData pmcData
)
{
var offersMap = new Dictionary>();
var offersToReturn = new List();
- var playerIsFleaBanned = pmcData.PlayerIsFleaBanned(_timeUtil.GetTimeStamp());
+ var playerIsFleaBanned = pmcData.PlayerIsFleaBanned(timeUtil.GetTimeStamp());
var tieredFlea = _ragfairConfig.TieredFlea;
var tieredFleaLimitTypes = tieredFlea.UnlocksType;
foreach (var desiredItemTpl in searchRequest.BuildItems)
{
- var matchingOffers = _ragfairOfferService.GetOffersOfType(desiredItemTpl.Key);
+ var matchingOffers = ragfairOfferService.GetOffersOfType(desiredItemTpl.Key);
if (matchingOffers is null)
// No offers found for this item, skip
{
@@ -344,7 +344,7 @@ public class RagfairOfferHelper(
}
// Sort offers by price and pick the best
- var offer = _ragfairSortHelper.SortOffers(offersToSort, RagfairSort.PRICE)[0];
+ var offer = ragfairSortHelper.SortOffers(offersToSort, RagfairSort.PRICE)[0];
offersToReturn.Add(offer);
}
@@ -363,8 +363,8 @@ public class RagfairOfferHelper(
/// True = should be shown to player
private bool IsDisplayableOffer(
SearchRequestData searchRequest,
- List itemsToAdd,
- Dictionary traderAssorts,
+ List itemsToAdd,
+ Dictionary traderAssorts,
RagfairOffer offer,
PmcData pmcProfile,
bool playerIsFleaBanned = false
@@ -374,7 +374,7 @@ public class RagfairOfferHelper(
// Currency offer is sold for
var moneyTypeTpl = offer.Requirements.FirstOrDefault().Template;
- var isTraderOffer = _databaseService.GetTraders().ContainsKey(offer.User.Id);
+ var isTraderOffer = databaseService.GetTraders().ContainsKey(offer.User.Id);
if (!isTraderOffer && playerIsFleaBanned)
{
@@ -404,7 +404,7 @@ public class RagfairOfferHelper(
searchRequest.BuildItems.Count == 0
&& // Prevent equipment loadout searches filtering out presets
searchRequest.BuildCount.GetValueOrDefault(0) > 0
- && _presetHelper.HasPreset(offerRootItem.Template)
+ && presetHelper.HasPreset(offerRootItem.Template)
)
{
return false;
@@ -414,7 +414,7 @@ public class RagfairOfferHelper(
// has info.removeBartering as true, this if statement removed barter items.
if (
searchRequest.RemoveBartering.GetValueOrDefault(false)
- && !_paymentHelper.IsMoneyTpl(moneyTypeTpl)
+ && !paymentHelper.IsMoneyTpl(moneyTypeTpl)
)
// Don't include barter offers
{
@@ -494,7 +494,7 @@ public class RagfairOfferHelper(
{
if (!pmcProfile.TradersInfo.TryGetValue(offer.User.Id, out var userTraderSettings))
{
- _logger.Warning(
+ logger.Warning(
$"Trader: {offer.User.Id} not found in profile, assuming offer is not locked being loyalty level"
);
return false;
@@ -512,7 +512,7 @@ public class RagfairOfferHelper(
/// true if quest locked
public bool TraderOfferItemQuestLocked(
RagfairOffer offer,
- Dictionary traderAssorts
+ Dictionary traderAssorts
)
{
var itemIds = offer.Items.Select(x => x.Id).ToHashSet();
@@ -576,16 +576,16 @@ public class RagfairOfferHelper(
/// true if restriction reached, false if no restrictions/not reached
protected bool TraderBuyRestrictionReached(RagfairOffer offer)
{
- var traderAssorts = _traderHelper.GetTraderAssortsByTraderId(offer.User.Id).Items;
+ var traderAssorts = traderHelper.GetTraderAssortsByTraderId(offer.User.Id).Items;
// Find item being purchased from traders assorts
var assortData = traderAssorts.FirstOrDefault(item => item.Id == offer.Items[0].Id);
if (assortData is null)
{
// No trader assort data
- _logger.Warning(
+ logger.Warning(
$"Unable to find trader: "
- + $"${offer.User.Nickname}assort for item: {_itemHelper.GetItemName(offer.Items[0].Template)} "
+ + $"${offer.User.Nickname}assort for item: {itemHelper.GetItemName(offer.Items[0].Template)} "
+ $"{offer.Items[0].Template}, cannot check if buy restriction reached"
);
@@ -639,9 +639,9 @@ public class RagfairOfferHelper(
* @param sessionId Session id to process offers for
* @returns true = complete
*/
- public bool ProcessOffersOnProfile(string sessionId)
+ public bool ProcessOffersOnProfile(MongoId sessionId)
{
- var currentTimestamp = _timeUtil.GetTimeStamp();
+ var currentTimestamp = timeUtil.GetTimeStamp();
var profileOffers = GetProfileOffers(sessionId);
// No offers, don't do anything
@@ -691,7 +691,7 @@ public class RagfairOfferHelper(
var ratingToAdd = offer.SummaryCost / totalItemsCount * boughtAmount;
IncreaseProfileRagfairRating(
- _profileHelper.GetFullProfile(sessionId),
+ profileHelper.GetFullProfile(sessionId),
ratingToAdd.Value
);
@@ -724,12 +724,12 @@ public class RagfairOfferHelper(
/// Raw amount to add to players ragfair rating (excluding the reputation gain multiplier)
public void IncreaseProfileRagfairRating(SptProfile profile, double? amountToIncrementBy)
{
- var ragfairGlobalsConfig = _databaseService.GetGlobals().Configuration.RagFair;
+ var ragfairGlobalsConfig = databaseService.GetGlobals().Configuration.RagFair;
profile.CharacterData.PmcData.RagfairInfo.IsRatingGrowing = true;
if (amountToIncrementBy is null)
{
- _logger.Warning(
+ logger.Warning(
$"Unable to increment ragfair rating, value was not a number: {amountToIncrementBy}"
);
@@ -747,9 +747,9 @@ public class RagfairOfferHelper(
///
/// Session/Player id
/// List of ragfair offers
- protected List GetProfileOffers(string sessionId)
+ protected List GetProfileOffers(MongoId sessionId)
{
- var profile = _profileHelper.GetPmcProfile(sessionId);
+ var profile = profileHelper.GetPmcProfile(sessionId);
if (profile.RagfairInfo?.Offers is null)
{
@@ -764,13 +764,13 @@ public class RagfairOfferHelper(
* @param sessionId Session id of profile to delete offer from
* @param offerId Id of offer to delete
*/
- protected void DeleteOfferById(string sessionId, string offerId)
+ protected void DeleteOfferById(MongoId sessionId, string offerId)
{
- var profileRagfairInfo = _profileHelper.GetPmcProfile(sessionId).RagfairInfo;
+ var profileRagfairInfo = profileHelper.GetPmcProfile(sessionId).RagfairInfo;
var offerIndex = profileRagfairInfo.Offers.FindIndex(o => o.Id == offerId);
if (offerIndex == -1)
{
- _logger.Warning(
+ logger.Warning(
$"Unable to find offer: {offerId} in profile: {sessionId}, unable to delete"
);
}
@@ -781,7 +781,7 @@ public class RagfairOfferHelper(
}
// Also delete from ragfair
- _ragfairOfferService.RemoveOfferById(offerId);
+ ragfairOfferService.RemoveOfferById(offerId);
}
///
@@ -792,7 +792,7 @@ public class RagfairOfferHelper(
/// Amount item was purchased for
/// ItemEventRouterResponse
public ItemEventRouterResponse CompleteOffer(
- string offerOwnerSessionId,
+ MongoId offerOwnerSessionId,
RagfairOffer offer,
int boughtAmount
)
@@ -809,7 +809,7 @@ public class RagfairOfferHelper(
}
// Assemble payment to send to seller now offer was purchased
- var sellerProfile = _profileHelper.GetPmcProfile(offerOwnerSessionId);
+ var sellerProfile = profileHelper.GetPmcProfile(offerOwnerSessionId);
var rootItem = offer.Items.FirstOrDefault();
var itemTpl = rootItem.Template;
var offerStackCount = rootItem.Upd.StackObjectsCount;
@@ -824,7 +824,7 @@ public class RagfairOfferHelper(
Upd = new Upd { StackObjectsCount = requirement.Count * boughtAmount },
};
- var stacks = _itemHelper.SplitStack(requestedItem);
+ var stacks = itemHelper.SplitStack(requestedItem);
foreach (var item in stacks)
{
var outItems = new List- { item };
@@ -832,7 +832,7 @@ public class RagfairOfferHelper(
// TODO - is this code used?, may have been when adding barters to flea was still possible for player
if (requirement.OnlyFunctional.GetValueOrDefault(false))
{
- var presetItems = _ragfairServerHelper.GetPresetItemsByTpl(item);
+ var presetItems = ragfairServerHelper.GetPresetItemsByTpl(item);
if (presetItems.Count > 0)
{
outItems.Add(presetItems[0]);
@@ -854,10 +854,10 @@ public class RagfairOfferHelper(
HandbookId = itemTpl,
};
- var storageTimeSeconds = _timeUtil.GetHoursAsSeconds(
- (int)_questHelper.GetMailItemRedeemTimeHoursForProfile(sellerProfile)
+ var storageTimeSeconds = timeUtil.GetHoursAsSeconds(
+ (int)questHelper.GetMailItemRedeemTimeHoursForProfile(sellerProfile)
);
- _mailSendService.SendDirectNpcMessageToPlayer(
+ mailSendService.SendDirectNpcMessageToPlayer(
offerOwnerSessionId,
Traders.RAGMAN,
MessageType.FleamarketMessage,
@@ -872,7 +872,7 @@ public class RagfairOfferHelper(
sellerProfile.RagfairInfo.SellSum ??= 0;
sellerProfile.RagfairInfo.SellSum += offer.SummaryCost;
- return _eventOutputHolder.GetOutput(offerOwnerSessionId);
+ return eventOutputHolder.GetOutput(offerOwnerSessionId);
}
/**
@@ -884,11 +884,11 @@ public class RagfairOfferHelper(
protected string GetLocalisedOfferSoldMessage(MongoId itemTpl, int boughtAmount)
{
// Generate a message to inform that item was sold
- var globalLocales = _localeService.GetLocaleDb();
+ var globalLocales = localeService.GetLocaleDb();
if (!globalLocales.TryGetValue(_goodSoldTemplate, out var soldMessageLocaleGuid))
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"ragfair-unable_to_find_locale_by_key",
_goodSoldTemplate
)
@@ -902,7 +902,7 @@ public class RagfairOfferHelper(
var tplVars = new SystemData
{
SoldItem = hasKey ? value : itemTpl,
- BuyerNickname = _botHelper.GetPmcNicknameOfMaxLength(_botConfig.BotNameLengthLimit),
+ BuyerNickname = botHelper.GetPmcNicknameOfMaxLength(_botConfig.BotNameLengthLimit),
ItemCount = boughtAmount,
};
@@ -942,7 +942,7 @@ public class RagfairOfferHelper(
var offerMoneyTypeTpl = offer.Requirements.FirstOrDefault().Template;
if (
- pmcData.Info.Level < _databaseService.GetGlobals().Configuration.RagFair.MinUserLevel
+ pmcData.Info.Level < databaseService.GetGlobals().Configuration.RagFair.MinUserLevel
&& isDefaultUserOffer
)
// Skip item if player is < global unlock level (default is 15) and item is from a dynamically generated source
@@ -965,7 +965,7 @@ public class RagfairOfferHelper(
if (
searchRequest.OneHourExpiration.GetValueOrDefault(false)
- && offer.EndTime - _timeUtil.GetTimeStamp() > TimeUtil.OneHourAsSeconds
+ && offer.EndTime - timeUtil.GetTimeStamp() > TimeUtil.OneHourAsSeconds
)
// offer expires within an hour
{
@@ -1017,7 +1017,7 @@ public class RagfairOfferHelper(
}
else
{
- var itemQualityPercent = _itemHelper.GetItemQualityModifierForItems(offer.Items) * 100;
+ var itemQualityPercent = itemHelper.GetItemQualityModifierForItems(offer.Items) * 100;
if (itemQualityPercent < searchRequest.ConditionFrom)
{
return false;
@@ -1029,12 +1029,12 @@ public class RagfairOfferHelper(
}
}
- if (searchRequest.Currency > 0 && _paymentHelper.IsMoneyTpl(offerMoneyTypeTpl))
+ if (searchRequest.Currency > 0 && paymentHelper.IsMoneyTpl(offerMoneyTypeTpl))
{
// Only want offers with specific currency
if (
- _ragfairHelper.GetCurrencyTag(offerMoneyTypeTpl)
- != _ragfairHelper.GetCurrencyTag(searchRequest.Currency.GetValueOrDefault(0))
+ ragfairHelper.GetCurrencyTag(offerMoneyTypeTpl)
+ != ragfairHelper.GetCurrencyTag(searchRequest.Currency.GetValueOrDefault(0))
)
{
// Offer is for different currency to what search params allow, skip
@@ -1067,15 +1067,15 @@ public class RagfairOfferHelper(
public bool IsItemFunctional(Item offerRootItem, RagfairOffer offer)
{
// Non-preset weapons/armor are always functional
- if (!_presetHelper.HasPreset(offerRootItem.Template))
+ if (!presetHelper.HasPreset(offerRootItem.Template))
{
return true;
}
// For armor items that can hold mods, make sure the item count is at least the amount of required plates
- if (_itemHelper.ArmorItemCanHoldMods(offerRootItem.Template))
+ if (itemHelper.ArmorItemCanHoldMods(offerRootItem.Template))
{
- var offerRootTemplate = _itemHelper.GetItem(offerRootItem.Template).Value;
+ var offerRootTemplate = itemHelper.GetItem(offerRootItem.Template).Value;
var requiredPlateCount = offerRootTemplate
.Properties.Slots?.Where(item => item.Required.GetValueOrDefault(false))
?.Count();
@@ -1118,7 +1118,7 @@ public class RagfairOfferHelper(
/// True if in range
protected bool ItemQualityInRange(Item item, int min, int max)
{
- var itemQualityPercentage = 100 * _itemHelper.GetItemQualityModifier(item);
+ var itemQualityPercentage = 100 * itemHelper.GetItemQualityModifier(item);
if (min > 0 && min > itemQualityPercentage)
// Item condition too low
{
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs
index d057b587..a21cb472 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSellHelper.cs
@@ -11,14 +11,14 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class RagfairSellHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- RandomUtil _randomUtil,
- DatabaseService _databaseService,
- ConfigServer _configServer
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ RandomUtil randomUtil,
+ DatabaseService databaseService,
+ ConfigServer configServer
)
{
- protected readonly RagfairConfig _ragfairConfig = _configServer.GetConfig();
+ protected readonly RagfairConfig _ragfairConfig = configServer.GetConfig();
///
/// Get the percent chance to sell an item based on its average listed price vs player chosen listing price
@@ -72,16 +72,14 @@ public class RagfairSellHelper(
bool sellInOneGo = false
)
{
- var startTimestamp = _timeUtil.GetTimeStamp();
+ var startTimestamp = timeUtil.GetTimeStamp();
// Get a time in future to stop simulating sell chances at
var endTime =
startTimestamp
- + _timeUtil.GetHoursAsSeconds(
+ + timeUtil.GetHoursAsSeconds(
(int)
- _databaseService
- .GetGlobals()
- .Configuration.RagFair.OfferDurationTimeInHour.Value
+ databaseService.GetGlobals().Configuration.RagFair.OfferDurationTimeInHour.Value
);
var sellTimestamp = startTimestamp;
@@ -93,14 +91,14 @@ public class RagfairSellHelper(
if (sellChancePercent is null)
{
effectiveSellChance = _ragfairConfig.Sell.Chance.Base;
- _logger.Warning(
+ logger.Warning(
$"Sell chance was not a number: {sellChancePercent}, defaulting to {_ragfairConfig.Sell.Chance.Base}%"
);
}
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Rolling to sell: {itemSellCount} item(s) - (chance: {effectiveSellChance}%)"
);
}
@@ -113,8 +111,8 @@ public class RagfairSellHelper(
while (remainingCount > 0 && sellTimestamp < endTime)
{
- var boughtAmount = sellInOneGo ? remainingCount : _randomUtil.GetInt(1, remainingCount);
- if (_randomUtil.GetChance100(effectiveSellChance))
+ var boughtAmount = sellInOneGo ? remainingCount : randomUtil.GetInt(1, remainingCount);
+ if (randomUtil.GetChance100(effectiveSellChance))
{
// Passed roll check, item will be sold
// Weight time to sell towards selling faster based on how cheap the item sold
@@ -140,18 +138,18 @@ public class RagfairSellHelper(
sellTimestamp += (long)newSellTime;
result.Add(new SellResult { SellTime = sellTimestamp, Amount = boughtAmount });
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
- $"Offer will sell at: {_timeUtil.GetDateTimeFromTimeStamp(sellTimestamp).ToLocalTime().ToString()}, bought: {boughtAmount}"
+ logger.Debug(
+ $"Offer will sell at: {timeUtil.GetDateTimeFromTimeStamp(sellTimestamp).ToLocalTime().ToString()}, bought: {boughtAmount}"
);
}
}
else
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"Offer rolled not to sell, item count: {boughtAmount}");
+ logger.Debug($"Offer rolled not to sell, item count: {boughtAmount}");
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs
index 194161ca..f80c88de 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairServerHelper.cs
@@ -109,7 +109,7 @@ public class RagfairServerHelper(
* @param parentId Parent Id to check is blacklisted
* @returns true if blacklisted
*/
- protected bool IsItemCategoryOnCustomFleaBlacklist(string itemParentId)
+ protected bool IsItemCategoryOnCustomFleaBlacklist(MongoId itemParentId)
{
return ragfairConfig.Dynamic.Blacklist.CustomItemCategoryList.Contains(itemParentId);
}
@@ -119,7 +119,7 @@ public class RagfairServerHelper(
* @param traderId
* @returns True if id was a trader
*/
- public bool IsTrader(string traderId)
+ public bool IsTrader(MongoId traderId)
{
return databaseService.GetTraders().ContainsKey(traderId);
}
@@ -129,7 +129,7 @@ public class RagfairServerHelper(
* @param sessionID Player to send items to
* @param returnedItems Items to send to player
*/
- public void ReturnItems(string sessionID, List
- returnedItems)
+ public void ReturnItems(MongoId sessionID, List
- returnedItems)
{
mailSendService.SendLocalisedNpcMessageToPlayer(
sessionID,
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs
index 76c2aeef..6a954612 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairSortHelper.cs
@@ -6,7 +6,7 @@ using SPTarkov.Server.Core.Services;
namespace SPTarkov.Server.Core.Helpers;
[Injectable]
-public class RagfairSortHelper(LocaleService _localeService)
+public class RagfairSortHelper(LocaleService localeService)
{
/**
* Sort a list of ragfair offers by something (id/rating/offer name/price/expiry time)
@@ -84,7 +84,7 @@ public class RagfairSortHelper(LocaleService _localeService)
protected int SortOffersByName(RagfairOffer a, RagfairOffer b)
{
- var locale = _localeService.GetLocaleDb();
+ var locale = localeService.GetLocaleDb();
var tplA = a.Items[0].Template;
var tplB = b.Items[0].Template;
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs
index 62fdde6c..9dffbbb2 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs
@@ -13,14 +13,14 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class RepairHelper(
- ISptLogger _logger,
- RandomUtil _randomUtil,
- DatabaseService _databaseService,
- ConfigServer _configServer,
- ICloner _cloner
+ ISptLogger logger,
+ RandomUtil randomUtil,
+ DatabaseService databaseService,
+ ConfigServer configServer,
+ ICloner cloner
)
{
- protected RepairConfig _repairConfig = _configServer.GetConfig();
+ protected RepairConfig _repairConfig = configServer.GetConfig();
///
/// Alter an items durability after a repair by trader/repair kit
@@ -42,16 +42,16 @@ public class RepairHelper(
bool applyMaxDurabilityDegradation = true
)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Adding {amountToRepair} to {itemToRepairDetails.Name} using kit: {useRepairKit}"
);
}
- var itemMaxDurability = _cloner.Clone(itemToRepair.Upd.Repairable.MaxDurability);
- var itemCurrentDurability = _cloner.Clone(itemToRepair.Upd.Repairable.Durability);
- var itemCurrentMaxDurability = _cloner.Clone(itemToRepair.Upd.Repairable.MaxDurability);
+ var itemMaxDurability = cloner.Clone(itemToRepair.Upd.Repairable.MaxDurability);
+ var itemCurrentDurability = cloner.Clone(itemToRepair.Upd.Repairable.Durability);
+ var itemCurrentMaxDurability = cloner.Clone(itemToRepair.Upd.Repairable.MaxDurability);
var newCurrentDurability = itemCurrentDurability + amountToRepair;
var newCurrentMaxDurability = itemCurrentMaxDurability + amountToRepair;
@@ -127,12 +127,12 @@ public class RepairHelper(
{
// Degradation value is based on the armor material
if (
- !_databaseService
+ !databaseService
.GetGlobals()
.Configuration.ArmorMaterials.TryGetValue(material, out var armorMaterialSettings)
)
{
- _logger.Error($"Unable to find armor with a type of: {material}");
+ logger.Error($"Unable to find armor with a type of: {material}");
}
var minMultiplier = isRepairKit
@@ -143,7 +143,7 @@ public class RepairHelper(
? armorMaterialSettings.MaxRepairKitDegradation
: armorMaterialSettings.MaxRepairDegradation;
- var duraLossPercent = _randomUtil.GetDouble((double)minMultiplier, (double)maxMultiplier);
+ var duraLossPercent = randomUtil.GetDouble((double)minMultiplier, (double)maxMultiplier);
var duraLossMultipliedByTraderMultiplier =
duraLossPercent * armorMax * traderQualityMultiplier;
@@ -178,7 +178,7 @@ public class RepairHelper(
maxRepairDeg = itemProps.MaxRepairDegradation;
}
- var duraLossPercent = _randomUtil.GetDouble((double)minRepairDeg, (double)maxRepairDeg);
+ var duraLossPercent = randomUtil.GetDouble((double)minRepairDeg, (double)maxRepairDeg);
var duraLossMultipliedByTraderMultiplier =
duraLossPercent * weaponMax * traderQualityMultipler;
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs
index 2ead73fa..23dba288 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RepeatableQuestHelper.cs
@@ -62,7 +62,10 @@ public class RepeatableQuestHelper(
/// TraderId that should provide this quest
/// Cloned quest template
///
- public RepeatableQuest? GetClonedQuestTemplateForType(RepeatableQuestType type, string traderId)
+ public RepeatableQuest? GetClonedQuestTemplateForType(
+ RepeatableQuestType type,
+ MongoId traderId
+ )
{
var quest = type switch
{
@@ -109,7 +112,7 @@ public class RepeatableQuestHelper(
RepeatableQuestType type,
MongoId traderId,
PlayerGroup playerGroup,
- string sessionId
+ MongoId sessionId
)
{
var questData = GetClonedQuestTemplateForType(type, traderId);
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs
index 9a0b9470..5e8c3060 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/RewardHelper.cs
@@ -16,15 +16,15 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class RewardHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- ItemHelper _itemHelper,
- DatabaseService _databaseService,
- ProfileHelper _profileHelper,
- ServerLocalisationService _serverLocalisationService,
- TraderHelper _traderHelper,
- PresetHelper _presetHelper,
- ICloner _cloner
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ ItemHelper itemHelper,
+ DatabaseService databaseService,
+ ProfileHelper profileHelper,
+ ServerLocalisationService serverLocalisationService,
+ TraderHelper traderHelper,
+ PresetHelper presetHelper,
+ ICloner cloner
)
{
///
@@ -42,7 +42,7 @@ public class RewardHelper(
string source,
SptProfile fullProfile,
PmcData profileData,
- string rewardSourceId,
+ MongoId rewardSourceId,
ItemEventRouterResponse? questResponse = null
)
{
@@ -50,7 +50,7 @@ public class RewardHelper(
var pmcProfile = fullProfile?.CharacterData?.PmcData;
if (pmcProfile is null)
{
- _logger.Error($"Unable to get PMC profile for: {sessionId}, no rewards given");
+ logger.Error($"Unable to get PMC profile for: {sessionId}, no rewards given");
return [];
}
@@ -69,27 +69,31 @@ public class RewardHelper(
{
case RewardType.Skill:
// This needs to use the passed in profileData, as it could be the scav profile
- _profileHelper.AddSkillPointsToPlayer(
+ profileHelper.AddSkillPointsToPlayer(
profileData,
Enum.Parse(reward.Target),
reward.Value
);
break;
case RewardType.Experience:
- _profileHelper.AddExperienceToPmc(
+ profileHelper.AddExperienceToPmc(
sessionId.Value,
int.Parse(reward.Value.ToString())
); // this must occur first as the output object needs to take the modified profile exp value
// Recalculate level in event player leveled up
pmcProfile.Info.Level = pmcProfile.CalculateLevel(
- _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable
+ databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable
);
break;
case RewardType.TraderStanding:
- _traderHelper.AddStandingToTrader(sessionId, reward.Target, reward.Value.Value);
+ traderHelper.AddStandingToTrader(
+ sessionId.Value,
+ reward.Target,
+ reward.Value.Value
+ );
break;
case RewardType.TraderUnlock:
- _traderHelper.SetTraderUnlockedState(reward.Target, true, sessionId);
+ traderHelper.SetTraderUnlockedState(reward.Target, true, sessionId.Value);
break;
case RewardType.Item:
// Item rewards are retrieved by getRewardItems() below, and returned to be handled by caller
@@ -101,34 +105,34 @@ public class RewardHelper(
AddAchievementToProfile(fullProfile, reward.Target);
break;
case RewardType.StashRows:
- _profileHelper.AddStashRowsBonusToProfile(sessionId.Value, (int)reward.Value); // Add specified stash rows from reward - requires client restart
+ profileHelper.AddStashRowsBonusToProfile(sessionId.Value, (int)reward.Value); // Add specified stash rows from reward - requires client restart
break;
case RewardType.ProductionScheme:
FindAndAddHideoutProductionIdToProfile(
pmcProfile,
reward,
rewardSourceId,
- sessionId,
+ sessionId.Value,
questResponse
);
break;
case RewardType.Pockets:
- _profileHelper.ReplaceProfilePocketTpl(pmcProfile, reward.Target);
+ profileHelper.ReplaceProfilePocketTpl(pmcProfile, reward.Target);
break;
case RewardType.CustomizationDirect:
- _profileHelper.AddHideoutCustomisationUnlock(fullProfile, reward, source);
+ profileHelper.AddHideoutCustomisationUnlock(fullProfile, reward, source);
break;
case RewardType.NotificationPopup:
// TODO: Wire up to notification system
- _logger.Error("UNHANDLED: RewardType.NotificationPopup");
+ logger.Error("UNHANDLED: RewardType.NotificationPopup");
break;
case RewardType.WebPromoCode:
// TODO: ??? (Free arena trial from Balancing - Part 1)
- _logger.Error("UNHANDLED: RewardType.WebPromoCode");
+ logger.Error("UNHANDLED: RewardType.WebPromoCode");
break;
default:
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"reward-type_not_handled",
new { rewardType = reward.Type, questId = rewardSourceId }
)
@@ -182,16 +186,16 @@ public class RewardHelper(
protected void FindAndAddHideoutProductionIdToProfile(
PmcData pmcData,
Reward craftUnlockReward,
- string questId,
- string sessionID,
+ MongoId questId,
+ MongoId sessionID,
ItemEventRouterResponse response
)
{
var matchingProductions = GetRewardProductionMatch(craftUnlockReward, questId);
if (matchingProductions.Count != 1)
{
- _logger.Error(
- _serverLocalisationService.GetText(
+ logger.Error(
+ serverLocalisationService.GetText(
"reward-unable_to_find_matching_hideout_production",
new { questId, matchCount = matchingProductions.Count }
)
@@ -218,11 +222,11 @@ public class RewardHelper(
/// List of matching HideoutProduction objects.
public List GetRewardProductionMatch(
Reward craftUnlockReward,
- string questId
+ MongoId questId
)
{
// Get hideout crafts and find those that match by areatype/required level/end product tpl - hope for just one match
- var craftingRecipes = _databaseService.GetHideout().Production.Recipes;
+ var craftingRecipes = databaseService.GetHideout().Production.Recipes;
// Area that will be used to craft unlocked item
var desiredHideoutAreaType = (HideoutAreas)int.Parse(craftUnlockReward.TraderId.ToString());
@@ -283,10 +287,10 @@ public class RewardHelper(
List
- mods = [];
// Is armor item that may need inserts / plates
- if (reward.Items.Count == 1 && _itemHelper.ArmorItemCanHoldMods(reward.Items[0].Template))
+ if (reward.Items.Count == 1 && itemHelper.ArmorItemCanHoldMods(reward.Items[0].Template))
// Only process items with slots
{
- if (_itemHelper.ItemHasSlots(reward.Items.FirstOrDefault().Template))
+ if (itemHelper.ItemHasSlots(reward.Items.FirstOrDefault().Template))
// Attempt to pull default preset from globals and add child items to reward (clones reward.items)
{
GenerateArmorRewardChildSlots(reward.Items.FirstOrDefault(), reward);
@@ -295,10 +299,10 @@ public class RewardHelper(
foreach (var rewardItem in reward.Items)
{
- _itemHelper.AddUpdObjectToItem(rewardItem);
+ itemHelper.AddUpdObjectToItem(rewardItem);
// Reward items are granted Found in Raid status
- _itemHelper.SetFoundInRaid(rewardItem);
+ itemHelper.SetFoundInRaid(rewardItem);
// Is root item, fix stacks
if (rewardItem.Id == reward.Target)
@@ -317,7 +321,7 @@ public class RewardHelper(
rewardItem.Upd.StackObjectsCount = 1;
}
- targets = _itemHelper.SplitStack(rewardItem);
+ targets = itemHelper.SplitStack(rewardItem);
// splitStack created new ids for the new stacks. This would destroy the relation to possible children.
// Instead, we reset the id to preserve relations and generate a new id in the downstream loop, where we are also reparenting if required
foreach (var target in targets)
@@ -332,7 +336,7 @@ public class RewardHelper(
// Propagate FiR status into child items
{
if (
- !_itemHelper.IsOfBaseclasses(
+ !itemHelper.IsOfBaseclasses(
rewardItem.Template,
[BaseClasses.AMMO, BaseClasses.MONEY]
)
@@ -352,19 +356,19 @@ public class RewardHelper(
foreach (var target in targets)
{
// This has all the original id relations since we reset the id to the original after the splitStack
- var itemsClone = new List
- { _cloner.Clone(target) };
+ var itemsClone = new List
- { cloner.Clone(target) };
// Here we generate a new id for the root item
target.Id = new MongoId();
// Add cloned mods to root item array
- var clonedMods = _cloner.Clone(mods);
+ var clonedMods = cloner.Clone(mods);
foreach (var mod in clonedMods)
{
itemsClone.Add(mod);
}
// Re-parent items + generate new ids to ensure valid ids
- var itemsToAdd = _itemHelper.ReparentItemAndChildren(target, itemsClone);
+ var itemsToAdd = itemHelper.ReparentItemAndChildren(target, itemsClone);
rewardItems.AddRange(itemsToAdd);
}
@@ -379,11 +383,11 @@ public class RewardHelper(
protected void GenerateArmorRewardChildSlots(Item originalRewardRootItem, Reward reward)
{
// Look for a default preset from globals for armor
- var defaultPreset = _presetHelper.GetDefaultPreset(originalRewardRootItem.Template);
+ var defaultPreset = presetHelper.GetDefaultPreset(originalRewardRootItem.Template);
if (defaultPreset is not null)
{
// Found preset, use mods to hydrate reward item
- var presetAndMods = _cloner.Clone(defaultPreset.Items).ReplaceIDs().ToList();
+ var presetAndMods = cloner.Clone(defaultPreset.Items).ReplaceIDs().ToList();
var newRootId = presetAndMods.RemapRootItemId();
reward.Items = presetAndMods;
@@ -395,18 +399,18 @@ public class RewardHelper(
reward.Target = rootItem.Id;
// Copy over stack count otherwise reward shows as missing in client
- _itemHelper.AddUpdObjectToItem(rootItem);
+ itemHelper.AddUpdObjectToItem(rootItem);
rootItem.Upd.StackObjectsCount = originalRewardRootItem.Upd.StackObjectsCount;
return;
}
- _logger.Warning(
+ logger.Warning(
"Unable to find default preset for armor {originalRewardRootItem._tpl}, adding mods manually"
);
- var itemDbData = _itemHelper.GetItem(originalRewardRootItem.Template).Value;
+ var itemDbData = itemHelper.GetItem(originalRewardRootItem.Template).Value;
// Hydrate reward with only 'required' mods - necessary for things like helmets otherwise you end up with nvgs/visors etc
- reward.Items = _itemHelper.AddChildSlotItems(reward.Items, itemDbData, null, true);
+ reward.Items = itemHelper.AddChildSlotItems(reward.Items, itemDbData, null, true);
}
///
@@ -415,16 +419,16 @@ public class RewardHelper(
///
/// Profile to add achievement to.
/// Id of achievement to add.
- public void AddAchievementToProfile(SptProfile fullProfile, string achievementId)
+ public void AddAchievementToProfile(SptProfile fullProfile, MongoId achievementId)
{
// Add achievement id to profile with timestamp it was unlocked
fullProfile.CharacterData.PmcData.Achievements.TryAdd(
achievementId,
- _timeUtil.GetTimeStamp()
+ timeUtil.GetTimeStamp()
);
// Check for any customisation unlocks
- var achievementDataDb = _databaseService
+ var achievementDataDb = databaseService
.GetTemplates()
.Achievements.FirstOrDefault(achievement => achievement.Id == achievementId);
if (achievementDataDb is null)
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs
index cf74533f..9291c4fb 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/TradeHelper.cs
@@ -19,19 +19,19 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class TradeHelper(
- ISptLogger _logger,
- TraderHelper _traderHelper,
- ItemHelper _itemHelper,
- QuestHelper _questHelper,
- PaymentService _paymentService,
- FenceService _fenceService,
- ServerLocalisationService _serverLocalisationService,
- HttpResponseUtil _httpResponseUtil,
- InventoryHelper _inventoryHelper,
- RagfairServer _ragfairServer,
- TraderAssortHelper _traderAssortHelper,
- TraderPurchasePersisterService _traderPurchasePersisterService,
- ICloner _cloner
+ ISptLogger logger,
+ TraderHelper traderHelper,
+ ItemHelper itemHelper,
+ QuestHelper questHelper,
+ PaymentService paymentService,
+ FenceService fenceService,
+ ServerLocalisationService serverLocalisationService,
+ HttpResponseUtil httpResponseUtil,
+ InventoryHelper inventoryHelper,
+ RagfairServer ragfairServer,
+ TraderAssortHelper traderAssortHelper,
+ TraderPurchasePersisterService traderPurchasePersisterService,
+ ICloner cloner
)
{
protected static readonly Lock buyLock = new();
@@ -47,7 +47,7 @@ public class TradeHelper(
public void BuyItem(
PmcData pmcData,
ProcessBuyTradeRequestData buyRequestData,
- string sessionID,
+ MongoId sessionID,
bool foundInRaid,
ItemEventRouterResponse output
)
@@ -68,7 +68,7 @@ public class TradeHelper(
// Called when player purchases PMC offer from ragfair
buyCallback = buyCount =>
{
- var allOffers = _ragfairServer.GetOffers();
+ var allOffers = ragfairServer.GetOffers();
// We store ragfair offerId in buyRequestData.item_id
var offerWithItem = allOffers.FirstOrDefault(x =>
@@ -101,7 +101,7 @@ public class TradeHelper(
],
TraderId = buyRequestData.TransactionId,
};
- _traderHelper.AddTraderPurchasesToPlayerProfile(
+ traderHelper.AddTraderPurchasesToPlayerProfile(
sessionID,
itemPurchaseDetails,
itemPurchased
@@ -111,8 +111,8 @@ public class TradeHelper(
// buyCallback = BuyCallback1;
// Get raw offer from ragfair, clone to prevent altering offer itself
- var allOffers = _ragfairServer.GetOffers();
- var offerWithItemCloned = _cloner.Clone(
+ var allOffers = ragfairServer.GetOffers();
+ var offerWithItemCloned = cloner.Clone(
allOffers.FirstOrDefault(x => x.Id == buyRequestData.ItemId)
);
offerItems = offerWithItemCloned.Items;
@@ -122,7 +122,7 @@ public class TradeHelper(
buyCallback = buyCount =>
{
// Update assort/flea item values
- var traderAssorts = _traderHelper
+ var traderAssorts = traderHelper
.GetTraderAssortsByTraderId(buyRequestData.TransactionId)
.Items;
var itemPurchased = traderAssorts.FirstOrDefault(assort =>
@@ -132,24 +132,24 @@ public class TradeHelper(
// Decrement trader item count
itemPurchased.Upd.StackObjectsCount -= buyCount;
- _fenceService.AmendOrRemoveFenceOffer(buyRequestData.ItemId, buyCount);
+ fenceService.AmendOrRemoveFenceOffer(buyRequestData.ItemId, buyCount);
};
- var fenceItems = _fenceService.GetRawFenceAssorts().Items;
+ var fenceItems = fenceService.GetRawFenceAssorts().Items;
var rootItemIndex = fenceItems.FindIndex(item => item.Id == buyRequestData.ItemId);
if (rootItemIndex == -1)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Tried to buy item {buyRequestData.ItemId} from fence that no longer exists"
);
}
- var message = _serverLocalisationService.GetText(
+ var message = serverLocalisationService.GetText(
"ragfair-offer_no_longer_exists"
);
- _httpResponseUtil.AppendErrorToOutput(output, message);
+ httpResponseUtil.AppendErrorToOutput(output, message);
return;
}
@@ -161,7 +161,7 @@ public class TradeHelper(
buyCallback = buyCount =>
{
// Update assort/flea item values
- var traderAssorts = _traderHelper
+ var traderAssorts = traderHelper
.GetTraderAssortsByTraderId(buyRequestData.TransactionId)
.Items;
var itemPurchased = traderAssorts.FirstOrDefault(item =>
@@ -208,7 +208,7 @@ public class TradeHelper(
TraderId = buyRequestData.TransactionId,
};
- _traderHelper.AddTraderPurchasesToPlayerProfile(
+ traderHelper.AddTraderPurchasesToPlayerProfile(
sessionID,
itemPurchaseDat,
itemPurchased
@@ -217,7 +217,7 @@ public class TradeHelper(
};
// Get all trader assort items
- var traderItems = _traderAssortHelper
+ var traderItems = traderAssortHelper
.GetAssort(sessionID, buyRequestData.TransactionId)
.Items;
@@ -225,7 +225,7 @@ public class TradeHelper(
var relevantItems = traderItems.FindAndReturnChildrenAsItems(buyRequestData.ItemId);
if (relevantItems.Count == 0)
{
- _logger.Error(
+ logger.Error(
$"Purchased trader: {buyRequestData.TransactionId} offer: {buyRequestData.ItemId} has no items"
);
}
@@ -234,7 +234,7 @@ public class TradeHelper(
}
// Get item details from db
- var itemDbDetails = _itemHelper.GetItem(offerItems.FirstOrDefault().Template).Value;
+ var itemDbDetails = itemHelper.GetItem(offerItems.FirstOrDefault().Template).Value;
var itemMaxStackSize = itemDbDetails.Properties.StackMaxSize;
var itemsToSendTotalCount = buyRequestData.Count;
var itemsToSendRemaining = itemsToSendTotalCount;
@@ -243,7 +243,7 @@ public class TradeHelper(
List
> itemsToSendToPlayer = [];
while (itemsToSendRemaining > 0)
{
- var offerClone = _cloner.Clone(offerItems);
+ var offerClone = cloner.Clone(offerItems);
// Handle stackable items that have a max stack size limit
var itemCountToSend = Math.Min(itemMaxStackSize ?? 0, itemsToSendRemaining ?? 0);
offerClone.FirstOrDefault().Upd.StackObjectsCount = itemCountToSend;
@@ -252,7 +252,7 @@ public class TradeHelper(
offerClone.RemapRootItemId();
if (offerClone.Count > 1)
{
- _itemHelper.ReparentItemAndChildren(offerClone.FirstOrDefault(), offerClone);
+ itemHelper.ReparentItemAndChildren(offerClone.FirstOrDefault(), offerClone);
}
itemsToSendToPlayer.Add(offerClone);
@@ -271,19 +271,19 @@ public class TradeHelper(
};
// Add items + their children to stash
- _inventoryHelper.AddItemsToStash(sessionID, request, pmcData, output);
+ inventoryHelper.AddItemsToStash(sessionID, request, pmcData, output);
if (output.Warnings?.Count > 0)
{
return;
}
/// Pay for purchase
- _paymentService.PayMoney(pmcData, buyRequestData, sessionID, output);
+ paymentService.PayMoney(pmcData, buyRequestData, sessionID, output);
if (output.Warnings?.Count > 0)
{
var errorMessage =
$"Transaction failed: {output.Warnings.FirstOrDefault().ErrorMessage}";
- _httpResponseUtil.AppendErrorToOutput(
+ httpResponseUtil.AppendErrorToOutput(
output,
errorMessage,
BackendErrorCodes.UnknownTradingError
@@ -304,12 +304,12 @@ public class TradeHelper(
PmcData profileWithItemsToSell,
PmcData profileToReceiveMoney,
ProcessSellTradeRequestData sellRequest,
- string sessionID,
+ MongoId sessionID,
ItemEventRouterResponse output
)
{
// Check for and increment SoldToTrader condition counters
- _questHelper.IncrementSoldToTraderCounters(
+ questHelper.IncrementSoldToTraderCounters(
profileWithItemsToSell,
profileToReceiveMoney,
sellRequest
@@ -329,30 +329,30 @@ public class TradeHelper(
{
var errorMessage =
$"Unable to sell item {itemToBeRemoved.Id}, cannot be found in player inventory";
- _logger.Error(errorMessage);
+ logger.Error(errorMessage);
- _httpResponseUtil.AppendErrorToOutput(output, errorMessage);
+ httpResponseUtil.AppendErrorToOutput(output, errorMessage);
return;
}
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Selling: id: {matchingItemInInventory.Id} tpl: {matchingItemInInventory.Template}"
);
}
if (sellRequest.TransactionId == Traders.FENCE)
{
- _fenceService.AddItemsToFenceAssort(
+ fenceService.AddItemsToFenceAssort(
profileWithItemsToSell.Inventory.Items,
matchingItemInInventory
);
}
// Remove item from inventory + any child items it has
- _inventoryHelper.RemoveItem(
+ inventoryHelper.RemoveItem(
profileWithItemsToSell,
itemToBeRemoved.Id,
sessionID,
@@ -361,7 +361,7 @@ public class TradeHelper(
}
// Give player money for sold item(s)
- _paymentService.GiveProfileMoney(
+ paymentService.GiveProfileMoney(
profileToReceiveMoney,
sellRequest.Price,
sellRequest,
@@ -380,20 +380,20 @@ public class TradeHelper(
/// Id of assort being purchased
/// How many of the item are being bought
protected void CheckPurchaseIsWithinTraderItemLimit(
- string sessionId,
+ MongoId sessionId,
PmcData pmcData,
- string traderId,
+ MongoId traderId,
Item assortBeingPurchased,
- string assortId,
+ MongoId assortId,
double count
)
{
- var traderPurchaseData = _traderPurchasePersisterService.GetProfileTraderPurchase(
+ var traderPurchaseData = traderPurchasePersisterService.GetProfileTraderPurchase(
sessionId,
traderId,
assortBeingPurchased.Id
);
- var traderItemPurchaseLimit = _traderHelper.GetAccountTypeAdjustedTraderPurchaseLimit(
+ var traderItemPurchaseLimit = traderHelper.GetAccountTypeAdjustedTraderPurchaseLimit(
(double)assortBeingPurchased.Upd?.BuyRestrictionMax,
pmcData.Info.GameVersion
);
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs
index bec47347..a6022730 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/TraderAssortHelper.cs
@@ -1,5 +1,6 @@
using SPTarkov.DI.Annotations;
using SPTarkov.Server.Core.Extensions;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Utils;
@@ -12,15 +13,15 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable(InjectionType.Singleton)]
public class TraderAssortHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- DatabaseService _databaseService,
- ProfileHelper _profileHelper,
- AssortHelper _assortHelper,
- TraderPurchasePersisterService _traderPurchasePersisterService,
- TraderHelper _traderHelper,
- FenceService _fenceService,
- ICloner _cloner
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ DatabaseService databaseService,
+ ProfileHelper profileHelper,
+ AssortHelper assortHelper,
+ TraderPurchasePersisterService traderPurchasePersisterService,
+ TraderHelper traderHelper,
+ FenceService fenceService,
+ ICloner cloner
)
{
private Dictionary>? _mergedQuestAssorts;
@@ -38,21 +39,25 @@ public class TraderAssortHelper(
/// traders id
/// Should assorts player hasn't unlocked be returned - default false
/// a traders' assorts
- public TraderAssort GetAssort(string sessionId, string traderId, bool showLockedAssorts = false)
+ public TraderAssort GetAssort(
+ MongoId sessionId,
+ MongoId traderId,
+ bool showLockedAssorts = false
+ )
{
- var traderClone = _cloner.Clone(_databaseService.GetTrader(traderId));
- var fullProfile = _profileHelper.GetFullProfile(sessionId);
+ var traderClone = cloner.Clone(databaseService.GetTrader(traderId));
+ var fullProfile = profileHelper.GetFullProfile(sessionId);
var pmcProfile = fullProfile?.CharacterData?.PmcData;
if (traderId == Traders.FENCE)
{
- return _fenceService.GetFenceAssorts(pmcProfile);
+ return fenceService.GetFenceAssorts(pmcProfile);
}
// Strip assorts player should not see yet
if (!showLockedAssorts)
{
- traderClone.Assort = _assortHelper.StripLockedLoyaltyAssort(
+ traderClone.Assort = assortHelper.StripLockedLoyaltyAssort(
pmcProfile,
traderId,
traderClone.Assort
@@ -65,7 +70,7 @@ public class TraderAssortHelper(
traderClone.Assort.NextResupply = traderClone.Base.NextResupply;
// Adjust displayed assort counts based on values stored in profile
- var assortPurchasesfromTrader = _traderPurchasePersisterService.GetProfileTraderPurchases(
+ var assortPurchasesfromTrader = traderPurchasePersisterService.GetProfileTraderPurchases(
sessionId,
traderId
);
@@ -76,9 +81,9 @@ public class TraderAssortHelper(
var assortToAdjust = traderClone.Assort.Items.FirstOrDefault(x => x.Id == assortId.Key);
if (assortToAdjust is null)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Cannot find trader: {traderClone.Base.Nickname} assort: {assortId} to adjust BuyRestrictionCurrent value, skipping"
);
}
@@ -88,9 +93,9 @@ public class TraderAssortHelper(
if (assortToAdjust.Upd is null)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug(
+ logger.Debug(
$"Unable to adjust assort: {assortToAdjust.Id} item: {assortToAdjust.Template} BuyRestrictionCurrent value, assort has a null upd object"
);
}
@@ -103,7 +108,7 @@ public class TraderAssortHelper(
);
}
- traderClone.Assort = _assortHelper.StripLockedQuestAssort(
+ traderClone.Assort = assortHelper.StripLockedQuestAssort(
pmcProfile,
traderId,
traderClone.Assort,
@@ -148,7 +153,7 @@ public class TraderAssortHelper(
var result = new Dictionary>();
// Loop every trader
- var traders = _databaseService.GetTraders();
+ var traders = databaseService.GetTraders();
foreach (var (_, trader) in traders)
{
if (trader?.QuestAssort is null)
@@ -188,7 +193,7 @@ public class TraderAssortHelper(
trader.Assort.Items = GetPristineTraderAssorts(trader.Base.Id);
// Update resupply value to next timestamp
- trader.Base.NextResupply = (int)_traderHelper.GetNextUpdateTimestamp(trader.Base.Id);
+ trader.Base.NextResupply = (int)traderHelper.GetNextUpdateTimestamp(trader.Base.Id);
// Flag a refresh is needed so ragfair update() will pick it up
trader.Base.RefreshTraderRagfairOffers = true;
@@ -199,10 +204,10 @@ public class TraderAssortHelper(
///
/// Trader to check
/// true they need refreshing
- public bool TraderAssortsHaveExpired(string traderID)
+ public bool TraderAssortsHaveExpired(MongoId traderID)
{
- var time = _timeUtil.GetTimeStamp();
- var trader = _databaseService.GetTables().Traders[traderID];
+ var time = timeUtil.GetTimeStamp();
+ var trader = databaseService.GetTables().Traders[traderID];
return trader.Base.NextResupply <= time;
}
@@ -212,8 +217,8 @@ public class TraderAssortHelper(
///
/// trader id
/// array of Items
- protected List- GetPristineTraderAssorts(string traderId)
+ protected List
- GetPristineTraderAssorts(MongoId traderId)
{
- return _cloner.Clone(_traderHelper.GetTraderAssortsByTraderId(traderId).Items);
+ return cloner.Clone(traderHelper.GetTraderAssortsByTraderId(traderId).Items);
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs
index dc223183..2466bab5 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/TraderHelper.cs
@@ -16,17 +16,17 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class TraderHelper(
- ISptLogger _logger,
- DatabaseService _databaseService,
- ProfileHelper _profileHelper,
- HandbookHelper _handbookHelper,
- ItemHelper _itemHelper,
- ServerLocalisationService _serverLocalisationService,
- FenceService _fenceService,
- TraderStore _traderStore,
- TimeUtil _timeUtil,
- RandomUtil _randomUtil,
- ConfigServer _configServer
+ ISptLogger logger,
+ DatabaseService databaseService,
+ ProfileHelper profileHelper,
+ HandbookHelper handbookHelper,
+ ItemHelper itemHelper,
+ ServerLocalisationService serverLocalisationService,
+ FenceService fenceService,
+ TraderStore traderStore,
+ TimeUtil timeUtil,
+ RandomUtil randomUtil,
+ ConfigServer configServer
)
{
protected readonly List _gameVersions =
@@ -35,11 +35,11 @@ public class TraderHelper(
GameEditions.UNHEARD,
];
protected readonly Dictionary _highestTraderPriceItems = new();
- protected readonly TraderConfig _traderConfig = _configServer.GetConfig();
+ protected readonly TraderConfig _traderConfig = configServer.GetConfig();
public TraderBase? GetTraderByNickName(string traderName)
{
- return _databaseService
+ return databaseService
.GetTraders()
.Select(dict => dict.Value.Base)
.FirstOrDefault(t =>
@@ -55,18 +55,18 @@ public class TraderHelper(
/// Traders Id to get
/// Players id
/// Trader base
- public TraderBase? GetTrader(string traderID, string sessionID)
+ public TraderBase? GetTrader(string traderID, MongoId sessionID)
{
if (traderID == "ragfair")
{
return new TraderBase { Currency = CurrencyType.RUB };
}
- var pmcData = _profileHelper.GetPmcProfile(sessionID);
+ var pmcData = profileHelper.GetPmcProfile(sessionID);
if (pmcData == null)
{
throw new Exception(
- _serverLocalisationService.GetText(
+ serverLocalisationService.GetText(
"trader-unable_to_find_profile_with_id",
sessionID
)
@@ -81,11 +81,11 @@ public class TraderHelper(
LevelUp(traderID, pmcData);
}
- var traderBase = _databaseService.GetTrader(traderID).Base;
+ var traderBase = databaseService.GetTrader(traderID).Base;
if (traderBase == null)
{
- _logger.Error(
- _serverLocalisationService.GetText("trader-unable_to_find_trader_by_id", traderID)
+ logger.Error(
+ serverLocalisationService.GetText("trader-unable_to_find_trader_by_id", traderID)
);
}
@@ -100,8 +100,8 @@ public class TraderHelper(
public TraderAssort GetTraderAssortsByTraderId(MongoId traderId)
{
return traderId == Traders.FENCE
- ? _fenceService.GetRawFenceAssorts()
- : _databaseService.GetTrader(traderId).Assort;
+ ? fenceService.GetRawFenceAssorts()
+ : databaseService.GetTrader(traderId).Assort;
}
///
@@ -115,9 +115,9 @@ public class TraderHelper(
var traderAssorts = GetTraderAssortsByTraderId(traderId);
if (traderAssorts is null)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"No assorts on trader: {traderId} found");
+ logger.Debug($"No assorts on trader: {traderId} found");
}
return null;
@@ -127,9 +127,9 @@ public class TraderHelper(
var purchasedAssort = traderAssorts.Items.FirstOrDefault(item => item.Id == assortId);
if (purchasedAssort is null)
{
- if (_logger.IsLogEnabled(LogLevel.Debug))
+ if (logger.IsLogEnabled(LogLevel.Debug))
{
- _logger.Debug($"No assort {assortId} on trader: {traderId} found");
+ logger.Debug($"No assort {assortId} on trader: {traderId} found");
}
return null;
@@ -144,22 +144,22 @@ public class TraderHelper(
///
/// session id of player
/// trader id to reset
- public void ResetTrader(string sessionID, string traderID)
+ public void ResetTrader(MongoId sessionID, MongoId traderID)
{
- var profiles = _databaseService.GetProfileTemplates();
- var trader = _databaseService.GetTrader(traderID);
+ var profiles = databaseService.GetProfileTemplates();
+ var trader = databaseService.GetTrader(traderID);
- var fullProfile = _profileHelper.GetFullProfile(sessionID);
+ var fullProfile = profileHelper.GetFullProfile(sessionID);
if (fullProfile is null)
{
throw new Exception(
- _serverLocalisationService.GetText("trader-unable_to_find_profile_by_id", sessionID)
+ serverLocalisationService.GetText("trader-unable_to_find_profile_by_id", sessionID)
);
}
// Get matching profile 'type' e.g. 'standard'
var pmcData = fullProfile.CharacterData.PmcData;
- var matchingSide = _profileHelper.GetProfileTemplateForSide(
+ var matchingSide = profileHelper.GetProfileTemplateForSide(
fullProfile.ProfileInfo.Edition,
pmcData.Info.Side
);
@@ -195,7 +195,7 @@ public class TraderHelper(
)
{
// Get traders clothing
- var clothing = _databaseService.GetTrader(traderID).Suits;
+ var clothing = databaseService.GetTrader(traderID).Suits;
if (clothing?.Count > 0)
// Force suit ids into profile
{
@@ -206,7 +206,7 @@ public class TraderHelper(
// Template has flea block
if ((profileTemplateTraderData.FleaBlockedDays ?? 0) > 0)
{
- var newBanDateTime = _timeUtil.GetTimeStampFromNowDays(
+ var newBanDateTime = timeUtil.GetTimeStampFromNowDays(
profileTemplateTraderData.FleaBlockedDays ?? 0
);
var existingBan = pmcData.Info.Bans?.FirstOrDefault(ban =>
@@ -237,7 +237,10 @@ public class TraderHelper(
/// Trader id to get standing for
/// Raw profile from profiles.json to look up standing from
/// Standing value
- protected double? GetStartingStanding(string traderId, ProfileTraderTemplate rawProfileTemplate)
+ protected double? GetStartingStanding(
+ MongoId traderId,
+ ProfileTraderTemplate rawProfileTemplate
+ )
{
if (rawProfileTemplate.InitialStanding.TryGetValue(traderId, out var standing))
{
@@ -259,13 +262,13 @@ public class TraderHelper(
/// Trader to alter
/// New status to use
/// Session id of player
- public void SetTraderUnlockedState(string traderId, bool status, string sessionId)
+ public void SetTraderUnlockedState(MongoId traderId, bool status, MongoId sessionId)
{
- var pmcData = _profileHelper.GetPmcProfile(sessionId);
+ var pmcData = profileHelper.GetPmcProfile(sessionId);
var profileTraderData = pmcData.TradersInfo[traderId];
if (profileTraderData is null)
{
- _logger.Error(
+ logger.Error(
$"Unable to set trader {traderId} unlocked state to: {status} as trader cannot be found in profile"
);
@@ -281,9 +284,9 @@ public class TraderHelper(
/// Session id of player
/// Traders id to add standing to
/// Standing value to add to trader
- public void AddStandingToTrader(string sessionId, string traderId, double standingToAdd)
+ public void AddStandingToTrader(MongoId sessionId, MongoId traderId, double standingToAdd)
{
- var fullProfile = _profileHelper.GetFullProfile(sessionId);
+ var fullProfile = profileHelper.GetFullProfile(sessionId);
var pmcTraderInfo = fullProfile.CharacterData.PmcData.TradersInfo[traderId];
// Add standing to trader
@@ -317,10 +320,10 @@ public class TraderHelper(
/// Iterate over a profile's traders and ensure they have the correct loyalty level for the player.
///
/// Profile to check.
- public void ValidateTraderStandingsAndPlayerLevelForProfile(string sessionId)
+ public void ValidateTraderStandingsAndPlayerLevelForProfile(MongoId sessionId)
{
- var profile = _profileHelper.GetPmcProfile(sessionId);
- var traders = _databaseService.GetTraders();
+ var profile = profileHelper.GetPmcProfile(sessionId);
+ var traders = databaseService.GetTraders();
foreach (var trader in traders)
{
LevelUp(trader.Key, profile);
@@ -333,13 +336,13 @@ public class TraderHelper(
///
/// Trader to check standing of.
/// Profile to update trader in.
- public void LevelUp(string traderID, PmcData pmcData)
+ public void LevelUp(MongoId traderID, PmcData pmcData)
{
- var loyaltyLevels = _databaseService.GetTrader(traderID).Base.LoyaltyLevels;
+ var loyaltyLevels = databaseService.GetTrader(traderID).Base.LoyaltyLevels;
// Level up player
pmcData.Info.Level = pmcData.CalculateLevel(
- _databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable
+ databaseService.GetGlobals().Configuration.Exp.Level.ExperienceTable
);
// Level up traders
@@ -372,9 +375,9 @@ public class TraderHelper(
///
/// Trader to look up update value for.
/// Future timestamp.
- public long GetNextUpdateTimestamp(string traderID)
+ public long GetNextUpdateTimestamp(MongoId traderID)
{
- var time = _timeUtil.GetTimeStamp();
+ var time = timeUtil.GetTimeStamp();
var updateSeconds = GetTraderUpdateSeconds(traderID) ?? 0;
return time + updateSeconds;
}
@@ -384,13 +387,13 @@ public class TraderHelper(
///
/// Trader to look up.
/// Time in seconds.
- public long? GetTraderUpdateSeconds(string traderId)
+ public long? GetTraderUpdateSeconds(MongoId traderId)
{
var traderDetails = _traderConfig.UpdateTime.FirstOrDefault(x => x.TraderId == traderId);
if (traderDetails?.Seconds?.Min is null || traderDetails.Seconds?.Max is null)
{
- _logger.Warning(
- _serverLocalisationService.GetText(
+ logger.Warning(
+ serverLocalisationService.GetText(
"trader-missing_trader_details_using_default_refresh_time",
new { traderId, updateTime = _traderConfig.UpdateTimeDefault }
)
@@ -411,12 +414,12 @@ public class TraderHelper(
return null;
}
- return _randomUtil.GetInt(traderDetails.Seconds.Min, traderDetails.Seconds.Max);
+ return randomUtil.GetInt(traderDetails.Seconds.Min, traderDetails.Seconds.Max);
}
- public TraderLoyaltyLevel GetLoyaltyLevel(string traderID, PmcData pmcData)
+ public TraderLoyaltyLevel GetLoyaltyLevel(MongoId traderID, PmcData pmcData)
{
- var traderBase = _databaseService.GetTrader(traderID).Base;
+ var traderBase = databaseService.GetTrader(traderID).Base;
int? loyaltyLevel = null;
if (pmcData.TradersInfo.TryGetValue(traderID, out var traderInfo))
@@ -443,18 +446,18 @@ public class TraderHelper(
/// Session id
/// New item assort id + count
public void AddTraderPurchasesToPlayerProfile(
- string sessionID,
+ MongoId sessionID,
PurchaseDetails newPurchaseDetails,
Item itemPurchased
)
{
- var profile = _profileHelper.GetFullProfile(sessionID);
+ var profile = profileHelper.GetFullProfile(sessionID);
var traderId = newPurchaseDetails.TraderId;
// Iterate over assorts bought and add to profile
foreach (var purchasedItem in newPurchaseDetails.Items)
{
- var currentTime = _timeUtil.GetTimeStamp();
+ var currentTime = timeUtil.GetTimeStamp();
// Nullguard traderPurchases
profile.TraderPurchases ??=
@@ -488,7 +491,7 @@ public class TraderHelper(
)
{
throw new Exception(
- _serverLocalisationService.GetText(
+ serverLocalisationService.GetText(
"trader-unable_to_purchase_item_limit_reached",
new { traderId, limit = itemPurchased.Upd.BuyRestrictionMax }
)
@@ -534,7 +537,7 @@ public class TraderHelper(
}
// Init dict and fill
- foreach (var trader in _traderStore.GetAllTraders())
+ foreach (var trader in traderStore.GetAllTraders())
{
// Skip some traders
if (trader.Id == Traders.FENCE)
@@ -543,7 +546,7 @@ public class TraderHelper(
}
// Get assorts for trader, skip trader if no assorts found
- var traderAssorts = _databaseService.GetTrader(trader.Id).Assort;
+ var traderAssorts = databaseService.GetTrader(trader.Id).Assort;
if (traderAssorts is null)
{
continue;
@@ -562,7 +565,7 @@ public class TraderHelper(
var roubleAmount =
barterScheme.Template == Money.ROUBLES
? barterScheme.Count
- : _handbookHelper.InRUB(barterScheme.Count ?? 1, barterScheme.Template);
+ : handbookHelper.InRUB(barterScheme.Count ?? 1, barterScheme.Template);
// Existing price smaller in dict than current iteration, overwrite
if (_highestTraderPriceItems[item.Template] < roubleAmount)
@@ -584,15 +587,15 @@ public class TraderHelper(
{
// Find largest trader price for item
var highestPrice = 1d; // Default price
- foreach (var trader in _traderStore.GetAllTraders())
+ foreach (var trader in traderStore.GetAllTraders())
{
// Get trader and check buy category allows tpl
- var traderBase = _databaseService.GetTrader(trader.Id).Base;
+ var traderBase = databaseService.GetTrader(trader.Id).Base;
// Skip traders that don't sell this category of item
if (
traderBase is null
- || !_itemHelper.IsOfBaseclasses(tpl, traderBase.ItemsBuy.Category)
+ || !itemHelper.IsOfBaseclasses(tpl, traderBase.ItemsBuy.Category)
)
{
continue;
@@ -604,8 +607,8 @@ public class TraderHelper(
var traderBuyBackPricePercent =
100 - traderBase.LoyaltyLevels.FirstOrDefault().BuyPriceCoefficient;
- var itemHandbookPrice = _handbookHelper.GetTemplatePrice(tpl);
- var priceTraderBuysItemAt = _randomUtil.GetPercentOfValue(
+ var itemHandbookPrice = handbookHelper.GetTemplatePrice(tpl);
+ var priceTraderBuysItemAt = randomUtil.GetPercentOfValue(
traderBuyBackPricePercent ?? 0,
itemHandbookPrice,
0
@@ -626,8 +629,8 @@ public class TraderHelper(
///
/// Trader id
/// True if a Trader exists with given ID
- public bool TraderExists(string traderId)
+ public bool TraderExists(MongoId traderId)
{
- return _traderStore.GetTraderById(traderId) != null;
+ return traderStore.GetTraderById(traderId) != null;
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs
index b82db79f..382bff58 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/WeatherHelper.cs
@@ -9,12 +9,12 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class WeatherHelper(
- ISptLogger _logger,
- TimeUtil _timeUtil,
- ConfigServer _configServer
+ ISptLogger logger,
+ TimeUtil timeUtil,
+ ConfigServer configServer
)
{
- protected readonly WeatherConfig _weatherConfig = _configServer.GetConfig();
+ protected readonly WeatherConfig _weatherConfig = configServer.GetConfig();
///
/// Assumes current time
@@ -23,7 +23,7 @@ public class WeatherHelper(
/// Date object of current in-raid time
public DateTime GetInRaidTime()
{
- return GetInRaidTime(_timeUtil.GetTimeStamp());
+ return GetInRaidTime(timeUtil.GetTimeStamp());
}
///
@@ -34,11 +34,11 @@ public class WeatherHelper(
public DateTime GetInRaidTime(long timestamp)
{
// tarkov time = (real time * 7 % 24 hr) + 3 hour
- var russiaOffsetSeconds = _timeUtil.GetHoursAsSeconds(3);
- var twentyFourHoursSeconds = _timeUtil.GetHoursAsSeconds(24);
+ var russiaOffsetSeconds = timeUtil.GetHoursAsSeconds(3);
+ var twentyFourHoursSeconds = timeUtil.GetHoursAsSeconds(24);
var currentTimestampSeconds = timestamp;
- var tarkovTime = _timeUtil.GetDateTimeFromTimeStamp(
+ var tarkovTime = timeUtil.GetDateTimeFromTimeStamp(
(long)(russiaOffsetSeconds + currentTimestampSeconds * _weatherConfig.Acceleration)
% twentyFourHoursSeconds
);
diff --git a/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs
index 1a5701f7..5bb68061 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/WeightedRandomHelper.cs
@@ -9,9 +9,9 @@ namespace SPTarkov.Server.Core.Helpers;
[Injectable]
public class WeightedRandomHelper(
- ISptLogger _logger,
+ ISptLogger logger,
ServerLocalisationService localisationService,
- RandomUtil _randomUtil
+ RandomUtil randomUtil
)
{
///
@@ -51,19 +51,19 @@ public class WeightedRandomHelper(
{
if (items.Count == 0)
{
- _logger.Error(localisationService.GetText("weightedrandomhelper-supplied_items_empty"));
+ logger.Error(localisationService.GetText("weightedrandomhelper-supplied_items_empty"));
}
if (weights.Count == 0)
{
- _logger.Error(
+ logger.Error(
localisationService.GetText("weightedrandomhelper-supplied_weights_empty")
);
}
if (items.Count != weights.Count)
{
- _logger.Error(
+ logger.Error(
localisationService.GetText(
"weightedrandomhelper-supplied_data_doesnt_match",
new { itemCount = items.Count, weightCount = weights.Count }
@@ -78,7 +78,7 @@ public class WeightedRandomHelper(
{
if (weights[i] < 0)
{
- _logger.Warning($"Weight at index: {i} is negative ({weights[i]}), skipping");
+ logger.Warning($"Weight at index: {i} is negative ({weights[i]}), skipping");
continue;
}
@@ -89,12 +89,12 @@ public class WeightedRandomHelper(
if (sumOfWeights == weights.Count)
{
// Weights are all the same, early exit
- var randomIndex = _randomUtil.GetInt(0, items.Count - 1);
+ var randomIndex = randomUtil.GetInt(0, items.Count - 1);
return new WeightedRandomResult { Item = items[randomIndex], Index = randomIndex };
}
// Getting the random number in a range of [0...sum(weights)]
- var randomNumber = sumOfWeights * _randomUtil.GetDouble(0, 1);
+ var randomNumber = sumOfWeights * randomUtil.GetDouble(0, 1);
// Picking the random item based on its weight.
for (var itemIndex = 0; itemIndex < items.Count; itemIndex++)
diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Achievement.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Achievement.cs
index 0738f548..3c2877af 100644
--- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Achievement.cs
+++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Achievement.cs
@@ -1,4 +1,5 @@
using System.Text.Json.Serialization;
+using SPTarkov.Server.Core.Models.Common;
namespace SPTarkov.Server.Core.Models.Eft.Common.Tables;
@@ -11,7 +12,7 @@ public record Achievement
public required int Index { get; set; }
[JsonPropertyName("id")]
- public required string Id { get; set; }
+ public required MongoId Id { get; set; }
[JsonPropertyName("imageUrl")]
public required string ImageUrl { get; set; }
diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs
index 2d477bfc..bfadda66 100644
--- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs
+++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs
@@ -42,7 +42,7 @@ public record Quest
public string? Note { get; set; }
[JsonPropertyName("traderId")]
- public required string TraderId { get; set; }
+ public required MongoId TraderId { get; set; }
[JsonPropertyName("location")]
public required string Location { get; set; }
diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/SearchRequestData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/SearchRequestData.cs
index 599e3bcf..feb1be74 100644
--- a/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/SearchRequestData.cs
+++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Ragfair/SearchRequestData.cs
@@ -1,4 +1,5 @@
using System.Text.Json.Serialization;
+using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Utils;
@@ -70,7 +71,7 @@ public record SearchRequestData : IRequestData
public string? NeededSearchId { get; set; }
[JsonPropertyName("buildItems")]
- public Dictionary? BuildItems { get; set; }
+ public Dictionary? BuildItems { get; set; }
[JsonPropertyName("buildCount")]
public int? BuildCount { get; set; }