diff --git a/Libraries/Core/Callbacks/MatchCallbacks.cs b/Libraries/Core/Callbacks/MatchCallbacks.cs
index b6913773..f547be19 100644
--- a/Libraries/Core/Callbacks/MatchCallbacks.cs
+++ b/Libraries/Core/Callbacks/MatchCallbacks.cs
@@ -303,6 +303,7 @@ public class MatchCallbacks(
///
public string GetRaidConfiguration(string url, GetRaidConfigurationRequestData info, string sessionID)
{
+ _matchController.ConfigureOfflineRaid(info, sessionID);
return _httpResponseUtil.NullResponse();
}
diff --git a/Libraries/Core/Controllers/BotController.cs b/Libraries/Core/Controllers/BotController.cs
index 1276aa73..73484059 100644
--- a/Libraries/Core/Controllers/BotController.cs
+++ b/Libraries/Core/Controllers/BotController.cs
@@ -132,15 +132,13 @@ public class BotController(
public List Generate(string sessionId, GenerateBotsRequestData info)
{
- // var pmcProfile = _profileHelper.GetPmcProfile(sessionId);
- //
- // // Use this opportunity to create and cache bots for later retrieval
- // var multipleBotTypesRequested = info.Conditions?.Count > 1;
- // return multipleBotTypesRequested
- // ? GenerateMultipleBotsAndCache(info, pmcProfile, sessionId)
- // : ReturnSingleBotFromCache(sessionId, info);
-
- return new List();
+ var pmcProfile = _profileHelper.GetPmcProfile(sessionId);
+
+ // Use this opportunity to create and cache bots for later retrieval
+ var multipleBotTypesRequested = info.Conditions?.Count > 1;
+ return multipleBotTypesRequested
+ ? GenerateMultipleBotsAndCache(info, pmcProfile, sessionId)
+ : ReturnSingleBotFromCache(sessionId, info);
}
private List GenerateMultipleBotsAndCache(GenerateBotsRequestData request, PmcData? pmcProfile, string sessionId)
@@ -205,16 +203,16 @@ public class BotController(
for (var i = 0; i < botsToGenerate; i++)
{
- try
- {
+ // try
+ // {
var detailsClone = _cloner.Clone(botGenerationDetails);
GenerateSingleBotAndStoreInCache(detailsClone, sessionId, cacheKey);
progressWriter.Increment();
- }
- catch (Exception e)
- {
- _logger.Error($"Failed to generate bot #{i + 1}: {e.Message}");
- }
+ // }
+ // catch (Exception e)
+ // {
+ // _logger.Error($"Failed to generate bot #{i + 1}: {e.Message}");
+ // }
}
_logger.Debug(
@@ -358,7 +356,7 @@ public class BotController(
{
var mapSpecificConversionValues = _pmcConfig.ConvertIntoPmcChance!.GetValueOrDefault(location?.ToLower(), null);
return mapSpecificConversionValues is null
- ? _pmcConfig.ConvertIntoPmcChance.GetByJsonProp>("default").GetByJsonProp(requestedBotRole)
+ ? _pmcConfig.ConvertIntoPmcChance.GetValueOrDefault("default")?.GetValueOrDefault(requestedBotRole)
: mapSpecificConversionValues.GetByJsonProp(requestedBotRole?.ToLower());
}
diff --git a/Libraries/Core/Helpers/RagfairOfferHelper.cs b/Libraries/Core/Helpers/RagfairOfferHelper.cs
index 9200177a..89d8fb15 100644
--- a/Libraries/Core/Helpers/RagfairOfferHelper.cs
+++ b/Libraries/Core/Helpers/RagfairOfferHelper.cs
@@ -46,7 +46,47 @@ public class RagfairOfferHelper(
Dictionary traderAssorts,
PmcData pmcData)
{
- throw new NotImplementedException();
+ var playerIsFleaBanned = _profileHelper.PlayerIsFleaBanned(pmcData);
+ var tieredFlea = _ragfairConfig.TieredFlea;
+ var tieredFleaLimitTypes = tieredFlea.UnlocksType;
+ return _ragfairOfferService.GetOffers()
+ .Where(
+ offer =>
+ {
+ if (!PassesSearchFilterCriteria(searchRequest, offer, pmcData))
+ {
+ return false;
+ }
+
+ var isDisplayable = IsDisplayableOffer(
+ searchRequest,
+ itemsToAdd,
+ traderAssorts,
+ offer,
+ pmcData,
+ playerIsFleaBanned
+ );
+
+ if (!isDisplayable)
+ {
+ return false;
+ }
+
+ // Not trader offer + tiered flea enabled
+ if (tieredFlea.Enabled && !OfferIsFromTrader(offer))
+ {
+ CheckAndLockOfferFromPlayerTieredFlea(
+ tieredFlea,
+ offer,
+ tieredFleaLimitTypes.Keys.ToList(),
+ pmcData.Info.Level.Value
+ );
+ }
+
+ return true;
+ }
+ )
+ .ToList();
}
///
@@ -114,19 +154,28 @@ public class RagfairOfferHelper(
var requiredOffers = _ragfairRequiredItemsService.GetRequiredItemsById(searchRequest.NeededSearchId);
var tieredFlea = _ragfairConfig.TieredFlea;
var tieredFleaLimitTypes = tieredFlea.UnlocksType;
- return requiredOffers.Where((offer) => {
- if (!PassesSearchFilterCriteria(searchRequest, offer, pmcData))
- {
- return false;
- }
+ return requiredOffers.Where(
+ offer =>
+ {
+ if (!PassesSearchFilterCriteria(searchRequest, offer, pmcData))
+ {
+ return false;
+ }
- if (tieredFlea.Enabled && !OfferIsFromTrader(offer))
- {
- CheckAndLockOfferFromPlayerTieredFlea(tieredFlea, offer, tieredFleaLimitTypes.Keys.ToList(), pmcData.Info.Level.Value);
- }
+ if (tieredFlea.Enabled && !OfferIsFromTrader(offer))
+ {
+ CheckAndLockOfferFromPlayerTieredFlea(
+ tieredFlea,
+ offer,
+ tieredFleaLimitTypes.Keys.ToList(),
+ pmcData.Info.Level.Value
+ );
+ }
- return true;
- }).ToList();
+ return true;
+ }
+ )
+ .ToList();
}
///
@@ -624,7 +673,7 @@ public class RagfairOfferHelper(
protected void DeleteOfferById(string sessionId, string offerId)
{
var profileRagfairInfo = _profileHelper.GetPmcProfile(sessionId).RagfairInfo;
- var index = profileRagfairInfo.Offers.FindIndex((o) => o.Id == offerId);
+ var index = profileRagfairInfo.Offers.FindIndex(o => o.Id == offerId);
profileRagfairInfo.Offers.Splice(index, 1);
// Also delete from ragfair
diff --git a/Libraries/Core/Services/BotEquipmentFilterService.cs b/Libraries/Core/Services/BotEquipmentFilterService.cs
index 8e075ee4..603d1309 100644
--- a/Libraries/Core/Services/BotEquipmentFilterService.cs
+++ b/Libraries/Core/Services/BotEquipmentFilterService.cs
@@ -122,8 +122,8 @@ public class BotEquipmentFilterService
foreach (var itemKey in generationChanges)
{
- baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Weights = generationChanges.GetByJsonProp(itemKey.Key).Weights;
- baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Whitelist = generationChanges.GetByJsonProp(itemKey.Key).Whitelist;
+ baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Weights = generationChanges.GetValueOrDefault(itemKey.Key).Weights;
+ baseBotGeneration.Items.GetByJsonProp(itemKey.Key).Whitelist = generationChanges.GetValueOrDefault(itemKey.Key).Whitelist;
}
}
@@ -476,7 +476,7 @@ public class BotEquipmentFilterService
foreach (var itemToEditKvP in poolAdjustmentKvP.Value)
{
// Only make change if item exists as we're editing, not adding
- if (locationToUpdate[itemToEditKvP.Key] != null || locationToUpdate[itemToEditKvP.Key] == 0)
+ if (locationToUpdate.GetValueOrDefault(itemToEditKvP.Key) != null || locationToUpdate.GetValueOrDefault(itemToEditKvP.Key) == 0)
{
locationToUpdate[itemToEditKvP.Key] = itemToEditKvP.Value;
}
diff --git a/Libraries/Core/Services/BotGenerationCacheService.cs b/Libraries/Core/Services/BotGenerationCacheService.cs
index 7dac2e7f..ec47911b 100644
--- a/Libraries/Core/Services/BotGenerationCacheService.cs
+++ b/Libraries/Core/Services/BotGenerationCacheService.cs
@@ -1,6 +1,7 @@
using SptCommon.Annotations;
using Core.Models.Eft.Common.Tables;
using Core.Models.Utils;
+using SptCommon.Extensions;
namespace Core.Services;
@@ -43,7 +44,7 @@ public class BotGenerationCacheService(
{
try
{
- return _activeBotsInRaid.Dequeue();
+ return bots.Pop();
}
catch (Exception _)
{
diff --git a/Libraries/Core/Services/LocationLifecycleService.cs b/Libraries/Core/Services/LocationLifecycleService.cs
index 6cef2d0e..efceb569 100644
--- a/Libraries/Core/Services/LocationLifecycleService.cs
+++ b/Libraries/Core/Services/LocationLifecycleService.cs
@@ -156,6 +156,7 @@ public class LocationLifecycleService
var transitionData = _applicationContext
.GetLatestValue(ContextVariableType.TRANSIT_INFO)
?.GetValue();
+
if (transitionData is not null) {
_logger.Success($"Player: {sessionId} is in transit to {request.Location}");
result.Transition.TransitionType = TransitionType.COMMON;
diff --git a/SptCommon/Extensions/ListExtensions.cs b/SptCommon/Extensions/ListExtensions.cs
index dea6bdd1..c5833bdc 100644
--- a/SptCommon/Extensions/ListExtensions.cs
+++ b/SptCommon/Extensions/ListExtensions.cs
@@ -8,4 +8,11 @@ public static class ListExtensions
source.RemoveRange(index,count);
return items;
}
+
+ public static T Pop(this List source)
+ {
+ T r = source.Last();
+ source.Remove(source.Last());
+ return r;
+ }
}