示例#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));
         }
     }
 }
 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]);
 }
示例#3
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);
        }
示例#4
0
        /// <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));
             }
         }
     }
 }
示例#6
0
 /// <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);
 }
示例#7
0
 /// <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);
 }
示例#8
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);
        }
示例#9
0
 private void PendingRocketLauncherAttack(PendingAttack pendingAttack)
 {
 }
示例#10
0
 private void PendingRocketAttack(PendingAttack pendingAttack)
 {
 }