Need help with functions

I just started scripting not even a day ago and I need a little help with efficiency. I couldn’t fit the whole code in but all I would like to know is if there is a faster way to call several functions, so when I’m making this vanishing stair case I don’t have to write out a new function every single time. Any help would be much appreciated.

  1. You can copy your code, paste it into your forum post, and surround it with three backticks

    ```
    like this
    ```

    and it will render

    like this
    
  2. Yep! Welcome to the world of functions.

    As a first step, you can factor out the duplicated code into one function and just call it three times:

    local step1 = game.Workspace.step1
    local step2 = game.Workspace.step2
    local step3 = game.Worksapce.step3
    
    local function DoSomething(part) -- we can have the function take in an argument
        wait(0.1)
        part.CanCollide = false -- and we use "part" instead of using a variable like "step1" direcly
        part.Transparency = 1
    
        wait(1)
        part.CanCollide = true
        part.Transparency = 0
    end
    
    DoSomething(step1)
    DoSomething(step2)
    DoSomething(step3)
    

Thanks a lot, on line 5 for DoSomething, if I was making it so when you touch it it activates would I do Touch:Connect?

Yes, but there’s some nuance.

step1.Touched:Connect(DoSomething)

^ That wouldn’t work how you want, since Touched would call DoSomething with the part that touched step1. not step1 itself.

One way to do it would be to have Touched call a anonymous function whose only purpose is to call DoSomething with the right argument:

-- note that you don't actually need to include "partThatTouchedStep1", I
-- just included it for example's sake
step1.Touched:Connect(function(partThatTouchedStep1)
    DoSomething(step1)
end)

Kind of confused

local step1 = game.Workspace.step1
local step2 = game.Workspace.step2 --creates the variable
local step3 = game.Workspace.step3

local function Touch:Connect(step1,step2,step3)
	Touch:Connect(step1)
	Touch:Connect(step2)
	Touch:Connect(step3)
	wait(0.1)
	part.CanCollide = false 
	part.Transparency = 1
	
	wait(1)
	part.CanCollide = true
	part.Transparency = 0
end
	
step1.Touched:Connect(walk1)
step2.Touched:Connect(walk2) -- calls the function
step3.Touched:Connect(walk3)

Not quite.

local step1 = game.Workspace.step1
local step2 = game.Workspace.step2
local step3 = game.Worksapce.step3

local function DoSomething(part) -- we can have the function take in an argument
    wait(0.1)
    part.CanCollide = false -- and we use "part" instead of using a variable like "step1" direcly
    part.Transparency = 1

    wait(1)
    part.CanCollide = true
    part.Transparency = 0
end

step1.Touched:Connect(function() DoSomething(step1) end)
step1.Touched:Connect(function() DoSomething(step2) end)
step1.Touched:Connect(function() DoSomething(step3) end)

Or, if you want to be extra lazy, you could connect the Touched event in a separate function as well.

Hopefully my super long argument names help you understand what’s going on :slight_smile: :

local step1 = game.Workspace.step1
local step2 = game.Workspace.step2
local step3 = game.Worksapce.step3

local function DoSomething(partThatWillDoSomething)
    wait(0.1)
    partThatWillDoSomething.CanCollide = false
    partThatWillDoSomething.Transparency = 1
    
    wait(1)
    partThatWillDoSomething.CanCollide = true
    partThatWillDoSomething.Transparency = 0
end

local function SetupTouchedToDoSomethingFor(partThatWillBeTouched)
    partThatWillBeTouched.Touched:Connect(function()
    	DoSomething(partThatWillBeTouched)
    end)
end

SetupTouchedToDoSomethingFor(step1)
SetupTouchedToDoSomethingFor(step2)
SetupTouchedToDoSomethingFor(step3)