Selfhosted Game Servers для последних версий Roblox.
local_rcc - это библиотека, которая работает с Roblox Studio (только в настоящее время Windows) и позволяет игроку Roblox подключаться к серверу Roblox Studio.
Это руководство предназначено для создания на Microsoft Windows.
Убедитесь, что у вас есть следующие предпосылки:
winget install Ninja-build.ninjaКлонировать репозиторий:
git clone https://github.com/rsblox/local_rcc.git
Есть два метода для строительства:
Убедитесь, что у вас установлен код Visual Studio с установленным расширением инструментов Cmake.
Откройте клонированный репозиторий:
code local_rcc
Если будет предложено выбрать сборник сборки, выберите amd64 .
Инструменты Cmake автоматически настраивают проект; Будьте терпеливы и подождите в выходе для завершения конфигурации; Это включает в себя получение зависимостей из Интернета.
Перейдите на вкладку Cmake и установите тип сборки на RelWithDebInfo .
В контур проекта на той же вкладке Cmake постройте цель local_rcc [local_rcc.dll]. После завершения библиотека должна быть расположена по адресу bin/local_rcc.dll .
Откройте Visual Studio 2022 и перейдите к File -> Open -> CMake... и перейдите к файлу CMakeLists.txt в репозитории, клонированном ранее. Откройте вывод и следите за тем, чтобы принести зависимости и настройку для завершения. Это может занять немного.
Убедитесь, что конфигурация сверху установлена на x64-RelWithDebInfo . В окне Explorer Solution нажмите на значок с помощью заголовка «Переключатель между решениями и доступными представлениями». Нажмите на просмотр целей Cmake. Этот список должен быть заполнен после успешной конфигурации Cmake. Щелкните правой кнопкой мыши на цель LOCAL_RCC и нажмите «Создать локальный_Ркк». Результирующая сборка должна быть расположена по адресу out/build/x64-RelWithDebInfo/local_rcc.dll .
Существует четыре шага, чтобы сделать командный тест совместимым с игроком: установить быстрый флаг, блокировать нецепочечный предмет, составление совместимого байт -кода и воспроизводить байт -код.
Переоценивая Fast Flag, DebugLocalRccServerConnection , как на игроке, так и на студии, позволит соединять соединение между клиентом и сервером. Это также заставит клиента подключиться к localhost|53640 .
В одиночку вы уже можете присоединиться к тестированию команды студийного команды от игрока - однако, он еще не играет .
Вскоре после того, как Player присоединится к серверу Team Test, он будет запущен после отправки ClientQoSItem - который не понадобится Studio. Это может быть разрешено путем отказа отказаться от элемента, если ClientQoSItem передается в RBX::Network::Replicator::deserializeItem .
Открытие консоли разработчика в игроке после подключения к командному тестовому серверу показывает некоторые странные ошибки с пути LocalScript экземпляров, которые реплицируются для игрока, и ни один из них не выполняется. Отчасти это связано с тем, как студия населяет содержимое вектора legalScripts сервера. LegalScript - это сценарий «белого списка» для репликации, содержащий источник и байт -код. Функция RBX::Network::Server::registerLegalSharedScript используется для регистрации и составления этих сценариев.
Studio уже вызывает эту функцию и даже вызывает LuaVM::compile - однако, на студии она просто возвращает пустую std::string . Это можно исправить, зацепив LuaVM::compile и составление источника с LuaVM::BytecodeEncoderClient .
Даже после правильного составления сценариев и заполнения каждого LegalScript байт -кодом, такая же ошибка появляется в консоли разработчика. Когда запускается сервер, генерируется NetworkSchema , которая содержит информацию для каждого класса в базе данных Reflection. Это включает в себя информацию о том, как отправлять свойства, такие как Script.Source , который определяется их NetworkValueFormat . По умолчанию Studio выбирает тип для Script.Source , который будет ProtectedStringSource , и отправляет исходный код сценариев другим клиентам студии, чтобы они могли скомпилировать себя.
Это может быть исправлено, заставив сервер использовать ProtectedStringBytecode , что заставит его получить сохраненный байт -код от вектора legalScripts и отправить его при сериализации свойства. Генерация NetworkSchema происходит в RBX::Network::NetworkSchema::generateSchemaDefinitionPacket , и интересующая часть - это когда она выбирает соответствующий NetworkValueFormat для ProtectedString типа отражения.