Remove TraderStore, use DatabaseService as the source of truth
This commit is contained in:
@@ -37,7 +37,6 @@ public class InsuranceController(
|
||||
RagfairPriceService ragfairPriceService,
|
||||
ServerLocalisationService serverLocalisationService,
|
||||
SaveServer saveServer,
|
||||
TraderStore traderStore,
|
||||
ConfigServer configServer,
|
||||
ICloner cloner
|
||||
)
|
||||
@@ -690,7 +689,7 @@ public class InsuranceController(
|
||||
/// <returns>Should item be deleted</returns>
|
||||
protected bool? RollForDelete(MongoId traderId, Item? insuredItem = null)
|
||||
{
|
||||
var trader = traderStore.GetTraderById(traderId);
|
||||
var trader = databaseService.GetTrader(traderId);
|
||||
if (trader is null)
|
||||
{
|
||||
return null;
|
||||
|
||||
@@ -17,8 +17,7 @@ public class ProfileValidatorHelper(
|
||||
ConfigServer configServer,
|
||||
DatabaseService databaseService,
|
||||
ISptLogger<ProfileValidatorHelper> logger,
|
||||
ServerLocalisationService serverLocalisationService,
|
||||
TraderStore traderStore
|
||||
ServerLocalisationService serverLocalisationService
|
||||
)
|
||||
{
|
||||
protected readonly CoreConfig CoreConfig = configServer.GetConfig<CoreConfig>();
|
||||
@@ -386,6 +385,6 @@ public class ProfileValidatorHelper(
|
||||
|
||||
protected bool DoesTraderExist(MongoId traderId)
|
||||
{
|
||||
return traderStore.GetTraderById(traderId) != null;
|
||||
return databaseService.GetTrader(traderId) != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ public class TraderHelper(
|
||||
HandbookHelper handbookHelper,
|
||||
ServerLocalisationService serverLocalisationService,
|
||||
FenceService fenceService,
|
||||
TraderStore traderStore,
|
||||
TimeUtil timeUtil,
|
||||
RandomUtil randomUtil,
|
||||
ConfigServer configServer
|
||||
@@ -490,10 +489,10 @@ public class TraderHelper(
|
||||
{
|
||||
highestPrice = 1d; // Default price
|
||||
var itemHandbookPrice = handbookHelper.GetTemplatePrice(tpl);
|
||||
foreach (var trader in traderStore.GetAllTraders())
|
||||
foreach ((var traderKey, var trader) in databaseService.GetTraders())
|
||||
{
|
||||
// Get trader and check buy category allows tpl
|
||||
var traderBase = databaseService.GetTrader(trader.Id).Base;
|
||||
var traderBase = trader.Base;
|
||||
|
||||
if (traderBase is null)
|
||||
{
|
||||
@@ -527,6 +526,6 @@ public class TraderHelper(
|
||||
/// <returns>True if a Trader exists with given ID</returns>
|
||||
public bool TraderExists(MongoId traderId)
|
||||
{
|
||||
return traderStore.GetTraderById(traderId) != null;
|
||||
return databaseService.GetTrader(traderId) != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
using SPTarkov.Server.Core.Models.Common;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
|
||||
using SPTarkov.Server.Core.Models.Spt.Services;
|
||||
|
||||
namespace SPTarkov.Server.Core.Models;
|
||||
|
||||
public interface ITrader
|
||||
{
|
||||
public string Name { get; }
|
||||
public MongoId Id { get; }
|
||||
}
|
||||
|
||||
public abstract record ICustomTrader : ITrader
|
||||
{
|
||||
public abstract string Name { get; }
|
||||
public abstract MongoId Id { get; }
|
||||
|
||||
public abstract TraderAssort GetAssort();
|
||||
|
||||
public abstract Dictionary<string, Dictionary<MongoId, MongoId>> GetQuestAssort();
|
||||
|
||||
public abstract TraderBase GetBase();
|
||||
|
||||
public virtual List<Suit>? GetSuits()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual List<TraderServiceModel>? GetServices()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual Dictionary<string, List<string>?> GetDialogues()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
using System.Text.Json.Serialization;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Models.Common;
|
||||
using SPTarkov.Server.Core.Models.Enums;
|
||||
|
||||
namespace SPTarkov.Server.Core.Models;
|
||||
|
||||
[Injectable]
|
||||
public record Prapor : ITrader
|
||||
{
|
||||
public string Name { get; } = "Prapor";
|
||||
public MongoId Id { get; } = Traders.PRAPOR;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Therapist : ITrader
|
||||
{
|
||||
public string Name { get; } = "Therapist";
|
||||
public MongoId Id { get; } = Traders.THERAPIST;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Fence : ITrader
|
||||
{
|
||||
public string Name { get; } = "Fence";
|
||||
public MongoId Id { get; } = Traders.FENCE;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Skier : ITrader
|
||||
{
|
||||
public string Name { get; } = "Skier";
|
||||
public MongoId Id { get; } = Traders.SKIER;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Peacekeeper : ITrader
|
||||
{
|
||||
public string Name { get; } = "Peacekeeper";
|
||||
public MongoId Id { get; } = Traders.PEACEKEEPER;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Mechanic : ITrader
|
||||
{
|
||||
public string Name { get; } = "Mechanic";
|
||||
public MongoId Id { get; } = Traders.MECHANIC;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Ragman : ITrader
|
||||
{
|
||||
public string Name { get; } = "Ragman";
|
||||
public MongoId Id { get; } = Traders.RAGMAN;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Jaeger : ITrader
|
||||
{
|
||||
public string Name { get; } = "Jaeger";
|
||||
public MongoId Id { get; } = Traders.JAEGER;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record LighthouseKeeper : ITrader
|
||||
{
|
||||
public string Name { get; } = "LighthouseKeeper";
|
||||
public MongoId Id { get; } = Traders.LIGHTHOUSEKEEPER;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Btr : ITrader
|
||||
{
|
||||
public string Name { get; } = "Btr";
|
||||
public MongoId Id { get; } = Traders.BTR;
|
||||
}
|
||||
|
||||
[Injectable]
|
||||
public record Ref : ITrader
|
||||
{
|
||||
public string Name { get; } = "Ref";
|
||||
public MongoId Id { get; } = Traders.REF;
|
||||
}
|
||||
@@ -169,8 +169,6 @@ public class DatabaseService(
|
||||
{
|
||||
if (!databaseServer.GetTables().Traders.TryGetValue(traderId, out var desiredTrader))
|
||||
{
|
||||
logger.Error(serverLocalisationService.GetText("database-no_trader_found_with_id", traderId));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.DI;
|
||||
using SPTarkov.Server.Core.Models;
|
||||
using SPTarkov.Server.Core.Models.Common;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
|
||||
using SPTarkov.Server.Core.Models.Utils;
|
||||
|
||||
namespace SPTarkov.Server.Core.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Source of truth for all default traders as well as any additional trader a server mod may add.
|
||||
/// </summary>
|
||||
[Injectable(InjectionType.Singleton, TypePriority = OnLoadOrder.TraderRegistration)]
|
||||
public class TraderStore(
|
||||
DatabaseService databaseService,
|
||||
IEnumerable<ITrader> injectedTraders,
|
||||
ServerLocalisationService localisationService,
|
||||
ISptLogger<TraderStore> logger
|
||||
) : IOnLoad
|
||||
{
|
||||
private readonly Dictionary<MongoId, ITrader> _traders = new();
|
||||
|
||||
public Task OnLoad()
|
||||
{
|
||||
logger.Info("Importing traders...");
|
||||
var customTraders = 0;
|
||||
|
||||
foreach (var trader in injectedTraders)
|
||||
{
|
||||
if (trader is ICustomTrader customTrader)
|
||||
{
|
||||
try
|
||||
{
|
||||
var dbTrader = new Trader
|
||||
{
|
||||
Assort = customTrader.GetAssort(),
|
||||
Base = customTrader.GetBase(),
|
||||
QuestAssort = customTrader.GetQuestAssort(),
|
||||
Dialogue = customTrader.GetDialogues(),
|
||||
Suits = customTrader.GetSuits(),
|
||||
Services = customTrader.GetServices(),
|
||||
};
|
||||
databaseService.GetTraders().Add(trader.Id, dbTrader);
|
||||
_traders.Add(trader.Id, trader);
|
||||
logger.Info($"Loaded custom trader: {trader.Name}");
|
||||
customTraders++;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.Error(
|
||||
localisationService.GetText(
|
||||
"trader-unable_to_add_custom_trader",
|
||||
new { traderId = trader.Name, error = e.StackTrace }
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_traders.Add(trader.Id, trader);
|
||||
}
|
||||
}
|
||||
|
||||
logger.Info($"Importing traders complete {(customTraders == 0 ? "" : $"[{customTraders} traders loaded]")}");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a trader by given ID.
|
||||
/// </summary>
|
||||
/// <param name="traderId"></param>
|
||||
/// <returns></returns>
|
||||
public ITrader? GetTraderById(MongoId traderId)
|
||||
{
|
||||
return _traders.GetValueOrDefault(traderId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all traders in the game, including custom traders.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<ITrader> GetAllTraders()
|
||||
{
|
||||
return _traders.Values;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ public class JsonUtil
|
||||
ReadCommentHandling = JsonCommentHandling.Skip,
|
||||
WriteIndented = false,
|
||||
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
|
||||
UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow,
|
||||
UnmappedMemberHandling = JsonUnmappedMemberHandling.Skip,
|
||||
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user