This trigger is the exact one i use in my map, so it should work perfectly. You will need a basic understanding of JASS to make sense of what's happening.
Note: you will need a global multiboard variable array named Multiboard for this trigger to work.
Events
Time- Elapsed game time is 0.50 seconds [You can use any event you want]
Conditions
None [You can have conditions, although I can't see why you would want any]
Actions
For each (Integer A) from 0 to 5, do (Actions) [I had 6 players in my map, if you have 12 players set it to: 0 to 11]
Loop - Actions
Multiboard - Create a multiboard with 3 columns and 12 rows, titled Combat Proficiencies [of course, you can change what your MB looks like]
Set Multiboard[(Integer A)] = (Last created multiboard)
[endloop Actions]
Player Group - Pick every player in All Players and do (Actions)
Loop - Actions
Custom script: if ( GetLocalPlayer() == GetEnumPlayer() then
Custom script: call MultiboardDisplay(udg_Multiboard[GetPlayerId(GetEnumPlayer())], true)
Custom script: endif
[endloop Actions]
Note: to manipulate the multiboards later, remember that Player(0) - Red can see udg_Multiboard[0], Player(1) - Blue can see udg_Multiboard[1] and so on...
Basically, this trigger creates an X number of multiboards (one for each player) and stores each multibaord into a global variable array.
Then, a series of complicated and hard to explain things happen that all result in each player only able to see the multiboard that was meant for them, and none of the other ones.