Dialog Zeilen individuell erstellen

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,


    ich will ein rucksack system machen.
    Wenn man in seinen rucksack mit einem Befehl reinschaut soll ein ListenDialog kommen.


    Je nach dem wieviel drin ist sollen bis zu max. 5 items drin sein.


    Wie mach ich das wenn er zB. Milch dabei hat und Zigaretten das da 2 DialogItems drin sind, einmal Milch und einmal Zigaretten die er auch benutzen kann, oder halt auch 3.


    Milch Zigaretten und ein Burger.
    Wie geht das das es dadruch praktisch den Dialog verändert?


    Danke schonmal.


    - Tomsen :thumbup:

  • Naja, ich weiß nicht wie du das mit den Items machst, aber ich gebe dir mal ein Beispiel:


    new Item[MAX_PLAYERS][5][128];


    //Item Zuweisung
    format(Item[playerid][0], 128,"Milch");
    format(Item[playerid][1], 128,"Butter");
    format(Item[playerid][2], 128,"Käse");
    //Diese Sachen hat man jetzt dabei


    //Der Dialog
    new buffer[32],string[128];
    for(new i; i<5; i++) {
    if(strlen(Item[playerid][i]) < 1) continue;
    format(buffer,32,"%s\n",Item[playerid][i]);
    strins(string,buffer,0,128);
    }
    ShowPlayerDialog(playerid,-1,DIALOG_STYLE_LIST,"Du hast folgendes dabei:",string,"Okay","Nein");
    //Output:
    Käse
    Butter
    Milch


    Nicht getestet, sollte aber klappen ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Aber woher weiß ich dann wenn ich es zuweiße das zB ich schon eine Packung Zigaretten dabei habe,


    da ist es ja nichtmehr das erste Item. Die Null ist ja trotzdem (nach playerid)
    format(Item[playerid][0], 128,"Milch");


    - Tomsen


    /Edit: Ich meine es wird dann immer wenn ich schon ein Fertig gericht im Rucksack habe und mir Zigaretten kaufe werden die Zigaretten auf Slot 0 gesetzt und das Fertiggericht überspielt bzw ersetzt.



    Einmal editiert, zuletzt von Tomsen ()

  • Ich verstehe dein Problem zwar nicht, jedoch würde ich wie folgt vorgehen:


    • Mögliche Items in einem Array festhalten.
    • Array beim Aufruf des Rucksacks durchlaufen.
    • Falls das Item im Besitz des Spielers ist es in den String für den Dialog einfügen. Max. 5 Items.
    • Nach durchlaufen des Arrays den Dialog ausgeben.
  • Könnt ich nicht auch theoretisch 5 Itemplätze mit Zahlen speichern lassen.


    Also 0 = Milch; 1 = Käse; 2 = Brot usw. und dann beim Abfragen im Dialog die Items des Spielers durch gehen..


    Wenn 1 ist, solls eine Zeile mit dem Namen "Käse" erstellen etc.?


    Nur wie kann ich dann definieren das wenn SpielerInfo[playerid][pItem1] eine 2 Steht: Das dann Brot ist. Ich kann ja die 2 nicht im Dialog ausgeben, weiß ja keiner was gemeint ist.


    - Tomsen

  • Array.



    enum playerData {
    item1,
    item2,
    item3,
    item4,
    item5
    }


    new SpielerInfo[MAX_PLAYERS][playerData],
    itemArray[][] = {
    "Leer", "Butter", "Brot", "Käse"
    };


    public OnPlayerConnect(playerid) {
    SpielerInfo[playerid][item1] = 2;
    }


    static stock printBrotItem(playerid) {
    if(SpielerInfo[playerid][item1] == 2) {
    new dialogMsg[10];
    strins(dialogMsg, itemArray[SpielerInfo[playerid][item1]], 0);
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Brotitem", dialogMsg, "Ok", "Abbrechen");
    } else {
    SendClientMessage(playerid, 0xFFFFFFFF, "Du hast kein Brot! :(");
    }
    }

  • Array hab ich ja schon von den anderen Spielerdaten, kann ich praktisch da mit rein nehmen? Oder ist es ein neuer Array nur für Items?
    Und müsste für jedes Item das es gibt so einen static stock erstellen damit er die Zeilen im Dialog erstellt?


    - Tomsen :thumbup:



    Einmal editiert, zuletzt von Tomsen ()

  • Es ist ein Beispiel - es ist nicht das, was du erstellen möchtest. Natürlich kannst du auch alle Items zusammen in eine Funktion packen. Und natürlich kannst du deine Arrays auch anders strukturieren. Und static und stock verpassen der Funktion lediglich zwei Eigenschaften - die sind nicht nötig - aber manchmal hilfreich.

  • Ich will eigentlich nur für je ein Item eine Zahl speichern.


    Mein Problem besteht gerade nur darin das ich nicht weiß wie ich wenn pItem1 (oder 2,3...) die Zahl 2 hat das das Item dann Brot ist. Bzw. wo ich das festlege bzw. formatiere das es Brot ist.


    - Tomsen

  • Ich will eigentlich nur für je ein Item eine Zahl speichern.


    Mein Problem besteht gerade nur darin das ich nicht weiß wie ich wenn pItem1 (oder 2,3...) die Zahl 2 hat das das Item dann Brot ist. Bzw. wo ich das festlege bzw. formatiere das es Brot ist.


    - Tomsen


    Die Zahlen müssen ja irgendetwas entsprechen. In meinem Fall oben eben dem Index eines Arrays, welcher die Namen der Items enthält. Die Lösung steht bereits oben, du musst nun dich nur noch hinsetzen und es für dich umschreiben.


  • Die Zahlen müssen ja irgendetwas entsprechen. In meinem Fall oben eben dem Index eines Arrays, welcher die Namen der Items enthält. Die Lösung steht bereits oben, du musst nun dich nur noch hinsetzen und es für dich umschreiben.

    Ich bin jetzt bei dem Teil wo es die Sachen anzeigen soll. Momentan mit der Funktion zeigt es ja wenn vorhanden nur Brot an. Aber wenn der Spieler jetzt mehrere Items hat, muss ich ein 2. strins machen oder wie muss ich das angehen?
    (ich hab auch noch nie mit "strins" gearbeitet).


    if(strcmp(cmdtext,"/inventar",true)==0)
    {
    new dialogMsg[10];
    strins(dialogMsg, iArray[SpielerInfo[playerid][pItem1]], 0);
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Dein Inventar", dialogMsg, "Ok", "Abbrechen");
    return 1;
    }


    Habs jetzt so umgebaut.
    Nur jetzt zeigt es ja nur Brot (wenn überhaupt) an, und wenn ich wieder strins mache überschreib er es ja. Muss ich eine neue dialogMessage machen oder..?


    - Tomsen :thumbup:



    2 Mal editiert, zuletzt von Tomsen ()




  • Was bedeutet das
    strins(string,buffer,0,128);


    Mfg