Bon après une petite revue de code voici les erreurs et incohérences que j'ai pu trouver :
1 - Dans le "/poursuite", tu utilises une variable gID non initialisée pour récupérer la position du joueur (par défaut, gID = 0)
2 - Dans le "/poursuite" toujours, tu fais un SetTimer (à 1s) puis un boucle. Dans les deux cas, tu vas faire des appels à la fonction SetPlayerCheckpoint mais tu ne peux pas prévoir laquelle des deux parties de code sera exécutée en premier (Rappel : SetTimer appelle une fonction au bout de l'interval spécifié et cette fonction s'exécute en même temps que le script car elle est appelée dans un thread distinc du thread gérant le script lui-même)
3 - Dans les fonctions OnPlayerSpawn et Originalcheckpoint, les deux checkpoints ont les mêmes coordonnées (mais c'est peut être voulu).
4 - Dans la boucle for sur les joueurs dans OnPlayerCommandText, tu ne fais pas de test pour savoir si le joueur est connecté (appel à IsPlayerConnected)
Je n'ai pas réussi à déterminer pourquoi TOUT les joueurs "groove" arrivaient dans la voiture. Je pense que la remarque 2 est une piste, je pense que les checkpoint "s'emmellent" ainsi que le flag gPlayerCheckPointStatus qui risque d'avoir une valeur indeterminée.
Le remarque 2 est très importante : pour simplifier, tu appelles EN MEME TEMPS deux bouts de code qui font des choses antagonistes.
Donc je te conseille de remettre à plat ce que tu veux faire et de recommencer.
Sinon, tu peux toujours essayer de l'expliquer clairement sur le forum.
++
Syg