//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); }