Catégories
Jeu vidéo ROBLOX ROBLOX-NIVEAU01

Pouvoir de transparence du joueur

Ce script permet de rendre un joueur presque invisible quand il touche une pièce spéciale (Part).

  • Effet : Le corps du joueur et ses accessoires (chapeau, lunettes, etc.) deviennent transparents à 80% (presque invisibles).
  • Déclencheur : Quand le joueur touche la pièce Part (dans le dossier Folder).

Créer un part « JumpPart » sous un folder « JumpFolder »pour donner au joueur le pouvoir de courir plus vite :

Objets à créer dans Roblox Studio

Pour que le script fonctionne, il faut créer :

  1. Un dossier dans le Workspace :
    • Nom : Folder.
  2. Une pièce dans ce dossier :
    • Nom : Part.
    • Type : BasePart (un cube, une sphère, etc.).

Crée un script dans ServerScriptService :

local heightScaleFolder = workspace:WaitForChild("Folder")
local heightScale = heightScaleFolder:WaitForChild("Part")

heightScale.Touched:Connect(function(hit)
	local character = hit:FindFirstAncestorOfClass("Model")
	
	for _, child in pairs(character:GetChildren()) do
		if child:IsA("Accessory") then
			for _, descendant in pairs(child:GetDescendants()) do
				if descendant:IsA("BasePart") or descendant:IsA("Decal") then
					descendant.Transparency = 0.8
				end
			end
		elseif child:IsA("MeshPart") then
			child.Transparency = 0.8
		end
	end

end)

Explication du code pas à pas

1. Récupérer les objets dans le Workspace

local heightScaleFolder = workspace:WaitForChild("Folder")
local heightScale = heightScaleFolder:WaitForChild("Part")
  • workspace:WaitForChild("Folder") :
    • Attend que le dossier Folder existe dans le Workspace.
    • Si le dossier n’existe pas encore, le script attend qu’il soit créé.
  • heightScaleFolder:WaitForChild("Part") :
    • Attend que la pièce Part existe dans le dossier Folder.

💡 Pourquoi WaitForChild ?

  • Cela évite les erreurs si les objets ne sont pas encore créés quand le script s’exécute.

2. Détecter quand un joueur touche la pièce

heightScale.Touched:Connect(function(hit)
  • heightScale.Touched :
    • Événement déclenché quand un objet touche la pièce Part.
  • hit :
    • C’est l’objet qui a touché la pièce (ex: la tête, le torse ou un bras du joueur).

3. Récupérer le modèle du personnage

local character = hit:FindFirstAncestorOfClass("Model")
  • hit:FindFirstAncestorOfClass("Model") :
    • Cherche le premier ancêtre de hit qui est un Model.
    • En Roblox, le personnage d’un joueur est un Model contenant toutes ses parties (tête, bras, jambes, etc.).
    • Si hit est une partie du corps (ex: Head), cette fonction renvoie le modèle du joueur (Character).

4. Parcourir toutes les parties du personnage

for _, child in pairs(character:GetChildren()) do
  • character:GetChildren() :
    • Récupère tous les objets enfants du modèle du joueur (ex: Head, Torso, RightArm, accessoires, etc.).
  • pairs :
    • Parcourt chaque enfant un par un (comme une boucle for en Python).
  • _ :
    • Variable temporaire (on ne l’utilise pas, c’est juste pour la syntaxe).

5. Gérer les accessoires (chapeaux, lunettes, etc.)

if child:IsA("Accessory") then
    for _, descendant in pairs(child:GetDescendants()) do
        if descendant:IsA("BasePart") or descendant:IsA("Decal") then
            descendant.Transparency = 0.8
        end
    end
end
  • child:IsA("Accessory") :
    • Vérifie si child est un accessoire (ex: un chapeau, des lunettes, une épée, etc.).
  • child:GetDescendants() :
    • Récupère toutes les parties de l’accessoire (ex: les pièces qui composent le chapeau).
  • descendant:IsA("BasePart") or descendant:IsA("Decal") :
    • Vérifie si descendant est :
      • Une pièce de base (BasePart, comme un cube).
      • Un autocollant (Decal, comme une texture sur un chapeau).
  • descendant.Transparency = 0.8 :
    • Rend l’objet transparent à 80% (0 = invisible, 1 = opaque).
    • Effet : L’accessoire devient presque invisible.

💡 Pourquoi 0.8 ?

  • 0 = complètement invisible.
  • 1 = complètement opaque (visible normalement).
  • 0.8 = très transparent (presque invisible, mais encore un peu visible).

6. Gérer les parties du corps (MeshPart)

elseif child:IsA("MeshPart") then
    child.Transparency = 0.8
end
  • child:IsA("MeshPart") :
    • Vérifie si child est une pièce avec un maillage (MeshPart).
    • En Roblox, les parties du corps des joueurs modernes (comme dans R15) sont souvent des MeshPart.
  • child.Transparency = 0.8 :
    • Rend la pièce transparente à 80%.

Pourquoi seulement MeshPart ?

  • Dans les anciens modèles de joueurs (R6), les parties du corps étaient des Part.
  • Dans les modèles modernes (R15), elles sont souvent des MeshPart.
  • Ce script ne gère pas les Part classiques (comme Head ou Torso en R6).
  • Pour une invisibilité complète, il faudrait aussi gérer les Part.

Limites du script actuel

  1. Ne gère pas les Part classiques (comme Head, Torso en R6) :
    • Ces parties restent visibles.
    • Pour les rendre invisibles, il faudrait ajouter :luaCopierelseif child:IsA("Part") then child.Transparency = 0.8 end
  2. Ne gère pas les Humanoid ou autres composants :
    • Certains éléments (comme les effets de lumière) ne sont pas affectés.

QCM pour tester la compréhension

Questions sur le script « Pouvoir d’invisibilité »

  1. Que fait workspace:WaitForChild("Folder") ?
    • A. Crée un dossier nommé Folder.
    • B. Attend que le dossier Folder existe dans le Workspace.
    • C. Supprime le dossier Folder.
    • D. Change la couleur du dossier.
  1. Que représente hit dans heightScale.Touched:Connect(function(hit) ?
    • A. La pièce Part elle-même.
    • B. La partie du joueur qui a touché Part (ex: la main, la tête).
    • C. Le script Lua.
    • D. Le dossier Folder.
  1. À quoi sert hit:FindFirstAncestorOfClass("Model") ?
    • A. Trouve la pièce Part.
    • B. Trouve le modèle du personnage (le joueur entier).
    • C. Trouve l’Humanoid directement.
    • D. Change la taille de la pièce.
  1. Que fait descendant.Transparency = 0.8 ?
    • A. Rend l’objet complètement invisible.
    • B. Rend l’objet transparent à 80% (presque invisible).
    • C. Change la couleur de l’objet.
    • D. Supprime l’objet.
  1. Pourquoi utilise-t-on child:IsA("Accessory") ?
    • A. Pour vérifier si child est une partie du corps.
    • B. Pour vérifier si child est un accessoire (chapeau, lunettes, etc.).
    • C. Pour changer la taille du joueur.
    • D. Pour supprimer l’accessoire.
  1. Que se passe-t-il si un joueur touche la pièce Part ?
    • A. Le joueur disparaît complètement.
    • B. Le joueur et ses accessoires deviennent presque invisibles (80% de transparence).
    • C. Le joueur saute plus haut.
    • D. Le joueur change de taille.
  1. Pourquoi le script utilise MeshPart et pas Part ?
    • A. Parce que Part n’existe pas en Lua.
    • B. Parce que les modèles de joueurs modernes (R15) utilisent des MeshPart pour les parties du corps.
    • C. Parce que MeshPart est plus rapide.
    • D. Parce que c’est une erreur dans le script.
  1. Si on veut rendre le joueur complètement invisible, que doit-on modifier ?
    • A. Remplacer 0.8 par 1.
    • B. Remplacer 0.8 par 0.
    • C. Supprimer la ligne descendant.Transparency = 0.8.
    • D. Ajouter child:Destroy().
  1. Que faut-il ajouter pour que les parties classiques (Part) deviennent aussi invisibles ?
    • A. Rien, c’est déjà géré.
    • B. Ajouter elseif child:IsA("Part") then child.Transparency = 0.8 end.
    • C. Ajouter child:Destroy().
    • D. Changer MeshPart en BasePart.

    Exercices pratiques

    1. Rendre le joueur complètement invisible

    Modifie le script pour que le joueur devienne 100% invisible (au lieu de 80%).

    Solution :
    Remplace 0.8 par 1 dans toutes les lignes Transparency.

    luaCopier

    descendant.Transparency = 1
    child.Transparency = 1

    2. Ajouter la gestion des Part classiques (pour R6)

    Modifie le script pour qu’il rende aussi les parties classiques (Part) invisibles.

    Solution :
    Ajoute une condition pour les Part :

    luaCopier

    elseif child:IsA("Part") then
        child.Transparency = 0.8
    end

    3. Rendre seulement les accessoires invisibles (pas le corps)

    Modifie le script pour que seuls les accessoires deviennent invisibles, mais pas le corps du joueur.

    Solution :
    Supprime la partie qui gère les MeshPart :

    luaCopier

    for _, child in pairs(character:GetChildren()) do
        if child:IsA("Accessory") then
            for _, descendant in pairs(child:GetDescendants()) do
                if descendant:IsA("BasePart") or descendant:IsA("Decal") then
                    descendant.Transparency = 0.8
                end
            end
        end
    end

    4. Ajouter un effet temporaire (invisibilité pendant 5 secondes)

    Modifie le script pour que le joueur redevienne visible après 5 secondes.

    Indice :
    Utilise task.wait(5) et sauvegarde les objets modifiés dans une table.
    Solution :

    luaCopier

    heightScale.Touched:Connect(function(hit)
        local character = hit:FindFirstAncestorOfClass("Model")
        if not character then return end
    
        local transparentObjects = {} -- Tableau pour stocker les objets modifiés
    
        for _, child in pairs(character:GetChildren()) do
            if child:IsA("Accessory") then
                for _, descendant in pairs(child:GetDescendants()) do
                    if descendant:IsA("BasePart") or descendant:IsA("Decal") then
                        table.insert(transparentObjects, descendant) -- Sauvegarde l'objet
                        descendant.Transparency = 0.8
                    end
                end
            elseif child:IsA("MeshPart") then
                table.insert(transparentObjects, child) -- Sauvegarde l'objet
                child.Transparency = 0.8
            end
        end
    
        -- Attend 5 secondes
        task.wait(5)
    
        -- Rétablit la transparence normale
        for _, obj in pairs(transparentObjects) do
            obj.Transparency = 0
        end
    end)

    Si tu veux tester ces modifications ou si tu as d’autres questions, n’hésite pas !