Services App
Add jobs to the Services app and set who in them can do what.
The Services app is where players call and report to jobs, and where those jobs handle dispatch, billing and staff. Jobs are defined in Config.JOBServices in gksphone/config/config.lua.
Three ship configured: police, ambulance and mechanic.
Add a job
The key must match the job name in your framework. Copy an existing block and adjust:
["taxi"] = {
label = "Taxi Station",
location = vector4(895.15, -179.36, 74.70, 240.00),
jobNumber = "555",
-- permissions, by minimum job grade
messageView = 1,
messageSend = 1,
reportView = 1,
reportDeleteAll = 3,
openClosingAuth = 3,
jobBalanceView = 2,
billing = { view = 1, create = 2, delete = 3, pay = 1 },
employe = { view = 2, changeRank = 3, fire = 3, add = 3 },
-- behaviour
isOpen = true,
canCall = true,
autoCallByDuty = true,
Duty = true,
playerNotifications = false,
showInList = true,
alternativejobs = {},
},Then drop a logo into gksphone/html/img/jobs named logo-taxi.png — the filename must match the job key. Restart gksphone.
Permissions
Every numeric field is a minimum job grade. A player passes if their grade is that number or higher, so messageSend = 1 lets grade 1 and up send, and 4 usually means boss only.
A permission you leave out is denied to everyone, not granted. Set it to 0 if you want the whole job to have it.
| Field | Grants |
|---|---|
messageView | Read the job's messages |
messageSend | Send messages as the job |
reportView | See incoming reports |
reportDeleteAll | Clear all reports |
openClosingAuth | Open and close dispatch |
jobBalanceView | View the job account and withdraw from it |
billing.view / .create / .delete / .pay | Handle invoices |
employe.view / .changeRank / .fire / .add | Manage staff |
Other fields
| Field | What it does |
|---|---|
label | Name shown in the app |
location | vector4(x, y, z, heading) of the job centre |
jobNumber | Dial number, e.g. "911". Leave "" for none |
isOpen | Whether dispatch is open when the server boots |
canCall | Show the call button |
autoCallByDuty | Open the call option automatically when a player goes on duty |
Duty | Show the duty toggle under Actions |
playerNotifications | Notify the reporting player when their report is reviewed |
showInList | List the job in the app |
alternativejobs | Other jobs that share this entry |
alternativejobs
The key is the job name and the value switches it on:
alternativejobs = { ["sheriff"] = true },Sheriffs then get the police entry — same dispatch, same permissions, same grades. Set a value to false to turn one off without deleting the line.

