Woop, it works good.
Only restart server when there is no new highscores (silly coding error, soon to be resolved).
I did this to compete with Andre's coding improvements with the forum
HighScore( racename ) : Used once to get highscore
SaveTrackHighScoreList( ) : Only used if highscores are new
ReadTrackHighScoreList( display ) : Only formats a string to display
LoadHighScoreForRace( ) : Used once to get highscores
CheckAgainstHighScore(playerid, time) : Checks a players finish time, resorts the array
The above is so quick and efficient. The below is the old system :
HighScore(Track[]) : Called once, but never stored
ReadTrackHighScoreList(track[24], display, playerid, all) : Called for /top5 (file opened, read, stringed)
CheckAgainstHighScore(playerid, time) : Checks a players finish time (loads, checks, formats, saves)
Was a ugly and slow method, with 50 players we needed a quicker solution.