FRKN Boosting — Configuration Documentation (EN)#
This guide explains every key in your FRKN configuration for the FRKN Boosting script. It’s written to be copy-paste friendly and practical for server owners.
0) Quick Start#
- Pick interaction system: Target is automatically matched.
- Set language:
language = 'en' | 'fr'. - Choose phone app:
Phone = 'qb' | 'qs' | 'lb'and ensure the chosen phone is installed. - Hook your dispatch: set
dispatchNameand updatesendAlert. - Check items: make sure
boosting_tablet,gps_hacking_deviceand all reward/loot item names exist in your inventory (QB/OX). - Place locations: verify spawn, drop-off, chop shop, and crusher coordinates match your map.
- Vehicles: tune the
boostingVehicleslist to your economy and progression.
1) Core#
Target#
- Type: string —
'ox_target' | 'qb-target' | 'interact' - Purpose: Selects your interaction framework.
language#
- Type: string —
'en' | 'fr' - Purpose: Localization key.
debug#
- Type: boolean
- Purpose: Enables debug prints/logging.
2) Gameplay & Timers#
gpsHack#
- Type: number
- Default:
3 - Meaning: Number of successful minigames required to remove the GPS tracker device from a vehicle.
policeNeedToStart#
- Type: number
- Default:
1 - Meaning: Minimum on-duty police count required to start a boosting contract.
cooldown#
- Type: number (minutes)
- Meaning: Global cooldown between starting new contracts for a player.
contractTimer#
contractTimer = {
A = 30, -- minutes
B = 30, -- minutes
C = 10, -- minutes
D = 30, -- minutes
}
- Type: table of minutes
- Meaning: Maximum time limit to complete each contract class.
3) Security NPCs#
guardNpc = {
B = { weapons = {"WEAPON_BAT", "WEAPON_KNIFE"}, guardAmount = 2 },
C = { weapons = {"WEAPON_APPISTOL", "WEAPON_PISTOL"}, guardAmount = 3 },
}
- Per class overrides for guards:
weapons: array of weapon names (hash keys).guardAmount: number of guards to spawn.
- If a class is omitted, no guards are spawned for that class.
4) Dispatch Integration#
dispatchName#
- Type: string —
"ps"or"other" - Meaning: Which dispatch to use.
sendAlert(vehicle)#
- Type: function
- Default behavior:
- If
dispatchName == "ps"→ callsexports['ps-dispatch']:CarBoosting(vehicle) - Else → no-op (add your custom dispatch trigger here)
- If
- How to extend: Replace the else block with your dispatch export/event.
5) Car Crusher Mapping#
carCrusher = {
main = {
model = "qua_carcrusher_main",
position = { x=2393.164, y=3108.682, z=47.254 },
rotation = { x=0.0, y=0.0, z=0.0 }
},
door = {
model = "qua_carcrusher_door",
position = { x=2392.051, y=3110.274, z=47.190 },
rotation = { x=-100.712, y=0.0, z=0.0 }
}
}
- Purpose: World placement for the crusher and its door.
- Note: Keep models consistent with your map resource.
6) In-Game Shop#
shopItems = {
{ id=1, name="Boosting Tablet", itemName="boosting_tablet", price=5 },
{ id=2, name="GPS Hacking Device", itemName="gps_hacking_device", price=1000 },
}
- Fields:
id: unique integername: display titleitemName: inventory item key (must exist)price: Script-defined semantics (token/currency).- In your config, Boosting Tablet comment indicates this price may represent “races” tokens to be removed/consumed.
- For the GPS device, it likely represents money. Keep it consistent with your economy logic.
7) Crusher Stash Rewards#
carCrusherStashReward = {
water = 5,
}
- Meaning: Items granted after using the car crusher.
- Format:
{ [itemName] = quantity } - Ensure: All item names exist in your inventory system.
8) Chop Shop#
chopShopProgressBarTime = 5- Type: seconds
- Meaning: Duration of chop-shop progress bar.
chopShopCoords = vector3(2342.2974, 3052.9194, 48.1518)- Meaning: Main chop shop location.
chopShopProcess = vector3(2336.9192, 3050.2510, 48.1517)- Meaning: Interaction/processing spot.
chopShopReward = { "metalscrap","plastic","copper","iron","aluminum","steel","glass" }- Meaning: Reward pool for chop actions (actual drops/amounts handled by script logic).
9) Spawn & Delivery Points#
Trailer Spawn#
trailerSpawnCoords = {
vector4(-143.8413, -2503.8540, 6.0068, 235.5382),
vector4(-328.0348, -2582.9583, 6.0002, 132.7928),
}
- Type:
vector4(x,y,z,heading) - Meaning: Where trailers may appear.
Drop-Off Points#
dropoffCoords = {
vector3( 34.1527, -2659.8457, 6.0061),
vector3(1543.2861, 2185.6106, 78.8086),
vector3( 383.1602, 3588.7712, 33.2922),
vector3(-115.8635, 6570.8242, 29.5221),
}
Vehicle Spawn Points#
vehicleSpawnCoords = {
vector4(337.3835, 2618.7581, 44.4989, 18.9221),
vector4(355.3642, 2625.6514, 44.4971, 25.3254),
vector4(571.1979, 2735.5776, 42.0601, 171.8936),
-- ... (full list from your config)
vector4(-209.4793, -2019.1289, 27.6204, 63.2876),
}
- Tip: Keep these points free of props and with clear road access.
10) Progression & Generation#
eachLevelMaxReputation#
- Type: number
- Meaning: Reputation required per level (script-specific leveling uses this as a threshold).
contractGenerator#
- Type: number (minutes)
- Meaning: Interval to delete old and generate new contracts for the player.
- Note: Your sample value
60implies 60 minutes. Keep comments aligned with actual units you use in code.
11) Phone Integration#
Phone#
- Type: string —
'qb' | 'qs' | 'lb' - Meaning: Which phone resource to use for notifications/mail.
sendMail(message)#
- Type: function
- Behavior:
'qb': triggersqb-phone:server:sendNewMail'qs': triggersqs-smartphone:server:sendNewMail'lb': calls a custom server event to send via lb-phone- Else: no-op (add your phone integration)
- Action: If you use a different phone, implement its mail export/event in the else branch.
12) Vehicle Catalog (Contracts)#
boostingVehicles = {
{ class="A", car="italirsx", model="Grotti Itali RSX", reputation=120, races=10 },
{ class="B", car="dominator3",model="Vapid Dominator GTX", reputation=90, races=7 },
{ class="C", car="comet5", model="Pfister Comet SR", reputation=80, races=5 },
{ class="D", car="brioso", model="Grotti Brioso R/A", reputation=60, races=3 },
-- ... (full list from your config)
{ class="D", car="dilettante",model="Karin Dilettante", reputation=45, races=3 },
}
- Fields:
class: Contract class (A,B,C,D).car: spawn name (GTA model key).model: Display label for UI/logs.reputation: Rep requirement or value tied to progression (script-specific).races: Token cost/weight used by the economy (higher class ⇒ higher value).
- Add new vehicle: Append a new table with the same fields. Ensure the car spawn name exists in your game build.
13) Minigames#
MinigameConfig = {
riddleGame = function(cb)
exports['frkn-riddlegame']:riddleGame(cb, 25, 'Destroy target', 'Destroy target', 2, 2)
end,
sosGame = function(cb)
exports['frkn-sosgame']:xoxGame(cb, 25, 'Destroy target', 'Destroy target', 2, 2)
end,
stickGame = function(cb)
exports['frkn-stickgame']:stickGame(cb, 25, 'Destroy target', 'Destroy target', 5, 1.0)
end,
}
- Signature: Each function receives a
callback(cb) and calls the respective exported minigame. - Common params:
25: Duration/timeout (seconds).- Text parameters: UI headers/prompts.
- Last numbers: difficulty/rounds/speed depending on the game.
- Swap a minigame: Replace the export call with your own minigame resource and keep the same
callbackcontract.
14) Economy & Balance Tips#
- Tokens vs. Money:
If your server uses “races” as a token economy (as your comments imply), keep:- Higher-class vehicles with higher
races. - Shop prices consistent, e.g. Boosting Tablet costs token(s), GPS device costs money.
- Higher-class vehicles with higher
- Reputation curve:
- Use
eachLevelMaxReputationto control level pacing. - Keep
reputationof A-class entries above lower classes to enforce progression.
- Use
- Timers:
contractTimertoo short ⇒ more fails; too long ⇒ trivializes risk.cooldowncontrols contract spam—tune with your player count.
15) Extending the Config#
Add a new shop item#
table.insert(FRKN.shopItems, {
id = 3,
name = "Signal Jammer",
itemName = "signal_jammer",
price = 2500, -- your economy
})
Add guards for a class not covered#
FRKN.guardNpc.A = { weapons = {"WEAPON_PISTOL"}, guardAmount = 2 }
Add a new vehicle#
table.insert(FRKN.boostingVehicles, {
class = "B",
car = "sultan",
model = "Karin Sultan",
reputation = 90,
races = 6,
})
Plug in a different dispatch#
FRKN.dispatchName = "other"
FRKN.sendAlert = function(vehicle)
exports['your-dispatch']:SendBoostingAlert(vehicle)
end
Plug in a different phone#
FRKN.Phone = "other"
FRKN.sendMail = function(message)
exports['your-phone']:SendMail({ sender="Boosting", subject="Boosting Contract", message=message })
end
16) Dependencies Checklist#
- Target system chosen in
Targetis installed and started. - Inventory contains all item names used in:
shopItems,carCrusherStashReward,chopShopReward.
- Phone app (
qb-phone,qs-smartphone, orlb-phone) matchesPhone. - Minigame resources:
frkn-riddlegame,frkn-sosgame,frkn-stickgame(or your replacements).
- Mapping/models for the car crusher are present and streamed.
- Dispatch resource if using
ps-dispatchor your custom one.
17) Troubleshooting#
- No interaction prompts: Check
Targetvalue and the resource is running. - No mail sent: Verify
Phonesetting and that the chosen phone’s server events/exports exist. - No guards spawning: Ensure class key exists under
guardNpcand weapon names are correct. - Items not awarded: Confirm item names exist in your inventory system exactly (case-sensitive).
- Contracts not refreshing: Verify
contractGeneratorunit (minutes) matches how the server code consumes it.