Problem mit Dialog bezüglich Admins

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
  • Hey bei meinem Dialog wird immer nur ein Admin angezeigt obwohl 2 online sind was ist falsch? oO


    ocmd:admins(playerid,params[])
    {
    new text[100];
    new string[128],name[MAX_PLAYER_NAME],var,level;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && isPlayerAnAdmin(i,1))
    {
    if(GetPVarInt(i,"Adminlevel")==1) {text = "Moderator"; }
    if(GetPVarInt(i,"Adminlevel")==2) {text = "Lite Admin"; }
    if(GetPVarInt(i,"Adminlevel")==3) {text = "Admin"; }
    if(GetPVarInt(i,"Adminlevel")==4) {text = "Full Admin"; }
    if(GetPVarInt(i,"Adminlevel")==5) {text = "Server Leader"; }
    format(string, sizeof(string), "{F5FF00}%s (ID: %d) - {2DFF00}Level %d {F00000}(%s)",PlayerName(i),playerid,GetPVarInt(i,"Adminlevel"),text);
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"{F00000}Admins",string,"Ok","");
    var++;
    }
    }
    if(!var)
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"{F00000}Admins","{F00000}Zur Zeit sind keine Admins online!","Ok","");
    return 1;
    }


    Hat wohl was mit der Schleife bzw dem string zu tun.

  • ocmd:admins(playerid,params[])
    {
    new text[100];
    new string[128],name[MAX_PLAYER_NAME],var,level;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && isPlayerAnAdmin(i,1))
    {
    if(GetPVarInt(i,"Adminlevel")==1) {text = "Moderator"; }
    if(GetPVarInt(i,"Adminlevel")==2) {text = "Lite Admin"; }
    if(GetPVarInt(i,"Adminlevel")==3) {text = "Admin"; }
    if(GetPVarInt(i,"Adminlevel")==4) {text = "Full Admin"; }
    if(GetPVarInt(i,"Adminlevel")==5) {text = "Server Leader"; }
    format(string, sizeof(string), "%s{F5FF00}%s (ID: %d) - {2DFF00}Level %d {F00000}(%s)\n",string,PlayerName(i),i,GetPVarInt(i,"Adminlevel"),text);
    var++;
    }
    }
    if(!var)
    {
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"{F00000}Admins","{F00000}Zur Zeit sind keine Admins online!","Ok","");
    }else
    {
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"{F00000}Admins",string,"Ok","");
    }
    return 1;
    }


    edit: 15:58 - 9.4.13:


    Dann erklär ich halt nochmal was ich gemacht habe. Anstatt den String immer neu zu formatieren und nur die letzte Formatierung in einem Dialog auszugeben, wird nun der alte String immer an den Vorherigen angehangen (rekrsiv wenn man so will). Erst nachdem alle Spieler durchgegangen wurden, wird der String in einem GUI dargestellt. Und das auch nur, wenn mindestens ein Admin online ist (else case).


    Ja stimmt man kann das auch mit switch case machen, aber Jacke wie Hose.

    2 Mal editiert, zuletzt von Hagi ()

  • Hagi: Ich glaube mit einem 128er String kommste nicht weit :D
    Des Weiteren würde ich statt immer GetPVarInt... einen switch verwenden.


    Spoiler anzeigen
    new rang[32];
    switch(GetPVarInt(i,"Adminlevel"))
    {
    case 0:{rang="Kein Admin";}
    case 1:{rang="Moderator";}
    case 2:{rang="Lite Admin";}
    case 3:{rang="Admin";}
    case 4:{rang="Full Admin";}
    case 5:{rang="Server Leader";}
    default:{rang="ERROR";}
    }


    ##edit


    Und beim format ist ein Fehler:
    http://awesomescreenshot.com/0ed156ved8


    Da würde immer deine eigene ID stehen und nicht die des Spielers (Da steht playerid statt i).

    Einmal editiert, zuletzt von IntelligenT () aus folgendem Grund: Zitat eingefügt

  • format(string, sizeof(string), "{F5FF00}%s (ID: %d) - {2DFF00}Level %d {F00000}(%s)\n",PlayerName(i),playerid,GetPVarInt(i,"Adminlevel"),text);// \n für zeilenumbruch


    Aha ?
    Ich hab es zwar schonmal genannt aber anscheinend liest man die Beiträge davor neuerdings nichtmehr.
    PS: Warum so umständlich mit strcat und 2 Strings, wenn es auch einfacher gehts (Siehe Hagi's Beitrag)......

  • Jetzt erklär mir mal, was daran falsch ist ?!
    Ich hab das in meinem Script auch so und es funktioniert 200%tig.


    Ich hätte es so gemacht

    ocmd:admins(playerid,params[])
    {
    new string[1024],anzahl=0;
    string[0] = '\0';
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && isPlayerAnAdmin(i,1))
    {
    format(string,sizeof(string),"%s{F5FF00}%s (ID: %d) - {2DFF00}Level %d {F00000}(%s)\r\n",string,PlayerName(i),i,GetPVarInt(i,"Adminlevel"),AdminRangName(i));
    anzahl++;
    }
    }
    if(anzahl > 0)
    {
    ShowPlayerDialog(playerid,0,DIALOG_STYLE_LIST,"Admins auf dem Server",string,"Schließen","");
    }
    else return SendClientMessage(playerid,0xFFFFFFFF,"Zurzeit sind keine Admins auf dem Server.");
    }

    stock AdminRangName(playerid)
    {
    new rang[32];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 0:{rang="Kein Admin";}
    case 1:{rang="Moderator";}
    case 2:{rang="Lite Admin";}
    case 3:{rang="Admin";}
    case 4:{rang="Full Admin";}
    case 5:{rang="Server Leader";}
    default:{rang="ERROR";}
    }
    return rang;
    }

  • Mein Gott hast du ne Ahnung.....
    Do u can read ?
    Bei jedem Spieler wird der alte String in den Neuen reinkopiert.........


    Zitat

    format(string,sizeof(string),"%s{F5FF00}%s (ID: %d) - {2DFF00}Level %d {F00000}(%s)\r\n",string,PlayerName(i),i,GetPVarInt(i,"Adminlevel"),AdminRangName(i));