First off, your map has a LOT of leaks. Check out
Things That Leak or the map will become laggy and nonfunctional over time.
As for why the random buff triggers don't work,
-
Upgrades Copy
-

Events
-


Game - Button for Research Random Buffs pressed.
-

Conditions
-

Actions
-


Set VariableSet UnitCount = (Number of units in (Units owned by Player 1 (Red).))
-


Set VariableSet DiceRoll = (Random integer number between 1 and 5)
-


Set VariableSet UnitRoll = (Random integer number between 1 and UnitCount)
-


Set VariableSet ChosenUnitType = RandomUnits[UnitRoll]
RandomUnits[UnitRoll] is going to return a totally nonsensical result because you set up RandomUnits in a specific way in another trigger where each number corresponds to a unit type. So if the player's only units are 5 tauren, it will roll a number between 1 and 5, but Tauren is RandomUnits[10] therefore the chosen type will never actually be tauren.
-
Set VariableSet ChosenAbility = RandomAbilities[DiceRoll]
-
Set VariableSet RandomAbilities[1] = Devotion Aura
-
Set VariableSet RandomAbilities[2] = Trueshot Aura
-
Set VariableSet RandomAbilities[3] = Endurance Aura
-
Set VariableSet RandomAbilities[4] = Brilliance Aura
-
Set VariableSet RandomAbilities[5] = Vampiric Aura
Here you're setting the chosen ability before the random ability variables have been set, so the first time this trigger runs it won't work. These random ability variables should be set at the start of the game instead.
-
Set VariableSet Part1 = Buff Applied :
-
Set VariableSet Part2 = (Name of ChosenAbility)
-
Set VariableSet Part3 = to unit :
-
Set VariableSet Part4 = (Unit: (Triggering unit)'s String Field: Proper Names ('upro'))
Here, there is no (Trigger unit) for the string to name.
-
Unit Group - Pick every unit in (Units owned by Player 1 (Red).) and do (Actions)
-

Loop - Actions
-


If ((Unit-type of (Picked unit)) Equal to ChosenUnitType) then do (Unit - Add ChosenAbility to (Picked unit)) else do (Do nothing)
-


Game - Display to Player Group - Player 1 (Red) for 10.00 seconds the text: ((Part1 + Part2) + (Part3 + Part4))
This will, more often than not, fail to work for the reasons outlined earlier - ChosenUnitType doesn't actually correspond to the unit type being selected.
-
Upgrade Register
-

Events
-


Unit - A unit enters Player1RegionCreep <gen>
-

Conditions
-


HasUpgrade[UnitRoll] Equal to True
-

Actions
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




(Owner of (Triggering unit)) Equal to Player 1 (Red)
-



Then - Actions
-




If ((Unit-type of (Triggering unit)) Equal to ChosenUnitType) then do (Unit - Add ChosenAbility to (Triggering unit)) else do (Do nothing)
-




Set VariableSet HasUpgrade[UnitRoll] = True
-



Else - Actions
HasUpgade[UnitRoll] is never set true anywhere but this trigger, and since it has to be true for this trigger to run, the trigger will never run.
Additionally ChosenUnitType and ChosenAbility will be overwritten whenever the random buff is researched, so even with the conditions fixed it will only work if the spawned unit is the most recently buffed unit type and will only buff it with the most recently chosen ability.
For what you want to do I think the most sensible way is to use hashtables rather than arrays. Here's a basic explanation of how they work
Hashtables and MUI