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
"Admin" oder "Moderator" vor Namen im Chat.
- Samy-t42
- Geschlossen
- Erledigt
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
-
-
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 1OnPlayerCommandText()
{
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 ?!ZitatBTW: 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: Hies 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..
-
return 0; ist Quatsch, denn dann wird der Text nicht gesendet 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
-
Auf Real sAn Andreas geht es
daher weiß es auch samy
Ich weiß zwar net wie aber es geht, und man muss auch net /say davor schreiben
-
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
-
breadfish.de
Hat das Thema geschlossen.