Beispiel #1
0
 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));
         }
     }
 }
Beispiel #2
0
        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));
             }
         }
     }
 }
Beispiel #4
0
        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);
        }