Avec la carte créée, il est temps de commencer à construire les scripts.Le reste de ce cours se concentrera fortement sur le scripting de tous les éléments différents de la boucle de jeu.
Configurer les scripts
La bataille royale utilisera une combinaison de scripts de module et de scripts normaux. Ci-dessous, les scripts et leurs fonctions.
Gestionnaire de jeu | Script. Exécute des fonctions à partir du gestionnaire de match en utilisant des variables des paramètres du jeu |
Manager de match | Script de module. Exécute des fonctions telles que l'envoi de joueurs dans une arène ou le suivi du temps dans un correspondre. |
Paramètres de jeu | Script de module. Stocke les variables couramment utilisées utilisées par d'autres scripts. |
scriptdes paramètres de jeu
Créez un script de module nommé GameSettings pour stocker les variables utilisées par d'autres scripts, comme la durée du match et de l'intermission.Ces variables seront utilisées par le script GameManager plus tard.
Dans ServerStorage , créez un dossier nommé ModuleScripts. Dans ce dossier, créez un nouveau script de module nommé GameSettings.
Ouvrez les paramètres du jeu et renommez la table du module pour correspondre au nom du script.
local GameSettings = {}return GameSettingsDans la table de module, ajoutez des variables pour les utilisations suivantes. Prenez votre meilleure estimation pour chaque valeur, vous pouvez toujours la modifier plus tard lorsque vous testez.
- Durée de l'intermission - Secondes pendant lesquels les joueurs attendent avant un correspondre.
- Durée du match - Durée d'un match en secondes.
- Joueurs minimum - Plus petit nombre de joueurs nécessaires pour commencer.
- Temps de transition - Temps avant et après un match en secondes. Fait la transition entre les parties de la boucle de jeu moins soudaine.
local GameSettings = {}-- Variables de jeuGameSettings.intermissionDuration = 5GameSettings.matchDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings
scriptde MatchManager
Le deuxième script connecté au GameManager est le MatchManager.Ce script gère des tâches comme le démarrage de la minuterie ou la réinitialisation des joueurs une fois le match terminé.
Dans MatchManager, une fonction nommée prepareGame() lance le jeu en transférant les joueurs dans le correspondre.
Dans ServerStorage > ModuleScripts > ajoutez un script de module nommé MatchManager. Renommez la table du module.
local MatchManager = {}return MatchManagerAjoutez une nouvelle fonction de module à MatchManager nommée prepareGame(). Incluez une déclaration d'impression pour tester le script plus tard.
local MatchManager = {}function MatchManager.prepareGame()print("Game starting!")endreturn MatchManager
Coder la boucle de jeu
La boucle de jeu principale sera codée dans le script GameManager en utilisant les variables vient de créer.Rappelez-vous, il y a trois phases dans la boucle de jeu : l'intermission, la compétition et le nettoyage et la réinitialiser.
scriptdu gestionnaire de jeu
Ce script est un script de serveur normal, donc mettez-le dans ServerScriptService, plutôt que dans le dossier des scripts de module.La boucle de jeu réelle sera dans une boucle while true.
Dans ServerScriptService, créez un nouveau script nommé GameManager.
Ajoutez une variable pour le service « ServerStorage », qui est l'endroit où se trouvent les Modulescripts.Ensuite, ajoutez une variable pour le service "Joueurs", qui sera nécessaire pour vérifier le nombre de joueurs pendant les interruptions.
-- Serviceslocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")Pour utiliser les modules créés précédemment :
- Définissez une variable nommée moduleScripts à l'emplacement du dossier ModuleScripts.
- Ajoutez les variables nommées matchManager et gameSettings. Définissez chaque variable pour qu'elle requière son script respectif.
-- Serviceslocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Scripts de modulelocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))Après les variables, ajoutez une boucle while true do. Toutes les phases de la boucle de jeu iront à l'intérieur pour se répéter indéfiniment.
-- Scripts de modulelocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Boucle de jeu principalewhile true doend
Coder l'intermission
Bien que la boucle de jeu s'exécute indéfiniment, l'intermission doit mettre la boucle en pause et ne se poursuivre que lorsque il y a suffisamment de joueurs pour un correspondre.Pour coder cette pause, incluez une boucle de répétition imbriquée pour l'intermission dans la boucle while.Cette boucle imbriquée se répétera jusqu'à ce qu'il y ait suffisamment de joueurs, en interrompant la boucle principale.Une fois qu'il y aura suffisamment de joueurs, il sortira et transférera les joueurs dans un correspondre.
Avec une boucle de répétition **** , le code dans la boucle s'exécutera au moins une fois.Contrairement à une boucle while, il ne vérifie pas sa condition jusqu'à la fin de la boucle.Cela garantit que les joueurs vont toujours dans le lobby avant un correspondre.
Dans la boucle while true do, saisissez repeat et appuyez sur Enter pour autocompléter avec le mot-clé until.
while true dorepeatuntilendVérifiez si le nombre actuel de joueurs (#Players:GetPlayers()) est supérieur ou égal à la variable minimumPlayers créée plus tôt dans le module GameSettings.
while true dorepeatuntil #Players:GetPlayers() >= gameSettings.minimumPlayersendDans la boucle de répétition, ajoutez une déclaration d'impression indiquant que l'intermission commence.Utilisez task.wait() pour faire une pause pendant l'intermission en utilisant intermissionDuration à partir de GameSettings.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersendTestez et vérifiez que la déclaration d'impression "Starting intermission" est affichée au moins deux fois.Voir le message deux fois prouve que la boucle de répétition n'a pas trouvé assez de joueurs et a été exécutée à nouveau.Vous devrez attendre la durée de l'intermission avant de voir le message une deuxième fois.
Conseils de dépannage
À ce stade, si vous ne vous générez pas comme prévu, essayez l'une des options suivantes.
- task.wait() devrait être à l'intérieur de la boucle de répétition.Sans attendre, le script s'exécutera trop de fois en une seconde, surchargant Roblox Studio et causant une erreur.
- Dans le module des paramètres de jeu, la variable intermissionDuration devrait être supérieure à 1. Si elle est inférieure, le script peut se répéter trop souvent, ce qui entraîne des problèmes de ralentissement.
Finir l'intermission
Une fois qu'il y a suffisamment de joueurs, faites-les attendre un court temps de transition.Ensuite, envoyez-les dans le match en appelant la fonction prepareGame() dans MatchManager.Rappelez-vous, cette fonction n'imprime qu'une ligne, mais vous ajouterez plus de code plus tard.
À la fin du cycle de répétition, ajoutez une déclaration d'impression indiquant que l'intermission est terminée pour tester votre code.Ensuite, suivez-le avec un task.wait() en utilisant la variable transitionTime de GameSetting.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)endAprès l'attente, appelez le prepareGame() du module MatchManager.Lorsque le code s'exécute, cela imprimera simplement du texte dans la fenêtre de sortie.Attendez la section suivante pour tester ce code.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Tester les jeux multijoueurs
En ce moment, pour que le code s'exécute prepareGame(), il doit quitter la boucle de répétition.Mais, pour le faire, il doit y avoir plus d'un joueur.Cela signifie que si vous utilisez le bouton de test de jeu, la fonction ne s'exécutera jamais car vous êtes le seul joueur dans le jeu (à moins que vos joueurs minimum ne soient un).Pour tester cela, vous devrez simuler un jeu multijoueur.
Démarrer un serveur local
Pour tester le code nécessitant plus d'un joueur, créez un serveur local.Bien que les jeux publiés soient normalement sur les serveurs de Roblox, un serveur local simule un jeu multijoueur sur votre ordinateur avec des joueurs simulés.
Pour démarrer un serveur local, dans l'onglet Test > Clients et serveurs > définissez la liste déroulante du joueur au nombre de joueurs dans la variable minimumPlayers de GameSetting.Cette leçon utilise 2 joueurs.
Cliquez sur Commencer pour démarrer le serveur.
Attendez quelques secondes pour que le serveur soit configuré.Plusieurs fenêtres s'ouvriront en plus de la fenêtre Studio originale.Vous devrez peut-être autoriser l'accès à Roblox Studio à partir de pare-feux ou d'un autre logiciel de sécurité en ligne.
Conseils de dépannage
À ce stade, vous ne pouvez pas voir les serveurs de test, essayez l'une des options suivantes.
- Si vous avez des problèmes avec le démarrage du serveur, vérifiez deux fois l'article Problèmes de pare-feu et de routeur.
- Définissez le nombre de joueurs à un petit montant, comme 2 ou 3.
- Si le problème persiste, essayez de redémarrer Studio ou de redémarrer votre ordinateur.
Test sur le serveur local
Vous verrez plusieurs fenêtres lorsque le serveur démarre. Chacune représente une partie différente de la relation serveur/client.
- Serveur (frontière verte) exécute le jeu.
- Client (bordures bleues) simule l'expérience d'un joueur.


Avec le serveur en place, vous pouvez vérifier si le code a fonctionné.
Trouvez la fenêtre Serveur avec la bordure verte.Vérifiez la déclaration d'impression appelée depuis le script MatchManager.Parce qu'il y a une boucle de répétition, vous verrez les mêmes déclarations d'impression se répéter.
Une fois que vous avez terminé les tests, dans n'importe quelle fenêtre, fermez le serveur par le bouton Nettoyer.Cela ferme toutes les fenêtres Serveur et Client et vous ramène à votre fenêtre Studio normale.
Conseils de dépannage
À ce stade, si les déclarations d'impression prévues n'apparaissent pas, essayez l'une des options suivantes.
- Vérifiez que les fonctions comme prepareGame() sont dans le champ d'application de la boucle while true.
- Si l'impression à partir de MatchManager ne fonctionnait pas, vérifiez quelques problèmes courants de résolution avec les scripts de module, comme vous vous assurer que le script de MatchManager est requis dans GameManager ou que prepareGame() est ajouté à la table de ce module.
Scripts terminés
Ci-dessous, les scripts terminés pour vérifier à nouveau votre travail.
scriptdu gestionnaire de jeu
-- Serviceslocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Scripts de modulelocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Boucle de jeu principalewhile true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
scriptde MatchManager
local MatchManager = {}
function MatchManager.prepareGame()
print("Game starting!")
end
return MatchManager
scriptdes paramètres de jeu
local GameSettings = {}-- Variables de jeuGameSettings.intermissionDuration = 5GameSettings.roundDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings