Contracts
Board rules live in _settings.lua. Each contract has its own file.
Board rules, _settings.lua
| Setting | Default | What it does |
|---|---|---|
perRoll | 15 | Contracts each gang gets on its board |
rollEveryHours | 24 | Hours until a new board. Completed and cooldown states reset |
oneActivePerGang | false | Only one contract running per gang |
oneActivePerPlayer | true | A player can only run one contract at a time |
timeoutMinutes | 60 | Default time limit |
cooldownMinutes | 10 | Wait after a contract fails or expires |
countWholeGang | true | For count contracts, any member's actions count. Off = only the starter's |
failOnDeath | false | Dying fails scripted contracts |
rewardTo | 'completer' | Item and weapon rewards go to the 'completer' or the 'starter'. Money, XP and vehicles always go to the gang |
itemsTo | 'player' | 'player': items and weapons go to that player. 'stash': they go to the gang hideout stash (the player gets them instead if the stash is full or locked) |
maxTravelSpeed | 85.0 | Anti-teleport check between steps |
introDialog | true | Show the briefing when starting |
closeTabletOnStart | true | Close the tablet when starting |
hud | true | Show the contract HUD |
blipScale | 0.85 | Contract blip size |
interactRadius | 2.0 | Contract interaction range |
Guards
| Setting | Default | What it does |
|---|---|---|
guards.accuracy | 35 | Enemy NPC accuracy (0–100) |
guards.armour | 25 | Enemy armour (0–100) |
guards.weapons | SNS pistol, SNS Mk2, Vintage pistol, Pistol | Weapons they carry |
guards.ammo | 200 | Ammo |
guards.retaskMs | 1200 | How often they look for targets |
guards.engageRange | 320.0 | Guards only chase players within this range |
Contract files
Each contract file lets you change its text, level, XP, rewards and timings, or turn it off. The objectives and locations are tied to its mission script, so only change those if you know what you're doing.
Fields you can safely change
| Field | Example | What it does |
|---|---|---|
label | 'Relay Run' | Name on the tablet |
description | 'Take the cargo van…' | Briefing text |
level | 1 | Gang level needed |
xp | 300 | Gang XP for finishing |
timeoutMinutes | 12 | Time limit for this contract |
cooldownMinutes | 10 | Cooldown for this contract |
enabled | false | Remove the contract from boards |
image | URL | Image on the contract card |
rewards | see below | What the gang earns |
Rewards
rewards = {
{ kind = 'cash', amount = 15000, label = '$15,000', rarity = 'purple' },
{ kind = 'weapon', name = 'weapon_pistol', amount = 1, label = 'Pistol', rarity = 'red' },
},| Field | Meaning |
|---|---|
kind | cash or dirty (gang treasury), item or weapon (player), xp (gang), vehicle (gang garage) |
name | Item, weapon or vehicle model |
amount | How many or how much |
label | Text on the card |
rarity | Card colour: blue, purple or red |
Locations
Scripted contracts have a params section with spawn points, drop points, vehicle and NPC models. You can move locations by changing their vec4(x, y, z, heading) coordinates. Keep the same number of entries.
Some contracts also set the props and animations used for their interactions:
| Contract | Param | Default | What it does |
|---|---|---|---|
| Stash Recovery | lootProp | prop_cs_heist_bag_02 | The stash bag on the ground |
| Coastal Drop | pickupProp | prop_box_wood02a | The package crate on the beach |
| Armored Score | breachAnim | Drill animation + drill prop | Animation (and hand prop) while cracking the truck's rear doors |
Updating from 2.1.0? lootPed, pickupPed and breachPed were replaced by the params above. Copy the new keys from the fresh config files.
Items a step takes
A step with take removes items from the player when it is done. Point it at params so the item and amount can be changed in Admin → Contracts:
steps = {
{ name = 'deliver', at = 'dropPoint', radius = 10.0, take = { itemParam = 'item', amountParam = 'amount' } },
},
params = {
item = 'packed_weed',
amount = 50,
},A fixed take = { item = 'weed', amount = 50 } still works. When it matches params.item and params.amount, it follows them too.
Count contracts (Tag Run, Clean Sweep, Corner Hustle, Hold the Block, Wash Cycle) have objective.target, which you can change. Don't change objective.event or objective.type.
Included contracts
| File | Type |
|---|---|
armored_score.lua | Scripted |
clean_sweep.lua | Count (remove tags) |
coastal_drop.lua | Scripted |
convoy_ambush.lua | Scripted |
corner_hustle.lua | Count (drug sales) |
hold_the_block.lua | Count (hotspot captures) |
lab_raid.lua | Scripted |
relay_run.lua | Scripted |
stash_recovery.lua | Scripted |
street_scout.lua | Scripted |
tag_run.lua | Count (sprays) |
van_snatch.lua | Scripted |
wash_cycle.lua | Count (money laundered) |
weed_runner.lua | Scripted |
Other resources can add their own contracts too. See External contracts.
After changing contracts, restart the resource, then press Re-roll all gangs in Admin → Contracts so boards pick up the changes.