Concepts

Concepts

We'll try to explain some technical but core concepts used in ox_core here.

Classes

Lua doesn't have support for true classes, but rather prototype-based inheritance.
A prototype can hold its own variables and methods, which another object (an instance) can reference or call.

-- OxPlayer will hold all inherited variables and methods for instances of it.
local OxPlayer = {}
 
-- Sets the "index metamethod" of OxPlayer to reference itself.
-- This is how instances will know to look up the table.
OxPlayer.__index = OxPlayer
 
-- Set a new metatable on the table passed to the function.
-- The important code here is { __index = OxPlayer }.
function OxPlayer.new(player)
    return setmetatable(player, OxPlayer)
end
 
-- Using the `:` syntax will pass the object as the first parameter.
function OxPlayer:getUsername()
    return self.username
end
 
-- Create our instance of OxPlayer.
local player = OxPlayer.new({
    username = 'Bob the Builder'
})
 
-- This is the same as OxPlayer.getUsername(player).
local username = player:getUsername()
 
-- 'Bob the Builder'
print(username)

When using the imported classes in your resources you can treat the methods as if you are calling a regular function.

local player = Ox.GetPlayer(playerId)
print(player.getUsername())