public IEnumerable <SparkTeleport> GetAllByDockingBase(DockingBase dockingBase)
 {
     return(Db.Query().CommandText("select * from charactersparkteleports where baseeid=@baseEid")
            .SetParameter("@baseEid", dockingBase.Eid)
            .Execute()
            .Select(CreateFromRecord));
 }
Esempio n. 2
0
        public void DeleteAllSparkTeleports(DockingBase dockingBase)
        {
            var sparkTeleports = _sparkTeleportRepository.GetAllByDockingBase(dockingBase).ToArray();

            foreach (var sparkTeleport in sparkTeleports)
            {
                DeleteAndInform(sparkTeleport);
            }

            Logger.Info($"{sparkTeleports.Length} spark teleport targets were deleted from dockingBase: {dockingBase.InfoString}");
        }
Esempio n. 3
0
        public static Corporation GetProfitingOwner(DockingBase dockingBase)
        {
            if (dockingBase == null)
            {
                return(null);
            }

            var selector = new ProfitingOwnerSelector();

            dockingBase.AcceptVisitor(selector);
            return(selector._owner);
        }
Esempio n. 4
0
        public SparkTeleport CreateSparkTeleport(DockingBase dockingBase, Character character)
        {
            var teleport = new SparkTeleport
            {
                Character   = character,
                DockingBase = dockingBase
            };

            _sparkTeleportRepository.Insert(teleport);

            return(teleport);
        }
        private static ErrorCodes PrepareDeliverOneAssignment(Character character, long wrapperEid, out VolumeWrapperContainer volumeWrapperContainer)
        {
            volumeWrapperContainer = Container.GetOrThrow(wrapperEid) as VolumeWrapperContainer;
            if (volumeWrapperContainer == null)
            {
                return(ErrorCodes.DefinitionNotSupported);
            }

            if (volumeWrapperContainer.Owner != character.Eid)
            {
                return(ErrorCodes.AccessDenied);
            }

            var transportAssignmentInfo = GetByContainer(volumeWrapperContainer);

            if (transportAssignmentInfo == null)
            {
                //no assignment for this container
                return(ErrorCodes.NoTransportAssignmentForContainer);
            }

            var ownerCharacter = transportAssignmentInfo.ownercharacter;

            if (transportAssignmentInfo.Retrieved)
            {
                var targetBaseEid = transportAssignmentInfo.sourcebaseeid;
                if (!DockingBase.Exists(transportAssignmentInfo.sourcebaseeid))
                {
                    targetBaseEid = DefaultCorporation.GetDockingBaseEid(ownerCharacter);
                }

                Logger.Info("retrieved assignment was found " + transportAssignmentInfo);
                transportAssignmentInfo.RetrieveToBasePublicContainer(volumeWrapperContainer, targetBaseEid);
                return(ErrorCodes.NoError);
            }

            var baseOfWrapper = volumeWrapperContainer.TraverseForStructureRootEid();

            if (transportAssignmentInfo.targetbaseeid != baseOfWrapper)
            {
                return(ErrorCodes.TransportAssignmentCannotBeDeliveredHere);
            }

            var publicContainer = Container.GetFromStructure(transportAssignmentInfo.targetbaseeid);

            publicContainer.ReloadItems(character);

            AdministerDelivery(transportAssignmentInfo, volumeWrapperContainer, publicContainer);

            return(ErrorCodes.NoError);
        }
        /// <summary>
        /// Creates a transport assignment
        /// </summary>
        public static void SubmitTransportAssignment(Character character, long wrapperContainerEid, long reward, long collateral, long sourceBaseEid, long targetBaseEid, int durationDays)
        {
            if (durationDays <= 0)
            {
                durationDays = 1;
            }

            reward.ThrowIfLessOrEqual(0, ErrorCodes.IllegalTransportAssignmentReward);
            collateral.ThrowIfLess(0, ErrorCodes.IllegalTransportAssignmentCollateral);

            targetBaseEid.ThrowIfEqual(sourceBaseEid, ErrorCodes.WTFErrorMedicalAttentionSuggested);
            DockingBase.Exists(targetBaseEid).ThrowIfFalse(ErrorCodes.TargetDockingBaseWasNotFound);

            var publicContainer = Container.GetFromStructure(sourceBaseEid);

            publicContainer.ReloadItems(character);
            var wrapperContainer = (VolumeWrapperContainer)publicContainer.GetItemOrThrow(wrapperContainerEid);

            wrapperContainer.CheckSubmitConditionsAndThrowIfFailed();

            var transportAssignmentInfo = new TransportAssignment
            {
                reward         = reward,
                ownercharacter = character,
                collateral     = collateral,
                containereid   = wrapperContainerEid,
                sourcebaseeid  = sourceBaseEid,
                targetbaseeid  = targetBaseEid,
                volume         = wrapperContainer.Volume,
                expiry         = DateTime.Now.AddDays(durationDays),
                containername  = wrapperContainer.Name,
            };

            transportAssignmentInfo.CashInOnSubmit();
            transportAssignmentInfo.InsertToDb();

            wrapperContainer.Parent       = GetTransportStorageEid(sourceBaseEid).ThrowIfLessOrEqual(0, ErrorCodes.ServerError);
            wrapperContainer.AssignmentId = transportAssignmentInfo.id;

            wrapperContainer.Save();

            transportAssignmentInfo.WriteLog(TransportAssignmentEvent.submit, sourceBaseEid);
            SendCommandWithTransportAssignmentsAndContainer(Commands.TransportAssignmentSubmit, publicContainer, character);
        }
Esempio n. 7
0
        /// <summary>
        /// Make the docking happen
        /// </summary>
        /// <param name="zone"></param>
        /// <param name="dockingBase"></param>
        public void DockToBase(IZone zone, DockingBase dockingBase)
        {
            States.Dock = true;

            var publicContainer = dockingBase.GetPublicContainer();

            FullArmorRepair();

            publicContainer.AddItem(this, false);
            publicContainer.Save();
            dockingBase.DockIn(Character, NormalUndockDelay, ZoneExitType.Docked);

            Transaction.Current.OnCommited(() =>
            {
                RemoveFromZone();
                MissionHelper.MissionAdvanceDockInTarget(Character.Id, zone.Id, CurrentPosition);
                TransportAssignment.DeliverTransportAssignmentAsync(Character);
            });
        }
Esempio n. 8
0
        public void GiveUpAssignment(Character issuerCharacter)
        {
            taken.ThrowIfFalse(ErrorCodes.AccessDenied);

            volunteercharacter.ThrowIfEqual(null, ErrorCodes.AccessDenied);
            volunteercharacter.ThrowIfNotEqual(issuerCharacter, ErrorCodes.AccessDenied);

            var volumeWrapperContainer = GetContainer();

            volumeWrapperContainer.ReloadItems(volunteercharacter);
            volumeWrapperContainer.TraverseForStructureRootEid().ThrowIfLessOrEqual(0, ErrorCodes.ContainerHasToBeOnADockingBase);

            //container is on a base somewhere
            var baseEid = sourcebaseeid;

            if (!DockingBase.Exists(sourcebaseeid))
            {
                baseEid = ownercharacter.CurrentDockingBaseEid;
            }

            var sourceContainer = Container.GetOrThrow(volumeWrapperContainer.Parent);

            sourceContainer.ReloadItems(volunteercharacter);

            var wrapperContainer = sourceContainer.GetItem(volumeWrapperContainer.Eid) as VolumeWrapperContainer;

            if (wrapperContainer != null)
            {
                sourceContainer.RemoveItemOrThrow(wrapperContainer);
            }

            var publicContainer = Container.GetFromStructure(baseEid);

            publicContainer.ReloadItems(ownercharacter);

            volumeWrapperContainer.Owner = ownercharacter.Eid;
            volumeWrapperContainer.ClearAssignmentId();
            DeleteFromDb();

            publicContainer.AddItem(volumeWrapperContainer, false);
            publicContainer.Save();

            PaybackReward();
            PaybackHalfCollateral();

            WriteLog(TransportAssignmentEvent.gaveUp, baseEid);

            Transaction.Current.OnCommited(() =>
            {
                var result = new Dictionary <string, object>
                {
                    { k.assignment, ToDictionary() },
                    { k.container, publicContainer.ToDictionary() }
                };

                Message.Builder.SetCommand(Commands.TransportAssignmentGaveUp)
                .WithData(result)
                .ToCharacter(ownercharacter)
                .Send();

                if (volunteercharacter == Character.None)
                {
                    return;
                }

                var privateResult = new Dictionary <string, object>
                {
                    { k.assignment, ToPrivateDictionary() },
                    { k.container, sourceContainer.ToDictionary() },
                };

                Message.Builder.SetCommand(Commands.TransportAssignmentGaveUp)
                .WithData(privateResult)
                .ToCharacter(volunteercharacter)
                .Send();
            });
        }
Esempio n. 9
0
        public static Player LoadPlayerAndAddToZone(IZone zone, Character character)
        {
            using (var scope = Db.CreateTransaction())
            {
                var player = (Player)character.GetActiveRobot().ThrowIfNull(ErrorCodes.ARobotMustBeSelected);

                DockingBase dockingBase = null;

                ZoneEnterType zoneEnterType;
                Position      spawnPosition;
                if (character.IsDocked)
                {
                    // ha bazisrol jott
                    zoneEnterType = ZoneEnterType.Undock;

                    dockingBase   = character.GetCurrentDockingBase();
                    spawnPosition = UndockSpawnPositionSelector.SelectSpawnPosition(dockingBase);

                    character.ZoneId       = zone.Id;
                    character.ZonePosition = spawnPosition;
                    character.IsDocked     = false;
                }
                else
                {
                    // ha teleportalt
                    zoneEnterType = ZoneEnterType.Teleport;

                    zone.Id.ThrowIfNotEqual(character.ZoneId ?? -1, ErrorCodes.InvalidZoneId);

                    var zonePosition = character.ZonePosition.ThrowIfNull(ErrorCodes.InvalidPosition);
                    spawnPosition = (Position)zonePosition;
                }

                spawnPosition = zone.FixZ(spawnPosition);

                // keresunk neki valami jo poziciot
                var finder        = new ClosestWalkablePositionFinder(zone, spawnPosition, player);
                var validPosition = finder.FindOrThrow();

                // parentoljuk a zonahoz <<< NAGYON FONTOS - TILOS MASHOGY kulonben bennmaradnak a (pbs) bazison a robotok, es pl letorlodnek amikor kilovik a bazist
                var zoneStorage = zone.Configuration.GetStorage();
                player.Parent = zoneStorage.Eid;
                player.FullCoreRecharge();

                // elmentjuk
                player.Save();

                // csak akkor rakjuk ki ha volt rendes commit
                Transaction.Current.OnCommited(() =>
                {
                    dockingBase?.LeaveChannel(character);

                    player.CorporationEid = character.CorporationEid;
                    zone.SetGang(player);

                    player.AddToZone(zone, validPosition, zoneEnterType);

                    player.ApplyInvulnerableEffect();
                });

                scope.Complete();
                return(player);
            }
        }