Servidores de jogo auto -lançados para as versões mais recentes do Roblox.
Local_RCC é uma biblioteca que funciona com o Roblox Studio (atualmente Windows) e permite que o Roblox Player se conecte a um servidor hospedado no Roblox Studio.
Este guia é para construir no Microsoft Windows.
Certifique -se de ter os seguintes pré -requisitos:
winget install Ninja-build.ninjaClone o repositório:
git clone https://github.com/rsblox/local_rcc.git
Existem dois métodos para a construção:
Verifique se você tem o código do Visual Studio instalado com a extensão do CMake Tools instalada.
Abra o repositório clonado:
code local_rcc
Se solicitado a selecionar um kit de compilação, selecione o amd64 .
As ferramentas CMake configurarão automaticamente o projeto; Seja paciente e aguarde a saída para a configuração concluída; Isso inclui a busca de dependências da Internet.
Navegue até a guia CMake e defina o tipo de compilação para RelWithDebInfo .
No projeto do projeto na mesma guia CMake, construa o destino local_RCC [local_RCC.DLL]. Depois de concluído, a biblioteca deve estar localizada em bin/local_rcc.dll .
Abra o Visual Studio 2022 e navegue para File -> Open -> CMake... e navegue até o arquivo CMakeLists.txt no repositório clonado anteriormente. Abra a saída e observe a busca das dependências e a configuração para concluir. Isso pode levar um pouco.
Verifique se a configuração na parte superior está definida como x64-RelWithDebInfo . Na janela Solution Explorer, clique no ícone com a legenda "alterne entre soluções e visualizações disponíveis". Clique na visualização de metas cmake. Esta lista deve ser preenchida quando a configuração do CMake for bem -sucedida. Clique com o botão direito do mouse no destino local_RCC e clique em "Construir local_RCC". A compilação resultante deve estar localizada em out/build/x64-RelWithDebInfo/local_rcc.dll .
Existem quatro etapas para tornar um teste de equipe compatível com o jogador: definir uma bandeira rápida, bloquear um item não tratado, compilar bytecode compatível e replicar o bytecode.
Substituindo a bandeira rápida, DebugLocalRccServerConnection , no jogador e no estúdio permitirá que uma conexão seja feita entre o cliente e o servidor. Também forçará o cliente a se conectar ao localhost|53640 .
Somente com isso, você já pode participar de um teste de equipe de estúdio do jogador - no entanto, ainda não é jogável .
Logo após o jogador ingressar no servidor de teste da equipe, ele será chutado após o envio de um ClientQoSItem - que não é tratado pelo Studio. Isso pode ser resolvido recusando -se a desserializar o item se um ClientQoSItem for passado para RBX::Network::Replicator::deserializeItem .
A abertura do console do desenvolvedor no player após a conexão com o servidor de teste da equipe mostra alguns erros estranhos com o caminho das instâncias LocalScript que são replicadas para o player e nenhum deles é executado. Isso se deve em parte à forma como o estúdio preenche o conteúdo do vetor legalScripts do servidor. Um LegalScript é um script 'Whitelisted' para replicação, contendo fonte e bytecode. A função RBX::Network::Server::registerLegalSharedScript é usada para registrar e compilar esses scripts.
O Studio já chama essa função e até chama LuaVM::compile - no entanto, no Studio, ele apenas retorna um std::string vazio. Isso pode ser corrigido por conectar LuaVM::compile e compilar a fonte com LuaVM::BytecodeEncoderClient .
Mesmo após a compilação de scripts corretamente e preenchendo cada LegalScript com o ByTecode, o mesmo erro aparece no console do desenvolvedor. Quando um servidor é iniciado, um NetworkSchema é gerado, que contém informações para todas as classes no banco de dados de reflexão. Isso inclui informações sobre como enviar propriedades, como Script.Source , que é determinado pelo seu NetworkValueFormat . Por padrão, o Studio seleciona o tipo de Script.Source a ser ProtectedStringSource , o Stringsource e envia o código -fonte de scripts para outros clientes de estúdio para que eles se compilem.
Isso pode ser corrigido forçando o servidor a usar ProtectedStringBytecode , o que fará com que ele obtenha o bytecode armazenado do vetor legalScripts e o envie ao serializar a propriedade. A geração do NetworkSchema ocorre no RBX::Network::NetworkSchema::generateSchemaDefinitionPacket , e a parte de interesse é quando escolhe o NetworkValueFormat correspondente para o tipo de reflexão ProtectedString .