public virtual CombatSkillResult Use(Creature attacker, Skill skill, long targetEntityId)
{
// Check target
var target = attacker.Region.GetCreature(targetEntityId);
if (target == null)
return CombatSkillResult.InvalidTarget;
// Check distance
var targetPosition = target.GetPosition();
var attackerPosition = attacker.GetPosition();
if (!attackerPosition.InRange(targetPosition, this.GetRange(attacker, skill)))
return CombatSkillResult.OutOfRange;
if (attacker.Region.Collisions.Any(attackerPosition, targetPosition))
return CombatSkillResult.OutOfRange;
// Use
this.UseSkillOnTarget(attacker, skill, target);
return CombatSkillResult.Okay;
}