Refactored logic of ragfairServer.update()
typo fixes
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user