Tihon naivniy
Участник
- 73
- 7
Лавки через приложение это сливать можноПохожие проекты были уже на самом деле (что от меня, что от qrlck). Интересно, что у тебя в итоге выйдет, хотя как показала практика, сильно эта идея не приживается :С
Лавки через приложение это сливать можноПохожие проекты были уже на самом деле (что от меня, что от qrlck). Интересно, что у тебя в итоге выйдет, хотя как показала практика, сильно эта идея не приживается :С
было бы прикольно если бы он собирал инфу об объектах в зоне стрима и можно было бы найти на сайте возле кого этот объект находить, или тоже самое с машинамиGlobeVision (v1.0-beta)
Позволяет каждому пользователю автоматически отправлять информацию о зоне стрима в единый пул, запрашивать данные о других игроках. От подобных себе проектов (GMap и т.д) отличается возможностью масштабного использования и наличием экспортов, которые позволяют использовать информацию в любом виде (не только карты и т.д). Работы основанные на данной библиотеке:
(далле более подробное описание и информация для разработчиков)
- Web-карта всех поддерживаемых серверов (by @neverlane)
- Локальная карта с возможностью спека и эмуляции синхронизации (Lua)
Возможности
Автоматический сбор информации об игроках посредством перехвата входящящей синхронизации (онфут, водительской и пассажирской) и последующая её отправка на центральный сервер Получение данных об игроках, которые находятся вне вашей стрим-зоны, либо на другом сервере, но попадают зону видимости другого пользователя плагинаИспользование
Сам плагин не содержит никакого обработчика входящей информации, но экспортирует функции, которые дают возможность получать данные с сервера и использовать их в любом виде, например, в рамках своего приложения или 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 адресов Данные с других игровых серверов не собираютсяБиблиотека является открытой, любой желающий может запустить её на своём хосте и использовать отдельно. Помимо этого, я поддерживаю работу сервера для массового использования, к которому привязан плагин, прикреплённый в этой теме. С актуальным списком адресов, добавленных мною, можно ознакомиться тут (буду постепенно пополнять его, в т.ч по просьбам)Примеры кода (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
Душераздирающее сообщениеНапоследок хотел выразить благодарность @neverlane и @Raz0r_ за помощь с сайтом и продвижением проекта - он стал единственной, среди десятков, работой, которая попала в крупные самп-паблики и смогла вызвать интерес у множества игроков, не связанных с форумом, что было крайне приятно для меня. В пике удавалось собирать информацию по ~150 игрокам на каждом из серверов Аризоны (+ некоторое количество на Родине и Адвансе), то есть 3000+ игроков, и отображать всё это в режиме реального времени. К сожалению, уважаемые модераторы в детстве мало играли в морской бой и выбрали работу, которая в сути своей даже не связана с сампом, соответственно, денег мне и @neverlane никто не даст, а возможности развивать и поддерживать такой проект бесплатно у нас нет (поставлю плашку "Неактуально", когда всё сдохнет окончательно). Спасибо всем, кто проявил интерес к данной теме. В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах 🙏
Скриншот с сайта на память:
Посмотреть вложение 225853
Мне нельзя закинуть респект людям, которые помогали мне с этим проектом/поддерживали его?Душераздирающее сообщение
Я про идею на след ск и про фразу с морским боемМне нельзя закинуть респект людям, которые помогали мне с этим проектом/поддерживали его?
C такими шутками ник обычно чёрным становится :(В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах
В этом году просто некоторым не понравилось то, что это не просто плагин, а плагин с функционалом библиотеки, так что хочется надеяться, что в следующий раз всем всё понравитсяC такими шутками ник обычно чёрным становится :(
забей, номинации за упоротую идеи заберет чел который говорил про отыгровку дыханияВ следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах
Также решили выложить сурсы самой веб-карты, уверен, что многим будет интересно посмотреть на её реализацию:Напоследок хотел выразить благодарность @neverlane и @_raz0r за помощь с сайтом и продвижением проекта - он стал единственной, среди десятков, работой, которая попала в крупные самп-паблики и смогла вызвать интерес у множества игроков, не связанных с форумом, что было крайне приятно для меня. В пике удавалось собирать информацию по ~150 игрокам на каждом из серверов Аризоны (+ некоторое количество на Родине и Адвансе), то есть 3000+ игроков, и отображать всё это в режиме реального времени. К сожалению, уважаемые модераторы в детстве мало играли в морской бой и выбрали работу, которая в сути своей даже не связана с сампом, соответственно, денег мне и @neverlane никто не даст, а возможности развивать и поддерживать такой проект бесплатно у нас нет (поставлю плашку "Неактуально", когда всё сдохнет окончательно). Спасибо всем, кто проявил интерес к данной теме. В следующем году обязательно напишу синхронизацию тряски яиц персонажей, надеясь на то, что голосующим понравится их запах 🙏
Скриншот с сайта на память:
Посмотреть вложение 225853
Автор был слишком сильно занят игрой в морской бой в сампе, запущенном в режиме VRты не выиграл только потому чтоПосмотреть вложение 225863