When a player chooses their hero, which can be handled in several different ways, you want to store that chosen unit in a Unit array variable:
-
Unit - Create 1 Paladin for (Triggering player)
-
Set Variable Player_Hero[Player number of (Triggering player)] = (Last created unit)
This allows you to track the Hero for the rest of the game. So as long as you have access to a Player you'll be able to get their Hero.
How it works:
An array is what allows you to store more than one value to a variable at a time. The Index of an array is the integer that you type inside of it's [brackets]. Each [Index] can store one value at a time. Note that you can't set an Index to a value greater than 32,768, that's the limit.
Each Player in the game has what's called a Player Number, Reds = 1, Blues = 2, Teals = 3, etc...
We can use this Player Number as the [Index] of our Arrays to store data to specific Players.
Here's an example of this:
-
Set Variable Player_Oil[1] = 100
-
Set Variable Player_Oil[2] = 300
-
Set Variable Player_Oil[3] = 5
Let's say Player_Oil is a custom resource that each Player can harvest in the game. In the above example I am giving Player
1 a value of 100 oil, Player
2 a value of 300 oil, and Player
3 a value of 5 oil.
This allows us to cut down on trigger and variable usage by a lot. Here's an example of a trigger that takes full advantage of these methods:
-
Events
-

Player - Player 1 (red) types a chat message containing -oil as an Exact message
-

Player - Player 2 (blue) types a chat message containing -oil as an Exact message
-

Player - Player 3 (teal) types a chat message containing -oil as an Exact message
-
Conditions
-
Actions
-

Set Variable Player_Oil[Player number of (Triggering player)] = Player_Oil[Player number of (Triggering player)] + 10
This trigger will add 10 oil to any player that types the message
-oil.
Remember, as long as you have access to a Player you'll have access to their Player Number, which will then give you access to any Array variables that you've created which take advantage of this Player number as their [Indexes]. Combine these with Player Groups and the Pick Every Player action and you can make some pretty neat triggers with relative ease.
With this in mind it shouldn't be hard to make triggers for each player/player hero and track those modifications that you mentioned.