Serveurs de jeu auto-hébergés pour les dernières versions de Roblox.
Local_RCC est une bibliothèque qui fonctionne avec Roblox Studio (actuellement Windows uniquement) et permet au lecteur Roblox de se connecter à un serveur hébergé Roblox Studio.
Ce guide est destiné à construire sur Microsoft Windows.
Assurez-vous d'avoir les conditions suivantes:
winget install Ninja-build.ninjaClone le référentiel:
git clone https://github.com/rsblox/local_rcc.git
Il existe deux méthodes de construction:
Assurez-vous que le code Visual Studio est installé avec l'extension CMake Tools installée.
Ouvrez le référentiel cloné:
code local_rcc
Si vous êtes invité à sélectionner un kit de construction, sélectionnez celui amd64 .
Les outils CMake configureront automatiquement le projet; Soyez patient et attendez dans la sortie que la configuration se termine; Cela comprend la récupération des dépendances sur Internet.
Accédez à l'onglet CMake et définissez le type de construction sur RelWithDebInfo .
Dans le plan du projet dans le même onglet CMake, créez la cible local_rcc [local_rcc.dll]. Une fois terminée, la bibliothèque doit être située à bin/local_rcc.dll .
Ouvrez Visual Studio 2022 et naviguez vers File -> Open -> CMake... et accéder au fichier CMakeLists.txt dans le référentiel cloné plus tôt. Ouvrez la sortie et surveillez pour récupérer les dépendances et configurer pour terminer. Cela peut prendre un peu.
Assurez-vous que la configuration en haut est définie sur x64-RelWithDebInfo . Dans la fenêtre Solution Explorer, cliquez sur l'icône avec la légende "Commutation entre les solutions et les vues disponibles". Cliquez sur la vue Cmake Targets. Cette liste doit être remplie une fois la configuration CMake réussie. Cliquez avec le bouton droit sur la cible local_rcc et cliquez sur "Créer un local_rcc". La version résultante doit être située à out/build/x64-RelWithDebInfo/local_rcc.dll .
Il y a quatre étapes pour rendre un test d'équipe compatible avec le joueur: définir un indicateur rapide, bloquer un élément non perdu, compilation des bytecodes compatibles et reproduire le bytecode.
Souvrant l'indicateur rapide, DebugLocalRccServerConnection , sur le joueur et le studio permettra à une connexion entre le client et le serveur. Il obligera également le client à se connecter à localhost|53640 .
Avec cela seul, vous pouvez déjà rejoindre un test d'équipe de studio de Player - cependant, il n'est pas encore jouable .
Peu de temps après que Player rejoigne le serveur d'équipe, il sera lancé après avoir envoyé un ClientQoSItem - qui n'est pas permis par Studio. Cela peut être résolu en refusant de désérialiser l'élément si un ClientQoSItem est transmis à RBX::Network::Replicator::deserializeItem .
L'ouverture de la console du développeur dans Player après avoir été connectée au serveur de test d'équipe affiche des erreurs étranges avec le chemin d'accès des instances LocalScript qui sont reproduites au joueur et aucun d'entre eux n'est exécuté. Cela est dû en partie à la façon dont Studio remplit le contenu du vecteur legalScripts du serveur. Uncript LegalScript est un script «à liste blanche» pour la réplication, contenant une source et des bytecode. La fonction RBX::Network::Server::registerLegalSharedScript est utilisée pour enregistrer et compiler ces scripts.
Studio appelle déjà cette fonction et invoque même LuaVM::compile - cependant, sur Studio, il renvoie simplement une std::string vide. Cela peut être corrigé en accrochant LuaVM::compile et compiler la source avec LuaVM::BytecodeEncoderClient .
Même après avoir compilé correctement les scripts et rempli chaquecripteur LegalScript avec ByteCode, la même erreur apparaît dans la console du développeur. Lorsqu'un serveur est démarré, un NetworkSchema est généré, qui contient des informations pour chaque classe de la base de données de réflexion. Cela inclut des informations sur la façon d'envoyer des propriétés, comme Script.Source , qui est déterminée par leur NetworkValueFormat . Par défaut, Studio sélectionne le type de Script.Source à ProtectedStringSource et envoie le code source des scripts à d'autres clients de studio pour qu'ils se compilent.
Cela peut être corrigé en forçant le serveur à utiliser ProtectedStringBytecode , qui le fera obtenir le bytecode stocké à partir du vecteur legalScripts et l'envoyer lors de la sérialisation de la propriété. La génération de NetworkSchema se produit dans RBX::Network::NetworkSchema::generateSchemaDefinitionPacket , et la partie d'intérêt est lorsqu'elle choisit le NetworkValueFormat correspondant pour le type de réflexion ProtectedString .