Система переменных для каждого игрока
Система переменных для каждого игрока (в сокращении PVar) - это новый способ создания переменных для каждого игрока индивидуально в глобальном пространстве, т.е. к одной переменной можно получить доступ и из игрового мода (gamemode), и из подключаемого сценария (filterscript).
Они работают точно так же, как SVar, но привязаны к конкретному ID игрока.
Преимущества
Система была представлена в серверном обновлении SA-MP 0.3a R5 а предоставляет некоторые преимущества перед массивами размера MAX_PLAYERS для работы с игроками.
-
PVar'ы могут быть созданы и считаны во всех запущенных сценариях сервера (игровые режимы, скрипты, инклуды и т.д.), что позволяет легче организовать модульную архитектуру в вашем коде.
-
PVar'ы автоматически удаляются, когда игрок покидает сервер (после OnPlayerDisconenct), что значит, что вам не требуется вручную сбрасывать данные для игрока.
-
Нет нужды использовать enum и другие структуры для хранения данных.
-
Сохраняет память, не выделяя память под ненужные элементы массива игроков, которые, вероятно, даже не будут использованы.
-
PVar легко вывести или записать куда-то с помощью перебора. Это делает отладку и хранение данных намного проще.
-
Если попытаться получить доступ к ещё не созданной переменной игрока, но всё ещё вернёт значение по умолчанию - 0.
-
В PVar можно хранить очень большие строки при помощи динамически выделяемой памяти.
-
Можно устанавливать, получать и создавать PVar прямо во время игры.
Недостатки
- PVar в несколько раз медленнее, чем обычные переменные. Как правило, предпочтительнее пожертвовать памятью, нежели скоростью, но не наоборот.
Функции
- SetPVarInt: установить целочисленное значение переменной игрока.
- GetPVarInt: получить значение переменной игрока, как целое число.
- SetPVarString: установить строчное значение переменной игрока.
- GetPVarString: получить значение переменной игрока, как строку.
- SetPVarFloat: установить переменной игрока значение с плавающей точкой.
- GetPVarFloat: получить значение переменной игрока, как число с плавающей точкой.
- DeletePVar: удалить переменную игрока.
#define PLAYER_VARTYPE_NONE (0)
#define PLAYER_VARTYPE_INT (1)
#define PLAYER_VARTYPE_STRING (2)
#define PLAYER_VARTYPE_FLOAT (3)