"Admin" oder "Moderator" vor Namen im Chat.

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,
    hab mich schon doof gesucht, und leider nix gefunden.
    Ich sehe immer auf anderen RL Servern, das wenn Leute mit beonderen rechten schreiben, im Chat immer "Admin" Vor dem Namen steht.
    Also:
    Admin XXX: test
    Wie kriege ich das hin?
    BTW: Kann mir jemand ein Housesystem empfehlen, mit dem ich IG Häuser erstellen kann?
    Danke
    Samy

  • Ich machs dir net vor !


    Variable erstellen und diese abfragen bei deinem Befehl und wenn z.B Adminlevel 1 ist dann stell die Variable auf ,,Moderator" oder was du willst und wenn adminlvl = 2 z.B Variable xy auf ,,Admin" ... Und dann beim Anzeigestring im Command einfach den String einfügen

  • ich habe hier mal ein dcmd für dich. mit /say schreibt man dann kommt da: Admin blablub: TEXT


    ich kanns dir erklären:


    zuerst fragste den namen ab:
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));


    nun machste folgendes:
    new string[256];
    format(string,sizeof(string),"Admin %s: %s",name,text);
    SendClientMessageToAll(Farbe,string);


    das problem ist hier, das du abfragen musst was er geschrieben hat, wennde das unter OnPlayerText machst, wo der text schon definiert ist, wird die nachricht wohl doppelt gesendet: einmal ohne Admin blablub: text und einmal mit.


    deswegen musste dir eigene befehle machen wie /o, /say oder so.


    hier mal meins:


    //unter den includes:
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    OnPlayerCommandText()
    {
    dcmd(say,3,cmdtext);
    return 1;
    }


    //außerhalb eines publics:
    dcmd_say(playerid,params[])
    {
    new message[256];
    if(sscanf(params, "s", message))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /say [Nachricht]");
    }
    else if(Mute[playerid] == 1)
    {
    return SendClientMessage(playerid, COLOR_RED, " Du bist gemutet, warte bis ein Admin dich unmutet!");
    }
    else
    {
    if(SpielerInfo[playerid][alvl]>=1)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new string[256];
    format(string, sizeof(string), "Admin %s: %s", name, message);
    SendClientMessageToAll(0xFF9100FF, string);

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin!");
    }
    }
    return 1;
    }
    //wennde sscanf noch net hast, ganz unten im script:


    stock sscanf(string[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {


    new changestr[16], changepos = 0, strpos = stringPos;
    while(changepos < 16 && string[strpos] && string[strpos] != delim)
    {
    changestr[changepos++] = string[strpos++];
    }
    changestr[changepos] = '\0';
    setarg(paramPos,0,_:floatstr(changestr));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }



    den command musste deinem admin system anpassen...

  • new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name,sizeof(name));
    format(string,sizeof(string),"%s: %s", name, text);
    if(IsPlayerAdmin(playerid)) format(string,sizeof(string),"Admin %s: %s", name, text);
    SendClientMessageToAll(Farbe,string);

  • Zitat

    das problem ist hier, das du abfragen musst was er geschrieben hat, wennde das unter OnPlayerText machst, wo der text schon definiert ist, wird die nachricht wohl doppelt gesendet: einmal ohne Admin blablub: text und einmal mit.


    deswegen musste dir eigene befehle machen wie /o, /say oder so.


    Das ist schade.
    Aber es gibt Server, da geht das.
    Ich kann mir kaum vorstellen, das die vor jedem Text /say schreiben ?!

    Zitat

    BTW: Kann mir jemand ein Housesystem empfehlen, mit dem ich IG Häuser erstellen kann?

  • hmm doch glaube schon, du musst das mal ausprobieren unter OnPlayerText, weil wenn du normal schreibst, wird die nachricht ja verschickt, automatisch und wennde dann noch das mit Admin: einbaust wirds doppelt verschickt. bsp:


    du schreibst: "Hi"


    im Chat:


    XY: Hi
    Admin XY: Hi


    es könnte haber kalppen wennde bei OnPlayerText return 1 zu return 0 machst also:


    OnPlayerText(...)
    {
    //wenn der spieler admin ist, hier musst deine Admin abfrage hin
    {
    return 0;
    }
    return 1;
    }


    ich weiß aber net ob man es so machen kann..

    Einmal editiert, zuletzt von Simon ()

  • return 0; ist Quatsch, denn dann wird der Text nicht gesendet :pinch: da muss ne Abfrage hin ob der Spieler ein Admin ist, und wenn ja wird der Text halt umformatiert mit Hilfe eines Strings.^^ So einfach ist das :P

  • Der Text soll ja gar nicht gesendet werden, weil man ja einen neuen Text benutzt und wenn er gesendet wird (return true) wäre es kein Range Chat mehr

  • public OnPlayerText(playerid, text[])
    {
    if(Spieler[playerid][AdminLevel] > 0)
    {
    new pname[MAX_PLAYER_NAME], adminstring[256];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(adminstring, sizeof(adminstring),"[ADMIN]%s: %s",pname, text);
    }
    return 1;
    }
    }
    So müsstes eig gehen...

  • Hier mal ein Beispiel
    public OnPlayerText(playerid, text[])
    {
    new Rang = SpielerDaten[playerid][Adminlevel];
    new Nachricht[256];
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,sizeof(pName));
    switch(Rang)
    {
    case 1:{format(Nachricht,sizeof(Nachricht),"Supporter %s:%s",pName,text);}
    case 2:{format(Nachricht,sizeof(Nachricht),"Moderator %s:%s",pName,text);}
    case 3:{format(Nachricht,sizeof(Nachricht),"Admin %s:%s",pName,text);}
    }
    return SendClientMessage(playerid,COLOR_WEISS,Nachricht);
    }
    Hoffe das ist das was ihr meint nicht getestet
    Pixel
    //edit bei ]hp[´s Variante wird immer [Admin] Text gemachtbei meiner nicht
    kleinen Bug gefixxt ;)

  • Erstmal abfragen welchen namen der hat


    GetPlayerName.....


    dann mit format ausgeben und eben den herrausgefundenen namen mit z.b hinten %s , pname);


    dann eben die nachricht senden