Enum Frage

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 habe mich gerade mit enums versucht, aber komme irgendwie nicht weit und
    es wäre nett wenn ihr mir helfen könntet, also wenn ich was Kaufe verschwindet keine Ware und
    ich weis nicht woran es liegt...


    Mein Code:
    Oben im Script:

    enum bLaden
    {
    LadenHandy,
    LadenKopfhorer,
    LadenGPS,
    LadenHandykarte,
    }


    new Laden[5][bLaden];



    Die Stocks und der TestBefehl

    stock LadenRegister()
    {
    new LadenX[100];
    format(LadenX,sizeof(LadenX),"/Läden/ElektroLaden1.txt");
    if(!dini_Exists(LadenX))
    {
    dini_Create(LadenX);
    Laden[bLaden][LadenHandy]=dini_IntSet(LadenX,"Handy",150);
    Laden[bLaden][LadenKopfhorer]=dini_IntSet(LadenX,"Kopfhorer",150);
    Laden[bLaden][LadenGPS]=dini_IntSet(LadenX,"GPS",150);
    Laden[bLaden][LadenHandykarte]=dini_IntSet(LadenX,"Handykarten",150);


    }
    return 1;
    }


    stock LoadLaden()
    {
    new LadenX[100];
    format(LadenX,sizeof(LadenX),"/Läden/ElektroLaden1.txt");
    if(dini_Exists(LadenX))
    {
    Laden[bLaden][LadenHandy]=dini_IntSet(LadenX,"Handy");
    Laden[bLaden][LadenKopfhorer]=dini_IntSet(LadenX,"Kopfhorer");
    Laden[bLaden][LadenGPS]=dini_IntSet(LadenX,"GPS");
    Laden[bLaden][LadenHandykarte]=dini_IntSet(LadenX,"Handykarten");


    }
    else
    {
    LadenRegister();
    }
    return 1;
    }


    stock SaveLaden()
    {
    new LadenX[100];
    format(LadenX,100,"/Läden/ElektroLaden1.txt");
    if(dini_Exists(LadenX))
    {
    dini_IntSet(LadenX,"Handy",Laden[bLaden][LadenHandy]);
    dini_FloatSet(LadenX,"Kopfhorer",Laden[bLaden][LadenKopfhorer]);
    dini_FloatSet(LadenX,"GPS",Laden[bLaden][LadenGPS]);
    dini_FloatSet(LadenX,"Handykarten",Laden[bLaden][LadenHandykarte]);
    }
    return 1;
    }


    ocmd:buy(playerid,params[])
    {
    #pragma unused params
    Laden[bLaden][LadenGPS]-=10;
    printf("-1");
    return 1;
    }

    wäre toll wenn mir jmd hilft, habe noch nie mit
    einem Enum gearbeitet


    //e: Achja ich habe den Save unter OnGameModeExit

  • Du benutzt in allen Stocks die Variable "bLaden" als Index, diese wird aber in keinem der Stocks vorher definiert. Woher weiß dein Stock nun also welcher Index gemeint ist?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • das hat grundlegend nix mit dem enum zu tun , was mich hier auch etwas stutzig macht ist das du versuchst eine variabel als float zu speichern und diese wieder als
    variabel ausließt.



    Code
    Laden[bLaden][LadenKopfhorer]=dini_IntSet(LadenX,"Kopfhorer",150);
    Laden[bLaden][LadenKopfhorer]=dini_IntSet(LadenX,"Kopfhorer");


    und soweit ich ncoh weiß ist etwas länger her das ich mal mit dini gearbeitet habe benutzt man dini_Int zum auslesen und dini_IntSet zum setzen beziehungsweise zum speichern

  • Wenn ich das so mache beim Speichern:



    stock SaveLaden()
    {
    new LadenX[100];
    format(LadenX,100,"/Läden/ElektroLaden1.txt");
    if(dini_Exists(LadenX))
    {
    Laden[bLaden][LadenHandy]=dini_IntSet(LadenX,"Handy");
    Laden[bLaden][LadenKopfhorer]=dini_IntSet(LadenX,"Kopfhorer");
    Laden[bLaden][LadenGPS]=dini_IntSet(LadenX,"GPS");
    Laden[bLaden][LadenHandykarte]=dini_IntSet(LadenX,"Handykarten");
    }
    return 1;
    }


    kommt das:

    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition
    warning 202: number of arguments does not match definition
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Warnings.


  • Du machst es immer noch falsch.
    dini_IntSet SCHREIBT die angegebenen Werte IN die Datei
    dini_int LIEST die angegebenen Wert AUS der Datei


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

    • dini_IntSet ist nicht das selbe wie dini_Get. Das eine setzt neue Werte in der Datei und das andere holt die Daten aus der Datei.
    • Du verfügst über ein grundlegendes Verständnisproblem, wie du den Enumerator anwenden sollst. Ein Enumerator ist generell erstmal eine Liste an Variablen. Die meisten Verwenden diesen nun in Arrays, wie du es auch getan hast. Dein Problem ist nun die Anwendung dieses Arrays. Du musst den Array durchlaufen und nicht den Enumerator. Ein einfaches Beispiel:



      #include <a_samp>


      #if !defined MAX_CLIENTS
      #define MAX_CLIENTS 50
      #endif


      // Erstellen des Enumerators.
      enum client {
      username[MAX_PLAYER_NAME],
      conTimestamp,
      bool:admin
      }


      // Zuweisung des Enumerators zu einem Array.
      new clientArray[MAX_CLIENTS][client];


      main() {
      // Zuweisung von Werten zu den einzelnen Variablen nach Format: arrayName[arrayIndex][enumVariable]
      format(clientArray[0][username], MAX_PLAYER_NAME, "Client No.001");
      clientArray[0][conTimestamp] = gettime();
      clientArray[0][admin] = true;

      format(clientArray[1][username], MAX_PLAYER_NAME, "Client No.002");
      clientArray[1][conTimestamp] = gettime();
      clientArray[1][admin] = false;

      // Ausgabe der Werte mithilfe einer for-Schleife (Durchlaufen aller Indexe des Arrays).
      for(new c = 0; c != sizeof(clientArray); c++) {
      if(strlen(clientArray[code=c][username]) > 0 && clientArray[code=c][conTimestamp] != 0) {
      printf("%s: (%i - Admin: %b)", clientArray[code=c][username], clientArray[code=c][conTimestamp], clientArray[code=c][admin]);
      }
      }
      }

      Ausgabe:

      Code
      Client No.001: (1353846975 - Admin: 1)
      Client No.002: (1353846975 - Admin: 0)


  • Habe es jetzt so:



    stock SaveLaden()
    {
    new LadenX[100];
    format(LadenX,100,"/Läden/ElektroLaden1.txt");
    if(dini_Exists(LadenX))
    {
    Laden[bLaden][LadenHandy]=dini_Int(LadenX,"Handy");
    Laden[bLaden][LadenKopfhorer]=dini_Int(LadenX,"Kopfhorer");
    Laden[bLaden][LadenGPS]=dini_Int(LadenX,"GPS");
    Laden[bLaden][LadenHandykarte]=dini_Int(LadenX,"Handykarten");
    }
    return 1;
    }


    Aber wen ich was kaufe wird nichts abgezogen

  • Liest du eigentlich auch, was dir hier gesagt wird? Campbell hat es doch nun wohl mehr als megasuperdeutlich artikuliert.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Ich kann damit nichts anfangen was Campbell geschrieben hat, sry.
    Klar lese ich es


    Nachfragen ist erlaubt, was verstehst du nicht?

  • ich geh mal davon aus es liegt eher weniger am enum sondern mehr an der verwendung vom array.


    welches er auch falsch benutzt.


    Code
    enum test
    {
       test1,
       Float:test2,
       test3[40],
    }


    hier haben wir eine art aufzählen eine variabel(integer) , Float, string
    welche zu nun im array verwenden kannst.


    Code
    new beispiel[2][test];


    mit der 2 gibst du die Zeilen aus und mit test so gesehen die spalten wenn man sich das jetzt mal vorstellt wie in einer Tabelle.


    wenn du das als standart array verwenden würdest mit einem festgelegten wert würde das so aussehen als beispiel:


    Code
    {7,10.0,"ich bin ein 40 Zeichen langer text"},
    {1,19.0,"ich bin auch ein 40 Zeichen langer text"}


    daher kannst du nicht einfach den namen des enums in dem array verwenden siehe hier bei dir

    SQL
    Laden[bLaden][LadenHandykarte]


    daher muss bLaden einen wert haben. wir ziehen jetzt nochmal das beispiel von oben her
    benutzen wir

    Code
    printf("%d",beispiel[1][test1]);


    so wird er uns 1 ausgeben da das array von 0 anfängt jedoch sind es 2 werte 0 - 1.


    um den string in der ersten zeile auszugeben benutzt man

    Code
    printf("%s",beispiel[0][test3]);


    der output wäre nun ich bin ein 40 Zeichen langer text.


  • stock LadenRegister()
    {
    new LadenX[100];
    format(LadenX,sizeof(LadenX),"/Läden/ElektroLaden1.txt");
    if(!dini_Exists(LadenX))
    {
    dini_Create(LadenX);
    Laden[bLaden][LadenHandy]=dini_IntSet(LadenX,"Handy",150);
    Laden[bLaden][LadenKopfhorer]=dini_IntSet(LadenX,"Kopfhorer",150);
    Laden[bLaden][LadenGPS]=dini_IntSet(LadenX,"GPS",150);
    Laden[bLaden][LadenHandykarte]=dini_IntSet(LadenX,"Handykarten",150);


    }
    return 1;
    }


    stock LoadLaden()
    {
    new LadenX[100];
    format(LadenX,sizeof(LadenX),"/Läden/ElektroLaden1.txt");
    if(dini_Exists(LadenX))
    {
    Laden[bLaden][LadenHandy]=dini_Int(LadenX,"Handy");
    Laden[bLaden][LadenKopfhorer]=dini_Int(LadenX,"Kopfhorer");
    Laden[bLaden][LadenGPS]=dini_Int(LadenX,"GPS");
    Laden[bLaden][LadenHandykarte]=dini_Int(LadenX,"Handykarten");


    }
    else
    {
    LadenRegister();
    }
    return 1;
    }


    stock SaveLaden()
    {
    new LadenX[100];
    format(LadenX,100,"/Läden/ElektroLaden1.txt");
    if(dini_Exists(LadenX))
    {
    dini_IntSet(LadenX,"Handy",Laden[bLaden][LadenHandy]);
    dini_IntSet(LadenX,"Kopfhorer",Laden[bLaden][LadenKopfhorer]);
    dini_IntSet(LadenX,"GPS",Laden[bLaden][LadenGPS]);
    dini_IntSet(LadenX,"Handykarten",Laden[bLaden][LadenHandykarte]);
    }
    return 1;
    }



    Müsste es so nicht eigentlich gehen?

  • Müsste es so nicht eigentlich gehen?


    Nein, der Name eines Enumerators ist nicht dasselbe wie ein Array-Index. Für genaueres siehe mein Beispiel oben.