Moin,
bei mir speichert er keine fahrzeuge mehr. Es funktionierte bis ich e_gekauft und e_zerstoert hinzugefügt habe. Was ist der fehler?
enum fracVehEnum
{
e_modelID,
e_gekauft,
e_zerstoert,
Float:e_x,
Float:e_y,
Float:e_z,
Float:e_a,
Float:carheal,
e_color1,
e_color2,
e_fracID,
e_vID
};
Hier die Publics:
public LoadFracVehicles_Data()
{
//Deklaration neuer temporärer Variablen:
new rows, id, createdVehs;
//Anzahl der gelesenen Datensätze abfragen:
rows = cache_num_rows();
//Schleife durch alle Datensätze:
for(new i=0; i<rows; i++)
{
//Fahrzeug existiert in der Datenbank, wir laden die Daten jetzt aus dem Cache.
id = cache_get_field_content_int(i, "ID");
//Um Fehler bei der Verarbeitung zu vermeiden:
if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;
//Danach die restlichen Daten laden. Unser Index (der Wert mit dem wir auf das
//Fahrzeug in der Datenbank zugreifen) ist die "ID".
fracVehicle[id][e_modelID] = cache_get_field_content_int(i, "ModelID");
fracVehicle[id][e_gekauft] = cache_get_field_content_int(i, "Gekauft");
fracVehicle[id][e_zerstoert] = cache_get_field_content_int(i, "Zerstoert");
fracVehicle[id][e_x] = cache_get_field_content_float(i, "PosX");
fracVehicle[id][e_y] = cache_get_field_content_float(i, "PosY");
fracVehicle[id][e_z] = cache_get_field_content_float(i, "PosZ");
fracVehicle[id][e_a] = cache_get_field_content_float(i, "PosA");
fracVehicle[id][carheal] = cache_get_field_content_float(i, "CarHealth");
fracVehicle[id][e_color1] = cache_get_field_content_int(i, "Color1");
fracVehicle[id][e_color2] = cache_get_field_content_int(i, "Color2");
fracVehicle[id][e_fracID] = cache_get_field_content_int(i, "FracID");
//Zur Sicherheit fragen wir hier nun ab, ob das angegebene Modell auch existiert,
//sollte das nicht der Fall sein, dann wird das Fahrzeug nicht erstellt.
if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
{
if(fracVehicle[id][e_gekauft] == 1)
{
//Nachdem das Fahrzeug geladen wurde, wird es erstellt.
fracVehicle[id][e_vID] = CreateVehicle(fracVehicle[id][e_modelID], fracVehicle[id][e_x], fracVehicle[id][e_y], fracVehicle[id][e_z], fracVehicle[id][e_a], fracVehicle[id][e_color1], fracVehicle[id][e_color2], -1);
SetVehicleHealth(fracVehicle[id][e_vID],fracVehicle[id][carheal]);
}
else
{
//Falls eine nicht existierende Model-ID angegeben wurde, geben wir eine Information aus.
printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
}
}
//Zur Sicherheit fragen wir noch ab, ob das Fahrzeug-Limit noch nicht überschritten wurde.
//Existiert ein Fahrzeug mit der höchsten ID, dann kann kein weiteres mehr erstellt werden.
if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
//Zur weiteren Sicherheit prüfen wir noch, ob die maximale Anzahl an Fraktions-Fahrzeugen erreicht ist.
createdVehs++;
if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
}
return 1;
}
public SaveAllFracVehs()
{
//Deklaration neuer temporärer Variablen:
new query[256];
//Schleife durch alle Fraktions-Fahrzeuge
for(new i=0; i<MAX_FRAC_VEHICLES; i++)
{
//Wenn das Fahrzeug existiert
if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
{
//Wir fragen die Position des Fahrzeugs ab:
GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);
//Und wir erstellen das Query:
format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zerstoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID], i);
//handle = die Connection Handle ID die vor mysql_connect steht.
mysql_tquery(handle, query);
}
}
return 1;
}
Hier das Stock
stock SaveFracVehCheck(vehicleid)
{
//Deklaration neuer temporärer Variablen:
new query[256];
//Schleife durch alle Fraktions-Fahrzeuge
for(new i=0; i<MAX_FRAC_VEHICLES; i++)
{
//Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
if(fracVehicle[i][e_vID] == vehicleid)
{
//Wir fragen die Position des Fahrzeugs ab:
GetVehiclePos(fracVehicle[i][e_vID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z]);
GetVehicleZAngle(fracVehicle[i][e_vID], fracVehicle[i][e_a]);
GetVehicleHealth(fracVehicle[i][e_vID], fracVehicle[i][carheal]);
//Und wir erstellen das Query:
format(query, sizeof(query), "UPDATE FracVehicles SET ModelID = '%d', Gekauft = '%d', Zertoert = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', PosA = '%f', CarHealth = '%f', Color1 = '%d', Color2 = '%d', FracID = '%d' WHERE ID = '%d'",
fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID], i);
//handle = die Connection Handle ID die vor mysql_connect steht.
mysql_tquery(handle, query);
return 1; //Es gibt ja keine zwei gleichen Fahrzeuge
}
}
return 0; //Fahrzeug ist kein Fraktions-Fahrzeug
}
Und hier die Befehle:
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_gekauft] = 1;
fracVehicle[i][e_zerstoert] = 0;
fracVehicle[i][e_x] = x;
fracVehicle[i][e_y] = y;
fracVehicle[i][e_z] = z;
fracVehicle[i][e_a] = a;
fracVehicle[i][carheal] = 1000;
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, Gekauft, Zerstoert, PosX, PosY, PosZ, PosA, CarHealth, Color1, Color2, FracID) VALUES ('%d', '%d', '%d, '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
i, fracVehicle[i][e_modelID], fracVehicle[i][e_gekauft], fracVehicle[i][e_zerstoert], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][carheal], 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);
SetVehicleHealth(fracVehicle[i][e_vID],fracVehicle[i][carheal]);
PutPlayerInVehicle(playerid, fracVehicle[i][e_vID], 0);
return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug gespeichert.");
}
}
return SendClientMessage(playerid, 0xFF0000FF, "Error: Limit für Fraktions-Fahrzeuge erreicht.");
}
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_gekauft] = 0;
fracVehicle[i][e_zerstoert] = 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][carheal] = 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.");
}
ocmd:parken(playerid)
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist in keinem Fahrzeug.");
new vehicleid = GetPlayerVehicleID(playerid);
if(SaveFracVehCheck(vehicleid)) return SendClientMessage(playerid, 0x00FF00FF, "Fahrzeug geparkt.");
else return SendClientMessage(playerid, 0xFF0000FF, "Dieses Fahrzeug kann nicht geparkt werden.");
}
Hoffe du kannst mir helfen, mit freundlichem Gruß,
SebMcpepp