Início › Documentação › Personalização · origen_inventory
O origen_inventory oferece três formas de personalização:
origen_customitems).config/
├── hooks.lua -- Hook examples (server + client)
modules/
├── customItems.lua -- AddCustomItem / EditCustomItem / RemoveCustomItem implementation
client/functions/
├── f_hooks.lua -- registerHook / removeHooks (client-side)
└── f_worldpoint.lua -- World point exportsOs hooks permitem que outros recursos se subscrevam aos eventos do inventário e, ou consultem os dados, ou os modifiquem ou cancelem a ação. O cliente e o servidor expõem o mesmo nome de export: registerHook.
registerHook(event, callback, options?) → string (id)Regista um callback para o hook indicado.
local hookId = exports.origen_inventory:registerHook('createItem', function(payload)
-- payload is hook-specific
return payload.metadata
end)| Parâmetro | Tipo | Descrição |
|---|---|---|
event |
string |
Nome do hook a escutar. |
callback |
function |
É invocado com os dados do hook. |
options |
table |
Configuração opcional do hook. |
removeHooks(id) → voidRemove um hook registado anteriormente a partir do seu id.
exports.origen_inventory:removeHooks(hookId)createItemÉ disparado quando um item está a ser criado (por exemplo, ao inicializar os metadados). Devolve a tabela metadata (modificada, se quiseres) para aplicar as alterações.
Dados recebidos
| Campo | Tipo | Descrição |
|---|---|---|
item |
table |
Definição do item que está a ser criado. |
metadata |
table |
Tabela de metadados modificável. |
Exemplo: atribuir um id de saco único ao criar um paperbag:
exports.origen_inventory:registerHook('createItem', function(payload)
local metadata = payload.metadata
local item = payload.item
if item.name == 'paperbag' and not metadata.bagId then
metadata.bagId = math.random(1000, 9999)
end
return metadata -- you MUST return the metadata table
end)Se registares o hook createItem e te esqueceres de devolver a tabela de metadados, o item será criado com os metadados vazios.
worldpoint-interact-inÉ disparado quando o jogador entra no raio de interação de um ponto do mundo.
Dados recebidos
| Campo | Tipo | Descrição |
|---|---|---|
type |
string |
Tipo de ponto (stash, shop, crafting, drop, personalizado). |
id |
string |
Id único do ponto. |
location |
vector3 |
Coordenadas do ponto. |
label |
string |
Etiqueta apresentada. |
worldpoint-interact-outÉ disparado quando o jogador sai do raio de interação de um ponto do mundo. Recebe os mesmos dados que o anterior.
worldpoint-area-nearbyÉ disparado quando o jogador entra na zona mais ampla (zoneDistance) à volta de um stash ou de outro ponto com uma zona configurada. Serve para carregar de forma diferida interfaces pesadas.
Exemplo: registar cada entrada num stash:
exports.origen_inventory:registerHook('worldpoint-interact-in', function(payload)
if payload.type ~= 'stash' then return end
print(('Player entered stash %s at %s'):format(payload.id, payload.label))
end)Os itens personalizados ficam guardados na tabela origen_customitems e são recarregados quando o recurso arranca. As três operações são executadas no servidor.
AddCustomItem(data) → booleanAdiciona um novo item personalizado. Devolve false se o item já existir.
exports.origen_inventory:AddCustomItem({
name = 'origen_compass',
label = 'Compass',
weight = 200,
type = 'item',
image = 'origen_compass.png',
description = 'Always points to the next adventure.',
rarity = 'rare',
stack = false,
close = true,
decay = nil,
server = nil,
client = nil,
buttons = {},
})| Campo | Tipo | Descrição |
|---|---|---|
name |
string |
Chave única do item. Se estiver vazia, é gerada a partir de label. |
label |
string |
Etiqueta apresentada. |
weight |
number |
Peso do item. |
type |
string |
Tipo de item (item, weapon, etc.). |
image |
string |
Nome do ficheiro de imagem (tem de existir na pasta de imagens do teu inventário). |
description |
string |
Descrição do item. |
rarity |
string |
Etiqueta de raridade (opcional). |
stack |
boolean |
Indica se o item é empilhável. Por omissão é true. |
close |
boolean |
Fecha o inventário ao usar o item. Por omissão é true. |
decay |
number |
Duração da deterioração (opcional). |
server |
string|table |
Definição do callback de servidor (opcional). |
client |
string|table |
Definição do callback de cliente (opcional). |
buttons |
table |
Botões do menu de contexto (opcional). |
consume / uses |
number |
Número de utilizações antes de o item ser consumido. |
O item é adicionado ao dicionário em memória e sincronizado automaticamente com todos os clientes.
EditCustomItem(data) → boolean, error?Edita um item personalizado existente. O campo name é obrigatório e tem de corresponder a um item existente.
exports.origen_inventory:EditCustomItem({
name = 'origen_compass',
label = 'Magic Compass',
weight = 150,
})Devolve false juntamente com uma cadeia de erro quando:
data não existe ou não tem name ('invalid_item_data').'item_not_found').RemoveCustomItem(name) → booleanElimina um item da base de dados e do inventário de todos os jogadores. Dispara um evento interno de sincronização para que os clientes descartem as referências em cache.
exports.origen_inventory:RemoveCustomItem('origen_compass')Esta ação é destrutiva. O item é removido de todos os inventários ativos e da tabela origen_customitems.
Os pontos do mundo mostram locais interativos no mapa e reagem a eles. É com eles que funcionam os stashes, as lojas, as mesas de crafting, os drops e qualquer ponto personalizado que registes.
CreateWorldPoint(pointId, pointData, pointType) → void (cliente)Regista um único ponto em tempo de execução.
exports.origen_inventory:CreateWorldPoint('my_lab_table', {
label = 'Underground Lab',
location = vector3(2541.92, 4684.31, 34.05),
-- marker = { type = 27, size = vector3(0.3, 0.3, 0.3), color = vector4(255, 0, 0, 150) },
-- sprite = { enabled = true, icon = 'lucide:flask-conical' },
}, 'crafting')RemoveWorldPoint(pointId) → void (cliente)Remove um ponto a partir do seu id.
SetWorldPointEnabled(pointId, enabled) → void (cliente)Ativa ou desativa um ponto existente sem o remover.
CreateBatchPoints(pointsData, pointType) → void (cliente)Regista vários pontos de uma só vez.
exports.origen_inventory:CreateBatchPoints({
['stash_1'] = { label = 'Stash 1', location = vector3(...) },
['stash_2'] = { label = 'Stash 2', location = vector3(...) },
}, 'stash')ClearPoints(pointType) → void (cliente)Remove todos os pontos de um tipo.
RefreshAllPoints(pointType) → void (cliente)Recarrega todos os pontos de um tipo. É útil depois de alterares as permissões de job do jogador.
GetPoints(pointType) → table (cliente)Devolve a lista de pontos de um tipo.
GetPointCount(pointType) → number (cliente)Devolve o número de pontos registados de um tipo.
HasPoint(pointId) → boolean (cliente)Devolve true se existir um ponto com esse id.
RegisterPointType(pointType, config) → void (cliente)Regista um tipo de ponto totalmente novo, com o seu próprio sprite, marcador e hooks. Usa-o quando quiseres adicionar uma categoria nova ao lado de stash, shop, crafting e drop.
LoadPointType(pointType) → void (cliente)Recarrega a configuração de um tipo de ponto.
GetWorldPointManager() → table (cliente)Devolve o objeto gestor de pontos subjacente. Apenas para utilização avançada.
O helper SQL em bridge/sql.lua disponibiliza funções independentes do framework que todos os subsistemas internos utilizam. Normalmente não precisas de o usar diretamente, mas o código-fonte não está ofuscado (fica fora do âmbito de escrow_ignore) e os teus próprios scripts podem encapsulá-lo.