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)); } }
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)); } }
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)); } }
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)); } }
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); } } }
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)); } }
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) ); } }
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)); } }