playerid
#1

how can i get the id of the one who do the command and the one who get the command with variables?
like
bla(:%d) explode bla2(id:%d)
please help me
Reply
#2

pawn Код:
new text[256]
new index;
new secondplayer;
new secondplayername[MAX_PLAYER_NAME];
text = strval(params, index)
secondplayer = strval(text);
GetPlayerName(secondplayer, secondplayername, sizeof(secondplayername));
That's how you get the name of the player in the params of your command.
Reply
#3

i know how to get the player name i need to get the both players id
Reply
#4

here, the 2 best things in the world of scripting: dcmd and sscanf

Код:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
paste that at the top of your gamemode or filterscript, where you will see the other #defines.

now for sscanf

Код:
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':
			{
				setarg(paramPos, 0, _:floatstr(string[stringPos]));
			}
			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;
}
that one is long, copy and paste that at the VERY BOTTOM of your filterscript/gamemode

How to use dcmd

dcmd is way better than regular command text, but it is also confusing. For the explode thing you want to do, its the best though.

Код:
  dcmd(boom, 4, cmdtext);
copy and paste that between the brackets of "public OnPlayerCommandText"

Код:
dcmd_boom(playerid, params[])
{
  new id, str[128], Float:posX, Float:posY, Float:posZ, pname[24], tname[24];
  //if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF0000AA, "Admins command only");
  if(sscanf(params, "i", id)) return SendClientMessage(playerid, 0xFF0000AA, "USAGE: /boom (player ID)");
  if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000AA, "That player is not online");
  GetPlayerPos(id, posX, posY, posZ);
  CreateExplosion(posX, posY, posZ, 7, 10.0);
  GetPlayerName(playerid, pname, sizeof(pname));
  GetPlayerName(id, tname, sizeof(tname));
  format(str, sizeof(str), "%s exploded %s", pname, tname);
  SendClientMessageToAll(0xf0f080EE, str);
  return 1;
copy and paste this AFTER the brackets in OnPlayerCommandText, but BEFORE the next public callback

note: this will let anyone type /boom <player ID> and it will explode that player. however, if you take away the // up in the code, it will make it to where only admins may use that command. :P
Reply
#5

i need with variables and its for commands!!!
why is there creat explosion over there?
Reply
#6

*bump*
5th page

and here is the command if you want:
pawn Код:
if(strcmp(cmd, "/mute", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 1) return DenyMessage(playerid, 1);
      new tmp2[256];
      tmp = strtok(cmdtext, idx);
      new otherplayer = ReturnUser(tmp);
      if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mute [playerid] [reason]");
        if(!IsPlayerConnected(otherplayer)) return SendClientMessage(playerid, COLOR_WHITE, "аййгй щвей");
    GetPlayerName(otherplayer, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        if(otherplayer != INVALID_PLAYER_ID)
    }
        idx++;
        }
        new offset = idx;
        new result[64];
        while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
        {
            result[idx - offset] = cmdtext[idx];
            idx++;
        }
        result[idx - offset] = EOS;
        if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mute [playerid] [reason]");
    {
        format(string, sizeof(string), "Admin \"%s\"(ID:%d) muted \"%s\"(ID:%d) for %s", giveplayer, sendername, result);
        SendClientMessageToAllEx(COLOR_RED, string);
        format(string, sizeof(string), "You have been mute by Admin \"%s\"(ID:%d) for %s", giveplayer, sendername, result);
        SendClientMessageToAllEx(COLOR_RED, string);
        format(string, sizeof(string), "You might be unmuted soon", giveplayer, sendername, time);
        SendClientMessageToAllEx(COLOR_RED, string);
       
        Muted[otherplayer] = 1;
        PlaySound(playerid,1085);
        return 1;
    }
i dont know how to put the variables in here:
pawn Код:
format(string, sizeof(string), "You have been mute by Admin \"%s\"(ID:%d) for %s", giveplayer, sendername, result);
        SendClientMessageToAllEx(COLOR_RED, string);
please help me
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)