Autre/Si vous pratiquez avec des points de don

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

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.

  1. 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 IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Exécutez onPlayerJoin lorsque l'événement PlayerAdded se déclenche
    Players.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.

  1. Créez une partie nommée PointPart avec un script nommé PointScript.

  2. Dans PointScript, utilisez script.Parent pour vous référer à la partie.


    local pointPart = script.Parent
  3. Cré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
    -- Couleurs
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Ajoutez des variables pour un petit nombre de points, un plus grand nombre de points et un troisième pour supprimer des points.


    -- Couleurs
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Valeurs de points
    local smallPoints = 10
    local largePoints = 50
    local 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.

  1. Obtenez le service Joueurs en tapant :

    local Players = game:GetService("Players")


    -- Valeurs de points
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Services nécessaires
    local 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.

  1. 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 points
    local function givePoints(player)
    print("Giving player points")
    end
  2. Sous cela, créez une deuxième fonction nommée partTouched() avec un paramètre nommé otherPart .


    -- Donne ou soustrait des points
    local function givePoints(player)
    print("Giving player points")
    end
    -- Vérifie si le joueur a touché la partie
    local function partTouched(otherPart)
    end
  3. Dans 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 partie
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Si 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 partie
    local function partTouched(otherPart)
    -- Obtient le joueur si un touché la partie
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. 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.

  1. À 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 partie
    local function partTouched(otherPart)
    -- Obtient le joueur si un touché la partie
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Boucles à travers les couleurs
    while true do
    end
  2. En 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 couleur
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Testez 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.

  1. 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.Color
    end
  2. Pour 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.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Maintenant, 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.Color
    local 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.

  1. 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.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. Pour vérifier la couleur verte, ajoutez une autre condition. Si la couleur verte, ajoutez la variable largePoints au point du joueur.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Utilisez une autre déclaration pour soustraire des points si pointsPart n'était pas bleu ou vert.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Enfin, détruisez la partie après la déclaration if afin que le script ne puisse pas continuer à donner des points.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. 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.

  1. 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")
    end
  2. Les é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 partie
    pointPart:Destroy()
    -- Créer des particules
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. 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.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. 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.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. 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