Refactored logic of ragfairServer.update()

typo fixes
This commit is contained in:
Chomp
2025-08-06 15:17:34 +01:00
parent 98a186ff2f
commit 5cd5ed1f42
3 changed files with 36 additions and 25 deletions
@@ -60,7 +60,7 @@ public class RepairHelper(
newCurrentMaxDurability = itemMaxDurability;
}
// Ensure new current isnt above items max
// Ensure new current isn't above items max
if (newCurrentDurability > itemMaxDurability)
{
newCurrentDurability = itemMaxDurability;
@@ -69,7 +69,7 @@ public class RepairHelper(
// Update Repairable properties with new values after repair
itemToRepair.Upd.Repairable = new UpdRepairable { Durability = newCurrentDurability, MaxDurability = newCurrentMaxDurability };
// when modders set the repair coefficient to 0 it means that they dont want to lose durability on items
// when modders set the repair coefficient to 0 it means that they don't want to lose durability on items
// the code below generates a random degradation on the weapon durability
if (applyMaxDurabilityDegradation)
{
@@ -141,13 +141,13 @@ public class RepairHelper(
/// <param name="itemProps">Weapon properties</param>
/// <param name="isRepairKit">Was a repair kit used</param>
/// <param name="weaponMax">Max amount of durability item can have</param>
/// <param name="traderQualityMultipler">Different traders produce different loss values</param>
/// <param name="traderQualityMultiplier">Different traders produce different loss values</param>
/// <returns>Amount to reduce max durability by</returns>
protected double GetRandomisedWeaponRepairDegradationValue(
Props itemProps,
bool isRepairKit,
double weaponMax,
double traderQualityMultipler
double traderQualityMultiplier
)
{
var minRepairDeg = isRepairKit ? itemProps.MinRepairKitDegradation : itemProps.MinRepairDegradation;
@@ -160,7 +160,7 @@ public class RepairHelper(
}
var duraLossPercent = randomUtil.GetDouble((double)minRepairDeg, (double)maxRepairDeg);
var duraLossMultipliedByTraderMultiplier = duraLossPercent * weaponMax * traderQualityMultipler;
var duraLossMultipliedByTraderMultiplier = duraLossPercent * weaponMax * traderQualityMultiplier;
return Math.Round(duraLossMultipliedByTraderMultiplier, 2);
}
@@ -196,7 +196,7 @@ public record Dynamic
public required ArmorSettings Armor { get; set; }
/// <summary>
/// A multipler to apply to individual tpls price just prior to item quality adjustment
/// A multiplier to apply to individual tpls price just prior to item quality adjustment
/// </summary>
[JsonPropertyName("itemPriceMultiplier")]
public Dictionary<MongoId, double>? ItemPriceMultiplier { get; set; }
@@ -36,41 +36,52 @@ public class RagfairServer(
public void Update()
{
// Generate/refresh trader offers
var traders = GetUpdateableTraders();
foreach (var traderId in traders)
{
// Edge case - skip generating fence offers
if (traderId == Traders.FENCE)
{
continue;
}
RefreshTraderOffers();
ProcessExpiredFleaOffers();
// Update requirements now the offers have been expired/regenerated to ensure they're accurate
_ragfairRequiredItemsService.BuildRequiredItemTable();
}
protected void RefreshTraderOffers()
{
// Generate/refresh trader offers - skip fence as his offers are separately handled
var tradersToProcess = GetUpdateableTraders().Where(trader => trader != Traders.FENCE);
foreach (var traderId in tradersToProcess)
{
// Each trader has its own expiry time
if (_ragfairOfferService.TraderOffersNeedRefreshing(traderId))
{
// Trader has passed its offer cycle time, update stock and set offer times
// Trader has passed its offer expiry time, update stock and reset offer times
_ragfairOfferGenerator.GenerateFleaOffersForTrader(traderId);
}
}
}
// Regenerate expired offers when over threshold limit
private void ProcessExpiredFleaOffers()
{
// Regenerate expired offers when over timestamp threshold
_ragfairOfferHolder.FlagExpiredOffersAfterDate(timeUtil.GetTimeStamp());
if (_ragfairOfferService.EnoughExpiredOffersExistToProcess())
if (!_ragfairOfferService.EnoughExpiredOffersExistToProcess())
{
// Must occur BEFORE "RemoveExpiredOffers" + clone items as they'll be purged by `RemoveExpiredOffers()`
var expiredOfferItemsClone = cloner.Clone(_ragfairOfferHolder.GetExpiredOfferItems());
// Not enough expired offers to process, exit
return;
}
_ragfairOfferService.RemoveExpiredOffers();
// Must occur BEFORE "RemoveExpiredOffers" + clone items as they'll be purged by `RemoveExpiredOffers()`
var expiredOfferItemsClone = cloner.Clone(_ragfairOfferHolder.GetExpiredOfferItems());
// Force a cleanup+compact now all the expired offers are gone
GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized, true, true);
_ragfairOfferService.RemoveExpiredOffers();
// Force a cleanup+compact now all the expired offers are gone
GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized, true, true);
if (expiredOfferItemsClone is not null)
{
// Replace the expired offers with new ones
_ragfairOfferGenerator.GenerateDynamicOffers(expiredOfferItemsClone);
}
_ragfairRequiredItemsService.BuildRequiredItemTable();
}
/// <summary>