SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 28/03/2010, 02:49 PM   #1
Makar93
Huge Clucker
 
Makar93's Avatar
 
Join Date: Sep 2009
Posts: 496
Reputation: 9
Default PVar`ы и с чем их едят

Хотелось бы по-подробнее узнать о этих функциях (как? зачем? и нафиг оно надо )
Желательно на конкретных примерах
__________________
Makar93 is offline   Reply With Quote
Old 28/03/2010, 03:21 PM   #2
Zeex
Guest
 
Posts: n/a
Default Re: PVar`ы и с чем их едят

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'ы могут хранить очень большие строки используя динамически выделяемую память.
В общем, классная штука. Вот еще небольшое описание функций:

Code:
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 With Quote
Old 28/03/2010, 04:03 PM   #3
[JIeXa]
Little Clucker
 
Join Date: Jul 2008
Posts: 44
Reputation: 0
Default Re: PVar`ы и с чем их едят

upperindex - наверно узнать верхний индекс?
[JIeXa] is offline   Reply With Quote
Old 28/03/2010, 04:14 PM   #4
Makar93
Huge Clucker
 
Makar93's Avatar
 
Join Date: Sep 2009
Posts: 496
Reputation: 9
Default Re: PVar`ы и с чем их едят

Ну про это все я читал...а теперь примеры использования..)
__________________
Makar93 is offline   Reply With Quote
Old 28/03/2010, 05:35 PM   #5
MX_Master
Huge Clucker
 
Join Date: Jul 2007
Posts: 388
Reputation: 5
Default Re: PVar`ы и с чем их едят

- код верен при условии, что игрок с ИДом playerid - онлайн.
- если игрок playerid оффлайн, значение везде будет 0, как его не создавай/изменяй

Code:
// сейчас PVar игрока playerid под названием "cash" не существует и равен по-умолчанию 0

SetPVarInt( playerid, "cash", 123456 ); // создадим числовую ячейку "cash" для игрока playerid

// сейчас PVar игрока playerid под названием "cash" равен 123456

SetPVarInt( playerid, "cash", 777 ); // изменим значение числовой ячейки "cash" для игрока playerid

// сейчас PVar игрока playerid под названием "cash" равен 777

DeletePVar( playerid, "cash" ); // удалим числовую ячейку "cash" для игрока playerid

// сейчас PVar игрока playerid под названием "cash" не существует и равен по-умолчанию 0
MX_Master is offline   Reply With Quote
Old 28/03/2010, 06:16 PM   #6
ONIXS
Little Clucker
 
Join Date: Jul 2008
Posts: 16
Reputation: 6
Default Re: PVar`ы и с чем их едят

К чему этот геморой когда просто можно юзать переменные с массивами...
ONIXS is offline   Reply With Quote
Old 28/03/2010, 06:20 PM   #7
^Woozie^
Big Clucker
 
^Woozie^'s Avatar
 
Join Date: Jul 2007
Posts: 83
Reputation: 15
Default Re: PVar`ы и с чем их едят

Можно существенно снизить нагрузку сервера, удаляя ненужные переменные когда они не нужны. Логично?

Если конечно стоит какой нить вшивый гоночный мод, то там это наф не надо.
^Woozie^ is offline   Reply With Quote
Old 28/03/2010, 06:22 PM   #8
MX_Master
Huge Clucker
 
Join Date: Jul 2007
Posts: 388
Reputation: 5
Default Re: PVar`ы и с чем их едят

Quote:
Originally Posted by On1xS
К чему этот геморой когда просто можно юзать переменные с массивами...
массивы одного скрипта недоступны для других фильтрскриптов, а pvar'ки доступны из всех запущенных скриптов.

но я согласен с тем, что массивы юзать удобнее, т.к. это массивы, а не просто хранилища строк
MX_Master is offline   Reply With Quote
Old 28/03/2010, 06:23 PM   #9
Zeex
Guest
 
Posts: n/a
Default Re: PVar`ы и с чем их едят

Quote:
Originally Posted by ^Faus
Можно существенно снизить нагрузку сервера, удаляя ненужные переменные когда они не нужны. Логично?
Неа, это разве что уменьшит потребление памяти. Кстати пвары медленнее обычных массивов эдак раза в 2 судя по чьим-то тестами на форуме, наверное самый большой их недостаток

Quote:
Originally Posted by On1xS
К чему этот геморой когда просто можно юзать переменные с массивами...
А второй пост читал? И в чем там геморой-то?
  Reply With Quote
Old 28/03/2010, 06:25 PM   #10
^Woozie^
Big Clucker
 
^Woozie^'s Avatar
 
Join Date: Jul 2007
Posts: 83
Reputation: 15
Default Re: PVar`ы и с чем их едят

Quote:
Неа, это разве что уменьшит потребление памяти
ты сказал тоже самое. :P
^Woozie^ is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Include] [INC] Самый дерзкий анти деньги чит хД lost13 Релизы/Releases 21 05/11/2010 05:46 PM
Сохранение трёх машын без регистрации Maximaka Русский/Russian 7 31/05/2010 06:40 PM
Spec system (система слежения) crone Русский/Russian 23 01/04/2010 10:35 AM
Проблема с MySQL. Не могу подключиться к БД Linus Русский/Russian 15 22/11/2009 07:22 AM


All times are GMT. The time now is 09:51 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.