Keeping track of what waypoint the car is on is a way to give a very rough estimate of the rank. You can get a finer rank by also considering the perpendicular distance to the next waypoint.
So the event needed would basically look like this:
For each car ordered by waypoint*1000-perpDistToWaypoint decending
--- loopindex+1 is the rank.
If the distance between checkpoints can be more than 1000 change it to some higher value.
Ex.
https://www.dropbox.com/s/y3xhf4wp2t6kh ... .capx?dl=1
/examples26/laps.capx
The perpendicular distance is the dot product between the waypoint line and the vector from the waypoint to the player. It can actually give us negative distances so we'll put it in a abs() so it's always positive.
Player = {x, y}
waypoint_to_player = {x-way.x, y-way.y}
waypoint_line = {cos(waypoint.angle), sin(waypoint.angle)}
perp_dist =abs( waypoint_to_player dot waypoint_line )=abs( {x-way.x, y-way.y} dot {cos(waypoint.angle), sin(waypoint.angle)} )
= abs((x-way.x)*cos(waypoint.angle) + (y-way.y)*sin(waypoint.angle))
vector