25.12.2016, 17:08
There are several other methods to do what you're trying to. I'm up late and this is what I've got in my quick drowsy thinking -
Another idea to do it within sscanf itself is to create a custom sscanf specifier.
pawn Код:
CMD:whisper(playerid, params[]) {
new
target[MAX_PLAYER_NAME], //You're gonna take in ID/name as a string.
text[128],
ID //To either be used as player ID or mask ID.
;
if(sscanf(params, "s["#MAX_PLAYER_NAME"]s[128]", target, text))
return SendClientMessage(playerid, COLOR_GREY, "USAGE : /whisper [playerid/name/maskid] [text]");
if(!IsNumeric(target)) //If the second argument given is not numeric, it's probably a player name?
ID = GetPlayerNameByID(target); //Build a custom function that gets player ID from player name.
else
ID = strval(ID); //If it's an integer, it could either be player ID or mask ID.
if(ID > MAX_PLAYERS) //Like you mentioned earlier, if it's greater than MAX_PLAYERS..
//It's a mask ID.
else
//It's a player ID.
return 1;
}