- Версия SA-MP
-
- 0.3.7 (R1)
- 0.3.7-R3
GlobeVision (v1.0-beta)
Позволяет каждому пользователю автоматически отправлять информацию о зоне стрима в единый пул, запрашивать данные о других игроках. От подобных себе проектов (GMap и т.д) отличается возможностью масштабного использования и наличием экспортов, которые позволяют использовать информацию в любом виде (не только карты и т.д). Работы основанные на данной библиотеке:Библиотека для обмена информацией о зоне стрима для SA:MP 0.3.7 (R1, R3-1), а также RakSAMP Lite
- Web-карта всех поддерживаемых серверов (by @neverlane)
- Локальная карта с возможностью спека и эмуляции синхронизации (Lua)
Возможности
- Автоматический сбор информации об игроках посредством перехвата входящящей синхронизации (онфут, водительской и пассажирской) и последующая её отправка на центральный сервер
- Получение данных об игроках, которые находятся вне вашей стрим-зоны, либо на другом сервере, но попадают зону видимости другого пользователя плагина
Использование
Сам плагин не содержит никакого обработчика входящей информации, но экспортирует функции, которые дают возможность получать данные с сервера и использовать их в любом виде, например, в рамках своего приложения или Lua-скрипта (экспортируемые функции могут быть вызваны через FFI), т.е. использование ограничено лишь вашей фантазией
Как это работает?
Работоспособность достигается за счёт клиент-сайд плагина, собирающего информацию об игроках, и сервера, который хранит полученную информацию, либо отдаёт её по запросу. Для организации адекватного хранения данных я поступил следующим образом:
Сам плагин не содержит никакого обработчика входящей информации, но экспортирует функции, которые дают возможность получать данные с сервера и использовать их в любом виде, например, в рамках своего приложения или Lua-скрипта (экспортируемые функции могут быть вызваны через FFI), т.е. использование ограничено лишь вашей фантазией
Как это работает?
Работоспособность достигается за счёт клиент-сайд плагина, собирающего информацию об игроках, и сервера, который хранит полученную информацию, либо отдаёт её по запросу. Для организации адекватного хранения данных я поступил следующим образом:
- Файл конфигурации сервера содержит в себе IP-адреса поддерживаемых игровых серверов
- При старте сервер выделяет под каждый IP-адрес свой буфер, который содержит в себе структуры MAX_PLAYERS = 1005 игроков следующего вида:C++:
struct player_data_t { uint8_t updated : 1; // если == 1, значит игрок был обновлён в течение последних 5-и секунд uint8_t health : 7; uint8_t armor; uint16_t weapon : 6; // текущее оружие uint16_t model : 10; // скин position_t position; // позиция quat_compressed_t quaternion; // поворот uint32_t color; char nickname[20]; }; // в будущем может быть добавлено больше данных
- Плагин автоматически получает с сервера список поддерживаемых адресов при запуске
- Текущая версия даёт возможность добавить в список 255 адресов
- Данные с других игровых серверов не собираются
Библиотека является открытой, любой желающий может запустить её на своём хосте и использовать отдельно. Помимо этого, я поддерживаю работу сервера для массового использования, к которому привязан плагин, прикреплённый в этой теме. С актуальным списком адресов, добавленных мною, можно ознакомиться тут (буду постепенно пополнять его, в т.ч по просьбам)
Доступные функции и структуры
Для обеспечения неблокируемой работы скриптов я создал систему буферов, которые по очереди заполняются в потоке плагина. Функции для работы с ними:
Установка
Для установки основной библиотеки необходимо просто поместить файл globevision.asi в корневую папку игры. Если вы планируете использовать дополнительные Lua-скрипты, то нужно распаковать содержимое архива globevision_lua.7z в папку moonloader
Примеры кода (Lua)Доступные функции и структуры
Для обеспечения неблокируемой работы скриптов я создал систему буферов, которые по очереди заполняются в потоке плагина. Функции для работы с ними:
C++:
struct position_t {
float x, y, z;
};
struct quat_t {
float w, x, y, z;
};
struct player_data_local_t {
bool updated;
uint8_t health;
uint8_t armor;
uint16_t weapon;
uint16_t model;
position_t position;
quat_t quaternion;
uint32_t color;
char nickname[21];
};
// Создание буфера по IP-адресу сервера, возвращает номер созданного буфера
// Если буфер уже существует, то вернёт номер существующего буфера
int __stdcall create_buffer(const char* ip);
// Добавление буфера в очередь на обновление
void __stdcall update_buffer(int buffer_id);
// Долучение данных об игроке из буфера
player_data_local_t __stdcall get_player_data(int buffer_id, uint16_t player_id);
Установка
Для установки основной библиотеки необходимо просто поместить файл globevision.asi в корневую папку игры. Если вы планируете использовать дополнительные Lua-скрипты, то нужно распаковать содержимое архива globevision_lua.7z в папку moonloader
Примеры кода, реализация основной и Lua-библиотеки доступны в репозитории на GitHub
Вложения
Последнее редактирование: