For 1 race, this should do the job. For more races, you'll have to write your own racing system or use an existed one.
PHP код:
// global:
static
gPlayer_RaceCP[MAX_PLAYERS char]; // I doubt will have more than 256 checkpoints but if that's the case, remove char and replace {} with []
static const
Float: gRace_CPs[][] =
{ // add coordinates here
{x1, y1, z1},
{x2, y2, z2},
...
{xn, yn, zn}
};
// OnPlayerConnect/OnPlayerDisconnect/Leaving race etc, reset:
gPlayer_RaceCP{playerid} = 0;
// when a player joins the race:
SetPlayerRaceCheckpoint(playerid, 0, gRace_CPs[0][0], gRace_CPs[0][1], gRace_CPs[0][2], gRace_CPs[1][0], gRace_CPs[1][1], gRace_CPs[1][2], 9.0);
public OnPlayerEnterRaceCheckpoint(playerid)
{
switch (sizeof gRace_CPs - gPlayer_RaceCP{playerid})
{
case 1: // last checkpoint (finish line)
{
DisablePlayerRaceCheckpoint(playerid);
gPlayer_RaceCP{playerid} = 0;
// give money
}
case 2: // second to last
{
new
cp = ++gPlayer_RaceCP{playerid};
SetPlayerRaceCheckpoint(playerid, 1, gRace_CPs[cp][0], gRace_CPs[cp][1], gRace_CPs[cp][2], 0.0, 0.0, 0.0, 9.0);
}
default:
{
new
cp = ++gPlayer_RaceCP{playerid};
SetPlayerRaceCheckpoint(playerid, 0, gRace_CPs[cp][0], gRace_CPs[cp][1], gRace_CPs[cp][2], gRace_CPs[cp + 1][0], gRace_CPs[cp + 1][1], gRace_CPs[cp + 1][2], 9.0);
}
}
return 1;
}