Popular Post xXMADEXx Posted May 16, 2014 Popular Post Share Posted May 16, 2014 (edited) TUTORIAL/GUIDE NO LONGER MAINTAINED This tutorial is no longer maintained and it's contents may be deprecated or no longer work. I created this tutorial in 2014, when I was very involved with MTA and the community around it. Due to the nature of life, I ended up leaving MTA to focus on more important things (work, family, life, etc). I believe this tutorial has helped a lot of people get into scripting for MTA over the years, and I'm happy I was able to do answer questions and help people get into coding! Introduction Hello everyone, and thank you for viewing my introduction for Lua scripting. This tutorial will cover the basics of Lua, but nothing too advanced. This tutorial is highly detailed and should give you a pretty good understanding on how Lua works, even if you have never coded it before. Something to remember is that I do not teach or even talk about using object-oriented programming in this tutorial. Things you'll be learning: For general lua - Variables - Complete - Tables - Complete - Functions - Complete - Return - Complete - Loops - Complete - If/Else/Elseif - Complete - Usage of pre-defined variables Any type of programming - Formatting your code For mta - Create a resource and what is required for one - Complete - Events - Complete - Commands - Complete - Exports & how to call one - Complete So, now that you know what you're going to be learning about, let's get started! Variables In this section of the tutorial, I'll be teaching what a variable is and what it is used for. First of all, if you have any prior programming experience, you are likely to know what a variable is. Even if you are good at math, you should know what one is. A variable is like what you did in math class, solve for x. Only in programming you don't solve for the variable, you set them and you can call them when the script needs to know something. So, A variable something that the user defined in the script. For example, if you set the variable alpha equal to 255, then whenever you call the alpha variable, it will replace it with 255 when the script is ran. Luckly for you, Lua doesn't make you define what type of variable it is (such as a boolean, string, array, etc..) Below I will list some examples of variables. my_variable = "Hello world" Now, in the example above, whenever the variable my_variable, it will replace itself with "Hello World". Variables can be re-written or in other words, you can change what they mean, shown in the code below. my_variable = "Hello world" my_variable = "This is a string" First the variable my_variable was defined as "Hello world" but after that, it was updated to "This is a string". Not only can variables be re-defined, but they can also be duplicated and destroyed.. my_var = "Hello World" -- Create the variable var = my_var -- Set the variable var equal to "Hello World" (the value of my_var) my_var = nil -- Destroy the variable "my_var" (In Lua, "nil" means nothing, it's mostly used to destroy a variable) Now that you have a basic understanding of variables (hopefully), we can move on to the difference between global and local variables. Local variables Local variables are variables that won't be defined in the whole script, or resource. They are variables that are defined in the function that is being used. If the variable isn't inside of a function, and is defined at the top of the script, then it will only be used for the file that it's in. Examples below. Here is an example of a variable just being defined in a function: function Hello ( ) -- You'll learn what this means later local hello = "hello world" end The variable "hello" will only be valid in the function "Hello". This means that if another function tries to call the variable "hello" it will return nil because it isn't defined. Here is an example of a variable that is globally defined in a function. function Hello ( ) hello = "Hello World" end Now the variable "hello" is defined for the entire script, but only after the function "Hello()" is called, because Lua works on a line-by-line basis, it doesn't all just load at once. Alrighty, now I think you pretty know what a variable is and how it works, but if you you still don't have a clear understanding please visit http://lua.gts-stolberg.de/en/Variablen.php Tables What is a table? If you have programmed in another language and know what an array is, that's basically what a table is. If you don't know what it is, it is basically something you can define to hold a bunch of data in a single variable. So, to being, first I need to explain how to create a table. Tables are created the same way as a variable, only what you define is different, you will define: { }. For example: local MyFirstTable = { } Right now the table is empty, so there is nothing in it to be used. There are a few methods to adding data to a table, and I'll be going over them. The first method is to just put the data in it when the table is created.. Such as this: local t = { "Data 1", "Data 2", "Data 3" } You can define as much data as you want in a table, there isn't a limit. Not only strings have to be defined in a table, anything can be, even more tables can be defined in a table! local t = { { "Data 1:1", "Data 1:2" }, { "Data 2:1", "Data 2:2" } } Tables are a good way to define your stuff, because it keeps things really organized. This method for defining data isn't really a good way, unless your putting in something like coordinates. Most people will use the next method to define their data: This method is used to define an index for a table. The index doesn't have to be a number, but it can be anything that you want (except nil, of course) local t = { } -- create table t[1] = "Index 1" t[2] = "Index 2" t['random'] = "Index random" That is how a lot of scripters like to define their data, because most of the data that they are insert into the table they don't even really know the value of. This method can also be used inside of a table as shown below, they will both do the same exact thing: local t = { [1] = "Index 1", [2] = "Index 2", ["Random"] = "Index random" } Now, the last method to insert data to a table is using the default lua function table.insert. This function has two arguments that you'll need to have, the table variable and what you want to insert. local t = { } table.insert ( t, "Item 1" ) table.insert ( t, "Item 2" ) This method is used sometimes, but not as often as the other two ways. Now you have a basic knowledge of tables, so we can move on to section, functions! More information @ http://lua-users.org/wiki/TablesTutorial Functions Functions are the things that MTA creates for scripters to customize their servers and make theme unique. Almost anything that you are going to do in Lua is going to involve some sort of function, whether it is outputting text, formatting a string, or encrypting data, it is all going to use a function of some-sort. So, it's actually very, very basic to make a function in Lua. All you really have to do is write: function myFunctionName ( ... ) and then be sure to end the function with end at the end. So, let's go head and make your very first function in Lua. function funct ( ) end So now we have a function defined as funct, but it doesn't do anything Let's fix that now! Let's make it write "Function funct loaded" to the chatbox. To write to the chatbox, we'll be using the function that MTA provides called outputChatBox. The outputChatBox arguments (for server side) are: boolean outputChatBox ( string text, element outputElement [, int r, int g, int b, boolean useHex=false ] Required text -> The text that we want to output outputElement -> The element that we want to output Optional r -> The amount of red you want on a scale of 0-255 g -> The amount of green you want on a scale of 0-255 b -> The amount of blue you want on a scale of 0-255 useHex - Enable hex color codes (such as #ffff00) Now that we have our functions, we're ready to make our function actually do something! function funct ( ) outputChatBox ( "Function funct loaded", ??? ) end So, let's say that we want to send the message to all of the players in the server. If you want to send it to all of the players, you would just put another function called getRootElement() or you can use the MTA defined variable root. root returns the same thing as getRootElement(), so it doesn't matter what you put. function funct ( ) outputChatBox ( "Function funct loaded", getRootElement ( ) ) end Alright, so now we have created a basic function! But it won't output \: This function is loaded into the server, but it is never being called, therefore it will never output, all you have to do is call the function, by putting funct() somewhere below the function. function funct ( ) -- Create the function outputChatBox ( "Function funct loaded", getRootElement ( ) ) -- output our text end -- End the function funct ( ) -- Call our function The script is working! Now you have created your very very basic function. Let's get crazy! Let's add some function arguments.. We can add an argument to set custom text. So, to add arguments, you have to declare them when the function is created by doing: function funct ( argument_1, argument_2, argument_3 ). That would define you 3 arguments. Think of the arguments as local variables defined inside your function, because that is basically all they are, and you can define them whenever you call the function, anyway, let's go head and add ourself some arguments! function funct ( arg1 ) outputChatBox ( "Function funct loaded", getRootElement ( ) ) end funct ( ) Now that we have our argumnet defined, let's set it when the function is called. This is done by doing: funct ( arg1_value ). function funct ( arg1 ) outputChatBox ( "Function funct loaded", getRootElement ( ) ) end funct ( "This is argument 1" ) Great! You're doing awesome so far on learning Lua! Now that we have the argument defined, lets go head and put it somewhere in the script. We can just replace our old message with the new argument, so you just have to replace the text with the argument (not in a string) function funct ( arg1 ) outputChatBox ( arg1, getRootElement ( ) ) end funct ( "This is argument 1" ) Did it work?(: Good job so far, you'll be a Lua master in no time at all! Now that we have our script working good, let's combine a variable and a string in the chatbox message. This is done by doing "My message: "..variableName function funct ( arg1 ) outputChatBox ( "Argument 1: ".. arg1, getRootElement ( ) ) end funct ( "This is argument 1" ) Good! Now that you know what a function is and what arguments are, let's try adding some more arguments.. What should we do? Let's add some color codes shall we? All we basically are doing is re-creating the outputChatBox function. function funct ( arg1, red, green blue ) outputChatBox ( "Argument 1: ".. arg1, getRootElement ( ), red, green blue ) end funct ( "This is argument 1", 0, 255, 0 ) Feelin' like a scripter yet? Good! You're on the way to success. More information @ http://lua-users.org/wiki/FunctionsTutorial Working with return inside functions I think you guys got a pretty good understanding of functions now. So, now that you got down how to create a function, how do we get a value from it? It's actually very easy, we just have to use the return method. It's actually very simple, whenever the function is called, it will just give where-ever it was called what it returns. So, let's get started with making a basic function that returns something. function addNumbers ( arg1, arg2 ) local num = arg1 + arg2 return num end So, as you can see I created the function addNumbers that takes two arguments (number obviously) adds them together, and then returns them. So, let's go head and test the function. We will create a variable that gets the returned value of addNumbers and then we will output it. function addNumbers ( arg1, arg2 ) local num = arg1 + arg2 return num end local sum = addNumbers ( 50, 1 ) outputChatBox ( sum, getRootElement ( ) ) As you can see the function is created, and then we created the variable sum that will call the function addNumbers and get the returned value of 50 + 1, and then we use outputChatBox to see what it returns, if I'm correct it should return 51. Let's go head and make a function, that calls another function and gets a return value of it. function getMyName ( ) return "xXMADEXx" end function divideNumbers ( n1, n2 ) return getMyName() .." says that "..n1.." divided by "..n2.." is ".. ( n1 / n2 ) end local text = divideNmbers ( 50, 25 ) outputChatBox ( text, root ) In that example, I created two functions: getMyName returns a string of text, and divideNumbers returns a string of text with some mathematical variables in it, and then we created the variable text that stores the returned value of divideNumbers, and then we outputted the text to all of the players in the server. More information @ http://www.lua.org/pil/4.4.html Loops So, now you're like a Lua professional! What is a loop? A loop is something to execute a piece of code x amount of times. There are three types of loops that I'll be covering in this topic; table loops (pairs/ipairs), number loops (for i=x;10), and while loops. Let's just jump right into it! Table Loops - pairs and ipairs This type of loop is used to loop through everything inside of a table. It runs through all of the table index's and you can just do whatever you want with them. For the first example, I'll be getting all of the players in the server using getElementsByType("player"). I'll get their names and output them to the chatbox, using the function that you should know by now, outputChatBox. local players = getElementsByType ( "player" ) for index, player in ipairs ( players ) do local name = getPlayerName ( player ) outputChatBox ( "The server says hello to "..name, getRootElement ( ) ) end In the example below, the script will get all of the players, put them into a table, and then put the table variable as players. After all of the players are gotten and stored in the variable, it begins a for loop through the table. Index is the ID of the table that the loop is currently running, and player is what it returns in that index. name is returning the players name, and then we output it. Numeric loops This type of loop is used, if the scripter knows exactly how much he wants the piece of code to run. It goes in the format for index=0,100 do and index is the variable that you're using for the number, 0 is the number that you want the table to begin at, and 100 is the number that you want the loop to go to. So, we're just going to make a loop for color codes, it will output the RGB color code, and make it the color that it is. This will be done be making a loop start at 0 and run to 255. for i=0,255 do outputChatBox ( "This color is "..i, getRootElement ( ), i, i, i ) end Kinda colorful don'tcha think? As I'm sure you can see, loops are actually pretty basic to use, but they're EXTREMELY useful for coders. While loops A while loops is a little bit different than the other two. A while loop runs while the argument that you put is true, or it reaches break. It is always important to make sure this loop ends, because if it doesn't your entire script will stop working and you'll get a stack overflow error message. We'll write the script that we just did, except this time in a while loop using a variable, and adding 1 to the variable each time. local i = 0 while ( i <= 255 ) do outputChatBox ( "Number: "..i, root, i, i, i ) i = i + 1 end Something that is really useful when you're dealing with loops, is using break or return. When you use one of these methods, it will stop the loop immediately. For example, if you are running a while loop, and the statement is always going to be true, then you're going to need to use break or return. These are usually done using a basic if statement. local i = 0 while ( true ) do i = i + 1 outputChatBox ( "Some Spam", root ) if ( i == 200 ) then break end end in the above script, it will always output chat if we didn't add a break. Once it outputs 200 times the if will become true, and then it will stop the loop. More information @ http://lua.gts-stolberg.de/en/schleifen.php If/Else/Elseif An if is just what you think it is. It is a thing to check if your arguments are valid. If they are valid, then the code will continue to run. If it isn't then it'll look for elseif, until it finds one that is true. If it can't find an elseif then it will simply run the else. If statements are really, really important when it comes to any type of programming. Whether it is Java, C++, or Lua, you need to know how to use an if statement, because there isn't much you can do without it. Let's get started with some basic if statements. function outputToPlayer ( message, player ) if ( player == "xXMADEXx" ) then -- Check to see if [i]player[/i] is equal to "xXMADEXx" outputChatBox ( message, getPlayerFromName ( player ) ) end end outputToPlayer ( "This is your message!(:", "xXMADEXx" ) That code will work without a problem because the if statement is returning true. Now, let's make it return false, and watch the results. function outputToPlayer ( message, player ) if ( player == "xXMADEXx" ) then -- Check to see if [i]player[/i] is equal to "xXMADEXx" outputChatBox ( message, getPlayerFromName ( player ) ) else outputConsole ( "If statement test failed." ) end end outputToPlayer ( "This is your message!(:", "NewGuy" ) As you can see for that script, it will output to the console rather than outputting to the xXMADEXx player. Now, let's add another statement to check if the xXMADEXx player exists in the server. function outputToPlayer ( message, player ) if ( player == "xXMADEXx" ) then -- Check to see if [i]player[/i] is equal to "xXMADEXx" local p = getPlayerFromName ( player ) if p then outputChatBox ( message, p ) else outputDebugString ( "If Tutorial: player "..player.." isn't in the server." ) end else outputDebugString ( "If Tutorial: The player variable is equal to "..player..", not xXMADEXx" ) end end outputToPlayer ( "This is your message!(:", "xXMADEXx" ) In that script, if player is equal to xXMADEXx, then it would output to xXMADEXx, if he was in the server. If he wasn't then it out send a debug message saying that he wasn't in the server. As you can see, if statements are highly important, and really easy to do. Almost any script that you will make will have at least one if statement. Now, let's make: if -> elseif -> else. function outputToPlayer ( message, player ) if ( player == "xXMADEXx" ) then -- Check to see if [i]player[/i] is equal to "xXMADEXx" local p = getPlayerFromName ( player ) local r = math.random ( 0, 100 ) if p then outputChatBox ( message, p ) elseif ( r > 50 ) then outputDebugString ( "If Tutorial: xXMADEXx isn't present, but r was higher than 50." else outputDebugString ( "If Tutorial: player "..player.." isn't in the server." ) end else outputDebugString ( "If Tutorial: The player variable is equal to "..player..", not xXMADEXx" ) end end outputToPlayer ( "This is your message!(:", "xXMADEXx" ) As you can see, if statements are really useful and easy to do. More info @ http://www.lua.org/pil/4.3.1.html Usage of pre-defined variables The MTA client and MTA server both define some variables, so you don't need to define them in your script. The most common pre-defined variables would probably have to be (according to my history of scripting): - root: short for getRootElement( ) [sHARED] - localPlayer: short for getLocalPlayer( ) [CLIENT-SIDE ONLY] - resourceRoot: short for using getResourceRootElement(getThisResource()) [sHARED] - source: the player/element an event was attached to however, MTA and Lua both do define other variables, but these four would be the ones that you want to know. Full List: https://wiki.multitheftauto.com/wiki/Pr ... ables_list __________________________________________________________________________________________________ Formatting your code This is one of the most important aspects, that applies to any type of a programming you do in any language. Making a clean formatted code allows for yourself and others to efficiently read your code, and makes it easy to find a section that the reader is looking for. Formatting your code doesn't effect anything than readability, so it won't effect how the code is ran by the computer at all. Everybody has a different style of formatting their code, so I'm just going to teach you the way that I like to format my code. The first thing you need to know is what a code "block" is. A block is when you create a new function, begin a loop, begin an conditional statement, or anything of that sort. When you create a new block, you should add another indent to what you had before the block. Here is a well-formatted code: function MyFunction ( arg1, arg2 ) if ( arg1 and arg2 ) then if ( type ( arg1 ) == "number" and type ( arg2 ) == "number" ) then if ( arg1 > arg2 ) then while ( arg1 > arg2 ) do arg2 = arg2 + 1 end outputChatBox ( tostring ( arg2 ) ) else outputChatBox ( "arg2 is bigger" ) end else outputChatBox ( "One of the two aren't numbers" ) end else outputChatBox ( "Didn't get two arguments" ) end end and here is a badly-formatted code: function MyFunction ( arg1, arg2 ) if ( arg1 and arg2 ) then if ( type ( arg1 ) == "number" and type ( arg2 ) == "number" ) then if ( arg1 > arg2 ) then while ( arg1 > arg2 ) do arg2 = arg2 + 1 end outputChatBox ( tostring ( arg2 ) ) else outputChatBox ( "arg2 is bigger" ) end else outputChatBox ( "One of the two aren't numbers" ) end else outputChatBox ( "Didn't get two arguments" ) end end Thanks to my awesome Microsoft Paint skills, I've made a diagram to help you with formatting blocks of code. See below. Good-Code Breakdown Diagram - (http://i.imgur.com/TUWM6ad.png) The most important thing you can do is to find a formatting style that you like, and is easy to read. __________________________________________________________________________________________________ Making a resource I made a video for this section, because it would be a little hard to explain with text. (Sorry, my voice was a little bit studdery because I was tired) Introduction to events Commands Good, you've made it this far, you have what it takes to be a successful scripter, without a doubt! Now, I'm sure you want to learn how to add commands, because they're fast and easy to both create and execute. To add a command, you just stimply need to use the function addCommandHandler. Simple as that, just throw in your command name and the callback function! Here, let's get you started to just make a simple /kill command. addCommandHandler ( "kill", function ( player ) killPed ( player ) end ) Now, as you see in the code before, the player who executed the command is NOT source as many new people to scripting MTA might think, don't be ashamed though, that's exactly what I thought when I first used the function. The player, the one who executed the command will be defined to the first argument of the callback function, so in my little /kill command script, it just set the player to the variable player (go figure lol). So, now let's build a bit of a more advanced command to do /spawn INT and where INT is, you can enter a number and it'll spawn a vehicle to you. Let's get started!! function callbackFunct ( player, command, arg1 ) if ( not arg1 or not tonumber ( arg1 ) ) then outputChatBox ( "The correct syntax for /"..tostring(command).." is /"..tostring(command).." [integer from 400 to 611]", player, 255, 0, 0 ) return false end -- Now we know he has a vehicle ID (arg1) and it's an integer, now we need to check if it's between 400 and 611. local arg1 = math.floor ( tonumber ( arg1 ) ) -- Let's convert and round it, to prevent "code-buggers" if ( arg1 and arg1 > 400 and arg < 611 ) then local x, y, z = getElementPosition ( player ) local _, _, rz = getElementRotation ( player ) local veh = createVehicle ( arg1, x, y, z, 0, 0, rz ) warpPedIntoVehicle ( player, veh ) outputChatBox ( "You have created a vehicle!", player, 0, 255, 0 ) else outputChatBox ( "Invalid vehicle number. Valid: 400-611", player, 255, 0, 0 ) end end addCommandHandler ( "spawn", callbackFunct ) As you can see in the code above, it's pretty straight forward. When you enter the command /spawn it'll run the callbackFunct function. arg1 will be set to the first argument that the player gives in the command. (This: /spawn arg1) arg1 will be set to the value that the user gives. First the function will check to see if the argument exists, and if it does, or the argument cannot be converted to a number then it will output a simple syntax error and stop the function with return. If arg1 exists, and it can be converted to a number, then the code will take the value, convert it to a number, then round it to the lowest number if it's a decimal. After that, it checks if the number is a valid vehicle ID, and if it isn't then it just outputs a basic error saying it's invalid. If it is a valid number, it'll get the players position and rotation, then create a vehicle in the position and set the rotation Z axis to the players, then warp the player in and output a message. addCommandHandler Exports What an export is You might be asking yourself, what is an export? Well, when you create a function, if it's global or a local function, MTA will make it only accessable by your resource. When you try to call the function in another resource, it'll say that it is undefined. An export gives you the ability to call a function that is contained in another resource. For example, in my resource TopBarChat (It's horrible English, I know) I made the function sendClientMessage exported, so it can be used in any resource. Now, it's actually very easy to add an export, it's all about the meta. You just need an tag, with an attribute function which is equal to the function that you want to export, and an optional attribute type which tells whether it's a server or client function, server by default. There's some other attributes, however i'm not going to get into them because they're more for web-based applications. Creating an export Let's say I have a resource named messages and it contains a function outputMessage with the arguments: - msg - A string of the message - player - The player element to output to - r - the R color from RGB - g - the G color from RGB - b - the B color from RGB So, in the messages resource, let's go head and create the server-side function. -- message_server.lua function message ( message_, player, r, g, b ) if ( not msg ) then return false; end if ( player and not isElement ( player ) ) then return false; end if ( not player ) then player = getRootElement ( ); end if ( not r ) then r = 255; end if ( not g ) then g = 255; end if ( not b ) then b = 255; end outputChatBox ( "[*message-system] ".. message_, player, r, g, b ) end Now that the function is created, we need to create the meta. <meta> <info author="xXMADEXx" name="Message-System" version="1.0" type="script" /> <script src="message_server.lua" type="server" /> </meta> Now that we have our meta, we need to add the following line to export the function into other resources. <export function="message" type="server" /> Basically, the export line in the meta adds the function to a table called exports under the index of the resource name. Pretty basic right? Here is a basic diagram of the exports table: Calling the export Say we have another resource, and we want to call the message function that is exported in the messages resource. All you have to do is call the exports -> resource -> function_name. Here's what it would look like for the messages resource and the function message function: --Method 1 (Method I use) exports["messages"]:message ( "You were selected!", getRandomPlayer ( ), 0, 255, 0 ) -- resource -- function -- function arguments -- Method 2 (Different style than Method 1) exports.messages:message ( "You were selected!", getRandomPlayer ( ), 0, 255, 0 ) -- resource -- function -- function arguments -- Method 3 (Using the call function) call ( getResourceFromName ( "messages" ), "message", "You were selected!", getRandomPlayer ( ), 0, 255, 0 ) -- Resource (as [i]resource[/i] type) function function arguments The main reason I never use method 3 is because it's easier to get confused, and it takes longer to type. I typically do method 1, but sometimes method 2. Good luck with your Lua scripting career, I hope that this tutorial has helped you! Edited October 31, 2021 by xXMADEXx Added 'NO LONGER MAINTAINED' message 3 2 Link to comment
.:HyPeX:. Posted May 17, 2014 Share Posted May 17, 2014 You could check my tutorial for the spoiler-way i arranged it. It might be easier for searching into something specific, rather than scrolling down for hours. Good tutorial. Link to comment
xXMADEXx Posted May 18, 2014 Author Share Posted May 18, 2014 You could check my tutorial for the spoiler-way i arranged it. It might be easier for searching into something specific, rather than scrolling down for hours. Good tutorial. Thanks for the idea, I'll add that right away! Link to comment
Woovie Posted May 18, 2014 Share Posted May 18, 2014 Good work, maybe change font colors here though, I can't read it. http://i.imgur.com/1FRHD4c.png Link to comment
Perfect Posted May 21, 2014 Share Posted May 21, 2014 The Tutorial Is Good So Far. (Without considering the above noted mistake) Waiting for the completion of the Tutorial. Thank You For The Tutorial. Link to comment
xXMADEXx Posted May 22, 2014 Author Share Posted May 22, 2014 The Tutorial Is Good So Far. (Without considering the above noted mistake)Waiting for the completion of the Tutorial. Thank You For The Tutorial. Thanks for reporting the errors to me, I went ahead and fixed them. Good work, maybe change font colors here though, I can't read it.http://i.imgur.com/1FRHD4c.png Thanks for the feed back, I'll change the colors now. Edit Updated - Added if/else/elseif Link to comment
qaisjp Posted June 10, 2014 Share Posted June 10, 2014 Great stuff. If you could move it to the Tutorials section and link to it in the forum post, it'd be great Link to comment
xXMADEXx Posted June 11, 2014 Author Share Posted June 11, 2014 Great stuff. If you could move it to the Tutorials section and link to it in the forum post, it'd be great That'd be awesome lol Update Added how to create a basic resource (It's a video .-.) Link to comment
xXMADEXx Posted June 11, 2014 Author Share Posted June 11, 2014 Is this you? v Lol, actually it use windows 7 but I just use a custom theme. Link to comment
diesel974 Posted June 17, 2014 Share Posted June 17, 2014 Thank you for your precious time you devoted to this tutorial bro, God bless Link to comment
xXMADEXx Posted June 17, 2014 Author Share Posted June 17, 2014 Thank you for your precious time you devoted to this tutorial bro, God bless Thank you! Uploaded introduction to events Link to comment
HerculePoirot Posted June 18, 2014 Share Posted June 18, 2014 Great Tutorial. Good job Link to comment
Saml1er Posted June 18, 2014 Share Posted June 18, 2014 Just Awesome man. Keep up the good work. (y) Link to comment
bradio10 Posted June 18, 2014 Share Posted June 18, 2014 Awesome tutorials man! I really like it when you do videos, so if it isn't a hassle in making them, I would suggest making videos because it kinda gives a more detailed explanation. The way I see it, it kinda makes it look like you know what you are talking about rather than doing a worded tutorial because as you may know, people do copy the tutorials from others and claim it as theirs, so I really like it when people do videos. Anyway, keep it up dude, this is awesome! PS: I saw down in the forums that you turned 15, so happy birthday! Link to comment
xXMADEXx Posted June 18, 2014 Author Share Posted June 18, 2014 Just Awesome man. Keep up the good work. (y) Thanks, I appreciate it very much. Awesome tutorials man!I really like it when you do videos, so if it isn't a hassle in making them, I would suggest making videos because it kinda gives a more detailed explanation. The way I see it, it kinda makes it look like you know what you are talking about rather than doing a worded tutorial because as you may know, people do copy the tutorials from others and claim it as theirs, so I really like it when people do videos. Anyway, keep it up dude, this is awesome! PS: I saw down in the forums that you turned 15, so happy birthday! Yea, this comment really helped me because I wasn't sure if people like the videos or the worded tutorials more, but I got tired of writing them so I decided to try out the videos. Thanks so much for your reply, and thanks again for noticing my birthday Link to comment
xXMADEXx Posted July 1, 2014 Author Share Posted July 1, 2014 Great job man. ^^ Thanks! Link to comment
Bilal135 Posted July 17, 2014 Share Posted July 17, 2014 Nice tutorial, It will surely help people. Good Job. Link to comment
xXMADEXx Posted August 5, 2014 Author Share Posted August 5, 2014 Nice tutorial, It will surely help people. Good Job. Thanks Link to comment
abod99119911 Posted August 9, 2014 Share Posted August 9, 2014 veryy very nice 1 and thx it help Link to comment
xXMADEXx Posted August 10, 2014 Author Share Posted August 10, 2014 veryy very nice 1 and thx it help Thank you and no problem. Link to comment
Smart. Posted August 21, 2014 Share Posted August 21, 2014 Good tutorial but maybe you should explain how you can use tables more efficiently, many people store simple information that's only used within the resource itself by using setElementData and getElementData when it can simply be used with a table and if you want to use it outside the resource you can use a simple export to return the table Link to comment
Recommended Posts