Exemple #1
0
        internal static float GetAdjustedChance(AIMCritInfo info)
        {
            if (info.target.StatCollection.GetValue <bool>("CriticalHitImmunity"))
            {
                return(0);
            }
            float chance = GetBaseChance(info), critMultiplier = chance > 0 ? GetMultiplier(info) : 0;

            if (DebugLog)
            {
                Verbo("Crit chance on {3} = {0} x {1} = {2}", chance, critMultiplier, chance * critMultiplier, info.HitLocation);
            }
            return(chance * critMultiplier);
        }
Exemple #2
0
 public static void CheckForAllCrits(AIMCritInfo info)
 {
     try {
         if (DebugLog)
         {
             Verbo("Start crit check on {0} by {1}", info.target, info.weapon);
         }
         ConsolidateCrit(info);
         foreach (var damagedLocation in damaged)
         {
             CheckForCrit(info, damagedLocation.Key, true);
         }
     }                 catch (Exception ex) { Error(ex); }
 }
Exemple #3
0
        public static ComponentDamageLevel GetDegradedComponentLevel(AIMCritInfo info)
        {
            MechComponent        component            = info.component;
            ComponentDamageLevel componentDamageLevel = component.DamageLevel;

            if (component is Weapon && componentDamageLevel == ComponentDamageLevel.Functional)
            {
                componentDamageLevel = ComponentDamageLevel.Penalized;
            }
            else
            {
                componentDamageLevel = ComponentDamageLevel.Destroyed;
            }
            return(componentDamageLevel);
        }
Exemple #4
0
        public static float GetMultiplier(AIMCritInfo info)
        {
            float critMultiplier = Combat.CritChance.GetCritMultiplier(info.target, info.weapon, true);

            if (DebugLog)
            {
                Verbo("Base crit multiplier x{0}, vehicle x{1}, Turret x{2}", critMultiplier, Settings.CriChanceVsVehicle, Settings.CritChanceVsTurret);
            }
            if (info.target is Vehicle && Settings.CriChanceVsVehicle != 1)
            {
                critMultiplier *= (float)Settings.CriChanceVsVehicle;
            }
            else if (info.target is Turret && Settings.CritChanceVsTurret != 1)
            {
                critMultiplier *= (float)Settings.CritChanceVsTurret;
            }
            AttackLog.LogCritMultiplier(critMultiplier);
            return(critMultiplier);
        }
Exemple #5
0
        public static ComponentDamageLevel GetDegradedComponentLevel(AIMCritInfo info, out MessageCenterMessage critMessage)
        {
            MechComponent        component            = info.component;
            ComponentDamageLevel componentDamageLevel = component.DamageLevel;

            if (component is Weapon && componentDamageLevel == ComponentDamageLevel.Functional)
            {
                componentDamageLevel = ComponentDamageLevel.Penalized;
                critMessage          = GetCritMessage(info.target, "{0} CRIT", component.UIName, FloatieMessage.MessageNature.CriticalHit);
            }
            else if (componentDamageLevel != ComponentDamageLevel.Destroyed)
            {
                componentDamageLevel = ComponentDamageLevel.Destroyed;
                critMessage          = GetCritMessage(info.target, "{0} DESTROYED", component.UIName, FloatieMessage.MessageNature.ComponentDestroyed);
            }
            else
            {
                critMessage = null;
            }
            return(componentDamageLevel);
        }
Exemple #6
0
 private static float GetWeaponDamage(AIMCritInfo info)
 {
     return(GetWeaponDamage(info.target, info.hitInfo, info.weapon));
 }