Instead of setting the group outside of the if statement, set it inside the else block because you don't need it inside the 'Then' block. You can do the same for Caster_Pos and dummy_loc.
But note: you would have to destroy them in the same block that you are creating them, so move their respective "DestroyGroup" and "RemoveLocation" calls to the else block.
Also, you should cache (Real((Level of Hit for FR_Caster[FR_integer])))
And this leaks:
Unit - Create 1 dummy for (Owner of FR_Caster[FR_integer]) at (FR_Caster_Pos offset by FR_Real_CastRange[FR_integer] towards (Facing of FR_Caster[FR_integer]) degrees) facing Default building facing degrees
You should store the location in a variable and remove it.
Excellent indexing by the way.