Gutscheinsystem - nichts passiert?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag,
    ich Scripte seit gestern ein Gutscheinsystem.
    Der Code wird erstellt, alles in die Datenbank eingetragen nur wenn ich /gutschein [Code] eingebe passiert nichts.
    Aber wenn ich einen falschen eingebe kommt "Der Code existiert nicht!".


    Meine Codes:
    ocmd:gutscheinmenu(playerid, params[])
    {
    if(PlayerInfo[playerid][pAdmin]>= 1337)
    {
    ShowPlayerDialog(playerid, DIALOG_GUTSCHEIN_ERSTELLEN, DIALOG_STYLE_LIST, "Gutschein Erstellen","5 Respektpunkte\n1 Level\n5 Millionen\n300 Coins","Erstellen","Abbrechen");
    return 1;
    }
    else { SendClientMessage(playerid, COLOR_RED, "Du hast hierzu keine Berechtigung!"); }
    return 1;
    }
    ocmd:gutschein(playerid, params[])
    {
    new gutscheinid;
    if(sscanf(params, "d", gutscheinid)) return SendClientMessage(playerid, COLOR_GREY, "Benutze: /usegutschein [GutscheinCode]");
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(gutscheinid != Gutschein[g][gCode]) continue;
    if(Gutschein[g][gUsed] == 1) return SendClientMessage(playerid, COLOR_RED, "Dieser Code wurde bereits aktiviert.");
    if(Gutschein[g][gAktion] == 1)
    {
    new strings[128];
    SendClientMessage(playerid, COLOR_YELLOW, "[Gutschein-Info] Du hast 5 Respektpunkte bekommen.");
    PlayerInfo[playerid][pExp] += 5;
    Gutschein[g][gUsed] = 1;
    format(strings, sizeof(strings), "UPDATE `Gutscheine` SET `gUsed` = '1', `gUsedBy` = '%s' WHERE gCode = '%d'", SpielerName(playerid),Gutschein[g][gCode]);
    mysql_query(strings);
    }
    if(Gutschein[g][gAktion] == 2)
    {
    new stringss[128];
    SendClientMessage(playerid, COLOR_YELLOW, "[Gutschein-Info] Du hast 1 Level bekommen.");
    PlayerInfo[playerid][pLevel] += 1;
    Gutschein[g][gUsed] = 1;
    format(stringss, sizeof(stringss), "UPDATE `Gutscheine` SET `gUsed` = '1', `gUsedBy` = '%s' WHERE gCode = '%d'", SpielerName(playerid),Gutschein[g][gCode]);
    mysql_query(stringss);
    }
    if(Gutschein[g][gAktion] == 3)
    {
    new stringsss[128];
    SendClientMessage(playerid, COLOR_YELLOW, "[Gutschein-Info] Du hast 5 Millionen bekommen.");
    GivePlayerMoney(playerid, 5000000);
    Gutschein[g][gUsed] = 1;
    format(stringsss, sizeof(stringsss), "UPDATE `Gutscheine` SET `gUsed` = '1', `gUsedBy` = '%s' WHERE gCode = '%d'", SpielerName(playerid),Gutschein[g][gCode]);
    mysql_query(stringsss);
    }
    if(Gutschein[g][gAktion] == 4)
    {
    new string1s[128];
    SendClientMessage(playerid, COLOR_YELLOW, "[Gutschein-Info] Du hast 300 Coins bekommen.");
    PlayerInfo[playerid][pCoins] += 300;
    Gutschein[g][gUsed] = 1;
    format(string1s, sizeof(string1s), "UPDATE `Gutscheine` SET `gUsed` = '1', `gUsedBy` = '%s' WHERE gCode = '%d'", SpielerName(playerid),Gutschein[g][gCode]);
    mysql_query(string1s);
    }
    return 1;
    }
    return SendClientMessage(playerid, COLOR_YELLOW, "Dieser Code existiert nicht!");
    }
    if(dialogid == DIALOG_GUTSCHEIN_ERSTELLEN)
    {
    if(response)
    {
    if(listitem == 0)
    {
    new name[MAX_PLAYER_NAME], sstring[124+MAX_PLAYER_NAME], rand = random(999998)+1, query12[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    break;
    }
    }
    format(sstring, sizeof(sstring), "Du hast einen Gutschen für 5 Respektpunkte erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, sstring);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(query12, sizeof(query12), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '1')", name, rand);
    mysql_query(query12);
    return 1;
    }
    if(listitem == 1)
    {
    new name[MAX_PLAYER_NAME], string1[124+MAX_PLAYER_NAME], rand = random(999998)+1,myquery[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    break;
    }
    }
    format(string1, sizeof(string1), "Du hast einen Gutschen für 1 Level erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, string1);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(myquery, sizeof(myquery), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '2')", name, rand);
    mysql_query(myquery);
    return 1;
    }
    if(listitem == 2)
    {
    new name[MAX_PLAYER_NAME], string2s[124+MAX_PLAYER_NAME], rand = random(999998)+1,squery1[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    break;
    }
    }
    format(string2s, sizeof(string2s), "Du hast einen Gutschen für 5 Millionen erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(squery1, sizeof(squery1), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '3')", name, rand);
    mysql_query(squery1);
    return 1;
    }
    if(listitem == 3)
    {
    new name[MAX_PLAYER_NAME], string3[124+MAX_PLAYER_NAME], rand = random(999998)+1,haquery[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    break;
    }
    }
    format(string3, sizeof(string3), "Du hast einen Gutschen für 300 Coins erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(haquery, sizeof(haquery), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '4')", name, rand);
    mysql_query(haquery);
    return 1;
    }
    }
    }


    Vielleicht kann mir wer helfen.
    Gruß. Jeffry: Kaliber:

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Benutz mal das crashdetect Plugin und schau mal, ob er dir was ausgibt :)


    Wenn nicht, kann es auch gut sein, dass Gutschein[g][gAktion] den Wert 0 besitzt ;)


    Prüf das einfach mal.


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Wenn nicht, kann es auch gut sein, dass Gutschein[g][gAktion] den Wert 0 besitzt


    Denke ich mal eher, weil er nirgends den Wert von gAktion setzt. :whistling:


    Schreib den Code so:
    if(dialogid == DIALOG_GUTSCHEIN_ERSTELLEN)
    {
    if(response)
    {
    if(listitem == 0)
    {
    new name[MAX_PLAYER_NAME], sstring[124+MAX_PLAYER_NAME], rand = random(999998)+1, query12[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    Gutschein[g][gAktion] = 1;
    break;
    }
    }
    format(sstring, sizeof(sstring), "Du hast einen Gutschen für 5 Respektpunkte erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, sstring);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(query12, sizeof(query12), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '1')", name, rand);
    mysql_query(query12);
    return 1;
    }
    if(listitem == 1)
    {
    new name[MAX_PLAYER_NAME], string1[124+MAX_PLAYER_NAME], rand = random(999998)+1,myquery[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    Gutschein[g][gAktion] = 2;
    break;
    }
    }
    format(string1, sizeof(string1), "Du hast einen Gutschen für 1 Level erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, string1);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(myquery, sizeof(myquery), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '2')", name, rand);
    mysql_query(myquery);
    return 1;
    }
    if(listitem == 2)
    {
    new name[MAX_PLAYER_NAME], string2s[124+MAX_PLAYER_NAME], rand = random(999998)+1,squery1[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    Gutschein[g][gAktion] = 3;
    break;
    }
    }
    format(string2s, sizeof(string2s), "Du hast einen Gutschen für 5 Millionen erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(squery1, sizeof(squery1), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '3')", name, rand);
    mysql_query(squery1);
    return 1;
    }
    if(listitem == 3)
    {
    new name[MAX_PLAYER_NAME], string3[124+MAX_PLAYER_NAME], rand = random(999998)+1,haquery[164];
    GetPlayerName(playerid, name, sizeof(name));
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    if(Gutschein[g][gCode] == 0)
    {
    Gutschein[g][gCode] = rand;
    Gutschein[g][gAktion] = 4;
    break;
    }
    }
    format(string3, sizeof(string3), "Du hast einen Gutschen für 300 Coins erstellt. Der Gutscheincode ist: %d", rand);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(haquery, sizeof(haquery), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '4')", name, rand);
    mysql_query(haquery);
    return 1;
    }
    }
    }

  • Ich versuch es mal.
    Kann es auch sein das ich die Gutscheine nicht lade?
    Hab keine Load Funktion. Vielleicht kann da jemand helfen oder ist diese unnötig?

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Sofern du nach dem erstellen nicht den Server schließt, müsste das funktionieren.
    Aber ich habe dir mal eine kleine Vorlage zum laden geschrieben, müsstest du ggf. anpassen.
    myql_tquery(connectionhandle,"SELECT * FROM `Gutscheine`","OnLoadGutscheine",""); //OnGameModeInit


    forward OnLoadGutscheine();
    public OnLoadGutscheine()
    {
    new rows,fields;
    cache_get_data(rows,fields,connectionhandle);
    if(!rows)return 1;
    for(new i;i!=rows;i++)
    {
    new id = getFreeGutscheinID();
    cache_get_field_content(i,"gErsteller",Gutschein[i][gErsteller],connectionhandle,MAX_PLAYER_NAME);
    }
    return 1;
    }


    stock getFreeGutscheinID()
    {
    for(new i;i<MAX_GUTSCHEINE;i++)
    {
    if(Gutscheine[i][gCode] == 0)return i;
    }
    return 0;
    }

  • Denke ich mal eher, weil er nirgends den Wert von gAktion setzt.


    Na und? Es gäbe doch noch viel mehr Möglichkeiten wo da was crasht, du weißt ja nicht, wie er das alles deklariert hat :klugs:


    Schreib den Code so:


    Warum sollte er ihn so schreiben? :huh:


    Wenn er Code sparen, übersichtlicher und fehler vermeidender schreiben will, dann so:


    //Extra für die Funktion (ganz nach oben schreben in dein Skript):
    #define SCME(%0,%1) format(tmp,sizeof(tmp),%0,%1),SendClientMessage(playerid,COLOR_YELLOW,tmp)


    if(dialogid == DIALOG_GUTSCHEIN_ERSTELLEN)
    {
    if(!response) return 1;
    new name[MAX_PLAYER_NAME], tmp[124+MAX_PLAYER_NAME], rand = random(999998)+1;
    GetPlayerName(playerid, name, sizeof(name));
    for(new g; g <MAX_GUTSCHEINE; g++) {
    if(Gutschein[g][gCode]) continue;
    Gutschein[g][gCode] = rand;
    break;
    }
    switch(listitem) {
    case 0: SCME("Du hast einen Gutschen für 5 Respektpunkte erstellt. Der Gutscheincode ist: %d", rand);
    case 1: SCME("Du hast einen Gutschen für 1 Level erstellt. Der Gutscheincode ist: %d", rand);
    case 2: SCME("Du hast einen Gutschen für 5 Millionen erstellt. Der Gutscheincode ist: %d", rand);
    case 3: SCME("Du hast einen Gutschen für 300 Coins erstellt. Der Gutscheincode ist: %d", rand);
    }
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Schreibe dir diesen Code nun auf. Er ist wichtig für andere Spieler!");
    format(tmp, sizeof(tmp), "INSERT INTO `Gutscheine` (`gErsteller`, `gCode`, `gUsed`, `gUsedBy`, `gAktion`) VALUES ('%s', '%d', '0','Niemand', '%d')", name, rand, listitem+1);
    mysql_query(tmp);
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Warum sollte er ihn so schreiben?


    Weil ich da gAktion reingeschrieben habe?
    Und übersichtlicher ist deins auch nicht ;)
    EDIT:
    Achja, wenn er kürzer schreiben möchte, warum hat er das denn nicht sofort schon getan?

    Einmal editiert, zuletzt von AirM4X ()

  • Aber ich habe dir mal eine kleine Vorlage zum laden geschrieben


    So wie es aussieht, nutzt er keine cache Funktionen.


    Ich komme nur nicht weiter bei der Laden funktion.


    Schau mal hier rein: [ SCRIPTING ] MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel)


    Und übersichtlicher ist deins auch nicht


    Doch um einiges...da 1. der Code um 90% kleiner ist...und man alles auf einem Blick sieht, zudem ist die ganze Redundanz draußen.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • So wie es aussieht, nutzt er keine cache Funktionen.



    Schau mal hier rein: [ SCRIPTING ] MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel)



    Doch um einiges...da 1. der Code um 90% kleiner ist...und man alles auf einem Blick sieht, zudem ist die ganze Redundanz draußen.


    Dein Code ist gut. Bezweifel ich nicht. Aber das hier ist kein Smalltalk. Ich danke dir sehr.


    Die Gutscheine werden nicht geladen:
    stock LoadGutscheine()
    {
    for(new g = 0; g <MAX_GUTSCHEINE; g++)
    {
    Gutschein[g][gCode] = mysql_GetInt("Gutscheine", "gCode","gCode",Gutschein[g][gCode]);
    Gutschein[g][gUsed] = mysql_GetInt("Gutscheine", "gUsed","gCode",Gutschein[g][gCode]);
    }
    return 1;
    }


    was mache ich falsch? (Ich hasse Laden/Speichern)

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Achja, wenn er kürzer schreiben möchte, warum hat er das denn nicht sofort schon getan?


    Gute Frage...weiß nicht, könnte sein, weil er es nicht besser weiß...oder er mag es viel Code zu schreiben :fun:


    Gutschein[g][gCode] = mysql_GetInt("Gutscheine", "gCode","gCode",Gutschein[g][gCode]);
    Gutschein[g][gUsed] = mysql_GetInt("Gutscheine", "gUsed","gCode",Gutschein[g][gCode]);


    Mach es mal so:


    for(new g,tmp[11]; g <MAX_GUTSCHEINE; g++)
    {
    valstr(tmp,g);
    Gutschein[g][gCode] = mysql_GetInt("gCode","Gutscheine","ID",tmp); //Hast du denn ne Spalte ID?!
    Gutschein[g][gUsed] = mysql_GetInt("gUsed","Gutscheine","ID",tmp);
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ich hab die LoadGutscheine Funktion beim Erstellen auch eingebaut.
    Jetzt erkennt er die Codes nicht mehr.


    Dann poste mal den Code den du verwendest...


    und Jeffry: Bitte kümmer dich wieder mehr um die Leute, ich halt das hier einfach nicht mehr aus :peng:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • also ich habe deinen Code:
    stock LoadGutscheine()
    {
    for(new g,tmp[11]; g <MAX_GUTSCHEINE; g++)
    {
    valstr(tmp,g);
    Gutschein[g][gCode] = mysql_GetInt("gCode","Gutscheine","gID",tmp);
    Gutschein[g][gUsed] = mysql_GetInt("gUsed","Gutscheine","gID",tmp);
    }
    return 1;
    }


    Den lasse ich bei OnGameModeInit laden.
    Jetzt wird der aber nicht geladen heißt, er sagt das er nicht existiert.

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Jetzt wird der aber nicht geladen heißt, er sagt das er nicht existiert.


    Wie das der nicht existiert? :huh:


    Die genaue Fehlermeldung wäre schon praktisch...


    und sicher, dass du LoadGutscheine(); unter OnGameModeInit geschrieben hast und die Funktion selbst außerhalb eines Callbacks?! :huh:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von .Toby ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Wie das der nicht existiert? :huh:


    Die genaue Fehlermeldung wäre schon praktisch...


    und sicher, dass du LoadGutscheine(); unter OnGameModeInit geschrieben hast und die Funktion selbst außerhalb eines Callbacks?! :huh:


    Gibt keine Fehlermeldung.
    Wenn ich auf den Server komme, startet er sofort neu XD

    Man soll weder annehmen noch besitzen, was man nicht wirklich zum Leben braucht.



  • Gibt keine Fehlermeldung.


    Gerade waren da noch so viele Fehlermeldung, das irgendeine Tabelle nicht existiert, und jetzt auf einmal nicht mehr? Konntest du die Fehler alleine beheben?


    Irgendwas muss doch noch in der MySQL-Log stehen, außerdem was hast du denn nun verändert? Poste deinen aktuellen Code mal.


    EDIT:
    Außerdem, muss der Code nicht eigentlich so?

    Code
    mysql_GetInt(Table[],Field[],Where[],Is[]);


    stock LoadGutscheine()
    {
    for(new g,tmp[11];g<MAX_GUTSCHEINE;g++)
    {
    valstr(tmp,g);
    Gutschein[g][gCode] = mysql_GetInt("Gutscheine","gCode","gID",tmp);
    Gutschein[g][gUsed] = mysql_GetInt("Gutscheine","gUsed","gID",tmp);
    }
    return 1;
    }