Aura.Channel.Skills.Combat.CriticalHit.Handle C# (CSharp) Метод

Handle() публичный статический Метод

Checks if attacker has Critical Hit and applies crit bonus by chance. Also sets the target action's critical option if a crit happens.
public static Handle ( Creature attacker, float critChance, float &damage, TargetAction tAction, bool bypassNoviceCheck = false ) : void
attacker Aura.Channel.World.Entities.Creature
critChance float
damage float
tAction TargetAction
bypassNoviceCheck bool
Результат void
		public static void Handle(Creature attacker, float critChance, ref float damage, TargetAction tAction, bool bypassNoviceCheck = false)
		{
			// Check if attacker actually has critical hit
			var critSkill = attacker.Skills.Get(SkillId.CriticalHit);
			if (critSkill == null || (critSkill.Info.Rank == SkillRank.Novice && !bypassNoviceCheck))
				return;

			// Cancel if crit doesn't happen
			if (RandomProvider.Get().Next(100) >= critChance)
				return;

			// Add crit bonus
			var bonus = critSkill.RankData.Var1 / 100f;
			damage = damage + (damage * bonus);

			// Set target option
			tAction.Set(TargetOptions.Critical);
		}
	}

Usage Example

Пример #1
0
        /// <summary>
        /// Handles skill usage.
        /// </summary>
        /// <param name="attacker"></param>
        /// <param name="skill"></param>
        /// <param name="targetAreaEntityId"></param>
        public void Use(Creature attacker, Skill skill, long targetAreaEntityId)
        {
            Send.Effect(attacker, 5, (byte)1, targetAreaEntityId);

            var cap = new CombatActionPack(attacker, skill.Info.Id);

            var aAction = new AttackerAction(CombatActionType.Attacker, attacker, targetAreaEntityId);

            aAction.Options |= AttackerOptions.Result;
            aAction.Stun     = UseStun;
            cap.Add(aAction);

            // Get targets in skill area
            var targets = SkillHelper.GetTargetableCreaturesInSkillArea(attacker, LaserRectHeight, LaserRectWidth);

            // Attack targets
            foreach (var target in targets)
            {
                var targetPosition = target.GetPosition();

                var tAction = new TargetAction(CombatActionType.TakeHit, target, attacker, skill.Info.Id);
                tAction.Options = TargetOptions.Result | TargetOptions.KnockDown;
                tAction.Stun    = TargetStun;
                tAction.Delay   = 1200;
                cap.Add(tAction);

                // Var2: 300/1000, based on rank. Could be damage?
                var damage = skill.RankData.Var2;

                // Modify damage
                CriticalHit.Handle(attacker, attacker.GetTotalCritChance(target.Protection), ref damage, tAction);
                SkillHelper.HandleDefenseProtection(target, ref damage);
                SkillHelper.HandleConditions(attacker, target, ref damage);
                ManaShield.Handle(target, ref damage, tAction);

                // Apply damage
                if (damage > 0)
                {
                    target.TakeDamage(tAction.Damage = 300, attacker);
                    SkillHelper.HandleInjury(attacker, target, damage);
                }
                target.Stability = Creature.MinStability;

                // Aggro
                target.Aggro(attacker);

                // Check death
                if (target.IsDead)
                {
                    tAction.Options |= TargetOptions.FinishingKnockDown;
                }

                // Knock back
                attacker.Shove(target, KnockbackDistance);
            }

            cap.Handle();

            Send.SkillUse(attacker, skill.Info.Id, 0);
        }
All Usage Examples Of Aura.Channel.Skills.Combat.CriticalHit::Handle