Customization
Almost everything about a quest — who gives it, what they say, what happens next — is built in the editor and saved in your database. The files are for the handful of things that are the same for every quest.
Which file decides what
Section titled “Which file decides what”| File | What it decides | Open? |
|---|---|---|
config.lua | Framework, language, how players talk to NPCs, dialog colour, /cancelquest, screenshots | Yes |
bridge/bridge_server.lua | Money, items, player data, callbacks, and the permission check | Yes |
bridge/bridge_client.lua | Notifications, help text, player data, and how a player is revived | Yes |
locales/*.lua | Every piece of text: editor, dialog window, notifications, webhook logs | Yes |
install.sql | The eight tables, imported once | Yes |
web/ | The editor, dialog window, minigame and progress bar (HTML, CSS, JS) | Readable |
client/, server/ | The quest engine | Escrowed |
client/game_data/*.lua | The lists behind the editor’s pickers: peds, cars, bones, animations, particles, sounds, screen effects | Escrowed |
config.lua
Section titled “config.lua”General
Section titled “General”| Option | What it does | Default |
|---|---|---|
Config.Framework | Which framework to talk to: 'esx' or 'qbcore'. Not detected on its own. On QBox, use 'qbcore' — QBox runs QBCore resources through its compatibility layer | 'esx' |
Config.Locale | The language of the editor, the dialog window and the notifications. See Languages | 'en' |
Config.Debug | Present in the file; this version prints nothing extra with it | true |
Talking to quest givers
Section titled “Talking to quest givers”| Option | What it does | Default |
|---|---|---|
Config.InteractionType | 'ox_target', 'qb-target' or 'drawtext' (3D text and a key) | 'ox_target' |
Config.InteractionDistance | How close, in metres, a player must be to talk to an NPC | 2.5 |
Config.InteractionKey | The control used with 'drawtext', and by the Interact in Area node. 38 is E | 38 |
Config.ThemeColor | Accent colour of the dialog window: blue, pink, yellow, red, green, purple, orange, cyan, white or black | "purple" |
Cancelling a quest
Section titled “Cancelling a quest”| Option | What it does | Default |
|---|---|---|
Config.EnableCancelQuest | Registers a command that lets a player abandon their active quest | true |
Config.CancelQuestCommand | The command’s name, without the slash | "cancelquest" |
Cancelling clears the player’s saved progress for that quest and removes what it spawned.
Screenshots
Section titled “Screenshots”| Option | What it does | Default |
|---|---|---|
Config.ScreenshotBasic | Lets the Send Webhook node attach a screenshot when its screenshot box is ticked. Needs screenshot-basic running | true |
Commands and permissions
Section titled “Commands and permissions”| Command | Who can use it | What it does |
|---|---|---|
/questcreator | Anyone with the ACE mic_questcreator.open | Opens the Quest & Event Creator |
/cancelquest | Every player, while Config.EnableCancelQuest is on | Abandons the active quest. Renamed by Config.CancelQuestCommand |
The same permission guards everything the editor saves, deletes, imports and exports — the check is made on the server, not only when the menu opens. Grant it with an add_ace line to an identifier or a group; the check itself lives in Bridge.Server.IsPlayerAllowed in bridge/bridge_server.lua if you would rather tie it to your own admin system.
Languages
Section titled “Languages”Thirteen files ship in locales/: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar, nl and cs. Set Config.Locale to the file name without .lua.
Adding a language:
- Copy
locales/en.luaand name the copy after your language code, for examplelocales/pl.lua. - Inside it, change the table name from
'en'to your code, and translate the text on the right of each line. Leave the keys on the left and any%salone. - Add your file to
shared_scriptsinfxmanifest.lua, with the other locale files and aboveconfig.lua. - Set
Config.Localeto your code, thenrefreshand restart.
A key your file is missing shows up in game as Translation [xx][key] does not exist, which tells you exactly which line to add.
What NPCs say, quest titles and notification messages are not in the locale files — you type those into the editor, in whatever language you like.
The bridge
Section titled “The bridge”Two open files sit between the quest engine and the rest of your server.
bridge/bridge_server.lua
| Function | What it is for |
|---|---|
Bridge.Server.Initialize | Gets fmLib and the ESX or QBCore object when the resource starts |
Bridge.Server.RegisterServerCallback | Registers callbacks through ESX or QBCore |
Bridge.Server.GetPlayer, GetPlayerParams | A player through fmLib, and their identifier, name and job |
Bridge.Server.GetMoney, AddMoney, RemoveMoney | Money, through fmLib |
Bridge.Server.GetItem, AddItem, RemoveItem | Items, through fmLib, whichever inventory fmLib is talking to |
Bridge.Server.IsPlayerAllowed | Who may open and use the editor. Checks the ACE mic_questcreator.open |
bridge/bridge_client.lua
| Function | What it is for |
|---|---|
Bridge.Client.ShowNotification | Every notification. Replace the body to use your own notify resource |
Bridge.Client.ShowHelpNotification | The top-left help text |
Bridge.Client.GetPlayerData, IsPlayerLoaded | Player data, used by the Has Job and Is Night/Day checks |
Bridge.Client.TriggerServerCallback | Callbacks through ESX or QBCore |
Bridge.Client.RevivePlayer | Used by the death handler. Triggers esx_ambulancejob:revive on ESX or hospital:client:Revive on QBCore, then revives natively if the player is still dead |
Using another ambulance script? Change the event in Bridge.Client.RevivePlayer to the one your script listens for. Another notify resource? Change Bridge.Client.ShowNotification. Keep the function names — the engine calls them by name.
Exports
Section titled “Exports”Two client exports let another resource borrow the quest creator’s minigame and progress bar.
| Export | Arguments | What it does |
|---|---|---|
StartMinigame | difficulty (1–5), speed (1–5), rounds, callback | Opens the lockpick-style minigame. The callback receives true or false |
StartProgressBar | duration in milliseconds, label | Shows the built-in progress bar |
Call them on mic_questcreator from a client script.
Community events and exporting
Section titled “Community events and exporting”Community Events in the editor lists events other servers have shared; import one and it is added to your events like any other. The list is downloaded from GitHub, so your server needs outbound internet access for it to fill.
Export Event asks for a name, a description and an author, then writes the event to a JSON file inside the resource folder, in exports/. That folder does not ship with the resource — create an empty exports folder in mic_questcreator first, or the file lands in the resource’s root as export_<name>.json instead.