Lohn setzen per Dialog?

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.
    Aus dem Dialog wo mehrere sachen drinne stehen.
    if(listitem == 2) { new String[2000]; for(new i = 0; i<MAX_PLAYERS; i++) { if(SpielerInfo[i][Fraktion] == SpielerInfo[playerid][Fraktion]) { format(String, sizeof(String),"%s\nSpielername:%s Lohn: %i",String,SpielerName(i),SpielerInfo[i][Lohn]); } } ShowPlayerDialog(playerid, FrakEinstell3, DIALOG_STYLE_LIST,"Lohn",String,"Ok",""); }


    Was muss jetzt hier stehen, damit ich im folgenen DIALOG den Lohn für jede einzelne Person festsetzen kann?


    if(dialogid == FrakEinstell3) { if(response) { // ???? } }

    Mit freundlichen Grüßen,
    Dachdecker

    Einmal editiert, zuletzt von Dachdecker ()

  • Hier mal eine Variante:


    C
    if(listitem == 2)
    {
        new String[1500] = "ID\tName\tLohn";
        for(new i=GetPlayerPoolSize(); i!=-1; i--)
        {
            if(!IsPlayerConnected(i) || SpielerInfo[i][Fraktion] != SpielerInfo[playerid][Fraktion]) continue;
            format(String, sizeof(String),"%s\n%d\t%s\t%d$",String,i,SpielerName(i),SpielerInfo[i][Lohn]);
        }
        ShowPlayerDialog(playerid, FrakEinstell3, DIALOG_STYLE_TABLIST_HEADERS,"Lohn",String,"Ok","");
    }


    und dann so:


    ast2ufdyxkb1.png


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

  • und wie kann ich dann wenn ich sehe oke Dachdecker hat ein Lohn von 3000 und wenn ich dann Doppelklick drauf mache, dass ich auf eine INPUT Dialog wo ich dann den neuen Lohn eingebe und der dann gespeichert wird..?

    Mit freundlichen Grüßen,
    Dachdecker

  • dini hat nichts mit PVars zu tun ._.


    Das eine ist eine Speicherung, das andere ist quasi eine Speicherung im RAM und nicht im Stack wie bei einer Variable ^^


    Du machst quasi folgendes:


    SetPVarInt(playerid, "lohn_id", pID);


    Und dann öffnest du einen neuen Dialog und dort setzt du dann den lohn so:



    new pID = GetPVarInt(playerid, "lohn_id"), lohn = strval(inputtext);
    DeletePVar(playerid, "lohn_id"); //Wichtig! Hier Ram reinigen


    //Und nun haste die pID = Der Spieler wo der Lohn gesetzt werden soll...lohn = der Betrag vom Lohn :)

    ast2ufdyxkb1.png


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

  • Ja den SetPVarInt muss ich beim FrakEinstell3 machen. aber ich muss ihm ja da auch den ShowPlayerDialog(playerid,DIALOG_STYLE_INPUT zeigen und das klappt ja nicht ... da vorher ein DIALOG_STYLE_LIST war und ich erst die if(listitem) abfrage mmachen muss oder nicht??

    Mit freundlichen Grüßen,
    Dachdecker

  • Doch...das kannst du da einfach drunter klatchen..schau dir meinen code an..da unter die if-Abfrage kommt das alles mit dem IsPlayerConnected :D


    In dem Fall musste kein if(listitem) checken, da wir die ID über den inputtext filtern und der je nach listitem angepasst ist :)

    ast2ufdyxkb1.png


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

  • Wenn ich doppelklick auf das erste mache wo mein Name und der Lohn steht. dann verschwindet der Dialog und kein neuer kommt...



    if(dialogid == FrakEinstell3)
    {
    if(!response) return 1;
    new pID,tmp[3];
    tmp[0] = inputtext[0];
    if('0' <= inputtext[1] <= '9') tmp[1] = inputtext[1];
    if('0' <= inputtext[2] <= '9') tmp[2] = inputtext[2];
    pID = strval(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Rot,"Nicht mehr on!");
    SetPVarInt(playerid, "lohn_id",pID);
    new L1[259],L2[259];
    format(L1,sizeof(L1),"%s`s Lohn setzen",SpielerName(pID));
    format(L2,sizeof(L2),"Geben Sie den neuen Lohn für %s ein",SpielerName(pID));
    ShowPlayerDialog(playerid, FrakEinstell4, DIALOG_STYLE_LIST,L1,L2,"Bestätigen","Abbrechen");
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • ...ja dann prüf was passiert ^^


    Mach n print-Debug und schau..was aufgerufen wird..und so :D


    Kaliber ich hab doch keine ahnung hab vor nichtmal einer Woche angefangen wieder zu scripten.. ich komme echt nicht weiter.. und mit debug hab ich noch nie wirklich irgendwas gemacht...
    Ich brauch echt eine Lösung... mit eventueller Erklärung...

    Mit freundlichen Grüßen,
    Dachdecker

  • Wenn ich doppelklick auf das erste mache wo mein Name und der Lohn steht. dann verschwindet der Dialog und kein neuer kommt...


    if(dialogid == FrakEinstell3) { if(!response) return 1; new pID,tmp[3]; tmp[0] = inputtext[0]; if('0' <= inputtext[1] <= '9') tmp[1] = inputtext[1]; if('0' <= inputtext[2] <= '9') tmp[2] = inputtext[2]; pID = strval(tmp); if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Rot,"Nicht mehr on!"); SetPVarInt(playerid, "lohn_id",pID); new L1[259],L2[259]; format(L1,sizeof(L1),"%s`s Lohn setzen",SpielerName(pID)); format(L2,sizeof(L2),"Geben Sie den neuen Lohn für %s ein",SpielerName(pID)); ShowPlayerDialog(playerid, FrakEinstell4, DIALOG_STYLE_LIST,L1,L2,"Bestätigen","Abbrechen"); return 1; }

    Das ist der Dialog der kommen soll wenn man auf den Spieler drückt?

  • Falls dir die Nachricht ausgegeben wir das der Spieler nicht online ist liegt es an der Konvertierung der ersten Zeichen zu einem integer werde ansonst fällt mir nur auf das Der Dialog den Style DIALOG_STYLE_INPUT beinhalten sollte damit du den wert setzen kannst.


    Zum thema debugen du packst einfach ein print oder printf vorn und nach den returns dann weisst du bis wohin der Code geht ebenfalls kannst du dir auch werde ausgeben lassen bsp die pID dann weißt du mit welchen Werten die Funktion aufgerufen werden und siehst dann ah ok der wert müsste zum bsp so und so sein.

  • kann mir vorstellen das der dialog wahrscheinlich für response 0 zurück gibt sollte normal nicht der fall sein :).


    Für mal die zwei SendClientMessage befehle hinzu


    SendClientMessage(playerid,-1,"test");
    if(!response) return 1;
    SendClientMessage(playerid,-1,"test-2);


    Dann poste nochmal was er ausgibt im chat

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