Exemple #1
0
        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);
            }
        }