In OnDialogResponse bei GUTSCHEIN_CREATE_CODE ist bei response == 0 ein INSERT INTO. Hier sollte doch der erstellte Gutschein in der Datenbank doch wieder gelöscht werden. (Bei /gutschein wird ja bereits einer erstellt)
mysql_free_result(); ist unnötig nach Queries die kein SELECT beinhalten.
Wieso möchtest du alle Gutscheine aktualisieren? Es reicht doch nur den zu aktualisieren, den man erstellt oder bearbeitet hat.
Ich würde also empfehlen, dein while Code-Ausschnitt zu löschen und den Dialog GUTSCHEIN_DIALOG_ANZAHL folgendermaßen umzuändern:
case GUTSCHEIN_DIALOG_ANZAHL:
{
new anzahl = strval(inputtext);
if(response == 0)
{
switch(Gutschein[MakeGutschein[playerid]][gutscheintyp])
{
case 1:
{//Level
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_MENGE,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 5","Wie viel Level soll man bei diesem Gutschein erhalten:","Weiter","Zurück");
return 1;
}
case 2:
{//DonatorZeit
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_MENGE,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 5","Wie viel PremiumZeit soll man bei diesem Gutschein erhalten:","Weiter","Zurück");
return 1;
}
case 3:
{//Fahrzeuge
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_MENGE,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 5","Welches Fahrzeug soll man erhalten:","Weiter","Zurück");
return 1;
}
case 4:
{//Respektpunkte
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_MENGE,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 5","Wie viele Respektpunkte soll man erhalten:","Weiter","Zurück");
return 1;
}
case 5:
{//Geld
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_MENGE,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 5","Wie viel Geld soll man erhalten:","Weiter","Zurück");
return 1;
}
}
return 1;
}
if(response == 1)
{
new query[256], gutscheinn = MakeGutschein[playerid];
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_ANZAHL,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 6","Wie oft kann dieser Gutschein verwendet werden:","Weiter","Zurück");
return 1;
}
if(!IsNumeric(inputtext))
{
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_ANZAHL,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 6","Wie oft kann dieser Gutschein verwendet werden:","Weiter","Zurück");
return SendClientMessage(playerid,GRAU,"Gebe nur Zahlen ein!");
}
else if(anzahl <= 0)
{
ShowPlayerDialog(playerid,GUTSCHEIN_DIALOG_ANZAHL,DIALOG_STYLE_INPUT,"Gutscheinerstellung Schritt 6","Wie oft kann dieser Gutschein verwendet werden:","Weiter","Zurück");
return SendClientMessage(playerid,GRAU,"Anzahl muss > 0 sein!");
}
else
{
SendClientMessage(playerid,GELB,"Gutschein erfolgreich erstellt!");
MakeGutschein[playerid] = 0;
// Nebenbei war hier auch vorhin ein Fehler, dass du die Variable MakeGutschein auf 0 zurückgesetzt hast und erst
// danach die Anzahl gesetzt hast.
Gutschein[gutscheinn][gutscheinanzahl] = anzahl;
format(query,sizeof(query),"UPDATE "#DATENBANKTAG"_gutscheine SET gutscheincode='%s',gutscheinname='%s',gutscheindesc='%s',gutscheintyp='%d',gutscheinmenge='%d',gutscheinanzahl='%d' WHERE id='%d'", Gutschein[gutscheinn][gutscheincode],Gutschein[gutscheinn][gutscheinname],Gutschein[gutscheinn][gutscheindesc],Gutschein[gutscheinn][gutscheintyp],Gutschein[gutscheinn][gutscheinmenge],Gutschein[gutscheinn][gutscheinanzahl],gutscheinn);
printf("GUTSCHEIN-DEBUG | %s", query); // Zu Debugzwecken
mysql_function_query(MySqlConnection,query,false,"","");
}
return 1;
}
}
Wenn das Abspeichern funktioniert, können wir uns zum Laden vorarbeiten Aber bitte nach deinen Aktualisierungen einen Gutschein InGame erstellen und dann aus den Server-Logs die Zeile mit GUTSCHEIN-DEBUG aussuchen, Danke