/admins (schwieriger als gedacht)

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
  • ocmd:admins(playerid,params[])
    {
    new text[128];
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    format(text,sizeof(text),"%s",pName(SpielerInfo[i][Adminlevel]));
    ShowPlayerDialog(playerid,DIALOG_SHOWADMINS,DIALOG_STYLE_MSGBOX,"Alle verfügbaren Admins",text,"Fertig","");
    }
    return 1;
    }
    Würde er jeden weiteren Admin dann auch anzeigen?
    Und gibt es ne Möglichkeit es so zu machen?


    Adminname = ID
    Adminname2 = ID2 usw.


    PS: Ich weiß ich melde mich oft und ich probiere auch viel selbst, komme aber nie an Ziel und Copy & Paste ist falsch, ich will ja lernen und selber schreiben.

  • ocmd:admins(playerid,params[])
    {
    new text[128];
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(SpielerInfo[i][Adminlevel] == 0)continue;
    format(text,sizeof(text),"%s",pName(i));
    }
    ShowPlayerDialog(playerid,DIALOG_SHOWADMINS,DIALOG_STYLE_MSGBOX,"Alle verfügbaren Admins",text,"Fertig","");
    return 1;
    }

  • format(text,sizeof(text),"%s",pName(SpielerInfo[i][Adminlevel]>0));
    Sollte dann auch gehen, denn auch ohne >0 hat er meinen Namen schonmal angezeigt.
    Nur zeigt er auch 2 oder mehr Admins denn an?


    Adminname = ID
    Adminname2 = ID2 usw.


    Ist das auch möglich?


  • Das ist sowieso falsch...
    So sollte es funktionieren, sofern ich es richtig verstanden habe, dass alle Admins in einem Dialog angezeigt werden sollen.

    ocmd:admins(playerid,params[])
    {
    new text[128];
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(SpielerInfo[i][Adminlevel] >= 1){
    format(text,sizeof(text),"%s\n%s",text, name); //Name anpassen
    }


    }
    ShowPlayerDialog(playerid,DIALOG_SHOWADMINS,DIALOG_STYLE_MSGBOX,"Alle verfügbaren Admins\n%s",text,"Fertig","");
    return 1;
    }

  • format(text,sizeof(text),"%s\n%s",text, name); //Name anpassen


    Wieso ist das erste %s text, text wird doch dort definiert?
    pName(i) wäre es dann.


    SoR Mirco, okay danke, also könnte ich diese auch verwenden gut zu wissen, muss es aber eine Abfrage sein und nicht im pName?

  • format(text,sizeof(text),"%s\n%s",text, name); //Name anpassen


    Wieso ist das erste %s text, text wird doch dort definiert?
    pName(i) wäre es dann.


    SoR Mirco, okay danke, also könnte ich diese auch verwenden gut zu wissen, muss es aber eine Abfrage sein und nicht im pName?


    Definiert hast du es schon vorher per new in der Zeile:
    new text[128];
    Also kann man es da auch verwenden.
    Es wird ja nichts Anderes getan, als die Variable "text" nur um einen Adminname + voranstehendem Zeilenumbruch zu erweitern.


  • ocmd:admins(playerid,params[])
    {
    new text[128];
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(SpielerInfo[i][Adminlevel] >= 1){
    format(text,sizeof(text),"%s\n%s ID: %d",text, pName(i),i);
    }


    }
    ShowPlayerDialog(playerid,DIALOG_SHOWADMINS,DIALOG_STYLE_MSGBOX,"Alle verfügbaren Admins\n%s",text,"Fertig","");
    return 1;
    }

  • Da wiederholt er mich 8 mal und setzt immer eine ID + 1

  • Also wird mit text für %s mehr Namen anzeigen möglich, habe ich das richtig verstanden?
    Und wie sieht es mit meiner Möglichkeit aus hinter den Namen die ID von denjenigen noch anzeigen zu lassen?


    Sagen wir es mal so:


    Es gibt 5 Spieler.
    Spieler1, Spieler2, usw.
    Spieler 1,2 und 4 sind Admins.


    Durchlauf 1: text = Spieler1
    Durchlauf 2: text = Spieler1\nSpieler2
    Durchlauf 2: Schleife wird hier neu fortgesetzt, da kein Admin.
    Durchlauf 4: text = Spieler1\nSpieler2\nSpieler4
    Durchlauf 5: Siehe Durchlauf 2


    Am Ende dann:
    text = Spieler1\nSpieler2\nSpieler4

  • Das ist sehr hilfreich.
    So sieht mein Code gerade aus.
    ocmd:admins(playerid,params[])
    {
    new text[128];
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    format(text,sizeof(text),"%s\n%s ID -> %i",text,pName(SpielerInfo[i][Adminlevel]>0),i);
    ShowPlayerDialog(playerid,DIALOG_SHOWADMINS,DIALOG_STYLE_MSGBOX,"Alle verfügbaren Admins",text,"Fertig","");
    }
    return 1;
    }
    Ich kann Screen machen bei bedarf, da er mich 8 mal wieder holt, da sieht dann so aus.


    ID -> 0
    Tiger ID -> 1
    Tiger ID -> 2
    Tiger ID -> 3
    Tiger ID -> 4
    Tiger ID -> 5
    Tiger ID -> 6
    Tiger ID -> 7
    Tiger ID -> 8

  • passt doch auch nicht, oder? Weil wenn 500 Leute drauf sind und dann die IDs von 100-300 z.B. offline gehen, dann werden ja nur die IDs von 0-300 Überprüft, aber die von User mit 300-500 werden ausgelassen, oder irre ich mich?


    Du irrst dich.


    GetMaxPlayers() gibt dir die Anzahl der eingestellten Server Slots aus der server.cfg wieder ;)


    Sprich wie viele Leute maximal auf den Server joinen könen sieht immer so aus (0/100...0/200) << das ist das, dieses Maximum ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Naja, würde trotzdem auf ein Define zurückgreifen und nicht auf die Funktion


    Er macht es ja so:


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


    Das ist natürlich sehr schlecht. So wird nämlich immer die Funktion aufgerufen und somit dauert das wesentlich länger als das Define.


    Was aber zeitgleich (fast bis auf ein paar hunderstel Nanosekunden) gleich ist, ist diese Schleife:


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


    Dann würde man die Funktion gut nutzen und zeitlich gesehen, ist es genauso schnell :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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