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); }
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); } }
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); }
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); }
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); }
private static float GetWeaponDamage(AIMCritInfo info) { return(GetWeaponDamage(info.target, info.hitInfo, info.weapon)); }