From a6ecb434c424b0b885a4fcb93c1c4b910400de38 Mon Sep 17 00:00:00 2001 From: CWX <91418059+CWXDEV@users.noreply.github.com> Date: Sun, 12 Jan 2025 23:18:24 +0000 Subject: [PATCH] add money enum, finish traderController (#47) * ignore nulls in json * Implement ProfileActivityService * add temp beta release * implement customizationController * comment out logging * implement gameStart * start traderController * add money enum, finish traderController --- Core/Controllers/TraderController.cs | 104 +++++++++++++++++++++++---- Core/Models/Enums/Money.cs | 9 +++ 2 files changed, 99 insertions(+), 14 deletions(-) create mode 100644 Core/Models/Enums/Money.cs diff --git a/Core/Controllers/TraderController.cs b/Core/Controllers/TraderController.cs index adcdaf29..e27aa89b 100644 --- a/Core/Controllers/TraderController.cs +++ b/Core/Controllers/TraderController.cs @@ -27,6 +27,7 @@ public class TraderController private PaymentHelper _paymentHelper; private RagfairPriceService _ragfairPriceService; private TraderPurchasePersisterService _traderPurchasePersisterService; + private FenceService _fenceService; private FenceBaseAssortGenerator _fenceBaseAssortGenerator; private ConfigServer _configServer; private ICloner _cloner; @@ -45,6 +46,7 @@ public class TraderController PaymentHelper paymentHelper, RagfairPriceService ragfairPriceService, TraderPurchasePersisterService traderPurchasePersisterService, + FenceService fenceService, FenceBaseAssortGenerator fenceBaseAssortGenerator, ConfigServer configServer, ICloner cloner @@ -60,6 +62,7 @@ public class TraderController _paymentHelper = paymentHelper; _ragfairPriceService = ragfairPriceService; _traderPurchasePersisterService = traderPurchasePersisterService; + _fenceService = fenceService; _fenceBaseAssortGenerator = fenceBaseAssortGenerator; _configServer = configServer; _cloner = cloner; @@ -74,7 +77,48 @@ public class TraderController /// public void Load() { - return; // TODO: actually implement + var nextHourTimestamp = _timeUtil.GetTimeStampOfNextHour(); + var traderResetStartsWithServer = _traderConfig.TradersResetFromServerStart; + + var traders = _databaseService.GetTraders(); + foreach (var trader in traders) + { + if (trader.Key == "ragfair" || trader.Key == Traders.LIGHTHOUSEKEEPER) + continue; + + if (trader.Key == Traders.FENCE) + { + _fenceBaseAssortGenerator.GenerateFenceBaseAssorts(); + _fenceService.GenerateFenceAssorts(); + continue; + } + + // Adjust price by traderPriceMultipler config property + if (_traderConfig.TraderPriceMultipler != 1) + { + foreach (var scheme in trader.Value?.Assort?.BarterScheme) + { + var barterSchemeItem = scheme.Value[0][0]; + + if (barterSchemeItem != null && _paymentHelper.IsMoneyTpl(barterSchemeItem?.Template)) + { + barterSchemeItem.Count += Math.Round((barterSchemeItem?.Count * _traderConfig?.TraderPriceMultipler) ?? 0D, 2); + } + } + } + + // Create dict of pristine trader assorts on server start + if (_traderAssortService.GetPristineTraderAssort(trader.Key) != null) + { + var assortsClone = _cloner.Clone(trader.Value.Assort); + _traderAssortService.SetPristineTraderAssort(trader.Key, assortsClone); + } + + _traderPurchasePersisterService.RemoveStalePurchasesFromProfiles(trader.Key); + + // Set to next hour on clock or current time + 60 mins + trader.Value.Base.NextResupply = traderResetStartsWithServer ? _traderHelper.GetNextUpdateTimestamp(trader.Value.Base.Id) : nextHourTimestamp; + } } /// @@ -85,7 +129,30 @@ public class TraderController /// public bool Update() { - throw new NotImplementedException(); + foreach (var trader in _databaseService.GetTables().Traders) + { + if (trader.Key == "ragfair" || trader.Key == Traders.LIGHTHOUSEKEEPER) + continue; + + if (trader.Key == Traders.FENCE) + { + if (_fenceService.NeedsPartialRefresh()) + _fenceService.GenerateFenceAssorts(); + + continue; + } + + // Trader needs to be refreshed + if (_traderAssortHelper.TraderAssortsHaveExpired(trader.Key)) + { + _traderAssortHelper.ResetExpiredTrader(trader.Value); + + // Reset purchase data per trader as they have independent reset times + _traderPurchasePersisterService.ResetTraderPurchasesStoredInProfile(trader.Key); + } + } + + return true; } /// @@ -101,13 +168,13 @@ public class TraderController { if (trader.Value.Base.Id == "ragfair") continue; - + traders.Add(_traderHelper.GetTrader(trader.Key, sessionId)); - + if (pmcData?.Info != null) _traderHelper.LevelUp(trader.Key, pmcData); } - + // traders.Sort((a, b) => SortByTraderId(a, b)); return traders; } @@ -131,11 +198,9 @@ public class TraderController /// /// /// - public TraderBase GetTrader( - string sessionId, - string traderId) + public TraderBase GetTrader(string sessionId, string traderId) { - throw new NotImplementedException(); + return _traderHelper.GetTrader(sessionId, traderId); } /// @@ -144,11 +209,9 @@ public class TraderController /// /// /// - public TraderAssort GetAssort( - string sessionId, - string traderId) + public TraderAssort GetAssort(string sessionId, string traderId) { - throw new NotImplementedException(); + return _traderAssortHelper.GetAssort(sessionId, traderId); } /// @@ -157,6 +220,19 @@ public class TraderController /// public GetItemPricesResponse GetItemPrices(string sessionId, string traderId) { - throw new NotImplementedException(); + var handbookPrices = _ragfairPriceService.GetAllStaticPrices(); + var handbookPricesClone = _cloner.Clone(handbookPrices); + + return new() + { + SupplyNextTime = _traderHelper.GetNextUpdateTimestamp(traderId), + Prices = handbookPricesClone, + CurrencyCourses = new Dictionary() + { + { "5449016a4bdc2d6f028b456f", handbookPrices[Money.ROUBLES] }, + { "569668774bdc2da2298b4568", handbookPrices[Money.EUROS] }, + { "5696686a4bdc2da3298b456a", handbookPrices[Money.DOLLARS] } + } + }; } } diff --git a/Core/Models/Enums/Money.cs b/Core/Models/Enums/Money.cs new file mode 100644 index 00000000..597b6ac1 --- /dev/null +++ b/Core/Models/Enums/Money.cs @@ -0,0 +1,9 @@ +namespace Core.Models.Enums; + +public class Money +{ + public const string ROUBLES = "5449016a4bdc2d6f028b456f"; + public const string EUROS = "569668774bdc2da2298b4568"; + public const string DOLLARS = "5696686a4bdc2da3298b456a"; + public const string GP = "5d235b4d86f7742e017bc88a"; +}