Ce projet utilisera des déclarations conditionnelles pour créer une partie qui donnera ou soustraira des points sur un classement en fonction de la couleur de la partie lorsqu'elle est touchée. Si bleue, alors elle donnera aux joueurs quelques points. Si verte, alors elle donnera beaucoup de points. Enfin, si rouge, alors elle enlèvera des points.
Configurer le projet
La partie donnant lieu peut être ajoutée à n'importe quel projet où les points sont pertinents. Par instance, un jeu d'aventure où les joueurs collectent des points.
Suivi des points
Pour configurer ce projet, vous aurez besoin d'un classement pour suivre les points et d'une partie qui change de couleur. Le code pour le classement sera fourni.
Créer un nouveau script dans ServerScriptService nommé Leaderboard. Copiez et collez le code ci-dessous dans le script.
--Dans ServerScriptService, créez un script nommé PlayerSetup avec le contenu ci-dessous.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Exemple d'un IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Exécutez onPlayerJoin lorsque l'événement PlayerAdded se déclenchePlayers.PlayerAdded:Connect(onPlayerJoin)
Partie échangeant de couleur
Le script parcourra trois couleurs différentes pour la partie. Chaque couleur aura une variable pour stocker sa valeur RGB, un type de données qui inclut un ensemble de trois chiffres (rouge, vert, bleu) qui créent des couleurs.
Créez une partie nommée PointPart avec un script nommé PointScript.
Dans PointScript, utilisez script.Parent pour vous référer à la partie.
local pointPart = script.ParentCréez des variables pour stocker les différentes couleurs. Chaque variable doit être définie sur Color3.fromRGB(), ce qui crée une valeur de couleur.
- Bleu (Certains points) : (0, 0, 255)
- Vert (Nombre de points): (0, 255, 0)
- Rouge (Perdre des points) : (255, 0, 0)
local pointPart = script.Parent-- Couleurslocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)Ajoutez des variables pour un petit nombre de points, un plus grand nombre de points et un troisième pour supprimer des points.
-- Couleurslocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Valeurs de pointslocal smallPoints = 10local largePoints = 50local losePoints = 100
Ajouter le service des joueurs
Pour attribuer des points, vous devrez avoir accès à l'information du joueur qui est stockée dans l'Explorateur sous les joueurs, et est séparée de l'objet de personnage. C'est ici que vous pouvez trouver des informations comme les statistiques du classement.
Vous pouvez le faire en ajoutant le service Joueurs à votre script. Les Services sont des ensembles supplémentaires de fonctions prédéfinies créées par les ingénieurs Roblox pour vous faire gagner du temps.
Obtenez le service Joueurs en tapant :
local Players = game:GetService("Players")
-- Valeurs de pointslocal smallPoints = 10local largePoints = 50local losePoints = 100-- Services nécessaireslocal Players = game:GetService("Players")
Fonctions et événements
PointsScript aura besoin de deux fonctions. La première fonction donnera et soustraira des parties. La deuxième fonction vérifiera si un joueur a touché la partie. Ces fonctions seront ensuite connectées à un événement de touche, qui s'exécute toujours lorsque cette partie est touchée.
Créez une nouvelle fonction nommée givePoints() et un paramètre nommé player . À l'intérieur, ajoutez une déclaration d'impression à utiliser pour le test.
local Players = game:GetService("Players")-- Donne ou soustrait des pointslocal function givePoints(player)print("Giving player points")endSous cela, créez une deuxième fonction nommée partTouched() avec un paramètre nommé otherPart .
-- Donne ou soustrait des pointslocal function givePoints(player)print("Giving player points")end-- Vérifie si le joueur a touché la partielocal function partTouched(otherPart)endDans la fonction, utilisez la fonction GetPlayerFromCharacter() pour vérifier si un joueur est dans la variable autrePart.
-- Vérifie si le joueur a touché la partielocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endSi un joueur a touché la partie, il sera stocké à l'intérieur de la variable du joueur. Sinon, la variable restera vide. À vous de posséder:
- Dans la fonction, vérifiez si le joueur a une valeur. Si oui, alors appelez givePoints(player).
- Sous la fonction, connectez partTouched() à l'événement Touched de pointPart .
-- Vérifie si le joueur a touché la partielocal function partTouched(otherPart)-- Obtient le joueur si un touché la partielocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Exécutez le projet. Chaque fois qu'un joueur touche la partie, vous devriez voir un message dans la fenêtre de sortie disant : "Giving player points" Conseils de débogage :
- Vérifiez que "Players" dans game:GetService("Players") est capitalisé et en majuscules.
- partTouched() devrait être connecté à l'événement Touched de pointPart.
Créer des couleurs de boucle
Pour boucler à travers les couleurs, le script utilisera un while = boucle qui change la couleur de la partie toutes les quelques secondes. La condition pour ce boucle sera vraie, donc il peut s'exécuter indéfiniment.
À la fin du script, créez un nouveau while loop où la condition est vraie, ce qui signifie que le loop s'exécute toujours.
-- Vérifie si le joueur a touché la partielocal function partTouched(otherPart)-- Obtient le joueur si un touché la partielocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Boucles à travers les couleurswhile true doendEn posséder, code un peu vrai do loop qui change pointPart à la couleur que vous avez créée. N'oubliez pas d'utiliser task.wait() entre les couleurs. Lorsque vous avez terminé, vérifiez votre code contre la version ci-dessous.
-- Loop à travers 3 couleurs, en attente entre chaque couleurwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endTestez et vérifiez que les trois couleurs se répètent sans interruption.
Conseils de débogage
À ce stade, si le color looping ne fonctionne pas comme prévu, essayez l'une des suivantes.
- Vérifiez que le while loop est au bas de le script, sous l'événement Touched. Si le while loop n'est pas au bas, il gardera d'autres parties du script de fonctionner correctement.
- Vérifiez que chaque couleur à l'intérieur de Color3.fromRGB() est correctement écrite. Il doit y avoir trois numéros entre 0 et 255 séparés par des virgules, comme (255, 50, 0) .
Donner des points aux joueurs
Les joueurs recevront des points en fonction de la couleur actuelle de la partie lorsqu'ils la touchent.
Trouver la couleur actuelle
Chaque fois qu'un joueur touche la partie, le script devra savoir la couleur actuelle de la partie pour attribuer des points plus tard.
Trouvez givePoints(). Remplacez votre message d'essai par une variable pour la couleur actuelle de pointPart. Cette variable déterminera le nombre de points que le joueur obtient (ou perd).
local function givePoints(player)local currentColor = pointPart.ColorendPour affecter les points d'un joueur, cette fonctionnalité nécessite l'accès à la classementsde classement du joueur. Créez une variable pour le stocker.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endMaintenant, ajoutez une variable pour obtenir la valeur des points du joueur, qui est un enfant de leur classements.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Donner ou soustraire des points
Ensuite, vous utiliserez if et elif pour donner ou soustraire des points en fonction de la couleur de la partie lorsqu'elle est touchée. N'oubliez pas que le bleu fournit une petite quantité, le vert fournit beaucoup et le rouge soustrait des points.
Dans givePoints() , sous les variables, utilisez une if statement pour vérifier si la couleur actuelle est bleue et si oui, ajoutez smallPoints à la valeur des points du joueur.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendPour vérifier la couleur verte, ajoutez une autre condition. Si la couleur verte, ajoutez la variable largePoints au point du joueur.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendUtilisez une autre déclaration pour soustraire des points si pointsPart n'était pas bleu ou vert.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendEnfin, détruisez la partie après la déclaration if afin que le script ne puisse pas continuer à donner des points.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Testez le jeu et vérifiez que chaque couleur donne les points comme prévu. Assurez-vous de tester toutes les trois conditions.
Donner aux joueurs des commentaires
Le PointPart fonctionne, mais les joueurs peuvent ne pas remarquer que quelque chose s'est produit à moins qu'ils regardent leur classements. Résolvez cela en créant des particules lorsque le PointPart est détruit.
Ajouter des commentaires lorsque les joueurs utilisent une partie, comme les sons, les secousses ou les particules, rend les interactions avec les objets plus satisfaisantes pour les joueurs.
Créer un effet de particule
L'effet de particule sera de la même couleur que la partie lorsqu'elle est touchée. Étant donné que les couleurs ont été stockées dans des variables, il est facile de les réutiliser.
En givePoints() en bas, créez une nouvelle instance de ParticleEmitter . Assurez-vous que le nom de l'instance est correctement orthographié comme indiqué.
local particle = Instance.new("ParticleEmitter")endLes émetteurs de particules utilisent des séquences de couleurs pour contrôler leur propriété couleur. Créez une nouvelle séquence de couleurs et passez dans la couleur de la partie actuelle.
-- Destruction de la partiepointPart:Destroy()-- Créer des particuleslocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)La particule devra être associée au joueur qui l'a touchée. Créez une variable pour obtenir le modèlisationde personnage du joueur. Puis, parent la particule à la tête du joueur.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Utilisez task.wait() pour un court instant, puis détruisez les particules.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Testez le jeu et assurez-vous que les particules suivent brièvement le joueur après avoir touché chaque couleur.
Conseils de débogage
À ce stade, si les particules ne fonctionnent pas comme prévu, essayez l'une des suivantes ci-dessous.
- Faites lors de la création d'une nouvelle instance que ParticleEmitter est écrit exactement comme indiqué et à l'intérieur des guêtes.
- Lorsque vous parentalisez les particules, assurez-vous d'utiliser : entre playerCharacter et WaitForChild() avec pas d'espace entre.
Terminez PointScript
Une version finie du script peut être référencée ci-dessous.
local pointPart = script.Parent
--local storage = jeu : GetService("ServerStorage")
-- Donne quelques points
local blue = Color3.fromRGB(0, 0, 255)
-- Donne plus de points
local green = Color3.fromRGB(0, 255, 0)
-- Fait perdre des points aux joueurs
local red = Color3.fromRGB(255, 0, 0)
-- or donné aux joueurs
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Donne au joueur de l'or en fonction de la couleur de la pièce
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Détruisez la partie, attendez un seconde, puis détruisez la particule
pointPart:Destroy()
-- Crée un effet d'étincelles et le détruit
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Change la couleur de la partie en fonction des variables. Doit être en bas du script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end