using Core.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; using Core.Models.Eft.Location; using Core.Services; using Core.Utils.Cloners; using ILogger = Core.Models.Utils.ILogger; namespace Core.Controllers; [Injectable] public class LocationController { private readonly ILogger _logger; private readonly DatabaseService _databaseService; private readonly AirdropService _airdropService; private readonly JsonCloner _cloner; public LocationController( ILogger logger, DatabaseService databaseService, AirdropService airdropService, JsonCloner cloner) { _logger = logger; _databaseService = databaseService; _airdropService = airdropService; _cloner = cloner; } /// /// Handle client/locations /// Get all maps base location properties without loot data /// /// Players Id /// LocationsGenerateAllResponse public LocationsGenerateAllResponse GenerateAll(string sessionId) { var locationsFromDb = _databaseService.GetLocations(); var maps = locationsFromDb.GetDictionary(); // keyed by _id location property var locationResult = new Dictionary(); foreach (var location in maps) { var mapBase = location.Value?.Base; if (mapBase == null) { _logger.Debug($"Map: {location} has no base json file, skipping generation"); continue; } // Clear out loot array mapBase.Loot = []; // Add map base data to dictionary locationResult.Add(mapBase.IdField, mapBase); } return new LocationsGenerateAllResponse { Locations = locationResult, Paths = locationsFromDb.Base.Paths }; } /// /// Handle client/airdrop/loot /// /// /// public GetAirdropLootResponse GetAirDropLoot(GetAirdropLootRequest request) { if (request.ContainerId is not null) { return this._airdropService.GenerateCustomAirdropLoot(request); } return this._airdropService.GenerateAirdropLoot(); } }