Comandos#
Crafting Creator registra un comando para el staff. Los jugadores no necesitan ninguno: los bancos se abren acercándose a ellos.
Comando | Dónde | Descripción |
|---|---|---|
| En el juego | Abre el creador: la lista de bancos creados en el juego, con crear, editar y eliminar. Asignado a |
La tecla es un key mapping de FiveM, así que cada jugador puede reasignarla en Settings → Key Bindings → FiveM. Cambiar Config.OpenCreatorKey solo cambia la tecla por defecto para los jugadores que nunca han tenido el mapping.
Comandos de depuración#
Con Config.Debug = true, existen algunos comandos de cliente más para ajustar cómo se ve un banco. Ninguno guarda nada — copia los valores que te gusten en config/main.lua.
Comando | Descripción |
|---|---|
| Con un banco abierto, mueve la cámara y el ítem expuesto respecto al prop del banco. Los seis números son los vectores |
| Coloca la cámara de exhibición en el primer banco de |
| Cambia el foco de luz sobre el banco. |
| Mueve el foco de luz y el punto al que apunta. |
| Previsualiza un tinte de arma en el arma expuesta. |
El modo de depuración también registra comandos de prueba para desarrolladores en el servidor que escriben directamente en
crafting_queue, e imprime cada acción en la consola. Úsalo en un servidor de pruebas y manténConfig.Debug = falseen producción.
Hooks del servidor#
Crafting Creator no tiene exports de jugabilidad; los scripts se conectan a él desde el servidor, mediante cuatro hooks en server/custom/hooks.lua y los eventos más abajo. Los hooks son donde un script de habilidades o ventajas cambia un crafteo — un crafteo más rápido para un jugador hábil, un material ahorrado, un ítem extra — y el lugar seguro para otorgar su propia XP. Un error dentro de un hook se captura y se imprime; nunca rompe el crafteo.
ModifyCraft — cambia la duración, los materiales, la producción o la XP
Se ejecuta cada vez que un crafteo está a punto de empezar, y también cuando se muestra la lista de recetas (data.preview = true), para que la ventana muestre el tiempo y los materiales modificados. Devuelve una tabla solo con lo que quieras cambiar, o nil para la receta tal como está escrita.
function CraftingHooks.ModifyCraft(source, data)
-- data.tableId, data.itemName, data.amount requested amount
-- data.duration seconds per item
-- data.ingredients TOTAL materials for this craft { iron = 20, ... }
-- data.earn, data.price, data.level
-- data.preview true while the list is shown, nothing taken yet
-- data.mode 'queue' | 'proximity'
-- your skill script's own export
local perk = exports['my-skills']:GetLevel(source, 'crafting') or 0
if perk < 5 then return end
return {
duration = math.floor(data.duration * 0.8), -- 20% faster
ingredients = { -- one iron saved
iron = math.max(0, (data.ingredients.iron or 0) - 1),
},
outputAmount = not data.preview and data.amount + 1 or nil, -- one extra
}
endCampo devuelto | Regla |
|---|---|
| Segundos por ítem, número entero, 0 o más. |
| Totales de todo el crafteo. Solo pueden bajar, nunca superar la receta; los ingredientes que omitas se quedan como están. |
| Ítems entregados. Nunca por debajo de la cantidad solicitada. Si el inventario no tiene espacio para el extra, se entrega la cantidad solicitada. |
| XP de crafteo por ítem, 0 o más. |
Los límites se aplican después de que se ejecute tu hook, así que un error nunca puede hacer que un crafteo cueste más que la receta ni que entregue menos de lo pagado.
OnCraftStarted
Después de cobrar el dinero y los materiales, con el crafteo en marcha.
function CraftingHooks.OnCraftStarted(source, payload)
-- payload.queueId, payload.tableId, payload.item, payload.amount,
-- payload.outputAmount, payload.duration, payload.ingredients, payload.mode
endOnCraftCollected — el lugar seguro para otorgar XP
Solo después de que el ítem esté en el inventario del jugador y se consuma la entrada de la cola o la sesión de proximidad. Nunca se dispara por una cancelación, un reembolso, una entrega fallida o un segundo clic en el mismo ítem.
function CraftingHooks.OnCraftCollected(source, payload)
-- payload.amount items delivered (with any bonus)
-- payload.requestedAmount items the player asked for
-- payload.earn crafting XP awarded
exports['pn-skills']:AddXp(source, 'crafting', payload.amount)
endOnCraftCancelled
Un crafteo por proximidad que terminó sin entregar. Nunca otorgues XP aquí.
function CraftingHooks.OnCraftCancelled(source, payload)
-- payload.item, payload.amount, payload.reason, payload.mode
endEventos del servidor#
Los mismos momentos también se disparan como eventos de servidor, para que otro recurso pueda escucharlos sin tocar los archivos de Crafting Creator:
Evento | Argumentos | Cuándo |
|---|---|---|
|
| Ha empezado un crafteo. |
|
| Se entregó un ítem. El evento desde el que otorgar XP. |
|
| Se canceló o reembolsó un crafteo por proximidad. |
|
| Se está preparando un crafteo, después de que se ejecute |
-- server side of any resource
AddEventHandler('qs-crafting:server:craftCollected', function(source, payload)
if payload.item == 'weapon_pistol' then
print(('%s crafted %d pistol(s) at bench %s'):format(
GetPlayerName(source), payload.amount, payload.tableId))
end
end)Los argumentos que se pasan a otro recurso son copias. Escuchar
modifyCraftdesde fuera te dice cómo será un crafteo, pero cambiarmodsahí no tiene efecto — para cambiar un crafteo, usaCraftingHooks.ModifyCraft.
El payload#
Campo | Significado |
|---|---|
| El número de la entrada de la cola en el modo cola; un string de id de sesión en el modo proximidad. |
| El banco: un número para los bancos creados en el creador, el string |
| El nombre del ítem que se craftea. |
| Solicitada al empezar y al cancelar; entregada al recoger. |
| Producción prevista al empezar; la solicitud original al recoger. |
| Al empezar: segundos por ítem y los materiales realmente retirados. |
| Al recoger: la XP de crafteo otorgada. |
|
|
| Al cancelar — ver más abajo. |
Leer el nivel de crafteo de un jugador#
El nivel de cada jugador se guarda en un state bag replicado, crafting_skill, legible desde cualquier recurso en ambos lados — útil para un trabajo que solo contrata a crafteadores hábiles, o una tienda que muestra el nivel:
-- server
local skill = Player(source).state.crafting_skill
-- { level = 7, xp = 120, xpToNextLevel = 1139 }
if skill and skill.level >= 10 then
-- ...
end
-- client
local skill = LocalPlayer.state.crafting_skillSe establece cuando el jugador carga y se actualiza cada vez que gana XP. Trátalo como de solo lectura: el nivel se guarda a partir de la propia XP de Crafting Creator, así que escribir en el state bag desde otro script no se almacena.
Motivos de cancelación#
payload.reason en craftCancelled indica por qué un crafteo por proximidad no entregó. En todos los casos, el reembolso de Config.CraftingProgression.CancelRefund ya se ha entregado.
Motivo | Significa |
|---|---|
| El jugador canceló el círculo de progreso. |
| Se alejó más de |
| El crafteo terminó pero el ítem no cabía en su inventario. |
| Salió del servidor a mitad del crafteo. |
|
|



