Configuration
All settings live in config.lua. Customer personalities and dialogue lines are in shared/customers.lua, and texts are in shared/locale.lua. After making changes, a restart ns-locksmith is all you need.
Rule: all money, XP and pricing decisions are calculated on the server from these values. The client can never set any amount.
Table of Contents
- General & bridges
- Job & feature toggles
- Database
- Admin & security
- License
- Progression: levels, reputation, perfect jobs
- Skill tree
- Tools, durability, workshop
- Contracts & achievements
- Events
- Conduct record
- Career paths & mastery
- Items, locations, blips
- Service van
- Jobs
- Vehicles & doors
- Economy
- Difficulty & minigames
- Police
- User interface
- Customers (
shared/customers.lua) - Texts (
shared/locale.lua) - Balance presets
General & bridges
| Setting | Default | Description |
|---|---|---|
Config.Debug | false | Verbose console logging; /lsdebug only works while this is enabled |
Config.Locale | 'tr' | 'tr' or 'en' (including the NUI) |
Config.Framework | 'auto' | 'qbx', 'qb' or 'esx' |
Config.Inventory | 'auto' | 'ox', 'qb' or 'esx'. qb derivatives (ps/lj/qs) are detected automatically |
Config.Target | 'auto' | 'ox' or 'qb' |
Config.Notify | 'framework' | If set to 'ox_lib', notifications are shown through ox_lib |
Job & feature toggles
| Setting | Default | Description |
|---|---|---|
Config.JobName | 'locksmith' | Job name in your framework |
Config.RequireJob | false | If true, only players with Config.JobName can work. By default access comes from the tablet item (Config.Items.RequireTablet) |
Config.RequireOnDuty | false | Jobs can only be taken while on duty (qb / qbx) |
Config.JobGrades | — | Reference only. The script does not read it; it is meant to be pasted into your framework |
Config.MaxJobDistance | 2500.0 | Automatic calls prefer spots within this distance; if none are free, any spot is picked (m) |
Feature toggles:
| Toggle | What happens when disabled |
|---|---|
EnablePoliceDispatch | No police calls are sent for alarms or suspicious situations |
EnableNegotiation | Negotiation is disabled; whatever offer is made, the job is agreed at the calculated fair price |
EnableReputation | Reputation never changes (/locksmithrep has no effect either); tiers no longer affect price or tips, job gates are removed and premium customers never appear |
EnableSkillTree | The skills menu and tab are hidden and no new points can be spent; ranks already purchased keep their effect |
EnableDailyContracts / EnableBusinessContracts | The corresponding contracts are not generated. The weekly master contract is tied to the daily toggle |
EnableAchievements | Achievements and their rewards are disabled |
EnableRandomEvents | Jammed lock, discount request, dropped tool and neighbor events are disabled |
EnableLeaderboard | The tablet leaderboard and rankings are disabled |
EnableMultiplayerJobs | Reserved; multiplayer jobs are not implemented yet (leave it false) |
Database
| Setting | Default | Description |
|---|---|---|
AutoMigrate | true | The schema and any missing indexes are applied on startup |
AutosaveInterval | 300 | Interval for batch-saving modified profiles (s) |
SaveOnProgression | true | The player row is written immediately whenever XP, level or reputation changes |
HistoryRetentionDays | 120 | How long job history is kept (0 = forever) |
AuditRetentionDays | 60 | How long the audit log is kept (0 = forever) |
ContractRetentionDays | 30 | Claimed / expired contract rows (0 = forever) |
Cleanup runs on startup and then every 24 hours.
Admin & security
Config.Admin:
| Setting | Description |
|---|---|
Ace | Admin ACE name (locksmith.admin) |
AllowFrameworkAdmins | Framework admins are also treated as authorized |
QBPermissions | qb permissions. On Qbox, ACEs with the same names are checked |
ESXGroups | ESX groups |
Config.Cooldowns (ms):
| Setting | Description |
|---|---|
Callback | Default cooldown for any callback that has no value of its own |
Profile | Profile request |
Interaction | Default cooldown for job actions |
Payment | Collecting payment |
Setting these values too low opens the door to spam.
Config.Security:
| Setting | Description |
|---|---|
MaxStrikes / StrikeDecay | Suspicious-event counter and its reset time |
DropOnMaxStrikes | Players who hit the limit are kicked. Default false: the event is only logged |
LogToDatabase | Warnings are written to the locksmith_audit_log table (at most 5 per player every 10 s) |
License
| Setting | Default | Description |
|---|---|---|
Prefix | 'LS' | License number prefix |
ValidDays | 30 | Real-world days (0 = never expires). Jobs cannot be taken with an expired license |
RenewPrice | 500 | Renewal fee. Can be started from the tablet's Settings, but you must be at HQ (within 10 m) |
DefaultCompany | 'Independent' | Company shown on the license card |
Renewal, reinstatement and career change fees are always charged to the bank account (not Shop.Account).
Progression: levels, reputation, perfect jobs
Config.Progression
| Setting | Description |
|---|---|
StartingReputation | Starting reputation for a new profile (20) |
MaxReputation | Reputation cap (100) |
SkillPointsPerLevel | Skill points earned per level |
MasteryXP | After level 10, 1 mastery rank every N XP (+1 point, +Mastery.Reward money) |
MaxXPPerGrant | Maximum XP that can be granted at once (except by admins). A safeguard against faulty oversized rewards |
Config.Levels: total XP required per level, the title, and the "unlocks" list shown on the tablet. The unlocks list is informational only. The actual locks come from the related settings:
- job type →
Jobs.Types[x].level - tool →
Tools[x].level - lock tier →
Jobs.MaxTierByLevel
Config.Reputation
Tiersdefines tiers by reputation. Each tier has:priceMultprice multipliertipMulttip multiplierfriendly: half of this value is added to the customer's starting satisfactionpremiumpremium customer chance
EmergencyMinRep,BusinessMinRepandPremiumMinRepare job type gates.- Premium customer settings:
PremiumPriceMultprice multiplier (×1.5)PremiumXPMultXP multiplier (×1.25)PremiumSatisfactionsatisfaction penalty (-10)BoardPremiumChancepremium chance on the job board
Config.PerfectJob
- All criteria must be met for a perfect job:
- fast:
OnSceneTime.base + perTier × (tier-1)seconds from arrival to unlock - no mistakes
- with the correct tool
- inspected, if the tier is ≥
RequireInspectionFromTier - satisfaction ≥
MinSatisfaction - legal (not a fake owner or a late emergency job)
- fast:
- Reward:
XP, a company bonus equal to theMoneyBonusshare of the payment, andRep.
Skill tree
Config.Skills.Branches contains 5 branches with 3 skills per branch. Each skill has:
maxRanknumber of rankslevelunlock levelrequiresprerequisite skill
Effects holds the per-rank effect values; the total effect is rank × value. ResetPrice is the fee for refunding all points at HQ.
| Skill | Effect per rank |
|---|---|
mech_speed | Pins 10% slower, time +10% |
mech_durability | Tool wear -20% |
mech_pins | Correct zones 10% wider |
elec_diag | +1 analysis level |
elec_access | No-tool efficiency on electronics 0.85 |
elec_circuit | Time +15% in all electronic minigames |
cs_negotiation | Negotiation tolerance +5% |
cs_tips | Tip amount +15% |
cs_charm | Starting satisfaction +4 |
em_access | Emergency jobs 2 levels earlier |
em_fast | Emergency time +15% |
em_xp | Emergency XP +15% |
pro_police | Dispatch chance -25%. At rank 2, NPC police are convinced by the license alone |
pro_business | Business jobs 2 levels earlier, pay +10% |
pro_premium | Premium chance +10% |
Tools, durability, workshop
Config.StarterEquipment: tools given to a new profile.
Config.Tools: fields per tool.
| Field | Meaning |
|---|---|
category | Tool type: picks, tension, inspection, electronic, drill, consumable, safe (safe), impression (key impressioning) |
maxDurability | Durability of a new tool |
efficiency | Scales minigame zones and time. 1.0 is normal; higher means easier |
successBonus | Unused (reference only) |
maxTier | Highest lock tier the tool is effective on |
level | Level required to purchase |
price | Shop price (0 = not sold) |
When adding a new tool, its category must appear in the tools list of the relevant lock types. The label comes from the label field.
Config.Durability: wear amounts.
PerUse: successful useMinorFailure: minor mistakeCriticalFailure: critical mistake- Only the
mech_durabilityskill reduces wear. Upgrades increase maximum durability.
Config.Shop
| Setting | Description |
|---|---|
Account | Account the payment is taken from |
Distance | How close you must be to the shop or workshop spot |
SellRate | Share returned when selling. 40% of the total spent, scaled by durability |
RepairRate, MinRepairPerPoint | Repair cost: max(Min, price / maxDurability × RepairRate) per durability point |
BrokenSurcharge | Extra multiplier for repairing a broken tool (×1.5) |
LowDurability | Warning threshold (25%). The tablet's "Maintenance needed" card uses it as well |
RepDiscount | Shop discount by reputation tier |
ConsumableStack | Maximum number of packs for consumables |
Upgrades, MinUpgradeBase | 3 upgrade levels. Each level has a price ratio, durability and efficiency gains, and an additional level requirement. For basic tools, the base price is MinUpgradeBase |
NoUpgrade | Tools that cannot be upgraded |
Items | Inventory items sold in the shop (toolkit) |
Contracts & achievements
Daily (Config.Contracts.Daily)
- General settings:
Count: number of daily contractsFreeRerolls: free rerollsLevelScale: reward increase per level (+8%)Rep: reputation for each claimed contract
Poolis the contract pool. Each entry has:goaland the target rangetarget = {min, max}levelunlock levelreward, the reward per unit of the target. For earnings ($) goals, the reward is calculated per $1000
- Goal types:
goal | What counts |
|---|---|
jobs | Every completed job |
kind (+kind) | vehicle / house / business jobs |
emergency | Emergency jobs |
perfect | Perfect jobs |
satisfaction (+min) | Jobs with satisfaction at or above min |
clean | Jobs with no failed attempts |
earn | Money earned |
tier (+min) | Locks at or above tier min |
verified | Jobs with a genuine owner whose ID / documents were checked |
type (+jobType) | A specific job type (master contract only; e.g. safe) |
The day rolls over at midnight, server local time. Rewards that are completed but not yet claimed are paid out automatically at rollover.
Weekly master (Master)
- From level
Levelonward, a goal is drawn from the pool every Monday (server time). Rewardscales with the lower bound of the goal.
Business (Business)
| Setting | Description |
|---|---|
Level, MinRep | Contract gate |
Offers | Number of daily offers |
Hours | Contract duration |
DispatchBias | Chance that automatic calls lean toward the contract's business type |
FailRep | Reputation loss when the contract expires or is abandoned |
Clients | Client companies. Each has a business type, a goal and a reward |
ClientRep* | Client relationship points; +0.5% reward per point (up to +50%) |
Config.Achievements
- Achievement types:
type | Condition |
|---|---|
stat (+stat) | A stat reaches value |
level | Level reaches value |
rep | Reputation reaches value |
fastest | A job is finished in under value seconds |
counter (+counter) | A counter reaches value |
upgrade | A tool is upgraded to the final level |
skillmax | A skill is maxed out |
tool (+tool) | A specific tool is owned |
career | A career path is chosen |
- Available counters:
fakeCaught,policeApproved,dailyContracts,dailySweeps,businessContracts,safeJobs,keymakeJobs,masterContracts. - For a new achievement, add the
ach_<key>andach_<key>_desctexts toshared/locale.lua.
Events
Random (Config.Events.Random): rolled at most once per job.
LockJam: with probabilitychance, the lock becomes 1 tier harder and the payment increases bybonus.Discount: the customer asks for apercentdiscount. Accepting or refusing changes satisfaction bysat.ToolDrop: a tool takesweardamage.Neighbor: on a night arrival, NPC police show up afterdelayseconds.
Server-wide (Config.Events.Special)
Multipliers in Types:
| Field | Effect |
|---|---|
xp | XP multiplier |
pay | Quote price multiplier |
premium | Value added to the premium chance |
emergencyWeight | Emergency job weight multiplier |
dispatchInterval | Call interval multiplier (0.5 = twice as often) |
shop | Shop price multiplier |
Schedule defines automatic windows. weekday: 1 = Sunday … 7 = Saturday, server time; the hour range is [from, to). Admin control: /locksmithevent (list), /locksmithevent <key> [minutes] (default 60) and /locksmithevent stop [key]. A stopped scheduled event does not restart for the rest of that window.
For a new event, add a key to the Types table and add the event_<key> and event_<key>_desc texts to the locale.
Conduct record
| Setting | Default | Description |
|---|---|---|
Warn / Suspend / Revoke | 2 / 3 / 5 | Strike thresholds: warning, automatic suspension, revocation |
SuspendHours | 48 | Suspension length caused by the record |
ReinstateFee | 5000 | Fee to reinstate a revoked license at HQ. Reinstatement starts a probation period: the record opens with Suspend-1 strikes, and one new strike suspends the license again |
DecayDays | 7 | One strike is removed after this many clean days |
CleanDays / CleanBonus | 3 / 0.05 | After this many days with 0 strikes, quotes get +5% |
Strikes | all 1 | Strikes per incident: fakeOwner, ignoredCheck, unlicensed, restricted, admin. Incidents set to 0 are not recorded |
Career paths & mastery
Config.Career:
Level: level at which paths unlock.ChangeFee: fee for changing path. The first choice is free.ChangeCooldown: waiting period between two changes (days).Pathsdefines the bonuses per path:
| Field | Meaning |
|---|---|
pay[key] | Share added to the quote price. key is one of: emergency, safe, keymake, vehicle, house, business |
xp[key] | Share added to job XP |
deadline | Share added to the emergency job time limit |
tips | Share added to the tip amount |
negotiation | Value added to negotiation tolerance |
For a new path, add a key to the Paths table and add the path_<key> and path_<key>_desc texts to the locale. The tablet list comes from the ORDER table in server/career.lua.
Config.Mastery.Reward: money paid for each mastery rank after level 10.
Items, locations, blips
Config.Items
| Setting | Description |
|---|---|
Tablet | Tablet item name. Opens the tablet when used |
RequireTablet | true (default): carrying the tablet is what makes a player a locksmith (calls, board, work). Without it they can't work |
TabletPrice | Price at any HQ with features.shop (target option), paid from Config.Shop.Account |
Toolkit | Toolkit item |
RequireToolkitItem | If true, jobs cannot be done without the toolkit |
Config.Locations
- The first entry is HQ. Skill resets, career selection and license reinstatement happen here.
- The
featuresfield on entries:terminal,board,license,shop,repair. - If
jobOnly = true, the target options are only visible to locksmiths. ped = { model, coords = vector4, scenario }: an HQ clerk NPC that carries all HQ options (stand there and use/lscoords). Withoutped, a plain target box atcoordsis used.
Config.Blips
LocksmithHQandActiveJobturn the blips on or off.HQandJobhold the sprite, color and scale settings.route = truedraws a GPS route to the job spot.
Config.LocationTool (admin /lslocations world view)
| Setting | Default | Description |
|---|---|---|
PreviewVehicle | 'asea' | Model of the ghost car shown at vehicle spots |
PreviewPed | 'a_m_y_business_01' | Model of the ghost customer |
ViewRange | 90.0 | Spots within this distance get a marker and label |
MaxGhosts | 10 | Most ghosts (car + customer) shown at once, nearest first |
Black market
Config.BlackMarket – a fence and an encrypted channel in the tablet.
| Setting | Default | Description |
|---|---|---|
Enabled | true | Turns the black market on/off |
Broker.coords / model | example spot | Where the fence stands (set with /lscoords) |
Broker.Hours / Level / MeetFee | {21, 5} / 4 / 500 | Game hours he is there, level and cash to be introduced |
Account | 'cash' | Payout account |
Offers / OfferRefresh / Cooldown | 3 / 1200 / 300 | Offers on the channel, seconds until they change, seconds between two jobs |
DeliverTimeout / DropRadius / Drops | 900 / 8.0 / 4 points | Time to loot and deliver after the lock opens, example drop points. Drops recorded in /lslocations (Black market tab) replace this list |
Heat.Max / DecayPerHour / Refuse | 100 / 12 / 80 | Heat cap, cooling per hour, the fence stops offering work above Refuse |
Heat.DispatchPerHeat / NpcCheckMult | 0.004 / 1.5 | Extra witness chance per heat point, NPC police check multiplier on legal jobs |
Types.<vehicle|door|key|safe> | – | level, police (officers online needed), pay (cash range), heat (added heat), witness (base chance), jobType (job engine type used for the spot and lock) |
LootTime | 12 | Seconds to search inside / empty the safe |
Spots.FallbackToJobSpots | true | Black market spots are recorded in /lslocations (Black market tab: car to steal, break-in door, safe spot). With no spot of a kind yet, true uses the normal job spots; false turns that job type off |
Flow: take an offer on the channel → go to the spot (nobody waits there) → take the right tool and open the lock → door / safe: search inside → drive or walk to the drop point marked on the map and hand over → cash. A stolen car must be parked at the drop and left. When the lock opens (and again, at half the chance, while searching) a witness may call the police: a dispatch is sent to real officers and Config.Record.Strikes.blackmarket (2) strikes are added. Black market jobs are not in the job history, stats, contracts or company commission. Burning the contact removes the channel until you meet the fence again.
Companies
Config.Company – player-founded firms, managed in the tablet's Company section.
| Setting | Default | Description |
|---|---|---|
Enabled | true | Turns companies on/off |
FoundLevel / FoundFee / FoundAtHQ | 5 / 5000 / true | Requirements to found one |
Account | 'bank' | Player account for the fee, deposits, withdrawals and bonuses |
NameLength / TagLength | {3, 32} / {2, 4} | Name and [TAG] length (tag: A-Z 0-9, also used on fleet plates) |
Commission.Default / Min / Max | 10 / 0 / 30 | % of every member job payout (tips excluded) paid into the company bank |
InviteTimeout / InviteDistance | 120 / 10.0 | Invitations are sent to nearby locksmiths |
LeaveCooldown | 86400 | Seconds before a player who left can found or join again |
Ranks | 5 ranks | Lowest first, the last one is the owner. perms: borrow, invite, fleet (company van paid by the company), kick, promote, bonus, depot, bank, settings. Optional label overrides the locale name |
Levels | 5 levels | xp (1 per member job, +1 perfect, + contract XP), members cap, depot tool slots, fleet unlocked |
Fleet | Discount = 0.30, NoDeposit, FromBank | Company vans: cheaper rent paid by the company bank, no deposit. Damage (or the deposit value when lost) is billed to the company |
Reputation | – | Starts at 50. +1 per 3 jobs with satisfaction ≥ 85, −2 per job below 40 or a fake owner. PriceBonus raises members' prices by reputation |
Contracts.PerWeek / Pool | 2 | Weekly company goals (jobs, perfect jobs, vehicles, doors, money). The reward goes to the company bank |
LedgerRows | 40 | Bank history rows in the tablet (Config.Database.LedgerRetentionDays prunes old ones) |
Rules: only lower ranks can be promoted, demoted or removed. The owner cannot leave; they transfer the company or close it (the remaining bank is paid to them). Depot tools are borrowed from the tool cabinet (HQ or service van) by members with borrow; one person holds a depot tool at a time and wear is shared. The license card shows the company name. Admins: /locksmithcompany list | bank <id> <±amount> | delete <id>. Tables (locksmith_companies, _company_members, _company_tools, _company_ledger) are created automatically.
Apprentice tutorial
Config.Tutorial – a guided first job at an HQ entry's tutorial = vector4(...) door (stand in front of a door facing it and use /lscoords). HQs without it offer no training.
| Setting | Default | Description |
|---|---|---|
Enabled | true | Turns the tutorial on/off |
DoorType | 'basic_residential' | Lock of the training door |
MentorModel | 'a_m_m_farmer_01' | Ped of the mentor (plays the customer) |
OfferTimeout | 600 | Seconds to accept the training call (missed = called again) |
Reward.Money / Reward.XP | 250 / 150 | Paid once per character |
Offered when a new locksmith (no jobs yet) loads in; skipping is remembered. /lstutorial or the HQ option restarts it (no reward the second time), /lstutorial stop ends it. The training job has no fake owner, alarm, police check, random event or restricted zone; the customer never leaves and an overpriced offer is countered with the fair price. Work only starts after the inspection and a look into the HQ tool locker (tool fetching on). It does not count towards history, stats or contracts. No automatic calls arrive while the training runs.
Service van
Config.ServiceVan – rented at an HQ entry that has a van = vector4(...) spot (spawn and return bay).
| Setting | Default | Description |
|---|---|---|
Enabled | true | Turns the whole feature on/off |
Model | 'speedo' | Van model |
Level | 2 | Locksmith level needed to rent |
Rent / Deposit | 150 / 500 | Rent is kept; the deposit is refunded on return minus damage |
Account | 'bank' | Account for rent / deposit |
PlatePrefix, Color | 'LS', {111, 89} | Plate LS#### and colours |
ReturnDistance | 25.0 | The van must be parked this close to the HQ van bay |
DamageShare | 1.0 | Share of the deposit lost for a fully wrecked van |
FuelResource | 'auto' | ox_fuel (state bag), LegacyFuel, cdn-fuel or none |
Workshop.Distance / MaxRepairShare / PriceMult | 6.0 / 0.5 / 1.3 | Mobile workshop next to your van: tools repaired up to 50%, supplies restocked, 30% dearer. Upgrades and sales stay at the HQ |
KeyMachine.Distance / ExtraBlanks / FewerDecoys | 30.0 / 2 / 1 | Key making (impressioning) with the van nearby |
CustomerBonus.Distance / Satisfaction | 35.0 / 5 | Arriving at a job with the van |
ToolFetch.Enabled | true | Tool fetching (see below). false = every owned tool is always on the player |
ToolFetch.Distance / AtHQ / Duration | 4.0 / true / 2500 | Distance to the van, HQ tool locker (HQs with shop or repair), grab animation in ms |
ToolFetch.Props | toolbox / drill | Prop held while carrying a tool, per tool category (default for the rest): model, pos, rot |
Tool fetching. Basic tools (Config.StarterEquipment) and supplies (drill bits) are always on the player. Every other tool stays in the service van or the HQ tool locker: use Take tools on your van (or Tool locker at the HQ) to open the tool cabinet: a pegboard of your tools with the work order, the tool in hand and the basic tools you carry. Tools that fit the current lock are marked (before the inspection, against the estimated tier). Without NUI (Config.UI.UseNui = false) an ox_lib menu is used instead. One tool in hand at a time; picking another swaps it. The tool goes back automatically when the job ends or is cancelled.
- Wrong tool in hand: the work cannot start (
tool_wrong). - Empty hand and no basic tool fits, but you own one that does: the work cannot start (
tool_in_van). - You own nothing that fits: bare-handed work, as before (slow).
- The diagnostic device only helps the inspection while it is in hand. The inspection report shows "in the van" next to a tool that must be taken first.
A van that disappears (deleted / despawned) is lost and its deposit is kept. If the player leaves the server, the van is returned automatically (deposit minus damage). Keys are given through qbx_vehiclekeys or qb-vehiclekeys when running.
Jobs
Config.Jobs
| Setting | Default | Description |
|---|---|---|
BoardSize / BoardJobLifetime / BoardRefillInterval | 8 / 900 / 45 | Shared job board |
AutoDispatchDefault | true | Automatic calls are enabled for new players |
DispatchInterval | 90–180 | Call interval for an idle locksmith (s) |
OfferTimeout | 40 | Time to accept a call |
ArrivalTimeout | 900 | Time to arrive after accepting |
WorkTimeout | 900 | The customer leaves if the lock is not finished |
PayTimeout | 600 | If payment is not collected for an opened lock, it is paid automatically |
EmergencyTimeLimit | 420 | Time from acceptance to unlock on an emergency job |
SpawnDistance | 90 | Distance at which the customer and vehicle are spawned on the client |
NetworkedCustomer | true | The customer NPC is networked: every player (police too) sees it. false = only the locksmith sees it |
ArrivalDistance | 25 | Distance that counts as arrival |
InteractDistance | 30 | Maximum distance from the spot for job actions |
CustomerRecallDistance | 40 | Range of "Call the customer over" |
MaxNegotiationRounds | 3 | Number of failed offers before the customer walks away |
WrongOwnerChance | 0.08 | Chance that the customer is not the real owner |
ForgotIdChance | 0.15 | "I left my ID in the car" event |
ReferralChance | 0.25 | Referral chance from a very satisfied customer |
CancelRepPenalty / ExpireRepPenalty | 2 / 1 | Penalty for cancelling or timing out after the price is agreed |
JustifiedCancelXP / JustifiedCancelRep | 15 / 2 | Reward for catching a fake owner and cancelling |
FakeOwnerRepPenalty | 5 | Penalty for finishing a job for a fake owner (plus a record strike) |
MaxTierByLevel | — | Highest lock tier offered per level |
NightHours | 22–6 | Night window (server time): night fee and neighbor event |
UseDefaultLocations | true | If false, only spots saved with /lslocations are used |
Config.Jobs.Types: job type definitions.
| Field | Meaning |
|---|---|
level, weight | Unlock level and selection weight |
kind | Location list and scene to use (vehicle / house / business) |
doorType | Forces the lock type (e.g. safe) |
minRep | Required reputation |
reward | Base pay (falls back to Config.Rewards if omitted) |
games, stages | Force the minigame pool and number of stages |
tools | Valid tool categories |
problems | Locale keys for the problems the customer describes |
Example, a new job type:
garage_door = { level = 4, weight = 8, kind = 'house', doorType = 'modern_residential', reward = 260,
problems = { 'problem_garage_1' } },
Add type_garage_door to the locale for the label; otherwise the kind label (type_house) is used. Add problem_garage_1 for the problem text.
Config.Keys
AcceptCall: key to accept a call, defaultY.DeclineCall: unbound by default.- Players can change these keys in the FiveM key bindings.
Vehicles & doors
Config.JobVehicles: models and GTA classes used in vehicle jobs.- Vehicle lock tier is determined from two places:
VehicleModelTierOverrides[model], otherwiseVehicleClassTiers[class]. Config.Vehicles
| Setting | Description |
|---|---|
LockTypes | Lock name and type (mechanical / electronic) by tier |
AlarmChance | Alarm chance by tier |
HarderThanExpectedChance | Chance that the lock is actually one tier harder. Only inspection reveals it |
InspectTime | Inspection time |
AlarmSatisfactionPenalty | Satisfaction penalty for opening without knowing about the alarm |
NoToolEfficiency | Efficiency when no suitable tool is available |
Analysis | Which analysis detail becomes visible at which level. The Diagnostic Device counts as +2 levels |
Config.DoorTypes: fields per door and lock type.
| Field | Meaning |
|---|---|
tier | Lock tier 1–5 |
lockType | Lock name (label) |
kind | mechanical or electronic |
tools | Valid tool categories; the first one is preferred |
alarmChance | Alarm chance |
xpMult | XP multiplier |
failure | Outcome of a failed attempt: minor, reset, alarm or dispatch |
games, stages, preferTool | Optional minigame and tool settings |
Config.BusinessTypes: business type names. Business contracts and the location-recording tool use them.
Config.Houses
| Setting | Description |
|---|---|
TenantChance | Chance that the customer is a tenant |
DocsOnPhoneChance | Chance that they can show documents on their phone |
BusinessFakeChance | Chance of an unauthorized business employee |
DoorOffset / CustomerSideStep / NearDoorDistance | Door position and the customer stepping aside |
ExtraDoorChance / ExtraDoorPriceMult | "Could you open the back door too?" event |
DoorlockIntegration / RelockAfter | ox_doorlock integration |
Economy
Config.PaymentAccount: account the payment goes to,'bank'or'cash'.Config.Rewards: base pay used when a job type does not setreward.- For vehicles,
VehicleBasicfor tiers 1–2 andVehicleAdvancedfor tier 3 and above. - For houses,
HouseBasicfor tiers 1–2 andHouseAdvancedfor tier 3 and above. - Also the
Business,EmergencyandPolicebase pay values.
- For vehicles,
Config.PriceModifiers
| Setting | Description |
|---|---|
PerLockTier | Fee added for each tier above 1 |
NightCall | Night fee |
Emergency | Emergency job fee |
PerKilometer | Fee per kilometer (up to 8 km) |
Alarm | Fee added if an alarm is found during inspection and disabled without the code |
MaxNegotiation | How far the customer can push the price down at most (25%) |
Quote order:
- The base pay and the modifiers above are summed.
- For premium customers, the extra share is added.
- The reputation multiplier, business skill, career path, clean record and event multiplier are applied to this subtotal. Each is added separately from the same subtotal (they do not compound). This step is skipped for contracted jobs such as police callouts.
Each appears as a separate line on the receipt.
Config.XP- Base XP by lock tier:
Easy,Medium,Hard,Expert. - Bonuses:
EmergencyBonus,PerfectMinigame,CustomerSatisfaction(satisfaction 80 and above). - On door jobs only, the door type's
xpMultvalue multiplies the sum of base + emergency + satisfaction. - Premium, career path, perfect job and event XP are added as separate lines.
- Base XP by lock tier:
Difficulty & minigames
Config.Difficulty
- Lock tiers map to difficulty as follows: 1 → Easy, 2 → Medium, 3–4 → Hard, 5 → Expert.
- Parameters:
pins,pinSpeed,pinZone: pin count, speed and correct zone widthtensionZone,tensionTime: tension zone and timesequence,showTime,fakeInputs: keypad and signalgrid,wires: circuit and wiringdrillDepth,heatRate: drilltimeLimit: time limit
- Tool efficiency (
efficiency) and skills scale these values in the player's favor.
Config.Minigames
| Setting | Description |
|---|---|
Enabled | If false, a progress bar is shown instead of the minigame |
Profiles | Stage pools by lock profile (vehicle / door × mechanical / electronic). Games: spp, rake, wafer, keypad, signal, wiring, circuit, drill (automatic if your best tool is a drill), safe, impression |
RakeMaxTier | Highest tier the raking technique works on |
StagesByTier | Number of stages by tier |
SpeedLevel, SpeedChance, SpeedBonus | "Speed pick" game and bonus on easy locks for experienced locksmiths |
MinTime, MinTimeFloor | Minimum server-side time for a successful result (anti-bot). spp and wafer are per pin, wiring is per wire, the rest are per game. The total is at least MinTimeFloor seconds |
FailSatisfaction, MajorMistakes, SuspiciousFailures, CustomerMaxFailures | Failure consequences: satisfaction loss, being flagged as suspicious (dispatch risk), the customer giving up |
Setting
MinTimevalues too low opens the door to bots. If legitimate players get theminigame_too_fastwarning, lower only the value for that particular game slightly.
Police
Config.Police
| Setting | Description |
|---|---|
Jobs, RequireOnDuty | Jobs that count as police |
InteractDistance | Interaction distance between police and locksmith |
SuspendGrade, SuspendHours | Grade that can suspend a license, and the suspension length |
Dispatch, DispatchCode, DispatchCooldown | Dispatch provider, code and per-locksmith cooldown |
DispatchChance | Chance per incident that a police call is sent. Legal jobs are never reported automatically |
RestrictedZones | Restricted zones { coords, radius, label }. Lock work here means a dispatch and a record strike. No strike is recorded if police approval was given |
NpcChecks, NpcCheckChancePerMinute, NpcSuspiciousMultiplier, NpcIgnoreTime, NpcPedModel | Random NPC police checks |
ApproveRep, IgnoreRepPenalty, UnlicensedFine | Check outcomes: approval reputation, penalty for ignoring, fine for working unlicensed |
Callouts (police calling a locksmith):
| Setting | Description |
|---|---|
Enabled | Turns police callouts on or off |
Level | Locksmith level required to take a callout |
Cooldown | Per-character cooldown |
MaxOpen | Limit on simultaneously open callouts on the server |
Types | Callout types: door type, fixed payment, XP, reputation. Officers cannot take their own callout |
User interface
Config.UI
UseNui: iffalse, ox_lib menus are used.CompactHQ(defaulttrue): the HQ shows only the terminal and the physical actions (buy tablet, tool locker, service van, training). The job board, skills, career, workshop and licence open from the terminal.falseshows every option separately.DefaultVolume: default volume. Players can change it with/lsvolumeor from the tablet's Settings.
The NUI theme can be changed through the :root color variables in nui/theme.css (--yellow, --paper, --ink, --stamp-red, etc.). Per FiveM NUI rules, do not use backdrop-filter or blur.
Customers (shared/customers.lua)
Personalities: values per personality.
| Field | Meaning |
|---|---|
base | Starting satisfaction |
patience | Time before satisfaction starts to drop (s) |
tolerance | Accepted price ÷ fair price |
talk, listen | Satisfaction gained on the first talk / listen |
idCheck | Satisfaction change when ID is requested |
tipMult | Tip multiplier |
weight | How often the personality appears |
- Name pools (
FirstNames,LastNames) and ped models (PedModels) are language-independent. - Language-dependent texts are in the
Customers.Text.trandCustomers.Text.enblocks:Problems,BusinessProblems,Default,Dialogue(lines per personality) andPersonalityLabels.Config.Localeselects which block is used; if the block is missing, English is used. - Dialogue placeholders:
{name},{price},{counter},{locksmith}.
Texts (shared/locale.lua)
Config.Locale accepts 'en' or 'tr' (English is the recommended default for new installs). Setting it switches everything to that language:
- notifications, menus, the tablet, minigames and receipts;
- customer and NPC police dialogue;
- chat command descriptions and key binding names;
- names in the config (tools, door types, locks, level titles, business types, police callout types, blips).
Every text exists under the same key in both the tr and en blocks. Do not change the number of %d and %s placeholders.
Config names. config.lua ships with English names. If a translation key exists in the active language, the name is replaced at load time (shared/constants.lua). Entries you add later without a key keep the text from the config.
| Config field | Translation key |
|---|---|
Tools[x].label | toolname_<x> |
DoorTypes[x].label / .lockType | door_<x> / doorlock_<x> |
Vehicles.LockTypes[n].label / ImmobilizerDetails[n] | vlock_<n> / immo_<n> |
Levels[n].title / unlocks | lvltitle_<n> / unlock_<text> |
BusinessTypes[x] | biz_<x> |
Police.Callouts.Types[x].label | callouttype_<x> |
Shop.Items[..].label | shopitem_<item> |
Blips.HQ.label / Blips.Job.label | blip_hq / blip_job |
Adding a new language (e.g. German):
- Add
extend('de', { ... })blocks toshared/locale.lua. The easiest way is to copy the English blocks and translate them; missing keys fall back to English. - Add
Customers.Text.de = { ... }toshared/customers.lua(copy the English block). - For NUI texts, add
de: { ... }to thewindow.I18Ntable innui/locales.js. - Set
Config.Locale = 'de'.
NPC police dialogue lines are in the LINES_BY_LANG table in server/police.lua.
Balance presets
Slower progression (hardcore RP)
- Multiply the
Config.LevelsXP thresholds by 1.5. - Lower the
Config.XPvalues by 20%. - Set
Config.Contracts.Daily.Count = 2. - Set
Config.Jobs.DispatchInterval = { min = 150, max = 300 }.
Higher earnings (low-population server)
- Multiply the
Config.Rewardsvalues by 1.3. - Set
PriceModifiers.PerKilometer = 40. - Set
Shop.SellRate = 0.5.
More risk of illegality
- Set
Jobs.WrongOwnerChance = 0.15. - Set
Police.NpcCheckChancePerMinute = 0.08. - Set
Record.Revoke = 4.
Easier minigames
- Increase the
pinZone,tensionZoneandtimeLimitvalues inConfig.Difficultyby 15%. - Set
Config.Minigames.StagesByTier[3] = 1.
Use only your own locations
- Save at least 5–10 spots of each type with
/lslocations. - Set
Config.Jobs.UseDefaultLocations = false.