Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

I can't get this walk speed increase script to work :/..help?

Asked by 5 years ago
game.Workspace.Chant = script.Parent
Chant.Touched:Connect()
local PlayerSpeed = 50

Why won't this work?

0
What is Chant? User#19524 175 — 5y
0
what is everything thebayou 441 — 5y
0
Chant is just the part that has the script in it. And thebayou chill mate I am a beginner xD hawkeye1940 8 — 5y
0
you should watch peaspod he is hotttt INOOBE_YT 387 — 5y
View all comments (2 more)
0
wow greatneil80... your complete lack of support is really not that inspiring :/ hawkeye1940 8 — 5y
0
srry m9 greatneil80 2647 — 5y

2 answers

Log in to vote
1
Answered by
Pojoto 329 Moderation Voter
5 years ago
Edited 5 years ago

Nonono, you're setting two values to each other! Basically you're saying:

5=5
--or--
true = not false

When you create a variable, the first part needs to be the name. The correct way to do this would be:

Chant = scipt.Parent

'Chant' is the name of variable, and you're assigning that variable to the script's parent, which is a part called Chant.

Now the next part...

Chant.Touched:Connect()

When the script sees this it thinks, "When "Chant is touched, do nothing". The problem here is that you aren't telling it what to do and where to do it. Instead, when 'Chant' is touched, you should connect it to a function like this:

Chant.Touched:Connect(function()
    --this will run--
end)

Now whatever is in between the function will run when 'Chant' is touched!

When you use .Touched, the part that touches it is passed as the argument in the parameter of the function. Basically that means you can find out what part touches 'Chant'. By doing this we can check if the part that touched 'Chant' is a humanoid, then if it is, we can change it's speed.

Chant.Touched:Connect(function(otherPart) --Added parameter, can be any name

end)

Now what you put was:

local PlayerSpeed = 50

Of course that didn't do anything! You just created a variable named "PlayerSpeed" and then assigned it 50. You didnt' change anything about the player who touched it. Now that we have access to the thing that touched it though, we can change the player's walkspeed.

Let's say your arm touches the part. We don't want to change your arm's walkspeed right? So we would say:

Chant.Touched:Connect(function(otherPart) 
    local character = otherPart.Parent
    local humanoid = character:FindFirstChild("Humanoid")
end)

This basically says, "If a part touches 'Chant', run this function: the parent of the part that touched it is called character. Let's search the character and see if we can find a "Humanoid". Now we can check if the Humanoid has been found. If it has then we know it's a player and then we can change the player's WalkSpeed.

Chant.Touched:Connect(function(otherPart) 
    local character = otherPart.Parent
    local humanoid = character:FindFirstChild("Humanoid")
    if humanoid then --if humanoid is found then
        humanoid.WalkSpeed = 50 
    end
end)

You can see we checked if humanoid then to see if the part that touched 'Chant' was a human. WalkSpeed is a property of a humanoid, that's how we're able to change it. Now if you test this out it should turn your walkspeed to 50 if you touch it.

It might be confusing at first, but make sure to practice, you'll get better that way. Here's the end product with comments.

local Chant = script.Parent --we set variable named "Chant" to the script's parent

Chant.Touched:Connect(function(otherPart) --when touched by anything, name that other thing 'otherPart', run function
    local character = otherPart.Parent --sets variable to parent of 'otherPart'
    local humanoid = character:FindFirstChild("Humanoid") --Searches for human 
    if humanoid then --if humanoid is found then
        humanoid.WalkSpeed = 50  --change humanoid's walkspeed to 50
    end
end)

It's a little messy, but I hope you got at least something out of it. :)

Ad
Log in to vote
2
Answered by 5 years ago
Edited 5 years ago

If I understand what I think you're trying to do, then...

First of all, when I think you're trying to create a variable by doing game.Workspace.Chant = script.Parent, you should be doing local chant = script.Parent instead.

Next, when you have Chant.Touched:Connect() you are connecting the touched event to no function. You could do this two ways.

The first way is by making a function then connecting the event to the function.

function onTouch()
    -- touch stuff
end

Chant.Touched:Connect(onTouch)

The second way is by connecting the function directly (if that's how you would put it?)

Chant.Touched:Connect(function()
    -- stuff
end)

Now you made a variable for the ideal character speed I assume, so to actually change the speed you have to detect the character when he touches the brick by doing

Chant.Touched:Connect(function(hit)
    if hit.Parent:FindFirstChild('Humanoid') then -- check to see if the parent of whatever touched "Chant" has a humanoid to see if it's a character

    end
end)

Then, if it is a character and has a humanoid, you can set the character's walkspeed in the humanoid.

local Chant = script.Parent
local PlayerSpeed = 50
Chant.Touched:Connect(function(hit)
    if hit.Parent:FindFirstChild('Humanoid') then -- check to see if the parent of whatever touched "Chant" has a humanoid to see if it's a character
        hit.Parent:FindFirstChild('Humanoid').WalkSpeed = PlayerSpeed
    end
end)

So as long as the script is a child of a part, then that script will work.

0
This is confusing :( hawkeye1940 8 — 5y
0
What part of it is confusing? I'm not sure how to make it much simpler but I'd suggest starting with some easier material such as basic variables, but the last block of code posted is what would work. MythicalShade 420 — 5y

Answer this question