new data[128]; macht Probleme?!

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
  • Hallo leute!


    Bin gerade an nem Scriptupdate dran. Das ältere Script funzt wunderbar.
    Am Loginsystem hab ich nix geändert.
    Beim Scriptupdate geht der beim Login immer auf OnPlayerRequestClass, statt sich richtig einzuloggen.
    Ich hab rausgefunden (mit "debuggen" => print("1")), das der ab dem Punkt dahin springt: new data[128];
    Als ob er das irgendwie nicht erkennen kann.. Ich hab das mal so getestet:



    print("1");
    new playername[MAX_PLAYER_NAME];
    print("1");
    new sqlid;
    print("1");
    new string[128];
    print("1");
    new data[128];
    print("1");


    Die ersten vier einsen zeigt er in der Konsole an, das letzte 1 nicht!!


    Hat jemand ne idee?


    MFG

  • Poste doch mal bitte was davor und danach steht.
    Aber du kannst schonmal versuchen dein new Data[128]; zu verändern. Sprich setz es mal auf new Data[64];
    Ich hatte mal das Problem, dass in meiner Login Funktion mehrere Strings mit zu hoher Zeichenlänge definiert waren. Alle mit 128 und 256. Hab ein paar runter gesetzt und dann hat es funktioniert. Ist auch genauso hängen geblieben an einem Punkt.

  • Trooper: sehr hilfreich, wenn es nicht daran liegt, wieso gehts dann dort nicht weiter?


    Also so siehts bei mir aus:


    public OnPlayerConnect(playerid)
    {
    new sqlaccountstatus = MySQLCheckAccount(plname);
    if(sqlaccountstatus != 0)
    {
    gPlayerAccount[playerid] = 1;
    Registriert[playerid] = 1;
    PlayerInfo[playerid][pSQLID] = sqlaccountstatus;
    ShowPlayerDialog(playerid,LogPWDialog,DIALOG_STYLE_INPUT,"Einloggen","Account gefunden.\nBitte gib dein Passwort ein:","Einloggen","Abbrechen");
    return 1;
    }
    else
    {
    gPlayerAccount[playerid] = 0;
    Registriert[playerid] = 0;
    return 1;
    }
    }


    Das funzt alles auch so wie es soll..


    so, nun logge ich mich ein, dann kommt der hier hin:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == LogPWDialog)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,COLOR_RED,"Ohne Login kannst du hier nicht spielen!");
    Kick(playerid);
    return 0;
    }
    if(response == 1)
    {
    MySQLLogin(playerid,inputtext);
    return 1;
    }
    }
    return 0;
    }


    Das funzt auch noch, also er kommt zum Login:


    stock MySQLLogin(playerid, password[])
    {
    MySQLCheck();
    new playername[MAX_PLAYER_NAME];
    new sqlid;
    new string[128];
    new data[32]; //Hier geht er nich mehr weiter!!
    GetPlayerName(playerid, playername, sizeof(playername));
    PlayerInfo[playerid][pSQLID] = MySQLCheckAccount(playername);
    mysql_query("SELECT * FROM user");
    mysql_store_result();
    while(mysql_fetch_row_data())
    {
    mysql_fetch_field("ID",data);sqlid=strval(data);
    if(sqlid == PlayerInfo[playerid][pSQLID])
    {
    mysql_fetch_field("Password",data);
    if(!strcmp(data,MD5_Hash(password),false))
    {
    print("1");
    mysql_fetch_field("ID",data);PlayerInfo[playerid][pSQLID] = strval(data);
    mysql_fetch_field("Name",data);strmid(PlayerInfo[playerid][pName], data, 0, strlen(data), 255);
    strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
    //-----------------------------
    }
    else
    {
    gPlayerLogTries[playerid] += 1;
    if(gPlayerLogTries[playerid] == 2) { SendClientMessage(playerid, COLOR_RED, "Noch 2-Mal das Passwort falsch eingeben, und du wirst gebannt!"); }
    if(gPlayerLogTries[playerid] == 3) { SendClientMessage(playerid, COLOR_RED, "Noch 1-Mal das Passwort falsch eingeben, und du wirst gebannt!"); }
    if(gPlayerLogTries[playerid] == 4)
    {
    new year,month,day;
    getdate(year, month, day);
    SendClientMessage(playerid, COLOR_RED, "Wir haben dich gewarnt, du wurdest gebannt!");
    PlayerInfo[playerid][pAdmin] = PlayerInfo[playerid][pLevel];
    PlayerInfo[playerid][pLevel] = -999;
    format(string, sizeof(string), "Login: %s wurde gebannt, Grund: 4 fehlgeschlagene Loginversuche (%d/%d/d%)", playername, day, month, year);
    Ban(playerid);
    return 1;
    }
    ShowPlayerDialog(playerid,LogPWDialog,DIALOG_STYLE_INPUT,"Falsches Passwort","Bitte gib dein korrektes Passwort ein:","Einloggen","Abbrechen");
    return 1;
    }
    }
    }


    hmm zum "Falschen Passwort" kommt er nicht einmal..


    //edit: Shinoda: ich hab das data auf die strinlänge 32 und 64 runtergesetzt.. geht nicht.. idee?
    //edit2: also, egal was ich mit dem data mache, es geht nicht!! auch wenn ich statt "data" nur die variable "string" nehme, gehts nicht..
    //edit3: naja, habs jetzt.. bei OnDialogResponse war die variable zu hoch gesetzt..