Cant you just make a game controller of some kind that keep track of which turn it is to move. And use this as an overall controller for all things. So if this variable "Turn = Player 3" then nothing else will trigger for any other player. And then in all your functions, events etc where you need to pick or do something with some units or whatever, you just make sure that you always check or pass the current player "Turn" into the function, or just read it from the game controller, so this value always match the player that is currently moving.
I assume that all units/stuff in the game have a variable that indicate who they belong to. So if you make these match the "Turn" variable it should be fairly easy to always make sure that you select the correct units.
I don't think you necessarily need to use arrays, it ofc depend on the game you are making. But it should be enough to just make one variable that you use to whenever you need to check the ownership of something.
You could for instant make a small sprite called Faction, add it to a family and give it a owner variable and at the beginning of the game you spawn 4 of these for instant and set the owner as following:
Owner = Player 1
Owner = Player 2
Owner = Player 3
Owner = AI 1
And you can then add to the family the variables that you need like INT:money, BOOL:Ally with player 1, BOOL: Ally with player 2 etc and you just switch these on off. Whenever something changes.
Due to the Owner variable it should be fairly simple to select the correct faction:
Faction.Owner = Turn.variable (From the game controller)