shape1
shape2
shape3
shape4
shape7
shape8

Учимся пользоватся PVar'ами

  • Автор темы Amfy
  • Дата начала

A

Amfy

Гость
Гость
Очень легко редактируются и не засоряют код мода, в отличии от переменных и массивов, если вы создали PVar в моде, то он может использоватся и в подгруженных FS и наоборот, при коннекте игрока они автоматически создаются, а при выходе удаляются.
Начнем с функций редактирования/создания PVar'ов.

Как вы уже знаете в pawn скриптинге есть четыре типа переменных - целое число(integer), вещественный тип(float), строковый тип(string) и boolean(true и false), все эти типы кроме boolean доступны в PVar'ах. Вот функции:

SetPVarInt(playerid,pvar[],int);//создает и редактирует PVar со значением целого числа
SetPVarFloat(playerid,pvar[],float);//создает и редактирует PVar с вещественным типом
SetPVarString(playerid,pvar[],string[]);//создает и редактирует PVar со строковым типом

Если вы хотите создать PVar, то вам надо применить функцию SetPVarInt, SetPVarFloat или SetPVarString, также при создании, значение PVar'a сделается таким, какое вы указали при использовании данных функций.

Примеры:

SetPVarInt(playerid,"TestInt",1);//создаем PVar со значением целого числа и присваиваем ему значение 1
SetPVarFloat(playerid,"TestFloat",6.1);//создаем PVar со значением дробного числа и присваиваем ему значение 6.1
SetPVarString(playerid,"TestString","Hello World!");//создаем PVar с строковым типом и записываем в него текст Hello World!

Редактируются PVar'ы абсолютно теми же функциями. Как вы уже заметили, название PVar'a пишется в кавычках (" "), что позволяет нам вызывать данные PVar'ы в скриптах подгруженных к серверу из мода или из скриптов в моде (об этом говорилось раньше).

Теперь перейдем к функциям получения значения PVar'a.

Список данных функций:

GetPVarInt(playerid,pvar[]);//возвращает значение PVar'a pvar[]
GetPVarFloat(playerid,pvar[]);//возвращает значение PVar'a pvar[]
GetPVarString(playerid,pvar[],output[],symbols);//здесь немного сложнее, записывает значение PVar'a pvar[] в переменную со строковым типом output[] (так как по некоторым причинам функции в pawn не должны возвращать строки), symbols - это сколько символов вы хотели бы записать в переменную output.

Вот примеры использования:

/*Если значение PVar'a TestInt равно 2, выводим в консоль его значение(т.е 2)*/
new testint = GetPVarInt(playerid,"TestInt");//для удобства создаем переменную
if(testint == 2) print(testint);//делаем проверку

/*Тоже самое только с Float*/
new Float:testfloat = GetPVarFloat(playerid,"TestFloat");//для удобства создаем переменную
if(testfloat == 6.1) print(testfloat);//делаем проверку

/*А теперь немного сложнее, делаем операцию с String значением, как вы помните мы присвоили PVar'у TestString значение: Hello World!*/
new output[64];//делаем переменную в которую будет записано значением PVar'а
GetPVarString(playerid,"TestString",output,sizeof(output));//геттим значение PVar'а
if(strcmp(output,"Hello World!",true,13)) printf(output);//если находим в output Hello World! выводим в консоль output

Но это только примеры, вы же можете использовать данные функции как захотите.

Удаление PVar`a:

DeletePVar(playerid,pvar[]);

Удаляем у указанного игрока playerid PVar pvar[].

Пример:

DeletePVar(playerid,"TestInt");

Далее идет функция:

GetPVarType(playerid, pvar[]);

Возвращает тип указанного PVar'a. Типы PVar'ов:

#define PLAYER_VARTYPE_NONE 0 - неизвестно
#define PLAYER_VARTYPE_INT 1 - целое число
#define PLAYER_VARTYPE_STRING 2 - строка
#define PLAYER_VARTYPE_FLOAT 3 - вещественное число

Так, теперь про то чего не хватает, а не хватает ф-й GetPVarsUpperIndex и GetPVarNameAtIndex
Все пвары имеют свои иды, первая ф-я узнает максимальный ид пвара у игрока:

new id = GetPVarsUpperIndex(playerid);

Вторая ф-я узнает имя пвара по ее иду:

new str[256];
GetPVarNameAtIndex(playerid, id, str, 256);

Вот так их можно применить:

new id = GetPVarsUpperIndex(playerid);
for(new f; f < id; f++)
{
new str[256];
GetPVarNameAtIndex(playerid, id, str, 256);
switch(GetPVarType(playerid, str))
{
case PLAYER_VARTYPE_STRING: fGetPVarString(playerid, str);
case PLAYER_VARTYPE_INT: GetPVarInt(playerid, str);
case PLAYER_VARTYPE_FLOAT: GetPVarFloat(playerid, str);
default: continue;
}
}

Автор урока: REALman

Дополнил: frog163

 
Последнее редактирование: