You don't want buttons. You want a trigger system that sort of resembles the attribute system in the Elder Scrolls series, but you don't mind the icons for Str, Agl, Int below hero's EXP bar right?
Should be easy, if I get your request right. If you just have 1 hero per player, make 4 Integer Arrays called StrProg[], AglProg[], IntProg[], and PrimeAtt[]. Then you need an integer called Limit, and a unit array called Hero[].
Now, these names are ofc just examples.
Put player Index into the brackets [] to specify which hero. So that StrProg[2] means player 2's hero's Strength Progression.
PrimeAtt[2] = 1 means that the hero of player 2 has Strength as primary attribute
PrimeAtt[] == 2 = Prime: Agility
PrimeAtt[] == 3 = Prime: Intelligence
That way you can find out which hero is (1) Strength, (2) Agility, and (3) Intelligence based through triggers. So, whenever a hero does a task that requires Strength do this:
-
If/Then/Else Multiple Functions
-

Conditions
-


PrimeAtt[Index] Equal to 1
-

Then
-


Set StrProg[Index] Equal to StrProg[Index] + 2
-

Else
-


Set StrProg[Index] Equal to StrProg[Index] + 1
-
If/Then/Else Multiple Functions
-

Conditions
-


StrProg[Index] Greater than or equal to Limit
-

Then
-


Set Strength of Hero[Index] = Strength of Hero[Index] +1
-


Set StrProg[Index] = 0
-

Else
So you can add this (with variation of attribute) into different triggers that are triggered for example when a hero casts a spell, or when a hero engages in melee, or whatever you please.
If you want attributes to only go up when the hero gains a level, you delete the last if/then/else in the trigger above, and make another trigger like this:
-
Events
-

Unit - A unit gains a level
-
Conditions
-

Triggering player is in UserPlayers Equal to True
-
Actions
-

Hero - Set Strength of Triggering unit to (Strength of Triggering unit + (StrProg[player number of triggering player] / Limit))
-

Set StrProg(player number of triggering player) = 0
-

------------Repeat this for each attribute--------------
Don't be mad or confused if some of these events/conditions/actions do not exist, or is named otherwise in the editor. Just take it theoretically.