/admins Befehl

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

  • COMMAND:admins(playerid,params[])
    {
    new str[128];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(User[i][Admin] > 0)
    {
    format(str,128,"%s: %s",Adminrang[User[i][Admin]],PlayerName(i));
    }
    }
    SendClientMessage(playerid,GRAU,"Admins online:");
    SendClientMessage(playerid,GRAU,str);
    return 1;
    }
    Warum werden nicht alle Admins aufgeliset die online sind?


    mfg

  • COMMAND:admins(playerid,params[])
    {
    new string[300];
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(User[i][Admin]>0)
    {
    format(string,300,"%s\n%s: %s",string,Adminrang[User[i][Admin]],PlayerName(i));
    }
    }
    SendClientMessage(playerid,GRAU,"Admins online:");
    SendClientMessage(playerid,GRAU,string);
    return 1;
    }


    Probier das mal so.


    EDIT: Der Fehler liegt darin, dass du string immer wieder überschrieben hast, und am Ende immer der letzte Admin eingetragen wurde.


  • Okay, dank dir :)

  • Probier das mal so.


    Das ist aber nicht sehr schön :S


    Schau mal:


    for(new i=0;i<GetMaxPlayers();i++)


    Ganz schlechte Zeile. Hier fragt er immer wieder den Wert von GetMaxPlayers() ab...besser und schneller wäre deshalb:


    for(new i,l=GetMaxPlayers();i<l;i++)


    Desweiteren, wäre es so besser:


    COMMAND:admins(playerid)
    {
    new string[(12+MAX_PLAYER_NAME) * 5]; //5 = Anzahl der Admins, wenn es mehr gibt, erhöhen
    for(new i,l=GetMaxPlayers();i<l;i++) {
    if(!IsPlayerConnected(i) || !User[i][Admin])continue;
    format(string,sizeof string,"%s\n%s: %s",string,Adminrang[User[i][Admin]],PlayerName(i));
    }
    if(!string[0]) return SendClientMessage(playerid,GRAU,"Es sind keine Admins Online!");
    SendClientMessage(playerid,GRAU,"Admins online:");
    SendClientMessage(playerid,GRAU,string);
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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



  • Ich hoffe du weißt das die ausgabe sich nicht auf einen dialog bezieht und SendClientMessage ein ausgaben limit von 168 oder mehr zeichen hat.


    Daher versetze die erste ausgabe des strings vor die schleife
    entferne den zeilenbruch in format und verschiebe SendClientMessage an diese Position, welches den formatierten String enthält.


    (Mit dem Handy online)

  • Ich hoffe du weißt das die ausgabe sich nicht auf einen dialog bezieht und SendClientMessage ein ausgaben limit von 168 oder mehr zeichen hat.


    Daher versetze die erste ausgabe des strings vor die schleife
    entferne den zeilenbruch in format und verschiebe SendClientMessage an diese Position, welches den formatierten String enthält.


    (Mit dem Handy online)


    Gutes Argument, gar nicht darauf geachtet...dann sollte er es so schreiben:


    COMMAND:admins(playerid)
    {
    new string[12 + MAX_PLAYER_NAME];
    for(new i,l=GetMaxPlayers();i<l;i++) {
    if(!IsPlayerConnected(i) || !User[i][Admin])continue;
    if(!string[0]) SendClientMessage(playerid,GRAU,"Admins online:");
    format(string,sizeof string,"%s: %s",Adminrang[User[i][Admin]],PlayerName(i));
    SendClientMessage(playerid,GRAU,string);
    }
    return (!string[0]) ? SendClientMessage(playerid,GRAU,"Es sind keine Admins Online!") : 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • SendClientMessage ein ausgaben limit von 168 oder mehr zeichen hat.


    Das Limit liegt bei 144 Zeichen.


    Im Chat das auszugeben ist nicht so sinnvoll, vor allem wenn es zum Beispiel 10 Admins sind.


    COMMAND:admins(playerid)
    {
    new string[1024]; //Admins ändern sich doch dynamisch, da muss man ja jedes mal den Code neu kompilieren...einfach 1024 oder so nehmen, dann passt das.
    for(new i,l=GetMaxPlayers();i<l;i++) {
    if(!IsPlayerConnected(i) || !User[i][Admin]) continue;
    format(string,sizeof(string),"%s%s: %s\n",string,Adminrang[User[i][Admin]],PlayerName(i));
    }
    if(!strlen(string)) return SendClientMessage(playerid,GRAU,"Es sind keine Admins Online!");
    format(string, sizeof(string), "Admins online:\n\n%s", string);
    ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "Admins", string, "Close", "");
    return 1;
    }

  • Wieso? Man kann doch scrollen :rolleyes:


    In einem Server in dem zwei Spieler sind die sich untereinander nicht unterhalten (Chat) und auch sonst keine Nachrichten gesendet werden mag das egal sein. Wenn der Server aber mal 100 Spieler online hat, dann hast du die Zeit dazu gar nicht, weil die 10 Zeilen (oder 20 wenn auf max.) in ein zwei Sekunden schon wieder nach oben geschossen sind, da hauste nur noch auf die Bild (hoch) Taste oder drehst am Rad (im wahrsten Sinne des Wortes!).
    Ich spreche aus Erfahrung, genau deshalb habe ich vor langer langer Zeit meinen /admins Befehl (damals auch im Chat, da es noch keine Dialoge gab) sofort auf Dialog umgeschrieben, da hat man das Problem nicht, dass es abhaut.


    Also warum dann den Chat spammen wenn es auch wesentlich komfortabler geht.


    Außerdem hat man in Dialogen die wesentlich besseren Darstellungsmöglichkeiten.