Listen Dialog mit SpielerIDS kombinieren

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
  • Guten Tag,


    Mein Name lautet CIBERKILLER.
    Und zwar bräuchte ich mal einen Rat.
    Ich möchte einen Listen Dialog haben, 4 leute stehen drinne.


    name1,name2,name3,name4


    Wenn ich auf name1 klicke soll ich auch die entsprechende ID bekommen, aber meinem code verwechselt er die IDS. (Sprich man klickt auf mich, man bekommt dann aber sich selber ab!)


    Quellcode:
    if(dialogid == DIALOG_TICKETS)
    {
    new tmp_id = listitem += 1;
    if(!tmp_id)return 1;
    if(!response)return 1;
    if(!IsPlayerConnected(tmp_id))return SendClientMessage(playerid, HellRot, "...");
    if(!GetPVarInt(tmp_id, "JustReport"))return SendClientMessage(playerid, HellRot, "FEHLER:{FFFFFF} ...");
    if(tmp_id==playerid)return SendClientMessage(playerid, HellRot, "FEHLER:{FFFFFF} ...");
    }



    Mit freundlichen Grüßen,


    CIBERKILLER

  • Schau:


    //Du machst oben in dein Skript:
    new d_Namen[4];


    //Dann weißt du der Variable die IDs von den Spielern zu, die du haben willst:
    d_Namen[0] = 5; //Also hier hätten wir jetzt Spielerid 5 mit drinnen..usw


    //Dann da wo du deinen Dialog anzeigen willst:
    for(new i,tmp[MAX_PLAYER_NAME]; i<sizeof d_Namen; i++) {
    GetPlayerName(d_Namen[i],tmp,MAX_PLAYER_NAME);
    //Hier formatierst du alles zu einem String und zeigst dann die Namen im Dialog an
    }


    //Und dann unter OnDialogResponse
    if(dialogid == DIALOG_TICKETS) {
    if(listitem >= sizeof d_Namen || !response) return 1;
    new tmp_id = d_Namen[listitem];
    if(!IsPlayerConnected(tmp_id))return SendClientMessage(playerid, HellRot, "...");
    if(!GetPVarInt(tmp_id, "JustReport"))return SendClientMessage(playerid, HellRot, "FEHLER:{FFFFFF} ...");
    if(tmp_id==playerid)return SendClientMessage(playerid, HellRot, "FEHLER:{FFFFFF} ...");
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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


  • Bist du dir Sicher das dass hier Richtig ist ?


    for(new i,tmp[MAX_PLAYER_NAME]; i<sizeof d_Namen; i++) {
    GetPlayerName(d_Namen[i],tmp,MAX_PLAYER_NAME);
    }


    Soweit mir bekannt ist der 1. Parameter von GetPlayerName (playerid). Und du benutzt da d_namen[i]


    Beziehungsweise d_namen kann ja auch als Feldervariable genutzt werden..


    Aber du lässt das ganze ja in tmp ausgeben, dass lässt sich dann nicht einfach mit d_namen wieder auslesen.


    Muss das ganze dann nicht so aussehen ?
    for(new i; i<GetMaxPlayers(); i++) {
    GetPlayerName(i,d_namen[i],MAX_PLAYER_NAME);
    }


    sizeof(d_namen); sollte auch gehen solange genügend Felder erlaubt sind


    Ich bitte um Antwort

  • Ich bitte um Antwort


    Schau dir nochmal genau an was ich gemacht habe, ich speichere in d_Namen nicht die Spielernamen, sondern nur die IDs :)


    Les es dir doch durch, habe doch extra alles kommentiert ^^


    Du solltest in d_Namen ja Spielerids speichern, nämlich genau 4 Stück (und wirklich 4).


    Und naja in tmp steht dann der Spielernamen den du im Dialog anzeigen sollst ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • bitte


    Kaliber das war ein Beispiel mit 4 Namen.
    Es können insgesamt 495 gleichzeitige Tickets abgesendet werden.
    Aktuell Funktioniert es nicht!


    for(new i,tmp[MAX_PLAYER_NAME];i<GetMaxPlayers();i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(IsPlayerNPC(i))continue;
    if(!sStats[i][Eingeloggt])continue;
    if(!GetPVarInt(i, "JustReport"))continue;
    GetPVarString(i, "ticketinput", in, 72);
    GetPlayerName(d_Namen[i],tmp,MAX_PLAYER_NAME);
    format(string, sizeof(string), "{FFFFFF}Author: %s | Inhalt: %s\n%s", tmp, in, string);
    count ++;
    }


    Das ist mein Jetziger Code, also der Richtige name in der Liste wird angezeigt auch der Richtige Inhalt.
    Nur wenn ich drauf klicke passiert nichts!


    Ich lasse d_Namen so zuweisen!


    d_Namen[playerid] = playerid;


    Dies wird in /support zugewiesen, aber ich finde was ich da geschrieben macht kein Sinn!


    new tmp_id = d_Namen[listitem];

  • Es können insgesamt 495 gleichzeitige Tickets abgesendet werden.


    Achso :rolleyes:


    Dann sag das doch :wacko:


    Schick mir deine TeamViewer Daten kurz per PN, dann mach ich dir das schnell, zu faul das hier zu schreiben und zu erklären...xD


    mfg. :thumbup:

    ast2ufdyxkb1.png


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