F.A.Q

4 min readUpdated Today

Setup

Set Config.Language in shared/config.lua. See the locales/ folder.

shared/config.lua
1Config.Language = 'en'

Run /craftadmin (configurable via Config.Command). Access requires the Config.Admin.Permission framework group, or the ACE permission if Config.Admin.AcePermission is set. The panel has seven tabs: workstations, map, recipes, blueprints, settings, importer and model builder.

Bench types, bench locations, categories, recipes, blueprints and custom station models are saved in the database by the admin panel and survive restarts and updates. The config holds global behavior, ranges, features, queue rules, blueprint and portable-station defaults. When both define the same thing (fuel, durability, pickup rules, queue limits), the database value wins.

The admin panel's import tab scans your database for the crafting tables and imports categories, recipes, bench types and blueprints, marking entries that already exist. Other scripts are not supported by the importer.

Stations & Recipes

Open /craftadmin, create a workstation type in the workstations tab and pick a station model, then place a location for it, directly in 3D with the in-game placement mode (free move, surface snap or gizmo). Assign categories to the bench type, then build recipes in the recipes tab. Every save is pushed to players immediately.

Enable Config.Features.PortableStations and give players the ml_workstation item with metadata.stationType set to a bench type id, or bind a dedicated item to the bench type in the admin panel. Using the item starts a ghost-preview placement. Owners pick their station back up in DefaultPickupTimeOwner seconds; if the pickup rule allows it, others can steal one after a longer timer, and the theft is logged.

A recipe slot can accept any one of several items, iron or steel or scrap. In the recipe editor, drag ingredients into the same alternative group. At craft time the player's available option is used, the choice is pinned for that craft, and refunds return exactly what was consumed.

  • consume: The item is removed
  • degrade: A tool loses durability instead of being consumed. The most worn copy is drained first, and the recipe can remove it at zero
  • check: The item must be present but is never taken, licenses, special tools

Results in the same result group are rolled as one weighted-random pick per craft, one backpack color out of the whole palette, not all of them. Results outside any group roll independently with their own percentage, which is how byproducts are made. Output metadata supports random ranges, random list picks and probability buckets, generated fresh per item.

Both are optional per bench type, configured in the admin panel. Fuel benches hold a number of crafting seconds and accept consumable items, ml_fuel jerrycans, or both; a craft cannot start without enough fuel. Durability drains while crafting; at zero the station stops until repaired with the configured materials.

Only when Config.Queue.AllowSteal = true. Anyone at the bench can then collect another player's ready craft, and the action is written to the theft log. Disable it to make queues private; Config.Queue.SharedView separately controls whether other players' entries are visible at all.

Skills

With Config.ExternalSkills.Enabled = true, levels and skill checks are read from ml_skills and recipe XP is paid into it. A recipe can require a level, a category level or a specific unlocked skill, and can stay hidden until the skill is learned. XP routes to the ml_skills category resolved from the recipe's required skill or category mapping.

Four types, set per recipe in the editor and active while the bound skill is unlocked: time_reduction (faster crafting, capped at 90%), extra_xp, extra_quantity and ingredient_reduction. Several bonuses of the same type stack additively.

Yes. Set Config.ExternalSkills.Enabled = false and enable Config.Progression to use the built-in level system (global and per-category XP stored in the database), or leave both off and gate recipes with blueprints only.

When ml_crafting cannot resolve an ml_skills category for a recipe, it skips the XP and prints a yellow [ml_crafting][XP] line in the server console explaining why. Bind a required skill on the recipe, or map the category in Config.ExternalSkills.Mapping.PerCategory. XP is also logged once per queue entry, so a collected craft can never pay twice.

Updates

  • Download the latest version from the CFX Portal
  • Backup shared/config.lua, shared/config_models.lua, server/config_server.lua and the open/ folder
  • Replace all files, restore your backups, restart the resource

Benches, recipes, blueprints, queues and player progression live in the database and survive updates. Schema changes are applied automatically on start.