public override float ComputeRating() { var self = Raider.Self; int selfHits = (int)Math.Ceiling(self.Life / DMG_PER_HIT); var victim = Raider.GetClosestEnemy(); int victimHits = (int)Math.Ceiling(victim.Life / DMG_PER_HIT); float distanceToVictim = Raider.DistanceToNextEnemy(); if (distanceToVictim <= 2 && selfHits < victimHits) { return(NULL_RATING); } if (distanceToVictim > 2 && selfHits <= victimHits) { return(NULL_RATING); } if (distanceToVictim == 1) { return(OVERRIDE_RATING); } bool wontHeal = distanceToVictim < Raider.DistanceToTavernFrom(victim.Position); return(base.ComputeRating() * (wontHeal ? 1 : 0.5f) * Sigmoid(MEDIAN_DISTANCE - distanceToVictim)); }