Пример #1
0
        public TaskFleet TaskTimeIsOver(IDbConnection connection, int currentUserId, int taskId)
        {
            throw new Exception(Error.Deprecated);
            var taskItem = _uTaskService.GetByTaskId(connection, taskId, true);

            if (taskItem == null)
            {
                throw new Exception(Error.TaskNotExist);
            }

            if (taskItem.SourceUserId != currentUserId)
            {
                throw new Exception(Error.TaskNotForThisUser);
            }

            var curTime  = UnixTime.UtcNow();
            var endTime  = taskItem.DateActivate + taskItem.Duration;
            var timeOver = endTime <= curTime;
            var result   = new TaskFleet();

            if (timeOver)
            {
                //var updatedTask = _synchronizer.RunTaskItem(taskItem.Id);
                //result.IsTransfer = updatedTask.IsTransfer;
                //result.TimeOver = true;
                //result.TargetName = updatedTask.TargetPlanetName;

                return(result);
            }

            result.TimeOver    = false;
            result.StartTime   = taskItem.DateActivate;
            result.FlyDuration = taskItem.Duration;
            return(result);
        }
Пример #2
0
 /// <summary>
 ///     работает только для текущего пользователя
 ///     создает и активирует новую задачу для пользователя (атака или трансфер)
 /// </summary>
 /// <param name="inputData"></param>
 /// <exception cref="ArgumentNullException">Error.ConnectionUserNotExist</exception>
 /// <exception cref="ArgumentNullException">Error.ConnectionUserNotConnected</exception>
 /// <returns> new task ID</returns>
 public async Task <int> JournalCreateTaskItem(TaskFleet inputData)
 {
     return(await _contextAction(connection =>
     {
         var cr = _getCurrentUser(connection);
         return _journalOutService.CreateTaskItem(connection, cr.UserId, cr.Name, inputData);
     }));
 }
Пример #3
0
        //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);
        }