I ran into an issue where my player would spawn before the OnBegin of the creative device could initialize my spawners to initialize the players.
In digging for a solution I found that you can collect an array of tasks and then .Await() for them to all finish. I tried to do this with “Sync:” but you can’t just plop a for loop in there. It still wants two async functions. So, I came to this:
InitGame()<suspends>:void=
Tasks := for( Player : GetPlayspace().GetPlayers() )
{
spawn{ InitPlayer(Player) }
}
for( Task :Tasks ):
Print("Task Waiting")
Task.Await()
Since InitGame is async all the InitPlayers will complete and then the InitGame function finishes. I call it in the OnBegin sequence and after I will InitSpawners() and check for first time spawners for players joining late.
What do you guys think? Have you ran into this?
Here’s code I used to test it to give you a complete picture.
OnBegin<override>()<suspends>:void=
TaskCheckInitGame()
TaskCheckInitGame()<suspends>:void=
Print("Starting array of spawns of TaskCheckInitPlayer(X)")
Tasks := for ( X := 0..20):
spawn{ TaskCheckInitPlayer(X) }
Print("Starting Await() LOOP TaskCheckInitPlayer(X)")
for (Task : Tasks):
Print("Task.Await()")
Task.Await()
Print("Task.Await() Complete")
Print("All TaskInitPlayers Completed. THIS SHOULD BE LAST!")
TaskCheckInitPlayer(X:int)<suspends>:void=
Sleep(10.0)
Print("TaskCheckInitPlayer Completed for X= {X}")
The Log:
[2025.06.24-18.37.05:072][439]LogVerse: : Starting array of spawns of TaskCheckInitPlayer(X)
[2025.06.24-18.37.05:072][439]LogVerse: : Starting Await() LOOP TaskCheckInitPlayer(X)
[2025.06.24-18.37.05:073][439]LogVerse: : Task.Await()
[2025.06.24-18.37.15:079][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 10
[2025.06.24-18.37.15:081][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 18
[2025.06.24-18.37.15:081][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 11
[2025.06.24-18.37.15:082][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 9
[2025.06.24-18.37.15:082][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 17
[2025.06.24-18.37.15:082][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 15
[2025.06.24-18.37.15:083][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 20
[2025.06.24-18.37.15:083][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 14
[2025.06.24-18.37.15:083][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 13
[2025.06.24-18.37.15:084][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 7
[2025.06.24-18.37.15:084][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 3
[2025.06.24-18.37.15:084][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 16
[2025.06.24-18.37.15:084][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 12
[2025.06.24-18.37.15:086][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 8
[2025.06.24-18.37.15:086][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 4
[2025.06.24-18.37.15:086][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 6
[2025.06.24-18.37.15:087][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 5
[2025.06.24-18.37.15:087][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 0
[2025.06.24-18.37.15:087][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:087][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:087][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 2
[2025.06.24-18.37.15:089][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 1
[2025.06.24-18.37.15:089][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:089][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:090][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:090][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:090][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:090][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:091][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:091][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:091][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:092][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:093][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:093][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:093][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:094][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:094][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:094][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:095][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:095][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:095][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:095][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:096][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:096][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:096][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:097][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:098][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:098][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:098][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:098][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:098][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:099][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:099][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:099][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:099][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:101][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:101][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:101][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:102][ 40]LogVerse: : TaskCheckInitPlayer Completed for X= 19
[2025.06.24-18.37.15:102][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:102][ 40]LogVerse: : Task.Await()
[2025.06.24-18.37.15:102][ 40]LogVerse: : Task.Await() Complete
[2025.06.24-18.37.15:102][ 40]LogVerse: : All TaskInitPlayers Completed. THIS SHOULD BE LAST!