
Ce script est attaché à un Part (bloc) et détecte quand un joueur le touche, via l’événement Touched.
Il vérifie que c’est bien un personnage avec un Humanoid, et bloque les déclenchements répétés grâce à un système de cooldown (table cooldowns).
Si le joueur n’a pas encore été rétréci/agrandi, le script sauvegarde sa taille actuelle dans un dossier Scale, puis applique la taille SCALEMAX (0.3) à sa hauteur, largeur, profondeur et tête.
Si le joueur a déjà été modifié (le dossier Scale existe), le script lui redonne sa taille d’origine et supprime le dossier.
Autrement dit : c’est un bloc « grandir/rétrécir » qui bascule (toggle) la taille du joueur à chaque contact, avec une seconde d’attente avant de pouvoir réutiliser le bloc.
QCM : Testez votre compréhension !
1. Que fait l’événement Touched dans ce script ?
A. Il vérifie si le joueur a cliqué sur le bloc
B. Il détecte quand quelque chose touche la Part
C. Il compte le nombre de joueurs dans le jeu
D. Il détruit le bloc
2. À quoi sert la variable COOLDOWN ?
A. À changer la couleur du bloc
B. À définir la taille maximale du joueur
C. À empêcher de réutiliser le bloc trop vite
D. À supprimer le personnage
3. Que se passe-t-il si le joueur touche le bloc une deuxième fois (après le cooldown) ?
A. Rien, ça ne marche qu’une fois
B. Le joueur reprend sa taille normale
C. Le joueur devient minuscule
D. Le jeu plante
4. À quoi sert le dossier (IntValue) nommé "Scale" ?
A. À afficher un message au joueur
B. À mémoriser la taille d’origine du joueur
C. À compter le temps de cooldown
D. À stocker le nom du joueur
5. Pourquoi utilise-t-on une table cooldowns avec le character comme clé ?
A. Pour donner un nom à chaque joueur
B. Pour savoir si CE joueur précis est en cooldown
C. Pour compter les points de chaque joueur
D. Pour changer la vitesse du joueur
local part = script.Parent
local SCALEMAX = 0.3
local COOLDOWN = 1 -- secondes avant de pouvoir re-déclencher
local cooldowns = {} -- [character] = true pendant le cooldown
part.Touched:Connect(function(plr)
local character = plr.Parent
local humanoid = character and character:FindFirstChild("Humanoid")
if not humanoid then return end
if cooldowns[character] then return end
cooldowns[character] = true
local existingFolder = humanoid:FindFirstChild("Scale")
if existingFolder then
humanoid.BodyHeightScale.Value = existingFolder.Value
humanoid.BodyWidthScale.Value = existingFolder.Value
humanoid.BodyDepthScale.Value = existingFolder.Value
humanoid.HeadScale.Value = existingFolder.Value
existingFolder:Destroy()
else
local folder = Instance.new("IntValue")
folder.Name = "Scale"
folder.Parent = humanoid
folder.Value = humanoid.BodyHeightScale.Value
humanoid.BodyHeightScale.Value = SCALEMAX
humanoid.BodyWidthScale.Value = SCALEMAX
humanoid.BodyDepthScale.Value = SCALEMAX
humanoid.HeadScale.Value = SCALEMAX
end
task.wait(COOLDOWN)
cooldowns[character] = nil
end)
