Dialog problem

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
  • Servus,


    ich möchte mir einen /wanteds Befehl scripten nur es klappt nicht ganz. Es soll ein Dialog erscheinen in der dann die ganzen Spieler mit Namen und der Wantedanzahl stehen.
    Wenn es nur einen Spieler mit Wanteds gibt, soll halt nur der eine Spieler im Dialog drin stehen und wenn es mehrere gibt dann soll eine Zeile darunter der andere Spieler stehen..


    Nur wie mach ich das?


    Das habe ich bis jetzt und es funktioniert nicht ._.


    ocmd:wanteds(playerid, params[])
    {
    new list[128];
    for(new i = 0;i < GetMaxPlayers();i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerWantedLevel(i) > 0)
    {
    format(list, sizeof(list), "%s: %i Wanteds", PlayerName(i), GetPlayerWantedLevel(i));
    }
    else if(GetPlayerWantedLevel(i) == 0)
    {
    format(list, sizeof(list), "Momentan gibt es keine Wanteds");
    }
    }
    }
    ShowPlayerDialog(playerid, DIALOG_WANTEDS, DIALOG_STYLE_MSGBOX, "Wanteds", list, "Okay", "");
    return 1;
    }

    Mit freundlichen Grüßen - FamoZ

  • Bin mir nicht ganz sicher, habs mal auf die schnelle gemacht ;)



    Kann sein, dass es auch nicht geht :D

  • Versuch mal so:


    Von:
    if(IsPlayerConnected(i))


    zu:
    if(!IsPlayerConnected(i)) continue;

    Einmal editiert, zuletzt von FrostWolf ()

  • Bin mir nicht ganz sicher, habs mal auf die schnelle gemacht ;)



    Kann sein, dass es auch nicht geht :D


    Geht leider nicht. ;(


    Versuch mal so:


    Von:
    if(IsPlayerConnected(i))


    zu:
    if(IsPlayerConnected(i)) continue;


    Und was bringt das? Kannst du das erklären?

    Mit freundlichen Grüßen - FamoZ

  • Schon das Wort "continue" sagt viel!! (fortsetzen)


    /e ich würde dir empfehlen, das du von
    if(GetPlayerWantedLevel(i) > 0)
    zu:
    if(GetPlayerWantedLevel(i) >= 1)

    machen würdest ;)

  • Ja schon aber ich versteh den zusammenhang dazu nicht. ^^


    Jedenfalls gehts nicht, danke für den versuch...


    //EDIT Und was solls bringen? Ist doch nix anderes? :P


    Noch einer Ideen?

    Mit freundlichen Grüßen - FamoZ

  • Bitte unterlasse deine unnötigen Posts.


    Ja du schreibst gerade mit mir bei Steam und nein, das stimmt nicht ich habe es getestet!


    //EDIT
    Brauche immer noch Hilfe. ^^

    Mit freundlichen Grüßen - FamoZ

  • Das hier sollte 100% funktioniert. Wurde auch getestet!


    // Einfach verändern!!
    ocmd:wanted(playerid,params[])
    {
    if(!isPlayerACop(playerid)) return SendClientMessage(playerid,COLOR_ROT,"Du bist kein Beamter");
    {
    new string[64];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(GetPlayerWantedLevel(i) >=1)
    {
    SendClientMessage(playerid,COLOR_ROT,"-----Wanteds-------");
    format(string, sizeof(string), "%s(ID:%d) - %d Wanteds\n", SpielerName(i),playerid, GetPlayerWantedLevel(i));
    //SendClientMessage(playerid,BLAU,string);
    ShowPlayerDialog(playerid,DIALOG_WANTED,DIALOG_STYLE_MSGBOX,"Wanteds",string,"Weiter","Abbrechen");
    }
    else if(GetPlayerWantedLevel(i) == 0)
    {
    SendClientMessage(playerid,COLOR_ROT,"Derzeit hat kein Spieler einen Wanted!");
    }
    }
    }
    return 1;
    }


    / beweis das funk. omg!



    Uploaded with ImageShack.us

  • Hast du das auch mit mehreren Spielern gleichzeitig getestet?


    Es geht halt nicht. Es steht immer nur sein eigener Name im Dialog...


    Und hör bitte auf hier sinnlos etwas rein zu posten obwohl ich dir bereits bei Steam 100x gesagt habe das es nicht funktioniert... was bringt dir das?

    Mit freundlichen Grüßen - FamoZ

  • Zitat

    Das hier sollte 100% funktioniert. Wurde auch getestet!


    Das glaub ich dir gerne,macht es trotzdem nicht richtig. Du hast es sicherlich nur mit einem Spieler getestet, daher wohl fehlerfrei.Mit mehr als einem Spieler funktioniert es nicht. Denn sobald
    ein Spieler gefunden wird mit Wanteds, wird für den Spieler der Dialog angezeigt. Nur sein Name taucht in dem Dialog auf. Wird ein weiterer Spieler gefunden, werden seine Daten formatiert und jetzt taucht nur dieser im Dialog auf. Heisst,du beachtest nicht ob zuvor schon Jemand mit Wanteds gefunden wurde.Auch im format ist ein Fehler, playerid anstatt i.
    Das else if ist ebenfalls falsch gesetzt.Hat ein Spieler keine Wanteds, kommt für ihn die Nachricht "Derzeit hat kein Spieler einen Wanted!" und das jedes mal wenn ein Spieler keine Wanteds hat.


    So ist es richtig, schau es dir mal an... vielleicht lernst du etwas daraus ;).
    ocmd:wanted(playerid,params[])
    {
    if(!isPlayerACop(playerid)) return SendClientMessage(playerid,COLOR_ROT,"Du bist kein Beamter");
    {
    new
    string[ 256 ]; // <- wir brauchen einiges an Speicher. Sollte aber ausreichen so
    string[0] = '\0';
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(GetPlayerWantedLevel(i) >=1)
    {
    format(string,sizeof(string),"%s%s(ID:%d) - %d Wanteds\n", string, SpielerName(i),playerid, GetPlayerWantedLevel(i));
    //SendClientMessage(playerid,COLOR_ROT,"-----Wanteds-------");
    //format(string, sizeof(string), "%s(ID:%d) - %d Wanteds\n", SpielerName(i),playerid, GetPlayerWantedLevel(i));
    //SendClientMessage(playerid,BLAU,string);
    // ShowPlayerDialog(playerid,DIALOG_WANTED,DIALOG_STYLE_MSGBOX,"Wanteds",string,"Weiter","Abbrechen");
    }
    /*
    else if(GetPlayerWantedLevel(i) == 0)
    {
    SendClientMessage(playerid,COLOR_ROT,"Derzeit hat kein Spieler einen Wanted!");
    }*/

    }
    if(string[0]) {
    ShowPlayerDialog(playerid,DIALOG_WANTED,DIALOG_STYLE_MSGBOX,"Wanteds",string,"Weiter","Abbrechen"); // Sicher DIALOG_STYLE_MSGBOX und nicht vllt LIST ?
    }
    else { // Wir haben keinen text formatiert, daher wohl auch Niemanden gefunden!
    SendClientMessage(playerid,COLOR_ROT,"Derzeit hat kein Spieler einen Wanted!");
    }
    }
    return 1;
    }


    //Edit: Wird ja wieder grandios eingerückt :\

  • Zu
    Frage 1: Ja, das hab ich mit mehreren Leuten getestet.
    Frage 2: Ja, dann ist was andares falsch
    @

    Goldkiller:
    Ich habs so gelernt ._.


  • Das hast du vllt mit mehreren getestet, zeigt trotzdem immer nur 1 Spieler an.
    Ich verweise nochmal auf meinen Post.
    Dialog problem

    Also haben alle Threads falsch gemacht? z.B. hier Click ! wtf?
    Frage1: Ist die höchste string größe nicht "128"?
    Frage2: string[0] = '\0'; // Für was ist das? warum unbedingt 0 und \ ?

  • Also haben alle Threads falsch gemacht? z.B. hier Click ! wtf?
    Frage1: Ist die höchste string größe nicht "128"?
    Frage2: string[0] = '\0'; // Für was ist das? warum unbedingt 0 und \ ?


    Frage 1. Nein, ist es nicht.Alleine schon ein Array anzulegen mit MAX_PLAYERS ist bei den meisten 500 und somit deutlich mehr als 128 ;) . Es gibt Limits für den Chat, dort war es früher 128 Zeichen. Jetzt ist es aber ~140 wegen den Farbcodes.
    Frage 2. \0 ist NULL-Character.Gibt an, dass der Text an dieser Stelle endet.Eigentlich sollte der String beim neu deklarieren sowieso dort einen NULL-Character habe, ich mach es aber aus gewohnheit immer dazu.


    Zitat

    Also haben alle Threads falsch gemacht? z.B. hier Click ! wtf?


    Ich poste nicht in jeden Thread und sehe auch nicht jeden. Dennoch,dort ist es ebenfalls falsch, gut gemerkt ;).