WC3 does not use servers.
It has the host process which keeps the game in sync and handles redirecting player orders to each other (why ping can cause problems and also why if the host leaves the game sometimes ends). Each player then executes all the code as the map progresses.
What causes a split is when the game engine detects that 2 or more players at a specific point in time have 2 separate game instances running (where 1 random number came out 1 and the other 2 for example), in which case it just splits the game into as larger synced groups as possible.
What GetLocalPlayer() does is return a Player which is separate for each computer, representing the player who owns the computer running the action.
So lets say me and my brother Dr Super Evil were in a game on battlenet.
The map then executes GetLocalPlayer() at some point in a script
Dr Super Good's PC returns Player(0), which is him.
Dr Super Evil's PC returns Player(1), which is my brother.
This means you can get a local or global to have a value which is different for every human player ingame, thus allowing you to run code only for one specific player. As computer players do not run their own instance of the game, they will logically never be a player returned by GetLocalPlayer(), likewise you can never get GetLocalPlayer() returning Players(12-15) as they are only ever AI and thus can not be played by a human.