Spieler anzeigen, obwohl diese Offline sind

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


    Wie kann ich das machen, dass z.b. alle Admin(auch die die offline sind) in einer Liste angezeigt werden, die man mit einem Befehl abrufen kann.
    Kann man eine schleife machen die alle dini datein abfragt (von jedem user) ob der z.b. einen admin rang über 0 hat?


    Ich würde mich um eure Hilfe freuen.:)

  • Da musst du eine gesonderte Datei anlegen, in der sich alle Usernamen mit Level befinden. Alternativ kannst du mit dem FileManager Plugin durch alle Dateien loopen, aber das ist aus Performancegründen nicht so sonderlich gut.


    Beste Möglichkeit wäre hier natürlich MySQL, da geht es ohne große Umstände.

  • Du kannst auch einfach eine kleine .sql Datei anlegen wo das gut geht.


    Hier mal ein Beispiel:


    //Oben im Skript:
    new DB:handle;


    //Dann unter OnGameModeInit
    handle = db_open("Admins.db");
    db_query(handle,"CREATE TABLE IF NOT EXISTS `Admins` (`Name`,`Rang`)");


    //Dann beim makeadmin:
    new string[128];
    GetPlayerName(pID,string,MAX_PLAYER_NAME); //pID = Der Typ der Admin werden soll
    format(string,128,"INSERT INTO `Admins` (`Name`,`Rang`) VALUES ('%s','%d')",string,rang); //Hier rang von dem der Admin werden soll
    db_query(handle, string);


    //Wenn er schon ein Adminlevel hat und du das z.B. erhöhst musst du es updaten:
    new string[128];
    GetPlayerName(pID,string,MAX_PLAYER_NAME); //pID = Der Typ der ein höheres Adminlevel bekommt
    format(string,128,"UPDATE `Admins` SET `Rang`='%d' WHERE `Name`='%s'",rang,string); //Hier rang von dem der Admin werden soll
    db_query(handle, string);


    //Wenn Adminlevel = 0 bzw wenn man den Adminposten verliert:
    new string[128];
    GetPlayerName(pID,string,MAX_PLAYER_NAME); //pID der Typ der Adminrang 0 bekommt
    format(string,128,"DELETE FROM `Admins` WHERE `Name`='%s'",string);
    db_query(handle, string);


    //Und hier dann auflisten alle admins:
    ocmd:admins(playerid)
    {
    new DBResult:result,string[512] = "{FFFFFF}",l;
    result = db_query(handle,"SELECT * FROM `Admins`"),l=db_num_rows(result);
    if(!l) return SendClientMessage(playerid,-1,"* Es wurden noch keine Admins eingetragen!"),db_free(result);
    for(new i,rang[11],name[MAX_PLAYER_NAME]; i<l; i++) {
    db_get_field(result,0,name,MAX_PLAYER_NAME);
    db_get_field(result,1,rang,MAX_PLAYER_NAME);
    format(string,512,"%sName: %s (Rang: %d) - %s{FFFFFF}",string,name,strval(rang),CheckOnline(name));
    db_next_row(result);
    }
    db_free(result);
    ShowPlayerDialog(playerid,999,DIALOG_STYLE_MSGBOX,"Admin Liste",string,"Bestätigen","");
    return 1;
    }


    stock CheckOnline(const n[])
    {
    new name[MAX_PLAYER_NAME];
    static const online[] = "{00FF00}Online",offline[] = "{FF0000}Offline";
    for(new i=GetPlayerPoolSize(); i!=-1; i--) if(GetPlayerName(i,name,MAX_PLAYER_NAME) && !strcmp(name,n)) return Online;
    return offline;
    }


    mfg. :thumbup:


    //Edit: Update Query

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • Und wie verbinde ich jetzt die Datenbank mit dem script(login etc..)?


    Wofür? :huh:


    Wenn du dein ganzes Skript umschreiben willst, dann schau dir Tutorials zu MySQL an...ansonsten wenn es nur um die Abfrage geht, kannst du das so lassen :)


    kann ich das auch mit strcmd machen?


    Was? :huh:

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hey,
    ja kannst du, einfach soo


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/Admins", cmdtext, true, 10) == 0)
    {
    new DBResult:result,string[512] = "{FFFFFF}",l;
    result = db_query(handle,"SELECT * FROM `Admins`"),l=db_num_rows(result);
    if(!l) return SendClientMessage(playerid,-1,"* Es wurden noch keine Admins eingetragen!"),db_free(result);
    for(new i,rang[11],name[MAX_PLAYER_NAME]; i<l; i++) {
    db_get_field(result,0,name,MAX_PLAYER_NAME);
    db_get_field(result,1,rang,MAX_PLAYER_NAME);
    format(string,512,"%sName: %s (Rang: %d) - %s{FFFFFF}",string,name,strval(rang),CheckOnline(name));
    db_next_row(result);
    }
    db_free(result);
    ShowPlayerDialog(playerid,999,DIALOG_STYLE_MSGBOX,"Admin Liste",string,"Bestätigen","");
    return 1;
    }
    return 0;
    }

  • Ja, das wird alles automatisch gemacht :)


    Musst nur die einzelnen Codeschnispel an der richtigen Stelle von mir einfügen ^^

    ast2ufdyxkb1.png


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