Your method makes a lot of sense to me but I think there's a problem.
<font size="2">System Compare Distance (Self.x,Self.y,ShipSprite.x, ShipSprite.y)<300</font>
That line gives me an error saying you cannot refer to "self" in a system expression.
The other problem is in line:
<font size="2"> ->Set variable Self.AttackUID = ShipSprite.UID</font>
I don't know how to set Self.Variable. I only know how to set a variable value for a specifically named sprite.
I put together a capx that has a simple setup similar to what I have in my game. There is one ship sprite that can be 1 of 3 factions. When its in mode 0 it moves around randomly and when it's in mode 1 is moves towards the ship who's UID is stored in it's target variable. The ship is also in a family group called "enemy_ship". I'm using that family as a way to make the ship sprite differentiate itself from it's target. If you look at the code, hopefully you'll understand what I mean.
@Danijerry Your method using another sprite sounds interesting as well, but my first attempt at it failed. If you have any other suggestion, or could take a look at my capx I'd appreciate it.