Skip to content

Config

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#

  1. Pick interaction system: Target is automatically matched.
  2. Set language: language = 'en' | 'fr'.
  3. Choose phone app: Phone = 'qb' | 'qs' | 'lb' and ensure the chosen phone is installed.
  4. Hook your dispatch: set dispatchName and update sendAlert.
  5. Check items: make sure boosting_tablet, gps_hacking_device and all reward/loot item names exist in your inventory (QB/OX).
  6. Place locations: verify spawn, drop-off, chop shop, and crusher coordinates match your map.
  7. Vehicles: tune the boostingVehicles list 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#

lua
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#

lua
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" → calls exports['ps-dispatch']:CarBoosting(vehicle)
    • Else → no-op (add your custom dispatch trigger here)
  • How to extend: Replace the else block with your dispatch export/event.

5) Car Crusher Mapping#

lua
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#

lua
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 integer
    • name: display title
    • itemName: 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#

lua
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#

lua
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#

lua
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#

lua
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 60 implies 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': triggers qb-phone:server:sendNewMail
    • 'qs': triggers qs-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)#

lua
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#

lua
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 callback contract.

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.
  • Reputation curve:
    • Use eachLevelMaxReputation to control level pacing.
    • Keep reputation of A-class entries above lower classes to enforce progression.
  • Timers:
    • contractTimer too short ⇒ more fails; too long ⇒ trivializes risk.
    • cooldown controls contract spam—tune with your player count.

15) Extending the Config#

Add a new shop item#

lua
table.insert(FRKN.shopItems, {
  id = 3,
  name = "Signal Jammer",
  itemName = "signal_jammer",
  price = 2500, -- your economy
})

Add guards for a class not covered#

lua
FRKN.guardNpc.A = { weapons = {"WEAPON_PISTOL"}, guardAmount = 2 }

Add a new vehicle#

lua
table.insert(FRKN.boostingVehicles, {
  class = "B",
  car   = "sultan",
  model = "Karin Sultan",
  reputation = 90,
  races = 6,
})

Plug in a different dispatch#

lua
FRKN.dispatchName = "other"
FRKN.sendAlert = function(vehicle)
  exports['your-dispatch']:SendBoostingAlert(vehicle)
end

Plug in a different phone#

lua
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 Target is installed and started.
  • Inventory contains all item names used in:
    • shopItems, carCrusherStashReward, chopShopReward.
  • Phone app (qb-phone, qs-smartphone, or lb-phone) matches Phone.
  • 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-dispatch or your custom one.

17) Troubleshooting#

  • No interaction prompts: Check Target value and the resource is running.
  • No mail sent: Verify Phone setting and that the chosen phone’s server events/exports exist.
  • No guards spawning: Ensure class key exists under guardNpc and weapon names are correct.
  • Items not awarded: Confirm item names exist in your inventory system exactly (case-sensitive).
  • Contracts not refreshing: Verify contractGenerator unit (minutes) matches how the server code consumes it.