/// <summary> /// planet builds only! /// </summary> /// <param name="planetId"></param> /// <param name="buildItemNativeName"></param> /// <exception cref="ArgumentNullException">Error.ConnectionUserNotExist</exception> /// <exception cref="ArgumentNullException">Error.ConnectionUserNotConnected</exception> /// <returns>updated progress for build item </returns> public async Task <ItemProgress> BuildItemUpgraded(int planetId, string buildItemNativeName) { BuildNativeNames nativeName = default(BuildNativeNames); _tryCatch(() => { if (planetId == 0) { throw new Exception(Error.InputDataIncorrect); } var suc = Enum.TryParse(buildItemNativeName, out nativeName); if (!suc) { throw new Exception(Error.InputDataIncorrect); } }); return(await _contextAction(connection => { var cr = _getCurrentUser(connection); var planet = _gDetailPlanetService.GetUserPlanet(connection, planetId, cr.UserId); if (planet == null) { throw new ArgumentNullException(Error.PlanetChangeOwner); } var crPremium = cr.GetPremiumWorkModel(connection, _storeService); planet = _synchronizer.UserPlanet(connection, planet, crPremium, _gDetailPlanetService); switch (nativeName) { case BuildNativeNames.EnergyConverter: return _energyConverter.Upgraded(connection, planet, cr.UserId, crPremium.IsActive, _svp); case BuildNativeNames.ExtractionModule: return _extractionModule.Upgraded(connection, planet, cr.UserId, crPremium.IsActive, _svp); case BuildNativeNames.SpaceShipyard: return _spaceShipyard.Upgraded(connection, planet, cr.UserId, crPremium.IsActive, _svp); case BuildNativeNames.Storage: return _storage.Upgraded(connection, planet, cr.UserId, crPremium.IsActive, _svp); case BuildNativeNames.Turel: return _turels.Upgraded(connection, planet, cr.UserId, crPremium.IsActive, _svp); default: throw new ArgumentException(Error.InputDataIncorrect); } })); }
/// <summary> /// planet builds only! /// </summary> /// <param name="data"></param> /// <param name="buildItemNativeName"></param> /// <exception cref="ArgumentNullException">Error.ConnectionUserNotExist</exception> /// <exception cref="ArgumentNullException">Error.ConnectionUserNotConnected</exception> /// <returns> bool (true - upgrade added and data was changed) || int => wen buy for cc retturn new result cc</returns> public async Task <object> BuildItemUpgrade(UnitTurnOut data, string buildItemNativeName) { BuildNativeNames nativeName = default(BuildNativeNames); _tryCatch(() => { if (data == null) { throw new ArgumentNullException(nameof(data), Error.InputDataIncorrect); } if (data.OwnId == 0) { throw new ArgumentException(Error.InputDataIncorrect); } var suc = Enum.TryParse(buildItemNativeName, out nativeName); if (!suc) { throw new ArgumentException(Error.InputDataIncorrect); } }); return(await _contextAction <object>(connection => { var cr = _getCurrentUser(connection); var planet = _gDetailPlanetService.GetUserPlanet(connection, data.OwnId, cr.UserId); if (planet == null) { throw new ArgumentNullException(Error.PlanetChangeOwner); } var crPremium = cr.GetPremiumWorkModel(connection, _storeService); planet = _synchronizer.UserPlanet(connection, planet, crPremium, _gDetailPlanetService); if (nativeName == BuildNativeNames.EnergyConverter) { var preResult = new BuildUpgrade(planet.Resources, planet.BuildEnergyConverter, BuildNativeNames.EnergyConverter.ToString()); //todo проверить премиум (непонятно что а коммент) if (data.ForCc) { return _energyConverter.UpgradeForCc(connection, planet, cr.UserId, crPremium.IsActive, preResult, _svp); } var newResult = BuildUpgrade.SetUpgrade(preResult, _energyConverter.CalcPrice(preResult.GetLevel(), crPremium.IsActive)); if (preResult.Equals(newResult)) { return false; } preResult = newResult; preResult.Progress.StartTime = UnixTime.UtcNow(); planet.Resources = preResult.StorageResources; planet.BuildEnergyConverter = preResult.Progress; } else if (nativeName == BuildNativeNames.ExtractionModule) { var preResult = new BuildUpgrade(planet.Resources, planet.BuildExtractionModule, BuildNativeNames.ExtractionModule.ToString()); //todo проверить премиум (непонятно что а коммент) if (data.ForCc) { return _extractionModule.UpgradeForCc(connection, planet, cr.UserId, crPremium.IsActive, preResult, _svp); } var newResult = BuildUpgrade.SetUpgrade(preResult, _extractionModule.CalcPrice(preResult.GetLevel(), crPremium.IsActive)); if (preResult.Equals(newResult)) { return false; } preResult = newResult; preResult.Progress.StartTime = UnixTime.UtcNow(); planet.Resources = preResult.StorageResources; planet.BuildExtractionModule = preResult.Progress; } else if (nativeName == BuildNativeNames.SpaceShipyard) { var preResult = new BuildUpgrade(planet.Resources, planet.BuildSpaceShipyard, BuildNativeNames.SpaceShipyard.ToString()); //todo проверить премиум (непонятно что за коммент) if (data.ForCc) { return _spaceShipyard.UpgradeForCc(connection, planet, cr.UserId, crPremium.IsActive, preResult, _svp); } var newResult = BuildUpgrade.SetUpgrade(preResult, _spaceShipyard.CalcPrice(preResult.GetLevel(), crPremium.IsActive)); if (preResult.Equals(newResult)) { return false; } preResult = newResult; preResult.Progress.StartTime = UnixTime.UtcNow(); planet.Resources = preResult.StorageResources; planet.BuildSpaceShipyard = preResult.Progress; } else if (nativeName == BuildNativeNames.Storage) { var preResult = new BuildUpgrade(planet.Resources, planet.BuildStorage, BuildNativeNames.Storage.ToString()); if (data.ForCc) { return _storage.UpgradeForCc(connection, planet, cr.UserId, crPremium.IsActive, preResult, _svp); } var newResult = BuildUpgrade.SetUpgrade(preResult, _storage.CalcPrice(preResult.GetLevel(), crPremium.IsActive)); if (preResult.Equals(newResult)) { return false; } preResult = newResult; preResult.Progress.StartTime = UnixTime.UtcNow(); planet.Resources = preResult.StorageResources; planet.BuildStorage = preResult.Progress; } else if (nativeName == BuildNativeNames.Turel) { var preResult = new BuildUpgrade(planet.Resources, planet.Turels, BuildNativeNames.Turel.ToString()); if (data.ForCc) { return _turels.UpgradeForCc(connection, planet, cr.UserId, crPremium.IsActive, preResult, _svp); } var newResult = BuildUpgrade.SetUpgrade(preResult, _turels.CalcPrice(1, crPremium.IsActive)); if (preResult.Equals(newResult)) { return false; } preResult = newResult; preResult.Progress.StartTime = UnixTime.UtcNow(); planet.Resources = preResult.StorageResources; planet.Turels = preResult.Progress; } else { throw new ArgumentException(Error.InputDataIncorrect); } _gDetailPlanetService.AddOrUpdate(connection, planet); return true; })); }