MYSQL-Account speichern

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 habe zwar jetzt das save-system für die accounts aber ich habe ein anderes problem.


    Das neue Problem ist:


    Wenn ich mich Registriere ist alles da sobald ich mich auslogge und wieder einlogge dann steht Level= 0 Geld= 0


    Aber wenn ich was kaufe bekomme ich den wert nach dem Kaufen. Das will ich zwar auch aber ich will auch wenn Spieler sich neu Registrieren und einloggen und direkt wieder raus gehen auch gespeichert werdern.


    Ich poste mal das Save-System wo nur die Spieler gespeichert werden wenn die etwas verkauft haben. Ich will auch das die wenn die Geld bekommen haben und sich dann ausloggen auch abgespeichert werden.



    PWN-Code:


    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0) return 1;
    //speichern level,adminlevel,geld,id
    new query[128];
    format(query,sizeof(query),"UPDATE user SET Adminlevel='%i' ,money='%i' ,level='%i',id='%i' WHERE id='%i'",sInfo[playerid][Adminlevel],GetPlayerMoney(playerid),GetPlayerScore(playerid),sInfo[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Ich hoffe man kann mir helfen

  • Jeffry das ist ja keine Gang Zone was ich laden lasse. Es geht einfach darum das er die Accounts nach dem ersten Login nicht speichert wo die Spieler Level= 1 + Geld= 1500 bekommen nicht abspeichert. Erst wenn man sich was gekauft hat wird ein Spieler abgespeichert und das darf normal nicht so sein.


  • Ich hoffe ihr könnt damit was anfangen

  • public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    //Login Register System
    if(dialogid == DIALOG_REGISTER)
    {
    {
    if(!response){
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Registrierung war nicht erfolgreich\nBitte registrieren sie sich um auf dem Server zu spielen.","Absenden","Abbrechen");
    return 1;
    }
    {
    //eingegebenes Passwort
    new name[MAX_PLAYER_NAME],passwort[35],query[256];
    GetPlayerName(playerid,name,sizeof(name));

    if(strlen(inputtext)>3)
    {
    //registrierungsfunktion
    SetPlayerScore(playerid,1);
    sInfo[playerid][level] = 1;
    GivePlayerMoney(playerid,15000);
    sInfo[playerid][geld] = 15000;
    sInfo[playerid][eingeloggt] = 1;
    //
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
    printf(query);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;

    }
    else
    {

    return 1;
    }
    }
    }
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response)
    {
    new name[MAX_PLAYER_NAME],string[128],stringend[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"{FFFFFF}Der Accountname {37CD00}%s {FFFFFF}wurde gefunden.\nUm mit den Spielen zu beginnen, musst du dich einloggen.\nDu hast die ID: {37CD00}%i\n",name,playerid);
    strcat(stringend,string);
    format(string,sizeof(string),"{FFFFFF}Bitte gebe unten dein Passwort ein.");
    strcat(stringend,string);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}Login System: {FFFFFF}Einloggen",stringend,"Login","Abbruch");
    strdel(stringend,0,sizeof(stringend));
    strdel(string,0,sizeof(string));
    return 1;
    }
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort='%s'",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    return 1;
    }
    }

    return 1;
    }

    SetPlayerMoney(playerid,money)
    {
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,money);
    return 1;
    }

    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1) //Passwort richtig
    {
    sInfo[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,helbau,"Du hast dich erfolgreich eingeloggt!");
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][Adminlevel] = cache_get_field_content_int(0,"Adminlevel",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid] [id] = cache_get_field_content_int(0,"id",dbhandle);

    }
    else //Passwort falsch
    {


    }
    return 1;
    }

  • Schreibe den Teil so:
    if(strlen(inputtext)>3)
    {
    //registrierungsfunktion
    SetPlayerScore(playerid,1);
    sInfo[playerid][level] = 1;
    GivePlayerMoney(playerid,15000);
    sInfo[playerid][geld] = 15000;
    sInfo[playerid][eingeloggt] = 1;
    //
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
    printf(query);
    mysql_function_query(dbhandle,query,false,"","");
    savePlayer(playerid); //Hinzugefügt
    return 1;
    }

  • ka wo if(strlen(inputtext)>3)
    {
    //registrierungsfunktion
    SetPlayerScore(playerid,1);
    sInfo[playerid][level] = 1;
    GivePlayerMoney(playerid,15000);
    sInfo[playerid][geld] = 15000;
    sInfo[playerid][eingeloggt] = 1;
    //
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
    printf(query);
    mysql_function_query(dbhandle,query,false,"","");
    savePlayer(playerid); //Hinzugefügt
    return 1;
    } das hingehört

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ich habe es jetzt so gemacht







    //Includes
    #include <a_samp>
    #include <ocmd.inc>
    #include <sscanf2.inc>
    #include <a_mysql>

    //definere mysql

    #define db_host "localhost"
    #define db_user "root"
    #define db_pass ""
    #define db_db "samp"



    //definierte Farben
    #define rot 0xFF3200FF
    #define grün 0x05FF00FF
    #define blau 0x0000FFFF
    #define grau 0x505050FF
    #define helbau 0x7DB3C3FF
    #define helgruen 0xABD94EFF
    #define Adminproduktion 1
    //Adminlevels

    if(strlen(inputtext)>3)
    {
    //registrierungsfunktion
    SetPlayerScore(playerid,1);
    sInfo[playerid][level] = 1;
    GivePlayerMoney(playerid,15000);
    sInfo[playerid][geld] = 15000;
    sInfo[playerid][eingeloggt] = 1;
    //
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
    printf(query);
    mysql_function_query(dbhandle,query,false,"","");
    savePlayer(playerid); //Hinzugefügt
    return 1;
    }




    //undef
    #undef MAX_PLAYERS
    #define MAX_PLAYER 15


    //Globale Variablen

    new dbhandle;
    //Forwards

    forward OnUserCheck(playerid);
    forward OnPasswordResponse(playerid);
    forward Admincarproduktion(playerid,c_x,c_y,c_z,vID);
    enum
    {
    DIALOG_REGISTER,
    DIALOG_LOGIN,

    };
    //enum einstellen:
    enum pEnum
    {
    NAME[MAX_PLAYER_NAME],
    level,
    eingeloggt,
    geld,
    Adminlevel,
    id
    };

    new sInfo[MAX_PLAYER][pEnum];




    Fehler

    Code
    lernen.p(25) : error 010: invalid function or declaration
    lernen.p(28) : error 021: symbol already defined: "SetPlayerScore"
    lernen.p(34) : error 021: symbol already defined: "mysql_escape_string"
    lernen.p(39) : error 010: invalid function or declaration
  • fehler meldung:




    Code
    lernen.p(378) : warning 225: unreachable code
    lernen.p(378) : warning 217: loose indentation
    lernen.p(387) : error 017: undefined symbol "passwort"
    lernen.p(388) : error 017: undefined symbol "query"
    lernen.p(388) : error 017: undefined symbol "query"
    lernen.p(388) : error 029: invalid expression, assumed zero
    lernen.p(388) : fatal error 107: too many error messages on one line
  • public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    //Login Register System
    if(dialogid == DIALOG_REGISTER)
    {
    {
    if(!response)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Registrierung war nicht erfolgreich\nBitte registrieren sie sich um auf dem Server zu spielen.","Absenden","Abbrechen");
    return 1;
    }
    {
    //eingegebenes Passwort
    new name[MAX_PLAYER_NAME],passwort[35],query[256];
    GetPlayerName(playerid,name,sizeof(name));

    if(strlen(inputtext)>3)
    {
    //registrierungsfunktion
    SetPlayerScore(playerid,1);
    sInfo[playerid][level] = 1;
    GivePlayerMoney(playerid,15000);
    sInfo[playerid][geld] = 15000;
    sInfo[playerid][eingeloggt] = 1;
    //
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
    printf(query);
    mysql_function_query(dbhandle,query,false,"","");
    savePlayer(playerid); //Hinzugefügt
    return 1;

    }
    else
    {

    return 1;
    }
    }
    }
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response)
    {
    new name[MAX_PLAYER_NAME],string[128],stringend[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"{FFFFFF}Der Accountname {37CD00}%s {FFFFFF}wurde gefunden.\nUm mit den Spielen zu beginnen, musst du dich einloggen.\nDu hast die ID: {37CD00}%i\n",name,playerid);
    strcat(stringend,string);
    format(string,sizeof(string),"{FFFFFF}Bitte gebe unten dein Passwort ein.");
    strcat(stringend,string);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}Login System: {FFFFFF}Einloggen",stringend,"Login","Abbruch");
    strdel(stringend,0,sizeof(stringend));
    strdel(string,0,sizeof(string));
    return 1;
    }
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort='%s'",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    return 1;
    }

    }

    return 1;
    }


    Einfach dein gesamtes OnDialogResponse damit ersetzen.

  • Ich habe das so wie du gemacht aber jetzt kommt folgendes in der Mysql.log datei:




  • Hier beweise das es selbst mit neuen account nicht geht.











  • Lag daran, dass du die Datenbank ID laut Log nirgends ausließt.


    Mache es so:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    //Login Register System
    if(dialogid == DIALOG_REGISTER)
    {
    {
    if(!response)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Registrierung war nicht erfolgreich\nBitte registrieren sie sich um auf dem Server zu spielen.","Absenden","Abbrechen");
    return 1;
    }
    {
    //eingegebenes Passwort
    new name[MAX_PLAYER_NAME],passwort[35],query[256];
    GetPlayerName(playerid,name,sizeof(name));

    if(strlen(inputtext)>3)
    {
    //registrierungsfunktion
    SetPlayerScore(playerid,1);
    sInfo[playerid][level] = 1;
    GivePlayerMoney(playerid,15000);
    sInfo[playerid][geld] = 15000;
    sInfo[playerid][eingeloggt] = 1;
    //
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,passwort) VALUES ('%s','%s')",name,inputtext);
    printf(query);
    mysql_function_query(dbhandle,query,false,"OnPlayerRegister","d",playerid);
    return 1;

    }
    else
    {

    return 1;
    }
    }
    }
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response)
    {
    new name[MAX_PLAYER_NAME],string[128],stringend[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"{FFFFFF}Der Accountname {37CD00}%s {FFFFFF}wurde gefunden.\nUm mit den Spielen zu beginnen, musst du dich einloggen.\nDu hast die ID: {37CD00}%i\n",name,playerid);
    strcat(stringend,string);
    format(string,sizeof(string),"{FFFFFF}Bitte gebe unten dein Passwort ein.");
    strcat(stringend,string);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}Login System: {FFFFFF}Einloggen",stringend,"Login","Abbruch");
    strdel(stringend,0,sizeof(stringend));
    strdel(string,0,sizeof(string));
    return 1;
    }
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort='%s'",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    return 1;
    }

    }

    return 1;
    }


    Und dann füge das hier noch drunter dazu:
    forward OnPlayerRegister(playerid);
    public OnPlayerRegister(playerid)
    {
    sInfo[playerid][id] = cache_insert_id();
    savePlayer(playerid);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen