1) Why do you use countdown timer? I'd just use periodic event of 0,03 second.
2) I'd add "(Ability being cast) Equal to Oblivion" to the condition of the trigger, and not use IF/THEN/ELSE.
3) I'd use strings rather than integers for saving things in hashtable.
-
Save (Level of Oblivion for (Triggering unit)) as 1 of...
-
Save (Level of Oblivion for (Triggering unit)) as ability_level of...
The latter is much more descriptive.
4) You could loop those 1 to 15 loops. Put a loop inside a loop, and use a variable for changing the offset and flying height. Change the variables each time when the outer loop has run.
5) I'd use a dedicated unit group for loop trigger, add units to it in the spell cast trigger, and remove them from it when needed. Then there's no need to create/destroy Temp_Group. That way run_check becomes unnecessary, just check whether the group is empty or not.
6) (Unit-type of (Triggering unit)) Equal to Invisible Centre - IF/THEN/ELSE thingy should be in the first IF/THEN/ELSE thingy's ELSE branch. If the first check returns true, then this will return false.
7) Check the tooltip, there's one typo and unnecessary capital letters.
8) Good job with the spell
