public static float GetRangeModifier(ToHit instance, AbstractActor attacker, Weapon weapon, ICombatant target, Vector3 attackPosition, Vector3 targetPosition, LineOfFireLevel lofLevel, MeleeAttackType meleeAttackType, bool isCalledShot) { if (attacker.EncounterTags.ContainsAny(Core.Settings._C3NetworkEncounterTags) == false) { return(ToHitModifiersHelper.GetRangeModifier(instance, attacker, weapon, target, attackPosition, targetPosition, lofLevel, meleeAttackType, isCalledShot)); } float realDist = Vector3.Distance(attackPosition, targetPosition); float distance = realDist; float distMod = 0f; float minRange = weapon.MinRange; float shortRange = weapon.ShortRange; float medRange = weapon.MediumRange; float longRange = weapon.LongRange; float maxRange = weapon.MaxRange; Vector3 alternateAttackPos = GetC3CachedPos(attacker, target); if (alternateAttackPos != Vector3.zero) { float alternateDist = Vector3.Distance(alternateAttackPos, targetPosition); if (alternateDist < realDist) { if (alternateDist < minRange) { distance = minRange; } else { distance = alternateDist; } } } if (distance < minRange) { distMod = weapon.parent.MinRangeAccMod(); //Log.LogWrite(" minRange "); } else if (distance < shortRange) { distMod = weapon.parent.ShortRangeAccMod(); //Log.LogWrite(" shortRange "); } else if (distance < medRange) { distMod = weapon.parent.MediumRangeAccMod(); //Log.LogWrite(" medRange "); } else if (distance < longRange) { distMod = weapon.parent.LongRangeRangeAccMod(); //Log.LogWrite(" longRange "); } else if (distance < maxRange) { distMod = weapon.parent.ExtraLongRangeAccMod(); //Log.LogWrite(" extraRange "); } ; //return distMod; return(distMod + instance.GetRangeModifierForDist(weapon, distance)); }