# F.A.Q > Frequently asked questions for ML Skills Category: SKILLS · Source: https://miciomods.it/docs/ml-skills-faq · Last updated: 2026-07-28 ## Setup **Does ML Skills require a specific framework?** No. It runs on QBox, QBCore, ESX and standalone through `ml_bridge`. **Where are skill trees stored?** In the `ml_skills_trees` MySQL table, one row per category, versioned. Edits made in the in-game editor save with `version + 1`. The default trees shipped with the resource seed the table on first boot only, subsequent boots load the highest-version row per category. **How do players open the UI?** With `/skills` or the `J` key by default. Both are configurable through `Config.OpenCommand` and `Config.OpenKey`. ## Editor **How do I open the in-game tree editor?** The current player needs the permission level set in `Config.AdminPermission.level` (default `'supervisore'`). Open the UI with `/skills`, switch to admin mode from the header, then enter the editor for any category. **Do edits made in-game survive a restart?** Yes. The save action writes to `ml_skills_trees` with `INSERT ... ON DUPLICATE KEY UPDATE`, bumps the version counter, and the resource loads the highest-version row on boot. **Can I import skills from a Lua snippet?** Yes. The editor's Import button opens a modal where you paste a `Config.DefaultTrees`-style Lua snippet. The parser validates the fields, flags duplicates, adapts the other tree formats, and previews the diff before committing the skills into the current category canvas. Existing skill UIDs in the target tree are detected so re-imports do not create collisions. **Can I copy admin commands from the editor?** Yes. In the editor, click a skill and use the snippet button. The exact `exports.ml_skills:AddXp(...)` / `UnlockSkill(...)` / `AddPoints(...)` line lands in the clipboard with the right category UID and skill UID already filled in. ## Players **Can players reset their own skills?** Only when `Config.AllowReset = true`. By default the reset action is admin-only. **How does the passive XP system work?** The client watches the entries in `Config.XpListeners` and reports activity to the server at random intervals. The server checks the timing, confirms the ped has moved since the previous fire (when `XpListenerMovementCheck = true`), and enforces a per-minute cap plus a per-day cap per category. **Why does the locked skill image look grayscale?** `Config.LockedPreviewGrayscale = true` desaturates the hover image until the requirements are met. Set it to `false` to always show full color. ## Integration **How do other scripts award XP?** ```lua exports.ml_skills:AddXp('personal', 25, src) ``` The fourth argument is a free-form source string that appears in the webhook. **How do other scripts check an unlock?** ```lua if exports.ml_skills:HasUnlockedSkill('medical', 'reviveSpeed_3', src) then -- expose the advanced revive UI end ``` **Can an achievement trigger an event in another resource?** Yes. In the achievement editor, add a trigger with the target resource name and either the export name or the event name. When the player claims the achievement, the trigger fires server-side. **Can I lock a skill behind a job?** Yes. Add a `requiresJob = 'mechanic'` field in the skill definition. The lock helpers return a job-related reason in the tooltip. ## Prestige **How do I enable prestige?** Set `Config.PrestigeEnabled = true`. Each prestige tier adds `Config.PrestigeBonus` (default `0.10` = `+10%`) to all future XP gains in that category, up to `Config.MaxPrestige` tiers. **Does prestige survive a server restart?** Yes. Prestige is part of the `category_data` JSON column in `ml_skills_players` and persists across any restart. ## Performance **The canvas stutters with hundreds of nodes. What do I tune?** Drop `Config.PerformanceMode` to `'performance'`. Heavy animations pause and the LOD system renders simple nodes regardless of zoom. The `LodNodeThreshold` and `LodZoomThreshold` values control where the cutoff kicks in when `PerformanceMode = 'auto'`. ## Updates **How do I update the script?** 1. Download the latest from CFX Portal 2. Backup `shared/config.lua`, `server/config_server.lua`, the `locales/` folder, and any custom `open/` overrides 3. Replace every other file 4. Restart the resource Pre-1.0 installs migrate automatically on boot (dedupe of duplicate tree rows, addition of the `category` UNIQUE constraint, addition of the `idx_category_version` covering index). No manual SQL needed.