Haha for this one I suggest a method I developed in my KNP days: place invisible Active Objects as checkpoints around the track and then have a system something like:
Value A of the racers is their current checkpoint
Value A of the checkpoints is their order in checkpoint sequence, ie the start/finish is 0, the next one is 1, the next is 2, etc
Value B of the racers is their current lap
Value C of the racers is their position they finish in
Create a counter called for example "FinishedPos"
Add your checkpoints to a group, say for example the group "Doors"
Then:
1.
Racer collides with groups.Doors
+ Value A of racer < Number of Objects(groups.Doors) - 1
+ Value A of groups.Doors = value A of racer + 1:
♦ Add 1 to value A of racer
2.
Racer collides with groups.Doors
+ Value A of racer = Number of Objects(groups.Doors) - 1
+ Value A of checkpoint = 0:
♦ Set value A of racer to 0
♦ Add 1 to value B of racer
3.
Value B of racer >= 5:
♦ Add 1 to FinishedPos
♦ Set value C of racer to value of FinishedPos
♦ <do other race finish-y things for the racer>
4.
Value of Finished Pos >= Number of objects(racer):
♦ <all racers are finished - do race finish-y things >
-[♦]-[♦]-[♦]-[♦]-[♦]-[♦]-
Then for you AI players, well I'll let you do that, that's the fun bit