コード例 #1
0
        public void StartEnergyTransfer()
        {
            TechFactory tech = TechFactory.ENERGY_LEECH;

            if (!_elaActive && _lastELA.FromNow() > tech.Duration + tech.Cooldown)
            {
                if (!PlayerController.Account.Vault.Techs.TryGetValue(tech.ID, out int currentCount) ||
                    currentCount <= 0)
                {
                    return;
                }
                PlayerController.Account.Vault.Techs[tech.ID] = --currentCount;

                _elaActive = true;
                _lastELA   = DateTime.Now;

                PlayerController.Account.Cooldown.TechCooldown[tech.ID] = _lastELA;
                PlayerController.BoosterAssembly.Multiply(BoosterType.DAMAGE_LASER_TO_HITPOINTS_TRANSFORMER, 1.1);

                ICommand showEffectCommand = PacketBuilder.VisualModifier(PlayerController, 58, true);
                PlayerController.Send(
                    showEffectCommand,
                    PacketBuilder.Slotbar.TechItemStatus(tech.Name, currentCount, false),
                    PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Duration.TotalMilliseconds)
                    );
                PlayerController.EntitesInRange(x => x.Send(showEffectCommand));
            }
        }
コード例 #2
0
        public void StartBattleRepairBot()
        {
            TechFactory tech = TechFactory.BATTLE_REPAIR_BOT;

            if (!_brbActive && _lastBRB.FromNow() > tech.Duration + tech.Cooldown)
            {
                if (!PlayerController.Account.Vault.Techs.TryGetValue(tech.ID, out int currentCount) ||
                    currentCount <= 0)
                {
                    return;
                }
                PlayerController.Account.Vault.Techs[tech.ID] = --currentCount;

                _brbActive = true;
                _lastBRB   = DateTime.Now;

                PlayerController.Account.Cooldown.TechCooldown[tech.ID] = _lastBRB;
                _brbLapCounter = 10;

                PlayerController.HangarAssembly.ChangeHitpoints(10000, force: true);

                ICommand showEffectCommand = PacketBuilder.VisualModifier(PlayerController, 59, true);
                PlayerController.Send(showEffectCommand,
                                      PacketBuilder.Slotbar.TechItemStatus(tech.Name, currentCount, false),
                                      PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Duration.TotalMilliseconds)
                                      );
                PlayerController.EntitesInRange(x => x.Send(showEffectCommand));
            }
        }
コード例 #3
0
        private void CheckPrecisionTargeter()
        {
            TechFactory tech = TechFactory.PRECISION_TARGETER;

            if (_rpmActive && _lastRPM.FromNow() > tech.Duration)
            {
                _rpmActive = false;

                PlayerController.Send(PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Cooldown.TotalMilliseconds));
            }
        }
コード例 #4
0
        private void CheckEnergyTransfer()
        {
            TechFactory tech = TechFactory.ENERGY_LEECH;

            if (_elaActive && _lastELA.FromNow() > tech.Duration)
            {
                _elaActive = false;
                PlayerController.BoosterAssembly.Divide(BoosterType.DAMAGE_LASER_TO_HITPOINTS_TRANSFORMER, 1.1);

                ICommand removeEffectCommand = PacketBuilder.VisualModifier(PlayerController, 58, false);
                PlayerController.Send(removeEffectCommand, PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Cooldown.TotalMilliseconds));
                PlayerController.EntitesInRange(x => x.Send(removeEffectCommand));
            }
        }
コード例 #5
0
        private void CheckBattleRepairBot()
        {
            TechFactory tech = TechFactory.BATTLE_REPAIR_BOT;

            if (_brbActive && _brbLapCounter == 101)
            {
                _brbActive = false;

                ICommand removeEffectCommand = PacketBuilder.VisualModifier(PlayerController, 59, false);
                PlayerController.Send(removeEffectCommand, PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Cooldown.TotalMilliseconds));
                PlayerController.EntitesInRange(x => x.Send(removeEffectCommand));
            }
            else if (_brbActive)
            {
                if (++_brbLapCounter % 10 == 0)
                {
                    PlayerController.HangarAssembly.ChangeHitpoints(10000, force: true);
                }
            }
        }
コード例 #6
0
        public void StartShieldBackup()
        {
            TechFactory tech = TechFactory.SHIELD_BACKUP;

            if (_lastSBU.FromNow() > tech.Cooldown)
            {
                if (!PlayerController.Account.Vault.Techs.TryGetValue(tech.ID, out int currentCount) ||
                    currentCount <= 0)
                {
                    return;
                }
                PlayerController.Account.Vault.Techs[tech.ID] = --currentCount;

                _lastSBU = DateTime.Now;
                PlayerController.Account.Cooldown.TechCooldown[tech.ID] = _lastSBU;

                PlayerController.HangarAssembly.ChangeShield(75000, displayChange: true);

                if (PlayerController.Spacemap != null)
                {
                    foreach (var other in PlayerController.Spacemap.EntitiesOnMap(PlayerController).ToList())
                    {
                        if (other is PlayerController playerController &&
                            playerController.PlayerAbilityAssembly.WeakenShieldsActive &&
                            playerController.PlayerAbilityAssembly.WeakenShieldsVictim.ID == PlayerController.ID)
                        {
                            playerController.PlayerAbilityAssembly.CheckOrStopWeakenShields(true);
                        }
                    }
                }

                ICommand showEffectCommand = PacketBuilder.SendTechEffect(PlayerController, "SBU");
                PlayerController.Send(
                    showEffectCommand,
                    PacketBuilder.Slotbar.TechItemStatus(tech.Name, currentCount, false),
                    PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Cooldown.TotalMilliseconds)
                    );
                PlayerController.EntitesInRange(x => x.Send(showEffectCommand));
            }
        }
コード例 #7
0
        public void StartPrecisionTargeter()
        {
            TechFactory tech = TechFactory.PRECISION_TARGETER;

            if (!_rpmActive && _lastRPM.FromNow() > tech.Duration + tech.Cooldown)
            {
                if (!PlayerController.Account.Vault.Techs.TryGetValue(tech.ID, out int currentCount) ||
                    currentCount <= 0)
                {
                    return;
                }
                PlayerController.Account.Vault.Techs[tech.ID] = --currentCount;

                _rpmActive = true;
                _lastRPM   = DateTime.Now;

                PlayerController.Account.Cooldown.TechCooldown[tech.ID] = _lastRPM;
                PlayerController.Send(
                    PacketBuilder.Slotbar.TechItemStatus(tech.Name, currentCount, false),
                    PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Duration.TotalMilliseconds)
                    );
            }
        }
コード例 #8
0
        public void StartChainImpulse()
        {
            TechFactory tech = TechFactory.CHAIN_IMPULSE;

            if (_lastCI.FromNow() > tech.Cooldown)
            {
                if (!PlayerController.Account.Vault.Techs.TryGetValue(tech.ID, out int currentCount) ||
                    currentCount <= 0)
                {
                    return;
                }
                PlayerController.Account.Vault.Techs[tech.ID] = --currentCount;

                bool          working      = false;
                double        toDeal       = Noise(10000);
                StringBuilder chainCommand = new StringBuilder($"0|TX|ECI||{PlayerController.ID}");
                foreach (EntityControllerBase entity in
                         PlayerController.Spacemap.InRange(PlayerController, 1000)
                         .OrderBy(x => x.MovementAssembly.ActualPosition().DistanceTo(PlayerController.MovementAssembly.ActualPosition()))
                         .Take(7))
                {
                    working = true;
                    chainCommand.Append($"|{entity.ID}");

                    int damage = Math.Abs(entity.HangarAssembly.ChangeHitpoints(-(int)toDeal, false));
                    toDeal = Noise(toDeal);

                    entity.AttackTraceAssembly.LogAttack(PlayerController, 0, damage, false);
                    entity.HangarAssembly.CheckDeath();

                    ICommand damageCommand = PacketBuilder.AttackCommand(PlayerController, entity, AttackTypeModule.LASER, damage);
                    entity.Send(damageCommand);           // send to player
                    PlayerController.Send(damageCommand); // send to player
                    entity.EntitiesLocked(y => {
                        if (y.ID == PlayerController.ID)
                        {
                            return;
                        }

                        y.Send(damageCommand);
                    }); // send to all who have him in lock
                }

                if (!working)
                {
                    return;
                }
                else
                {
                    _lastCI = DateTime.Now;
                    PlayerController.Account.Cooldown.TechCooldown[tech.ID] = _lastCI;
                }

                ICommand showEffectCommand = PacketBuilder.Legacy(chainCommand.ToString());
                PlayerController.Send(
                    showEffectCommand,
                    PacketBuilder.Slotbar.TechItemStatus(tech.Name, currentCount, false),
                    PacketBuilder.Slotbar.ItemCooldownCommand(tech.Name, tech.Cooldown.TotalMilliseconds)
                    );
                PlayerController.EntitesInRange(x => x.Send(showEffectCommand));
            }
        }