Lua Scripting Starter Guide
Author: @DarkSinisterPVP
Helper(s): @Supersaiyan122
Author’s Note
Click to open the letter
Picking up programming and learning it for the first time works just like any other hobby–art, music, sports, photography, etc.–although, it may be difficult to know where to start as a beginner, especially if you’ve never had experience with it up until now. When I was younger, it was very difficult for me to get into programming as tutorials for a younger, completely unexperienced audience was rare. Although there was plenty of content available, I still had a hard time understanding the material or just got lost in the sea of information that was given to me. There are still plenty of places on either Youtube or other parts of the internet where beginners can learn, but I’ve specifically compiled this list so that you have a neat, simple page you can refer to if you feel lost, or don’t know where to go after searching for tutorials.
Becoming an experienced programmer from scratch will not be easy, it will take a lot of effort and more importantly time to become an expert. I say this because many developers I’ve personally known, whether rookies or professionals, tend to bail halfway through their project or goal. Do not lose hope when things don’t come as quickly as you expected, patience is crucial. What sets poor and excellent students isn’t necessarily intelligence, but their willingness to put in work and always seeking new ways to become better at what they do.
Think of this article as a legend for Lua, similar to the page in a large book that highlight specific terms or character in the book that the reader might not recognize. When you finish this guide, your ability to code things will be limited, but you should have a much easier time understanding tutorials on more advanced topics. Ultimately, I hope this article can help you get started, or at least guide you through your journey through programming.
P.S. I’ve tried to make this tutorial as kid-friendly as possible, if it is still difficult to read or understand, please DM me on any platform and I’ll try my best fix it. Specific examples are appreciated.
The Basics of Roblox Lua
Introduction
Chances are, if you’ve ever played a game, you’ve wondered how it was made. How does a sword go from unequipped to swinging in just a matter of seconds? Why? How is this app able to stream the movies I select? How is the website we’re currently on even able to operate?
The answer is simple, code.
Computer programming is an essential part of modern life, as it determines and allows for many technologies we use on a daily basis to operate. However, all code is not written in the same way, rather, there are distinct languages, or ways of writing code. In fact, you might already be familiar with the names of various programming languages, including but not limited to JavaScript or Python.
In this tutorial, we’ll be covering Lua, the official language of Roblox which can be used to create a variety of different games for users to play.
Format
In this tutorial, we’ll be using a specific format to write, input, and receive the result of our script. To use a format identical to mine, click on View in the upper left side of your screen, then make sure you have selected and have the following settings:
Properties, Explorer, Command Bar, and Output.
Your screen should look something similar to this
Creating a Script
Scripts can be inserted almost everywhere, for the sake of keeping this tutorial short, head over to Model on the top panel and browse to the far left and click on Script, which will generate a script that we can use for our tutorial.
Print is a built-in function which prints out whatever statement you decide to give it. This can be either number or strings, which we’ll cover in this section. You’ll notice that once you launch a script, there is already a print function automatically typed out for you. This code always comes with your scripts, so we’ll erase it to continue with the next step.
Strings
Type out print in all lowercase letters. If print is typed incorrectly or typed with any capitals, the program will not recognize the command and will not run it. Add a pair of parenthesis after, studio should automatically add the second one. Make sure there is no space in between print and the parenthesis otherwise Lua will not be able to read it.
print()
Next, we need to add a string in-between the parenthesis so that we don’t just print empty space. A string is any character or words inside of a pair of quotes, such as “Hello World!” For our tutorial, we’ll be adding the string “YellowNoobs!” for the program to print.
print("YellowNoobs!")
You may replace "YellowNoobs" with any other text you wish as long as it is in-between the parenthesis (""), the end result should look something like this,
If you want to include quotation marks in your quote, you can also use a pair of single quotes (’’) and put the double parenthesis, or vice-versa for single quotes to be printed.
Numbers and Arithmetic Operators
Print also works for numbers and equations, which it’ll automatically simplify in the output. But before we write out our problem, we need to find the symbols needed to get the right answer.
Arithmetic operators are basically all the tools we use in programming to indicate a relationship between numbers. This sounds complicated, but it’s just what we call the symbols we use to add, subtract, multiply, and divide numbers.
Here are the Arithmetic Operators used in Lua:
Addition: +
Subtraction: -
Multiplication: *
Division: /
Exponents: ^
Modulus (Remainder After Dividing a Number): %
Now, we’ll write our equation in-between the parenthesis, and paste it into the command bar once we’re ready to get the output. Feel free to mess around with the operators to get the hang of it.
print(1 + 5 * 10^2 / 5 - 20)
If we put our code into the command bar we’ll get 81 instead. This is the answer to the equation, and Lua does this because it’s a simplified version, or answer to the problem we originally printed. An important thing to keep in mind is that Lua completes the math using the Order of Operations, meaning it starts with exponents, then division and multiplication, and finally addition and subtraction.
Take this piece of code for example,
print(1 + 5 * 2)
While you may be tempted to say the answer is 12, since you add 1 + 5, getting 6 and multiplying it by 2, this is wrong. Instead, you multiply 5 and 2 first, then add 1, getting 11. This is a rule of both math and programming, so practice the concept until you can avoid printing the wrong number.
Concatenation
In order to combine two or more separate values together, you can use concatenation in the print function. We’ll still use the same format, but will add two periods or dots after each string. Do not place this inside of the string, otherwise Lua will interpret it as part of the string and produce an error.
print("It is around".. " 7:00 PM")
If we paste this into the command bar, the output will show us a full statement as if it was a single string, meaning the concatenation was successful.
Variables
Now that you’ve learned how to make a script, you’ll learn what variables are and how to make your own. Variables are considered vital because they save a lot of time and save you time and make your scripts simpler to review. They can be booleans, numbers, strings, or practically anything you want to assign a name to.
If you’re struggling to understand the concept of a variable, you can compare it to a nickname you might give someone who’s name may be too tedious to pronounce. Although it is not their birthname, calling them by their nickname will still get their attention as they’ve been given and called by it before.
Below, I’ve given an example of a variable. The term “variable” will be used interchangeably with the string “YellowNoobs!” whenever we use it in the script. If we put the variable inside of the print command, it will print the text assigned to it. Since the variable is identical to the string we assigned it, we do not need any quotes around the variable name. If you put quotes around a variable name, Lua will interpret it as a string, and print the actual name rather than the value.
variable = "YellowNoobs!"
print(variable)
If we copy and paste the code into the input, the output will print our statement.
Global and Local Variables
It is necessary that you define your variables before using them in your code. Since Lua reads code from top to bottom, it will not know what the variable stands for when it executes the print function. If we paste the code into our command bar, we’ll get the output nil, which means nothing or no data.
Whenever we define the variable, its scope covers all of the code below in the script. Variable scope is just another word for when the variable can be accessed in your script.
There are two types of variables which you’ll hear about, local and global. The variables we’ve made in this tutorial so far have been global variables, which means they can be accessed in all code below inside the script. Local variables will be covered later in this tutorial, but in simplest terms, they have a much more limited scope.
Naming Variables
Variables do not only have to be named “variable” when assigned to a given piece of code. In fact, your variables have to be different names in order for the program to recognize which variable you want it to use in the script.
While you can almost freely name your variables, there are a few restrictions that exist inside Lua.
You can use:
- Alphabet Letters
- Numbers
- Underscores
You can not use:
- Capital letters as the first letter of the variable (Not required, but common practice)
- Numbers as the first letter of the variable
- Spaces
- Lua Reserved Keywords
Keyword List
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
Comments
Comments are a simple green text that organize and give context to your lines of code, which can be a useful tool for yourself or others if you plan on sharing it.
Creating comments is extremely easy, add - - and then your text after you are finished. It should appear something like this.
If you want your comment to cover more than one line, insert brackets, with your text inside.
Any text attached to the comment will not be executed by the program, and will only be seen by the reader. This green text is helpful in case you want to find a specific piece of code in your script. Comments are also crucial if you plan on sharing your scripts and want the reader to understand what certain commands do. Besides context, you can use comments to credit yourself for your script, or write out directions that the user who uses your script might want to see.
Properties
If you want to change the settings (such as the transparency, or invisibility) of an object in the workspace, you have to write down the specifics before Lua knows what you want it to do.
So, if we want to change the transparency of the baseplate, we first need to define that the baseplate is inside game.Workspace, with game being the game we’re working on and workspace being the place where baseplate and the rest of our parts are stored. Then, we write the object we’ll be changing (baseplate) and the setting that we want to change (its transparency), and then assign a value to it. If we want it to be fully invisible, we’ll set the value to one, lowering this amount will make it so that it’s semi-transparent.
game.WorkSpace.Baseplate.Transparency = 1
In the end, this should make the baseplate completely invisible if we run the code or play the game. Keep in mind that we can change the properties of object in Studio as long as you define it correctly in the code.
Functions
When you’re writing a sequence of code that needs to be repeated, it may be a little tedious and also messy to write it out several times. Functions are a tool in Lua that we can use to put lines of different code in, which can be repeated and manipulated a lot easier by us. The functions in this segment are not to be confused with the built-in functions of Lua, such as print.
Creating Functions
To define a function, we need to write function and then assign it a name. Then, add a pair of parenthesis after your function name without any spacing in-between, and press enter. I’ll be naming my function printStuff, but you can name yours differently.
function printStuff()
end
Now, we need to write our code for our function to actually execute it. You’ll notice that when you press enter after writing your function, you’ll automatically get end. This statement is here so that you can end, or close off your function, otherwise Lua would get an error.
I want to print several strings, so I’ll insert the several sequences of code inside my function.
function printStuff()
print("Hello World!")
print("It's a beautiful, sunny day outside.")
print("I like my coffee black, no sugar or cream.")
end
We now have our function, however, nothing will be happen since we haven’t written the command to execute it. We need to type the function name on the next line, and Lua will print our strings.
function printStuff()
print("Hello World!")
print("It's a beautiful, sunny day outside.")
print("I like my coffee black, no sugar or cream.")
end
printStuff()
Now, Lua will execute our code. If we paste all of the content into the command bar, we’ll see that our function is successful. It’s important to note that just like variables, functions need to defined before we actually execute them in our code, otherwise we’ll just get nil.
Local Variables and Code Blocks
When we covered local variables previously in our tutorial, I mentioned that the scope of it was much more limited. Whereas global variables can be accessed anywhere in our script after being defined, local variables are limited to a block.
So what is a code block? An example is basically the indented sequence of code that we see in our function. I’ll attach comments to the parts that are a part of the block of code for a visual demonstration.
function printStuff()
local myVariable = "Hello World!"--This is part of the code block.
print(myVariable)--This is also part of the code block.
end
print(myVariable)
You can also tell if something is a block by the small arrow that appears to the left. If you look closely, the arrow facing down next to function is indicating that the block is being shown, and when it is facing up, it means it is closed.
If we try to print the local variable outside the block, we’ll get nil since the variable can’t be accessed.
Arguments and Parameters
A handy feature of functions is the ability to manipulate the variables with ease. You might’ve already noticed the pair of parenthesis when we define the function, and the two other parenthesis when we execute it. These are the spaces where we put our arguments and parameters.
Every time we execute a function, we might want to change certain parts of the code each time. Parameters are used to tell Lua which variables (and thus any information) inside the function you want to change. They are established when we first define our function, and are placed in-between the first pair of parenthesis on the same line. Make sure to not define the variable you’ll be changing inside of your function, otherwise the parameter will not work.
function printStuff(myString)
print(myString)
end
Now that we’ve defined the parameter, we need to write an argument for the function to be properly executed. An argument is the value we assign the code when executing it. It comes inside our next pair of parenthesis, and can be changed every time we execute the function separately. We’ll print a string and a number, and the program should treat the argument as the variable in the function.
function printStuff(myString)
print(myString)
end
printStuff("Hello World!")
printStuff(27)
Now if we put it in the output, the two values should be successfully printed.
Arguments and parameters aren’t just limited to a single pair, in fact there can be as many as you want. In order to add another pair, separate each parameter and argument by a comma with the next one you want in your function.
function printStuff(weather, time)
print(weather)
print(time)
end
printStuff("It is cold and snowy", "The time is 6:30 AM")
Now if we paste it into our command bar, the output should print both statements in the order we gave them. It is important that you put the arguments and parameters in the same order or you will assign the wrong value to the variable. Also, you always have to define your parameters when you execute your function, otherwise Lua will not know what to assign to the variables.
Local Scripts
You might’ve already noticed that below the option to create a script, there is something called a local script. This tutorial won’t go too in-depth about them, but offer a broad summary about its purpose.
Local scripts are scripts that only affect the user’s client rather than the server. A user’s client is basically what they see, rather than the whole server. So whereas you might be seeing something, your friend playing the same game as you might see something completely different. In comparison, scripts that affect the server are seen by everyone, and not just the individual’s client.
The concept is a bit difficult to describe by text, and I still can’t do it justice by talking about it in depth, so I urge you to look at this video by TheDevKing to get a better idea of what local scripts are capable of.
Booleans
You might’ve heard this word in math class and it is related. Booleans in scripting are the conditions true or false.
When comparing values you’ll get a Boolean as well, although you can simply write true or false too.
Relational Operators
Relational operators are the operators used to compare values with one another.
They include:
- Equal to, not to be confused with equal which simply assigns something rather than comparing two values: ==
- Not equal to, which is true if the values are not equal: ~=
- Greater than: >
- Less than: <
- Greater than or equal to: >=
- Less than or equal to: <=
Now, let’s take a look at some numbers and see if they represent a true or false boolean
4 > 4
2 == 2
8 < 2
The first one is false, since the value can only be greater than, and not equal to the other. The next one is true as the values are equal to one another. The last is clearly false, since 8 is not less than the number 2.
If Statements
If statements make it so that specific commands only happen if the condition is met, it will execute the code.
For example, if 5 > 1 the Output will print “Congratulations” since 5 > 1 is true. If the script said 5 < 1 then the script will not print “Congratulations” in Output.
if 5 > 1 then
print("Congratulations")
end
This is equivalent to saying true instead and will still print our string.
if true then
print("Congratulations")
end
Loops
Sometimes, our code needs to be repeated in order to produce an outcome we’re looking for. Loops are statements that allow us to repeat code multiple times. They come in several different forms, which we’ll cover in this section of the tutorial.
While Loop
While loops repeat sequences of code while the statement is true. However, when the condition is false, it will not execute the code block. For example, while a variable is less than a certain value, it will continue to print out a string we decide to give it. This is just one of countless things you can do with a while loop, so feel free to get creative if you’re feeling ambitious.
For our while loop, we’ll assign a number to our variable, x. Afterwards, we go on the next line and write while. This helps Lua understand that it is a while loop, so that when the condition is true, it’ll execute the code block. The do you see after our boolean is simply telling Lua to execute the block of code that is part of the loop when the condition is true.
x = 10
while x < 100 do
print("The value is less than 100")
x = x + 10
end
print("The value is not less than 100")
In this code, I defined my variable as 10 and made it so that the while loop would continue to run until it was no longer less than a 100. Each time it runs the code, I made it so that it would add 10 to the variable, meaning that once it ran several times, it would no longer execute the code since the condition is false.
Notice the string being printed after the loop. This is not executed until the loop is finished, so not attaching it to the loop can be used to tell us when the loop is finished.
For Loop
For loops are able to loop as many times as the user wants. First, we define a variable for the loop, and assign it to a starting and ending value. The loop will continue to repeat until the starting value reaches the end value. While the amount the starting value increases is by 1, you can change it by adding a comma after the end value. Below, is an example of a for loop.
for x = 1,25,5 do
print(x)
end
Our loop will now print 1, 6, 11, 16 all the way until 21 where it will stop since it can not go past 25.
Here is the format for the for loop.
for (VariableName) = (Start Value), (End Value), (Number value increases by)
(Statements)
end
Repeat/Until Loop
A repeat loop repeats the statements assigned to it until a following condition is true.
x = 10
repeat
print("The value is less than 100")
x = x + 10
until(x > 100)
print("The value is greater than 100")
Unlike a while loop, it runs the statements first before checking if the condition is true.
Break
Writing break at the end of a loop will end the loop if a condition is true. In the example below, break is used to break out of an infinite loop that otherwise keeps running because it is always true.
x = 10
while true do
print("The value is less than 100")
x = x + 10
if x == 100 then
break
end
end
print("The value is not less than 100")
This could also work if instead of true we wrote while x < 200 do. The result would be that the loop would end early, ending when x reaches 100 rather than 200.
You may also hear the term nested loop, which is used to describe a loop with another loop inside of it.
Tables
Tables are used for storing large sets of data that you might use while creating your script. With tables, you can access and manipulate the data easy, which can come in handy later on. In this section, you’ll be learning about just a single type of tables, arrays.
Arrays
Arrays are simply a list of values compiled in a table. This can include strings, numbers, booleans, functions–pretty much anything that can be used outside the script. To make an array, start by assigning a name of your own to the table.
randomArray
After this first step, you need to assign the data to the table. Assign the table to the data by adding an “=” in between, and write a pair of curly brackets (the second bracket will be automatically typed for you).
randomArray = {}
Next, you can place all of your values inside of the array. For this tutorial, we’ll place a few strings and numbers together, but you can add more variety to your table if you’re following along. Make sure to separate each value by adding commas in-between them.
randomArray = {"Hello World", 70, "The weather outside is warm", 23, 4}
If we want to print specific parts of our array, we can use the index to get what we want. Each value in our array has an index, or number assigned to it. The first value is 1, second value is 2, third value is 3, etc. To print a specific part of our array, we put our table name in the print function, then follow it up with the index of the value, in-between brackets ([]).
randomArray = {"Hello World", 70, "The weather outside is warm", 23, 4}
print(randomArray[1])
In the end, this should print out our first string, “Hello World” in the output.
Q&A
Where Else Can I Learn About Scripting?
Websites
Khan Academy (JavaScript, not Lua)
Stack Overflow
Roblox Developer Hub
Lua.org
Google
Youtubers
AlvinBlox
TheDevKing
Roblox (Scripting Playlist)
PeasFactory
SkeleDotLua
There are many other places to learn, but the sources listed above have helped me with learning or adapting to Lua.
What is the Difference Between Input and Output?
Input is the code given to the engine, while output is the received/finished command. For example, print(“YellowNoobs!”) is a input while YellowNoobs is the output.
How do I Stop Exploiters?
Stopping exploiters isn’t a beginner issue, it is a little more advanced than what we’ve discussed so far. Throughout your scripting career, you’ll realize that the main reason for exploits is due to poor and weak scripts that hackers are able to bypass.
One feature that Roblox automatically now applies to all games is FilteringEnabled, which prevents hackers from messing with the server itself. To learn more about how it works, you can watch the following video by AlvinBlox,
Why does Studio Automatically Indent for me?
Technically, indenting is not necessary, but it is extremely helpful and keeps your code organized. For example, through indents, you can see where your code blocks are. Not only that, but it looks much cleaner. Writing without proper indentation would give both you and the programmers reviewing your code a headache to read.
How do I become better?
Practice, practice makes perfect, no exceptions. Learning to program unique things by yourself is always something you should strive to achieve as a developer.
Conclusion
That’s it, the basic tutorial is now finally finished! Hopefully, now you’ll have a far easier time being able to understand new concepts and can use this as a reference whenever you feel stuck.
If you have any other questions or feedback, please reply in the comments below, good luck!