Index eines Array als String angeben?

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
  • Hey Leute,


    Ich brauche mal eure Hilfe. Undszwar stehe ich vor dem Problem, dass ich extern ein array modifizieren will. Nun wollte ich fragen: Gibt es irgendeine Möglichkeit den index eines arrays als String anzugeben? Hier ein Beispiel wie so ein Array bei uns aussieht:



    enum cDaten
    {
    (...)
    aktien
    }
    new Config[cDaten];



    Ich möchte nun dass man per Befehl den Wert Conig[aktien] bearbeiten kann. Meine Frage lautet also jetzt genau: ist es möglich zwischen die zwei eckigen Klammern eine Variable zu setzen? also quasi so:
    string = "aktien";
    Config[string] = 1;



    Also so wie ichs da beispielhaft hingeschrieben habe gehts auf jeden Fall schonmal nicht. Vieleicht kennt ihr da ja eine Lösung.


    MfG
    Hammerboy

  • Wie XeroX schon gesagt hat, geht da so direkt nicht, da über Zahlen zugegriffen werden muss.
    Allerdings gibt es zwei Möglichkeiten, das etwas anders zu realisieren.


    1.)
    Wenn es sich um Spieler-Werte handelt, dann könnte man es über PVars regeln, sprich so:
    string = "aktien";
    SetPVarInt(playerid, string, 1);
    Das geht allerdings nur für Spieler die online sind, sprich man könnte das zum Setzen von Stats oder ähnlichem Nutzen.


    2.)
    Alternativ dazu könnte man es so realisieren, für alle Arrays, allerdings ist das natürlich nicht dynamisch.
    new cDaten:zugriff;
    if(!strcmp(string, "aktien", true)) zugriff = aktien;
    else if(!strcmp(string, "devisen", true)) zugriff = devisen;
    //...
    else { } //ggf. abfangen
    Config[zugriff] = 1;

  • Beitrag von Hammerboy ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Okay vielen Dank euch! Schade
    Habe das nun so umgesetzt, leider setzt der Server die variable nur bei der Config.. irgenwas kann mit dem target nicht stimmen ich raff aber einfach nicht was...
    Die Propertys werden in OngamemodeInit auf die jeweilige Indexnummer gesetzt, dies funktioniert auch(siehe Ausgabe). Trotzdem werden die werte, sobalt ein target dabei ist nicht gesetzt...


    Ausgabe Lautet:
    Bei "/setstat config 0 staatskassesave 1000000": Config[staatskassesave] auf 1000000 gesetzt! -> Wird wirklich gesetzt
    Bei "/setstat spielerinfo 0 adminlevel 0": SpielerInfo[0][adminlevel(6)] auf 0 gesetzt! -> es wird nichts gesetzt...(ich bin definitiv id 0 und das ist definitiv die 6. Arrayvariable)

    • Kannst mal dein spielerinfo enum posten ?.

    Ebenfalls kannst du den befehl mit debug Informationen spicken via printf


    Mir ist noch was nettes eingefallen zu deinem thema du kannst dir auch ein define anlegen.


    #define %0['%1']=%2 setvalue(%0,%1,%2)


    stock setValue(array[], string[], val) {
    ....
    }


    An sich kann man den ersten und letzten parameter auch mit {Float:,_}... ersetzen und via getArg auslesen
    http://forum.sa-mp.com/showthread.php?t=77000

  • Die Debug Infos kommen ja direkt in den Chat :D


    Wichtige Info noch: Es wird auch keine Variable davor oder dahinter auf 0 gestzt, also nen Zahlendreher kanns auch nicht sein.. Crashdetect sagt aber auch nichts...

  • Der Grund wieso du das nicht so machen kannst liegt an den Strings und daran das Pawn bei der nummerierung des enums den String nicht als ganzes sieht


    sInfo:0 = wbbid
    sInfo:1 = spieler[0]
    sInfo:2 = spieler[1]
    ...
    sInfo:24 = spieler[23]
    sInfo:25 = passwort[0]