Pular para o conteúdo principal

Resolva problemas comuns

Hero Dark

Sobre o sistema

A proposta do Craft System é unir flexibilidade, persistência e controle total sobre as bancadas de crafting do seu servidor. O dono do servidor tem poder absoluto para criar bancadas fixas no mapa, conceder bancadas para jogadores, gerenciar upgrades e integrar com qualquer sistema de inventário. Com as funções exportadas, você pode:
  • Criar e deletar bancadas de crafting diretamente por script;
  • Forçar o spawn de uma bancada em posição fixa ou deixar o player posicioná-la com preview;
  • Gerenciar upgrades como combustível, slots de fabricação e fabricação paralela;
  • Consultar todas as mesas ativas, buscar uma mesa por objeto ou por marker;
  • Integrar o sistema de craft com empregos, missões, sistemas VIP e muito mais.

Funções Exportadas

Server-side

createCraftTable

Side: server Syntax
local id = exports['sqh_craftsystem']:createCraftTable(position, permissions, upgrades, configId)
Required arguments
  • position (table): posição e rotação da bancada.
    • x (number): coordenada X
    • y (number): coordenada Y
    • z (number): coordenada Z
    • rotX (number): rotação X (padrão 0)
    • rotY (number): rotação Y (padrão 0)
    • rotZ (number): rotação Z (padrão 0)
    • interior (number): interior do jogo (padrão 0)
    • dimension (number): dimensão do jogo (padrão 0)
Optional arguments
  • permissions (table): lista de grupos ACL que podem usar a bancada. Exemplo: {'Admin', 'Vip'}. Se vazio ou nil, todos os players podem usar.
  • upgrades (table): upgrades iniciais da bancada.
    • fuel (number): combustível inicial (padrão 0)
    • consumable_boost (number): ácido clorídrico inicial (padrão 0)
    • slot_upgrade (number): slots de fabricação iniciais (padrão 1)
    • parallel_upgrade (number): fabricações paralelas iniciais (padrão 1)
    • primary_part_1 a primary_part_4 (number): nível inicial das peças primárias (padrão 1)
  • configId (string): ID fixo para identificar a bancada entre restarts. Recomendado para bancadas default.
Return
  • number com o ID da bancada criada em sucesso.
  • false em falha.
Example
-- SERVER-SIDE
addCommandHandler('criarbanccada', function(player, cmd)
    local px, py, pz = getElementPosition(player)

    local id = exports['sqh_craftsystem']:createCraftTable(
        { x = px, y = py, z = pz, rotZ = 0 },
        { 'Admin' },
        { fuel = 50, slot_upgrade = 2 },
        'bancada_centro'
    )

    if id then
        outputChatBox('Bancada criada com ID: ' .. id, player, 0, 255, 0)
    else
        outputChatBox('Falha ao criar bancada', player, 255, 0, 0)
    end
end)

deleteCraftTable

Side: server Syntax
local success, reason = exports['sqh_craftsystem']:deleteCraftTable(id)
Required arguments
  • id (number): ID da bancada a deletar.
Return
  • true em sucesso.
  • false, string em falha (bancada não encontrada ou tipo inválido).
Observação
  • Apenas bancadas do tipo 'default' podem ser deletadas por este export. Bancadas de player são gerenciadas pelo próprio sistema.
Example
-- SERVER-SIDE
addCommandHandler('deletarbancada', function(player, cmd, id)
    if not id then
        outputChatBox('Use: /deletarbancada <id>', player)
        return
    end

    local success, reason = exports['sqh_craftsystem']:deleteCraftTable(tonumber(id))
    outputChatBox(success and 'Bancada deletada' or ('Erro: ' .. tostring(reason)), player)
end)

addCraftTableUpgrade

Side: server Syntax
local success, reason = exports['sqh_craftsystem']:addCraftTableUpgrade(craftTableId, upgrade, value)
Required arguments
  • craftTableId (number): ID da bancada.
  • upgrade (string): nome do upgrade. Valores aceitos:
    • 'fuel' — combustível
    • 'consumable_boost' — ácido clorídrico (boost consumível)
    • 'slot_upgrade' — slots de fabricação
    • 'parallel_upgrade' — fabricações simultâneas
    • 'primary_part_1' a 'primary_part_4' — nível das peças primárias
  • value (number): novo valor do upgrade. Será limitado automaticamente ao min/max configurado em Config.upgradeSettings.
Return
  • true em sucesso.
  • false, string em falha.
Example
-- SERVER-SIDE — Abastecer uma bancada com 80 de combustível
exports['sqh_craftsystem']:addCraftTableUpgrade(1, 'fuel', 80)

-- Desbloquear 3 slots de fabricação
exports['sqh_craftsystem']:addCraftTableUpgrade(1, 'slot_upgrade', 3)

-- Adicionar ácido clorídrico (boost)
exports['sqh_craftsystem']:addCraftTableUpgrade(1, 'consumable_boost', 10)

forceCraftTableSpawn

Side: server Syntax
local success, reason = exports['sqh_craftsystem']:forceCraftTableSpawn(id)
Required arguments
  • id (number): ID da bancada a spawnar.
Return
  • true em sucesso.
  • false, string em falha (bancada não encontrada ou já spawnada).
Observação
  • Força o spawn na posição salva no banco de dados, sem exigir confirmação do player. Ideal para bancadas do tipo 'default'.
Example
-- SERVER-SIDE
addEventHandler('onResourceStart', resourceRoot, function()
    -- Força spawn de uma bancada default ao iniciar o resource
    local success = exports['sqh_craftsystem']:forceCraftTableSpawn(1)
    if not success then
        outputDebugString('[CraftSystem] Falha ao spawnar bancada 1')
    end
end)

spawnCraftTableWithPreview

Side: server Syntax
local success = exports['sqh_craftsystem']:spawnCraftTableWithPreview(id, player)
Required arguments
  • id (number): ID da bancada.
  • player (player): player que receberá o modo preview para posicionar a bancada.
Return
  • true se o modo preview foi iniciado com sucesso.
  • false se falhou (bancada não encontrada, player não é o dono, ou bancada já está spawnada).
Comportamento
  • Se a bancada já estiver spawnada, o sistema marca a posição dela no mapa do player e retorna false.
  • Se o preview for cancelado pelo player, a bancada é automaticamente deletada.
  • Ao confirmar, a bancada é spawnada na posição escolhida.
Example
-- SERVER-SIDE
addCommandHandler('posicionarbancada', function(player, cmd, id)
    if not id then
        outputChatBox('Use: /posicionarbancada <id>', player)
        return
    end

    local success = exports['sqh_craftsystem']:spawnCraftTableWithPreview(tonumber(id), player)
    if not success then
        outputChatBox('Não foi possível iniciar o posicionamento', player, 255, 150, 0)
    end
end)

spawnWithPreview

Side: server Syntax
local success = exports['sqh_craftsystem']:spawnWithPreview(id, player)
Alias direto de spawnCraftTableWithPreview. Mesmos parâmetros, retorno e comportamento. Example
-- SERVER-SIDE
exports['sqh_craftsystem']:spawnWithPreview(craftTableId, player)

spawnWithPreviewByOwner

Side: server Syntax
local success = exports['sqh_craftsystem']:spawnWithPreviewByOwner(player)
Required arguments
  • player (player): player cuja bancada será buscada e iniciará o preview.
Return
  • true se o preview foi iniciado.
  • false se o player não possui bancada, ou se ela já está spawnada (nesse caso marca no mapa).
Observação
  • Busca automaticamente a bancada do tipo 'player' que pertence ao owner com o mesmo nome do player.
  • Útil para sistemas onde o player recebe a bancada como item e precisa posicioná-la sem saber o ID.
Example
-- SERVER-SIDE — Chamado quando player usa um item de bancada no inventário
addEvent('inventory:usarBancada', true)
addEventHandler('inventory:usarBancada', root, function()
    local player = client
    exports['sqh_craftsystem']:spawnWithPreviewByOwner(player)
end)

getSpawnedCraftTables

Side: server Syntax
local tables = exports['sqh_craftsystem']:getSpawnedCraftTables()
Return
  • table indexada por craftTableId com os dados de spawn no formato:
{
    [1] = { object = element, marker = element },
    [2] = { object = element, marker = element },
    ...
}
Example
-- SERVER-SIDE
addCommandHandler('listarbancadas', function(player)
    local tables = exports['sqh_craftsystem']:getSpawnedCraftTables()
    local count = 0
    for id, _ in pairs(tables) do
        count = count + 1
        outputChatBox('Bancada ativa: ID ' .. tostring(id), player)
    end
    outputChatBox('Total de bancadas spawnadas: ' .. count, player)
end)

getCraftTableByObject

Side: server Syntax
local craftTable = exports['sqh_craftsystem']:getCraftTableByObject(object)
Required arguments
  • object (element): elemento do tipo object que representa a bancada no mundo.
Return
  • table com os dados da bancada em sucesso.
  • nil se não encontrar.
Tabela retornada
CampoTipoDescrição
idnumberID interno da bancada
typestring'default' ou 'player'
ownerstringNome do dono (ou vazio para default)
pos_x/y/znumberPosição no mundo
rot_x/y/znumberRotação
interiornumberInterior
dimensionnumberDimensão
permissionsstringJSON de ACLs
fuelnumberCombustível atual
consumable_boostnumberÁcido clorídrico atual
slot_upgradenumberSlots de fabricação
parallel_upgradenumberFabricações paralelas
primary_part_1..4numberNível de cada peça primária
is_spawnednumber1 se spawnada, 0 se não
Example
-- SERVER-SIDE
addEventHandler('onElementClicked', root, function(button, state, player)
    if button ~= 'right' or state ~= 'down' then return end
    if getElementType(source) ~= 'object' then return end

    local craftTable = exports['sqh_craftsystem']:getCraftTableByObject(source)
    if craftTable then
        outputChatBox('Bancada ID: ' .. craftTable.id .. ' | Combustível: ' .. craftTable.fuel, player)
    end
end)

getCraftTableByMarker

Side: server Syntax
local craftTable = exports['sqh_craftsystem']:getCraftTableByMarker(marker)
Required arguments
  • marker (element): elemento do tipo marker associado a uma bancada.
Return
  • table com os dados da bancada em sucesso (mesma estrutura de getCraftTableByObject).
  • nil se não encontrar.
Example
-- SERVER-SIDE
addEventHandler('onMarkerHit', root, function(hitElement, matchingDimension)
    if not matchingDimension then return end
    if getElementType(hitElement) ~= 'player' then return end

    local craftTable = exports['sqh_craftsystem']:getCraftTableByMarker(source)
    if craftTable then
        outputChatBox('Você está próximo da bancada ID: ' .. craftTable.id, hitElement)
    end
end)

Observações

  • Todas as exports exigem que o resource já tenha sido iniciado e a licença validada.
  • As funções acima seguem exatamente o que está exportado no meta.xml do sqh_craftsystem.
  • Upgrades têm limites definidos em Config.upgradeSettings — valores fora do intervalo são ajustados automaticamente.
  • Bancadas do tipo 'player' não podem ser deletadas via deleteCraftTable; elas são gerenciadas pelo próprio flow do sistema.