Nah!
First you need a method to efficiently determine if a unit is in the water
Make a bunch of regions marking the water areas, and set them to an array, something like this during initialization:
set variable r_waterRegions[1] = Water Region 1 <gen>
set variable r_waterRegions[2] = Water Region 2 <gen>
set variable r_waterRegions[3] = Water Region 3 <gen>
....
Now, make a trigger that executes periodically do this:
Unit Group - Pick all units in (PUT SOMETHING HERE TO SINGLE OUT HEROS) and perform multiple actions
. set variable b_heroIsInWater = false
. For each Integer A from 1 to NUMBER OF WATER REGIONS GOES HERE
. . if Boolean Comparison (Unit - Unit in region (Picked Unit, r_waterRegions[Integer A]) is true)
. . . set variable b_heroIsInWater = true
. if Boolean Comparison (b_heroIsInWater is true)
. . STUFF TO DO IF HERO IS IN THE WATER GOES HERE
. else
. . STUFF TO DO IF HERO IS NOT IN THE WATER GOES HERE
I believe one thing you can do is use customized Engineering Upgrades that'll modify the weaker abilities to stronger ones.
So what do you do when the hero is in the water?
- Add Permanent Invisibility
- Add a modified EU to upgrade the aura to be actually functional
- Add a modified EU to upgrade the shockwave ability to a more damaging version
What do you do when the hero is not in the water?
Remove those abilities!
If the hero doesn't have it, it's harmless anyway.
If you need some things on non-heros, just single out some of the effects with conditions (as in, If actions)