Inicio › Documentación › Configuración · origen_phone

Configuración · origen_phone

Archivo Qué contiene
config/config.lua Ajustes de juego: precios, límites, teclas, comportamiento de las apps. Se comparte con los clientes
config/bridge.lua Qué sistema externo usar en cada categoría
config/server.lua Secretos solo del servidor (clave de subida). Nunca se envía a los clientes
config/apps.lua Catálogo de apps de la pantalla de inicio y propiedad de los dominios de la API
config/widgets.lua Catálogo de widgets de la pantalla de inicio
config/pescabichos*.lua Datos del juego Pescabichos: especies, zonas de aparición, ataques, gimnasios, progresión
locales/*.json Traducciones

La mayoría de los ajustes del día a día (fondos de pantalla, colores de acento, batería, acceso a apps, precios, puntos de carga, tiendas, aparcacoches) viven en el panel de administración (/telefonoadmin) y se guardan en la base de datos, así que cambian sin reiniciar. Los valores de config/config.lua para esos ajustes son solo los valores por defecto de una instalación nueva.

config/config.lua se envía a todos los clientes. No pongas nunca secretos ahí: usa config/server.lua o un convar.


config/bridge.lua

lua
BridgeConfig = {
    Framework = 'auto',
    Inventory = 'auto',
    Notify = 'auto',
    Banking = 'auto',
    Garage = 'auto',
    Housing = 'auto',
    Dispatch = 'auto',
    Business = 'auto',
    Uploader = 'auto',
    Weather = 'auto',
    Voice = 'auto',
    VehicleKeys = 'auto',
    Fuel = 'auto',
}
Valor Comportamiento
'auto' Elige el primer recurso arrancado de la lista de compatibles
'<resource>' Fuerza un recurso concreto por el nombre exacto de su carpeta
'custom' Usa tu implementación en custom/bridge/<category>/
'none' Desactiva la integración a propósito

Consulta Dependencias para ver los recursos compatibles de cada categoría.


config/server.lua

lua
ServerConfig.Fivemanage = {
    ApiKey = GetConvar('ogphone_fivemanage_key', ''),
}
Opción Por defecto Descripción
ServerConfig.Fivemanage.ApiKey convar ogphone_fivemanage_key Clave de API de Fivemanage que usa el bridge de Uploader por defecto. Es mejor usar el convar que pegar la clave en el archivo

General

Opción Por defecto Descripción
Config.Debug convar ogphone_debug Registra en la consola cada RPC. Mantenlo desactivado en producción
Config.EsxIdentifier nil Solo ESX. Campo de xPlayer que contiene el identificador del personaje en servidores multipersonaje. Déjalo en nil en ESX de un solo personaje
Config.Carrier 'OGN MOVIL' Nombre del operador que se muestra en la barra de estado
Config.Currency '$' Símbolo de moneda que usan facturas, multas y notificaciones

Objeto

Opción Por defecto Descripción
Config.Item.Require true El objeto es obligatorio para abrir el teléfono
Config.Item.Unique true Cada teléfono es un objeto distinto con sus propios metadatos
Config.Item.Name 'ognphone' Nombre del objeto en el inventario
Config.Item.MetaNumber 'ognPhoneNumber' Clave de metadatos del número de teléfono
Config.Item.MetaFormatted 'ognFormattedNumber' Clave de metadatos del número con formato
Config.Item.MetaName 'ognPhoneName' Clave de metadatos del nombre del dispositivo
Config.Item.MetaId 'ognPhoneId' Clave de metadatos del id del registro del teléfono. Indica cuál de los dispositivos que muestran un número es el verdadero. Se escribe automáticamente en los objetos antiguos la primera vez que se abren
Config.Item.Owner 'person' A quién pertenecen los datos: 'person' (el personaje) o 'item' (el dispositivo). Se controla en directo desde el panel de administración; esto es solo el valor por defecto

Números de teléfono

Opción Por defecto Descripción
Config.PhoneNumber.Format '{2}-{4}' Formato de visualización. Los números se guardan solo como dígitos
Config.PhoneNumber.Length 4 Dígitos después del prefijo
Config.PhoneNumber.Prefixes { '55', '60', '62', '68', '70' } Prefijos que se asignan a los números nuevos

Números personalizados

Un servicio VIP: el jugador solicita un número desde Ajustes y un administrador lo aprueba o lo deniega desde el panel. El dinero se cobra al aprobar, no al solicitar.

Opción Por defecto Descripción
Config.Numbers.Enabled true Activa las solicitudes de número personalizado
Config.Numbers.Price 25000 Precio. Con 0 es gratis
Config.Numbers.KeepPrefix true El número solicitado debe empezar por uno de los prefijos configurados
Config.Numbers.Reserved ver abajo Números que no se pueden solicitar
lua
Config.Numbers.Reserved = {
    '550000', '551111', '552222', '555555',
    '600000', '601111', '606060', '666666',
    '700000', '707070', '777777',
}

Apertura

Opción Por defecto Descripción
Config.Command 'ogphone' Comando para abrir o cerrar el teléfono. false lo desactiva
Config.Keybind 'F1' Tecla por defecto. Los jugadores pueden reasignarla en los atajos de teclado de FiveM
Config.CloseOnDeath true Cierra el teléfono cuando el jugador muere
Config.CloseWhenSwimming true Cierra el teléfono mientras se nada
Config.AllowInVehicle true Permite usar el teléfono dentro de vehículos

Animación y prop

Opción Por defecto Descripción
Config.Animation.Enabled true Reproduce la animación del teléfono
Config.Animation.Prop prop_amb_phone Modelo del prop
Config.Animation.PropBone 28422 Hueso al que se une el prop
Config.Animation.PropOffset vector3(0.0, 0.0, 0.0) Desplazamiento del prop
Config.Animation.PropRotation vector3(0.0, 0.0, 0.0) Rotación del prop

Notificaciones

Lo que ven los jugadores cuando llega algo con el teléfono cerrado. El teléfono asoma por el borde inferior con su marco, su fondo de pantalla y el reloj. El contenido se oculta cuando el jugador ha desactivado las vistas previas o está en modo streamer.

Opción Por defecto Descripción
Config.Notifications.Outside true Muestra el teléfono asomando. Con false solo suena un sonido
Config.Notifications.Side 'right' 'right', 'center' o 'left'
Config.Notifications.Seconds 6 Tiempo en pantalla
Config.Notifications.Max 3 Notificaciones apiladas a la vez
Config.Notifications.AutoWake true Enciende el teléfono de forma invisible cuando el jugador aparece llevando uno, para que las llamadas y los mensajes le lleguen antes de abrirlo
Config.Notifications.WakeEvery 20 Segundos entre comprobaciones de si lleva un teléfono encima

Notificaciones del servidor

Las notificaciones de origen_notify también pueden aparecer en el teléfono. No se guardan en el centro de notificaciones.

Opción Por defecto Descripción
Config.ServerNotifications.Enabled false Muestra las notificaciones del servidor en el teléfono. Las opciones de abajo solo se aplican si está activado
Config.ServerNotifications.Replace true Con true la notificación pasa al teléfono; con false se muestra en ambos sitios
Config.ServerNotifications.Sound false Reproduce el tono de alerta del teléfono
Config.ServerNotifications.Types nil Tipos que se muestran. nil o vacío los muestra todos. Ejemplo: { error = true, primary = true }
Config.ServerNotifications.Cooldown 1500 Un texto idéntico dentro de estos milisegundos no se vuelve a mostrar

Logs

Envía la actividad del teléfono a un webhook de Discord. Nunca se envían el contenido de los mensajes, las fotos ni los datos privados.

Opción Por defecto Descripción
Config.Logs.Webhook '' URL del webhook de Discord. Vacío desactiva los logs
Config.Logs.Name 'ORIGEN' Nombre del remitente del webhook
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
}

Almacenamiento

Opción Por defecto Descripción
Config.Storage.Capacity 0 Capacidad en MB. 0 la calcula a partir de Config.Uploader.MaxPhotos (recomendado)
Config.Storage.Slack 120 MB extra para contenido que no son fotos cuando la capacidad se calcula automáticamente
lua
Config.Storage.Weights = {
    photo   = 2400,
    video   = 18000,
    memo    = 900,
    note    = 4,
    message = 1,
}

Tamaño que se cuenta por elemento guardado, en kilobytes, cuando se desconoce el tamaño real.


Batería

Opción Por defecto Descripción
Config.Battery.Enabled false Activa el consumo de batería
Config.Battery.DrainSeconds 55 Segundos por cada 1 % con el teléfono abierto
Config.Battery.DrainSecondsIdle 100 Segundos por cada 1 % con el teléfono cerrado
Config.Battery.ChargePerTick 5 Carga por tick
Config.Battery.ChargeMinutes 20 Minutos para cargar por completo en un punto de carga

Los puntos de carga se colocan desde el panel de administración.


Recuperación de línea y tienda de teléfonos

Opción Por defecto Descripción
Config.Recovery.Enabled true Activa la recuperación de línea en la tienda del operador
Config.Recovery.Price 5000 Tarifa de recuperación. Con 0 es gratis
Config.Recovery.Range 3.0 Distancia al mostrador, en metros
Config.Shop.Enabled true Activa la tienda de teléfonos
Config.Shop.PhonePrice 1500 Precio de un teléfono nuevo. Con 0 es gratis

Las ubicaciones de las tiendas se definen desde el panel de administración, en Mapa > Tiendas. La recuperación usa los mismos mostradores.

lua
Config.Shop.Ped = {
    model = 's_m_m_highsec_01',
    heading = nil,
    scenario = 'WORLD_HUMAN_CLIPBOARD',
}
 
Config.Shop.Blip = {
    sprite = 606,
    color = 3,
    scale = 0.7,
}

Pon Config.Shop.Ped o Config.Shop.Blip en false para desactivar al dependiente o el blip.


Llamadas

Opción Por defecto Descripción
Config.Calls.KeyAnswer 'RETURN' Tecla por defecto para contestar una llamada entrante
Config.Calls.KeyHangup 'BACK' Tecla por defecto para rechazar o colgar
Config.Calls.RingTimeout 30 Segundos que suena antes de contar como perdida
Config.Calls.MaxDuration 3600 Corte de seguridad, en segundos
Config.Calls.AllowVideo true Activa las videollamadas
Config.Calls.AllowRecording true Activa la grabación de llamadas. Se graba a la otra parte sin avisarle
Config.Calls.AllowVoiceFilter true Activa el cambiador de voz. El filtro se ejecuta en el cliente de quien escucha
Config.Calls.SpeakerRadius 3.0 Metros dentro de los cuales los jugadores cercanos se unen a una llamada en altavoz
Config.Calls.MaxParticipants 5 Máximo de personas en una llamada, incluidas las dos que la iniciaron
lua
Config.Calls.Emergency = {
    ['911'] = 'police',
    ['112'] = 'police',
    ['police'] = 'police',
    ['061'] = 'ambulance',
    ['ambulance'] = 'ambulance',
    ['mechanic'] = 'mechanic',
}

Números cortos que enrutan una llamada a un trabajo de servicio.

Vídeo (alternativa por fotogramas)

Se usa solo cuando no está disponible la conexión directa WebRTC.

Opción Por defecto Descripción
Config.Calls.Video.Fps 12 Techo de fotogramas por segundo
Config.Calls.Video.Width 240 Ancho de la imagen, en píxeles
Config.Calls.Video.Quality 0.5 Calidad JPEG inicial (0 a 1)
Config.Calls.Video.KBPorSegundo 96 Subida máxima por lado a través de la conexión del juego, en KB/s
Config.Calls.Video.MaxConcurrent 8 Videollamadas que envían imágenes a la vez. Por encima de este número, las llamadas solo llevan audio

Subir KBPorSegundo es el único ajuste arriesgado de este bloque. Los fotogramas viajan por la misma conexión que el juego; demasiada subida hace que expulsen a los jugadores por timeout.

Buzón de voz

Opción Por defecto Descripción
Config.Voicemail.Window 120 Segundos tras una llamada sin contestar durante los cuales se puede dejar un mensaje
Config.Voicemail.MaxSeconds 30 Duración máxima de la grabación

WebRTC

Opción Por defecto Descripción
Config.WebRTC.Enabled true Envía el vídeo de punto a punto. Si está desactivado o la conexión falla, recurre a fotogramas retransmitidos por el servidor
Config.WebRTC.Turn 'cloudflare' 'cloudflare' solicita credenciales TURN a Cloudflare Realtime (requiere los convars ogphone_turn_token_id y ogphone_turn_api_token). false usa solo STUN
Config.WebRTC.TurnTtl 86400 Vida útil de las credenciales solicitadas, en segundos
Config.WebRTC.Timeout 6 Segundos de espera de la conexión directa antes de recurrir a la alternativa
Config.WebRTC.MaxKbit 1000 Bitrate máximo de subida para vídeo directo, en kbit/s
lua
Config.WebRTC.IceServers = {
    { urls = 'stun:stun.l.google.com:19302' },
    { urls = 'stun:stun1.l.google.com:19302' },
    -- { urls = 'turn:my.server:3478', username = 'user', credential = 'password' },
}

Mensajes

Opción Por defecto Descripción
Config.Messages.MaxLength 1000 Caracteres por mensaje
Config.Messages.SystemNumber '900100' Número remitente de los mensajes del servidor sin remitente
Config.Messages.EditWindow 900 Segundos durante los cuales se puede editar un mensaje
Config.Messages.PageSize 30 Mensajes por página al hacer scroll
Config.Messages.MaxGroupMembers 32 Miembros por chat de grupo
Config.Messages.AllowDelete true Permite borrar mensajes para todos
Config.Messages.DeleteWindow 3600 Segundos durante los cuales se puede borrar un mensaje para todos

Stickers

Packs incluidos con el servidor, que se cargan en la base de datos al arrancar según el slug. Las URL pueden ser externas o del propio recurso (nui://origen_phone/ui/...). Los packs de los jugadores se crean desde la galería.

lua
Config.StickerPacks = {
    {
        slug = 'caras',
        title = 'Caras',
        cover = nil,
        stickers = {
            { emoji = '😀' }, { emoji = '😂' }, -- ...
        },
    },
    -- 'ciudad', 'reacciones'
}

Opción Por defecto Descripción
Config.Uploader.MaxPhotos 500 Fotos por teléfono
Config.Uploader.TrashDays 30 Días en la papelera antes del borrado definitivo

Contactos, alarmas y correo

Opción Por defecto Descripción
Config.Contacts.ShareRange 5.0 Metros dentro de los cuales se puede compartir un número cara a cara
Config.Alarms.Max 10 Alarmas por teléfono
Config.Alarms.RingSeconds 30 Segundos que suena una alarma antes de detenerse
Config.Mail.Domain 'ogn.net' Dominio de las direcciones de correo del servidor
Config.Mail.MaxLength 4000 Caracteres por correo
Config.Mail.MaxRecipients 10 Destinatarios por correo
Config.Mail.MaxAttachments 6 Adjuntos por correo (enlaces, no archivos)

OGN (red social)

Opción Por defecto Descripción
Config.OGN.Enabled true Activa la red social
Config.OGN.UsernamePattern '^[%w%._]+$' Caracteres permitidos en el nombre de usuario
Config.OGN.UsernameMin 3 Longitud mínima del nombre de usuario
Config.OGN.UsernameMax 20 Longitud máxima del nombre de usuario
Config.OGN.MaxCaption 2200 Caracteres por pie de foto
Config.OGN.MaxComment 500 Caracteres por comentario
Config.OGN.MaxMediaPerPost 10 Archivos multimedia por publicación
Config.OGN.StoryHours 24 Duración de una historia
Config.OGN.FeedPageSize 12 Publicaciones por página del feed
Config.OGN.CostToVerify false Precio de la verificación. false desactiva la verificación de pago

Directos

Opción Por defecto Descripción
Config.OGN.Live.Enabled true Activa los directos
Config.OGN.Live.Fps 2 Fotogramas por segundo
Config.OGN.Live.Width 320 Lado más largo de la imagen, en píxeles
Config.OGN.Live.Quality 0.45 Calidad JPEG (0 a 1)
Config.OGN.Live.MaxConcurrent 3 Directos simultáneos en todo el servidor
Config.OGN.Live.MaxViewers 20 Espectadores por directo. Baja esto primero si vas justo de ancho de banda
Config.OGN.Live.ChatLines 60 Líneas de chat que se conservan durante el directo

OGN Fans

Fotos de pago para desbloquear. Quien no las compra las ve pixeladas.

Opción Por defecto Descripción
Config.Fans.Commission 0.20 Parte del servidor en cada venta y propina (0 a 1)
Config.Fans.MinPrice 0 Precio mínimo de una foto. 0 es gratis
Config.Fans.MaxPrice 50000 Precio máximo de una foto
Config.Fans.MinTip 10 Propina mínima
Config.Fans.MaxTip 100000 Propina máxima
Config.Fans.PageSize 20 Publicaciones por página
Config.Fans.ImageHosts { 'fivemanage.com', 'fmfile.com' } Hosts desde los que el servidor puede descargar para pixelar las fotos
Config.Fans.MaxImageBytes 8388608 Tamaño máximo de la foto descargada, en bytes

DarkChat

El «cifrado» es solo de rol: los mensajes se guardan en la base de datos y el staff puede leerlos.

Opción Por defecto Descripción
Config.DarkChat.Enabled true Activa DarkChat
Config.DarkChat.CodeLength 6 Longitud del código de sala
Config.DarkChat.MaxMembers 24 Miembros por sala
Config.DarkChat.MaxRooms 8 Salas que un jugador puede tener abiertas
Config.DarkChat.InviteRadius 3.0 Metros dentro de los cuales se puede añadir a alguien sin el código
Config.DarkChat.BurnOptions { 0, 5, 30, 60, 1440 } Opciones de autodestrucción, en minutos. 0 no borra nunca

Mercado negro

Anuncios bajo un alias, entregados mediante puntos de entrega ocultos.

Opción Por defecto Descripción
Config.BlackMarket.Enabled true Activa el mercado negro
Config.BlackMarket.Days 3 Días que dura un anuncio
Config.BlackMarket.MaxPerPhone 6 Anuncios activos por jugador
Config.BlackMarket.MaxItems 6 Objetos distintos por anuncio
Config.BlackMarket.MaxStock 50 Unidades por anuncio
Config.BlackMarket.Commission 0.1 Comisión por venta
Config.BlackMarket.DropRadius 5.0 Distancia de recogida de un punto de entrega, en metros
Config.BlackMarket.DropMinutes 60 Minutos que un paquete permanece en el punto antes de que se cancele el trato y se reembolse
lua
Config.BlackMarket.Blocked = {
    'vehiclekey', 'vehicle_key', 'carkeys', 'keys',
    'vehicledocs', 'vehicle_papers', 'documentacion_vehiculo',
}

Anuncios y marketplace

Opción Por defecto Descripción
Config.Ads.Days 7 Días que dura un anuncio
Config.Ads.MaxPerPhone 5 Anuncios activos por teléfono
Config.Ads.Cost 0 Coste de publicar. 0 es gratis
Config.Market.MaxItems 6 Objetos distintos por anuncio
Config.Market.MaxStock 50 Unidades por anuncio
Config.Market.Commission 0.05 Comisión de la plataforma por venta
lua
Config.Ads.Categories = {
    { id = 'venta',     label = 'Se vende' },
    { id = 'compra',    label = 'Se compra' },
    { id = 'servicios', label = 'Servicios' },
    { id = 'empleo',    label = 'Empleo' },
    { id = 'vivienda',  label = 'Vivienda' },
    { id = 'general',   label = 'General' },
}
 
Config.Market.Blocked = {
    'vehiclekey', 'vehicle_key', 'carkeys', 'keys',
    'vehicledocs', 'vehicle_papers', 'documentacion_vehiculo',
}

Los objetos vendidos salen del inventario del vendedor y llegan al del comprador, entregados por un mensajero de Mandao.


Viajes: Taxi y GO

Opción Por defecto Descripción
Config.Rides.MinDistance 100 Distancia mínima del viaje, en metros
Config.Rides.DriverCut 0.85 Parte que se queda el conductor. El resto sale de la economía
Config.Rides.Timeout 5 Minutos que espera una solicitud sin aceptar
Config.Rides.StuckMinutes 30 Minutos tras la aceptación a partir de los cuales el pasajero puede cancelar una vez dentro del vehículo
lua
Config.Rides.Taxi = {
    label = 'Taxi',
    employer = {
        jobs = { 'taxi' },
        businesses = { 'taxi' },
    },
    base = 150,
    perKm = 45,
}
 
Config.Rides.Go = {
    label = 'GO',
    employer = false,
    base = 300,
    perKm = 90,
}
Campo Descripción
employer Quién puede conducir. jobs son trabajos del framework, businesses son nombres o tipos de negocio del bridge Business. Basta con cumplir uno de los dos. false permite conducir a cualquiera. Se comprueba cada vez, no solo al darse de alta
base Tarifa base
perKm Tarifa por kilómetro

Carreras de taxi con NPC

Cuando hay taxistas libres y pocas solicitudes, se generan carreras de pasajeros NPC. El servidor valida la posición del conductor en la recogida y en el destino y rechaza tiempos de llegada imposibles.

Campo Por defecto Descripción
enabled true Activa las carreras con NPC
every 45 Segundos entre comprobaciones de generación
chance 0.6 Probabilidad de que haya una carrera en cada comprobación (0 a 1)
perDriver 1 Máximo de carreras NPC pendientes por conductor libre
maxPending 4 Máximo de carreras NPC pendientes en total
nearDriver 2500 La recogida está a esta distancia de un conductor libre, en metros
minTrip / maxTrip 600 / 4500 Rango de longitud del trayecto, en metros
radius 80.0 Radio alrededor del punto donde debe estar el taxi
maxSpeed 30 Velocidad media máxima plausible, en m/s
fareFactor 1.0 Tarifa NPC respecto a la tarifa normal
models lista Modelos de ped usados como pasajeros
names lista Nombres que se muestran de los pasajeros
notes lista Notas que envía el pasajero. Las cadenas vacías significan sin nota
places lista Puntos de recogida y destino { x, y, z, label }. El pasajero aparece en la acera más cercana

Mandao (repartos)

Opción Por defecto Descripción
Config.Delivery.Base 200 Tarifa base de reparto
Config.Delivery.PerKm 60 Tarifa por kilómetro
Config.Delivery.CourierCut 0.85 Parte que se queda el mensajero
Config.Delivery.Timeout 20 Minutos que espera un encargo sin aceptar
Config.Delivery.Deadline 10 Minutos para entregar un encargo aceptado. Al vencer, la mercancía se entrega igualmente y el mensajero recibe una falta
Config.Delivery.StrikeBans { 10, 30, 60 } Minutos de bloqueo por falta. La última entrada se repite
Config.Delivery.StrikeReset 120 Minutos sin fallos antes de que se olviden las faltas
Config.Delivery.MinDistance 150 Distancia mínima de entrega, en metros
Config.Delivery.Reach 8.0 Distancia necesaria para recoger o entregar, en metros
Config.Delivery.MaxItems 8 Objetos distintos por entrega entre jugadores
Config.Delivery.Employer false Quién puede repartir. Mismo formato que Config.Rides.Taxi.employer
Config.Delivery.HandleBusinessOrders true Los pedidos de negocios esperan a un mensajero en lugar de llegar automáticamente
Config.Delivery.BusinessFee 450 Lo que el negocio paga al mensajero por entregar su pedido
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 },
}

Dónde se recoge la mercancía de los pedidos de negocios. Vacío significa recogida en el propio negocio.


Beboteo (citas)

Opción Por defecto Descripción
Config.Dating.DailyLikes 20 Likes diarios para usuarios no VIP
Config.Dating.MaxPhotos 6 Fotos por perfil
Config.Dating.VipPrice 5000 Precio del VIP
Config.Dating.VipDays 30 Duración del VIP
Config.Dating.VipLabel 'BEBOTEO VIP' Texto de la insignia VIP
lua
Config.Dating.Genders = {
    hombre = 'dating_gender_male',
    mujer = 'dating_gender_female',
    otro = 'dating_gender_other',
}

La clave se guarda y se compara; el valor es la clave de locale que se muestra.


Banco, facturas y multas

Opción Por defecto Descripción
Config.Bank.MaxTransfer 500000 Límite por transferencia desde el teléfono
Config.Bank.MaxDaily 2000000 Total que se puede mover al día. 0 quita el límite
Config.Bank.MaxWeekly 8000000 Total que se puede mover a la semana. 0 quita el límite
Config.FineAccount '' Cuenta que recibe los pagos de multas. Vacío cobra al jugador sin ingresar en ningún sitio

Cripto

Desactivado por defecto porque obtiene precios en vivo de internet. Para activarlo, pon Config.Crypto.Enabled = true, añade { id = 'crypto', label = 'Monedas', slot = 27, default = true } a Apps y crypto = 'crypto' a AppDomains en config/apps.lua.

Opción Por defecto Descripción
Config.Crypto.Enabled false Activa el trading de criptomonedas
Config.Crypto.Api endpoint público de CoinGecko Fuente de precios. No necesita clave de API
Config.Crypto.Currency 'usd' Moneda de los precios
Config.Crypto.Refresh 300 Segundos entre consultas de precios (compartido por todo el servidor)
Config.Crypto.Fee 0.02 Comisión de la casa por operación
Config.Crypto.MaxPerTrade 500000 Importe máximo por operación. 0 quita el límite
lua
Config.Crypto.Coins = {
    'bitcoin', 'ethereum', 'solana', 'dogecoin', 'cardano', 'litecoin',
}
 
Config.Crypto.Names = {
    bitcoin  = 'Bitoro',
    ethereum = 'Etherna',
    solana   = 'Solaris',
    dogecoin = 'Perrocoin',
    cardano  = 'Cardina',
    litecoin = 'Ligera',
}

Si la fuente de precios no responde, el trading se desactiva.


Navegador

Solo abre sitios incluidos en la lista blanca. Los dominios se comparan, así que origen.net permite todas sus páginas y subdominios.

Opción Por defecto Descripción
Config.Browser.Enabled true Activa el navegador
Config.Browser.Home '' Página de inicio. Vacío empieza en los marcadores
Config.Browser.Sites {} Sitios permitidos. Vacío no abre nada
Config.Browser.Bookmarks {} Marcadores definidos por el servidor

Música

lua
Config.Music.Stations = {
    -- { id = 'ogn', name = 'Radio OGN', genre = 'Mixed', url = 'https://...' },
}
Config.Music.AllowCustomUrl = true

La URL debe ser una emisión que el navegador pueda reproducir (mp3, aac o m3u8 de audio). Solo suena para el jugador que la inicia.


Noticias

lua
Config.News.Publishers = {
    businesses = { 'weazel', 'weazelnews', 'cnt' },
    jobs = { 'reporter', 'weazel', 'weazelnews', 'cnt' },
    error = 'err_news_need_job',
}
Config.News.MaxPerDay = 6

Quién puede escribir artículos desde el teléfono. Basta con cumplir uno de businesses o jobs. Pon Publishers en false para publicar solo mediante el export PublishNews. MaxPerDay es el límite por teléfono; 0 lo quita.


Servicios de emergencia

Las alertas se envían al bridge de Dispatch con la posición de quien llama.

lua
Config.Services.Cooldown = 60
Config.Services.List = {
    {
        id = 'police',
        label = 'Policia',
        description = 'Robos y peleas',
        icon = 'lucide:shield',
        job = 'police',
        alertTitle = 'Aviso ciudadano',
    },
    {
        id = 'ambulance',
        label = 'Emergencias medicas',
        description = 'Heridos y accidentes',
        icon = 'lucide:cross',
        job = 'ambulance',
        alertTitle = 'Aviso medico',
    },
}
Campo Descripción
Cooldown Segundos entre alertas desde el mismo teléfono
job Trabajo que recibe la alerta
alertTitle Título de la alerta de dispatch

Los mecánicos y las grúas no van aquí: con un recurso de negocios aparecen como negocios en la app.


Moderación

Opción Por defecto Descripción
Config.Filter.Enabled true Activa los filtros
Config.Filter.Words {} Palabras que se enmascaran en todo lo que escribe un jugador. Se detectan dentro de otras palabras, sin distinguir mayúsculas ni acentos. Viene vacío
Config.Filter.Mask '***' Texto de sustitución
Config.Filter.ReservedNames ver abajo Nombres prohibidos en nombres de usuario, alias y nombres de perfil
lua
Config.Filter.ReservedNames = {
    'admin', 'administrador', 'staff', 'moderador', 'soporte', 'support',
    'police', 'policia', 'lspd', 'bcso', 'sheriff', 'ems', 'sama', 'emergencias',
    'origen', 'ogn', 'sistema', 'system', 'oficial', 'official',
}

Panel de administración y acceso a apps

Opción Por defecto Descripción
Config.Admin.Command 'telefonoadmin' Comando que abre el panel
Config.Admin.Ace 'ogphone.admin' Permiso ACE
Config.Admin.Export { resource = 'origen_admin', method = 'IsAdmin' } Export que recibe el source y devuelve true o false. Se ejecuta dentro de pcall
Config.Admin.Licenses {} Identificadores individuales permitidos
Config.AppRules.Unemployed 'unemployed' Nombre del trabajo para jugadores sin trabajo
Config.AppRules.NoGang 'none' Nombre de la banda para jugadores que no están en ninguna

Las reglas de acceso a las apps (quién obtiene cada app) se definen desde el panel de administración o con el export SetAppRule.


Apariencia y sonidos

Son valores por defecto; una vez cambiados desde el panel, mandan los valores de la base de datos.

lua
Config.Wallpapers = {
    { id = 'default',  label = 'ORIGEN',             url = 'images/wallpapers/origen.jpg' },
    { id = 'gradient', label = 'wallpaper_gradient', url = 'images/wallpapers/default.svg' },
    { id = 'midnight', label = 'wallpaper_midnight', url = 'images/wallpapers/midnight.svg' },
    { id = 'sunset',   label = 'wallpaper_sunset',   url = 'images/wallpapers/sunset.svg' },
    { id = 'forest',   label = 'wallpaper_forest',   url = 'images/wallpapers/forest.svg' },
    { id = 'carbon',   label = 'wallpaper_carbon',   url = 'images/wallpapers/carbon.svg' },
    { id = 'light',    label = 'wallpaper_light',    url = 'images/wallpapers/light.svg', light = true },
}
 
Config.Accents = {
    { id = 'origen', label = 'ORIGEN',        acc = '#fc0259', rgb = '252, 2, 89',   soft = '#fc0259', pale = '#fd9bbd', deep = '#82173c' },
    { id = 'blue',   label = 'accent_blue',   acc = '#2f7dff', rgb = '47, 125, 255', soft = '#2f7dff', pale = '#a8c8ff', deep = '#173f82' },
    -- green, yellow, red, orange
}

url puede ser un archivo de ui/images/wallpapers o una dirección externa. label puede ser una clave de locale o texto plano.

lua
Config.Sounds.Ringtones = {
    { id = 'ring1', label = 'ringtone_1', file = 'Ringtone1.mp3' },
    -- ring2 ... ring6
}
 
Config.Sounds.Ringback = { sound = 'Remote_Ring', set = 'Phone_SoundSet_Michael', loops = true }
Config.Sounds.Hangup   = { sound = 'Hang_Up', set = 'Phone_SoundSet_Michael' }
 
Config.Sounds.Alerts = {
    { id = 'aviso1', label = 'alert_tone_1', file = 'Notificacion1.mp3' },
    -- aviso2 ... aviso5
    { id = 'silent', label = 'alert_tone_none', file = false },
}

Los tonos de llamada y las alertas son archivos en ui/sounds/. El id se guarda en los ajustes de cada jugador, así que no debe cambiar una vez publicado.


Idiomas

Opción Por defecto Descripción
Config.DefaultLanguage 'es' Idioma por defecto del teléfono
Config.Languages { 'es', 'en', 'fr', 'de', 'pt' } Idiomas disponibles. Con uno solo, el selector de idioma se oculta
Config.DateLocales es-ES, en-GB, fr-FR, de-DE, pt-PT Formato de fechas y números por idioma
Config.DateLocale 'es-ES' Valor de respaldo para un idioma que falta en DateLocales

Para añadir un idioma, copia locales/en.json, tradúcelo y añade su código a Config.Languages y Config.DateLocales.


config/apps.lua

La fuente de verdad del servidor sobre qué apps existen. Editar la interfaz no basta para entrar en una app.

Campo Descripción
id Identificador de la app
label Nombre que se muestra
slot Posición en la cuadrícula de la pantalla de inicio (1 a 24 por página)
dock Se coloca en el dock inferior en lugar de en la cuadrícula
default Instalada por defecto
fija No se puede desinstalar desde la tienda de apps
lua
Apps = {
    { id = 'phone',    label = 'Telefono', dock = 1, default = true, fija = true },
    { id = 'messages', label = 'Mensajes', dock = 2, default = true, fija = true },
    { id = 'ogn',      label = 'OGN',      dock = 3, default = true },
    { id = 'camera',   label = 'Camara',   dock = 4, default = true },
 
    { id = 'store',    label = 'Apps',       slot = 1, default = true, fija = true },
    { id = 'widgets',  label = 'Widgets',    slot = 2, default = true, fija = true },
    { id = 'gallery',  label = 'Galeria',    slot = 3, default = true },
    { id = 'settings', label = 'Ajustes',    slot = 4, default = true, fija = true },
    -- notes, calendar, map, weather, music, news, bank, ads, services, vehicles,
    -- mail, taxi, go, invoices, fines, clock, delivery, dating, calculator,
    -- properties, browser, voicememo, darkchat, blackmarket, fans, pescabichos
}

Quita una app de esta lista para desactivarla para todos. Para restringirla a algunos jugadores (civiles, una banda, un trabajo), usa en su lugar el panel de administración.

AppDomains asigna cada dominio de la API del servidor a la app que lo posee. Cuando un jugador pierde el acceso a una app, sus métodos del servidor dejan de responderle, por lo que el acceso se aplica en el lado del servidor.


config/widgets.lua

lua
Widgets.Catalogo = {
    { id = 'servidor',    label = 'widget_name_server',     fuente = 'propio' },
    { id = 'weather',     label = 'widget_name_weather',    fuente = 'propio' },
    { id = 'bank',        label = 'widget_name_bank',       fuente = 'propio' },
    { id = 'trabajo',     label = 'widget_name_job',        fuente = 'fuera'  },
    { id = 'emergencias', label = 'widget_name_emergency',  fuente = 'propio' },
    { id = 'multas',      label = 'widget_name_bills',      fuente = 'propio' },
    { id = 'garaje',      label = 'widget_name_garage',     fuente = 'propio' },
    { id = 'negocio',     label = 'widget_name_business',   fuente = 'fuera'  },
    { id = 'facciones',   label = 'widget_name_factions',   fuente = 'propio' },
    { id = 'ruta',        label = 'widget_name_route',      fuente = 'propio' },
    { id = 'radio',       label = 'widget_name_radio',      fuente = 'fuera'  },
    { id = 'anuncios',    label = 'widget_name_ads',        fuente = 'propio' },
    { id = 'battery',     label = 'widget_name_battery',    fuente = 'propio' },
    { id = 'activity',    label = 'widget_name_activity',   fuente = 'propio' },
}
fuente Significado
'propio' Lo rellena el propio teléfono
'fuera' Lo rellena otro recurso con el export SetWidgetData

Los permisos de los widgets se gestionan en el panel de administración.


Pescabichos

Datos de juego de la app de captura de criaturas. Los nombres y textos son claves de locale (pb_sp_12, pb_sp_12_desc, pb_atk_12_1); para renombrar una criatura, edita esa clave en cada locales/*.json. Un valor que no es una clave se muestra tal cual.

Archivo Qué contiene
config/pescabichos.lua Tipos, rarezas, zonas de aparición y especies del 1 al 50
config/pescabichos_especies2.lua / pescabichos_especies3.lua Especies a partir de la 51
config/pescabichos_combate.lua Combates, tabla de tipos, movimientos por tipo, gimnasios, incursiones, evolución
config/pescabichos_ataques.lua Ataques de cada criatura
config/pescabichos_progreso.lua Nivel del jugador, desbloqueos y tienda

Campos de especie

Campo Descripción
id Número de colección (1 a 200). También es el nombre de la imagen: ui/images/pescabichos/<id>.webp
nombre Clave de locale del nombre
tipos Uno o dos de asfalto, neon, marea, polvo, pino, chatarra, brasa, niebla
rareza comun, poco, rara, epica o legendaria
zonas Dónde aparece. Vacío es en cualquier parte de tierra. 'mar' es agua de verdad
peso Peso de aparición opcional. Por defecto, el de su rareza
stock Máximo opcional en todo el servidor
red Red especial opcional necesaria para capturarla
dificultad Dificultad de captura opcional (1 a 5)
hora nil siempre, 'noche' (21-6) o 'dia' (7-20)
familia / fase Línea evolutiva y etapa (1, 2 o 3)
pc Poder mínimo y máximo con el que aparece
texto Clave de locale de su entrada en la dex

Rarezas

lua
Pescabichos.Rarezas = {
    comun      = { nombre = 'pb_rarity_comun',      peso = 100, captura = 0.55, huye = 0.08, xp = 100 },
    poco       = { nombre = 'pb_rarity_poco',       peso = 38,  captura = 0.35, huye = 0.12, xp = 200 },
    rara       = { nombre = 'pb_rarity_rara',       peso = 12,  captura = 0.20, huye = 0.18, xp = 500 },
    epica      = { nombre = 'pb_rarity_epica',      peso = 3,   captura = 0.09, huye = 0.25, xp = 1500 },
    legendaria = { nombre = 'pb_rarity_legendaria', peso = 1,   captura = 0.04, huye = 0.35, xp = 4000 },
}
Campo Descripción
peso Peso de aparición frente a las demás rarezas
captura Probabilidad base de captura
huye Probabilidad de que huya tras un intento fallido
xp XP que se obtiene al capturarla

Zonas

Las zonas de tierra son rectángulos del mapa { min x, min y, max x, max y }, que se comprueban en orden (primero las zonas pequeñas). Fuera de todas ellas la zona es campo.

lua
Pescabichos.Zonas = {
    { id = 'alamo',      nombre = 'pb_area_1', caja = { 300, 3850, 2050, 4600 } },
    { id = 'industrial', nombre = 'pb_area_2', caja = { -350, -3450, 1500, -2350 } },
    -- ...
}

Progresión

lua
P.NivelPescadorMax = 50
 
P.Progreso = {
    rareza = { comun = 1, poco = 1, rara = 5, epica = 12, legendaria = 20 },
    salvajes = { abajo = 8, arriba = 3, max = 35 },
    porEncima = { resta = 0.05, limite = 10 },
    topeBicho = 10,
    abre = { entrenar = 3, duelos = 5, equipo = 8, intercambios = 10, incursiones = 10 },
}
Campo Descripción
rareza Nivel del jugador a partir del cual aparece cada rareza
salvajes Niveles de las criaturas salvajes relativos al jugador (abajo, arriba, max)
porEncima Penalización de la probabilidad de captura por cada nivel por encima del jugador, y la diferencia de niveles a partir de la cual no se puede capturar
topeBicho Las criaturas pueden subir hasta el nivel del jugador más este valor
abre Nivel en el que se desbloquea cada función