Dialog , input herausfinden

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 zusammen,
    es geht mir darum, wenn ich nun auf eine Zeile klicke,
    möchte ich gerne den Slot zurück bekommen haben.


    for(new i = 0; i < MAX_PLAYER_INVENTAR; i++)
    {
    if(Spieler[playerid][Inventarslot][i] != -1)
    {
    format(string,sizeof(string),"Slot: %d | Möbelname: %s\n%s",i,GetNameMobel(Spieler[playerid][Inventarslot][i]),string);
    ShowPlayerDialog(playerid,DIALOG_IMOBEL,DIALOG_STYLE_LIST,"Möbelinventar Übersicht",string,"Ok","");
    inventarslot++;
    }
    }


    Mein Versuch war es nun, wie folgt den "Slot" herauszufinden:
    case DIALOG_IMOBEL:
    {
    if(response == 0) return 1;
    if(response == 1)
    {
    new leer = strfind(inputtext, " "), string[15], mobelid;
    strdel(string, leer, sizeof(string));
    mobelid = strval(string);
    mobelidVar[playerid] = mobelid;
    format(string,sizeof(string),"%d",mobelid);
    SendClientMessage(playerid,-1,string);
    ShowPlayerDialog(playerid,DIALOG_IMOBEL2,DIALOG_STYLE_LIST,"Möbelstück","Entfernen\nAuswählen","Weiter","Abbruch");
    return 1;
    }
    }


    Problem ist dabei nur, dass er mir bei meinen Chat print, egal auch wenn 2 Inputtexte sich in den Dialog befinden, immer wieder für mobelid 0 ausgibt.
    Jeffry:
    Hättest du evtl. mal eine Hilfestellung ? :/

  • Mit der Funktion bekommst du den Slot:


    stock getSlotOut(const string[])
    {
    new p = strfind(string," ");
    if(p == -1) return -1;
    new p2 = strfind(string," ",false,p+1);
    if(p2 == -1) return -1;
    new id[11];
    strmid(id,string,p,p2,sizeof(id));
    return strval(id);
    }
    //und dann der code so:
    case DIALOG_IMOBEL:
    {
    if(!response) return 1;
    new id = getSlotOut(inputtext),string[11];
    if(id == -1) return SendClientMessage(playerid,-1,"Fehler"); //Sollte eig nie vorkommen!
    mobelidVar[playerid] = mobelid;
    format(string,sizeof(string),"%d",id);
    SendClientMessage(playerid,-1,string);
    ShowPlayerDialog(playerid,DIALOG_IMOBEL2,DIALOG_STYLE_LIST,"Möbelstück","Entfernen\nAuswählen","Weiter","Abbruch");
    return 1;
    }

    ast2ufdyxkb1.png


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

  • Alternativ kannst du es so machen, dann musst du den Slot nicht anzeigen, bzw. escapen:
    case DIALOG_IMOBEL:
    {
    if(response == 1)
    {
    new count, mobelid = -1;
    for(new i = 0; i < MAX_PLAYER_INVENTAR; i++)
    {
    if(Spieler[playerid][Inventarslot][i] != -1)
    {
    if(count == listitem)
    {
    mobelid = i;
    break;
    }
    count++;
    }
    }
    if(mobelid == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Kein Slot gefunden.");
    new string[15];
    mobelidVar[playerid] = mobelid;
    format(string,sizeof(string),"%d",mobelid);
    SendClientMessage(playerid,-1,string);
    ShowPlayerDialog(playerid,DIALOG_IMOBEL2,DIALOG_STYLE_LIST,"Möbelstück","Entfernen\nAuswählen","Weiter","Abbruch");
    return 1;
    }
    else return 1;
    }


    Die Schleife zählt praktisch einfach nochmal die angezeigten Items durch, bis zu dem, das du angeklickt hast.