Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How to make player walk slow when he is standing on a part?

If you go in the mud your character's walk speed will change to 10 and when you get out of the mud it will go back to 16. How do you check if the player has left the mud?

script.Parent.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid ~= nil then
		humanoid.WalkSpeed= 10
	end
end)

1 comment

0

soul sand lol

4 answers

Try using the TouchEnded RBXScriptSignal connected to a function. It will fire whenever the touch has ended.

script.Parent.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")

	if humanoid then
		humanoid.WalkSpeed = 10
	end
end)

script.Parent.TouchEnded:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")

	if humanoid then
		humanoid.WalkSpeed = 16
	end
end)

Use a touched ended event

script.Parent.Touched:Connect(function(hit)
				local Humanoid = hit.Parent:FindFirstChild("Humanoid")
				if (Humanoid ~= nil) then
					Humanoid.WalkSpeed = 10
					
					script.Parent.TouchedEnded:Connect(function(hit)
				     local Humanoid = hit.Parent:FindFirstChild("Humanoid")
				    if (Humanoid ~= nil) then
				 	Humanoid.WalkSpeed = 16
				end
			end)

sorry for lack of elaboration

If you use touch ended, it might be funky and your speed may flicker (and the player could just jump). Another way to do this is to check if a player is inside of a certain area. I randomly found this guide about this on script helpers here. Personally I haven't read too much of it, but it might help.

Edit: for an unrotated part, it's easy to tell if a player is in it. Assume p1 and p2 are two oppisite corners of the affected area.

lp = Vector3.new(math.min(p1.x, p2.x), math.min(p1.y, p2.y), math.min(p1.z, p2.z))
up = Vector3.new(math.max(p1.x, p2.x), math.max(p1.y, p2.y), math.max(p1.z, p2.z))

local function checkifinarea(point)
	if (point.x>=lp.x and point.x<=mp.x) and (point.y>=lp.y and point.y<=mp.y) and (point.z>=lp.z and point.z<=mp.z) then
	return true
else
	return false
	end
end

This discussion is preserved as it was. New answers, comments, and votes are closed.