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 LaserAttackCommand(PendingAttack attack, int laserColor) { Packet.Builder.BuildToRange(attack.From, Commands.ATTACK_LASER_COMMAND, new object[] { attack.From.Id, attack.To.Id, laserColor }, new object[0]); }
/// <summary> /// Creating a new combat /// </summary> /// <param name="pendingAttack">Attack pending</param> /// <exception cref="Exception">Error is dropped when duplicate in Queue</exception> public void CreateCombat(PendingAttack pendingAttack) { if (_pendingAttacksQueue.Contains(pendingAttack)) { Out.QuickLog("Duplicate entry of Combat, same PendingAttack already exists in Queue", LogKeys.ERROR_LOG); throw new Exception("Found a duplicate entry of Combat"); } _pendingAttacksQueue.Enqueue(pendingAttack); }
/// <summary> /// After laser shot is complete and if still subscribed to the attack it will continue /// </summary> /// <param name="sender">AbstractAttacker</param> /// <param name="pendingAttack">Attack from event</param> /// <exception cref="Exception">Still subscribed to the event</exception> private void OnLaserShotComplete(object sender, PendingAttack pendingAttack) { if (!InLaserCombat) { Out.QuickLog("Event didn't unsubscribe on AttackController", LogKeys.ERROR_LOG); throw new Exception("Still listening to LaserShot event while there is no ongoing attack"); } OnLaserCooldown(pendingAttack); }
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)); } } } }
/// <summary> /// Once laser is shot it will strike the event /// </summary> /// <param name="pendingAttack">Attack that was used when striking</param> public void OnLaserShoot(PendingAttack pendingAttack) { OnLaserShot?.Invoke(this, pendingAttack); }
/// <summary> /// Creating a pending attack which is ready to be added into the server /// </summary> /// <param name="pendingAttack"></param> public void CreateAttackCombat(PendingAttack pendingAttack) { ServerController.Get <AttackController>().CreateCombat(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); }
private void PendingRocketLauncherAttack(PendingAttack pendingAttack) { }
private void PendingRocketAttack(PendingAttack pendingAttack) { }