public virtual async void Lock(EntityControllerBase entity)
        {
            if (Locked == null || entity == null || Locked.ID != entity.ID)
            {
                bool wasAttacking = AttackAssembly.AttackRunning;
                if (wasAttacking)
                {
                    AttackAssembly.Stop();
                    ICommand positionFixCommand = new AbortDirectionLockCommand(ID);
                    EntitesInRange(x => x.Send(positionFixCommand));
                }
            }

            if (entity == null)
            {
                Locked = null;
                Send(PacketBuilder.DeselectionCommand());
            }
            else if (entity.ID != ID)
            {
                if (entity is PlayerController playerController && playerController.SpecialItemsAssembly.IsNotTargetable)
                {
                    return;
                }

                Locked = entity;
                SendLockVisual(entity);
            }
        }
Exemple #2
0
        public void Execute(IClient initiator, LaserAttackStopRequest command)
        {
            if (initiator.Controller.AttackAssembly.AttackRunning)
            {
                initiator.Controller.AttackAssembly.Stop();

                ICommand positionFixCommand = new AbortDirectionLockCommand(initiator.Controller.ID);
                initiator.Controller.EntitesInRange(x => x.Send(positionFixCommand));
            }
        }
Exemple #3
0
        public override void Handle(PlayerController playerController, string itemId, bool initAttack)
        {
            if (Lookup.TryGetValue(itemId, out Ammuninition ammuninition))
            {
                Ammuninition oldAmmunition = playerController.Account.CurrentHangar.Selection.Laser.FromAmmunitions();

                playerController.Account.Vault.Ammunitions.TryGetValue(oldAmmunition.ID, out int oldAmmunitionCount);
                playerController.Account.Vault.Ammunitions.TryGetValue(ammuninition.ID, out int ammunitionCount);

                playerController.Send(
                    PacketBuilder.Slotbar.LaserItemStatus(oldAmmunition.Name, oldAmmunitionCount, false),
                    PacketBuilder.Slotbar.LaserItemStatus(ammuninition.Name, ammunitionCount, true)
                    );

                playerController.Account.CurrentHangar.Selection.Laser = ammuninition.ID;

                // rsb, bei rsb gilt nur der eigene cooldown
                if (playerController.AttackAssembly.AttackRunning && ammuninition.ID == Ammuninition.RSB_75.ID && ammuninition.ID != oldAmmunition.ID)
                {
                    int dummyLapNumber = 0;
                    (playerController.AttackAssembly as PlayerAttackAssembly).LaserAttack(ref dummyLapNumber, Ammuninition.RSB_75);
                }

                if (initAttack)
                {
                    if (playerController.AttackAssembly.AttackRunning && oldAmmunition.ID == ammuninition.ID)
                    {
                        playerController.AttackAssembly.Stop();

                        ICommand positionFixCommand = new AbortDirectionLockCommand(playerController.ID);
                        playerController.EntitesInRange(x => x.Send(positionFixCommand));
                    }
                    else
                    {
                        playerController.AttackAssembly.Start();
                    }
                }
            }
        }