array must be indexed

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 :)


    Habe hier ein kleines problem, und zwar habe ich ein login script (nach anleitung) gebastelt, allerdings erstmal ohne passwort falls sich jemand wundert^^. Funktioniert alles super.......Spieler .ini wird erstellt,daten werden in der Spieler .ini gespeichert und auch beim connecten wieder aus der ini geladen sofern der Playername übereinstimmt. Jetzt wollte ich "jailed" mitspeichern damit jemand nach einem reconnect auch wieder im Knast landet falls er vorher drin war aber bekomme immer 2 Errors. Bin noch nicht so der ultrascripter und habe mich die ganze Nacht mit dini beschäftigt(dann noch die sache mit PlayerInfo erstellen) da ich davon bisher 0 ahnung hatte und bin auch recht weit gekommen nur bei der sache jetzt weiß ich absolut nicht weiter.



    Kann mir jemand sagen woran das liegt ?, sitze nun schon 4 Stunden nur an der jailedgeschichte :/



    xxxxx.pwn( 239 ) : error 033: array must be indexed (variable "jailed")
    xxxxx.pwn( 258 ): error 033: array must be indexed (variable "jailed")



    enum info
    {
    Level,
    Skin,
    Geld,
    Eingesperrt,
    }



    new jailed[MAX_PLAYERS];
    new save[128];
    new pInfo[MAX_PLAYERS][info];




    public OnPlayerConnect(playerid)
    {
    new spieler[MAX_PLAYER_NAME];
    GetPlayerName(playerid,spieler,sizeof(spieler));
    format(save, sizeof(save),"Spieler/%s.ini",spieler);
    if(!dini_Exists(save))
    {
    dini_Create(save);
    }
    else
    {
    if(dini_Exists(save))
    {
    new name[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"/Spieler/%s.ini",name);
    if(dini_Exists(save))
    {
    SetPlayerScore(playerid,dini_Int(save,"Level"));
    SetPlayerSkin(playerid,dini_Int(save,"Skin"));
    GivePlayerMoney(playerid,dini_Int(save,"Geld"));
    pInfo[playerid][jailed] =dini_Int(save,"Eingesperrt"); // <<<<< 239
    }}}
    return 1;
    }


    {
    new name[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"/Spieler/%s.ini",name);
    if(dini_Exists(save))
    {
    dini_IntSet(save,"Level",GetPlayerScore(playerid));
    dini_IntSet(save,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(save,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(save,"Eingesperrt",pInfo[playerid][jailed])// <<<<<258
    }
    return 1;
    }

    2 Mal editiert, zuletzt von Traxter ()

  • Logisch.


    Du hast nur einen eindimensionalen Array erstellt, in deinem Beispiel aber benützt du einen zweidimensionalen. Kann so nicht funktionieren. ;)


    Du musst das "pInfo[playerid][jailed]" einfach in deinem konkreten Fall in "jailed[playerid]" ändern. Dann sollte es funktionieren.


    PS:


    Wenn du einen zweidimensionalen Array in der Form in der du ihn wahrscheinlich eigentlich wolltest, benützen willst, machs per enum-Struktur.
    Genaueres zur Verwendung von "enum" gibts hier: Pawn Syntax & Keywords (by DMA)

  • Mein Post gilt immernoch.


    Du hast mit "new jailed[MAX_PLAYERS]" einen Array erstellt, den kannst du nicht einfach in einen anderen Array integrieren - Soweit ich weiß geht das nicht bzw. nur bedingt.


    Du könntest natürlich das "new jailed..." löschen und in der enum-Struktur "jailed" hinzufügen. Dann würde es funktionieren.

  • Ah ok, nun glaube ich zu wissen was genau du meinst.Habe mir auch mal den Beitrag von dem link durchgelesen über die enum strukturen und mit deinen posts kombiniert passt das.


    Jetzt schwirren mir schon ein paar neue möglichkeiten durch den Kopf.Werde es gleich mal ausprobieren :)