Moin,
Soo, nun möchte ich einigen da Draußen was bei bringen, es seiden die wissen schon, wie sowas geht.
In diesem Tut., lernt man, wie man Checkpoints einfach ablesen kann von einer Tabelle.
Somit könnte man locker z.B den Job: Müllabfuhr scripten.
Und, wie das geht, sehr ihr hier:
// Also, dann fangen wir mal an!
// Wir erstellen eine Verriable, die überprüfen soll, ob man jetzt den Job macht oder nicht.
new MachtArbeit[MAX_PLAYERS]; // Ganz nach oben
// Anschließend erstellen wir eine Veriable, welche aufzählt bei welchem Checkpoint wird sind.
new CheckpointStatus[MAX_PLAYERS]; // Checkpoint Status, kommt auch nach ganz oben!
///////////////////////////////
// So, jettt müssen wir definieren, wie viel Maximum Checkpoints es gibt:
#define MAX_RACE_POINTS 17 // Wird gezählt von Null. Also 0, 1, 2, 3, 4. // Kommt ganz nach oben
new Float:racecheckpoints[MAX_RACE_POINTS][3] = { // Die Defineirung von : racecheckpoints. Die [3] Bedeutet: X, Y, Z. // Das kommt ganz noach oben.
{1656.829956, -1166.398437, 23.617559}, // 1
{1707.867675, -1206.746826, 20.976793}, // 2
{1783.874511, -1286.020629, 13.275278}, // 3
{1859.596069, -1219.198364, 18.736469}, //
{1892.303710, -1127.870849, 24.013429}, // 5
{1907.985717, -1127.944580, 24.407924},
{1921.429077, -1127.915771, 24.743091},
{1957.571533, -1128.151611, 25.638833},
{1997.838745, -1128.968505, 25.293878},
{2029.990234, -1128.175903, 24.385658},
{2077.569824, -1122.709838, 23.775880},
{2079.989990, -1148.917846, 23.618659},
{2077.754882, -1167.527221, 23.524724},
{2077.924560, -1184.147338, 23.527599},
{2078.348388, -1203.702514, 23.650722},
{2089.319580, -1228.770019, 23.709350},
{1728.458129, -1055.661743, 23.505249} // 17. Bedeutet Checkpoint Status: 17. Die Maximal Anzahl der Checkpoints beträgt also: 17.
};
// So nun müssen wir ja Irgendwie die "Mission" starten, wo man Race Checkpoints abfahren muss.
// Am besten mit einem COmmand ( CMD ).
// Unter OnPlayerCommandText
public OnPlayerCommandText(playerid, cmdtext[]) {
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd,"/mission", true) == 0) {
if(IsPlayerInAnyVehicle(playerid)){ // Der CMD funkt nur dann, wenn man in einem Fahrzeug drinne sitzt.
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 408) // Der CMD funkt. nur dann, wenn man in einem Fahrzug drinne sitzt und es ein bestimmes Model ist.
{
MachtArbeit[playerid] = 1; // Bedeutet, dass die Arbeit ab jetzt los geht. 1 = Arbeit geht Los.
SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[0][0],racecheckpoints[0][1],racecheckpoints[0][2],racecheckpoints[1][0],racecheckpoints[1][1],racecheckpoints[1][2],3.0);
// SetPlayerRaceCheckpoint(playerid, CheckPointtype, X, Y, Z, Nächster X, Nächster Y, Nächster, Z);
}
}
return 1;
}
return 0;
}
Die richtige public nicht vergessen. :
public OnPlayerEnterRaceCheckpoint(playerid)
{
if (IsPlayerInAnyVehicle(playerid)) // Bedeutet, dass die Fukntion nur dann funk. ,wennn man in einem fahrzeug sitzt.
{
if (GetVehicleModel(GetPlayerVehicleID(playerid)) == 408) // Model ID 408, bedeutet, dass das ganze,was unten geschicet nur dann geht, wenn man im Model 408 drinne sitzt.
{
if(MachtArbeit[playerid] == 1) // Dies passiert nur dann, wenn man /mission geschieben hat.
{
CheckpointStatus[playerid]++; // Hier werden die Checkpoints aufgezählt.
new letzerpunkt = MAX_RACE_POINTS; // Wichtig. Hier wird der letze Checkpoint definiert.
if(CheckpointStatus[playerid] < letzerpunkt) // Ist der checkpoint Status kleiner als die maximale Anzahl der Checkpoints, bedeutet dieser Code.
{
DisablePlayerRaceCheckpoint(playerid); // Beendet den Checkpoint
SetPlayerRaceCheckpoint(playerid,0,racecheckpoints[CheckpointStatus[playerid]][0],racecheckpoints[CheckpointStatus[playerid]][1],racecheckpoints[CheckpointStatus[playerid]][2],racecheckpoints[CheckpointStatus[playerid]+1][0],racecheckpoints[CheckpointStatus[playerid]+1][1],racecheckpoints[CheckpointStatus[playerid]+1][2],3.0);
}
// Bedeutung: SetPlayerRaceCheckpoint(playerid, Checkpointtype, X[CheckpointSTatus], Y[CheckpointStatus], Z[CheckpointStatus], NächsterX[Nächster CheckpointSTatus],NächsterY[Nächster CheckpointSTatus],NächsterZ[Nächster CheckpointSTatus], size);
if(CheckpointStatus[playerid] == letzerpunkt){ // Wenn der Checkpoint STatus die maximale Anzahl erreich hat. Passiert folgendes:
MachtArbeit[playerid]= 0; // Hier wird die Mission beendet.
CheckpointStatus[playerid] = 0; // Hier wird definiert, dass, der Checkpoint Status bei Null liegt.
DisablePlayerRaceCheckpoint(playerid); // Damit wird der Race Checkpoint beendet.
}
}
}
}
return 1;
}
So, das wars. Ich hoffe, dass ich euch helfen konnte. Ahja, Tut natürlich ganz von mir. Also ©. Bitte, wenn ihr es weiter geben wollt oder woanders zum angucken freigibt.
Dann bitte schreiben, dass es von mir ist!
Ansonten viel Spaß damit.
MfG, The_Godboy