Catégories
Jeu vidéo ROBLOX

Courir plus vite ou sauter plus hait en touchant un part

Courir plus vite

Ce script surveille une part (un bloc) dans le jeu, et attend qu’un joueur la touche.

Quand un joueur la touche, le script vérifie qu’il s’agit bien d’un personnage (avec un Humanoid, la partie du jeu qui gère la santé, les déplacements, etc.).

Si c’est bien un joueur, sa vitesse de déplacement (WalkSpeed) passe à 50; il devient beaucoup plus rapide (par défaut, c’est 16).

QCM — vérifie ta compréhension

1. Que fait part.Touched:Connect(...) ?
A) Il détruit la part
B) Il détecte quand quelque chose touche la part
C) Il déplace la part
D) Il change la couleur de la part

2. Pourquoi le script vérifie if not humanoid then return end ?
A) Pour vérifier que la part existe
B) Pour arrêter le script si ce qui a touché n’est pas un personnage (par exemple un objet sans Humanoid)
C) Pour ralentir le joueur
D) Pour supprimer le Humanoid

3. Que représente Humanoid dans un personnage Roblox ?
A) Le nom du joueur
B) La couleur de la peau
C) La partie qui gère la santé, les déplacements, etc.
D) Un accessoire du personnage

4. Que se passe-t-il quand humanoid.WalkSpeed = 50 s’exécute ?
A) Le joueur devient invisible
B) Le joueur saute plus haut
C) Le joueur se déplace plus vite
D) Le joueur perd de la vie

5. Si un objet SANS Humanoid (comme une simple balle) touche la part, que se passe-t-il ?
A) Le script plante avec une erreur
B) Rien, le script s’arrête grâce au return
C) La balle devient rapide
D) Le jeu redémarre

local part = script.Parent

part.Touched:Connect(function(plr)
	local character = plr.Parent
	local humanoid = character and character:FindFirstChild("Humanoid")
	if not humanoid  then return end
	
	humanoid.WalkSpeed = 50
		
end)

Bascule courir plus vite / normalement

Quand un joueur touche la part, le script regarde s’il a déjà une vitesse « boostée » (mémorisée dans un petit objet nommé « Speed ») : si oui, il lui rend sa vitesse normale, sinon il sauvegarde sa vitesse actuelle et le rend très rapide (50).

Un système de « cooldown » (temps d’attente) empêche le joueur de retoucher la part plusieurs fois par seconde et de faire buguer le changement de vitesse.

Ainsi, la part fonctionne comme un interrupteur : un coup pour accélérer, un coup pour revenir à la normale, avec une petite pause obligatoire entre deux touches.

QCM — vérifie ta compréhension

1. À quoi sert la variable cooldowns ?
A) À compter combien de joueurs ont touché la part
B) À empêcher un joueur de redéclencher l’effet plusieurs fois trop vite
C) À stocker la couleur de la part
D) À sauvegarder le nom du joueur

2. Que fait l’objet IntValue nommé « Speed » ?
A) Il affiche un message au joueur
B) Il mémorise la vitesse de marche du joueur avant le boost, pour pouvoir la restaurer plus tard
C) Il détruit le personnage
D) Il change la couleur de la part

3. Que se passe-t-il si le joueur touche la part une seconde fois (sans cooldown actif) ?
A) Sa vitesse redevient normale, car le dossier « Speed » existe déjà
B) Rien ne se passe
C) Sa vitesse augmente encore plus
D) Le jeu plante

4. Pourquoi utilise-t-on task.wait(COOLDOWN) à la fin de la fonction ?
A) Pour ralentir tous les joueurs du jeu
B) Pour attendre 1 seconde avant de permettre au joueur de redéclencher l’effet
C) Pour détruire la part après 1 seconde
D) Pour attendre que le joueur meure

5. Si un joueur touche la part pendant que son cooldown est actif, que fait le script ?
A) Il double sa vitesse
B) Il arrête la fonction immédiatement avec return, sans rien changer
C) Il redémarre le cooldown
D) Il supprime le dossier « Speed »

local part = script.Parent

local SPEEDMAX = 50

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("Speed")
	
	if existingFolder then
		humanoid.WalkSpeed = existingFolder.Value
		existingFolder:Destroy()
	else
		local folder = Instance.new("IntValue")
		folder.Name = "Speed"
		folder.Parent = humanoid
		folder.Value = humanoid.WalkSpeed
		humanoid.WalkSpeed = SPEEDMAX
	end
	
	task.wait(COOLDOWN)
	cooldowns[character] = nil
	
end)

Essaye le même système pour faire sauter plus haut :

	humanoid.JumpHeight = 20
local part = script.Parent

local SCALEMAX = 4

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)

Traverser le plus vite possible autrement ..