Laut Log wird es auf 1 beim Erstellen gesetzt, und auch nicht auf 0 beim Einlösen.
Zitat[22:31:41] i: 8 | Vorhanden: 1
[22:31:41] i: 8 | Gutscheincode: 674068133
So ist auch dein Code.
Schau nochmal nach.
Laut Log wird es auf 1 beim Erstellen gesetzt, und auch nicht auf 0 beim Einlösen.
Zitat[22:31:41] i: 8 | Vorhanden: 1
[22:31:41] i: 8 | Gutscheincode: 674068133
So ist auch dein Code.
Schau nochmal nach.
Da war der Code der schon eingelöst war und denn ich wieder einlösen kann.
//
Es wird immer nur die ID 0 ausgelesen.
Wodran kann dieses Problem liegen ?
Log:
[01:25:08] inputtext: 874198866 / 874198866 // Gutscheincode 1
[01:25:08] i: 0 | ID: 0
[01:25:08] i: 1 | ID: 1
[01:25:08] i: 1 | Vorhanden: 1
[01:25:08] Gutscheincode bereits eingelöst
[01:25:45] inputtext: 576606666 / 576606666 // Gutscheincode 2
[01:25:45] i: 0 | ID: 2
[01:25:45] i: 0 | Vorhanden: 0
[01:25:45] Gutscheincode bereits eingelöst
Poste bitte nochmal den aktuellen Code, mit dem du die Gutscheine erstellst.
case DIALOG_GUTSCHEINCR:
{
if(response)
{
new type = listitem+1;
new string[128];
for(new i=0; i<sizeof(Gutschein); i++)
{
if(Gutschein[i][ID] != 0)continue;
Gutschein[i][Vorhanden] = 0;
Gutschein[i][Gutscheintyp] = type;
Gutschein[i][Gutscheincode] = random(888888888) + random(111111111);
Gutschein[i][Gutscheincreate] = 1;
format(query,sizeof(query),"INSERT INTO `script_gutscheine` (Gutscheincreate,Gutscheincode,Vorhanden,EingeloestName,Gutscheintyp,Inhalt) VALUES ('%d','%d','%d','Niemand','%d','%s')",Gutschein[i][Gutscheincreate],Gutschein[i][Gutscheincode],Gutschein[i][Vorhanden],Gutschein[i][Gutscheintyp],GetPremiumStatus(Gutschein[i][Gutscheintyp]));
mysql_function_query(myCon, query, true,"LoadNewGutschein","i",i);
format(string,sizeof(string),"Du hast erfolgreich einen Gutscheincode {40A5FE}%s{FFFFFF} erstellt.",GetPremiumStatus(Gutschein[i][Gutscheintyp]));
SendClientMessage(playerid,COLOR_WHITE,string);
format(string,sizeof(string),"Dieser Gutschein {40A5FE}(%d){FFFFFF} ist sofort verwendbar.",Gutschein[i][Gutscheincode]);
SendClientMessage(playerid, COLOR_WHITE, string);
return 1;
}
}
if(!response)
{
return 1;
}
}
public LoadNewGutschein(i)
{
return Gutschein[i][ID] = cache_insert_id(myCon);
}
Wenn ich ein Gutschein erstelle mit mehreren ID klappt es aber wenn ich sobald den Server restarte wird nur noch die ID 0 ausgelesen.
Also, wenn du mehrere Gutscheincodes erstellst klappt alles?
Aber wenn du den Server neu startest, dann wird nur noch 1 Gutscheincode geladen?
Habe ich das so richtig verstanden?
Wenn ja, poste bitte den Code, mit dem du die Gutscheine aus der Datenbank lädst, beim Serverstart.
Unter OnGameModeInit
mysql_function_query(myCon, "SELECT * FROM `script_gutscheine`", true, "LoadGutscheine", "");
LoadGutscheine
public LoadGutscheine()
{
new rows, fields, count;
cache_get_data(rows, fields);
for(new i=0;i<rows;i++)
{
new GutscheinID = cache_get_field_content_int(i, "id");
if(GutscheinID < MAX_GUTSCHEIN)
{
Gutschein[GutscheinID][ID] = cache_get_field_content_int(i, "id");
Gutschein[GutscheinID][Gutscheincode] = cache_get_field_content_int(i, "Gutscheincode");
Gutschein[GutscheinID][Vorhanden] = cache_get_field_content_int(i, "Vorhanden");
Gutschein[GutscheinID][Gutscheintyp] = cache_get_field_content_int(i, "Gutscheintyp");
Gutschein[GutscheinID][Gutscheincreate] = cache_get_field_content_int(i, "Gutscheincreate");
cache_get_field_content(i, "EingeloestName", Gutschein[GutscheinID][EingeloestName], myCon, 50);
count++;
}
}
printf("[LOAD] Gutscheine geladen: %d/%d", count, MAX_GUTSCHEIN);
return 1;
}
Hm, das sieht gut aus.
Kannst du mal zwei verschiedene Varianten durchspielen?
Einmal kaufst du mehrere Gutscheine und versuchst sie dann einzulösen, also der Teil der geht.
Und als zweites (entferne vorher alle Gutscheine) erstellst du gleich viele Gutscheine, startest den Server neu, und versuchst dann die Gutscheine einzulösen.
Von beiden Varianten postest du dann den Log mit den prints.
Gut wäre auch, wenn du bei der zweiten Variante kurz erläutern könntest, wo der Fehler ist.
Log:
Normal wenn server da ist.
23:13:58] inputtext: 754114141 / 754114141
[23:13:58] i: 0 | ID: 9
[23:13:58] i: 0 | Vorhanden: 0
[23:13:58] i: 0 | Gutscheincode: 754114141
[23:13:58] OK
[23:14:16] inputtext: 380072308 / 380072308
[23:14:16] i: 0 | ID: 9
[23:14:16] i: 0 | Vorhanden: 0
[23:14:16] i: 0 | Gutscheincode: 754114141
[23:14:16] i: 1 | ID: 10
[23:14:16] i: 1 | Vorhanden: 0
[23:14:16] i: 1 | Gutscheincode: 380072308
[23:14:16] OK
[23:14:33] inputtext: ddd / 0
[23:14:33] i: 0 | ID: 9
[23:14:33] i: 0 | Vorhanden: 0
[23:14:33] i: 0 | Gutscheincode: 754114141
[23:14:33] i: 1 | ID: 10
[23:14:33] i: 1 | Vorhanden: 0
[23:14:33] i: 1 | Gutscheincode: 380072308
[23:14:33] i: 2 | ID: 11
[23:14:33] i: 2 | Vorhanden: 0
[23:14:33] i: 2 | Gutscheincode: 600866404
Nach dem Server restart
23:18:13] inputtext: 600866404 / 600866404
[23:18:13] i: 0 | ID: 0
[23:18:13] i: 1 | ID: 0
[23:18:13] i: 2 | ID: 0
[23:18:13] i: 3 | ID: 0
[23:18:13] i: 4 | ID: 0
[23:18:13] i: 5 | ID: 0
[23:18:13] i: 6 | ID: 0
[23:18:13] i: 7 | ID: 0
[23:18:13] i: 8 | ID: 0
[23:18:13] i: 9 | ID: 0
[23:18:13] i: 10 | ID: 0
[23:18:13] i: 11 | ID: 0
[23:18:13] i: 12 | ID: 0
[23:18:13] i: 13 | ID: 0
[23:18:13] i: 14 | ID: 0
[23:18:13] i: 15 | ID: 0
[23:18:13] i: 16 | ID: 0
[23:18:13] i: 17 | ID: 0
[23:18:13] i: 18 | ID: 0
[23:18:13] i: 19 | ID: 0
[23:18:13] i: 20 | ID: 0
[23:18:13] i: 21 | ID: 0
[23:18:13] i: 22 | ID: 0
[23:18:13] i: 23 | ID: 0
[23:18:13] i: 24 | ID: 0
[23:18:13] i: 25 | ID: 0
[23:18:13] i: 26 | ID: 0
[23:18:13] i: 27 | ID: 0
[23:18:13] i: 28 | ID: 0
[23:18:13] i: 29 | ID: 0
[23:18:13] i: 30 | ID: 0
[23:18:13] i: 31 | ID: 0
[23:18:13] i: 32 | ID: 0
[23:18:13] i: 33 | ID: 0
[23:18:13] i: 34 | ID: 0
[23:18:13] i: 35 | ID: 0
[23:18:13] i: 36 | ID: 0
[23:18:13] i: 37 | ID: 0
[23:18:13] i: 38 | ID: 0
[23:18:13] i: 39 | ID: 0
[23:18:13] i: 40 | ID: 0
[23:18:13] i: 41 | ID: 0
[23:18:13] i: 42 | ID: 0
[23:18:13] i: 43 | ID: 0
[23:18:13] i: 44 | ID: 0
[23:18:13] i: 45 | ID: 0
[23:18:13] i: 46 | ID: 0
[23:18:13] i: 47 | ID: 0
[23:18:13] i: 48 | ID: 0
[23:18:13] i: 49 | ID: 0
[23:18:13] Kein Code gefunden
[23:18:28] inputtext: 754114141 / 754114141
[23:18:28] i: 0 | ID: 0
[23:18:28] i: 1 | ID: 0
[23:18:28] i: 2 | ID: 0
[23:18:28] i: 3 | ID: 0
[23:18:28] i: 4 | ID: 0
[23:18:28] i: 5 | ID: 0
[23:18:28] i: 6 | ID: 0
[23:18:28] i: 7 | ID: 0
[23:18:28] i: 8 | ID: 0
[23:18:28] i: 9 | ID: 0
[23:18:28] i: 10 | ID: 0
[23:18:28] i: 11 | ID: 0
[23:18:28] i: 12 | ID: 0
[23:18:28] i: 13 | ID: 0
[23:18:28] i: 14 | ID: 0
[23:18:28] i: 15 | ID: 0
[23:18:28] i: 16 | ID: 0
[23:18:28] i: 17 | ID: 0
[23:18:28] i: 18 | ID: 0
[23:18:28] i: 19 | ID: 0
[23:18:28] i: 20 | ID: 0
[23:18:28] i: 21 | ID: 0
[23:18:28] i: 22 | ID: 0
[23:18:28] i: 23 | ID: 0
[23:18:28] i: 24 | ID: 0
[23:18:28] i: 25 | ID: 0
[23:18:28] i: 26 | ID: 0
[23:18:28] i: 27 | ID: 0
[23:18:28] i: 28 | ID: 0
[23:18:28] i: 29 | ID: 0
[23:18:28] i: 30 | ID: 0
[23:18:28] i: 31 | ID: 0
[23:18:28] i: 32 | ID: 0
[23:18:28] i: 33 | ID: 0
[23:18:28] i: 34 | ID: 0
[23:18:28] i: 35 | ID: 0
[23:18:28] i: 36 | ID: 0
[23:18:28] i: 37 | ID: 0
[23:18:28] i: 38 | ID: 0
[23:18:28] i: 39 | ID: 0
[23:18:28] i: 40 | ID: 0
[23:18:28] i: 41 | ID: 0
[23:18:28] i: 42 | ID: 0
[23:18:28] i: 43 | ID: 0
[23:18:28] i: 44 | ID: 0
[23:18:28] i: 45 | ID: 0
[23:18:28] i: 46 | ID: 0
[23:18:28] i: 47 | ID: 0
[23:18:28] i: 48 | ID: 0
[23:18:28] i: 49 | ID: 0
[23:18:28] Kein Code gefunden
[23:18:44] inputtext: 380072308 / 380072308
[23:18:44] i: 0 | ID: 0
[23:18:44] i: 1 | ID: 0
[23:18:44] i: 2 | ID: 0
[23:18:44] i: 3 | ID: 0
[23:18:44] i: 4 | ID: 0
[23:18:44] i: 5 | ID: 0
[23:18:44] i: 6 | ID: 0
[23:18:44] i: 7 | ID: 0
[23:18:44] i: 8 | ID: 0
[23:18:44] i: 9 | ID: 0
[23:18:44] i: 10 | ID: 0
[23:18:44] i: 11 | ID: 0
[23:18:44] i: 12 | ID: 0
[23:18:44] i: 13 | ID: 0
[23:18:44] i: 14 | ID: 0
[23:18:44] i: 15 | ID: 0
[23:18:44] i: 16 | ID: 0
[23:18:44] i: 17 | ID: 0
[23:18:44] i: 18 | ID: 0
[23:18:44] i: 19 | ID: 0
[23:18:44] i: 20 | ID: 0
[23:18:44] i: 21 | ID: 0
[23:18:44] i: 22 | ID: 0
[23:18:44] i: 23 | ID: 0
[23:18:44] i: 24 | ID: 0
[23:18:44] i: 25 | ID: 0
[23:18:44] i: 26 | ID: 0
[23:18:44] i: 27 | ID: 0
[23:18:44] i: 28 | ID: 0
[23:18:44] i: 29 | ID: 0
[23:18:44] i: 30 | ID: 0
[23:18:44] i: 31 | ID: 0
[23:18:44] i: 32 | ID: 0
[23:18:44] i: 33 | ID: 0
[23:18:44] i: 34 | ID: 0
[23:18:44] i: 35 | ID: 0
[23:18:44] i: 36 | ID: 0
[23:18:44] i: 37 | ID: 0
[23:18:44] i: 38 | ID: 0
[23:18:44] i: 39 | ID: 0
[23:18:44] i: 40 | ID: 0
[23:18:44] i: 41 | ID: 0
[23:18:44] i: 42 | ID: 0
[23:18:44] i: 43 | ID: 0
[23:18:44] i: 44 | ID: 0
[23:18:44] i: 45 | ID: 0
[23:18:44] i: 46 | ID: 0
[23:18:44] i: 47 | ID: 0
[23:18:44] i: 48 | ID: 0
[23:18:44] i: 49 | ID: 0
[23:18:44] Kein Code gefunden
Jeffry kannst Du über TV mal gucken ?
über Tv gehts besser und schneller.
Geht leider grade nicht, da ich erst am Sonntag wieder zu Hause bin, bzw vielleicht morgen Abend wenn es noch reicht.
Schalte mal den MySQL Debug Modus an und poste was im Log steht, wenn du den Server startest, und die Gutscheine geladen werden sollen, dann schaue ich mir den morgen mal durch, und wenn ich nichts finde schaue ich am Sonntag Mittag mal mit TeamViewer drauf, das ist bestimmt nur eine Kleinigkeit, aber vielleicht gibt der Log da schon Aufschluss drüber, da es wohl darauf hinausläuft, dass beim Laden was schief geht.
MySQL_Debug:
Da haben wir doch den Fehler.
Zitat[14:46:32] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
Du hast in deiner Tabelle keine Spalte die "id" heißt. Sprich, diese Spalte kann nicht ausgelesen werden. Und mit ziemlicher Wahrscheinlichkeit speicherst du die ID gar nicht beim speichern der Gutscheine.
Füge eine Spalte id zu deiner Tabelle hinzu und füge das Speichern der ID zu speichern der Gutscheine hinzu.
Dann sollte es klappen.
Ich habe die ID gespeichert und er lädt die auch.
Save
public SaveGutscheine()
{
new count = 0, mainQuery[1537], secondQuery[256];
for(new i=1;i<MAX_GUTSCHEIN;i++)
{
if(Gutschein[i][Gutscheincreate] == 1)
{
format(secondQuery, sizeof(secondQuery), "UPDATE `script_gutscheine` SET `Gutscheincode`='%i', `Vorhanden`='%i',`Gutscheintyp`='%i',",
Gutschein[i][Gutscheincode],Gutschein[i][Vorhanden],Gutschein[i][Gutscheintyp]);
strcat(mainQuery, secondQuery);
format(secondQuery, sizeof(secondQuery), "`Gutscheincreate`='%i', `EingeloestName`='%s' WHERE `id`='%d'",
Gutschein[i][Gutscheincreate],Gutschein[i][EingeloestName],Gutschein[i][ID]);
strcat(mainQuery, secondQuery);
mysql_function_query(myCon, mainQuery, false, "", "");
strdel(mainQuery, 0, sizeof(mainQuery));
count++;
}
}
printf("[SAVE] Gutscheine wurden gespeichert. (%d/%d)", count, MAX_GUTSCHEIN);
return 1;
}
Load
public LoadGutscheine()
{
new rows, fields, count;
cache_get_data(rows, fields);
for(new i=0;i<rows;i++)
{
new GutscheinID = cache_get_field_content_int(i, "id");
if(GutscheinID < MAX_GUTSCHEIN)
{
Gutschein[GutscheinID][ID] = cache_get_field_content_int(i, "id");
Gutschein[GutscheinID][Gutscheincode] = cache_get_field_content_int(i, "Gutscheincode");
Gutschein[GutscheinID][Vorhanden] = cache_get_field_content_int(i, "Vorhanden");
Gutschein[GutscheinID][Gutscheintyp] = cache_get_field_content_int(i, "Gutscheintyp");
Gutschein[GutscheinID][Gutscheincreate] = cache_get_field_content_int(i, "Gutscheincreate");
cache_get_field_content(i, "EingeloestName", Gutschein[GutscheinID][EingeloestName], myCon, 50);
count++;
}
}
printf("[LOAD] Gutscheine geladen: %d/%d", count, MAX_GUTSCHEIN);
return 1;
}
Wie sieht denn dein query aus, mit dem du anschließend LoadGutscheine aufrufst?
Kannst du mal noch einen Screenshot von der Tabelle in der Datenbank posten (Struktur und Daten)?
Wenn sich da auch nichts findet, was auf die fehlende id Spalte hinweist, dann muss ich es mir doch mal anschauen indem ich mich draufschalte.
Ich könnte dir per Teamviewer helfen, kannst mich ja auf Skype adden.
Melde dich per PN.
Entweder nimmst du diese Zeile ganz raus
if(GutscheinID < MAX_GUTSCHEIN)
oder du gibst MAX_GUTSCHEIN den Wert 50 (wie viele Gutscheine du maximal halt laden möchtest)
und änderst die Abfrage in etwa so
if(i < MAX_GUTSCHEIN)
// If Abfrage