Перейти к основному содержимому

Система переменных для каждого игрока

Система переменных для каждого игрока (в сокращении 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)