Hast du im Enum P_X, P_Y, P_Z, P_R auch mit Float: definiert?
und da du id nicht verwendest, kannst du sie auch löschen oder auskommentieren
Hast du im Enum P_X, P_Y, P_Z, P_R auch mit Float: definiert?
und da du id nicht verwendest, kannst du sie auch löschen oder auskommentieren
Danke, hab es vergessen muss erst mal wieder reinkommen auch wenn ich nicht alles weiß aber das wusste ich
Habe versucht es umzusetzen irgendwie verstehe ich das nicht ganz mit der Schleife was macht sie?
Und muss ich die Schleife immer benutzten wenn ich mit den Enum arbeite so wie hier z.B
Dazu habe ich es so gemacht das die Daten erst mal abgespeichert werden und dann erst das Auto gespawnt wird damit es nicht zu Fehlern kommt das dieses Fahrzeug dann doch an
einer anderen Stelle spawnt und andere Farben hat als nach dem Kauf (random).
Woher weiß ich jetzt das dieses Fahrzeug "X" dem Spieler "Y" gehört und es auf seinem Namen abliest
Ist es diese "ID" in Zeile 2628, weil die ist ja Zuviel ModelID ist ja = MID.
if(dialogid == DIALOG_AUTOHAUS5) //ZULASSUNG JA LASTSCHRIFT
{
if(response)
{
new vid = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(Autohausauto1); i++)
{
if(IsPlayerInVehicle(playerid, Autohausauto1[i]))
{
if(vid == Autohausauto1[i])
{
if(pInfo[playerid][pBankgeld] < Autohausauto1_preis[i])
{
RemovePlayerFromVehicle(playerid);
new string[100];
format(string, sizeof(string), "{c45461}Du brauchst $%s auf deinem Konto damit du dir den %s kaufen kannst.",sMoney(Autohausauto1_preis[i]),Autohausauto1_name[i]);
SendClientMessage(playerid,-1,string);
}
else
{
RemovePlayerFromVehicle(playerid);
ShowPlayerDialog(playerid, DIALOG_AUTOHAUS10, DIALOG_STYLE_MSGBOX, "{F39C12}Los Santos Super-Sport Autohaus", "\t{FFFFFF}«{F39C12} Zahlung erfolgreich {FFFFFF}»\nDein Fahrzeug steht auf dem Parkplatz", "Verstanden", "");
new SP = random(sizeof(SAHSpawn));
new FB = random(127);
new rows;
cache_get_row_count(rows);
for(new d = 0; d < rows; d++)
{
// PCar[playerid][d][P_ID] = ;
PCar[playerid][d][P_X] = SAHSpawn[SP][0];
PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
PCar[playerid][d][P_R] = SAHSpawn[SP][3];
PCar[playerid][d][P_C1] = FB;
PCar[playerid][d][P_C2] = FB;
PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
}
}
}
}
}
}
else
{
RemovePlayerFromVehicle(playerid);
}
return 1;
}
Alles anzeigen
Woher weiß ich jetzt das dieses Fahrzeug "X" dem Spieler "Y" gehört und es auf seinem Namen abliest
Brauchst du nicht. Da das Array auf "playerid" läuft, ist es eindeutig, dass es dem Spieler mit der playerid gehört.
Ist es diese "ID" in Zeile 2628
3628 nehme ich an. Die P_ID ist die "id" aus der Datenbank, meiner Annahme nach die id mit AUTO_INCREMENT in der Tabelle.
Zeile 3624 bis 3637 musst du zu dem hier anpassen:
for(new d = 0; d < sizeof(PCar[]); d++)
{
//Prüfe, ob Fahrzeug existiert. Wenn nicht, nutze den Slot und lege das Fahrzeug an.
if(PCar[playerid][d][P_MID] == 0)
{
PCar[playerid][d][P_X] = SAHSpawn[SP][0];
PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
PCar[playerid][d][P_R] = SAHSpawn[SP][3];
PCar[playerid][d][P_C1] = FB;
PCar[playerid][d][P_C2] = FB;
PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
//VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst
PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
//Hier dann noch ein INSERT Query für die Datenbank, damit das Auto angelegt wird.
//...
//hier einbauen!
//...
break;
}
}
Das INSERT Query schickst du dann mit mysql_pquery ab, und im zugehörigen Callback schreibst du PCar[playerid][d][P_ID] = cache_insert_id(); rein.
Über mysql_pquery gibst du mit "dd" das "d" und "playerid" mit.
Super, danke!
Zitat//VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst
MID ist die VID (ModelID) falls du das meinst also da speicher ich das Vehicle also 500 z.B
?//VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst?
PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] ,
Ist damit die VehicleID gemeint? Wenn nein was denn?
Und wie werde ich dann P_VID nutzen?
MID ist die VID (ModelID) falls du das meinst also da speicher ich das Vehicle also 500 z.B
Nein, ich meine die vehicleid.
Ist damit die VehicleID gemeint? Wenn nein was denn?
Ja.
Und wie werde ich dann P_VID nutzen?
Die brauchst du, um herauszufinden, ob ein Spieler in einem seiner Fahrzeuge sitzt.
OnPlayerEnterVehicle z.B.:
new bool:allowed;
for(new d = 0; d < sizeof(PCar[]); d++)
{
if(PCar[playerid][d][P_VID] == vehicleid)
{
allowed = true;
break;
}
}
if(!allowed)
{
TogglePlayerControllable(false);
TogglePlayerControllable(true);
SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug gehört dir nicht.");
return 1;
}
Ich meine das reicht so nicht, kenne das so mit dem INSERT.
if(dialogid == DIALOG_AUTOHAUS5) //ZULASSUNG JA LASTSCHRIFT
{
if(response)
{
new vid = GetPlayerVehicleID(playerid);
for(new i = 0; i < sizeof(Autohausauto1); i++)
{
if(IsPlayerInVehicle(playerid, Autohausauto1[i]))
{
if(vid == Autohausauto1[i])
{
if(pInfo[playerid][pBankgeld] < Autohausauto1_preis[i])
{
RemovePlayerFromVehicle(playerid);
new string[100];
format(string, sizeof(string), "{c45461}Du brauchst $%s auf deinem Konto damit du dir den %s kaufen kannst.",sMoney(Autohausauto1_preis[i]),Autohausauto1_name[i]);
SendClientMessage(playerid,-1,string);
}
else
{
RemovePlayerFromVehicle(playerid);
ShowPlayerDialog(playerid, DIALOG_AUTOHAUS10, DIALOG_STYLE_MSGBOX, "{F39C12}Los Santos Super-Sport Autohaus", "\t{FFFFFF}«{F39C12} Zahlung erfolgreich {FFFFFF}»\nDein Fahrzeug steht auf dem Parkplatz", "Verstanden", "");
new SP = random(sizeof(SAHSpawn));
new FB = random(127);
for(new d = 0; d < sizeof(PCar[]); d++)
{
//Prüfe, ob Fahrzeug existiert. Wenn nicht, nutze den Slot und lege das Fahrzeug an.
if(PCar[playerid][d][P_MID] == 0)
{
PCar[playerid][d][P_X] = SAHSpawn[SP][0];
PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
PCar[playerid][d][P_R] = SAHSpawn[SP][3];
PCar[playerid][d][P_C1] = FB;
PCar[playerid][d][P_C2] = FB;
PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
//VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst?
PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
new query[256]
mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y) VALUES ('%e','%e')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y]);
break;
}
}
}
}
}
}
}
else
{
RemovePlayerFromVehicle(playerid);
}
return 1;
}
Alles anzeigen
Die Warnung kommt von der falschen Einrückung des Codes.
Nach dem mysql_format musst du das Query auch absenden, mit mysql_pquery. Gleich wie überall sonst auch.
Im mysql_format darfst du für die floats nicht %e nutzen, das geht nur für Strings. Nutze %f.
mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y) VALUES ('%f','%f')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y]);
mysql_pquery(db,query);
break;
So kann ich das doch machen, für die nicht "Float:" Werte nehme ich dann weiterhin '%d'
Und um nach dem Disconnect alles wieder zu speichern benutzte ich anstatt 'INSERT' - 'UPDATE' richtig?
Sorry das mir solche peinlichen Fehler unterlaufen.
Das ist richtig.
Für normale Integer, also ohne Komma, nutzt du einfach %d oder %i. (Ist egal welches)
Und beim speichern benutzt du UPDATE um eine bestehende Zeile zu bearbeiten.
Bevor ich mich an LoadPlayerCars ran mache habe ich wieder eine Frage
So sieht es ja bei der user-Tabelle aus, wie mach ich das, dass er die Sachen von der Tabelle; Personalcars rausnimmt,
nach dem Login kann ich ganz normal dann LoadPlayerCars anwenden aber das hier verstehe ich nicht weil LoadPlayerCars reicht ja nicht oder?
mysql_pquery(db,query);
Du musst hier noch ein Callback aufrufen und im Callback cache_insert_id() aufrufen.
Sonst weißt du ja nicht, welche ID vergeben wurde, für das Fahrzeug. Diese benötigst du beim Speichern.
PCar[playerid][d][P_ID] = cache_insert_id();
So sieht es ja bei der user-Tabelle aus, wie mach ich das, dass er die Sachen von der Tabelle; Personalcars rausnimmt,
Kommt drauf an wie deine Tabelle aussieht, in der die Fahrzeuge gespeichert sind.
Alles klar, verstanden, zumindest den ersten Teil.
Richtig das die cache_insert_id(); die ID speichert damit der richtige Spieler auch die richtigen Autos bekommt?
Die Tabelle sieht so aus dazu muss ich sagen das P_ID Auto Increment an hat und Primär ist. Wenn was falsch ist korrigiert mich bitte, ich weiß das ich normale inticher genommen habe und keine tiny oder ähnliche. Dazu habe ich auch nicht an die Länge gedacht, hab sie sehr sehr grob eingestellt.
So die Sache die ich ja nicht verstehe wie ich das jetzt so Lade also 'SELECT' Dies habe ich nicht so verstanden, sorry meine Kenntnisse sind schwach was das jetzt angeht mach ich ja nicht oft
Richtig das die cache_insert_id(); die ID speichert damit der richtige Spieler auch die richtigen Autos bekommt?
Das ist, damit du die P_ID aus der Tabelle, die der neue Datensatz hat, zurück bekommst, damit du das Fahrzeug später sauber speichern kannst.
Sonst weißt du ja nicht, wo du es hin speichern sollst.
ich weiß das ich normale inticher genommen habe und keine tiny oder ähnliche. Dazu habe ich auch nicht an die Länge gedacht, hab sie sehr sehr grob eingestellt.
Spielt kaum eine Rolle bei der Datenmenge.
Die Tabelle sieht so aus
Dort fehlt noch die Zuordnung zu dem das Fahrzeug gehört.
Wenn du eine "user" Tabelle hast, dann bietet es sich an, dass du die ID des Spielers in dieser Fahrzeug-Tabelle als "Besitzer-ID" einträgst.
Dann kannst du im Code beim Erstellen sagen:
PCar[playerid][d][P_BID] = PlayerInfo[playerid][db_id; //db_id eben so, wie die ID im PlayerInfo-enum heißt
if(PCar[playerid][d][P_MID] == 0)
{
PCar[playerid][d][P_ID] = cache_insert_id();
PCar[playerid][d][P_X] = SAHSpawn[SP][0];
PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
PCar[playerid][d][P_R] = SAHSpawn[SP][3];
PCar[playerid][d][P_C1] = FB;
PCar[playerid][d][P_C2] = FB;
PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
PCar[playerid][d][P_dbID] = pInfo[playerid][db_id];
PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
new query[256];
mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_ID, P_VID, P_dbID) VALUES ('%f','%f','%f','%f','%d','%d','%d','%d','%d','%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_C1],PCar[playerid][d][P_C2],PCar[playerid][d][P_MID],PCar[playerid][d][P_ID],PCar[playerid][d][P_dbID],PCar[playerid][d][P_VID],PCar[playerid][d][P_dbID]);
mysql_pquery(db,query);
break;
}
Alles anzeigen
Welcher Variable muss jetzt Auto Increatment an haben und primär sein in der Tabelle?
ocmd:parken(playerid,params[])
{
new Float:x,Float:y,Float:z,Float:r;
GetPlayerPos(playerid,x,y,z,r);
for(new d = 0; d < sizeof(PCar[]); d++)
{
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 query[256];
mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R) VALUES ('%f','%f','%f','%f')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R]);
mysql_pquery(db,query);
break;
}
return 1;
}
Alles anzeigen
Was mache ich hiermit habe mitbekommen ich kriege die "r" nicht raus warum das ?
Welcher Variable muss jetzt Auto Increatment an haben und primär sein in der Tabelle?
Die Variable p_dbID.
Was mache ich hiermit habe mitbekommen ich kriege die "r" nicht raus warum das ?
Weil GetPlayerPos nur die X, Y und Z Position speichert, nicht die Richtung, in die der Spieler guckt.
Um die Richtung herauszufinden musst du GetPlayerFacingAngle benutzen.
Will ja die richtung wie das Fahrzeug steht, gibt es etwas wie getvehiclepos?
Du kannst das mit GetVehicleZAngle machen.
Und dann setzen mit SetVehicleZAngle.
ocmd:parken(playerid,params[])
{
for(new i = 0; i < sizeof(Autohausauto1); i++)
{
if(IsPlayerInVehicle(playerid, Autohausauto1[i])) continue;
new Float:x,Float:y,Float:z,Float:r,v;
v = GetPlayerVehicleID(playerid);
if(v == Autohausauto1[i])
{
GetPlayerPos(playerid,x,y,z);
GetVehicleZAngle(v,r);
for(new d = 0; d < sizeof(PCar[]); d++)
{
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];
mysql_format(db, q, sizeof(q), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R) VALUES ('%f','%f','%f','%f')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R]);
mysql_pquery(db,q);
//break;
}
}
else
{
SendClientMessage(playerid,-1,"{c45461}Du hast keinen Autoschlüssel für dieses Fahrzeug und kannst es nicht parken.");
}
}
}
return 1;
}
Alles anzeigen
Muss ich nach dem mysql_pquery(db,q) break; benutzen?
Dazu eine schwierigere Frage:
Ich will jetzt noch das man 4 Fahrzeuge haben kann, aber ich frage ja immer ab ob er im ersten drin ist, wie kann ich das machen ob er im primären Fahrzeug drin ist also dieses Fahrzeug soll man auch über das Menü
auswählen können um es abzuschließen usw.
Muss ich nach dem mysql_pquery(db,q) break; benutzen?
Ja, aber das passt so trotzdem noch nicht.
Was genau soll der Befehl denn machen, und wann soll er benutzt werden?
Der Befehl bewirkt das man das Fahrzeug wo anders spawnen lässt also parken halt.
Und das Fahrzeug wird dann auch in der Datenbank gespeichert mit dem Tuning (Farbe etc.) würde ein anderer Spieler das Fahrzeug tunen sagen wir aus Provokation
z.B Pink oder so müsste ein Spieler der den Schlüssel hat oder der Besitzer das Fahrzeug erst einmal parken,
Also sozusagen benutzte ich /parken wird das Tuning(Farbe etc:) gespeichert und das Fahrzeug spawnt an der Stelle wieder wo ich es geparkt habe, man parkt das Fahrzeug
nur wenn man es woanders wieder stehen haben will nach dem Relog oder nachdem das Fahrzeug zerstört wird.
Eigentlich klappt das so oder nicht?
Nur was ist ja jetzt wenn ich Autohausauto1 und Autohausauto1_2 habe
also will es irgendwie abfragen nach dem ausgewählten Fahrzeug.