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 definir quais itens existem, quanto tempo cada fabricação leva, quais upgrades estão disponíveis e como o sistema se integra com o inventário e a economia do servidor. Com a configuração, você pode:
  • Definir quais itens podem ser fabricados e seus ingredientes;
  • Controlar o desgaste das peças primárias e o consumo de combustível;
  • Personalizar o visual das abas, categorias e interface;
  • Integrar com qualquer sistema de inventário e economia via funções de callback;
  • E muito mais.

Visão Geral

Este guia cobre todo o arquivo config/settings.lua. Objetivo:
  • Você entender exatamente o que cada opção muda.
  • Você saber como adicionar itens, ingredientes e upgrades.
  • Você configurar o sistema sem precisar entrar nos arquivos fonte.

Antes de Começar

  • Arquivo de configuração: config/settings.lua
  • Arquivo de banco/licença: config/main.lua
  • Depois de alterar a config: reinicie o resource (restart sqh_craftsystem)
  • Regra geral:
    • true = ativa a função
    • false = desativa a função

1) Config.tabs

Define as abas exibidas no topo do painel de crafting.
CampoTipoDescrição
idstringIdentificador interno da aba
labelstringTexto exibido na aba
iconstringCaminho do ícone da aba
Abas disponíveis por padrão:
  • craft — Fabricar Itens
  • maintenance — Manutenção (upgrades e melhorias da bancada)
Exemplo:
Config.tabs = {
    { id = "craft", label = "FABRICAR ITENS", icon = "assets/icon_34.png" },
    { id = "maintenance", label = "MANUTENÇÃO", icon = "assets/tabler_table_filled.png" },
}

2) Config.categories

Define as categorias de filtro exibidas na aba de fabricação.
CampoTipoDescrição
idstringIdentificador interno da categoria
labelstringTexto exibido no filtro
A categoria "all" é obrigatória e exibe todos os itens. Os demais IDs devem corresponder ao campo category de cada item em Config.craftItems. Exemplo:
Config.categories = {
    { id = "all",       label = "Todos" },
    { id = "weapons",   label = "Armamento" },
    { id = "items",     label = "Itens" },
    { id = "ammo",      label = "Munições" },
    { id = "tools",     label = "Ferramentas" },
    { id = "medical",   label = "Medicina" },
    { id = "electronics", label = "Eletrônicos" },
}

3) Config.hotbar

Configura o hotbar visual de slots de fabricação exibido na tela.
OpçãoO que muda
slotsNúmero total de slots exibidos no hotbar
slotSizeTamanho em pixels de cada slot
slotSpacingEspaçamento entre os slots
startXPosição X inicial do hotbar na tela
startYPosição Y inicial do hotbar na tela

4) Config.toolModal

Configura o modal de peças primárias (ferramentas da bancada).
OpçãoO que muda
wLargura do modal em pixels
hAltura do modal em pixels
slotSizeTamanho de cada slot de ferramenta
slotSpacingEspaçamento entre slots
maxSlotsNúmero máximo de slots de ferramentas exibidos

5) Config.refuelModal

Configura o modal de abastecimento de combustível da bancada.
OpçãoO que muda
wLargura do modal
hAltura do modal
pricePerUnitPreço cobrado por unidade de combustível
maxTankCapacidade máxima do tanque
getMoneyFunção chamada para verificar o saldo do player
takeMoneyFunção chamada para descontar dinheiro do player
Exemplo de integração com economia customizada:
Config.refuelModal = {
    pricePerUnit = 500,
    maxTank = 100,
    getMoney = function(player)
        return exports.sqh_economy:getMoney(player)
    end,
    takeMoney = function(player, amount)
        return exports.sqh_economy:takeMoney(player, amount)
    end,
}

6) Config.primaryTools

Lista as peças primárias exibidas no tooltip de ferramentas (somente visual, para referência ao jogador).
CampoTipoDescrição
idstring ou numberIdentificador da peça
namestringNome exibido
descriptionstringDescrição exibida no tooltip
iconstringCaminho do ícone
itemIDnumberID do item no inventário (usado para verificar posse)
Observação: Para o comportamento real das peças (desgaste, nível, tipo de cobrança), use Config.primaryParts.

7) Config.craftItems

Esta é a seção mais importante. Define todos os itens que podem ser fabricados. Cada item aceita:
CampoTipoDescrição
idnumberID único do item (não repita IDs)
namestringNome exibido no painel
descriptionstringDescrição exibida ao selecionar o item
categorystringCategoria (deve existir em Config.categories)
levelRequirednumberNível mínimo exigido do player para fabricar
pricenumberValor exibido (referência visual, cobrança real é pelos ingredientes)
craftTimenumberTempo de fabricação em segundos
iconstringCaminho do ícone do item
previewstringCaminho da imagem de preview
ingredientstableLista de ingredientes necessários

Campos de cada ingrediente

CampoTipoDescrição
idnumber ou stringID do item no inventário (aceita nome também)
namestringNome exibido
iconstringCaminho do ícone
requirednumberQuantidade necessária
Exemplo de item:
{
    id = 1,
    name = "Carabina",
    description = "Uma carabina compacta e precisa.",
    category = "weapons",
    levelRequired = 12,
    price = 15000,
    craftTime = 90,
    icon = "assets/items/special-carbine.png",
    preview = "assets/items/special-carbine_preview.png",
    ingredients = {
        { id = 201, name = "Ferro fundido",     icon = "assets/icon_5.png", required = 20 },
        { id = 202, name = "Aço reforçado",     icon = "assets/icon_6.png", required = 10 },
        { id = 203, name = "Pólvora",           icon = "assets/icon_7.png", required = 5  },
    },
},

8) Config.maintenanceItems

Define os itens de manutenção disponíveis na aba de manutenção. Existem dois tipos:

type = "consumable" — Item consumível (ex: Ácido Clorídrico)

CampoTipoDescrição
idstringID interno do item (ex: "item_15")
namestringNome exibido
descriptionstringDescrição
iconstringCaminho do ícone
levelRequirednumberNível mínimo para comprar
usesnumberQuantidade de usos fornecidos
pricenumberPreço de compra
badgestringTexto do badge exibido no card (ex: "20 usos")
accelerate.percentagenumberChance (%) de ativar o efeito a cada craft
accelerate.craftTimePercentnumberPercentual de redução no tempo de craft quando ativado
effectstableEfeitos visuais exibidos no card
getMoneyfunctionFunção para verificar saldo do player
takeMoneyfunctionFunção para descontar dinheiro do player

type = "upgrade" — Melhoria permanente (ex: Núcleo de Processamento, Motor Extra)

CampoTipoDescrição
idstringID interno
namestringNome exibido
descriptionstringDescrição
iconstringCaminho do ícone
levelRequirednumberNível mínimo para comprar
pricenumberPreço de compra
badgestringTexto do badge (ex: "Melhoria")
effectstableEfeitos visuais exibidos no card
getMoneyfunctionFunção para verificar saldo
takeMoneyfunctionFunção para descontar dinheiro

Campos de effects (visual)

CampoTipoDescrição
labelstringNome do efeito
valueTextstringTexto do valor (ex: "+20%", "+01")
isProgressbooleanSe true, exibe barra de progresso
currentnumberValor atual da barra (quando isProgress = true)
maxValuenumberValor máximo da barra
colorstringCor da barra: 'success', 'danger', 'info'
Itens padrão e seus efeitos:
ItemEfeito
item_15 Ácido ClorídricoConsumível — chance de reduzir o tempo de craft. Cada compra adiciona uses ao consumable_boost da bancada.
item_14 Núcleo de ProcessamentoUpgrade — adiciona +1 slot de fabricação (slot_upgrade) à bancada permanentemente.
item_16 Motor ExtraUpgrade — adiciona +1 fabricação simultânea (parallel_upgrade) à bancada permanentemente.

9) Config.settings

Configurações gerais de texto e posicionamento da interface.
OpçãoO que muda
tableNameNome exibido como dono/grupo da bancada
tableTitleTítulo principal exibido no painel
tableDescriptionDescrição exibida abaixo do título
searchPlaceholderTexto de placeholder da barra de busca
prefixValuePrefixo exibido antes dos valores monetários (ex: "PV"PV 50.000)
craftsPerPartWearA cada quantos crafts uma peça primária perde 1 nível
renderTargetPosição e tamanho do render target 3D (preview do item)

renderTarget

CampoDescrição
xPosição X do render target na tela
yPosição Y do render target na tela
wLargura do render target
hAltura do render target

10) Config.purchaseModal

Configura o modal de confirmação de compra exibido na aba de manutenção.
OpçãoO que muda
wLargura do modal
hAltura do modal
titleTítulo do modal
descriptionTexto de confirmação
confirmTextTexto do botão de confirmar
cancelTextTexto do botão de cancelar

11) Config.craftTableSettings

Configura o comportamento físico das bancadas no mundo do jogo.
OpçãoO que muda
modelID do modelo 3D usado para a bancada
interactionKeyTecla para interagir com a bancada / recolher
closeKeyTecla para fechar o painel de crafting
markerSizeTamanho do marker invisível de colisão ao redor da bancada
previewColorCor do preview quando a posição é válida { r, g, b, a }
previewInvalidColorCor do preview quando a posição é inválida { r, g, b, a }
mapMarkDurationSegundos que o marcador da bancada fica no mapa quando ela já está spawnada
Exemplo:
Config.craftTableSettings = {
    model = 2116,
    interactionKey = "e",
    closeKey = "backspace",
    markerSize = 1.5,
    previewColor = { r = 100, g = 255, b = 100, a = 150 },
    previewInvalidColor = { r = 255, g = 100, b = 100, a = 150 },
    mapMarkDuration = 10,
}

12) Config.primaryParts

Define as peças primárias que a bancada precisa para funcionar. São 4 peças (slots fixos). Cada peça possui um campo dbField que define onde o nível é salvo no banco.
CampoTipoDescrição
dbFieldstringCampo no banco: primary_part_1 a primary_part_4
idstring ou numberIdentificador da peça
namestringNome exibido
descriptionstringDescrição
iconstringCaminho do ícone
takeTypestring'item' ou 'money' — como o player paga ao inserir a peça
moneyPricenumberPreço em dinheiro (somente se takeType = 'money')
moneyFunctions.getMoneyfunctionFunção para obter o saldo do player
moneyFunctions.takeMoneyfunctionFunção para descontar do player
itemIDnumberID do item no inventário (somente se takeType = 'item')
minLevelnumberNível mínimo da peça (normalmente 1)
maxLevelnumberNível máximo que a peça pode atingir
Como funciona o desgaste: A cada Config.settings.craftsPerPartWear fabricações, o sistema reduz o nível de uma peça primária em 1. Se qualquer peça chegar ao nível 0, a bancada para de funcionar até que o player insira novamente a peça. Exemplo de peça cobrada por item:
{
    dbField = "primary_part_1",
    id = "Broca",
    name = "Broca",
    takeType = 'item',
    itemID = 10,
    minLevel = 1,
    maxLevel = 6,
}
Exemplo de peça cobrada por dinheiro:
{
    dbField = "primary_part_2",
    id = 102,
    name = "Esquemas",
    takeType = 'money',
    moneyPrice = 1000,
    moneyFunctions = {
        getMoney = function(player) return getPlayerMoney(player) end,
        takeMoney = function(player, amount) return takePlayerMoney(player, amount) end,
    },
    minLevel = 1,
    maxLevel = 6,
}

13) Config.upgradeSettings

Define os limites mínimo, máximo e valor padrão de cada upgrade da bancada.
UpgradeMinMaxDefaultDescrição
fuel01000Combustível da bancada
consumable_boost0200Ácido clorídrico acumulado
slot_upgrade1141Slots de fabricação simultâneos
parallel_upgrade1141Fabricações paralelas permitidas
Valores fora do intervalo são automaticamente ajustados pelo sistema.

14) Config.permissions

Controla quem pode criar e gerenciar bancadas no jogo.
OpçãoO que controla
createLista de grupos ACL autorizados a usar /createcrafttable
managementLista de grupos ACL com acesso ao painel de gerenciamento (botão direito na bancada)
Exemplo:
Config.permissions = {
    create = { 'Console', 'Admin' },
    management = { 'Console', 'Admin', 'Moderador' },
}

15) Config.events

Esta seção conecta o Craft System ao inventário e economia do seu servidor. Todas as funções devem ser substituídas pelas chamadas do seu sistema.
FunçãoQuando é chamadaO que deve retornar
hasItemPlayer(player, itemID)Ao verificar se o player possui um itemtrue ou false
getHasQuantityItemPlayer(player, itemID, amount)Ao verificar a quantidade de um ingredientenumber (quantidade atual)
giveItemPlayer(player, itemID, amount)Ao entregar o item fabricado ao playertrue ou false
takeItemPlayer(player, itemID, amount)Ao consumir ingredientes do inventáriotrue ou false
getPlayerIdentifier(player)Para identificar o player nas verificações de ACLstring (nome da conta MTA)
Exemplo de integração com sqh_inventory:
Config.events = {
    hasItemPlayer = function(player, itemID)
        return exports.sqh_inventory:hasItem(player, itemID)
    end,
    getHasQuantityItemPlayer = function(player, itemID, amount)
        return exports.sqh_inventory:getHasQuantityItem(player, itemID, amount)
    end,
    giveItemPlayer = function(player, itemID, amount)
        return exports.sqh_inventory:giveItem(player, itemID, amount)
    end,
    takeItemPlayer = function(player, itemID, amount)
        return exports.sqh_inventory:takeItem(player, itemID, amount)
    end,
    getPlayerIdentifier = function(player)
        return getAccountName(getPlayerAccount(player))
    end,
}

16) Config.colors

Personaliza todas as cores da interface. Cada cor usa a função tocolor(r, g, b, a).
ChaveUso
primaryCor de destaque principal (roxo)
primaryDarkVariante escura do destaque
primaryBorderBorda com cor de destaque
textWhite / textWhite80 / textWhite60 / textWhite50Textos com diferentes opacidades
textDarkTexto sobre fundo claro
success / successBgVerde (progresso, sucesso)
danger / dangerAlt / dangerBgVermelho (erro, item em falta)
info / infoBgAzul (informações neutras)
bgDark / bgLight / bgLighter / bgProgressFundos do painel
borderLight / borderLighter / borderDividerBordas e divisores
lineWhite / lineGrayLinhas decorativas
lockedSlots bloqueados
btnBuyBotão de compra

17) Config.fonts

Define as fontes usadas na interface. Os valores são os nomes internos das fontes carregadas via meta.xml.
ChaveFonte carregada
jetbrains_mono_mediumJetBrainsMono-Medium
jetbrains_mono_boldJetBrainsMono-Bold
jetbrains_mono_extraboldJetBrainsMono-ExtraBold
jetbrains_mono_regularJetBrainsMono-Medium
roboto_condensed_regularRobotoCondensed-Regular
roboto_condensed_mediumRobotoCondensed-Medium
roboto_condensed_boldRobotoCondensed-Medium
tt_lakes_neue_trl_cnd_xbdTTExtraBold
tt_lakes_neue_trl_cnd_dbTTDemiBold
tt_lakes_neue_trl_cnd_mdTTDemiBold
Não é necessário alterar esta seção a menos que você substitua os arquivos de fonte nas assets/fonts/.

Boas Práticas

  • Altere uma seção por vez e teste no jogo.
  • IDs de Config.craftItems devem ser únicos — nunca repita o mesmo ID.
  • A categoria de cada item em Config.craftItems deve existir em Config.categories.
  • Em Config.events, nunca deixe as funções retornando valores fixos em produção — integre com seu inventário.
  • Para adicionar um novo item de manutenção, crie uma entrada em Config.maintenanceItems com um ID único e ajuste as funções getMoney/takeMoney.
  • Depois de salvar: restart sqh_craftsystem