PVar`ы и с чем их едят
#2

Quote:
Originally Posted by Куй
Система персональных переменных (Per-player variables):

Изначально SA-MP был создан для максимум 100 игроков. Это значит, что создание массивов в PAWN размером MAX_PLAYERS, например, PlayerInfo[MAX_PLAYERS], в общем было вполне нормально. Теперь же MAX_PLAYERS равняется 500, а скриптеры создают массивы из 500 элементов лишь для хранения одиночных флагов. Это может оказаться очень затратно в плане потребления памяти. Кроме того, обычные переменные нужно вручную сбрасывать/обнулять, когда игрок покидает сервер.

Преимущества использования PVar'ов над массивами размером в MAX_PLAYERS:
1) PVar'ы доступны из всех загруженных гейммодов и скриптов, упрощая модуляризация вашего кода.
2) PVar'ы автоматически удаляются, когда игрок выходит с сервера, что означает вам не нужно вручную сбрасывать переменные для следующего подключившигося игрока.
3) Больше нет нужды в сложных енумах/playerInfo-структурах.
4) Экономит память, не расходуя ее на элементы под playerid'ы, которые, возможно, вообще никогда не будут использованы.
5) Вы можете легко перечислять и выводить/хранить список PVar'ов. Это упрощает как отладку, так и хранение информации об игроках.
6) Если даже PVar не был создан, при запросе его значения возвращается 0 по умолчанию.
7) PVar'ы могут хранить очень большие строки используя динамически выделяемую память.
В общем, классная штука. Вот еще небольшое описание функций:

Код:
native SetPVarInt(playerid, varname[], int_value); - устанавливает значение для целого пвара
native GetPVarInt(playerid, varname[]); - возвращает значение целого пвара
native SetPVarString(playerid, varname[], string_value[]); - устанавливает значение строкового пвара
native GetPVarString(playerid, varname[], string_return[], len); - копирует значение строкового пвара в string_return
native SetPVarFloat(playerid, varname[], Float:float_value); - устанавливает значение вещественного пвара
native Float:GetPVarFloat(playerid, varname[]); - возвращает значение вещественного пвара
native DeletePVar(playerid, varname[]); - удаляет пвар 

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

native GetPVarsUpperIndex(playerid); - хз
native GetPVarNameAtIndex(playerid, index, ret_varname[], ret_len); - узнает название пвара по его индексу (внутреннему номеру)
native GetPVarType(playerid, varname[]); - возвращает тип указанного пвара
Кстати, имена пваров регистронезависимы, т.е. "id" - то же, что и "ID".
Reply


Messages In This Thread
PVar`ы и с чем их едят - by Makar93 - 28.03.2010, 14:49
Re: PVar`ы и с чем их едят - by Zeex - 28.03.2010, 15:21
Re: PVar`ы и с чем их едят - by [JIeXa] - 28.03.2010, 16:03
Re: PVar`ы и с чем их едят - by Makar93 - 28.03.2010, 16:14
Re: PVar`ы и с чем их едят - by MX_Master - 28.03.2010, 17:35
Re: PVar`ы и с чем их едят - by ONIXS - 28.03.2010, 18:16
Re: PVar`ы и с чем их едят - by ^Woozie^ - 28.03.2010, 18:20
Re: PVar`ы и с чем их едят - by MX_Master - 28.03.2010, 18:22
Re: PVar`ы и с чем их едят - by Zeex - 28.03.2010, 18:23
Re: PVar`ы и с чем их едят - by ^Woozie^ - 28.03.2010, 18:25

Forum Jump:


Users browsing this thread: 3 Guest(s)