Customization
One file decides everything you can change: config.lua. The rest is the app’s screens and the escrowed logic.
Which file decides what
Section titled “Which file decides what”| File | What it decides | Open to edit |
|---|---|---|
config.lua | Framework, image path, expiry, payments, the pawn shop location, marker, blip, clerk, blacklist, every notification text, the app’s name | Yes |
pawnshop.sql | The three tables, imported once | Yes |
web/index.html, web/styles.css, web/script.js | The app’s screens, layout and labels | — |
web/assets/pawn.png | The app icon | Yes |
web/assets/fries.png | The picture shown when an item has no image | Yes |
client/main.lua, server/main.lua | The logic | Escrowed |
There is no bridge folder and no locales folder: the framework is one option below, and the text lives in config.lua.
General
Section titled “General”| Option | What it does | Default |
|---|---|---|
Config.Framework | "esx" or "qb", lower case. On QBox, use "qb" — QBox runs QBCore resources through its compatibility layer | "esx" |
Config.InventoryImagePath | The folder item pictures are read from, as resource/folder/. For qb-inventory, "qb-inventory/html/images/" | "ox_inventory/web/images/" |
Config.Expire | Days an offer stays up. Changing an offer’s price starts the count again | 7 |
Payments
Section titled “Payments”| Option | What it does | Default |
|---|---|---|
Config.Bank | true: buyers pay from their bank and sellers cash out to their bank. false: both use the item in Config.Money | true |
Config.Money | The inventory item used as money when Bank is off — money, black_money or your own | "money" |
With Bank off, the money has to be an inventory item, which is how ox_inventory keeps cash. On ESX’s own inventory and on QBCore, cash is an account rather than an item, so keep Config.Bank = true there.
Money from a sale does not reach the seller directly. It is added to their Pending balance in the app, and they move it out with the transfer button.
Selling at the counter
Section titled “Selling at the counter”| Option | What it does | Default |
|---|---|---|
Config.RequireLocation | true: creating and buying offers has to be finished at the pawn shop | false |
Config.PawnShopLocation | Where the pawn shop is: x, y, z and the clerk’s heading | 412.17, 315.11, 103.13, heading 194.62 |
Config.InteractionDistance | How close, in metres, the player must be to press E. The server checks it too | 1.0 |
Config.Marker | The marker at the door: Type, Scale (x, y, z) and Color (r, g, b, a) | Type 20, dark blue-grey |
Config.Blip | The route blip: Sprite, Color, Scale | 480, 32, 1 |
Config.NPC | The clerk’s ped Model and the hand-off animation (Dict and Name) | a_m_m_business_01, mp_common / givetake1_a |
How it plays with RequireLocation on: the player fills in the offer or taps buy, the phone sets a route to the pawn shop, and the marker appears when they are within 20 metres. Pressing E at the marker brings the clerk out for the hand-off, and the trade goes through.
The blip and marker only exist while a player has something to finish there; there is no permanent blip on the map. With RequireLocation off, none of this is used.
Config.Blip.Name is not used for the blip’s label — that comes from Config.Messages.blip_name.
Blacklist
Section titled “Blacklist”Config.BlackList is a list of item names that can never be listed. They are left out of the item picker, refused by the server, and any existing offer for one is removed from the board — with its items — the next time someone opens the app. Shipped with burger and weapon_appistol as examples.
Text and language
Section titled “Text and language”There is no locales folder. All the text you can change is in config.lua, in English:
| Option | What it holds |
|---|---|
Config.locales.en.app_name | The app’s name on the phone, and the title of its notifications |
Config.locales.en.app_description | The line under it in the App Store |
Config.Messages | Every notification: offer created, purchased and deleted, missing fields, failures, “go to the pawn shop”, the E prompt and the blip name |
To play in another language, translate those strings in place. A few server answers — “Insufficient items”, “Inventory full”, “This item cannot be listed for sale”, “You do not own this offer” and similar — are fixed in the escrowed server file and stay in English.
On ESX, notifications arrive as lb-phone notifications from the app. On QBCore they use the framework’s own notification.
Item pictures
Section titled “Item pictures”The app shows each item as <Config.InventoryImagePath><item name>.png, read directly from your inventory resource. If a picture is missing, web/assets/fries.png is shown instead; replace that file to change the fallback.