Beispiel #1
0
        public void LaunchMissle(string missleId)
        {
            var enemy = Character.Selected;

            if (!AssembleEnemy(enemy) && !(missleId == "ammunition_specialammo_pld-8" || missleId == "ammunition_specialammo_dcr-250" || missleId == "ammunition_specialammo_wiz-x"))
            {
                return;
            }

            Player player = Character as Player;

            int damage   = -1;
            int rocketId = 0;

            switch (missleId)
            {
            case "ammunition_rocket_r-310":
                rocketId = 1;
                damage   = RandomizeDamage(Character.RocketDamage, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_rocket_plt-2026":
                rocketId = 2;
                damage   = RandomizeDamage(Character.RocketDamage * 2, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_rocket_plt-2021":
                rocketId = 3;
                damage   = RandomizeDamage(Character.RocketDamage * 3, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_rocket_plt-3030":
                rocketId = 4;
                damage   = RandomizeDamage(Character.RocketDamage * 4, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_specialammo_pld-8":
                rocketId = 5;
                if (Character.Cooldowns.CooldownDictionary.Any(c => c.Value is PlasmaCooldown))
                {
                    return;
                }
                Plasma(enemy as Character);
                return;

            case "ammunition_specialammo_dcr-250":
                rocketId = 6;
                if (Character.Cooldowns.CooldownDictionary.Any(c => c.Value is DecelerationCooldown))
                {
                    return;
                }
                Decelerate(enemy as Character);
                return;

            case "ammunition_specialammo_wiz-x":
                rocketId = 8;
                if (Character.Cooldowns.CooldownDictionary.Any(c => c.Value is WizardCooldown))
                {
                    return;
                }
                Wizard(enemy as Character);
                return;
            }

            if (Character.Cooldowns.CooldownDictionary.Any(c => c.Value is RocketCooldown))
            {
                return;
            }

            if (player?.Settings.CurrentRocket.Shoot() == 0)
            {
                // NOTHING TO SHOOT
                Packet.Builder.LegacyModule(player.GetGameSession(),
                                            "0|A|STD|No more ammo (todo: find a proper STM message)");
                return;
            }

            player?.Skylab.ReduceRocketOre(1);

            double cooldown_time = 2;

            if (player != null && (player.Extras.Any(x => x.Value is RocketTurbo) || player.Information.Premium.Active))
            {
                cooldown_time *= 0.5;
            }

            var cooldown = new RocketCooldown(cooldown_time);

            if (player != null)
            {
                cooldown.Send(World.StorageManager.GetGameSession(player.Id));
            }
            Character.Cooldowns.Add(cooldown);

            if (player != null && enemy is Character)
            {
                UpdateAttacker(enemy as Character, player);
            }

            GameClient.SendToPlayerView(Character, netty.commands.old_client.LegacyModule.write("0|v|" + Character.Id + "|" + enemy.Id + "|H|" + rocketId + "|1|" + (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 1 : 0)), true);
            GameClient.SendToPlayerView(Character, netty.commands.new_client.LegacyModule.write("0|v|" + Character.Id + "|" + enemy.Id + "|H|" + rocketId + "|1|" + (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 1 : 0)), true);
            Controller.Damage?.Rocket(enemy, damage, 0);

            if (player != null && player.State.LoginProtection)
            {
                player.State.EndLoginProtection();
            }
        }
Beispiel #2
0
        public void LaunchMissle(string missleId)
        {
            var enemy = Character.Selected;

            if (!AssembleEnemy(enemy))
            {
                return;
            }

            Player player = Character as Player;

            int damage   = -1;
            int rocketId = 0;

            switch (missleId)
            {
            case "ammunition_rocket_r-310":
                rocketId = 1;
                damage   = RandomizeDamage(Character.RocketDamage, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_rocket_plt-2026":
                rocketId = 2;
                damage   = RandomizeDamage(Character.RocketDamage * 2, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_rocket_plt-2021":
                rocketId = 3;
                damage   = RandomizeDamage(Character.RocketDamage * 3, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_rocket_plt-3030":
                rocketId = 4;
                damage   = RandomizeDamage(Character.RocketDamage * 4, (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 0 : 1));
                break;

            case "ammunition_specialammo_pld-8":
                rocketId = 5;
                Plasma(enemy as Character);
                break;

            case "ammunition_specialammo_dcr-250":
                rocketId = 6;
                Decelerate(enemy as Character);
                break;

            case "ammunition_specialammo_wiz-x":
                rocketId = 8;
                if (Character.Cooldowns.Any(c => c is WizardCooldown))
                {
                    return;
                }
                Wizard(enemy as Character);
                break;
            }

            if (Character.Cooldowns.Any(c => c is RocketCooldown))
            {
                return;
            }

            if (player?.Settings.CurrentRocket.Shoot() == 0)
            {
                // NOTHING TO SHOOT
                //todo:fix
                //Packet.Builder.LegacyModule(player.GetGameSession(),
                //    "0|A|STD|No more ammo (todo: find a proper STM message)");
                return;
            }

            double cooldown_time = 2;

            if (player != null && (player.Extras.ContainsKey("equipment_extra_cpu_rok-t01") || player.Information.Premium.Active))
            {
                cooldown_time *= 0.5;
            }

            var cooldown = new RocketCooldown(cooldown_time);

            if (player != null)
            {
                cooldown.Send(World.StorageManager.GetGameSession(player.Id));
            }
            Character.Cooldowns.Add(cooldown);

            if (player != null && enemy is Character)
            {
                UpdateAttacker(enemy as Character, player);
            }

            // todo: fix
            //GameClient.SendToPlayerView(Character, netty.commands.new_client.LegacyModule.write("0|v|" + Character.Id + "|" + enemy.Id + "|H|" + rocketId + "|1|" + (Character is Player && ((Player)Character).Storage.PrecisionTargeterActivated ? 1 : 0)), true);
            Controller.Damage?.Rocket(enemy, damage, false);
        }