Menü + Untermenü erstellen! [Für Anfänger]

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
  • Hi,
    ich zeige euch mal wie man ein Menü und ein Untermenü erstellt!
    Als erstes geben wir dem Menü mal einen Namen und müssen es über
    main definieren. Ich nehme jetzt einfach mal das Menü aus meinem Selfmade
    Reallife Server



    new Menu:ladenmenu;
    new Menu:getraenke;
    new Menu:fastfood;
    new Menu:snacks;


    Wenn wir die Menüs definiert haben gehen wir zu OnGameModeInit und fügen da die Menüitems von allen 4 Menüs ein.
    Das erste Menü haben wir ladenmenü genannt. Also ladenmenu = CreateMenu("TEXT",....
    Bei TEXT könnt ihr dem Menü einen Namen geben. Der steht wenn ihr das Menü öffnet ganz oben!



    ladenmenu = CreateMenu("Shop",2, 200.0, 150.0, 120.0, 50.0);
    AddMenuItem(ladenmenu,0, "Getraenke");
    AddMenuItem(ladenmenu,0, "Fastfood");
    AddMenuItem(ladenmenu,0, "Snacks");

    getraenke = CreateMenu("Getraenke",2, 200.0, 150.0, 120.0, 50.0);
    AddMenuItem(getraenke,0, "Cola");
    AddMenuItem(getraenke,0, "Fanta");
    AddMenuItem(getraenke,0, "Sprite");
    AddMenuItem(getraenke,0, "Sprudel");
    AddMenuItem(getraenke,0, "Stilles Wasser");
    AddMenuItem(getraenke,0, "Paulaner Bier");
    AddMenuItem(getraenke,0, "Lieblicher Weißwein");

    fastfood = CreateMenu("Fastfood",2, 200.0, 150.0, 120.0, 50.0);
    AddMenuItem(fastfood,0, "Bigmac");
    AddMenuItem(fastfood,0, "Chesseburger");
    AddMenuItem(fastfood,0, "Hamburger");
    AddMenuItem(fastfood,0, "Pizza Salami");

    snacks = CreateMenu("Snacks",2, 200.0, 150.0, 120.0, 50.0);
    AddMenuItem(snacks,0, "Chips");
    AddMenuItem(snacks,0, "Mentos");
    AddMenuItem(snacks,0, "Schokolade");
    AddMenuItem(snacks,0, "Gummibaerchen");
    AddMenuItem(snacks,0, "Wackelpudding");


    Wenn wir nun alle Menüs einen Namen gegeben haben und ein paar Items hinzugefügt haben geht es
    weiter mit den Funktion, weil es soll ja was passieren wenn wir das Menü öffnen, deswegen fügen
    wir nun mal die Funktionen ein. Die könnt ihr natürlich beliebig erweitern!
    Folgendes schreibt ihr beim Public OnPlayerSelectedMenuRow:



    public OnPlayerSelectedMenuRow(playerid, row)
    {
    new Menu:CurrentMenu = GetPlayerMenu(playerid);


    if(CurrentMenu == ladenmenu) // Hier gehts erst mal los mit dem ladenmenü
    {
    switch(row)
    {
    case 0: //case 0 ist das erste Item im ladenmenü sprich Getränke! Wenn ein Spieler jetzt zum Beispiel getränke wählt, öffnet sich das Menü Getränke!
    {
    ShowMenuForPlayer(getraenke,playerid);
    }
    case 1:
    {
    ShowMenuForPlayer(fastfood,playerid); //case 1 ist das Fastfood Menü, wenn ihr case 1 also das 2 Item wählt öffnet sich das Fastfood Menü!
    }
    case 2:
    {
    ShowMenuForPlayer(snacks,playerid); //case 2 Hier öffnet sich das Snacks Menü!
    }
    }
    }


    if(CurrentMenu == getraenke) // Als erstes geht es los mit dem Menü Getränke! case 0 ist die Cola da das erste Item im Menü Getränke die Cola ist!
    {
    switch(row)
    {
    case 0:
    {
    GameTextForPlayer(playerid,"Cola gekauft! (-100$)",3000,3); //Wenn man die Cola kauft kommt der GameText Cola gekauft!
    SetPlayerHealth(playerid,100.00); // Man bekommt volles Leben
    GivePlayerMoney(playerid,-100); // Und man bekommt 100 abgezogen! Das selbe passiert auch im case 1! Case 1 ist im Menü Getränke das 2 Item usw...
    }
    case 1:
    {
    GameTextForPlayer(playerid,"Fanta gekauft! (-100$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-100);
    }
    case 2:
    {
    GameTextForPlayer(playerid,"Sprite gekauft! (-100$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-100);
    }
    case 3:
    {
    GameTextForPlayer(playerid,"Sprudel gekauft! (-100$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-100);
    }
    case 4:
    {
    GameTextForPlayer(playerid,"Stilles Wasser gekauft! (-100$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-100);
    }
    case 5:
    {
    GameTextForPlayer(playerid,"Paulaner Bier gekauft! (-100$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-100);
    }
    case 6:
    {
    GameTextForPlayer(playerid,"Lieblicher Weißwein gekauft! (-100$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-100);
    }
    }
    }

    if(CurrentMenu == fastfood) // Hier gehts mit dem Fastfoodmenü los! Hier passiert das selbe wie im Getränkemenü!
    {
    switch(row)
    {
    case 0:
    {
    GameTextForPlayer(playerid,"Bigmac gekauft! (-200$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-200);
    }
    case 1:
    {
    GameTextForPlayer(playerid,"Chesseburger gekauft! (-200$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-200);
    }
    case 2:
    {
    GameTextForPlayer(playerid,"Hamburger gekauft! (-200$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-200);
    }
    case 3:
    {
    GameTextForPlayer(playerid,"Pizza Salami gekauft! (-200$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-200);
    }
    }
    }

    if(CurrentMenu == snacks) // Hier fängt das Menü Snacks an! case 0 ist das erste Item im Menü Snacks so wie ich es euch schon mehrmals erklärt habe!
    {
    switch(row)
    {
    case 0:
    {
    GameTextForPlayer(playerid,"Chips gekauft! (-150$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-150);
    }
    case 1:
    {
    GameTextForPlayer(playerid,"Mentos gekauft! (-150$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-150);
    }
    case 2:
    {
    GameTextForPlayer(playerid,"Schokolade gekauft! (-150$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-150);
    }
    case 3:
    {
    GameTextForPlayer(playerid,"Gummibaerchen gekauft! (-150$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-150);
    }
    case 4:
    {
    GameTextForPlayer(playerid,"Wackelpudding gekauft! (-150$)",3000,3);
    SetPlayerHealth(playerid,100.00);
    GivePlayerMoney(playerid,-150);
    }
    }
    }
    return 1;
    }


    So nun sind wir fast fertig! Jetzt müssen wir das Menü nur noch aufrufen können! Das geht am besten mit einem Command.
    Bei mir im Script heißt der Command /buy ihr könnt ihn ja beliebig umändern! Das bei OnPlayerCommandText einfügen:



    if (strcmp("/buy", cmdtext, true) == 0)
    {
    ShowMenuForPlayer(ladenmenu, playerid);
    return 1;
    }


    Das war es! Ich hoffe ihr habt alles soweit verstanden! Eigentlich ist es ja ganz simpel! Bei Fragen einfach melden!
    Ihr könnt gerne das Tutorial bewerten!


    MfG Markus

    Einmal editiert, zuletzt von Markus ()

  • und wo soll ich das menü bzw. den /buy befehl ausführen?
    ich sehe keine position die mir angibt wo ich das machen kann
    oder soll man das hier bewusst überall machen können?
    bzw gibt es kein pickup? womit ich so ein menü automatisch aufrufen kann wenn ich dort reinlaufe?

  • Hi,
    das geht natürlich auch! Bei mir geht es z.b nur in 24/7 Shops in Las Venturas!
    1 Möglichkeit:


    Wenn ein Spieler an einem bestimmten Punkt ist und /buy macht soll sich das Menü öffnen! Wenn er nicht an diesen Puinkten ist soll eine Meldung kommen: Du bist in keinem 24/7 Shop!
    Das ging so:



    if (strcmp("/buy", cmdtext, true) == 0)
    {
    if(PlayerToPoint(10, playerid,-23.2388,-55.4084,1003.5469) || PlayerToPoint(10, playerid,-23.1297,-55.2229,1003.5469) || PlayerToPoint(10, playerid,-23.3618,-55.6308,1003.5469)) // Wenn der Spieler im Radius von 10 an diesem 3 Punkten ist
    {
    ShowMenuForPlayer(ladenmenu, playerid); // soll im das Menü gezeigt werden, wenn er buy eingibt!
    }
    else // else, also wenn er nicht da ist
    {
    SendClientMessage(playerid,rot,"Du bist in keinem 24/7 Shop!"); // soll ihm diese Meldung geschickt werden!
    }
    return 1;
    }


    2. Möglichkeit:


    Wenn ein Spieler an einem bestimmten Punkt ist soll sich das Menü ohne Command öffnen.
    Das ging so:



    if(PlayerToPoint(10, playerid,-23.2388,-55.4084,1003.5469) || PlayerToPoint(10, playerid,-23.1297,-55.2229,1003.5469) || PlayerToPoint(10, playerid,-23.3618,-55.6308,1003.5469)) // Wenn ein Spieler im Radius von 10 an diesem 3 Punkten ist
    {
    ShowMenuForPlayer(ladenmenu, playerid); // soll sich dieses Menü öffnen!
    }


    Die 2. Möglichkeit muss auch bei OnPlayerCommandText eingefügt werden!


    MfG Markus

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • bei mir kommt wenn ich die 2. möglichkeit einbaue:



    C:\Program Files\Rockstar Games\GTA San Andreas\filterscripts\REGISTERSYSTEM;FRAKTIONEN.pwn(492) : error 017: undefined symbol "PlayerToPoint"
    Pawn compiler 3.2.3664
    Copyright (c) 1997-2006, ITB CompuPhase



    kann mir jemand sagen wie ich das definen soll oder was ich sonst machen soll?

  • Oben ins Script zu den Anderen forwards(unter den defines)
    forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
    Ganz unten ins Script:

    public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    }
    return 0;
    }

  • hmm ich hab versucht das nur mit dem playertopoint versucht in meinen script einzubauen, ich hab natürlich auch deine sachen richtig reingeschrieben, aber es geht irgentwie immer noch nicht. kannst du mir da weiterhelfen?

  • :thumbup: Gut gemacht. Kann man aber auch bei dem SAMP wiki heraus finden aber naja net schlecht. :thumbup:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen