GetPlayerName

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск

Описание:

Узнаёт никнейм игрока.

Параметры:

(playerid, const name[], len)
playerid ID игрока, ник которого требуется узнать.
const name[] Массив, в котором будет записан никнейм.
len Размер массива name.


Возвращаемое значение:

Возвращает длину никнейма (целое число) указанного игрока, при этом сам никнейм косвенно возвращается через параметр name.
Если игрок не подключен, функция возвращает 0 и оставляет содержимое массива name без изменений.

Info rhombus.png
Примечание
Игрок должен указать в клиенте никнейм длиной от 3 до 20 символов, в противном случае сервер не позволит ему подключиться, предложив сменить ник. В то же время, с помощью функции SetPlayerName() можно установить никнейм от 1 до MAX_PLAYER_NAME (24) символов (указана именно константа, т.к. остаётся возможность изменения макс. длины ника в будущих версиях SA:MP). Поэтому, если учитывать символ конца строки '\0', то массив для хранения имени игрока должен иметь размер MAX_PLAYER_NAME+1.


Bug.png
Баг SA-MP
Если в массиве name не хватает места под запись одного или нескольких символов никнейма, функция записывает символ конца строки ('\0') за пределами массива - тем самым функция может обнулить переменную, объявленную перед или после массива, что может привести к неправильной работе кода, зависящего от значения в этой переменной.
Параметр name по ошибке помечен разработчиками SA-MP как const, на самом деле его содержимое изменяется во время работы функции, т.к. в него записывается никнейм. Скорее всего, квалификатор const забыли убрать после создания заголовка функции путём копирования заголовка от SetPlayerName (ошибка copy-paste).
Для параметра len разработчики SA-MP могли бы указать значение по умолчанию, равное размеру передаваемого массива name, чтобы у скриптеров не было необходимости каждый раз указывать размер вручную
native GetPlayerName(playerid, name[], len=sizeof(name));
однако по неизвестной причине в SA-MP Team избегают использования оператора sizeof.


Пример использования:

public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME + 1];
    new length = GetPlayerName(playerid, name, sizeof(name));
    // Пример вывода: "Никнейм: John_Doe, длина: 8."
    printf("Никнейм: %s, длина: %d.", name, length);
}


См. также: