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); } }
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)); } }
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(); } } } }