PDA

Просмотр полной версии : [Вопрос] /id



execution
29.03.2018, 18:05
Команда работает как по нику так и по ид. Когда ввожу ник, то почему-то возвращает [0], даже если игрок в сети.


CMD:id(playerid, params[])
{
new
name[MAX_PLAYER_NAME +1],
count;

if(sscanf(params,"s[25]", name))
return SendClientMessage(playerid, COLOR_RED, !"{FFA500}Используйте: {FFFFFF} /id [name]");

new
ret = strval(name);

if(IsPlayerConnected(ret) && ret != INVALID_PLAYER_ID)
{
format(stringer, sizeof(stringer), "%s [%d]", Name(ret), ret);
return SendClientMessage(playerid, -1, stringer);
}
else SendClientMessage(playerid, -1, !"Такого игрока нет на сервере.");

foreach(new i : Player)
{
if(strfind(Name(i), name, true) != -1)
{
format(stringer, sizeof(stringer), "%d. %s [%d]", ++count, Name(i), i);
SendClientMessage(playerid, -1, stringer);
}
}
return 1;
}

StevenH
29.03.2018, 18:19
Что ты хотел этим добиться?
strval не превратит ник в ID.


Как я понимаю, вот так всё будет работать так, как тебе надо

CMD:id(playerid, params[])
{
new
name[MAX_PLAYER_NAME +1],
count;

if(sscanf(params,"s[25]", name))
return SendClientMessage(playerid, COLOR_RED, !"{FFA500}Используйте: {FFFFFF} /id [name]");

foreach(new i : Player)
{
if(strfind(Name(i), name, true) != -1)
{
format(stringer, sizeof(stringer), "%d. %s [%d]", ++count, Name(i), i);
SendClientMessage(playerid, -1, stringer);
}
}
return 1;
}

Он хочет чтобы /id работала как по нику так и по иду (аля /id Steven_ - что то нашло, и /id 55 (нашло бы человека с 55 идом)

execution
29.03.2018, 18:25
Он хочет чтобы /id работала как по нику так и по иду (аля /id Steven_ - что то нашло, и /id 55 (нашло бы человека с 55 идом)

Именно. Только когда пишу ник, возвращает 0 и поэтому возникает проблема с 0 идом.

DeimoS
29.03.2018, 18:32
Он хочет чтобы /id работала как по нику так и по иду (аля /id Steven_ - что то нашло, и /id 55 (нашло бы человека с 55 идом)

Да, уже понял. Забыл уже как команда /id работать должна :)

Автор, как-то так:

CMD:id(playerid, params[])
{
new
giveplayerid = INVALID_PLAYER_ID;

sscanf(params, "d", giveplayerid);
if(giveplayerid != INVALID_PLAYER_ID)
{
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid, -1, !"Такого игрока нет на сервере.");
else
{
GetPlayerName(giveplayerid, stringer, MAX_PLAYER_NAME);
format(stringer, sizeof(stringer), "%s [%d]", Name(giveplayerid), giveplayerid);
return SendClientMessage(playerid, -1, stringer);
}
}
else
{
new
name[MAX_PLAYER_NAME +1],
count;

if(sscanf(params, "s[24]", name))
return SendClientMessage(playerid, COLOR_RED, !"{FFA500}Используйте: {FFFFFF} /id [name]");

foreach(new i : Player)
{
if(strfind(Name(i), name, true) != -1)
{
format(stringer, sizeof(stringer), "%d. %s [%d]", ++count, stringer, i);
SendClientMessage(playerid, -1, stringer);
}
}
if(!count)
return SendClientMessage(playerid, -1, !"Не найдено ни одного игрока.");
}
return 1;
}

execution
29.03.2018, 18:57
Да, уже понял. Забыл уже как команда /id работать должна :)

Автор, как-то так:

CMD:id(playerid, params[])
{
new
giveplayerid = INVALID_PLAYER_ID;

sscanf(params, "d", giveplayerid);
if(giveplayerid != INVALID_PLAYER_ID)
{
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid, -1, !"Такого игрока нет на сервере.");
else
{
GetPlayerName(giveplayerid, stringer, MAX_PLAYER_NAME);
format(stringer, sizeof(stringer), "%s [%d]", Name(giveplayerid), giveplayerid);
return SendClientMessage(playerid, -1, stringer);
}
}
else
{
new
name[MAX_PLAYER_NAME +1],
count;

if(sscanf(params, "s[24]", name))
return SendClientMessage(playerid, COLOR_RED, !"{FFA500}Используйте: {FFFFFF} /id [name]");

foreach(new i : Player)
{
if(strfind(Name(i), name, true) != -1)
{
format(stringer, sizeof(stringer), "%d. %s [%d]", ++count, stringer, i);
SendClientMessage(playerid, -1, stringer);
}
}
if(!count)
return SendClientMessage(playerid, -1, !"Не найдено ни одного игрока.");
}
return 1;
}

Благодарю.