示例#1
0
        public MapDistance GetTaskTime(IDbConnection connection, int currentUserId, int estateId, string planetName, int startSystemId = 0)
        {
            var         premium = _storeService.GetOrUpdatePremium(connection, currentUserId);
            MapDistance distance;

            if (estateId == 0)
            {
                //_motherJumpService.SinchronizeByMotherId(_currentUser.Id);
                if (startSystemId == 0)
                {
                    throw new Exception(Error.SystemIdNotSet);
                }

                var systemId = _mothershipService.GetCurrentSystemId(connection, currentUserId);
                distance = MapDistanceHelper.CalculateMotherTransferFleet(connection, systemId, planetName, _mapAdressService,
                                                                          !premium.Finished);
                return(distance);
            }
            distance = MapDistanceHelper.CalculatePlanetTransferFleet(connection, estateId, planetName, _mapAdressService,
                                                                      !premium.Finished);
            return(distance);
        }
示例#2
0
        public MapDistance GetMotherJumpTime(IDbConnection connection, int currentUserId, int sourceSystemId, int targetSystemId)
        {
            var premium = _storeService.GetOrUpdatePremium(connection, currentUserId);

            if (sourceSystemId == targetSystemId)
            {
                throw new Exception(Error.JupmMotherIsCurrentSystem);
            }
            var curTask = _motherJumpService.GetActive(connection, currentUserId, i => i.Id);

            if (curTask != 0)
            {
                throw new Exception(Error.JumpMotherInProgress);
            }

            var dm = MapDistanceHelper.CalculateJumpTime(connection, sourceSystemId, targetSystemId, _mapAdressService,
                                                         !premium.Finished);

            dm.Guid           = Guid.NewGuid().ToString();
            dm.StartCacheTime = UnixTime.UtcNow();
            return((MapDistance)TmpCache.AddOrUpdate(dm.Guid, dm, CACHE_TIME_SEC_JUMP));
        }
示例#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);
        }