stock strtok(const string[], &index) //©Jeffry
{
new result[20], length = strlen(string), i = index;
while ((i < length) && (string[i] == ' ')) i++;
strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
index++;
return result;
}
stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if ((string[i] > '9' || string[i] < '0')) return 0;
}
return 1;
}
Alles anzeigen
ocmd:fferstellen(playerid, params[])
{
//Zuerst fragen wir ab, ob wir noch Fahrzeuge erstellen können
if(GetVehicleModel(MAX_VEHICLES-1) != 0) return SendClientMessage(playerid, 0xFF0000FF, "Es können keine weiteren Fahrzeuge erstellt werden, Limit (MAX_VEHICLES) erreicht.");
//Wir deklarieren die benötigten temporären Variablen.
new tmp[20], idx, model, fID, color1 = -1, color2 = -1;
//Anschließend teilen wir mit strtok die eingegebenen Paramater auf und wandeln sie in eine Zahl um.
//Falls etwas falsches eingegeben wurde, geben wir eine entsprechende Meldung zurück.
tmp = strtok(params, idx);
if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
model = strval(tmp);
//Eine solche Abfrage kann man auch für nachfolgende FraktionsID (fID) machen, falls gewünscht.
if(model < 400 || model > 611) return SendClientMessage(playerid, 0xFF0000FF, "Error: Model ID existiert nicht.");
tmp = strtok(params, idx);
if(!strlen(tmp) || !IsNumeric(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Verwendung: /fferstellen [Model] [FraktionsID] [opt:Farbe1] [opt:Farbe2]");
fID = strval(tmp);
tmp = strtok(params, idx);
if(strlen(tmp) && IsNumeric(tmp)) color1 = strval(tmp);
tmp = strtok(params, idx);
if(strlen(tmp) && IsNumeric(tmp)) color2 = strval(tmp);
//Sind alle Parameter korrekt übergeben worden, dann suchen wir uns einen freien Index in den wir das Fraktions-Fahrzeug speichern können.
for(new i=0; i<MAX_FRAC_VEHICLES; i++)
{
//Frei:
if(fracVehicle[i][e_vID] == 0)
{
//Daten werden übergeben
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
fracVehicle[i][e_modelID] = model;
fracVehicle[i][e_x] = x;
fracVehicle[i][e_y] = y;
fracVehicle[i][e_z] = z;
fracVehicle[i][e_a] = a;
fracVehicle[i][e_color1] = color1;
fracVehicle[i][e_color2] = color2;
fracVehicle[i][e_fracID] = fID;
//und anschließend in die Datenbank geschrieben.
new query[256];
format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
i, fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID]);
mysql_tquery(handle, query);
//Zuletzt wird dann noch das Fahrzeug erstellt und der Spieler in das Fahrzeug gesetzt.
fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
}
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
}
Alles anzeigen
ocmd:ffloeschen(playerid, params[])
{
//Wir deklarieren die benötigte temporäre Variable.
new vid;
//Wenn der Spieler keine Vehicle-ID eingibt wird die gelöscht, in der sich der Spieler befindet,
//ansonsten die eingegebene ID.
if(!IsNumeric(params) || !strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nutze: /ffloeschen [Vehicle ID]");
vid = strval(params);
if(vid <= 0) return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
for(new i=0; i<MAX_FRAC_VEHICLES; i++)
{
//Eingegebene ID und die des Fraktions-Fahrzeugs stimmen überein.
if(fracVehicle[i][e_vID] == vid)
{
//Daten werden entfernt
fracVehicle[i][e_modelID] = 0;
fracVehicle[i][e_x] = 0.0;
fracVehicle[i][e_y] = 0.0;
fracVehicle[i][e_z] = 0.0;
fracVehicle[i][e_a] = 0.0;
fracVehicle[i][e_color1] = 0;
fracVehicle[i][e_color2] = 0;
fracVehicle[i][e_fracID] = -1;
//und anschließend in der Datenbank gelöscht.
new query[128];
format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = '%d'", i);
mysql_tquery(handle, query);
DestroyVehicle(fracVehicle[i][e_vID]);
fracVehicle[i][e_vID] = 0;
return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gelöscht.");
}
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Vehicle-ID ist kein Fraktions-Fahrzeug.");
}
Alles anzeigen
Und wenn wir schon dabei sind machen wir auch gleich noch den /parken Befehl komplett: