array index out of bounds Hilfe

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 zusammen


    in diesem Bugsystem wird folgender Dialog aufgerufen

    gesamter Code
    [pwnif(dialogid == DIALOG_BUG_MELDEN)
    {
    new string[128];
    if(strlen(inputtext) >= 5)
    {
    for(new i=0; i<MAX_BUGS; i++)
    {
    if(strlen(Bugs[i]) < 5)
    {
    format(Bugs[i], MAX_BUG_LEN, inputtext);
    SendClientMessage(playerid, 0xFFFFFFFF, "Bug gemeldet. Danke!");
    format(string,sizeof(string),"%d",i);
    for(new u=0; u<MAX_PLAYERS; u++)
    {
    PlayerTextDrawSetString(u,Bugs_2[u],string);
    printf("Aktuelle Bugs: %d",string);
    }
    SetPVarString(playerid,"Bugmlder",inputtext);
    printf("Bugs = %i",Bugs);
    savebugs(playerid,inputtext);
    BUGGS[100] ++;
    return 1; //Es wird beendet, Bug ist eingetragen
    }
    }
    SendClientMessage(playerid, 0xFF0000FF, "ERROR: Es ist leider kein Platz für einen Bug mehr frei!.");
    }][/pwn]


    ich möchte gerne die "Bugs" bei jeder meldung um 1 erhöhen


    leider macht er mir bei dieser Zeile die Meldung


    [pwn=Zeile5247]BUGGS[100] ++;[/pwn]


    dazu auch die define zeile von oben


    [pwn=define zeile]new BUGGS[100];[/pwn]


    diese meldung:


    array index out of bounds (variable"BUGGS")



    Vielleicht könnt ihr mir helfen



    MFG

  • Vielleicht könnt ihr mir helfen


    Schreib das alles mal so:


    //Als erstes schreibe deine Variable so:
    new Bugs[100][MAX_BUG_LEN]; //MAX_BUG_LEN muss oberhalb definiert sein!


    //Und dann den Code so:
    if(dialogid == DIALOG_BUG_MELDEN)
    {
    if(strlen(inputtext) < 5) return SendClientMessage(playerid, 0xFF0000FF,"Dein Bug-Report ist zu kurz!");
    static b_count;
    if(b_count == sizeof Bugs) return SendClientMessage(playerid, 0xFF0000FF, "ERROR: Es ist leider kein Platz für einen Bug mehr frei!.");
    new string[11];
    format(Bugs[b_count], MAX_BUG_LEN, inputtext);
    SendClientMessage(playerid, 0xFFFFFFFF, "Bug gemeldet. Danke!");
    valstr(string,b_count);
    for(new u=0; u<MAX_PLAYERS; u++) PlayerTextDrawSetString(u,Bugs_2,string);
    SetPVarString(playerid,"Bugmlder",inputtext);
    savebugs(playerid,inputtext);
    b_count++;
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • dialog Login
    if(dialogid == DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[256],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 password='%s'",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    else
    {
    //KEINE EINGABE
    SendClientMessage(playerid,RED,"Gib bitte dein Passwort ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}4RL-Reallife: {FFFFFF}Einloggen","Gib bitte dein Passwort ein","Login","Abbruch");

    dialog Login
    }
    }
    else
    {
    SelectTextDraw(playerid, 0xFFA000FF);
    return 1;
    }
    return 1;
    }


    passwortabfrage
    public OnPasswordResponse(playerid)
    {
    print("1");
    new num_fields,num_rows,string[256],stringend[1024];
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort richtig
    sInfo[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,CLGREEN,"Du hast dich erfolgreich eingeloggt");
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);


    SetPlayerMoney(playerid,cache_get_field_content_int(0,"Money",dbhandle));

    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle) ;
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle) ;
    sInfo[playerid][Payday] = cache_get_field_content_int(0,"Payday",dbhandle);
    sInfo[playerid][PaydayTime] = cache_get_field_content_int(0,"PaydayTime",dbhandle);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][rollerschein] = cache_get_field_name(0,"rollerschein",dbhandle);
    sInfo[playerid][autoschein] = cache_get_field_name(0,"autoschein",dbhandle);
    //sInfo[playerid][premiumSys] = cache_get_field_content_int(0, "PremSys", dbhandle);
    sInfo[playerid][premiumzeit] = cache_get_field_content_int(0, "premiumzeitl", dbhandle);
    sInfo[playerid][premiumzeit] = cache_get_field_content_int(0, "premiumzeits", dbhandle);
    sInfo[playerid][e_mail] = cache_get_field_name(0,"email",dbhandle);

    //auslesen aus der datenbank
    printf("Es wurden alle Daten geladen");
    loadPlayerCars(playerid);
    TextDrawHideForPlayer(playerid, Textdraw0);
    TextDrawHideForPlayer(playerid, Textdraw1);
    TextDrawHideForPlayer(playerid, Textdraw2);
    TextDrawHideForPlayer(playerid, Textdraw3);
    TextDrawHideForPlayer(playerid, Textdraw3_1);
    TextDrawHideForPlayer(playerid, Textdraw4);
    TextDrawHideForPlayer(playerid, Textdraw5);
    TextDrawHideForPlayer(playerid, Textdraw6);
    TextDrawHideForPlayer(playerid, Textdraw7);
    TextDrawHideForPlayer(playerid, Textdraw8);
    TogglePlayerSpectating(playerid, 0);
    CancelSelectTextDraw(playerid);
    new query[256];

    passwortabfrage
    mysql_escape_string(getPlayerName(playerid), getPlayerName(playerid));
    format(query, sizeof(query), "SELECT * FROM gebannt WHERE Name='%s'", getPlayerName(playerid));
    mysql_function_query(dbhandle, query, true, "BanCheck", "i", playerid);
    SetSpawnInfo (playerid, 0, 0,0,593.8750,-1243.0969,18.0399,0,0,0,0,0,0);

    print("2");

    // SpawnPlayer(playerid);

    }

    else
    {
    //Passwort falsch
    sInfo[playerid][pwfalsch]+=1;//bin
    format(string,sizeof(string),"Das eingegebene Passwort ist falsch. Versuch %i/3",sInfo[playerid][pwfalsch]);
    SendClientMessage(playerid,RED,string);
    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",SpielerName(playerid),playerid);
    strcat(stringend,string);
    format(string,sizeof(string),"{FFFFFF}Bitte gebe unten dein Passwort ein.\n\n{FF1400}Hinweis: Du hast dein Passwort schon {FFFFFF}%i/3 {FF1400}mal falsch eingetragen.",sInfo[playerid][pwfalsch]);
    strcat(stringend,string);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{37CD00}4RL-Reallife: {FFFFFF}Einloggen",stringend,"Login","Abbruch");
    strdel(stringend,0,sizeof(stringend));
    strdel(string,0,sizeof(stringend));
    print("5");
    SendClientMessage(playerid,RED,"Bei der dritten falschen Passworteingabe wirst du vom Server gekickt.");
    if(sInfo[playerid][pwfalsch]>=3)
    {
    SendClientMessage(playerid,RED,"Da du zu oft ein falsches Passwort eingetragen hast, wirst du nun vom Server gekickt.");
    KickPlayer(playerid);
    print("4");
    }
    }
    return 1;
    }



    wenn ich auf "Login" klicke passiert gar nix

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Kommen die prints die du bei OnPasswordResponse drin hast wenn du dich einloggen willst?
    Wenn nein, ändere:
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password='%s'",name,passwort);
    zu:
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password='%s'",name,passwort);
    printf("query: %s", query);
    Was steht im Log, wenn du dich einloggst?


    Wenn die prints doch kommen, dann schalte mal den MySQL Debug ein und poste was im MySQL Log steht. Wie du das machst steht hier in Kapitel 1.4: Tipps: Scripting-Probleme richtig erklären

  • Ok, setze mal nach:
    //Bug melden
    einen print:
    printf("dialogid = %d / %d / %d", dialogid, DIALOG_LOGIN, response);


    Und dann vor:
    if(dialogid == DIALOG_LOGIN)
    das hier:
    printf("vor: dialogid = %d / %d response: %d", dialogid, DIALOG_LOGIN, response);


    Was steht dann im Log?

  • Jetzt hast du den Code ja wieder weg gemacht, kanns mir nicht nochmal anschauen. Aber was du machen kannst, was auf jeden Fall geht, ziehe den Login Dialog Teil vor den Bug Dialog nach ganz oben.


    Schau auch mal nach, ob du vielleicht zwei mal einen Dialog mit der ID 1 deklariert hast.