Gutschein System

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
  • ocmd:usegutschein(playerid, params[])
    {
    new gutscheinid, string[256];
    if(sscanf(params, "d", gutscheinid)) return SendClientMessage(playerid, COLOR_ERRORTEXT, "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_ERRORTEXT, "Dieser Code wurde bereits aktiviert.");
    if(Gutschein[g][gAktion] == 1)
    {
    ShowPlayerDialog(playerid, DIALOG_GNAMECHANGE, DIALOG_STYLE_INPUT, "Gutschein einlösen: Namenschange", "Bitte gib deinen neuen Wunschnamen ein:", "Change", "Abbrechen");
    SetPVarInt(playerid, "g", g);
    /*Gutschein[g][gUsed] = 1;
    SendClientMessage(playerid, COLOR_WHITE, "Namensänderung");
    format(string, sizeof(string), "UPDATE `gutscheine` SET `gUsed` = '1', `gUsedBy` = '%s' WHERE gCode = '%d'", SpielerName(playerid), Gutschein[g][gCode]);
    self_mysql_query(string);*/
    }
    return 1;
    }
    return SendClientMessage(playerid, COLOR_ERRORTEXT, "Dieser Code existiert nicht!");
    }


    if(dialogid == DIALOG_GNAMECHANGE)
    {
    if(strlen(inputtext) > 24) return SendClientMessage(playerid, COLOR_ERRORTEXT, "Der Name darf nicht mehr als 24 Zeichen und nur Zeichen von A-Z, 0-9 besitzen!");
    if(mysql_CheckAccount(inputtext) == 1) return SendClientMessage(playerid, COLOR_ERRORTEXT, "Der Name ist bereits in der Datenbank vorhanden!");
    new g = GetPVarInt(playerid, "g");
    if(strcmp(PlayerInfo[playerid][pOldName], "Niemand", true) == 0) return strmid(PlayerInfo[playerid][pOldName], giveplayer, 0, strlen(giveplayer), 255);
    Gutschein[g][gUsed] = 1;
    SetPlayerName(playerid, inputtext);
    format(string, sizeof(string), "Du hast deinen Namen von %s auf %s geändert.", giveplayer, SpielerName(playerid));
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SendClientMessage(playerid, COLOR_WHITE, "Wichtig: Ändere nach dem Logout deinen Namen im Multiplayer Clienten zu deinem neuen Namen.");
    format(string, sizeof(string), "UPDATE `users` SET `Name`='%s' WHERE `Name`='%s'", SpielerName(playerid), giveplayer);
    self_mysql_query(string);
    format(string, sizeof(string), "UPDATE `gutscheine` SET `gUsed` = '1', `gUsedBy` = '%s' WHERE gCode = '%d'", SpielerName(playerid), Gutschein[g][gCode]);
    self_mysql_query(string);
    return 1;
    }


    Das kannst du dir wie einen Koffer vorstellen, in den Koffer "g" wird der Wert von g gepackt, und den nehmen wir zum Dialog mit, und schreiben ihn praktischerweise wieder in die Variable g, aus dem Koffer "g".


  • Und wieder ein Problem.. oh je^^ und zwar wenn ich den Server Restarte, oder das Spiel verlasse und neu Joine, will ich einen unbenutzten Gutschein Code eingeben, bekomme dann aber die Meldung der Code existiert nicht (existiert aber) - total komisch ?( - Code ist wie oben im Zitat

  • Poste bitte den Code mit dem du die Codes aus der Datenbank lädst.


    public LoadCoupons()
    {
    for(new i = 0; i < MAX_GUTSCHEINE; i++)
    {
    Gutschein[i][gOwner] = mysql_GetInttoo("gutscheine", "gOwner", "DatensatzID");
    Gutschein[i][gCode] = mysql_GetInttoo("gutscheine", "gCode", "DatensatzID");
    Gutschein[i][gUsed] = mysql_GetInttoo("gutscheine", "gUsed", "DatensatzID");
    Gutschein[i][gUsedBy] = mysql_GetInttoo("gutscheine", "gUsedBy", "DatensatzID");
    Gutschein[i][gAktion] = mysql_GetInttoo("gutscheine", "gAktion", "DatensatzID");
    }
    return 1;
    }

  • Und wie ist "mysql_GetInttoo" definiert? Poste die Funktion auch noch.
    Falls darin wieder eine Funktion verschachtelt ist, die du selbst gemacht hast, poste die auch dazu (usw.).


    Was ich dir schon sagen kann ist, dass du das "i" nicht in die Abfrage mit gibst, sprich es funktioniert nicht. Wie man es behebt, dazu brauche ich den restlichen Code.

  • stock mysql_GetInttoo(Table[], Field[], Where[]){
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '0'", Field, Table, Where);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }

  • stock mysql_GetInttoo(Table[], Field[], Where[], check){
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%d'", Field, Table, Where, check);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    public LoadCoupons()
    {
    for(new i = 0; i < MAX_GUTSCHEINE; i++)
    {
    Gutschein[i][gOwner] = mysql_GetInttoo("gutscheine", "gOwner", "DatensatzID",i);
    Gutschein[i][gCode] = mysql_GetInttoo("gutscheine", "gCode", "DatensatzID",i);
    Gutschein[i][gUsed] = mysql_GetInttoo("gutscheine", "gUsed", "DatensatzID",i);
    Gutschein[i][gUsedBy] = mysql_GetInttoo("gutscheine", "gUsedBy", "DatensatzID",i);
    Gutschein[i][gAktion] = mysql_GetInttoo("gutscheine", "gAktion", "DatensatzID",i);
    }
    return 1;
    }

  • Dann würde ich mehrere (22) Meldungen im Compiler bekommen, welche so aussehen (die Funktion wird noch woanders genutzt um Stuff zu laden)


    Zitat

    script.pwn(12993) : warning 202: number of arguments does not match definition

    StuffInfo[sSteuern] = mysql_GetInttoo("stuff", "Steuern", "DatensatzID");


    Edit: Das Problem mit dem nicht existierendem Code wäre somit aber gelöst

  • Du gibst ja auch nicht die maximale Parameteranzahl an.
    Schau dir mal deine Funktion dazu an, und was du geschrieben hast :good: