Table of Contents

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