public Dictionary <string, IPlanshetViewData> GetMotherEstate(IDbConnection connection, UserDataModel user, UserPremiumWorkModel userPremium, UserMothershipDataModel own, bool synchronize = true) { var mother = own; if (synchronize) { mother = _synchronizer.UserMothership(connection, own, userPremium, _mothershipService, _motherJumpService); } var ic = _industrialComplex.GetMotherCollection(connection, user, userPremium, mother, false); var shipyard = _shipyard.GetMotherCollection(connection, user, userPremium, mother, false); var laboratory = _laboratory.GetMotherCollection(connection, user, userPremium, mother, false); return(new Dictionary <string, IPlanshetViewData> { { ic.UniqueId, ic }, { shipyard.UniqueId, shipyard }, { laboratory.UniqueId, laboratory } }); }
public void TransPlanetToMother(IDbConnection connection, int sourseId, MaterialResource deltaResourses, int userId, UserPremiumWorkModel userPremium) { var soursePlanet = _planetService.GetUserPlanet(connection, sourseId, userId); var targetMother = _mother.GetMother(connection, userId); soursePlanet = _synchronizer.UserPlanet(connection, soursePlanet, userPremium, _planetService); targetMother = _synchronizer.UserMothership(connection, targetMother, userPremium, _mother, _motherJumpService); var curRes = soursePlanet.Resources; //_storageResourcesService.Execute(connection, userId, soursePlanet.Resources, sourseId); var targetRes = targetMother.Resources; //_storageResourcesService.Execute(connection, userId, targetMother.Resources); CalcNewRes(_storage, ref curRes, ref targetRes, deltaResourses, userPremium.IsActive, soursePlanet.BuildStorage.Level); soursePlanet.Resources = curRes; _planetService.AddOrUpdate(connection, soursePlanet); targetMother.Resources = _storageResourcesService.Execute(connection, userId, targetRes); _mother.AddOrUpdate(connection, targetMother); }
//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); }