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

how to create a triple script?

Asked by 1 year ago
How to create:

A script that creates a script with a script inside haha

2 answers

Log in to vote
0
Answered by
A_Mp5 222 Moderation Voter
1 year ago

You don't. Not possible unless there already is the script, stored somewhere and disabled, in that case, it can be cloned, parented, and reenabled but otherwise you can't create a new script or set its source during runtime.

0
alr ty! sixfirez 33 — 1y
Ad
Log in to vote
0
Answered by 1 year ago
Edited 1 year ago

Do you mean like making another script run in a script? Well, that's possible, through coroutines! Coroutines create another thread inside a script. Threads are like another scripts running at the same time as the script. For example, you want to print two words (for example, "foo" and "bar") at the same time, but you want to wait 5 seconds before printing "bar" together with "foo", well that is possible through coroutines! To do that, you create two loops: one for "foo" (normal loop) and one for "bar" (coroutine loop). This is how it looks:

local barCoroutine = coroutine.create(function()
    task.wait(5) -- 5 second delay
    while true do -- creates the loop
        print("bar")
        task.wait(1)
    end
end)

coroutine.resume(barCoroutine) --plays the coroutine

while true do
    print("foo")
    task.wait(1)
end

What this script will do is it will print "foo" first, then after 5 seconds, it will start to print "bar" as well. Pretty cool!

There is another way to create and play coroutines without using coroutine.create() and coroutine.resume(). And that is by using coroutine.wrap(). That function creates a new coroutine as a function, so to play that coroutine you must put () at the end of it, like normal functions. So

local barCoroutine = coroutine.create(function()
    task.wait(5)
    while true do
        print("bar")
        task.wait(1)
    end
end)

coroutine.resume(barCoroutine)

and

local barCoroutine = coroutine.wrap(function()
    task.wait(5)
    while true do
        print("bar")
        task.wait(1)
    end
end)

barCoroutine()

is and does the same thing.

More documentation and explanation can be read from the wiki, the DevForum, and some YouTube tutorials.

Coroutines also do the same things as some built-in functions such as task.spawn(), task.defer(), and task.delay(), but coroutines have more accessibility and functions.

-- this coroutine
local barCoroutine = coroutine.create(function()
    task.wait(5)
    while true do
        print("bar")
        task.wait(1)
    end
end)

coroutine.resume(barCoroutine)

-- does the same thing as
task.spawn(function()
    task.wait(5)
    while true do
        print("bar")
        task.wait(1)
    end
end)
-- or
task.delay(5, function()
    while true do
        print("bar")
        task.wait(1)
    end
end

CONCLUSION: The reason why coroutines exist is to make another threads in a script that can be helpful in loops. You cannot have two loops in a script without coroutines because anything in a script that is written after a loop (more specifically while loops) cannot be run because the script cannot leave the loop unless it was broken. Coroutines are also improved and more accessible versions of the task library functions.

-- Script #1

while true do -- loop #1
    print("foo")
    task.wait(1)
end

while true do -- loop #2
    print("bar") -- this won't print because the script is stuck on the first loop. if the first loop breaks, it won't run anymore and move on to the second loop
    task.wait(1)
end

-- Script #2

local barCoroutine = coroutine.create(function()
    task.wait(5)
    while true do -- loop #2
        print("bar") -- this can print the same time as loop #1 because loop #2 was made as a coroutine
        task.wait(1)
    end
end)

coroutine.resume(barCoroutine) --plays the coroutine

while true do -- loop #1
    print("foo") -- this will print the same time as loop #2
    task.wait(1)
end

Answer this question