Skip to content

Customization

Every decision lives in one of two places, and which one it is depends on a single question: would it hurt if a player read it?

WhereWhat is in itWho may see it
shared/config.lua and shared/config/*.luaEverything about how the phone behavesSent to clients
shared/server_config.luaKeys, tokens, webhooks, certificatesServer only, never sent

That split is not tidiness. A shared config is downloaded by every player who connects, so an upload token or a Discord webhook in one is a token and a webhook everybody has.


shared/config.lua the item, the key, the prop, the animations, the folding
shared/config/
apps.lua which apps exist, which arrive installed, which cost money
battery.lua whether the phone goes flat, and how fast
boss.lua who counts as a boss, and what each rung may do
calls.lua voice, video, speakerphone, the numbers that ring a whole job
camera.lua photos and video, where they are uploaded, the keys
cases.lua (in config.lua) the fourteen colours, and whether they are items
cityid.lua which licences this city issues
crypto.lua the coins, how fast they move, what the house takes
device.lua phones as items: backups, and what belongs to a device
garage.lua where vehicles come from
mail.lua the domain, and who may write to everybody
messages.lua attachments
music.lua streaming, speakers, imports
nearby.lua how far AirDrop reaches
properties.lua housing
pulse.lua jobs, events and news, and who may post
radio.lua channels, and which of them a job may not have
restrict.lua when the phone cannot come out
services.lua the businesses in the directory
social.lua the four social apps and their limits
wallet.lua transfers, invoices, bills
weather.lua where the weather comes from
web.lua the phone on a real browser

Nothing has to be filled in for the phone to work. Every file ships with defaults that run.


The handful worth deciding before anybody logs in

Section titled “The handful worth deciding before anybody logs in”

Config.Device in shared/config/device.lua. Off, a phone belongs to a character and follows them forever. On, the phone is the item: a fresh one is a new phone with a new number, and one that changes hands takes everything on it with it.

It changes what an identifier means everywhere else, so it is a decision to make once rather than a switch to flip on a running city.

Config.AppList in shared/config/apps.lua. Three answers per app:

phone = { How = 'installed' }, -- always there
instapic = { How = 'store', Price = 0 }, -- downloaded from the App Store
darknet = { How = 'off' }, -- gone: not on the phone, not in the store

Jobs and NotJobs narrow an app to a job; Boss = true gives it only to whoever runs a business.

shared/config/restrict.lua. Dead, cuffed, swimming, on fire, in freefall, up a ladder — each with its own switch, and each with Close saying whether an open phone is put away or only refused.

Two numbers in there are worth knowing about because they are what keep the rule sane:

Falling = { Enabled = true, Close = true, Height = 8.0 }, -- metres of air before a fall counts
Climbing = { Enabled = true, Close = true, After = 1.0 }, -- seconds before a climb counts

Without them the phone puts itself away every time somebody hops off a kerb, because the game calls that falling and calls stepping down off a wall climbing.

shared/config/battery.lua, off by default. On, the status bar shows a level that means something, a charger item exists, and a flat phone will not open.

shared/config/wallet.lua for transfers and invoices, shared/config/crypto.lua for the market. Both take the account name your framework uses — bank, money, or whatever you called it.


shared/server_config.lua — copy shared/server_config.example.lua over it and fill in what you use.

  • Uploads — Fivemanage or a Discord webhook, for photos and voice notes.
  • Webhooks — where the phone reports what it wants somebody to know about.
  • HTTPS — the certificate for the browser half. See the certificate.

It is in server_scripts on purpose. A client never receives it.