Пример #1
0
        private void CheckRocketLauncherCount(RocketLauncherAmmunition rlAmmo, int count, out int currentCount)
        {
            PlayerController.Account.Vault.RocketLauncherAmmunitions.TryGetValue(rlAmmo.ID, out currentCount);

            currentCount -= count;
            PlayerController.Account.Vault.RocketLauncherAmmunitions[rlAmmo.ID] = currentCount;
        }
Пример #2
0
 private void CalculateHellstormDamage(RocketLauncherAmmunition rlAmmo, int count, out double damage, out double shieldDamage)
 {
     if (rlAmmo.ID == RocketLauncherAmmunition.UBR_100.ID && !(PlayerController.Locked is PlayerController))   // pve
     {
         damage       = Noise(rlAmmo.Damage * 1.8) * count;
         shieldDamage = Noise(rlAmmo.ShieldDamage * 1.8) * count;
     }
     else
     {
         damage       = Noise(rlAmmo.Damage) * count;       // normal damage
         shieldDamage = Noise(rlAmmo.ShieldDamage) * count; // sab damage (sab / cbo)
     }
 }
Пример #3
0
        internal static ClientUISlotBarCategoryItemStatusModule RocketLauncherState(PlayerController controller, out bool loaded)
        {
            string selectedRLAmmo = "equipment_weapon_rocketlauncher_hst-2";
            int    count          = 0;

            loaded = true;


            ClientUITooltipsCommand tooltips = new ClientUITooltipsCommand(new List <ClientUITooltipModule> {
                new ClientUITooltipModule(
                    ClientUITooltipModule.STANDARD, "ttip_rocketlauncher",
                    new ClientUITooltipTextFormatModule(ClientUITooltipTextFormatModule.LOCALIZED),
                    new List <MessageWildcardReplacementModule> {
                    new MessageWildcardReplacementModule("%TYPE%", "equipment_weapon_rocketlauncher_hst",
                                                         new ClientUITooltipTextFormatModule(ClientUITooltipTextFormatModule.LOCALIZED)
                                                         )
                }
                    ),

                new ClientUITooltipModule(
                    ClientUITooltipModule.STANDARD, "ttip_rocketlauncher_loadcount",
                    new ClientUITooltipTextFormatModule(ClientUITooltipTextFormatModule.LOCALIZED),
                    new List <MessageWildcardReplacementModule> {
                    new MessageWildcardReplacementModule("%COUNT%", count.ToString(),
                                                         new ClientUITooltipTextFormatModule(ClientUITooltipTextFormatModule.PLAIN)
                                                         ),
                    new MessageWildcardReplacementModule("%TYPE%", selectedRLAmmo,
                                                         new ClientUITooltipTextFormatModule(ClientUITooltipTextFormatModule.const_3135)
                                                         )
                }
                    ),
            });

            if (controller.Account.CurrentHangar.Selection.RocketLauncher != 0)
            {
                RocketLauncherAmmunition rocketLauncherAmmunition = controller.Account.CurrentHangar.Selection.RocketLauncher.FromRocketLauncherAmmunitions();

                selectedRLAmmo = rocketLauncherAmmunition.Name;
                count          = controller.Account.CurrentHangar.Selection.RocketLauncherLoadedCount;
                loaded         = true;
            }

            return(new ClientUISlotBarCategoryItemStatusModule(true, true, "equipment_weapon_rocketlauncher_hst",
                                                               tooltips,
                                                               tooltips,
                                                               false, controller.HangarAssembly.Ship.RocketLauncherSlots * 5,
                                                               count, ClientUISlotBarCategoryItemStatusModule.BLUE, selectedRLAmmo,
                                                               true, false, false
                                                               ));
        }
Пример #4
0
        private async void RocketLauncherDelayedAttack(EntityControllerBase target, RocketLauncherAmmunition rlAmmo, int hitCount)
        {
            await Task.Delay(750);

            try {
                if (target == null || PlayerController.Locked == null || PlayerController.Locked.ID != target.ID)
                {
                    return;
                }

                CalculateHellstormDamage(rlAmmo, hitCount, out double damage, out double shieldDamage);

                if (shieldDamage > 0)
                {
                    shieldDamage = Math.Abs(target.HangarAssembly.ChangeShield(-(int)shieldDamage, false));
                    PlayerController.HangarAssembly.ChangeShield((int)shieldDamage);
                }

                double shieldDamageDealt    = shieldDamage;
                double hitpointsDamageDealt = 0;

                if (damage > 0)
                {
                    double shieldAbsorption = Math.Max(0, Math.Min(1, target.BoosterAssembly.Get(BoosterType.SHIELD_ABSORBATION)));
                    int    damageShield     = Math.Abs(target.HangarAssembly.ChangeShield(-(int)(damage * shieldAbsorption), false));
                    int    damageHitpoints  = Math.Abs(target.HangarAssembly.ChangeHitpoints(-(int)(damage - damageShield), false));

                    shieldDamageDealt    += damageShield;
                    hitpointsDamageDealt += damageHitpoints;
                }

                // set stats
                target.AttackTraceAssembly.LogAttack(PlayerController, (int)shieldDamageDealt, (int)hitpointsDamageDealt);
                target.HangarAssembly.CheckDeath();

                if (target != null)
                {
                    ICommand damageCommand = PacketBuilder.AttackCommand(PlayerController, target, AttackTypeModule.ROCKET, (int)(shieldDamage + damage));
                    target.Send(damageCommand);                        // send to player
                    target.EntitiesLocked(y => y.Send(damageCommand)); // send to all who have him in lock
                }
            } catch (Exception e) {
                GameContext.Logger.LogError(e);
            }
        }
Пример #5
0
        private void RocketLauncherTimer(ref int lapCount, RocketLauncherAmmunition rlAmmo)
        {
            lock (_rocketLauncherRocketLock) {
                if (!RocketLauncherCooldown())
                {
                    return;
                }

                if (PlayerController.Account.CurrentHangar.Selection.RocketLauncherLoadedCount <
                    PlayerController.HangarAssembly.Ship.RocketLauncherSlots * 5)
                {
                    if (!PlayerController.Account.Vault.RocketLauncherAmmunitions.TryGetValue(PlayerController.Account.CurrentHangar.Selection.RocketLauncher, out int count) ||
                        count == PlayerController.Account.CurrentHangar.Selection.RocketLauncherLoadedCount)
                    {
                        if (count == 0)   // wenn eine rakete geladen wurde, und ein angriff stattfindet, dann soll diese auch verschossen werden
                        {
                            return;
                        }
                    }
                    else
                    {
                        if (!RocketLauncherRocketCooldown(ref lapCount))
                        {
                            return;
                        }

                        PlayerController.Account.CurrentHangar.Selection.RocketLauncherLoadedCount++;
                        PlayerController.Send(PacketBuilder.Slotbar.RocketLauncherStateCommand(PlayerController));
                        return;
                    }
                }

                if (_attackRunning && PlayerController.Account.CurrentHangar.Selection.AutoRocketLauncherCpu)
                {
                    RocketLauncherAttack(PlayerController.Account.CurrentHangar.Selection.RocketLauncherLoadedCount, rlAmmo); // trigger attack
                }
            }
        }
Пример #6
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);
            }
        }