My bot uses a lot caltrops. Is there any way i can make it use caltrops less often by editing following code?
/// <summary>
/// When Caltrops should be cast
/// </summary>
private static bool CaltropsCondition(SkillMeta meta)
{
return TargetUtil.AnyMobsInRange(40) && !GetHasBuff(SNOPower.DemonHunter_Caltrops);
}
/// <summary>
/// When Sentry should be cast
/// </summary>
/// <param name="meta"></param>
/// <returns></returns>
private static bool SentryCondition(SkillMeta meta)
{
meta.CastRange = 85f;
meta.CastFlags = CanCastFlags.NoTimer;
meta.TargetPositionSelector = ret => GetSentryPosition();
if (meta.Skill.Charges == 0)
return false;
if (TargetUtil.AnyMobsInRange(65) && Trinity.PlayerOwnedDHSentryCount < MaxSentryCount)
return true;
return false;
}
private static Vector3 GetSentryPosition()
{
var sentries = SpellHistory.History.Where(s => s.Power.SNOPower == SNOPower.DemonHunter_Sentry && s.TimeSinceUse.TotalSeconds < 12).ToList();
var sentryPositions = new HashSet<Vector3>(sentries.Select(b => b.TargetPosition));
Func<Vector3, bool> IsValidPosition = pos => !sentryPositions.Any(b => b.Distance(pos) <= 12f);
var clusterPosition = TargetUtil.GetBestClusterPoint();
if (IsValidPosition(clusterPosition))
{
return clusterPosition;
}
if (IsValidPosition(CurrentTarget.Position))
{
return CurrentTarget.Position;
}
if (IsValidPosition(Player.Position))
{
return Player.Position;
}
var closestUnit = TargetUtil.GetClosestUnit().Position;
if (IsValidPosition(closestUnit))
{
return closestUnit;
}
return Player.Position;
}
/// <summary>
/// When Caltrops should be cast
/// </summary>
private static bool CaltropsCondition(SkillMeta meta)
{
return TargetUtil.AnyMobsInRange(40) && !GetHasBuff(SNOPower.DemonHunter_Caltrops);
}
/// <summary>
/// When Sentry should be cast
/// </summary>
/// <param name="meta"></param>
/// <returns></returns>
private static bool SentryCondition(SkillMeta meta)
{
meta.CastRange = 85f;
meta.CastFlags = CanCastFlags.NoTimer;
meta.TargetPositionSelector = ret => GetSentryPosition();
if (meta.Skill.Charges == 0)
return false;
if (TargetUtil.AnyMobsInRange(65) && Trinity.PlayerOwnedDHSentryCount < MaxSentryCount)
return true;
return false;
}
private static Vector3 GetSentryPosition()
{
var sentries = SpellHistory.History.Where(s => s.Power.SNOPower == SNOPower.DemonHunter_Sentry && s.TimeSinceUse.TotalSeconds < 12).ToList();
var sentryPositions = new HashSet<Vector3>(sentries.Select(b => b.TargetPosition));
Func<Vector3, bool> IsValidPosition = pos => !sentryPositions.Any(b => b.Distance(pos) <= 12f);
var clusterPosition = TargetUtil.GetBestClusterPoint();
if (IsValidPosition(clusterPosition))
{
return clusterPosition;
}
if (IsValidPosition(CurrentTarget.Position))
{
return CurrentTarget.Position;
}
if (IsValidPosition(Player.Position))
{
return Player.Position;
}
var closestUnit = TargetUtil.GetClosestUnit().Position;
if (IsValidPosition(closestUnit))
{
return closestUnit;
}
return Player.Position;
}