public void TransPlanetToPlanet(IDbConnection connection, int sourseId, int targetId, MaterialResource deltaResourses, int userId, UserPremiumWorkModel userPremium) { var soursePlanet = _planetService.GetUserPlanet(connection, sourseId, userId); var targetPlanet = _planetService.GetUserPlanet(connection, targetId, userId); soursePlanet = _synchronizer.UserPlanet(connection, soursePlanet, userPremium, _planetService); targetPlanet = _synchronizer.UserPlanet(connection, targetPlanet, userPremium, _planetService); //var curRes = _storageResourcesService.Execute(connection, userId, soursePlanet.Resources, sourseId); //var targetRes = _storageResourcesService.Execute(connection, userId, targetPlanet.Resources, targetId); var curRes = soursePlanet.Resources; var targetRes = targetPlanet.Resources; CalcNewRes(_storage, ref curRes, ref targetRes, deltaResourses, userPremium.IsActive, soursePlanet.BuildStorage.Level); soursePlanet.Resources = curRes; _planetService.AddOrUpdate(connection, soursePlanet); targetPlanet.Resources = _storageResourcesService.Execute(connection, userId, targetRes, targetId); _planetService.AddOrUpdate(connection, targetPlanet); }
public Dictionary <string, IPlanshetViewData> GetPlanetEstate(IDbConnection connection, UserDataModel user, UserPremiumWorkModel userPremium, GDetailPlanetDataModel own, bool synchronize = true) { var planet = own; if (synchronize) { planet = _synchronizer.UserPlanet(connection, own, userPremium, _detailPlanetService); } var ic = _industrialComplex.GetPlanetCollection(connection, user, userPremium, planet, false); var shipyard = _shipyard.GetPlanetCollection(connection, user, userPremium, planet, false); var commandCentr = _commandCenter.GetPlanetCollection(connection, user, userPremium, planet, false); return(new Dictionary <string, IPlanshetViewData> { { ic.UniqueId, ic }, { shipyard.UniqueId, shipyard }, { commandCentr.UniqueId, commandCentr } }); }
//item public int CreateTaskItem(IDbConnection connection, int currentUserId, string currentUserNickname, TaskFleet inputData) { var curretnUserPremium = _storeService.GetPremiumWorkModel(connection, currentUserId); //todo Check current User fleet //todo тип для мазера byte srcType = 20; var isMother = inputData.SourceId == 0; var targetPlanet = _gDetailPlanetService.GetPlanet(connection, inputData.TargetName); var targetPlanetGeometry = _geometryPlanetService.GetGeometryPlanetById(connection, targetPlanet.Id); var targetPlanetSystem = _systemService.GetDetailSystemBySystemId(connection, targetPlanetGeometry.SystemId); var newTaskItem = new UserTaskDataModel { SourceTypeId = (byte)(isMother ? 20 : 0), // canselation = false, SourceOwnType = !isMother, SourceOwnName = MapTypes.Mother.ToString(), SourceUserId = currentUserId, SourceOwnId = inputData.SourceId, TargetPlanetName = inputData.TargetName, DateActivate = UnixTime.UtcNow(), Duration = 100, //sourceFleet = inputData.FixUnitCount(), IsAtack = true, IsTransfer = false, TargetPlanetId = targetPlanet.Id, TargetPlanetTypeId = targetPlanetGeometry.TypeId, TargetSystemName = targetPlanetSystem.Name }; //todo проверить наличие юнитов у пользователя if (inputData.IsTransfer) { newTaskItem.IsAtack = false; newTaskItem.IsTransfer = true; } if (newTaskItem.SourceOwnType) { var sourcePlanet = _gDetailPlanetService.GetUserPlanet(connection, inputData.SourceId, currentUserId); sourcePlanet = _synchronizer.UserPlanet(connection, sourcePlanet, curretnUserPremium, _gDetailPlanetService); var sourcePlanetGeometry = _geometryPlanetService.GetGeometryPlanetById(connection, sourcePlanet.Id); var sourcePlanetSystem = _systemService.GetDetailSystemBySystemId(connection, sourcePlanetGeometry.SystemId); var duration = MapDistanceHelper.CalculatePlanetTransferFleet(connection, sourcePlanet.Id, newTaskItem.TargetPlanetId, _mapAdressService, curretnUserPremium.IsActive); var baseUnits = sourcePlanet.Hangar; inputData.FixUnitCount(sourcePlanet.Hangar); var planetFixedUnits = inputData.Units; newTaskItem.SourceFleet = planetFixedUnits; newTaskItem.SourceTypeId = sourcePlanetGeometry.TypeId; newTaskItem.SourceOwnName = sourcePlanet.Name; newTaskItem.SourceSystemName = sourcePlanetSystem.Name; newTaskItem.Duration = duration.Sec; var calculatedUnitsToSaveToSource = UnitList.CalculateNewUnits(baseUnits, planetFixedUnits, false); sourcePlanet.Hangar = calculatedUnitsToSaveToSource; _gDetailPlanetService.AddOrUpdate(connection, sourcePlanet); } else { var mother = _mothershipService.GetMother(connection, currentUserId); mother = _synchronizer.UserMothership(connection, mother, curretnUserPremium, _mothershipService, _motherJumpService); var motherSystem = _systemService.GetDetailSystemBySystemId(connection, mother.StartSystemId); var duration = MapDistanceHelper.CalculateMotherTransferFleet(connection, mother.StartSystemId, newTaskItem.TargetPlanetId, _mapAdressService, curretnUserPremium.IsActive); var baseUnits = mother.Hangar; inputData.FixUnitCount(mother.Hangar); var motherfixedUnits = inputData.Units; newTaskItem.SourceFleet = motherfixedUnits; newTaskItem.SourceSystemName = motherSystem.Name; newTaskItem.Duration = duration.Sec; //25; // почему то небыло указано.... newTaskItem.SourceTypeId = 20; newTaskItem.SourceOwnName = currentUserNickname; //todo calc оставшихся юнитов var calculatedUnitsToSaveToSource = UnitList.CalculateNewUnits(baseUnits, motherfixedUnits, false); mother.Hangar = calculatedUnitsToSaveToSource; _mothershipService.AddOrUpdate(connection, mother); } newTaskItem = _uTaskService.AddOrUpdate(connection, newTaskItem); var clonedTaskItem = newTaskItem.CloneDeep(); var userId = targetPlanet.UserId; _synchronizer.GetTaskRunner().OnUserTaskCreated(newTaskItem.CloneDeep(), userId); Task.Delay(50).ContinueWith(t => { _uTaskService.NotyfyTaskCreated(clonedTaskItem, userId); }); return(newTaskItem.Id); }