[SA:MP] Wie kann ich sowas scripten? - Adminliste

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
  • Wie soll sie denn aussehen?


    In deinem Dialog...oder soll sie oben im Text stehen? Oder richtig schön verziert mit einem TextDraw..oder soll sie auf eine Wand geschrieben sein?


    Da gibt es sehr viele Möglichkeiten ^^

    ast2ufdyxkb1.png


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

  • Du musst eine Schleife erstellen, die das Adminlevel jeden Spielers abfragt.
    Wenn ein Spieler dann ein Admin ist, gibst du das an den Spieler, der die Liste sehen soll, aus.
    Dafür eignet sich [wiki]SendClientMessage[/wiki] oder - etwas komplexer - [wiki]ShowPlayerDialog[/wiki].

  • Ich habe schnell einen Code für dich geschrieben, passe ihn noch auf dein Skript an!
    Probiere den Code aber auch bitte zu verstehen, ist eigentlich alles von selbst zu erklären.


    ->PWN Code <-


    -> Bilder <-

  • Huch, danke habe es mir anders vorgestellt :(


    Vielen Dank dir :)

  • Funktioniert aber nicht ganz, außer man testet nur mit sich selbst:

    ocmd:admins(playerid){ShowAllAdmins(playerid); return 1;}
    stock ShowAllAdmins(playerid)
    {
    new string[1024], str[20];
    for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(PlayerInfo[playerid][pAdminlevel] < 1)continue;// hier muss i statt playerid
    if(PlayerInfo[playerid][pAdmindienst] == 0) str = "{FF0000}Nein";// hier muss i statt playerid
    else if(PlayerInfo[playerid][pAdmindienst] == 1)str = "{69FF00}Ja";// hier muss i statt playerid
    GetPlayerName(playerid, playername, sizeof playername),// hier muss i statt playerid
    format(string, sizeof string, "%s\n%i. %s | %s | Dienst: %s", string, i+1, getAdmin(playerid), playername, str);// auch hier muss i statt playerid
    }
    ShowPlayerDialog(playerid, DIALOG_SHOW_ADMIN, DIALOG_STYLE_LIST, "Admins", string, "Jaman", "Jaman");
    return 1;
    }
    stock getAdmin(playerid)
    {
    new str[34];
    switch(PlayerInfo[playerid][pAdminlevel])
    {
    case 0: str = "Zivilist";
    case 1: str = "Moderator";
    case 2: str = "Administrator";
    case 3..5: str = "blabla";
    case 6: str = "Projektleiter";
    }
    return str;
    }

    Du könntest auch mit GetPlayerName prüfen, ob die Spielerid verbunden ist. Anstatt dort direkt Ja/Nein in der ShowAllAdmins herauszufinden, würde ich daraus eine eigene Funktion machen.
    // z.B.
    IsAdminOnDuty(playerid)

  • @Goldkiller
    Es war schon Sandmänchenzeit, ich war unkonzentriert ^^
    Ajo, ist aber nicht Sinnvoll daraus direkt eine Funktion zu machen.
    Ich arbeite da einfach mit Makros, was denke mal sowieso viel Praktischer ist, für kleine Sachen.


    Und zu deiner Aussage "Mit dem Namen die Gültigkeit überprüfen", wenn ich den Online Status einer ID abfragen möchte geht es auch mit dem namen ja ?


    Ob das sooo sinnvoll ist, dass noch mit strings statt Nummern prüfen zu lassen, weis ich nicht.
    -> Online Status <-


    -> verbesserter Code für /admins <-


    Und @Goldkiller, glaube echt es wäre am besten man fragt den Namen einfach so ab.
    -> Name herausfinden <-

  • Ajo, ist aber nicht Sinnvoll daraus direkt eine Funktion zu machen.
    Ich arbeite da einfach mit Makros, was denke mal sowieso viel Praktischer ist, für kleine Sachen.

    Selbst als Macro steigert es die Lesbarkeit. getAdmin() ist auch als extra Methode vorhanden, wieso also nicht auch für den Duty-Status ;)


    Und zu deiner Aussage "Mit dem Namen die Gültigkeit überprüfen", wenn ich den Online Status einer ID abfragen möchte geht es auch mit dem namen ja ?


    Ob das sooo sinnvoll ist, dass noch mit strings statt Nummern prüfen zu lassen, weis ich nicht.

    Zitat

    Return Values:
    The length of the player's name. 0 if player specified doesn't exist.
    The player's name is stored in the specified array.

    Heisst:

    for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++) {
    if(GetPlayerName(i,playername,sizeof(playername))) {
    // Spielerid ist verbunden. Kein IsPlayerConnected notwendig
    }
    }


    Zu deinem verbessertem Code:
    Der war mMn vorher besser. getAdmin ist leider lowerCamelCase (zwar oben auch schon gewesen aber alles andere UpperCamelCase). Jetzt ist es auch nicht sicher im Umgang mit dem Index :/.


  • for(new i, playername[MAX_PLAYER_NAME];i<GetMaxPlayers();i++) {
    if(GetPlayerName(i,playername,sizeof(playername))) {
    // Spielerid ist verbunden. Kein IsPlayerConnected notwendig
    }
    }


    --> playername ist aber leer, er würde nichts finden :( <-
    Und wüsste auch nicht wieso das mehr sinn macht als z.B einfach IsPlayerConnected().


    Oder was auch gehen würde ..


    -> Onlinestatus prüfen, 2 Möglichkeiten mehr <-

  • Wie bereits Kaliber schon sagte, nutze die Codes hier in dem Beitrag als anlaufstelle.
    Kannst dir ggf. auch mal den SAMP Color-Picker herunterladen, und dort dann auf HTML gehen, du pickst dir eine Farbe heraus und kannst diese wiefolgt in Dialogen verwenden.


    -> Beispiel für verschiedene Farben <-
    ShowPlayerDialog(playerid, dialogid, dialogstyle, "blabla", "{FFBE00}Orange|{DC00FF}Lila|{FFFFFF}Weis", "bla", "bla");

  • Beitrag von reaL. ()

    Dieser Beitrag wurde von Developer aus folgendem Grund gelöscht: Spam ().