One player On Team[0] Avoiding Teleport/Respawn (Help Please! I'm New!)

I recently made my first PvP game in UEFN and ran into a common issue: split evenly doesn’t randomize teams, so players are on the same team every time they play, or depending on when they join in the game process. I made script that shuffles the players and adds them to the two teams alternating everyother. Then I ran into a new issue, being that the system still assigns teams automatically, so they spawn at the spawners automatically at the start of each round, and then my randomizer changes their teams, leaving them at the wrong spawn. So I built a loop to teleport/respawn them at the appropriate spawners. Which leads me to my current issue: one test player from team[0] is not being teleported. I attached some of my code, except the randomizer, trying not to post my entire script lmao. If I can get any advice on what could be going wrong, I would really appreciate it. I’m at my wits’ end! Also, if there is a more common solution to randomizing the teams outside of verse, please feel free to advise! Thank you for your time!

TLDR- Randomizing 2 teams of 4 players each, one player from team[0] won’t teleport to the appropriate location code attached below need help with the bug or a better solution for randomizing teams each round. Thank you!

@editable
Team1Spawners : player_spawner_device = array{} (4spawners inside each array)
@editable
Team2Spawners : player_spawner_device = array{}

var Team1SpawnIndex : int = 0
var Team2SpawnIndex : int = 0

OnBegin<override>()<suspends>:void =

    var Team1Players : []agent = array{}
    var Team2Players : []agent = array{}

    var AssignToTeam1 : logic = true

    for (Player : Shuffled):
        var added : logic = false
        if (AssignToTeam1?):
            if (TeamCollection.AddToTeam[Player, Teams[0]]):
                set Team1Players += array{Player}
                set added = true
        else:
            if (TeamCollection.AddToTeam[Player, Teams[1]]):
                set Team2Players += array{Player}
                set added = true
        if(added?):

            if (AssignToTeam1?):
                set AssignToTeam1 = false
            else:
                set AssignToTeam1 = true
        else:
            Print(MakeName(Player), ?Duration := 5.0)

    Sleep(2.0)

    for (Player : GetPlayspace().GetParticipants()):
        if (Team1Players.Find[Player]):
            if (idx : int = Mod[Team1SpawnIndex, Team1Spawners.Length]):
                RespawnPlayerAtTeamSpawner(Player, Team1Spawners, idx)
                set Team1SpawnIndex = Team1SpawnIndex + 1
        else:
            if (Team2Players.Find[Player]):
                if (idx : int = Mod[Team2SpawnIndex, Team2Spawners.Length]):
                    RespawnPlayerAtTeamSpawner(Player, Team2Spawners, idx)
                    set Team2SpawnIndex = Team2SpawnIndex + 1
            else:
                if(idx : int = Mod[Team1SpawnIndex, Team1Spawners.Length]):
                    RespawnPlayerAtTeamSpawner(Player, Team1Spawners, idx)
                    set Team1SpawnIndex = Team1SpawnIndex + 1

RespawnPlayerAtTeamSpawner(Player: agent, Spawners: player_spawner_device, Index: int):void =
var i:int = 0
loop:
if (i >= 30):
break
if (Player.GetFortCharacter):
break
Sleep(0.1)
set i += 1
Sleep(0.3)
if (Spawner := Spawners[Index]):
Transform := Spawner.GetTransform()
Player.Respawn(Transform.Translation, Transform.Rotation)

MakeName(A:agent):message = “{A}”

RespawnPlayerAtTeamSpawner(Player: agent, here Spawners: player_spawner_device, Index: int):void =
var i:int = 0
loop:
if (i >= 30):
break
if (Player.GetFortCharacter):
break
Sleep(0.1)
set i += 1
Sleep(0.3)
if (Spawner := Spawners[Index]):
Transform := Spawner.GetTransform()
Player.Respawn(Transform.Translation, Transform.Rotation)

MakeName(A:agent):message = “{A}” Try adding a Player.IsActive() check or lengthening Sleep before teleporting.

1 Like