NullSect
Systems nominal

Docs / Locksmith / Configuration

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

SettingDefaultDescription
Config.DebugfalseVerbose 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

SettingDefaultDescription
Config.JobName'locksmith'Job name in your framework
Config.RequireJobfalseIf true, only players with Config.JobName can work. By default access comes from the tablet item (Config.Items.RequireTablet)
Config.RequireOnDutyfalseJobs 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.MaxJobDistance2500.0Automatic calls prefer spots within this distance; if none are free, any spot is picked (m)

Feature toggles:

ToggleWhat happens when disabled
EnablePoliceDispatchNo police calls are sent for alarms or suspicious situations
EnableNegotiationNegotiation is disabled; whatever offer is made, the job is agreed at the calculated fair price
EnableReputationReputation never changes (/locksmithrep has no effect either); tiers no longer affect price or tips, job gates are removed and premium customers never appear
EnableSkillTreeThe skills menu and tab are hidden and no new points can be spent; ranks already purchased keep their effect
EnableDailyContracts / EnableBusinessContractsThe corresponding contracts are not generated. The weekly master contract is tied to the daily toggle
EnableAchievementsAchievements and their rewards are disabled
EnableRandomEventsJammed lock, discount request, dropped tool and neighbor events are disabled
EnableLeaderboardThe tablet leaderboard and rankings are disabled
EnableMultiplayerJobsReserved; multiplayer jobs are not implemented yet (leave it false)

Database

SettingDefaultDescription
AutoMigratetrueThe schema and any missing indexes are applied on startup
AutosaveInterval300Interval for batch-saving modified profiles (s)
SaveOnProgressiontrueThe player row is written immediately whenever XP, level or reputation changes
HistoryRetentionDays120How long job history is kept (0 = forever)
AuditRetentionDays60How long the audit log is kept (0 = forever)
ContractRetentionDays30Claimed / expired contract rows (0 = forever)

Cleanup runs on startup and then every 24 hours.

Admin & security

Config.Admin:

SettingDescription
AceAdmin ACE name (locksmith.admin)
AllowFrameworkAdminsFramework admins are also treated as authorized
QBPermissionsqb permissions. On Qbox, ACEs with the same names are checked
ESXGroupsESX groups

Config.Cooldowns (ms):

SettingDescription
CallbackDefault cooldown for any callback that has no value of its own
ProfileProfile request
InteractionDefault cooldown for job actions
PaymentCollecting payment

Setting these values too low opens the door to spam.

Config.Security:

SettingDescription
MaxStrikes / StrikeDecaySuspicious-event counter and its reset time
DropOnMaxStrikesPlayers who hit the limit are kicked. Default false: the event is only logged
LogToDatabaseWarnings are written to the locksmith_audit_log table (at most 5 per player every 10 s)

License

SettingDefaultDescription
Prefix'LS'License number prefix
ValidDays30Real-world days (0 = never expires). Jobs cannot be taken with an expired license
RenewPrice500Renewal 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

SettingDescription
StartingReputationStarting reputation for a new profile (20)
MaxReputationReputation cap (100)
SkillPointsPerLevelSkill points earned per level
MasteryXPAfter level 10, 1 mastery rank every N XP (+1 point, +Mastery.Reward money)
MaxXPPerGrantMaximum 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

  • Tiers defines tiers by reputation. Each tier has:
    • priceMult price multiplier
    • tipMult tip multiplier
    • friendly: half of this value is added to the customer's starting satisfaction
    • premium premium customer chance
  • EmergencyMinRep, BusinessMinRep and PremiumMinRep are job type gates.
  • Premium customer settings:
    • PremiumPriceMult price multiplier (×1.5)
    • PremiumXPMult XP multiplier (×1.25)
    • PremiumSatisfaction satisfaction penalty (-10)
    • BoardPremiumChance premium 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)
  • Reward: XP, a company bonus equal to the MoneyBonus share of the payment, and Rep.

Skill tree

Config.Skills.Branches contains 5 branches with 3 skills per branch. Each skill has:

  • maxRank number of ranks
  • level unlock level
  • requires prerequisite skill

Effects holds the per-rank effect values; the total effect is rank × value. ResetPrice is the fee for refunding all points at HQ.

SkillEffect per rank
mech_speedPins 10% slower, time +10%
mech_durabilityTool wear -20%
mech_pinsCorrect zones 10% wider
elec_diag+1 analysis level
elec_accessNo-tool efficiency on electronics 0.85
elec_circuitTime +15% in all electronic minigames
cs_negotiationNegotiation tolerance +5%
cs_tipsTip amount +15%
cs_charmStarting satisfaction +4
em_accessEmergency jobs 2 levels earlier
em_fastEmergency time +15%
em_xpEmergency XP +15%
pro_policeDispatch chance -25%. At rank 2, NPC police are convinced by the license alone
pro_businessBusiness jobs 2 levels earlier, pay +10%
pro_premiumPremium chance +10%

Tools, durability, workshop

Config.StarterEquipment: tools given to a new profile.

Config.Tools: fields per tool.

FieldMeaning
categoryTool type: picks, tension, inspection, electronic, drill, consumable, safe (safe), impression (key impressioning)
maxDurabilityDurability of a new tool
efficiencyScales minigame zones and time. 1.0 is normal; higher means easier
successBonusUnused (reference only)
maxTierHighest lock tier the tool is effective on
levelLevel required to purchase
priceShop 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 use
  • MinorFailure: minor mistake
  • CriticalFailure: critical mistake
  • Only the mech_durability skill reduces wear. Upgrades increase maximum durability.

Config.Shop

SettingDescription
AccountAccount the payment is taken from
DistanceHow close you must be to the shop or workshop spot
SellRateShare returned when selling. 40% of the total spent, scaled by durability
RepairRate, MinRepairPerPointRepair cost: max(Min, price / maxDurability × RepairRate) per durability point
BrokenSurchargeExtra multiplier for repairing a broken tool (×1.5)
LowDurabilityWarning threshold (25%). The tablet's "Maintenance needed" card uses it as well
RepDiscountShop discount by reputation tier
ConsumableStackMaximum number of packs for consumables
Upgrades, MinUpgradeBase3 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
NoUpgradeTools that cannot be upgraded
ItemsInventory items sold in the shop (toolkit)

Contracts & achievements

Daily (Config.Contracts.Daily)

  • General settings:
    • Count: number of daily contracts
    • FreeRerolls: free rerolls
    • LevelScale: reward increase per level (+8%)
    • Rep: reputation for each claimed contract
  • Pool is the contract pool. Each entry has:
    • goal and the target range target = {min, max}
    • level unlock level
    • reward, the reward per unit of the target. For earnings ($) goals, the reward is calculated per $1000
  • Goal types:
goalWhat counts
jobsEvery completed job
kind (+kind)vehicle / house / business jobs
emergencyEmergency jobs
perfectPerfect jobs
satisfaction (+min)Jobs with satisfaction at or above min
cleanJobs with no failed attempts
earnMoney earned
tier (+min)Locks at or above tier min
verifiedJobs 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 Level onward, a goal is drawn from the pool every Monday (server time).
  • Reward scales with the lower bound of the goal.

Business (Business)

SettingDescription
Level, MinRepContract gate
OffersNumber of daily offers
HoursContract duration
DispatchBiasChance that automatic calls lean toward the contract's business type
FailRepReputation loss when the contract expires or is abandoned
ClientsClient 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:
typeCondition
stat (+stat)A stat reaches value
levelLevel reaches value
repReputation reaches value
fastestA job is finished in under value seconds
counter (+counter)A counter reaches value
upgradeA tool is upgraded to the final level
skillmaxA skill is maxed out
tool (+tool)A specific tool is owned
careerA career path is chosen
  • Available counters: fakeCaught, policeApproved, dailyContracts, dailySweeps, businessContracts, safeJobs, keymakeJobs, masterContracts.
  • For a new achievement, add the ach_<key> and ach_<key>_desc texts to shared/locale.lua.

Events

Random (Config.Events.Random): rolled at most once per job.

  • LockJam: with probability chance, the lock becomes 1 tier harder and the payment increases by bonus.
  • Discount: the customer asks for a percent discount. Accepting or refusing changes satisfaction by sat.
  • ToolDrop: a tool takes wear damage.
  • Neighbor: on a night arrival, NPC police show up after delay seconds.

Server-wide (Config.Events.Special)

Multipliers in Types:

FieldEffect
xpXP multiplier
payQuote price multiplier
premiumValue added to the premium chance
emergencyWeightEmergency job weight multiplier
dispatchIntervalCall interval multiplier (0.5 = twice as often)
shopShop 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

SettingDefaultDescription
Warn / Suspend / Revoke2 / 3 / 5Strike thresholds: warning, automatic suspension, revocation
SuspendHours48Suspension length caused by the record
ReinstateFee5000Fee 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
DecayDays7One strike is removed after this many clean days
CleanDays / CleanBonus3 / 0.05After this many days with 0 strikes, quotes get +5%
Strikesall 1Strikes 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).
  • Paths defines the bonuses per path:
FieldMeaning
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
deadlineShare added to the emergency job time limit
tipsShare added to the tip amount
negotiationValue 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

SettingDescription
TabletTablet item name. Opens the tablet when used
RequireTablettrue (default): carrying the tablet is what makes a player a locksmith (calls, board, work). Without it they can't work
TabletPricePrice at any HQ with features.shop (target option), paid from Config.Shop.Account
ToolkitToolkit item
RequireToolkitItemIf 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 features field 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). Without ped, a plain target box at coords is used.

Config.Blips

  • LocksmithHQ and ActiveJob turn the blips on or off.
  • HQ and Job hold the sprite, color and scale settings. route = true draws a GPS route to the job spot.

Config.LocationTool (admin /lslocations world view)

SettingDefaultDescription
PreviewVehicle'asea'Model of the ghost car shown at vehicle spots
PreviewPed'a_m_y_business_01'Model of the ghost customer
ViewRange90.0Spots within this distance get a marker and label
MaxGhosts10Most ghosts (car + customer) shown at once, nearest first

Black market

Config.BlackMarket – a fence and an encrypted channel in the tablet.

SettingDefaultDescription
EnabledtrueTurns the black market on/off
Broker.coords / modelexample spotWhere the fence stands (set with /lscoords)
Broker.Hours / Level / MeetFee{21, 5} / 4 / 500Game hours he is there, level and cash to be introduced
Account'cash'Payout account
Offers / OfferRefresh / Cooldown3 / 1200 / 300Offers on the channel, seconds until they change, seconds between two jobs
DeliverTimeout / DropRadius / Drops900 / 8.0 / 4 pointsTime to loot and deliver after the lock opens, example drop points. Drops recorded in /lslocations (Black market tab) replace this list
Heat.Max / DecayPerHour / Refuse100 / 12 / 80Heat cap, cooling per hour, the fence stops offering work above Refuse
Heat.DispatchPerHeat / NpcCheckMult0.004 / 1.5Extra 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)
LootTime12Seconds to search inside / empty the safe
Spots.FallbackToJobSpotstrueBlack 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.

SettingDefaultDescription
EnabledtrueTurns companies on/off
FoundLevel / FoundFee / FoundAtHQ5 / 5000 / trueRequirements 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 / Max10 / 0 / 30% of every member job payout (tips excluded) paid into the company bank
InviteTimeout / InviteDistance120 / 10.0Invitations are sent to nearby locksmiths
LeaveCooldown86400Seconds before a player who left can found or join again
Ranks5 ranksLowest 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
Levels5 levelsxp (1 per member job, +1 perfect, + contract XP), members cap, depot tool slots, fleet unlocked
FleetDiscount = 0.30, NoDeposit, FromBankCompany 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 / Pool2Weekly company goals (jobs, perfect jobs, vehicles, doors, money). The reward goes to the company bank
LedgerRows40Bank 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.

SettingDefaultDescription
EnabledtrueTurns 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)
OfferTimeout600Seconds to accept the training call (missed = called again)
Reward.Money / Reward.XP250 / 150Paid 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).

SettingDefaultDescription
EnabledtrueTurns the whole feature on/off
Model'speedo'Van model
Level2Locksmith level needed to rent
Rent / Deposit150 / 500Rent 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
ReturnDistance25.0The van must be parked this close to the HQ van bay
DamageShare1.0Share of the deposit lost for a fully wrecked van
FuelResource'auto'ox_fuel (state bag), LegacyFuel, cdn-fuel or none
Workshop.Distance / MaxRepairShare / PriceMult6.0 / 0.5 / 1.3Mobile workshop next to your van: tools repaired up to 50%, supplies restocked, 30% dearer. Upgrades and sales stay at the HQ
KeyMachine.Distance / ExtraBlanks / FewerDecoys30.0 / 2 / 1Key making (impressioning) with the van nearby
CustomerBonus.Distance / Satisfaction35.0 / 5Arriving at a job with the van
ToolFetch.EnabledtrueTool fetching (see below). false = every owned tool is always on the player
ToolFetch.Distance / AtHQ / Duration4.0 / true / 2500Distance to the van, HQ tool locker (HQs with shop or repair), grab animation in ms
ToolFetch.Propstoolbox / drillProp 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

SettingDefaultDescription
BoardSize / BoardJobLifetime / BoardRefillInterval8 / 900 / 45Shared job board
AutoDispatchDefaulttrueAutomatic calls are enabled for new players
DispatchInterval90–180Call interval for an idle locksmith (s)
OfferTimeout40Time to accept a call
ArrivalTimeout900Time to arrive after accepting
WorkTimeout900The customer leaves if the lock is not finished
PayTimeout600If payment is not collected for an opened lock, it is paid automatically
EmergencyTimeLimit420Time from acceptance to unlock on an emergency job
SpawnDistance90Distance at which the customer and vehicle are spawned on the client
NetworkedCustomertrueThe customer NPC is networked: every player (police too) sees it. false = only the locksmith sees it
ArrivalDistance25Distance that counts as arrival
InteractDistance30Maximum distance from the spot for job actions
CustomerRecallDistance40Range of "Call the customer over"
MaxNegotiationRounds3Number of failed offers before the customer walks away
WrongOwnerChance0.08Chance that the customer is not the real owner
ForgotIdChance0.15"I left my ID in the car" event
ReferralChance0.25Referral chance from a very satisfied customer
CancelRepPenalty / ExpireRepPenalty2 / 1Penalty for cancelling or timing out after the price is agreed
JustifiedCancelXP / JustifiedCancelRep15 / 2Reward for catching a fake owner and cancelling
FakeOwnerRepPenalty5Penalty for finishing a job for a fake owner (plus a record strike)
MaxTierByLevel—Highest lock tier offered per level
NightHours22–6Night window (server time): night fee and neighbor event
UseDefaultLocationstrueIf false, only spots saved with /lslocations are used

Config.Jobs.Types: job type definitions.

FieldMeaning
level, weightUnlock level and selection weight
kindLocation list and scene to use (vehicle / house / business)
doorTypeForces the lock type (e.g. safe)
minRepRequired reputation
rewardBase pay (falls back to Config.Rewards if omitted)
games, stagesForce the minigame pool and number of stages
toolsValid tool categories
problemsLocale 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, default Y.
  • 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], otherwise VehicleClassTiers[class].
  • Config.Vehicles
SettingDescription
LockTypesLock name and type (mechanical / electronic) by tier
AlarmChanceAlarm chance by tier
HarderThanExpectedChanceChance that the lock is actually one tier harder. Only inspection reveals it
InspectTimeInspection time
AlarmSatisfactionPenaltySatisfaction penalty for opening without knowing about the alarm
NoToolEfficiencyEfficiency when no suitable tool is available
AnalysisWhich analysis detail becomes visible at which level. The Diagnostic Device counts as +2 levels

Config.DoorTypes: fields per door and lock type.

FieldMeaning
tierLock tier 1–5
lockTypeLock name (label)
kindmechanical or electronic
toolsValid tool categories; the first one is preferred
alarmChanceAlarm chance
xpMultXP multiplier
failureOutcome of a failed attempt: minor, reset, alarm or dispatch
games, stages, preferToolOptional minigame and tool settings

Config.BusinessTypes: business type names. Business contracts and the location-recording tool use them.

Config.Houses

SettingDescription
TenantChanceChance that the customer is a tenant
DocsOnPhoneChanceChance that they can show documents on their phone
BusinessFakeChanceChance of an unauthorized business employee
DoorOffset / CustomerSideStep / NearDoorDistanceDoor position and the customer stepping aside
ExtraDoorChance / ExtraDoorPriceMult"Could you open the back door too?" event
DoorlockIntegration / RelockAfterox_doorlock integration

Economy

  • Config.PaymentAccount: account the payment goes to, 'bank' or 'cash'.
  • Config.Rewards: base pay used when a job type does not set reward.
    • For vehicles, VehicleBasic for tiers 1–2 and VehicleAdvanced for tier 3 and above.
    • For houses, HouseBasic for tiers 1–2 and HouseAdvanced for tier 3 and above.
    • Also the Business, Emergency and Police base pay values.
  • Config.PriceModifiers
SettingDescription
PerLockTierFee added for each tier above 1
NightCallNight fee
EmergencyEmergency job fee
PerKilometerFee per kilometer (up to 8 km)
AlarmFee added if an alarm is found during inspection and disabled without the code
MaxNegotiationHow far the customer can push the price down at most (25%)

Quote order:

  1. The base pay and the modifiers above are summed.
  2. For premium customers, the extra share is added.
  3. 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 xpMult value multiplies the sum of base + emergency + satisfaction.
    • Premium, career path, perfect job and event XP are added as separate lines.

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 width
    • tensionZone, tensionTime: tension zone and time
    • sequence, showTime, fakeInputs: keypad and signal
    • grid, wires: circuit and wiring
    • drillDepth, heatRate: drill
    • timeLimit: time limit
  • Tool efficiency (efficiency) and skills scale these values in the player's favor.

Config.Minigames

SettingDescription
EnabledIf false, a progress bar is shown instead of the minigame
ProfilesStage 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
RakeMaxTierHighest tier the raking technique works on
StagesByTierNumber of stages by tier
SpeedLevel, SpeedChance, SpeedBonus"Speed pick" game and bonus on easy locks for experienced locksmiths
MinTime, MinTimeFloorMinimum 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, CustomerMaxFailuresFailure consequences: satisfaction loss, being flagged as suspicious (dispatch risk), the customer giving up

Setting MinTime values too low opens the door to bots. If legitimate players get the minigame_too_fast warning, lower only the value for that particular game slightly.

Police

Config.Police

SettingDescription
Jobs, RequireOnDutyJobs that count as police
InteractDistanceInteraction distance between police and locksmith
SuspendGrade, SuspendHoursGrade that can suspend a license, and the suspension length
Dispatch, DispatchCode, DispatchCooldownDispatch provider, code and per-locksmith cooldown
DispatchChanceChance per incident that a police call is sent. Legal jobs are never reported automatically
RestrictedZonesRestricted 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, NpcPedModelRandom NPC police checks
ApproveRep, IgnoreRepPenalty, UnlicensedFineCheck outcomes: approval reputation, penalty for ignoring, fine for working unlicensed

Callouts (police calling a locksmith):

SettingDescription
EnabledTurns police callouts on or off
LevelLocksmith level required to take a callout
CooldownPer-character cooldown
MaxOpenLimit on simultaneously open callouts on the server
TypesCallout types: door type, fixed payment, XP, reputation. Officers cannot take their own callout

User interface

Config.UI

  • UseNui: if false, ox_lib menus are used.
  • CompactHQ (default true): 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. false shows every option separately.
  • DefaultVolume: default volume. Players can change it with /lsvolume or 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.
FieldMeaning
baseStarting satisfaction
patienceTime before satisfaction starts to drop (s)
toleranceAccepted price ÷ fair price
talk, listenSatisfaction gained on the first talk / listen
idCheckSatisfaction change when ID is requested
tipMultTip multiplier
weightHow often the personality appears
  • Name pools (FirstNames, LastNames) and ped models (PedModels) are language-independent.
  • Language-dependent texts are in the Customers.Text.tr and Customers.Text.en blocks: Problems, BusinessProblems, Default, Dialogue (lines per personality) and PersonalityLabels. Config.Locale selects 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 fieldTranslation key
Tools[x].labeltoolname_<x>
DoorTypes[x].label / .lockTypedoor_<x> / doorlock_<x>
Vehicles.LockTypes[n].label / ImmobilizerDetails[n]vlock_<n> / immo_<n>
Levels[n].title / unlockslvltitle_<n> / unlock_<text>
BusinessTypes[x]biz_<x>
Police.Callouts.Types[x].labelcallouttype_<x>
Shop.Items[..].labelshopitem_<item>
Blips.HQ.label / Blips.Job.labelblip_hq / blip_job

Adding a new language (e.g. German):

  1. Add extend('de', { ... }) blocks to shared/locale.lua. The easiest way is to copy the English blocks and translate them; missing keys fall back to English.
  2. Add Customers.Text.de = { ... } to shared/customers.lua (copy the English block).
  3. For NUI texts, add de: { ... } to the window.I18N table in nui/locales.js.
  4. 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.Levels XP thresholds by 1.5.
  • Lower the Config.XP values by 20%.
  • Set Config.Contracts.Daily.Count = 2.
  • Set Config.Jobs.DispatchInterval = { min = 150, max = 300 }.

Higher earnings (low-population server)

  • Multiply the Config.Rewards values 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, tensionZone and timeLimit values in Config.Difficulty by 15%.
  • Set Config.Minigames.StagesByTier[3] = 1.

Use only your own locations

  1. Save at least 5–10 spots of each type with /lslocations.
  2. Set Config.Jobs.UseDefaultLocations = false.

Cart

Your cart is empty.