Da müsste der Code meines Erachtens nach so aussehen:
ocmd:parken(playerid,params[])
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) SendClientMessage(playerid,-1,"{c45461}Du bist kein Fahrer eines Fahrzeugs.");
new Float:x,Float:y,Float:z,Float:r,v;
v = GetPlayerVehicleID(playerid);
GetVehiclePos(v,x,y,z); //Nicht GetPlayerPos
GetVehicleZAngle(v,r);
for(new d = 0; d < sizeof(PCar[]); d++)
{
if(PCar[playerid][d][P_VID] == v) //In der Schleife abfragen, in welchem Fahrzeug der Spieler ist. Abfrage auf seine Fahrzeuge, nicht auf die Autohausfahrzeuge
{
PCar[playerid][d][P_X] = x;
PCar[playerid][d][P_Y] = y;
PCar[playerid][d][P_Z] = z;
PCar[playerid][d][P_R] = r;
new q[256];
//Das Query muss UPDATE nutzen, nicht INSERT. Das Fahrzeug existiert in der Datenbank ja schon.
mysql_format(db, q, sizeof(q), "UPDATE personalcars SET P_X = '%f', P_Y = '%f', P_Z = '%f', P_R = '%f' WHERE id = '%d'",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R],PCar[playerid][d][P_ID]);
mysql_pquery(db,q);
SendClientMessage(playerid,-1,"{c45461}Fahrzeug erfolgreich geparkt.");
return 1; //Um die Schleife und den Befehl zu beenden, damit untenstehende Nachricht nicht gesendet wird
}
}
//Wird nur ausgegeben, wenn kein Fahrzeug des Spielers.
SendClientMessage(playerid,-1,"{c45461}Du hast keinen Autoschlüssel für dieses Fahrzeug und kannst es nicht parken.");
return 1;
}
Das ganze mit den Autohausauto-Arrays macht keinen Sinn, da das Fahrzeug ja bereits gekauft ist und nicht mehr im Autohaus steht. Daher darfst du darauf auch nicht mehr abfragen, sondern musst das Array des Spielers prüfen.
Passe das UPDATE Query bitte so an, wie deine Variablen und Spaltennamen heißen.
Im Code habe ich noch Erklärungen hinzugefügt.