protected virtual void OnLaserCooldown(PendingAttack pendingAttack) { if (ItemMap.IsSecondaryAmmunition(pendingAttack.LootId)) { if (!CooldownManager.Instance.Exists(Character, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN)) { CombatManager.Instance.CreateAttackCombat(pendingAttack); } else { var cooldown = CooldownManager.Instance.Get(Character, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN); cooldown.SetOnCompleteAction(() => CombatManager.Instance.CreateAttackCombat(pendingAttack)); } } else { if (!CooldownManager.Instance.Exists(Character, CooldownTypes.LASER_SHOT_COOLDOWN)) { CombatManager.Instance.CreateAttackCombat(pendingAttack); } else { var cooldown = CooldownManager.Instance.Get(Character, CooldownTypes.LASER_SHOT_COOLDOWN); cooldown.SetOnCompleteAction(() => CombatManager.Instance.CreateAttackCombat(pendingAttack)); } } }
public void OnLaserAmmunitionChanged(object sender, string lootId) { if (!InLaserCombat) { Out.QuickLog("Event didn't unsubscribe on AttackController", LogKeys.ERROR_LOG); throw new Exception("Still listening to Laser Ammo Change event while there is no ongoing attack"); } var secondaryAmmo = ItemMap.IsSecondaryAmmunition(lootId); if (CooldownManager.Instance.Exists(Character, CooldownTypes.LASER_SHOT_COOLDOWN) && !secondaryAmmo) { CooldownManager.Instance.Get(Character, CooldownTypes.LASER_SHOT_COOLDOWN).SetOnCompleteAction(() => OnLaserCombat(Character.Selected)); } else if (CooldownManager.Instance.Exists(Character, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN) && secondaryAmmo) { CooldownManager.Instance.Get(Character, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN).SetOnCompleteAction(() => OnLaserCombat(Character.Selected)); } else { OnLaserCombat(Character.Selected); } }
protected override void OnLaserCooldown(PendingAttack pendingAttack) { pendingAttack.LootId = Player.Settings.GetSettings <SlotbarSettings>().SelectedLaserAmmo; if (_configurationChanged) { CombatManager.Instance.CreateCombat(Player, pendingAttack.To, AttackTypes.LASER, pendingAttack.LootId); } else { if (ItemMap.IsSecondaryAmmunition(pendingAttack.LootId)) { if (!CooldownManager.Instance.Exists(Character, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN)) { CombatManager.Instance.CreateAttackCombat(pendingAttack); } else { var cooldown = CooldownManager.Instance.Get(Character, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN); cooldown.SetOnCompleteAction(() => CombatManager.Instance.CreateAttackCombat(pendingAttack)); } } else { if (!CooldownManager.Instance.Exists(Character, CooldownTypes.LASER_SHOT_COOLDOWN)) { CombatManager.Instance.CreateAttackCombat(pendingAttack); } else { var cooldown = CooldownManager.Instance.Get(Player, CooldownTypes.LASER_SHOT_COOLDOWN); cooldown.SetOnCompleteAction(() => CombatManager.Instance.CreateAttackCombat(pendingAttack)); } } } }
private void PendingLaserAttack(PendingAttack pendingAttack) { var secondaryLaser = ItemMap.IsSecondaryAmmunition(pendingAttack.LootId); if (CooldownManager.Instance.Exists(pendingAttack.From, CooldownTypes.LASER_SHOT_COOLDOWN) && !secondaryLaser || CooldownManager.Instance.Exists(pendingAttack.From, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN) && secondaryLaser) { return; } var damage = 0; var absorbDamage = 0; var laserColor = 0; switch (pendingAttack.LootId) { case "ammunition_laser_lcb-10": damage = pendingAttack.From.Damage; laserColor = 1; break; case "ammunition_laser_mcb-25": damage = pendingAttack.From.Damage * 2; laserColor = 1; break; case "ammunition_laser_mcb-50": damage = pendingAttack.From.Damage * 3; laserColor = 2; break; case "ammunition_laser_ucb-100": damage = pendingAttack.From.Damage * 4; laserColor = 3; break; case "ammunition_laser_sab-50": absorbDamage = pendingAttack.From.Damage * 2; laserColor = 4; break; case "ammunition_laser_cbo-100": absorbDamage = pendingAttack.From.Damage; damage = pendingAttack.From.Damage * 2; laserColor = 8; break; case "ammunition_laser_rsb-75": damage = pendingAttack.From.Damage * 6; laserColor = 6; break; case "ammunition_laser_job-100": damage = pendingAttack.From.Damage * 4; laserColor = 9; break; default: laserColor = pendingAttack.From.LaserColor; damage = pendingAttack.From.Damage; absorbDamage = 0; break; } PrebuiltCombatCommands.Instance.LaserAttackCommand(pendingAttack, laserColor); ServerController.Get <DamageController>().EnforceDamage(pendingAttack.To, pendingAttack.From, damage, absorbDamage, DamageCalculationTypes.RANDOMISED, AttackTypes.LASER); if (secondaryLaser) { CooldownManager.Instance.CreateCooldown(new Cooldown(pendingAttack.From, CooldownTypes.SECONDARY_LASER_SHOT_COOLDOWN, 3000)); } else { CooldownManager.Instance.CreateCooldown(new Cooldown(pendingAttack.From, CooldownTypes.LASER_SHOT_COOLDOWN, 850)); } pendingAttack.From.OnLaserShoot(pendingAttack); }