error 033: array must be indexed (variable "-unknown-")

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 benöige eure Hilfe. Ich bin derzeit ein bisschen drüber Pawn zu lernen. Da ich noch andere Skriptsprachen kann, viel es mir nicht allzuschwer in diese Skriptsprache einzusteigen. Doch jetzt stehe ich wirklich vor einem Problem an dem ich nicht weiterkomme. Ich habe mich in Google informiert und habe gesehen das dass Array bereits verwendet wird und ich es nicht verwenden kann. Ich hatte versucht das irgendwie anders zu lösen aber ich komme echt nicht dahinter.


    Also das ist mein Fehlercode:

    Code
    error 033: array must be indexed (variable "-unknown-")


    Zeile in dem der Fehler auftaucht:

    if (strval(rank) == "user")


    Kompletter Code (der Code steht in OnPlayerCommandText):

    if (strcmp("/rank", cmdtext, true, 10) == 0)
    {
    // Objekte
    new query1[180];
    new rank[180];
    new userRank;

    // Bekomme Informationen von der Datenbank
    format(query1, sizeof(query1), "SELECT userRank FROM users WHERE username = '%s'", playerName);
    mysql_query(query1);
    mysql_store_result();
    mysql_fetch_field("userRank", rank);
    mysql_free_result();


    if (strval(rank) == "user")
    {
    return 1;
    }

    // kill
    return 1;
    }


    playerName ist schon definiert, der Code dazu steht etwas weiter oben in der Funktion.


    Kurz zur Erklärung:
    Wenn man im Server /rank eingibt, soll einfach eine Nachricht erscheinen mit dem jeweiligen Rang.

    • Bei user: Du bist ein normaler User
    • Bei admin: Du bist ein Administrator

    Und das geht dann halt immer so weiter.
    Nachdem ich mich schon ein bisschen beschäftigt habe und mir den Fehler von dem Fehlerklärbär erklären habe lassen, kam ich trotzdem nicht dahinter. Wie gesagt, ich habe herausgefunden das das Array bereits verwendet wird und ich es so nicht verwenden kann. Doch wie ich es weiter verwenden kann weis ich nicht. Ich habe versucht den Rang von der MySQL Tabelle in eine Variable zu speichern aber so funktioniert das dann wohl auch nicht.
    Danke schonmal im Voraus :)

  • Der String 'rank' ist derzeit NULL und daher kann strval auch nichts damit anfangen. Du musst den Variablen vorher einen Wert zuweisen. Lass dir mal eben den String via printf ausgeben, dannach sollten wir mehr wissen.


    #e: Schau dir auch nochmals strval an, es formt den String in einen Integer um, daher kann strval(rank) niemals 'user' sein.

  • Danke für den Hinweis mit strval, wusste ich nämlich garnicht. Ich habe das ganze jetzt mal so umgeformt:

    if (strcmp("/rank", cmdtext, true, 10) == 0)
    {
    // Objekte
    new query1[180];
    new rank[180];
    new userRank;

    // Bekomme Informationen von der Datenbank
    format(query1, sizeof(query1), "SELECT userRank FROM users WHERE username = '%s'", playerName);
    mysql_query(query1);
    mysql_store_result();
    mysql_fetch_field("userRank", rank);
    mysql_free_result();


    printf("%s", strval(rank));


    /*
    if (strval(rank) == "user")
    {
    return 1;
    }
    */

    // kill
    return 1;
    }


    Ich habe das kompilieren und habe dann den Server gestartet. In-Game habe ich dann /rank eingegeben und in der Konsole geschaut. Da kommt lediglich eine leere Zeile raus. Durch was müsste ich dann strval ersetzten das ein String raus kommt und kein Integer ?

  • strval wandelt einen String in eine Integervariable um, da du aber Strings vergleichen willst, denn das was du ausliest(rank) ist ja bereits ein String, musst du dies wie folgt machen:


    if (strcmp("/rank", cmdtext, true, 10) == 0)
    {
    // Objekte
    new query1[180];
    new rank[180];
    new userRank;

    // Bekomme Informationen von der Datenbank
    format(query1, sizeof(query1), "SELECT userRank FROM users WHERE username = '%s'", playerName);
    mysql_query(query1);
    mysql_store_result();
    mysql_fetch_field("userRank", rank);
    mysql_free_result();


    if(!strcmp("user", rank, true))//strcmp vergleicht zwei Strings, true gibt an, ob Groß- und Kleinschreibung ingoriert werden soll.
    {
    return 1;
    }

    // kill
    return 1;
    }