Wenn du dein Spraytag erstellst, läuft die Schleife einfach komplett durch. Es werden also MAX_Grafitti-1 erstellt. Du musst erstens auch Abfragen, ob in dem verwendeten index eventuell sogar schon ein Element vorhanden ist, ansonsten überschreibst du das Grafitti einfach und du erhälst auf dein altes Grafitti keinen Zugriff mehr auf.
public Erstellengraff(playerid)
{
new v = random(200+200);
POBJECT[playerid] += v;
DestroyDynamicObject(POBJECT[playerid]); //Das Alte Object Löschen!
POBJECT[playerid] = CreateDynamicObject(19482, Position[playerid][0], Position[playerid][1], Position[playerid][2], Position[playerid][3], Position[playerid][4], Position[playerid][5], GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), -1, 200);//Erstellung des Objects
SetDynamicObjectMaterialText(POBJECT[playerid], 0, POBJECTN[playerid], OBJECT_MATERIAL_SIZE_256x256, "Diploma", 25, 0, 0xFFFFFFFF, 0, 1);//Einstellung des Textes
GameTextForPlayer(playerid, "~w~Spruehen ]", 5000, 5);
DeletePVar(playerid, "GraffitiErstellung"); //PVar Löschen
SprayMunition[playerid] = 0;
Spruhen ++;
for(new i=1;i<MAX_GRAFFITI;i++)
{
if(Graffiti[i][gCreated])continue; //Ist dieser index bereits belegt, beendet die Schleife den Durchlauf hier und zählt einfach weiter
new query[128];
Graffiti[i][gCreated] = 1;
format(query, sizeof(query), "INSERT INTO `server_graffitis` (GraffiID) VALUES ('%d')", i); //hier nutzt du den index für die Grafitti ID
mysql_function_query(MySqlConnection, query, false, "", "");
format(Graffiti[i][gGraffiName], 16, "%s", POBJECTN[playerid]);
format(Graffiti[i][gGraffiErsteller], 16, "%s", GetName(playerid));
Graffiti[i][gGraffiID] = POBJECT[playerid];
Graffiti[i][gGraffiX] = Position[playerid][0];
Graffiti[i][gGraffiY] = Position[playerid][1];
Graffiti[i][gGraffiZ] = Position[playerid][2];
Graffiti[i][gGraffiX2] = Position[playerid][3];
Graffiti[i][gGraffiY2] = Position[playerid][4];
Graffiti[i][gGraffiZ2] = Position[playerid][5];
SaveGraffitis();
return 1; //Hat die Schleife nun einen freien index gefunden, beenden wir hier die gesamte Schleife
}
return 1;
}
Das zweite Problem was ich sehe ist, du benutzt zum einen den index als Graffi ID in der Datenbank und zum Speichern benutzt du die Variable Graffiti[i][gGraffiID]. Das müsstest du noch überarbeiten und dich für eines entscheiden. Solltest du dich für den index entscheiden, dann solltest du bei deiner Tabelle AUTO_INCREMENT deaktivieren.
public SaveGraffitis()
{
new count = 0, mainQuery[1537], secondQuery[256];
for(new i=1;i<MAX_GRAFFITI;i++)
{
if(Graffiti[i][gCreated] == 1)
{
format(secondQuery, sizeof(secondQuery), "UPDATE `server_graffitis` SET `GraffiObj`='%d', `GraffiX`='%f' `GraffiY`='%f' `GraffiZ`='%f', `GraffiX2`='%f' `GraffiY2`='%f' `GraffiZ2`='%f', ",
Graffiti[i][gGraffiObj], Graffiti[i][gGraffiX], Graffiti[i][gGraffiY], Graffiti[i][gGraffiZ], Graffiti[i][gGraffiX2], Graffiti[i][gGraffiY2], Graffiti[i][gGraffiZ2]);
strcat(mainQuery, secondQuery);
format(secondQuery, sizeof(secondQuery), "`Ersteller`='%s', `Name`='%s' WHERE `GraffiID`='%d' ", //hier nutzt du für das Speichern anstatt den index
Graffiti[i][gGraffiErsteller], Graffiti[i][gGraffiName], Graffiti[i][gGraffiID]); //eine neue Variable
strcat(mainQuery, secondQuery);
print(mainQuery);
mysql_function_query(MySqlConnection, mainQuery, false, "", "");
strdel(mainQuery, 0, sizeof(mainQuery));
count++;
printf("[SAVE] Graffiti wurden gespeichert. (%d/%d)", count, MAX_GRAFFITI);
}
}
return 1;
}
Ich hoffe du kannst damit etwas anfangen und verstehst ein wenig, welche Probleme momentan vorliegen, ansonsten melde dich, dann kann ich es versuchen noch ein wenig mehr zu erläutern. Ich sehe des öfteren von dir, dass du ganz viele dynamische System verwendest oder erstellst. Schaut dir mal in dem Zuge die Foreach & Iterator Funktionen an, hier ein kleines Tutorial aus dem englischen Forum: https://forum.sa-mp.com/showthread.php?t=588526