'So then if they reach the coordinates for that action'
Are you comparing positions with 'is equal to' ? That will indeed not work. Watch positions evolve in the debugger.
Notice the numbers after the decimal point. A position is kinda never exact.
Bring all those clickable objects into 1 family.
Bring character and an invisible sprite 'target' into a container. Now each time you pick a character its target is also picked.
Give 'target' an instance boolean 'actionRequired'.
Give 'target' an instance variable 'actionObject'.
Give Character the Lign of sight behavior. Set range to like 50 pixels.
When the player clicks a new target, move 'target' to that position. Find path to 'target'. At the same time.
Set 'actionRequired' to true when clicked on clickable object, else to false.
Set 'actionObject' to the UID of that clickable object.
The action is directly linked to the clickable object, probably in a variable on the family. We pick that object later.
Character has reached endpoint when action object is in range.
Target.'actionRequired' is true ? <-- picks also Character due the container (no performance loss when not true)
Character has LOS on family <--- Character & Target only stay in the picklist if it has LOS
Family.UID =? Target.'actionObject' <----- additional logic
Absolute necessary action: Set Target.'actionRequired' to false, else the whole logic will repeat and repeat until the player chooses a new target.
At this point the logic true/untrue detects if Character arrived at endpoint and clickable object did not run away. It will also trigger if clickable object moved towards the Character, bringing itself into range.
At this point the picklist contains clickable object, so you can use its assigned action to perform the action.
The picklist contains also Character and Target, so you can exclude them from getting clicked with the mouse, else player can send them wandering before the action is done and over with.