using Core.Annotations; using Core.Models.Eft.Common; using Core.Models.Eft.Common.Tables; using Core.Models.Eft.Location; using Core.Models.Utils; using Core.Services; using Core.Utils.Cloners; namespace Core.Controllers; [Injectable] public class LocationController { protected ISptLogger _logger; protected DatabaseService _databaseService; protected AirdropService _airdropService; protected ICloner _cloner; public LocationController( ISptLogger logger, DatabaseService databaseService, AirdropService airdropService, ICloner 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(); } }