====== Lua functions ====== Functions in Lua are like blocks of code that perform a specific task. They allow you to encapsulate pieces of code, allowing you to reuse them later, they also allow making your scripts more modular, which in most cases, is a good practice, they also make the code more readable and easier to maintain. Functions can accept input parameters, perform operations, and return results ===== Function syntax ===== A function has 5 main parts, the declaration (function statement), the function name, the parameters, the function body (code to execute) and the **end** statement -- Function definition function functionName(params, ...) -- Function body end -- end statement, which marks the end of the function, or block ===== Function parameters ===== Functions can accept zero or more parameters, which are values passed to the function when it's called. These parameters are accessible within the function's body and allow you to provide inputs to customize the function's behavior. Example: -- Function with parameters function greetPlayer(name) print("Hello, " .. name .. "!") end function gameStart() print("Game has started!") end -- Call the function with an argument greetPlayer("Alice") -- Prints: Hello, Alice! gameStart() -- Prints: Game has started! If you call the **greetPlayer** function with no parameters, it will give you an error If you call the **gameStart** function with a parameter, it will be unusable, but won't give any error ===== Returned values ===== Functions in Lua can return one or more values using the **return** statement. These returned values allow functions to communicate results back to the caller. Example: -- Function with return value function addNumbers(x, y) return x + y end local sum = addNumbers(5, 3) print("Sum:", sum) -- Output: Sum: 8 You can return any type of value, functions, tables, variables, etc ===== Anonymous functions ===== Lua also supports anonymous functions, which are functions without a name. These functions can be assigned to variables or passed as arguments to other functions, in mini world, they are mostly used in the listener function -- Anonymous function assigned to a variable local square = function(x) return x * x end -- Call the anonymous function local result = square(4) print("Square:", result) -- Output: Square: 16 Anonymous function as argument of another function (in this case the listener function): These both do the same function gameStart() print("Hello, world!") end ScriptSupportEvent:registerEvent([=[Game.Start]=],gameStart) ScriptSupportEvent:registerEvent([=[Game.Start]=],function() print("Hello, world!") end) Both functions will do the same, anonymous functions can also take args Example: function clickBlock(params) local playerid = params.eventobjid local blockid = params.blockid print("A player has clicked a block with the id: ".. blockid) print("The uid of the player that clicked the block is: ".. playerid) end ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], clickBlock) ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=],function(params) local playerid = params.eventobjid local blockid = params.blockid print("A player has clicked a block with the id: ".. blockid) print("The uid of the player that clicked the block is: ".. playerid) end) Both functions will do the same when a block is clicked