Servidores de juegos autohostados para las últimas versiones de Roblox.
Local_RCC es una biblioteca que funciona con Roblox Studio (actualmente solo con Windows) y permite que el reproductor de Roblox se conecte a un servidor alojado de Roblox Studio.
Esta guía es para construir en Microsoft Windows.
Asegúrese de tener los siguientes requisitos previos:
winget install Ninja-build.ninjaClon el repositorio:
git clone https://github.com/rsblox/local_rcc.git
Hay dos métodos para construir:
Asegúrese de tener el código Visual Studio instalado con la Extención de Herramientas CMake instalada.
Abra el repositorio clonado:
code local_rcc
Si se le solicita que seleccione un kit de compilación, seleccione el amd64 One.
Las herramientas CMake configurarán automáticamente el proyecto; Sea paciente y espere en la salida para que se complete la configuración; Esto incluye la obtención de dependencias de Internet.
Navegue a la pestaña Cmake y establezca el tipo de compilación en RelWithDebInfo .
En el esquema del proyecto en la misma pestaña Cmake, cree el objetivo local_rcc [local_rcc.dll]. Una vez completado, la biblioteca debe ubicarse en bin/local_rcc.dll .
Abra Visual Studio 2022 y navegue a File -> Open -> CMake... y navegue hasta el archivo CMakeLists.txt en el repositorio clonado anteriormente. Abra la salida y observe para obtener las dependencias y configurar para completar. Esto puede tomar un poco.
Asegúrese de que la configuración en la parte superior esté configurada en x64-RelWithDebInfo . En la ventana del explorador de soluciones, haga clic en el icono con el subtítulo "Interruptor entre soluciones y vistas disponibles". Haga clic en la vista de objetivos CMake. Esta lista debe poblarse una vez que la configuración de CMake sea exitosa. Haga clic derecho en el objetivo local_rcc y haga clic en "Build Local_RCC". La construcción resultante debe ubicarse en out/build/x64-RelWithDebInfo/local_rcc.dll .
Hay cuatro pasos para hacer que una prueba de equipo sea compatible con el jugador: configurar una bandera rápida, bloquear un elemento no controlado, compilar bytecode compatible y replicar el bytecode.
Al anular la bandera rápida, DebugLocalRccServerConnection , tanto en el jugador como en el estudio, permitirá que se haga una conexión entre el cliente y el servidor. También obligará al cliente a conectarse a localhost|53640 .
Con esto solo, ya puedes unirte a una prueba de equipo de estudio del jugador; sin embargo, aún no es jugable .
Poco después de que el jugador se una al servidor de pruebas de equipo, se pateará después de enviar un ClientQoSItem , que no está controlado por Studio. Esto puede resolverse negándose a deserializar el elemento si un ClientQoSItem se pasa a RBX::Network::Replicator::deserializeItem .
Abrir la consola de desarrollador en el jugador después de conectarse al servidor de prueba del equipo muestra algunos errores extraños con la ruta de las instancias LocalScript que se replican al jugador y ninguno de ellos se ejecuta. Esto se debe en parte a cómo Studio poca el contenido del vector legalScripts del servidor. Un LegalScript es un script 'la lista blanca' para la replicación, que contiene fuente y bytecode. La función RBX::Network::Server::registerLegalSharedScript se usa para registrar y compilar estos scripts.
Studio ya llama a esta función e incluso invoca LuaVM::compile ; sin embargo, en Studio solo devuelve una std::string . Esto se puede solucionar enganchando LuaVM::compile y compilar fuente con LuaVM::BytecodeEncoderClient .
Incluso después de compilar los scripts correctamente y poblar cada LegalScript con bytecode, aparece el mismo error en la consola de desarrollador. Cuando se inicia un servidor, se genera un NetworkSchema , que contiene información para cada clase en la base de datos de reflexión. Esto incluye información sobre cómo enviar propiedades, como Script.Source , que está determinada por su NetworkValueFormat . De forma predeterminada, Studio selecciona el tipo de Script.Source Source para ser ProtectedStringSource y envía el código fuente de scripts a otros clientes de estudio para que se compilen.
Esto se puede solucionar obligando al servidor a usar ProtectedStringBytecode , lo que hará que obtenga el Bytecode almacenado del vector legalScripts y lo enviará al serializar la propiedad. La generación de NetworkSchema ocurre en RBX::Network::NetworkSchema::generateSchemaDefinitionPacket , y la porción de interés es cuando elige el NetworkValueFormat correspondiente para el tipo de reflexión ProtectedString .