PDA

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



PawnoNoob
04.06.2017, 00:19
Приветствую. Есть ли какая-нибудь функция для получения ника игрока, находящегося на сервере? (При этом подключённого к серверу и авторизованного)

$continue$
04.06.2017, 00:49
GetPlayerName (http://pro-pawn.ru/showthread.php?12778) + проверка, что авторизован + проверить, что GetPlayerName не вернуло 0.

PawnoNoob
04.06.2017, 01:06
GetPlayerName (http://pro-pawn.ru/showthread.php?12778) + проверка, что авторизован + проверить, что GetPlayerName не вернуло 0.

Хм, а как это будет выглядеть? Просто мне необходима эта функция для проверки игрока на онлайн (например, для выдачи каких-то определённых прав). Если игрок в игре, то оповестить его о том, что ему выданы определённые привилегии, ну а если оффлайн, то просто внести изменения в базу данных.

DeimoS
04.06.2017, 01:11
stock GetPlayerID(const input_name[])
{
new player_name[MAX_PLAYER_NAME];
for(new i; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))// Замени на проверку авторизации
continue;
GetPlayerName(i, player_name, MAX_PLAYER_NAME);
if(!strcmp(player_name, input_name))
return i;
}
return INVALID_PLAYER_ID;
}
Вернёт ID игрока, если он найден и INVALID_PLAYER_ID, если не найден

$continue$
04.06.2017, 01:14
А когда то, ты мне заливал, что sscanf лучше для таких целей...
На что я ответил, что он не у всех подключен. И да не лучше ли будет заменить проверку с коннектом на:


if(0 == GetPlayerName(i, player_name, MAX_PLAYER_NAME)) continue;



stock GetPlayerID(const input_name[])
{
new player_name[MAX_PLAYER_NAME];
for(new i; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))// Замени на проверку авторизации
continue;
GetPlayerName(i, player_name, MAX_PLAYER_NAME);
if(!strcmp(player_name, input_name))
return i;
}
return INVALID_PLAYER_ID;
}
Вернёт ID игрока, если он найден и INVALID_PLAYER_ID, если не найден

ТС: в следующий раз задавайте вопрос корректно: "Нужно найти игрока с определенным ником на сервере". Так бы я сразу понял суть вопроса.

DeimoS
04.06.2017, 01:34
А когда то, ты мне заливал, что sscanf лучше для таких целей...
На что я ответил, что он не у всех подключен. И да не лучше ли будет заменить проверку с коннектом на:

Использовать в командах - да, лучше (я про спецификаторы "u" и "r").
Но если тебе нужно найти конкретного игрока - нет, ибо он ищет по части ника и для него "DeimoSs" и "DeimoS" будут считаться одинаковыми, если ты вобьёшь в поиск "DeimoS". Если тебе просто по части ника нужно найти игрока - определённо sscanf, ибо глупо писать дополнительную функцию, когда уже есть функция с тем же функционалом


И да не лучше ли будет заменить проверку с коннектом на:


if(0 == GetPlayerName(i, player_name, MAX_PLAYER_NAME)) continue;


У автора ведь есть система авторизации, посему лучше именно по ней и фильтровать. А IsPlayerConnected там для вида стоит (дабы авто понял где должна стоять его проверка)

$continue$
04.06.2017, 01:36
Я как то писал пост с такой же функцией. Только не помню, где это было. Может и на PI. Но, суть в том, что ты начал там использовать sscanf. Зная, то что "u" - ищет часть ника, а не полный ник.

Использовать в командах - да, лучше (я про спецификаторы "u" и "r").
Но если тебе нужно найти конкретного игрока - нет, ибо он ищет по части ника и для него "DeimoSs" и "DeimoS" будут считаться одинаковыми, если ты вобьёшь в поиск "DeimoS". Если тебе просто по части ника нужно найти игрока - определённо sscanf, ибо глупо писать дополнительную функцию, когда уже есть функция с тем же функционалом

Ты не до конца дочитал: "подключённого к серверу и авторизованного"
Хотя не представляю себе, как игрок может быть не подключен к серверу и авторизован.

У автора ведь есть система авторизации, посему лучше именно по ней и фильтровать. А IsPlayerConnected там для вида стоит (дабы авто понял где должна стоять его проверка)

DeimoS
04.06.2017, 01:40
Я как то писал пост с такой же функцией. Только не помню, где это было. Может и на PI. Но, суть в том, что ты начал там использовать sscanf. Зная, то что "u" - ищет часть ника, а не полный ник.

Ну, видимо, я тогда заблуждался на этот счёт, не? Хотя я такого не помню, если честно. Но я, тип, никогда не говорил, что я знаю всё и знаю лишь истину.


Ты не до конца дочитал: "подключённого к серверу и авторизованного"

Так а разве неподключённый игрок может быть авторизированным?