sscanf partial name check -
ReLoaD90 - 22.06.2014
Hey guys, I'm trying to make it so that in a command, sscanf(updated to the latest version), besides checking for multiple occurances, to display an additional informative message.
So i've got this:
pawn Код:
if(sscanf(params, "?<CELLMIN_ON_MATCHES=1>r", id)) return SendClientMessage(playerid, -1, "Wrong syntax!");
if (id == cellmin)
{
return SendClientMessage(playerid, -1, "There are more than 1 player with that part of name in it!");
}
This is what I've done so far. What I want to do as well, is to make the command show in the chat the name of the players which sscanf met the part of text in. Something like:
Input:
Chat output:
pawn Код:
There are more than 1 player with that part of text in their name! Please use an ID:
1. [TAG]Potato (ID 1)
2. Potato (ID 2)
3. ILovePot (ID 3)
How would it be possible to do that?
Thanks in advance.
Re: sscanf partial name check -
Vince - 22.06.2014
https://github.com/Y-Less/sscanf/wiki/Users#user-lists
Re: sscanf partial name check -
ReLoaD90 - 22.06.2014
So in my case, what would the size of the array be? 2?
Later edit:
Let's say I have the following command:
pawn Код:
COMMAND:goto(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
new plo, string[150];
if (sscanf(params, "r", plo))
{
SendClientMessage(playerid, COLOR_GRAD2, "Usage: /goto <player>");
return 1;
}
new Float:plocx,Float:plocy,Float:plocz;
if (IsPlayerConnected(plo))
{
if(plo != INVALID_PLAYER_ID)
{
if (PlayerInfo[playerid][pAdmin] >= 1)
{
GetPlayerPos(plo, plocx, plocy, plocz);
SetPlayerInterior(playerid, GetPlayerInterior(plo));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(plo));
SetPlayerPos(playerid, plocx, plocy, plocz);
}
else
{
SendClientMessage(playerid, -1, "You're not an admin!");
}
}
}
else
{
SendClientMessage(playerid, -1, "That's player is NOT connected!");
}
}
return 1;
}
In order to convert it for partial name matches, should I replace plo (like in here: "GetPlayerPos(plo, plocx, plocy, plocz);") with plo[0]?
Update:
I've done this:
pawn Код:
COMMAND:goto(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
new plo[2], string[150];
if (sscanf(params, "r[2]", plo))
{
SendClientMessage(playerid, COLOR_GRAD2, "Usage: /goto <player>");
return 1;
}
if(!CheckMultipleNames(playerid, plo)) return 1;
new Float:plocx,Float:plocy,Float:plocz;
if (IsPlayerConnected(plo[0]))
{
if(plo[0] != INVALID_PLAYER_ID)
{
if (PlayerInfo[playerid][pAdmin] >= 1)
{
GetPlayerPos(plo[0], plocx, plocy, plocz);
SetPlayerInterior(playerid, GetPlayerInterior(plo[0]));
SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(plo[0]));
SetPlayerPos(playerid, plocx, plocy, plocz);
}
else
{
SendClientMessage(playerid, -1, "You're not an admin!");
}
}
}
else
{
SendClientMessage(playerid, -1, "That's player is NOT connected!");
}
}
return 1;
// where:
CheckMultipleNames(playerid, array[])
{
new strfound[180], yesno, foundplayer, name[MAX_PLAYER_NAME];
for(new i = 0; array[i] != INVALID_PLAYER_ID; i++)
{
GetPlayerName(array[i], name, sizeof(name));
if (array[i] == cellmin)
{
if(yesno == 0)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "(!) Multiple players have been found matching that name. Use one of the IDs:");
format(strfound, sizeof(strfound), "%d. %s [ID %d]", yesno+1, GetPlayerNameEx(foundplayer), foundplayer);
SendClientMessage(playerid, COLOR_LIGHTRED, strfound);
}
yesno ++;
format(strfound, sizeof(strfound), "%d. %s [ID %d]", yesno+1, name, array[i]);
SendClientMessage(playerid, COLOR_LIGHTRED, strfound);
}
foundplayer = array[i];
}
if(yesno > 0) return 0;
return 1;
}
The output is this:
pawn Код:
(!) Multiple players have been found matching that name. Use one of the IDs:
1. [TAG]Potato (ID 1) // first name, displayed correctly
2. [TAG]Potato (ID --) // ID '--', i don't know why, and it displays the same name as the first player (i don't know why) - the second player should be just 'Potato'
SERVER: Unknown command.
What's wrong?
Re: sscanf partial name check -
ReLoaD90 - 23.06.2014
Bump! (24 hours passed)
Re: sscanf partial name check -
ReLoaD90 - 23.06.2014
Fixed. Thanks ******.