Неактуально Lua ASI [SC23] GlobeVision - библиотека для обмена информацией о зоне стрима

Tihon naivniy

Участник
77
8
Похожие проекты были уже на самом деле (что от меня, что от qrlck). Интересно, что у тебя в итоге выйдет, хотя как показала практика, сильно эта идея не приживается :С
Лавки через приложение это сливать можно
 
  • Злость
  • Вау
Реакции: Hristot и etereon

etereon

MQ-Team
Автор темы
Проверенный
323
837
Оптимизировал работу сервера и плагина. Плагин необходимо перекачать
 

VanoKLR

Известный
641
372
GlobeVision (v1.0-beta)​

Позволяет каждому пользователю автоматически отправлять информацию о зоне стрима в единый пул, запрашивать данные о других игроках. От подобных себе проектов (GMap и т.д) отличается возможностью масштабного использования и наличием экспортов, которые позволяют использовать информацию в любом виде (не только карты и т.д). Работы основанные на данной библиотеке:
(далле более подробное описание и информация для разработчиков)


Возможности​
  • Автоматический сбор информации об игроках посредством перехвата входящящей синхронизации (онфут, водительской и пассажирской) и последующая её отправка на центральный сервер​
  • Получение данных об игроках, которые находятся вне вашей стрим-зоны, либо на другом сервере, но попадают зону видимости другого пользователя плагина​
Использование
Сам плагин не содержит никакого обработчика входящей информации, но экспортирует функции, которые дают возможность получать данные с сервера и использовать их в любом виде, например, в рамках своего приложения или Lua-скрипта (экспортируемые функции могут быть вызваны через FFI), т.е. использование ограничено лишь вашей фантазией

Как это работает?
Работоспособность достигается за счёт клиент-сайд плагина, собирающего информацию об игроках, и сервера, который хранит полученную информацию, либо отдаёт её по запросу. Для организации адекватного хранения данных я поступил следующим образом:​
  1. Файл конфигурации сервера содержит в себе IP-адреса поддерживаемых игровых серверов​
  2. При старте сервер выделяет под каждый 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];
     };
     
     // в будущем может быть добавлено больше данных
  3. Плагин автоматически получает с сервера список поддерживаемых адресов при запуске​
  4. Текущая версия даёт возможность добавить в список 255 адресов​
  5. Данные с других игровых серверов не собираются​
Библиотека является открытой, любой желающий может запустить её на своём хосте и использовать отдельно. Помимо этого, я поддерживаю работу сервера для массового использования, к которому привязан плагин, прикреплённый в этой теме. С актуальным списком адресов, добавленных мною, можно ознакомиться тут (буду постепенно пополнять его, в т.ч по просьбам)

Доступные функции и структуры
Для обеспечения неблокируемой работы скриптов я создал систему буферов, которые по очереди заполняются в потоке плагина. Функции для работы с ними:
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)
Примеры кода, реализация основной и Lua-библиотеки доступны в репозитории на GitHub​
было бы прикольно если бы он собирал инфу об объектах в зоне стрима и можно было бы найти на сайте возле кого этот объект находить, или тоже самое с машинами
 

etereon

MQ-Team
Автор темы
Проверенный
323
837
Напоследок хотел выразить благодарность @neverlane и @_raz0r за помощь с сайтом и продвижением проекта - он стал единственной, среди десятков, работой, которая попала в крупные самп-паблики и смогла вызвать интерес у множества игроков, не связанных с форумом, что было крайне приятно для меня. В пике удавалось собирать информацию по ~150 игрокам на каждом из серверов Аризоны (+ некоторое количество на Родине и Адвансе), то есть 3000+ игроков, и отображать всё это в режиме реального времени. К сожалению, уважаемые модераторы в детстве мало играли в морской бой и выбрали работу, которая в сути своей даже не связана с сампом, соответственно, денег мне и @neverlane никто не даст, а возможности развивать и поддерживать такой проект бесплатно у нас нет (поставлю плашку "Неактуально", когда всё сдохнет окончательно). Спасибо всем, кто проявил интерес к данной теме. В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах 🙏

Скриншот с сайта на память:
1703447469974.png
 
Последнее редактирование:

Fott

Простреленный
3,431
2,269
Напоследок хотел выразить благодарность @neverlane и @Raz0r_ за помощь с сайтом и продвижением проекта - он стал единственной, среди десятков, работой, которая попала в крупные самп-паблики и смогла вызвать интерес у множества игроков, не связанных с форумом, что было крайне приятно для меня. В пике удавалось собирать информацию по ~150 игрокам на каждом из серверов Аризоны (+ некоторое количество на Родине и Адвансе), то есть 3000+ игроков, и отображать всё это в режиме реального времени. К сожалению, уважаемые модераторы в детстве мало играли в морской бой и выбрали работу, которая в сути своей даже не связана с сампом, соответственно, денег мне и @neverlane никто не даст, а возможности развивать и поддерживать такой проект бесплатно у нас нет (поставлю плашку "Неактуально", когда всё сдохнет окончательно). Спасибо всем, кто проявил интерес к данной теме. В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах 🙏

Скриншот с сайта на память:
Посмотреть вложение 225853
Душераздирающее сообщение
 
  • Грустно
Реакции: etereon

etereon

MQ-Team
Автор темы
Проверенный
323
837
C такими шутками ник обычно чёрным становится :(
В этом году просто некоторым не понравилось то, что это не просто плагин, а плагин с функционалом библиотеки, так что хочется надеяться, что в следующий раз всем всё понравится
 
  • Нравится
Реакции: exmoby

VanoKLR

Известный
641
372
В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах
забей, номинации за упоротую идеи заберет чел который говорил про отыгровку дыхания
 

etereon

MQ-Team
Автор темы
Проверенный
323
837
Напоследок хотел выразить благодарность @neverlane и @_raz0r за помощь с сайтом и продвижением проекта - он стал единственной, среди десятков, работой, которая попала в крупные самп-паблики и смогла вызвать интерес у множества игроков, не связанных с форумом, что было крайне приятно для меня. В пике удавалось собирать информацию по ~150 игрокам на каждом из серверов Аризоны (+ некоторое количество на Родине и Адвансе), то есть 3000+ игроков, и отображать всё это в режиме реального времени. К сожалению, уважаемые модераторы в детстве мало играли в морской бой и выбрали работу, которая в сути своей даже не связана с сампом, соответственно, денег мне и @neverlane никто не даст, а возможности развивать и поддерживать такой проект бесплатно у нас нет (поставлю плашку "Неактуально", когда всё сдохнет окончательно). Спасибо всем, кто проявил интерес к данной теме. В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах 🙏

Скриншот с сайта на память:
Посмотреть вложение 225853
Также решили выложить сурсы самой веб-карты, уверен, что многим будет интересно посмотреть на её реализацию:
 
  • Нравится
  • Грустно
Реакции: why ega и VanoKLR