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.
Fivemanage API key used by the default Uploader bridge. Prefer the convar over pasting the key in the file
General
Option
Default
Description
Config.Debug
convar ogphone_debug
Logs every RPC to the console. Keep off in production
Config.EsxIdentifier
nil
ESX only. xPlayer field holding the character identifier on multicharacter servers. Leave nil on single-character ESX
Config.Carrier
'OGN MOVIL'
Carrier name shown in the status bar
Config.Currency
'$'
Currency symbol used by invoices, fines and notifications
Item
Option
Default
Description
Config.Item.Require
true
The item is required to open the phone
Config.Item.Unique
true
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
Phone numbers
Option
Default
Description
Config.PhoneNumber.Format
'{2}-{4}'
Display format. Numbers are stored as digits only
Config.PhoneNumber.Length
4
Digits after the prefix
Config.PhoneNumber.Prefixes
{ '55', '60', '62', '68', '70' }
Prefixes assigned to new numbers
Custom numbers
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
Command to open or close the phone. false disables it
Config.Keybind
'F1'
Default key. Players can rebind it in the FiveM key bindings
Config.CloseOnDeath
true
Closes the phone when the player dies
Config.CloseWhenSwimming
true
Closes the phone while swimming
Config.AllowInVehicle
true
Allows using the phone inside vehicles
Animation and prop
Option
Default
Description
Config.Animation.Enabled
true
Plays the phone animation
Config.Animation.Prop
`prop_amb_phone`
Prop model
Config.Animation.PropBone
28422
Bone the prop is attached to
Config.Animation.PropOffset
vector3(0.0, 0.0, 0.0)
Prop offset
Config.Animation.PropRotation
vector3(0.0, 0.0, 0.0)
Prop rotation
Notifications
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
Config.Notifications.WakeEvery
20
Seconds between checks for a carried phone
Server notifications
origen_notify notifications can also appear on the phone. They are not stored in the notification center.
Option
Default
Description
Config.ServerNotifications.Enabled
false
Shows server notifications on the phone. The options below only apply when enabled
Config.ServerNotifications.Replace
true
true moves the notification to the phone; false shows it in both places
Config.ServerNotifications.Sound
false
Plays the phone alert tone
Config.ServerNotifications.Types
nil
Types to show. nil or empty shows all. Example: { error = true, primary = true }
Config.ServerNotifications.Cooldown
1500
Identical text within this many milliseconds is not shown again
Logs
Sends phone activity to a Discord webhook. Message contents, photos and private data are never sent.
Option
Default
Description
Config.Logs.Webhook
''
Discord webhook URL. Empty disables logging
Config.Logs.Name
'ORIGEN'
Webhook sender name
lua
Config.Logs.What = { admin = true, -- changes made from the admin panel numbers = true, -- custom number requests and their outcome recovery = true, -- recovered lines transfers = true, -- money transfers blackmarket = true, -- black market purchases}
Storage
Option
Default
Description
Config.Storage.Capacity
0
Capacity in MB. 0 calculates it from Config.Uploader.MaxPhotos (recommended)
Config.Storage.Slack
120
Extra MB for non-photo content when capacity is auto-calculated
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.
Voicemail
Option
Default
Description
Config.Voicemail.Window
120
Seconds after an unanswered call during which a message can be left
Config.Voicemail.MaxSeconds
30
Maximum recording length
WebRTC
Option
Default
Description
Config.WebRTC.Enabled
true
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
Sender number for server messages without a sender
Config.Messages.EditWindow
900
Seconds during which a message can be edited
Config.Messages.PageSize
30
Messages per page when scrolling
Config.Messages.MaxGroupMembers
32
Members per group chat
Config.Messages.AllowDelete
true
Allows deleting messages for everyone
Config.Messages.DeleteWindow
3600
Seconds during which a message can be deleted for everyone
Stickers
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
base
Base fare
perKm
Fare per kilometer
NPC taxi fares
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
Mandao (deliveries)
Option
Default
Description
Config.Delivery.Base
200
Base delivery fare
Config.Delivery.PerKm
60
Fare per kilometer
Config.Delivery.CourierCut
0.85
Share kept by the courier
Config.Delivery.Timeout
20
Minutes an unaccepted job waits
Config.Delivery.Deadline
10
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.
The key is stored and compared; the value is the locale key shown.
Bank, invoices and fines
Option
Default
Description
Config.Bank.MaxTransfer
500000
Limit per transfer from the phone
Config.Bank.MaxDaily
2000000
Total that can be moved per day. 0 removes the limit
Config.Bank.MaxWeekly
8000000
Total that can be moved per week. 0 removes the limit
Config.FineAccount
''
Account that receives fine payments. Empty charges the player without depositing anywhere
Crypto
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.
Emergency services
Alerts are sent to the Dispatch bridge with the caller's position.
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.
Filled by another resource with the SetWidgetData export
Widget permissions are managed in the admin panel.
Pescabichos
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.