private void CreateCriteria()
{
Criteria += unit =>
{
if (unit == null)
{
Logger.DBLog.DebugFormat("[Funky] Recieved null CacheUnit value in skill criteria evaluation");
return true;
}
return true;
};
//Distance
if (MaximumDistance > -1)
Criteria += (unit) => unit.TargetInfo.RadiusDistance <= MaximumDistance;
if (MinimumDistance > -1)
Criteria += (unit) => unit.TargetInfo.RadiusDistance >= MinimumDistance;
//Health
if (HealthPercent > 0d)
Criteria += (unit) => unit.CurrentHealthPct.HasValue && unit.CurrentHealthPct.Value <= HealthPercent;
//TRUE CONDITIONS
if (TrueConditionFlags.Equals(TargetProperties.None))
Criteria += (unit) => true;
else
{
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Boss))
Criteria += (unit) => unit.IsBoss;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Burrowing))
Criteria += (unit) => unit.IsBurrowableUnit;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.FullHealth))
Criteria += (unit) => unit.CurrentHealthPct.HasValue &&
unit.CurrentHealthPct.Value == 1d;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Weak))
Criteria += (unit) => unit.UnitMaxHitPointAverageWeight < 0;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.MissileDampening))
Criteria += (unit) => unit.MonsterMissileDampening;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.RareElite))
Criteria += (unit) => unit.IsEliteRareUnique;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.MissileReflecting))
Criteria += (unit) => unit.IsMissileReflecting && unit.AnimState == AnimationState.Transform;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Shielding))
Criteria += (unit) => unit.MonsterShielding;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Stealthable))
Criteria += (unit) => unit.IsStealthableUnit;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.SucideBomber))
Criteria += (unit) => unit.IsSucideBomber;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.TreasureGoblin))
Criteria += (unit) => unit.IsTreasureGoblin;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Unique))
Criteria += (unit) => unit.MonsterUnique;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Ranged))
Criteria += (unit) => unit.IsRanged;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.TargetableAndAttackable))
Criteria += (unit) => unit.IsTargetableAndAttackable;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Fast))
Criteria += (unit) => unit.IsFast;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.DOTDPS))
Criteria += (unit) => unit.HasDOTdps.HasValue && unit.HasDOTdps.Value;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.CloseDistance))
Criteria += (unit) => unit.TargetInfo.RadiusDistance < 10f;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.ReflectsDamage))
Criteria += (unit) => unit.MonsterReflectDamage;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Electrified))
Criteria += (unit) => unit.MonsterElectrified;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Normal))
Criteria += (unit) => unit.MonsterNormal;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.LowHealth))
Criteria += (unit) => unit.CurrentHealthPct.HasValue && unit.CurrentHealthPct.Value < 0.25d;
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Flying))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value,UnitFlags.Flying);
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Summoner))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Summoner);
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.AvoidanceSummoner))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.AvoidanceSummoner);
if (ObjectCache.CheckFlag(TrueConditionFlags, TargetProperties.Debuffing))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Debuffing);
}
//FALSE CONDITIONS
if (FalseConditionFlags.Equals(TargetProperties.None))
Criteria += (unit) => true;
else
{
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Boss))
Criteria += (unit) => !unit.IsBoss;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Burrowing))
Criteria += (unit) => !unit.IsBurrowableUnit;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.FullHealth))
Criteria += (unit) => unit.CurrentHealthPct.HasValue &&
unit.CurrentHealthPct.Value < 1d;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Weak))
Criteria += (unit) => unit.UnitMaxHitPointAverageWeight > 0;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.MissileDampening))
Criteria += (unit) => !unit.MonsterMissileDampening;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.RareElite))
Criteria += (unit) => !unit.IsEliteRareUnique;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.MissileReflecting))
Criteria += (unit) => !unit.IsMissileReflecting || unit.AnimState != AnimationState.Transform;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Shielding))
Criteria += (unit) => !unit.MonsterShielding;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Stealthable))
Criteria += (unit) => !unit.IsStealthableUnit;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.SucideBomber))
Criteria += (unit) => !unit.IsSucideBomber;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.TreasureGoblin))
Criteria += (unit) => !unit.IsTreasureGoblin;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Unique))
Criteria += (unit) => !unit.MonsterUnique;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Ranged))
Criteria += (unit) => !unit.IsRanged;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.TargetableAndAttackable))
Criteria += (unit) => !unit.IsTargetableAndAttackable;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Fast))
Criteria += (unit) => !unit.IsFast;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.DOTDPS))
Criteria += (unit) => !unit.HasDOTdps.HasValue || !unit.HasDOTdps.Value;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.CloseDistance))
Criteria += (unit) => unit.TargetInfo.RadiusDistance > 10f;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.ReflectsDamage))
Criteria += (unit) => !unit.MonsterReflectDamage;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Electrified))
Criteria += (unit) => !unit.MonsterElectrified;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Normal))
Criteria += (unit) => !unit.MonsterNormal;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.LowHealth))
Criteria += (unit) => !unit.CurrentHealthPct.HasValue || unit.CurrentHealthPct.Value >= 0.25d;
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Flying))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
!ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Flying);
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Summoner))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
!ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Summoner);
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.AvoidanceSummoner))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
!ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.AvoidanceSummoner);
if (ObjectCache.CheckFlag(FalseConditionFlags, TargetProperties.Debuffing))
Criteria +=
(unit) =>
unit.UnitPropertyFlags.HasValue &&
!ObjectCache.CheckFlag(unit.UnitPropertyFlags.Value, UnitFlags.Debuffing);
}
}