PDA

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



Mikiadier
02.02.2017, 18:32
CMD:id(playerid, params[])
{
new string[200];
if(isnull(params)) return SendClientMessage(playerid, COLOR_GREY, "Использование: /id [ID/Часть ника]");
new ids = strval(params);
new idd=-1;
if(!IsNumber(params))
{
foreach(new i:Player)
{
if(strfind(pInfo[i][pName],params,true) != -1)
{
if(idd >= 4) {
idd++;
continue;
}
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i); //Convert(GetPVarInt(i,"AFK_Time")-2));
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);
idd++;
}
}
if(idd == -1) return SendClientMessage(playerid,COLOR_GREY,"Не найдено");
else if(idd >= 4) {
format(string,sizeof(string),"Показано 5 найденных из %d", idd-2);
SendClientMessage(playerid, COLOR_GREY, string);
}
}
else
{
if(!IsPlayerConnected(ids)) return SendClientMessage(playerid, COLOR_ERRORGREY, PlayerIsNotOnline);
if(GetPVarInt(ids, "AFK_Time") > 2) format(string,sizeof(string),"Ва %s [%d] {FF0000}(AFK: %s)",pInfo[ids][pName],ids); //Convert(GetPVarInt(ids,"AFK_Time")-2));
else format(string,sizeof(string),""GREEN">>"CREAM" ID %d - %s | Уровень - %d",ids, pInfo[ids][pName], pInfo[ids][pLevel]);
SendClientMessage(playerid,COLOR_CREAM,string);
}
return 1;
}

CMD:id(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /id [id игрока / часть имени]");
new ids = 0;
if(!sscanf(params, "u", params[0]))
{
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
SendMes(playerid, COLOR_WHITE, "ID: %d - %s",params[0],sendername(params[0]));
}
else
{
foreach(new i: Player)
{
if(!IsPlayerAuthorized(i)) continue;
if(strfind(sendername(i), params[0], true) != -1)
{
SendMes(playerid, COLOR_WHITE, "ID: %d - %s",i,sendername(i));
ids++;
}
}
if(ids == 0) SendClientMessage(playerid,-1,"Совпадений не найдено");
}
return 1;
}

Как сделать так, что бы все возможные варианты выписывались в одну строчку, а не начинались с новой?

vovandolg
02.02.2017, 20:11
Ну так у тебя может места не хватить в строке...

далее не по теме, но в глаза бросилось)


if(idd >= 4) {
idd++;
continue;
}
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i);
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);
idd++;



if(++idd >= 4) continue;
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i);
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);

Mikiadier
03.02.2017, 13:49
up, пожалуйста!

DeimoS
03.02.2017, 14:04
Что "пожалуйста"? Говорят же, места в строке не хватит. SendClientMessage не отобразит больше 144 символов за раз. Хочешь в одну строку - переводи на диалоги

Nexius_Tailer
03.02.2017, 14:16
Ну так у тебя может места не хватить в строке...

далее не по теме, но в глаза бросилось)


if(idd >= 4) {
idd++;
continue;
}
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i);
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);
idd++;



if(++idd >= 4) continue;
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i);
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);

Это меняет логику кода. Если в первом случае мы сначала сравнивали, а потом прибавляли, то во втором идёт всё наоборот.
Лучше тогда так:


if(idd < 4)
{
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i);
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);
}
idd++;

vovandolg
03.02.2017, 14:55
Это меняет логику кода. Если в первом случае мы сначала сравнивали, а потом прибавляли, то во втором идёт всё наоборот.
Лучше тогда так:


if(idd < 4)
{
if(GetPVarInt(i, "AFK_Time") > 2) format(string,sizeof(string),"Варианты: %s [%d] {FF0000}(AFK: %s)",pInfo[i][pName],i);
else format(string,sizeof(string),"Варианты: %s [%d]", pInfo[i][pName], i);
SendClientMessage(playerid,COLOR_CREAM,string);
}
idd++;


А ну да всё верно) не до смотрел

Mikiadier
03.02.2017, 17:09
Что "пожалуйста"? Говорят же, места в строке не хватит. SendClientMessage не отобразит больше 144 символов за раз. Хочешь в одну строку - переводи на диалоги

Можно же сделать сделать ограничение на допустим 6 ников, вот как здесь:

https://i.gyazo.com/b5f3cb6d840e3030bf05821c947b5d9c.png

Кто сможет помочь?

ziggi
03.02.2017, 18:15
Что "пожалуйста"? Говорят же, места в строке не хватит. SendClientMessage не отобразит больше 144 символов за раз. Хочешь в одну строку - переводи на диалоги

Или можно воспользоваться zmessage: https://github.com/Open-GTO/zmessage
:)