Array of vehicle spawners not consistently assinging drivers

I recently did a vehicle based map and encountered similar problems, what I did to get around it was have functions like TryAssignDriver where we keep trying every .1 seconds to assign them and then check if they are in vehicle, if so then break and if not try again. (.inVehicle is from customPlayer class I made where I just subscribe to the player’s enter and exit vehicle event) if you race this loop against Sleep(10.0) it will fail after 10 seconds. Looks like this:

    TryAssignDriver(A : agent, V : vehicle_spawner_device, C: CustomPlayer, FC : fort_character)<suspends>: void =
        
        var i : int = 0
        race:
            loop:
                Print("try assign {i}")
                if:
                    C.inVehicle = true
                then:
                    Print("Success")
                    break
                else:
                    V.AssignDriver(A)

                set i += 1
                Sleep(0.1)
            block:
                Sleep(10.0)
                Print("Assign Failed")

As far as keeping track of player’s vehicles, I use an AssetPool script where I check out the vehicle spawner assets per player:

PlayerAssets := class<concrete>:
    var checkedOut : logic = false
    @editable Follower : creative_prop = creative_prop{}#used for fps cam blocker, lights (?), particle FX
    @editable Teleporter : creative_prop = creative_prop{} #used for teleporting spawners
    @editable Bike : vehicle_spawner_sportbike_device = vehicle_spawner_sportbike_device{}
    @editable SUV : vehicle_spawner_valet_suv_device = vehicle_spawner_valet_suv_device{}
    @editable Sedan : vehicle_spawner_sedan_device = vehicle_spawner_sedan_device{}


    

Asset_Pool := class(creative_device):
    @editable AssetPool<public> : []PlayerAssets = array{}

    CheckOut<public>(id : int): void =
        if:
            AssetPool[id].checkedOut = false
            set AssetPool[id].checkedOut = true
        then:
            Print("checked out {id}")
        else :
            Print("already checked out!")
        
        #set checkedOut = true
    Return<public>(id : int): void =
        if:
            AssetPool[id].checkedOut = true
            set AssetPool[id].checkedOut = false
        then:
            Print("returned {id}")
        else:
            Print("not checked out!")