public void RocketLauncherAttack(int count, RocketLauncherAmmunition rlAmmo) { lock (_rocketLauncherLock) { #region {[ CHECKING ]} if (PlayerController.Locked == null || PlayerController.Locked.MovementAssembly.ActualPosition() .DistanceTo(PlayerController.MovementAssembly.ActualPosition()) > 650 || count <= 0) { return; } if (PlayerController.Locked.ZoneAssembly.IsInDMZ) { PlayerController.Send(PacketBuilder.Messages.PeaceArea()); return; } if (!RocketLauncherCooldown()) { return; } CheckRocketLauncherCount(rlAmmo, count, out int currentCount); #endregion LastAttack = PlayerController.CurrentClock.ElapsedMilliseconds; _lastRocketLauncherAttack = PlayerController.CurrentClock.ElapsedMilliseconds; PlayerController.Account.CurrentHangar.Selection.RocketLauncherLoadedCount = 0; ICommand attackCommand = PacketBuilder.AttackHellstormCommand(PlayerController, PlayerController.Locked, count, (short)rlAmmo.ID); PlayerController.Send( attackCommand, PacketBuilder.Slotbar.RocketLauncherStateCommand(PlayerController), PacketBuilder.Slotbar.ItemCooldownCommand("equipment_weapon_rocketlauncher_hst", (int)(3000 * PlayerController.BoosterAssembly.Get(BoosterType.ROCKET_LAUNCHER_COOLDOWN))), PacketBuilder.Slotbar.RocketItemStatus(rlAmmo.Name, currentCount, false) ); PlayerController.EntitesInRange(x => x.Send(attackCommand)); int hitCount = 0; for (int i = 0; i < count; i++) { if (!Miss()) { hitCount++; } } if (PlayerController.Locked.EffectsAssembly.HasProtection || (rlAmmo.ID != RocketLauncherAmmunition.HSTRM_01.ID && PlayerController.Locked is PlayerController lockedPlayerController && lockedPlayerController.SpecialItemsAssembly.IsInvicible) || hitCount == 0) { PlayerController.Locked.AttackTraceAssembly.LogAttack(PlayerController, 0, 0); ICommand missCommand = new AttackMissedCommand(new AttackTypeModule(AttackTypeModule.LASER), PlayerController.Locked.ID, 0); PlayerController.Locked.Send(new AttackMissedCommand(new AttackTypeModule(AttackTypeModule.LASER), PlayerController.Locked.ID, 1)); PlayerController.Locked.EntitiesLocked(x => x.Send(missCommand)); return; } RocketLauncherDelayedAttack(PlayerController.Locked, rlAmmo, hitCount); } }