Problem mit Dialog (andere Dialog wird ungewollt mitbenutzt)

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 Breadfishes',


    ich habe ein Problem mit einem Dialog von mir!
    Undzwar ist der der Dialog der mit /hilfe ausgelöst wird.


    Wenn ich /hilfe eingebe, kommt ein Dialog (DIALOG_HILFE).
    Wenn ich das erste listitem auswähle (allgemeine Hilfe) öffnet sich die MSGBOX mit der Hilfe.
    Wenn ich jedoch das zweite, oder dritte listitem auswähle wird der Dialog (DIALOG_JOBS) aufeinmal als listitem genutzt und ich bekomme die Nachricht, dass ich den Job "x" habe!


    Könnt ihr mir villeicht helfen dieses Dialog-Wirrwarr zu lösen?


    Dialog Definierungen:
    #define DIALOG_HILFE 17
    #define DIALOG_JOBS 27


    Befehl /hilfe und /jobs:
    if(strcmp("/hilfe", cmdtext, true, 6) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED, "Du musst eingeloggt sein!");
    return 1;
    }
    }


    // Jobs Dialog
    if(strcmp(cmdtext,"/jobs", true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid,4.0,-1845.5664,7.4096,1061.1436))
    {
    ShowPlayerDialog(playerid,27,DIALOG_STYLE_LIST,"Jobangebot 2014","Arbeitslosengeld I\nKündigen\nDrogendealer\nTaxifahrer\nPizzalieferant\nStuntman","Bestätigen","Abbrechen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist nicht im Job-Center!");
    return 1;
    }

    }



    On Dialof Response (Hilfe und Jobs):


    f(dialogid == DIALOG_HILFE)
    {

    if(listitem == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE1,DIALOG_STYLE_MSGBOX,"Allgemeine Hilfe","/stats /lizenzen (/liz) /kaufen (24/7) /kopfhörer /navi /report","OK","");
    }
    if(listitem == 1)
    {
    //ShowPlayerDialog(playerid,DIALOG_HH,DIALOG_STYLE_MSGBOX,"Haushilfe"," -> /kaufehaus - Damit kannst du dir ein Haus kaufen.\n -> /verkaufehaus - Damit kannst du dein Haus verkaufen.\n -> /haustuer - damit kannst du dein Haus auf-/zuschließen.\n -> /hausbetreten - Damtit kannst du dein Haus betreten. -> /hausverlassen - Damit kannst du dein Haus verlassen,\n","Weiter","Schließen");
    }
    if(listitem == 2)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE2,DIALOG_STYLE_MSGBOX,"Handy Hilfe","...","OK","");
    }
    if(listitem == 3)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE3,DIALOG_STYLE_LIST,"Job Hilfe","Drogendealer\nTaxifahrer\nPizzaliferant\nStuntman","OK","");
    }

    }

    if(dialogid == DIALOG_HILFE1)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    }
    }


    if(dialogid == DIALOG_HILFE2)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    }
    }


    // Dialog Jobs
    if(dialogid == DIALOG_JOBS)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"Jobauswahl abgebrochen!");
    return 1;
    }
    if(listitem == 0)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 1;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast erfolgreich dein Arbeitslosengeld I beantragt!");
    SendClientMessage(playerid,COLOR_YELLOW,"Du erhälst es ab sofort jeden Zahltag!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitslos sein um Arbeitslosengeld I zu beantragen!");
    return 1;
    }
    }
    }
    if(listitem == 1)
    {
    if(Spieler[playerid][Beruf] > 0)
    {
    Spieler[playerid][Beruf] = 0;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast deinen Job gekündigt und bist nun Arbeitslos!");
    SendClientMessage(playerid,COLOR_YELLOW,"Du kannst Arbeitslosengeld I beantragen um ohne Arbeit Geld zu bekommen!");
    EnableStuntBonusForPlayer(playerid,0);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst einen Job haben um zu kündigen!");
    return 1;
    }
    }
    if(listitem == 2)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 2;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Drogendealer!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;


    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 3)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 3;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Taxifahrer!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;


    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 4)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 4;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Pizzalieferant!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;


    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 5)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 3;
    EnableStuntBonusForPlayer(playerid, 1);
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Stuntman!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;


    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }


    Wenn ihr weitere Scriptteile braucht einfach bescheid sagen!
    Über eure Hilfe würde ich mich sehr freuen! ;)

  • Du hast es unter die falsche Klammer geschrieben.
    Achte darauf, dass du deinen Code richtig einrückst, dann passiert dir sowas nicht.


    if(dialogid == DIALOG_HILFE)
    {

    if(listitem == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE1,DIALOG_STYLE_MSGBOX,"Allgemeine Hilfe","/stats /lizenzen (/liz) /kaufen (24/7) /kopfhörer /navi /report","OK","");
    }
    if(listitem == 1)
    {
    //ShowPlayerDialog(playerid,DIALOG_HH,DIALOG_STYLE_MSGBOX,"Haushilfe"," -> /kaufehaus - Damit kannst du dir ein Haus kaufen.\n -> /verkaufehaus - Damit kannst du dein Haus verkaufen.\n -> /haustuer - damit kannst du dein Haus auf-/zuschließen.\n -> /hausbetreten - Damtit kannst du dein Haus betreten. -> /hausverlassen - Damit kannst du dein Haus verlassen,\n","Weiter","Schließen");
    }
    if(listitem == 2)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE2,DIALOG_STYLE_MSGBOX,"Handy Hilfe","...","OK","");
    }
    if(listitem == 3)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE3,DIALOG_STYLE_LIST,"Job Hilfe","Drogendealer\nTaxifahrer\nPizzaliferant\nStuntman","OK","");
    }

    }


    if(dialogid == DIALOG_HILFE1)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    }
    }


    if(dialogid == DIALOG_HILFE2)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    }
    }


    // Dialog Jobs
    if(dialogid == DIALOG_JOBS)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"Jobauswahl abgebrochen!");
    return 1;
    }
    if(listitem == 0)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 1;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast erfolgreich dein Arbeitslosengeld I beantragt!");
    SendClientMessage(playerid,COLOR_YELLOW,"Du erhälst es ab sofort jeden Zahltag!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitslos sein um Arbeitslosengeld I zu beantragen!");
    return 1;
    }
    }
    if(listitem == 1)
    {
    if(Spieler[playerid][Beruf] > 0)
    {
    Spieler[playerid][Beruf] = 0;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast deinen Job gekündigt und bist nun Arbeitslos!");
    SendClientMessage(playerid,COLOR_YELLOW,"Du kannst Arbeitslosengeld I beantragen um ohne Arbeit Geld zu bekommen!");
    EnableStuntBonusForPlayer(playerid,0);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst einen Job haben um zu kündigen!");
    return 1;
    }
    }
    if(listitem == 2)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 2;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Drogendealer!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 3)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 3;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Taxifahrer!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 4)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 4;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Pizzalieferant!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 5)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 3;
    EnableStuntBonusForPlayer(playerid, 1);
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Stuntman!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    }

  • Das return 1; ist an manchen stellen ziemlich überflüssig


    Im Gegenteil!
    Es ist sogar gut, dass er innerhalb der if-Abfragen die returns hat, denn der Ablauf ist "durchfallend", das heißt wenn kein return da ist, dann werden die folgenden if-Abfragen auch gemacht. Ist das return da, nicht. Das schont die CPU.


    => Daher: Wenn von der Skriptlogik her möglich: return verwenden, wenn nichts mehr folgt.

  • Ja klar, aber return ist für 2 Sachen gedacht!


    Zum ersten zum wiedergeben eines Wertes/strings ö.ä!
    Zum zweiten für das abbrechen mancher bereiche, wenn die If Be­din­gung nicht stimmt, passiert sowie so nichts.
    Klar, aber wenn man weis unten drunter wird sowie nichts mehr aufgerufen, könnte man es schon verwenden.
    Dennoch bleibt meine Meinung, in dem Bereich sind manche returns ziemlich überflüssig!


    mfg :thumbup:

  • Dennoch bleibt meine Meinung, in dem Bereich sind manche returns ziemlich überflüssig!


    Hier zwei Beispiele:
    public OnPlayerConnect(playerid)
    {
    //Nehmen wir an, playerid ist 1:
    if(playerid == 0) //nein, gehe zu Zeile 9
    {
    //...
    return 1;
    }
    if(playerid == 1) //ja
    {
    //...führe Code aus.
    return 1; //Springe aus OnPlayerConnect heraus. Fertig.
    }
    //Wird nicht aufgerufen.
    if(playerid == 2)
    {
    //...
    return 1;
    }
    if(playerid == 3)
    {
    //...
    return 1;
    }
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    //Nehmen wir an, playerid ist 1:
    if(playerid == 0) //nein, gehe zu Zeile 8
    {
    //...
    }
    if(playerid == 1) //ja
    {
    //...führe Code aus.
    }
    //hier geht es weiter
    if(playerid == 2) //nein
    {
    //...
    }
    if(playerid == 3) //nein
    {
    //...
    }
    return 1; //Springe aus OnPlayerConnect heraus. Fertig.
    }



    => Wir haben im 2. Beispiel 2 if-Abfragen mehr gemacht, das entspricht der doppelten CPU Last. Wenn du jetzt die Zeit misst, für x Durchläufe, dann wird Beispiel 1 doppelt so schnell fertig sein, als Beispiel 2. Jetzt stell dir vor wir machen das mit 1000 Dialogen. Wenn da bereits der zweite aufgerufen wird, dann hast du 998 unnötige if-Abfragen, das entspricht einer fast 500-fachen CPU Last.


    Die returns sind also ganz und gar nicht unnötig.