[Music] all right guys in this video I'll be teaching you the fundamentals of Roblox scripting if you've never scripted before or are still new to it this is the video for you so to start off we'll insert a script into server script storage so first thing we want to cover is printing now when we open a script we see the infamous Line Print hello world now what does that line of code do to run the code basically what you want to do is go to test and run as you can see it prints hello world to the output window which is this tab right down here so basically print is a function that outputs whatever you place between the brackets to the output window and it can print all kinds of data types a data type is basically a way to classify the different forms in which information can be displayed so you have your primitive data types like numbers or strings strings are basically text like this another data type is Boolean values which are either true or false and there are also more complex data types like instances udum and Vector 3 values which we'll cover in a later video with that out of the way we can move on to properties so properties are things that objects like parts and guis have that can change so like size color position transparency just to name a few and you can find the properties that an object has in the properties window so if I had a part right here I can go down to this properties window and see all the properties it has when I have it selected now to change an object's property we have to locate its position inside the game all things inside Roblox Studio are under what's called game it's considered the parent of everything inside and next down in the hierarchy are these services like workspace and lighting and so on and finally at the bottom of the hierarchy we have the objects that are inside the services so you can think of services as children of game and the Bas plate for example since it's found inside of workspace it is the child of workspace and workspace is the parent of Bas PL now if we want to change the properties of something we'll have to use a script so we'll go back to the script we opened before and the first thing we have to do is we have to do what's called referencing basically what we're doing is we're locating the object whose property we want to change inside the game we're finding its location so we want to do game do workspace the dot indicates that whatever goes after belongs to the term that goes before so we know that workspace belongs to game we do workspace because the part we want to change is found inside of the workspace so we do game. workpace dopart and then since properties belong to the part we add another dot you can see a bunch of the properties that it has so let's say we want to change the transparency if you look in the properties tab transparency is a value that goes between 0o and 1 so when I get closer to one it gets more transparent so since it has a transparency of zero right now we'll increase the transparency to 0.75 so that it's almost completely transparent and the test the code we can go click run you can find it either under the test tab or the script tab so when we click run it'll execute that code as you can see the part is mostly transparent now you can barely see it over here another example I'll show you is the anchored property anchoring apart basically keeps it in its place so if you had anchored it will stay in the air without falling but if it's not anchored it will just fall out of the sky so I'm just going to run it now with it being anchored and you'll see that still floats in the sky anchored takes a Boolean value so in order to change it you do Gameworks space. part. anchored and instead of setting a number you either say that it's true or false true means it is anchored and false means it isn't anchored so if we want it to not be anchored we'll assign a value of false to it so game. workspace part. anchored equals false and when we run the code it stops being anchored and it falls out of the sky with that out of the way we can move on to variables so what are variables variables are just names that hold a value so any kind of data type can be stored with a variable so let me show you how to declare a variable the first thing you want to do is type the keyword local and then your variable name let's say we want to store a name so we can do local name equals scripts basically what we're doing is is we're creating a variable called name so basically this equal sign is assigning a value to name so whatever goes after the equal sign is what name will equal and I put scripts as a string whenever you reference the variable it will give you the value of name so we can print the variable to the output window basically what it'll do is it will print name it'll look back to what values assigned to it it will see that the string scriptx is assigned to it so it'll print scriptx to the output window and it does exactly what what we asked to build off of what you just learned about properties you can assign any object you want to variables so I can do local part equals G.W workpace dopart so what we're doing is we're assigning this part that we have here in workspace to this variable right here so instead of retyping game. workspace dopart every single time we can just do part dot whatever property we want to change so uh part do anchored equals false so instead of retyping game. workspace dopart every single time we can just use the variable name and it'll know that would referencing the part that's inside workspace so when we run it it executes the code correctly and it saves you a bunch of space and it makes your code look way more organized without other way let's move on to functions what are functions functions are blocks of code that are executed when you call it say you had a really long piece of code that you need to use over and over again would you copy and paste the entire thing every time you need to use it no you would make a function and call it by calling I mean you're telling it to run so let's make a function that adds two numbers together so the way you define a function is that you use the keyword local and then type function now you need to create a name for your function so since this function's purpose is to add numbers we'll call it add number after that use a set of brackets and then press enter and notice how it adds the word end at the bottom you need to have that when you're making functions so local function your function name followed by two brackets with the keyword end at the bottom so in between the first line and the bottom line is where the function will be this is the code that will be executed when you call it so let's say we want to add the numbers 3 and 2 which makes five we can store it in a variable and then print it out so we can do local result so we're creating a variable called result and we're assigning it to the sum of 3 + 2 and the last thing we want to do is we want to print the result to the output window now when you want to use the function you need to call it and you call the function by typing the function's name followed by the brackets if we didn't have this line here it wouldn't print anything at all because all you've done is Define the function but by calling it you're executing the code that's inside this block that's in here so we'll run the code and we'll see if it prints out five and it does all right but what if you needed a function that would change the output depending on the situation so if we need to add numbers we could use the function we wrote over here but what happens if we need to add different numbers every single time that's where parameters come in so parameters serve as variable placeholders which get assigned values when the function is called so parameters go in between these brackets over here you can name them anything you want treat them as variables without a value assigned to it so we'll call it num one and num two so there's two parameters separated by a comma so these two parameters will represent the numbers that will add together now when you're calling a function that has parameters you also have to specify arguments arguments are information that you send to the function so in this case we're sending two different numbers we want add together so let's say 5 and four and remember what I said about the parameters being placeholders well when you call the function num one gets assigned whatever value you passed on as the first argument so in this case num one will become five and then num two will become four last thing we want to do we want to modify what the result equals so instead of adding three and two together we want to add num one and num two together so when we call this function and we pass the values of five and four num one equals 5 and then num 2 equals 4 and then the result adds the two numbers together so 5 + 4 equal 9 so let's run it and see if we get N9 and it does and you can change the arguments whenever you want so you can change it to 10 and 7 and you wouldn't have to change the actual function itself you just have to change the ARG arguments so when we run that it'll take 10 and seven it'll add it together and it'll get you 17 great so now we can add any numbers that we want using the same function so what if we want to use the answer instead of just printing it out could we like add add five to the answer so could we do result equals result + 5 we'll run that and we'll see we get an error here because we're trying to add a number with a nil value a nil value just means it has no value so you can't add nothing and five and the reason it's nothing is because result is a local variable so it only exists within the code Block in which it's defined so in this case it only exists within this block of code so when we're trying to access it outside of the block it doesn't work so how do we access values that we produced in functions this is where returning comes into play returning basically sends the information back to where you call it the function so the way we return the result is we use the keyword return and then the value on return so return result now what this does is when you add the two numbers together it'll send the result so 10 + 7 is 17 and it'll send it back to this line over here so what we can do is we can assign a variable to it so we can do local answer equals add numbers 10 and 7 basically when you call it it'll add them together and it will return 17 to this line over here and it will assign the variable answer to 17 so I'll show you as proof let's say we wanted to add five to it so answer equals answer plus five and we'll print answer out here basically what we're doing is we're creating variable called answer and we're setting it to the return value of this function call over here so we'll add 10 + 7 which is 17 so it'll assign 17 to the variable answer and now we're adding five onto answer and setting it back to the same variable which is 22 so this should print 22 oh let's remove the print statement first and it prints 22 now you can even return more than one thing at a time so let's say we want to add the numbers together but we also want to subtract them so we can do local sum equals num1 plus num 2 but then local difference equals num 1 minus num 2 now returning is useful because you can also return one one value so you can do return sum difference separated by a comma basically to get the value outside of the function you would have to have two separate variables as well so local sum difference so basically sum would be the first variable and then difference would be the second variable so the two numbers are assigned separately so 10 + 7 is 17 and then for the difference 10 - 7 is 3 so it'll return 17 comma 3 so that means this variable here the first variable sum would be 17 and then the second variable will be three I can print them out separately as well just to show you and it prints 17 and three and that's everything you need to know for functions now on to if statements all right so if statements or conditional statements are lines of code that only run if certain conditions are met so to make things clear I'll show you what that looks like you start a conditional statement by typing if and then your condition then and then you press enter so what this is saying is that if this condition is met then we'll execute everything inside this block of code we conclude the if statement by typing the word end at the bottom so let's say we want to check if the temperature is cold outside to do that we'll have a variable here at the beginning call it temperature we'll set it equal to 10° 10° is pretty cold and in between the if and then we'll have the condition so we want to check if let's say the temperature is less than 20° if it's less than 20° it's cold and we want to print that out so this comparison operator here this alligator mouth opens its mouth to the larger number so what it's saying is if the temperature is less than 20 then we execute the code that's inside the spot in this case we're printing out it's cold so since 10 is less than 20 then it'll execute the code inside the block so we'll run this and we see that its cold is printed to the output window now there's a few comparison operators I'd like to talk about so this one is the less than operator you can also have the alligator mouth open on the other side so this is saying if temperature is greater than 20 this double equal sign is if temperature is equal to 20 this operator is saying if temperature is not equal to 20 so if it's anything except 20 then the condition is meant and it'll run the that's inside remember conditional statements only execute the code inside the block if the condition is true so in this case since temperature is not equal to 20 10 is not equal to 20 the condition is met so it'll run the code that's inside you also have other operator such as the greater than or equal to so if the temperature is greater than or equal to 20 so if it's 20 or above it'll run this code inside you can also switch the direction of the alligator mouth and this is if the temperature is less than or equal to 20 all right but what if the temperature was not less than 20 so what if it was 30° 30° is pretty hot so what we'll do is We'll add an lse statement basically the purpose of the else statement is to run the code inside the second block over here if this condition is not met so we first check if temperature is less than 20 if it is less than 20 we'll run this code inside but but if it's not less than 20 then we'll run this code inside the second block so if it's not cold it's hot and we'll change the temperature to 30 so it will check if the temperature is less than 20 30 is not less than 20 so it skips this block inside and it goes to this else statement which runs if the other checks are false or not met so it'll print its hot and that's what it shows in the output all right but what if we had something in the middle like what what if we want to check if it was warm like not too hot and not too cold that's what else if is for so else if is basically providing another check for it to complete before it moves onto the else statement so we use an else if statement by typing else if and then the conditions so the first thing we checked was if it was less than 20 now I guess we want to check if it's less than 25 so if it's less than 25 we'll say that it's warm if it's not less than 20 and not less than 25 then the temperature must be above 25 which is hot so if we place a number in between so like 24 it will first check if the temperature is less than 20 which is not because 24 is bigger than 20 so it ignores this statement over here then it will check the second statement so it'll check if the temperature is less than 25 and since 24 is less than 25 then it'll print its war and that's what it prints out so so this lse statement over here only prints something if all the other conditions are not met so the second one of the conditions is met it'll ignore everything else that's below it so if the temperature was 15° then it meets this first statement because 15 is less than 20 so it'll print its cold and then it'll ignore everything else that's down here so to recap conditional statements are to check if certain conditions are met in this case we wrote code that made sure the temperature was between a certain degree we want to check if it was cold or if it was warm or if it was hot so the else if statements are just a secondary if statement to check another condition provided that the first one was not met and then the else block over here only runs if everything else is false so that's it for conditional statements all right so the next topic we want to cover are tables a table is a data type that allows you to store multiple values of any type so we can define a table by by doing local t t for table and then curly brackets that's a table so let's fill it up with some strings so the different values inside a table are separated by commas so here we have a table with three elements inside scrips is cool all separated by commas so each element corresponds with an index which is essentially its position that's inside the table what we have here is a certain type of table called an array an array is an ordered list of values meaning they have numerical indexes so to reference the position of each element we use numbers so this first element over here is index one this second value over here is index 2 and this third value over here is index 3 now we can print specific elements of the table so we can do print T and to print specific elements of a table we we basically insert square brackets followed by the index so let's say we want to print the first value so we print T square brackets 1 so why don't you take a guess of what it will print if you guess it'll print scrips then you're correct because scrips is the first element inside so when we do T square brackets one it goes into the table and it looks for the first element which is scriptx so when we print that out scriptx is what you see now arrays have many built-in functions inside some of the more common ones are table do find table do remove and table do insert so I'll show you how you can use each one of these so we'll start with table. find so table. find takes two parameters so the first thing we want to do is want to pass on the array so we we pass on T and then we want to pass on the value we want to find so say we want to find the value cool what table.in does is it'll look for whatever value you provided and it'll return the index you found it at so we can print out the result so when we print out table.in T comma cool this function will look for the word cool inside and it'll return the index at which it founded at so since cool is found at index x 1 2 3 it'll print out three that's what it does now table. remove does something else table. remove removes a certain value from the table so we pass on the table and then we pass on the position at which we want to remove so let's say we want to remove the first index which is index one so table. remove will go inside this table they look at the index at which you provided which is one so it's the first one it'll remove the first element inside so the table will be the same thing except it doesn't have the first element inside so we'll execute this function and then we'll print the table out just so I can show you that the first element is actually removed as you can see the table only has two elements remaining and you can see the first element we had before is gone the last function I want to cover was table do insert table do insert basically inserts the value provided to the end of the table so when we insert bananas to the array the array will have four elements it'll be scrips is cool bananas so we'll print that out and run the code and we can see that bananas has been added on to the end of the array now there's another type of table called a dictionary so a dictionary is just like like an array except instead of using numbers as indexes you have specific values called keys we use so to define a dictionary we'll just do local dictionary equals and then the curly brackets and I'll just press enter so we can space out the brackets so we can actually add the values inside the keys are the names that you assign to the values inside the dictionary so essentially it's kind of like mini variables inside the dictionary so we'll do name you surround the key name with square brackets and then you type equals and we'll write the value we want so name equals scripts and then comma and then you can have another key let's call it favorite color and we'll say that equals green and we'll have one more value that says is cool and we'll set that to a ban value true it's true because I'm cool so that's a dictionary all right so to print specific values inside the dictionary you have to reference its key name so you do dictionary square brackets and then the key name we want so let's say we want to print my name so we'll do dictionary square brackets name and it'll look back on the dictionary over here it'll look for a key called name which is this first line over here and then it'll print the value associated with that key so when we print dictionary square brackets name it will print script now dictionaries don't have those built-in table functions like arrays do if we want to add a new value like a new key inside the dictionary we'll do dictionary square brackets and then the new key name so we'll say favorite number we set it equal to whatever we want so let's say my favorite number is 10 what this line does is it'll insert a new key inside the dictionary so it's essentially doing the same thing as adding a comma in and then sticking this line inside now dictionaries are not ordered so when you print out the key value pairs so name is the key and scripts is the value so when you print a dictionary the keys might not be in order so when we print out the dictionary it might be favorite color equals green that comes first and then is cool equals true and then finally name equals scrips so unlike arrays dictionaries are not ordered and you can remove dictionary keys by typing the key you want so let's say I want to remove is cool and the way we delete the key is we set it equal to nil nil means nothing so we set it to a non-existent value so when we print the dictionary we'll see that is cool is gone we'll print it once before we remove the key and we'll print it once after so the first time we print it we got favorite color equals green is cool equals true and name equal scrips notice how they're not in the order that we Define them in because dictionaries are not ordered and then the second time we print it is cool is gone you can see that there's only favorite color and name all right so now I want to talk about built-in functions Roblox has its own functions that they've built into Roblox Studio that are already pre-written and you can call whenever you want so if you want to see what built-in functions Roblox has you want to go to the object Explorer so you go under View and click object browser so on the left panel over here you have all the objects and instances and services that are inside Roblox let's say we want to browse for parts so on the right panel here you have all of the built-in functions that it has you've got add tag clone destroy f for child get actor and a whole bunch of other functions you'll also see that it has all the properties like color and anchored and name or material and it has a bunch of events connected to it as well but what we're looking at is the functions so I'm showing you that or most subjects have their own built-in functions that Roblox has already coded for you so I'm going to explore a few of them with you here so the most simplest one you've already seen is print and print just allows you to print things to the output window another really commonly used built-in function is task. we and this basically pauses the script for a certain amount of time so you would specify the number inside here say I wanted to wait 1 second I would do task. we 1 if I wanted to wait half a second I would do task. weight 0.5 now the next two I'm going to talk about are really similar so you have find first child and wait for child so let's say I was looking for a part that was inside something else so let's say I was looking for the base plate and it's found inside a workspace you could do game. workpace find first child and then in Brackets you put quotation marks the name of the object that you're looking for so Gameworks space. based playay you can also do the same thing with wait for child now the difference between find first child and wait for child is that F first child look ins set the area that you specified in this case it's game. workspace and it will return the first object with the value you specified so it will return the first object with the name base plate but if it can't find anything with that name it will return nil and nil basically means no value so if I do local part equals game. workspace find for child Bas plate it will look inside workspace it will find base plate and it will assign base plate to this variable over here now wait for child will pause the script until it finds the object with that name the problem with that is if there's no base plate it will pause the script forever and it won't continue to run so wait for child is only good when you know that object is going to be there so it basically Waits a certain amount of time before it prints the warning that it can't find the thing you're looking for so if I look for my cool part basically the script will pause forever because it can't find anything called my cool part inside it says infinite yield possible it means the script will pause infinitely until it finds that part but since there isn't any such part it will pause the script forever so wait for child is only good if you know that object is already there or you know that object is going to be there after you call it all right the last buil-in function I want to talk about is get children this function returns a table of everything inside the object that you specified so say I had a folder and I put all the parts that I could see inside that folder so let's call it my folder so if I do local Parts equals game. workpace do myfolder get children it basically returns an array containing everything inside so it's essentially the same thing as doing local Parts equals spawn location base plate and part so it will return everything inside the folder in the form of an array to show you that it's true I can print parts so it'll go look inside Gameworks space. folder and it'll get all its children inside so these three parts over here and then it'll put it in an array and when I print the variable Parts it will print the array containing all three parts and there you go all right so the next thing I want to talk about are Loops so Loops are basically these structures that allow you to repeat certain things over and over again until you tell it to stop so the first kind of loop is called a wild Loop and the way you define a wild Loop is you type while true do with the word end at the bottom basically what a wild Loop does is it continuously runs the code that's inside the block until you tell it to stop so if I said print high the wild Loop will continuously print high on and on and on forever now when you're using Loops it's not a good idea to leave it like this and I'll show you why so let's run it it lagged my laptop massively and it tells me script timeout exhausted allowed execution time so basically you've kind of overwhelmed Roblox Studio because it basically prints high so quickly it takes up all the memory so the way you prevent it is that you add a task. weight inside basically it will execute the code inside the block so it'll print high then it'll wait 1 second and then it'll print high again again that way you're not going too fast so if I run it now I should have no problems at all and you can see it increases over time I mean you can make this number really small just don't have it without the task. weight like I can do task. 0.05 it'll print high really quickly but not as quickly as before and it won't crash the way you break out of a loop is that you type the word break so in this case it will print high and then it'll wait 0.05 5 seconds and then it'll break out of the loop so in this case it'll only print high once and then it will stop and that's what it does the next kind of loop is called a repeat until Loop the way you define a repeat until Loop is that you type repeat enter and you'll see it says repeat until so that's the structure you want to follow so similarly to a wild Loop a repeat until Loop continuously runs the code that's inside the block block except that it runs it until a certain condition is met so right after the word until is where you write your condition kind of like an if statement let's say we wanted a counter and we want it to stop at 100 so we'll do local counter equal Z we will add one to the counter so we do counter equals counter + 1 so at the first run it'll set counter to a new value and that new value will be itself which which is 0 and then you add one to it so 0 + 1 is 1 and then it Loops again counter equals 1 + 1 which is two so it it increases by one every single time now after the until we'll write the conditions so we'll say until counter is equal to 100 so we want to break when it's 100 we'll also print the value of counter to illustrate it and obviously we want the task. weight we don't want Studio to crack so we'll do like every 05 seconds and we'll run that and it goes up from zero to 100 and it should stop at 100 and that's what it does so the until part of it kind of acts as a breaking statement so as soon as this statement is met we break out of the loop all right so the last kind of loop is called a four Loop so a four Loop is also called a counted Loop because you can use it to count count up numbers kind of like what we did with the repeat wild Loop but in different format so the way you define a for Loop is you type four and then you have your variable name so we'll call it counter and then equals and then it's followed by three numbers the starting number the ending number and the increment number so let's say we want to start at zero end at 10 and the increment number is how much we go up or down by so let's say we want to go up by one so for counter equals 0 comma 10 comma 1 we do so write do at the end and enter basically this four Loop it'll execute the code inside the block until the condition that counter equals 10 is met the first time it goes through the block here counter equals Zer and then when we get back to the top we add one to counter so counter equals 1 and then we go through the block again and now counter equals 2 and it keeps going until counter equals 10 and to illustrate this point we can do print counter counter to show you how the counter adds up so it starts at zero and it goes all the way up to 10 I should also mention that it's important to put the task. weight in here as well as for all other Loops in this case it didn't crash because we only had to go through it 11 times now for Loops are useful because they can iterate through tables so let's say we had a table here with a bunch of different values Bob show banana Roblox so a for Loop can also go through tables so if we want to go through an array we can do for index value in my Pairs and then the table basically what this does is it'll go through this table over here and notice how we have two variables over here this index value basically will print the position it's found at and then the value value variable will print the element that's at that index so to illustrate my point I'll print the index and then I'll print the value the first time it goes through the loop it prints index which starts at one for arrays so it prints one it'll print the value associated with that index which is Bob so one Bob and then it goes back to the top and it goes to the next index so since we start with index one now we're at index 2 so it prints two 2 and it looks for the element found at index 2 which is Joe so 2 Joe and the next time it goes around it's index 3 so it prints three and it looks for the element associated with that value which is banana and then finally it Loops through one more time it prints index 4 which is Roblox you can also Loop through dictionary so let's make a dictionary so let's say we had a dictionary we can Loop through the dictionary by doing four key value in pairs so instead of I pairs we do in pairs and then the dictionary name do and then enter now I'd like to make a note that the two variables that we have over here are just placeholders so you can name it anything you want and it won't change anything so we can print the value and key pairs it's basically the same thing we did with the arrays except that instead of having indexes as you do in arrays you have keys which are these things over here which help identify the value associated with it so when we print key and value it will print the specific key that we're looking at and then the value associated with that key so we'll run that so it prints the key so subscriber count and then it'll print the value associated with it which is 285 in this case and notice how they don't print it in order so I wrote name first but then it print a subscriber count first so that's the thing with dictionaries they are not ordered so when you iterate through them it might not be in the exact order that you wrote it as just a thing to keep in mind and those are the three different kinds of Loops now we will talk about events so what are events so events are basically these things on Roblox that wait for something to happen so let's say you had a part now we can go inside the object browser like we did before and we can go to part and we can look at all the events it has so you have changed child added destroying touched and we'll look at touched which is the most self-explanatory one so the touched event for a part basically fires when the part gets touched by something so think of events like these listeners that will wait until something happens something specific happens before for firing events allow you to connect functions to them so when an event fires you can have it trigger a function so you can get it to do something when that event is fired so let's say we wanted to connect a touched event to this part over here now let's rename the part first to make it a little more specific we'll call it cool part so we can reference the part using a variable so local cool part equals game. work space. cool part now the way you define an event is that you do cool part so you write the object name Dot and then the event you want to Define so cool part. touched and we want to have it do something when it gets touch so we want to connect a function to it and the way you connect the function to it is you do colon connect and then you type function kind of like when you're defining a function and another set of brackets I then remove the last bracket here here and then press enter so cool part. touch colon connect bracket function end basically what this event does is that it'll listen and wait until cool part gets touched and once it gets touched it fires the event which is connected to a function so it'll essentially call the function which is defined inside this block over here so whatever code you have inside here will run when the part gets touched let's say we want to make it transparent so we can do cool part. transparency equals 0.5 so when we touch the part it'll turn the transparency to 0.5 so let's play test it so I'm here with cool part and when I touch it it should turn semi-transparent cuz I set the transparency to 0.5 so when I touch it it's it's now partially invisible all right so to demonstrate my point again we'll use a different event this time we'll use one of the built-in events for the player service so let's say we want to check when a player joins so the way you do that is you do game. players you reference the service and then you do Dot and the event is called player added now you can see it right here with a lightning bolt so when you click on it you can see some more information about it so it fires when a player enters the game so we do game. players. player added and we want to connect a function to it connect function and then the end at the bottom now the player added event takes a parameter so in between the two brackets after function you can type in a parameter name the argument that's passed is the actual player that join so whenever the player joins this event gets fired and it will pass the player object as as a parameter and you can do a whole bunch of things with it so I can print the player's name so you can do player. name I can print the player's user ID so when I click play I will join the game and then this player added event will get fired which is connected to a function the function has a parameter called player and it takes the player object as the argument so when I press play I'm joining the game and it prints the username screen itics and then my user ID so recap events are basically these listeners that wait for certain things to happen and you can connect functions to it so that it executes code when that event gets triggered and that's about everything you need to know for the basics of scripting on Roblox so we've covered printing properties variables functions if statements tables built-in functions looping and now events and if you're looking for any other tutorials leave a comment down in the comments below thank you guys so much for watching and we'll see you in the next [Music] one