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

how to create a triple script?

How to create:

A script that creates a script with a script inside haha

2 answers

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.

1 comment

0

alr ty!

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

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