> For the complete documentation index, see [llms.txt](https://docs.rainmad.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rainmad.com/resources/gta-the-crane-job/troubleshooting.md).

# Troubleshooting

### The fixer is not there

The NPC only spawns client-side, so a fresh restart takes a moment. If it never appears, check `cfg.heist.start.method`: with `'c4'` the fixer is not spawned at all, because the job is meant to start at the wall.

***

### Nothing happens when I talk to the fixer

The start is refused silently only when a run is already live. Otherwise you get a notification saying why:

| Message                                | Cause                                       |
| -------------------------------------- | ------------------------------------------- |
| *Someone is already running that job.* | One run exists server-wide                  |
| *The place is still crawling.*         | `cfg.heist.cooldownMinutes` has not expired |
| *You need at least X people.*          | Crew smaller than `cfg.heist.crew.min`      |
| *Not enough police on duty.*           | `cfg.police.requiredCount` not met          |

***

### C4 does not start the job

Three things have to line up: `cfg.heist.start.method` must be `'c4'` or `'both'`, the explosion type must be in `cfg.heist.start.c4.explosionTypes` (default `2`, sticky bomb), and the blast must land within `cfg.heist.start.c4.radius` of `cfg.scene.coords.wall`.

***

### The office is sealed / the crane is missing

The map resource is not started, or starts after `rm_cranejob`. The crane, the vault and the office are IPLs from the rope-heist map, requested by name at runtime. Move the map above `rm_cranejob` in `server.cfg`.

***

### The crane arm does not move

The lift is driven by the **crew leader** only; other members watch. If the leader is holding the remote and nothing happens, check that `cfg.scene.anim.extendKey` and `retractKey` are not bound to something else in your keybind setup.

Set `manualReach` and `manualCarry` to `false` to fall back to an automatic cutscene and confirm the animation itself plays.

***

### The truck will not accept the crane

The flatbed has to be backed up to the crane and roughly square with it. Raise `cfg.heist.pickup.loadRadius` and `loadHeadingTolerance` if that is too strict. The forklift also has to be within `placeRadius` of the truck and the player has to be in its driver seat.

***

### The rope does not attach

Requirements, in order:

1. Stage is `dropped`, the chest is on the ground.
2. A car is parked on the tow marker and still exists.
3. The player is within 6 metres of the chest.
4. If `cfg.heist.tow.ropeItem` is set, the player has that item.

*The vault is gone* means the chest entity was deleted or moved out of range. The run rewinds and you can try again.

***

### The chest is stuck / floating

The chest is a real physics object. It gets tugged along a taut line, so it can catch on geometry. Drive forward slowly to free it. If it clips into the ground, `cfg.heist.tow.ropeLength` is likely too short for the car you are using.

***

### Nobody got paid

The payout runs per member and needs somewhere to put the money:

* `cfg.blackMoney.type = 'item'` needs the item to exist in your inventory config.
* `'account'` needs `cfg.blackMoney.account` to be a real framework account.
* A full inventory produces *"You had no room for your cut"*.

The run only closes when at least one member is paid, so a total failure keeps the run open and you can retry after making room.

***

### Notifications, prompts or progress bars are missing

Check the console at startup:

```
cfg.bridge.notification = xyz but no adapter registered; bridge.notification calls will no-op
```

That means the adapter name in `cfg.bridge` does not match a shipped adapter. Fix the spelling, or set the category to `'auto'`.

***

### Police never get an alert

`cfg.heist.dispatch.enabled = true` on its own does nothing. You also need `cfg.bridge.dispatch` pointed at your dispatch resource. The console warns about this on startup.

***

### Runs are not logged

`oxmysql` has to be running before `rm_cranejob`. The `rm_cranejob_runs` table is created automatically on the first successful connection. Old rows are pruned to `cfg.retention.logs` days on every start.
