Gameplay settings: prices, limits, keys, app behaviour. Shared with clients
config/bridge.lua
Which external system to use for each category
config/server.lua
Server-only secrets (upload key). Never sent to clients
config/apps.lua
Home-screen app catalogue and API domain ownership
config/widgets.lua
Home-screen widget catalogue
config/pescabichos*.lua
Pescabichos game data: species, spawn zones, attacks, gyms, progression
locales/*.json
Translations
Most day-to-day settings (wallpapers, accents, battery, app access, prices, charging points, shops, valet) live in the admin panel (/telefonoadmin) and are stored in the database, so they change without a restart. The values in config/config.lua for those settings are only the defaults for a fresh installation.
config/config.lua is sent to every client. Never put secrets there: use config/server.lua or a convar.
Each phone is a separate item with its own metadata
Config.Item.Name
'ognphone'
Inventory item name
Config.Item.MetaNumber
'ognPhoneNumber'
Metadata key for the phone number
Config.Item.MetaFormatted
'ognFormattedNumber'
Metadata key for the formatted number
Config.Item.MetaName
'ognPhoneName'
Metadata key for the device name
Config.Item.MetaId
'ognPhoneId'
Metadata key for the phone record id. Tells which device showing a number is the real one. Written automatically to older items the first time they are opened
Config.Item.Owner
'person'
Who owns the data: 'person' (the character) or 'item' (the device). Controlled live from the admin panel; this is only the default
A VIP service: the player requests a number from Settings and an admin approves or denies it from the panel. Money is charged on approval, not on request.
Option
Default
Description
Config.Numbers.Enabled
true
Enables custom number requests
Config.Numbers.Price
25000
Price. 0 makes it free
Config.Numbers.KeepPrefix
true
The requested number must start with one of the configured prefixes
What players see when something arrives with the phone closed. The phone peeks up from the bottom edge with its frame, wallpaper and clock. Content is hidden when the player disabled previews or is in streamer mode.
Option
Default
Description
Config.Notifications.Outside
true
Shows the peeking phone. false only plays a sound
Config.Notifications.Side
'right'
'right', 'center' or 'left'
Config.Notifications.Seconds
6
Time on screen
Config.Notifications.Max
3
Notifications stacked at once
Config.Notifications.AutoWake
true
Turns the phone on invisibly when the player spawns carrying one, so calls and messages reach them before they open it
Used only when the WebRTC direct connection is not available.
Option
Default
Description
Config.Calls.Video.Fps
12
Frame rate ceiling
Config.Calls.Video.Width
240
Image width, in pixels
Config.Calls.Video.Quality
0.5
Starting JPEG quality (0 to 1)
Config.Calls.Video.KBPorSegundo
96
Maximum upload per side over the game connection, in KB/s
Config.Calls.Video.MaxConcurrent
8
Video calls sending images at the same time. Beyond this, calls have audio only
Raising KBPorSegundo is the only risky setting in this block. Frames travel over the same connection as the game; too much upload gets players kicked for timeout.
Sends video peer-to-peer. When off or when the connection fails, it falls back to server-relayed frames
Config.WebRTC.Turn
'cloudflare'
'cloudflare' requests TURN credentials from Cloudflare Realtime (needs the ogphone_turn_token_id and ogphone_turn_api_token convars). false uses STUN only
Config.WebRTC.TurnTtl
86400
Lifetime of the requested credentials, in seconds
Config.WebRTC.Timeout
6
Seconds to wait for the direct connection before falling back
Config.WebRTC.MaxKbit
1000
Maximum upload bitrate for direct video, in kbit/s
Packs bundled with the server, seeded into the database on startup by slug. URLs can be external or from the resource (nui://origen_phone/ui/...). Player packs are created from the gallery.
Who can drive. jobs are framework jobs, businesses are business names or types from the Business bridge. Meeting either is enough. false lets anyone drive. Checked every time, not only at sign-up
When there are free taxi drivers and few requests, fares from NPC passengers are generated. The server validates the driver's position at pickup and destination and rejects impossible arrival times.
Field
Default
Description
enabled
true
Enables NPC fares
every
45
Seconds between generation checks
chance
0.6
Chance of a fare on each check (0 to 1)
perDriver
1
Maximum pending NPC fares per free driver
maxPending
4
Maximum pending NPC fares in total
nearDriver
2500
Pickup within this distance of a free driver, in meters
minTrip / maxTrip
600 / 4500
Trip length range, in meters
radius
80.0
Radius around the point where the taxi must be
maxSpeed
30
Maximum plausible average speed, in m/s
fareFactor
1.0
NPC fare relative to the normal rate
models
list
Ped models used as passengers
names
list
Passenger display names
notes
list
Notes the passenger sends. Empty strings mean no note
places
list
Pickup and drop-off points { x, y, z, label }. The passenger spawns on the nearest sidewalk
Minutes to deliver an accepted job. When it expires, goods are delivered anyway and the courier gets a strike
Config.Delivery.StrikeBans
{ 10, 30, 60 }
Ban minutes per strike. The last entry repeats
Config.Delivery.StrikeReset
120
Minutes without failures before strikes are forgotten
Config.Delivery.MinDistance
150
Minimum delivery distance, in meters
Config.Delivery.Reach
8.0
Distance required to pick up or deliver, in meters
Config.Delivery.MaxItems
8
Distinct items per player-to-player delivery
Config.Delivery.Employer
false
Who can deliver. Same format as Config.Rides.Taxi.employer
Config.Delivery.HandleBusinessOrders
true
Business orders wait for a courier instead of arriving automatically
Config.Delivery.BusinessFee
450
What the business pays the courier for delivering its order
lua
Config.Delivery.Depots = { { label = 'Almacen de mercancia · Muelle 1', x = 95.67, y = -1746.8, z = 28.7, h = 140.88 }, { label = 'Almacen de mercancia · Muelle 2', x = 99.68, y = -1749.3, z = 28.71, h = 139.86 }, { label = 'Almacen de mercancia · Muelle 3', x = 103.73, y = -1751.94, z = 28.72, h = 139.62 },}
Where business order goods are picked up. Empty means pickup at the business itself.
Disabled by default because it fetches live prices from the internet. To enable it, set Config.Crypto.Enabled = true, add { id = 'crypto', label = 'Monedas', slot = 27, default = true } to Apps and crypto = 'crypto' to AppDomains in config/apps.lua.
Option
Default
Description
Config.Crypto.Enabled
false
Enables crypto trading
Config.Crypto.Api
CoinGecko public endpoint
Price source. No API key needed
Config.Crypto.Currency
'usd'
Price currency
Config.Crypto.Refresh
300
Seconds between price fetches (shared by the whole server)
Who can write articles from the phone. Meeting one of businesses or jobs is enough. Set Publishers to false to publish only through the PublishNews export. MaxPerDay is the limit per phone; 0 removes it.
Remove an app from this list to disable it for everyone. To restrict it to some players (civilians, a gang, a job), use the admin panel instead.
AppDomains maps each server API domain to the app that owns it. When a player loses access to an app, its server methods stop answering them, so access is enforced server-side.
Game data for the creature-catching app. Names and texts are locale keys (pb_sp_12, pb_sp_12_desc, pb_atk_12_1); rename a creature by editing that key in each locales/*.json. A value that is not a key is shown as written.