Hallo,
wie kann ich ein Befehl Scripten das ich einen User ignorieren kann ?
Das heist das ich /ignor (playerid) eintippe und ich bekomme keine nachrichten mehr von dem user den ich ignoriert habe nicht im Chat nicht im /d etc.
gruß
Canary
Hallo,
wie kann ich ein Befehl Scripten das ich einen User ignorieren kann ?
Das heist das ich /ignor (playerid) eintippe und ich bekomme keine nachrichten mehr von dem user den ich ignoriert habe nicht im Chat nicht im /d etc.
gruß
Canary
Naja Admins, Cops, FBI und Army sollte man halt nicht igno können
new ignor[MAX_PLAYERS][MAX_PLAYERS]
OnPlayerDisconnect(playerid,reason)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
ignor[playerid][i] = 0;
ignor[i][playerid] = 0;
}
return 1;
}
nun zum befehl, ich benutze dcmd. müsstest du dann anpassen.
OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(ignor,5,cmdtext);
return 1;
}
dcmd_ignor(playerid,params[])
{
new pID;
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,farbe,"Benutze: /ignor [playerid]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,farbe,"Ungültige playerid!");
if(ignor[playerid][i] == 0)
{
new name[MAX_PLAYER_NAME], str[100];
GetPlayerName(pID,name,sizeof(name));
format(str,sizeof(str),"Sie ignorieren absofort %s(%d)",name,pID);
SendClientMessage(playerid,0x00DD00FF,str);
ignor[playerid][pID] = 1;
}
else
{
new name[MAX_PLAYER_NAME], str[100];
GetPlayerName(pID,name,sizeof(name));
format(str,sizeof(str),"Sie ignorieren absofort nicht mehr %s(%d)",name,pID);
SendClientMessage(playerid,0x00DD00FF,str);
ignor[playerid][pID] = 0;
}
return 1;
}
du musst nun nurnoch die abfrage machen ob ignor[id1][id2] == 1 ist und wenn ja schreibste halt: dieser spieler ignoriert sie.
danke
entlich sowas suchte ich schon lange
Alles anzeigennew ignor[MAX_PLAYERS][MAX_PLAYERS]
OnPlayerDisconnect(playerid,reason)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
ignor[playerid][i] = 0;
ignor[i][playerid] = 0;
}
return 1;
}
nun zum befehl, ich benutze dcmd. müsstest du dann anpassen.
OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(ignor,5,cmdtext);
return 1;
}
dcmd_ignor(playerid,params[])
{
new pID;
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,farbe,"Benutze: /ignor [playerid]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,farbe,"Ungültige playerid!");
if(ignor[playerid][i] == 0)
{
new name[MAX_PLAYER_NAME], str[100];
GetPlayerName(pID,name,sizeof(name));
format(str,sizeof(str),"Sie ignorieren absofort %s(%d)",name,pID);
SendClientMessage(playerid,0x00DD00FF,str);
ignor[playerid][pID] = 1;
}
else
{
new name[MAX_PLAYER_NAME], str[100];
GetPlayerName(pID,name,sizeof(name));
format(str,sizeof(str),"Sie ignorieren absofort nicht mehr %s(%d)",name,pID);
SendClientMessage(playerid,0x00DD00FF,str);
ignor[playerid][pID] = 0;
}
return 1;
}
du musst nun nurnoch die abfrage machen ob ignor[id1][id2] == 1 ist und wenn ja schreibste halt: dieser spieler ignoriert sie.
könntes du das vill auch ohne cmd mal schreiben wehr echt net da ich nicht mit cmd arbeite
WIe meinst du das? das ist ganz normal dcmd.. meinst du ganz normal unter OnPlayerText(playerid,cmdtext[])
wenn ja, ne kann ich nicht da ich es bisher nur mit dcmd gemacht habe wenn parameter benötigt werden.
hmm kannse mir den zeigen wie ich dcmd in mein gm einbauen kann weil bis jetzt habe ich alle befehle normal mit onplayercommandtext als zb /ban player id grund
#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
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;
}
Um nun ein befehl zu scripten musst du den unter OnPlayerCommandText definieren:
//dcmd(cmd,länge,cmdtext);
//beispiel:
dcmd(test,4,cmdtext);
und nun musst du außerhalb der publics den befehl scripten:
dcmd_test(playerid,params[])
{
SendClientMessage(playerid,0x00DD00FF,"Test");
return 1;
}