Skin wird nicht abgespeichert bzw geladen..

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 Morgen, ich habe ein Problem.. und zwar wird mir die SkinID in der Datenbank [MYSQL] nicht gespeichert..
    Somit auch nicht geladen..


    enum PI //Spielerinfos
    {
    eingeloggt,
    level,
    id,
    adminlevel,
    skins
    }


    spielerspeichern(playerid)
    {
    if(SI[playerid][eingeloggt]==0)return 1;
    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i',adminlevel='%i',skins='%i',geld='%i' WHERE id='%i'",SI[playerid][level],GetPlayerMoney(playerid),SI[playerid][adminlevel],SI[playerid][skins],SI[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    public pwresponse(playerid)
    {
    new rows,fields;
    cache_get_data(rows,fields,dbhandle);
    if(rows==0)
    {
    SI[playerid][eingeloggt] = 1;
    SI[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,SI[playerid][level]);
    SI[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"geld",dbhandle));
    SI[playerid][adminlevel] = cache_get_field_content_int(0,"adminlevel",dbhandle);
    SI[playerid][skins] = cache_get_field_content_int(0,"skins",dbhandle);
    SetPlayerSkin(playerid,SI[playerid][skins]);
    }
    else
    {
    SendClientMessage(playerid,rot,"Falsches Passwort");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein","Login","Abbrechen");
    }
    return 1;
    }



    Kann mir jemand auf die Sprünge helfen?


    Gruß

  • SQL
    [15:52:34] [DEBUG] mysql_tquery - connection: 1, query: "SELECT id FROM user WHERE username='Pitcher'", callback: "CheckUser", format: "i"[15:52:34] [DEBUG] CMySQLQuery::CMySQLQuery() - constructor called[15:52:34] [DEBUG] mysql_tquery - scheduling query "SELECT id FROM user WHERE username='Pitcher'"..[15:52:34] [DEBUG] CMySQLQuery::Execute[CheckUser(i)] - starting query execution[15:52:34] [DEBUG] CMySQLQuery::Execute[CheckUser(i)] - query was successful[15:52:34] [DEBUG] CMySQLResult::CMySQLResult() - constructor called[15:52:34] [DEBUG] CMySQLQuery::Execute[CheckUser(i)] - data being passed to ProcessCallbacks()[15:52:34] [DEBUG] Calling callback "CheckUser"..[15:52:34] [DEBUG] cache_get_data - connection: 1[15:52:34] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called[15:52:34] [DEBUG] CMySQLQuery::~CMySQLQuery() - deconstructor called[15:53:08] [DEBUG] mysql_escape_string - source: "morgen", connection: 1, max_len: 35[15:53:08] [DEBUG] mysql_tquery - connection: 1, query: "SELECT * FROM user WHERE username='Pitcher' AND password=MD5('mo", callback: "pwresponse", format: "i"[15:53:08] [DEBUG] CMySQLQuery::CMySQLQuery() - constructor called[15:53:08] [DEBUG] mysql_tquery - scheduling query "SELECT * FROM user WHERE username='Pitcher' AND password=MD5('morgen')"..[15:53:08] [DEBUG] CMySQLQuery::Execute[pwresponse(i)] - starting query execution[15:53:08] [DEBUG] CMySQLQuery::Execute[pwresponse(i)] - query was successful[15:53:08] [DEBUG] CMySQLResult::CMySQLResult() - constructor called[15:53:08] [DEBUG] CMySQLQuery::Execute[pwresponse(i)] - data being passed to ProcessCallbacks()[15:53:08] [DEBUG] Calling callback "pwresponse"..[15:53:08] [DEBUG] cache_get_data - connection: 1[15:53:08] [DEBUG] cache_get_field_content_int - row: 0, field_name: "level", connection: 1[15:53:08] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('0')[15:53:08] [DEBUG] cache_get_field_content_int - row: 0, field_name: "id", connection: 1[15:53:08] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('0')[15:53:08] [DEBUG] cache_get_field_content_int - row: 0, field_name: "geld", connection: 1[15:53:08] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('0')[15:53:08] [DEBUG] cache_get_field_content_int - row: 0, field_name: "adminlevel", connection: 1[15:53:08] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('0')[15:53:08] [DEBUG] cache_get_field_content_int - row: 0, field_name: "skins", connection: 1[15:53:08] [ERROR] CMySQLResult::GetRowDataByName() - invalid row index ('0')[15:53:08] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called[15:53:08] [DEBUG] CMySQLQuery::~CMySQLQuery() - deconstructor called[15:53:15] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE user SET level='0',adminlevel='0',skins='0',geld='0' WHER", callback: "(null)", format: "(null)"[15:53:15] [DEBUG] CMySQLQuery::CMySQLQuery() - constructor called[15:53:15] [DEBUG] mysql_tquery - scheduling query "UPDATE user SET level='0',adminlevel='0',skins='0',geld='0' WHERE id='0'"..[15:53:15] [DEBUG] CMySQLQuery::Execute[()] - starting query execution[15:53:15] [DEBUG] CMySQLQuery::Execute[()] - query was successful[15:53:15] [DEBUG] CMySQLQuery::Execute[()] - no callback specified, skipping result saving[15:53:15] [DEBUG] CMySQLQuery::Execute[()] - data being passed to ProcessCallbacks()[15:53:15] [DEBUG] CMySQLQuery::~CMySQLQuery() - deconstructor called



    Bisschen lang sorry..


    Gruß

  • Das was Jeffry gepostet hat ist schon richtig, dein Fehler liegt wo anders , du verschlüsselst das Passwort direkt mit der MD5 Funktion , ist den das Passwort in der Datenbank auch gehasht ?


    Poste mal mal den Code der mit dem SQL Befehl INSERT zu tun hat.

  • ist den das Passwort in der Datenbank auch gehasht ?

    Ja wird gehasht laut Tabelle..


    new rname[MAX_PLAYER_NAME],query[128],password[35];
    GetPlayerName(playerid,rname,sizeof(rname));
    if(strlen(inputtext)>3)
    {
    mysql_escape_string(inputtext,password,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s',MD5('%s'))",rname,password);
    mysql_function_query(dbhandle,query,false,"","");

    }

  • Das siehst soweit gut aus.
    Bist du sicher, dass das Passwort von "Pitcher" auch "morgen" ist?


    Registriere mal ein neues Konto und schau dir den MD5 Wert in der Datenbank an. Vergleiche ihn mit dem was hier ausgegeben wird: http://www.md5-generator.de/
    Ist das das Gleiche?


    Alternativ, nimm zum Testen das MD5 mal raus und schaue ob es dann geht (nur zum testen).


    Ups sorry, mit nem neuen Account kommt es nicht..
    Da Pitcher bevor ich MD5 Werte eingebaut habe existiert hat..
    Jedoch wird mein Skin in der DB nicht abgespeichert..


    Gruß

  • Hier sollte er normal abgespeichert werden.
    Gruß


    spielerspeichern(playerid)
    {
    if(SI[playerid][eingeloggt]==0)return 1;
    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i',adminlevel='%i',skins='%i',geld='%i' WHERE id='%i'",SI[playerid][level],GetPlayerMoney(playerid),SI[playerid][adminlevel],SI[playerid][skins],SI[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }

  • Das passt soweit. Das einzige was sein kann ist, dass die Variable des Skins noch auf 0 ist. Wie setzt du dem Spieler denn seinen Skin? Nur mit SetPlayerSkin oder setzt du dort die Variable auch auf die Skin ID? Wenn nicht, mach das.



    Shinoda:
    Adlerauge! :good:
    Peinlich, dass man manchmal den Wald vor lauter Bäumen nicht sieht. Das ist mir überhaupt nicht in den Sinn gekommen, dass die Reihenfolge falsch sein könnte. Danke für die Korrektur.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • spielerspeichern(playerid){
    if(SI[playerid][eingeloggt]==0)return 1;
    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i',adminlevel='%i',skins='%i',geld='%i' WHERE id='%i'",SI[playerid][level],SI[playerid][adminlevel],SI[playerid][skins],GetPlayerMoney(playerid),SI[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Die Reihenfolge deiner Variablen war falsch. Du hast das Geld des Spielers in das Adminlevel gespeichert, das Adminlevel hast du in den Skin gespeichert usw...
    Ich habe deine Funktion hier überarbeitet.

  • ok soweit so gut, jetzt hab ich aber leider immernoch ein problem, in meiner MYSQL Datenbank steht bei Skin immer noch "0"


    Sobald ich mich registrier & einlogge, spawn ich mit dem CJ skin, was ja klar ist da in der Datenbank bei Skin "0" steht.
    Jetzt wollte ich fragen wie es geht, wenn ich am anfang bei der skinauswahl switche, damit ich auch mit dem Skin beim auswählen spawne..
    Bin total durcheinander sorry :(


    Bei OnplayerConnect "SkinID" setzen oder wie?


    if(response)
    {
    new rname[MAX_PLAYER_NAME],query[128],password[35];
    GetPlayerName(playerid,rname,sizeof(rname));
    if(strlen(inputtext)>0)
    {
    mysql_escape_string(inputtext,password,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password=MD5('%s')",rname,password);
    mysql_function_query(dbhandle,query,true,"pwresponse","i",playerid); // hier wird ja "pwresponse" aufgerufen normal
    }
    else
    {
    SendClientMessage(playerid,rot,"Gib bitte dein Passwort ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein","Login","Abbrechen");
    }
    }

  • Da ich nicht weiß wie dein script aufgebaut ist müsstest du das glaube trotzdem irgwie haben


    public OnPlayerRegister(playerid)

    und da kannst du dann einfach dies einfügen
    new randM = random(sizeof(SkinR));
    new Skin1 = SkinR[randM];
    SetSpawnInfo( playerid, 0, Skin1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
    SI[playerid][skins] = Skin1;


    und das dann nach ganz oben vielleicht unter die enums :)
    new SkinR[] = {
    101, 15, 156, 17, 170, 180, 182, 183, 184, 185,
    188, 19, 20, 206, 21, 22, 210, 221, 222, 227,
    228, 234, 235, 236, 24, 25, 250, 261, 28, 35,
    37, 38, 36, 44, 43, 46, 262, 60, 59, 58,
    229, 67, 7, 72, 94, 95, 98
    };


    Das sind ein paar Random skins die dann kommen werden nach dem Register
    musst du mal gucken ob es so Klappt oder nicht


    MfG
    Jonny

  • Ich habe nur meinen Register Dialog mit MYSQL.
    Die Skins kann ich nun auswählen, werden jedoch immer noch nicht in der Datenbank abgespeichert :(


    Ich muss ja einen Skin auch setzen wenn der Spieler joint bzw registriert, weiß jedoch nicht wie ich das schreiben soll :(