GUI erstellen [für 0.3a]

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 Community,
    nun erkläre ich euch mal wie man Commands zum ausführen in ein GUI erstellt.


    Schritt 1:
    Jetzt erstellen wir ein new. Ich nenne es jetzt mal Dialog Commands:

    new DialogCommands[5][2][64]= //Die 5 bedeutet, dass wir maximal 5 Commands hier hinmachen können. Die 2 bedeutet das man 2 Spalten machen kann.
    {
    {"/register","Registriere dich"}, //Als erstes steht im GUI der Command /register, danneben steht dann die Beschreiung vom Command
    {"/Rennen","Nimm am Rennen teil"}, //Hier genau das selbe als erstes steht im GUI der Command und neben dem Command die Beschreibung
    {"/Credits","Erfahre, wer den Gamemode gescriptet hat"},
    {"/Admins","Liste der Admins & Mods"},
    {"/teleports","Server Teleports"}
    };


    Jetzt müssen wir den Dialog definieren. Ich nenne es mal COMMANDS



    #define DIALOG_COMMANDS 1


    Schritt 2:
    Nun fügt ihr in den Command ein womit das GUI geöffnet werden soll folgendes ein:



    new string[256];


    if(!strcmp(cmdtext, "/test", true))
    {
    for(new i=0;i<sizeof(DialogCommands);i++)//Wir erstellen eine for Schleife für die DialogCommands
    {
    if(strlen(DialogCommands[i][0])>=8)
    format(string,sizeof(string),"%s%s\t%s\n",string,DialogCommands[i][0],DialogCommands[i][1]); //Als erstes wird der Command angezeigt und die Beschreibung
    else
    format(string,sizeof(string),"%s%s\t\t%s\n",string,DialogCommands[i][0],DialogCommands[i][1]); //Als erstes wird der Command angezeigt und die Beschreibung
    }
    ShowPlayerDialog(playerid,DIALOG_COMMANDS,DIALOG_STYLE_LIST,"Commands:",string,"Wählen","Schliessen"); //Entweder wählt man einen Command ober man schließt das GUI.
    return 1;
    }


    Schritt 3:
    Nun erstellen wir ein Public Namens OnDialogResponse.
    Wenn ihr den schon habt müsst ihr nur den Code da drunter einfügen!



    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {


    Da drunter fügen wir folgendes ein:



    sswitch(dialogid)
    {
    case DIALOG_COMMANDS:


    if(response)
    OnPlayerCommandText(playerid,DialogCommands[listitem][0]);//Fertig^^ Ingame auf Command im GUI klicken und es sollte direkt ausgeführt werden...
    }.


    Nun schließen wir das Public mit



    return 0;
    }


    Das war es! Ich hoffe ich konnte euch helfen ein GUI zu erstellen.


    MfG Markus


    EDIT: Ich hatte noch was vergessen und jetzt eingefügt!
    Ich habe euch jetzt auch das Tut als FS hochgeladen!

    5 Mal editiert, zuletzt von Markus ()

  • 2 Probs/Fragen:


    1. Geht es auch, das die erste Spalte nicht angezeigt wird, klickt man das aber an passiert der Befehl aus der ersten Spalte?


    2. Wenn ich auf schließen drücke schließt sich der ganze Server, also Close Connection

    Einmal editiert, zuletzt von .e# ()

  • wenn du es als listitem machst ist das kein Problem das geht auch klar.
    Ich hab damit meine ganze Registration und meine Bank und mein Login und register system gemacht.

  • Ich möchte das das ganze genauso ist
    Wenn ich was davon anklicke soll es ausgeführt werden, nur der Befehl davor soll nicht angezeigt werden!


    So als ob es ihn garnicht gibt!


    Und warum wenn ich auf schließe gehe schließt sich ganzer Server?

  • Das kann net sein das der Server sich davon schließt!
    Es funzt perfekt.
    Und der Unterschied ist es ist viel übersichtlicher man sieht sofort neben dem Command die Bedeutung des Command.
    Also bei mir funzt es perfekt!



    MfG Markus ;)

  • sswitch(dialogid)
    {
    case DIALOG_COMMANDS:


    if(response)
    OnPlayerCommandText(playerid,DialogCommands[listitem][0]);//Fertig^^ Ingame auf Command im GUI klicken und es sollte direkt ausgeführt werden...
    }.


    Würde nicht gehen


    sswitch(dialogid) ???

  • Habe drei Fragen, klappt nicht so ganz bei mir^^:


    1. Die befehle die dadurch aktiviert werden sollen muss ich einzeln machen oder muss ich die in den /test Befehl reinhaun?


    2. Ich möchte zwei Befehle nur laufen lassen habe es dann halt so gemacht:


    new DialogCommands[2][2][64]= //Die 5 bedeutet, dass wir maximal 5 Commands hier hinmachen können. Die 2 bedeutet das man 2 Spalten machen kann.
    {
    {"/clean1","Säubere San Andreas! [750$]"},
    {"/clean2","Säubere San Andreas! [1500$]"}
    };


    Is ja richtig^^, aber wenn ich auf eins der beiden dann im GUI klicke wird immmer der /clean2 Befehl ausgeführt.Warum?


    3. Ich habe nun schon 5 Menüs


    #define Register 0
    #define Login 1
    #define Wetter 2
    #define KaufMenu 3
    #define HelpMenu 4
    #define AdminMenu 5


    Muss ich nun bei #define DIALOG_COMMANDS 1 die "1" zur "6" machen?





    @Profesor


    ja es muss


    switch(dialogid)


    Sein^^


    __________________________________________________________________________________________

  • Wie kann ich das machen,
    wenn man durch ein Pickup geht das dann das Menü erscheint?