GetPVarNameAtIndex

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

Описание:

Узнаёт название привязанной к игроку переменной, имеющей указанный ID.

Параметры:

(playerid, index, ret_varname[], ret_len)
playerid ID игрока.
index ID переменной.
ret_varname[] Массив для сохранения названия переменной.
ret_len Размер массива ret_varname.


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

Длина строки с названием переменной в случае успеха, либо 0 если игрок не подключен или переменной не существует. Само название переменной возвращается косвенно в массиве ret_varname (при этом, если переменная не существует, в массив записывается пустая строка, а если не подключен игрок, содержимое массива не изменяется).

Info rhombus.png
Примечание
Максимальная длина названия PVar'а - 40 символов (41 с учётом символа конца строки '\0'). Следовательно, массив ret_varname должен быть размером как минимум в 41 ячейку, чтобы гарантировать, что название переменной полностью вместилось в массив.


Bug.png
Баг SA-MP
Если в массиве ret_varname не хватает места под запись одного или нескольких символов строки с названием переменной, функция записывает символ конца строки ('\0') за пределами массива - тем самым функция может обнулить переменную, объявленную перед или после массива, что может привести к неправильной работе кода, зависящего от значения в этой переменной.


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

/*
Вывод:
    #0: Не существует
    #1: "LEVEL" (целое число): 42
    #2: "HEALTH" (вещ. число): 100.00
    #3: "TEAM_NAME" (строка): "RED"
*/

SetPVarInt(playerid, "money", 1000);
SetPVarInt(playerid, "level", 42);
SetPVarFloat(playerid, "health", 100.0);
SetPVarString(playerid, "team_name", "RED");
DeletePVar(playerid, "money");

new upper = GetPVarsUpperIndex(playerid); // Если созданы PVar'ы под ID от 0 до 3,
new name[40 + 1];                         // GetPVarsUpperIndex() вернёт 4.
for (new i = 0; i < upper; ++i)
{
    if (0 == GetPVarNameAtIndex(playerid, i, name, sizeof(name)))
    {
        printf("#%d: Не существует", i);
        continue;
    }
    switch (GetPVarType(playerid, name))
    {
        case PLAYER_VARTYPE_INT:
        {
            printf("#%d: \"%s\" (целое число): %d", i, name, GetPVarInt(playerid, name));
        }
        case PLAYER_VARTYPE_STRING:
        {
            new string[256];
            GetPVarString(playerid, name, string, sizeof(string));
            printf("#%d: \"%s\" (строка): \"%s\"", i, name, string);
        }
        case PLAYER_VARTYPE_FLOAT:
        {
            printf("#%d: \"%s\" (вещ. число): %.2f", i, name, GetPVarFloat(playerid, name));
        }
    }
}


См. также: