Problem bei Riesigem Array (ENUM)

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 liebe Community,


    Ich bin gerade daran mein Restaurant Script zu Updaten,
    habe aber ein Problem mit den Gerichten die im Script Dynamisch erstellt werden.
    Hier ist der Code von der variable und enum:

    enum renum_gerichte
    {
    GName[24],
    GPreis,
    Float:GHealth
    };


    new Gerichte[][][renum_gerichte] =
    {
    {{"Kleiner Burger", 7, 13.0}, {"Großer Burger", 16, 23.0}},
    {{"Kleines Hühnchen", 9, 16.0}, {"Großes Hühnchen", 23, 31.0}}
    };


    /e Errorcodes vergessen *Facepalm*


    Weiß jemand wie ich Die variable Richtig erstellen kann,
    Denn ich habe noch eine Andere variable für Die Restaurants mit Position und anderen Sachen new Restaurant[][renum] =, die ohne Probleme Funktioniert.


    Also kann mir jemand bitte Helfen.


    MFG Piet

  • Eine grundlegende Frage willst du unterschiedliche restaurants machen oder sind das imm nur die selben.


    weil da diese variante vollkommen ausreicht


    new Gerichte[][renum_gerichte] = {
    {"Kleiner Burger", 7, 13.0},
    {"Großer Burger", 16, 23.0}},
    {"Kleines Hühnchen", 9, 16.0},
    {"Großes Hühnchen", 23, 31.0}
    };


    grundlegend versteh ich immer noch nicht genau was du möchtest.

  • Es sind unterschiedliche Restaurants mit Dynamisch vielen Gerichten.
    /e
    Habe Errorcodes oben vergessen und hinzugefügt.


    /e 2
    Zeile 89:

    for(new ex = 0; ex < sizeof(Gerichte[e]); ex++)format(str, sizeof(str), "%s \t\tPreis: %d€\n", Gerichte[e][ex][GName], Gerichte[e][ex][GPreis]);


    MFG Piet

  • müsste so klappen


    enum renum_gerichte
    {
    GName[24],
    GPreis,
    Float:GHealth
    };
    new Gerichte[2][2][renum_gerichte] = {
    {
    {"Kleiner Burger", 7, 13.0},
    {"Großer Burger", 16, 23.0}
    },
    {
    {"Kleines Hühnchen", 9, 16.0},
    {"Großes Hühnchen", 23, 31.0}
    }
    };


    ich editier das nochmal dumme frage

  • Ich glaube ich habe ein anderes Problem wenn ich Gerichte ausklammer.


    ich bekomme diese Errors

    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(96) : error 032: array index out of bounds (variable "Restaurant")
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(117) : error 032: array index out of bounds (variable "Restaurant")
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    2 Errors.


    hier die Zeilen:

    //Zeile 96
    if(pickupid == Restaurant[e][RPickup])//aus schleife


    //Zeile 117
    Restaurant[i][RPickup] = CreatePickup(1240, 1, Restaurant[i][IPosX], Restaurant[i][IPosY], Restaurant[i][IPosZ]);//In Schleife Create

    Also ich komme jetzt durcheinander!


    ---------------------------------------------------------------------------------------------------------------------------------


    Ich habe dass Problem gelößt,
    ich habe in meiner Enum versucht einen Startwert für eine Variable zu setzen,
    ging aber nicht.


    Habe aber ein neues Problem:
    den Error:
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : error 001: expected token: "]", but found "-identifier-"
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    Bei der Zeile:
    for(new ex = 0; ex < sizeof(Gerichte[e]); ex++)format(str, sizeof(str), "%s \t\tPreis: %d€\n", Gerichte[e][ex][GName], Gerichte[e][ex][GPreis]);//e aus der Restaurant Schleife


    Wisst ihr was falsch ist ?


    MFG Piet

  • hm das komme ich jetzt auch ^^ da sowas nix damit zu tun hat worum es gerade geht .


    also ich weiß jetzt nicht was du mit derm posten deiner forschleife jetzt noch meinst aber eine idee die sachen auszulesen
    wäre eine doppelte for schleife

    #define MAX_LOKALE 2
    #define MAX_SPEISEN 2
    ocmd:test(playerid,params[])
    {
    #pragma unused params
    for(new i; i < MAX_LOKALE; i++){
    for(new ei; ei < MAX_SPEISEN; ei++){
    new str[128];
    format(str, sizeof(str), "%s \t\tPreis: %d€\n", Gerichte[i][ei][GName], Gerichte[i][ei][GPreis]);
    SendClientMessage(playerid,-1,str);
    }
    }
    return 1;
    }


    wegen deinen gerichten um alles auszulesen naja das hat nun hier wenig mit dem unterschiedlichen Restaurants zu tun ich weiß jedoch wäre es eine idee
    nur solltest du dann das erste hier i gehen die jeweilige Zahl ersetzen wenn der spieler den command eingibt um die speisen abzurufen.


    Aber nun zu dem Restaurant kannst du mir bitte das enum posten mit dem dazugehörigen array falls eins besteht.


    //edit


    Ah ok ^^ auch gut ich hoffe ich hab dir trotzdem geholfen

  • Ok hier die Sachen(die ihr braucht):

    //Oben


    #define DIALOG_FOOD 22


    enum renum_gerichte
    {
    GName[24],
    GPreis,
    Float:GHealth
    };


    enum renum
    {
    Float:IPosX,
    Float:IPosY,
    Float:IPosZ,
    Float:IPPosX,
    Float:IPPosY,
    Float:IPPosZ,
    Float:DPosX,
    Float:DPosY,
    Float:DPosZ,
    RInt,
    RName[32],
    RPickup
    };


    new Restaurant[][renum] =
    {
    {1184.47, -878.76, 42.41, 1184.47, -876.76, 42.41, 1184.49, -880.92, 42.41, 0, "Burger Shot Nord", -1},
    {1187.55, -878.31, 42.41, 1187.55, -876.31, 42.41, 1187.55, -880.60, 42.41, 0, "Chicken Shot Nord", -1}
    },
    Gerichte[][][renum_gerichte] =
    {
    {
    {"Kleiner Burger", 7, 13.0},
    {"Großer Burger", 16, 23.0}
    },
    {
    {"Kleines Hühnchen", 9, 16.0},
    {"Großes Hühnchen", 23, 31.0}
    }
    };


    //weiter unten
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new e = 0; e < sizeof(Restaurant); e++)
    {
    if(pickupid == Restaurant[e][RPickup])
    {
    SetPlayerPos(playerid, Restaurant[e][IPPosX], Restaurant[e][IPPosY], Restaurant[e][IPPosZ]);
    new str[512], str_name[64];
    for(new ex = 0; ex < sizeof(Gerichte[e]); ex++)format(str, sizeof(str), "%s \t\tPreis: %d€\n", Gerichte[e][ex][GName], Gerichte[e][ex][GPreis]);
    }
    }
    return 1;
    }


    Aber da bekomme ich den Error:

    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : error 001: expected token: "]", but found "-identifier-"
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Piet\Desktop\samp03esvr_R5_win32\filterscripts\Restaurant.pwn(94) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    4 Errors.


    MFG Piet

  • der code


    for(new ex = 0; ex < sizeof(Gerichte[e]); ex++)


    geht nicht daher ist es besser du setzt dafür einen wert für die speisen ein beispiel 5


    dann gehts. soweit ich weiß kann man das nicht machen mit multidimensionale arrays


    //edit das beispiel hasst du oben


    #define MAX_SPEISEN 2


    for(new ex = 0; ex < MAX_SPEISEN; ex++)

  • Ok habe dann noch Dass hinzugefügt:
    if(!strlen(Gerichte[e][ex][GName]))continue;


    /e
    Ich weiß jetzt nicht ob der Server Crasht wenn ich einen String Abfrage der gar nicht existiert aber im Array ist.


    MFG Piet


    Ich frage mich echt gerade was du damit genau bezwecken willst mit strlen bekommt du die länge des strings
    und wenn es nicht der länge entspricht wird die for schleife weiter geführt
    welchen Hintergedanke hast du dazu gehabt?


  • enum renum_gerichte
    {
    GName[24],
    GPreis,
    Float:GHealth
    };


    // new usw
    Gerichte[][][renum_gerichte] =
    {
    {
    {"Kleiner Burger", 7, 13.0},
    {"Großer Burger", 16, 23.0}
    },
    {
    {"Kleines Hühnchen", 9, 16.0},
    {"Großes Hühnchen", 23, 31.0}
    }
    };
    Das geht nicht,weil du maximal 3 Dimensionen haben kannst. Bei dir wären es jetzt aber 4.
    Gerichte[][][GName][24]
    Du musst dir eine Andere Struktur überlegen.

  • Grundlegend würde das schon gehen wie er es macht
    nur braucht er eine extra variabel in seinem einem enum wo die art also welche gerichte das restaurant enthält


    dann lässt sich das ganze mit der variabel und einer forschleife wie oben in dem beispiel command auslesen.


    also statt dem i hier und der forschleife eine feste variabel von dem enum


    beispiel dann

    for(new ex = 0; ex < MAX_GERICHTE; ex++)format(str, sizeof(str), "%s \t\tPreis: %d€\n", Gerichte[Restaurant[e][art]][ex][GName], Gerichte[Restaurant[e][art]
    ][ex][GPreis]);