Início › Documentação › Exports · origen_phone

Exports · origen_phone

Todos os exports estão registados sob o nome do recurso origen_phone.

Todos os exports do servidor validam os dados de entrada e devolvem algo verificável (um booleano, um id, uma tabela com ok) em vez de falharem em silêncio. Um recurso mal escrito não consegue estragar o telemóvel de ninguém.


Exports do servidor

Identidade

GetPhoneNumber(source) → string|nil

O número do telemóvel que o jogador tem ligado, se levar algum. O inventário é verificado de novo, pois o telemóvel pode ter sido retirado entretanto.

lua
local number = exports['origen_phone']:GetPhoneNumber(source)
Parâmetro Tipo Descrição
source number ID de servidor do jogador

GetSourceByNumber(number) → number|nil

O jogador que leva esse número, se estiver online.

lua
local src = exports['origen_phone']:GetSourceByNumber('551234')
Parâmetro Tipo Descrição
number string Número de telemóvel

HasPhoneOpen(source) → boolean

Indica se o jogador tem um telemóvel ligado neste momento.

lua
local online = exports['origen_phone']:HasPhoneOpen(source)
Parâmetro Tipo Descrição
source number ID de servidor do jogador

GetNumbersByCitizenId(citizenid) → string[]

Todos os números pertencentes a uma personagem, esteja online ou não. Útil para escrever a alguém que não está a jogar.

lua
local numbers = exports['origen_phone']:GetNumbersByCitizenId(citizenid)
Parâmetro Tipo Descrição
citizenid string Identificador da personagem

GetDisplayName(number, viewer) → string

Como um número aparece num determinado telemóvel: o nome guardado nos contactos ou o número formatado.

lua
local name = exports['origen_phone']:GetDisplayName('551234', '601111')
Parâmetro Tipo Descrição
number string Número a resolver
viewer string|nil Número cujos contactos são usados. Sem ele, devolve o número formatado

FormatNumber(number) → string

Formata um número com o formato do servidor (Config.PhoneNumber.Format).

lua
local formatted = exports['origen_phone']:FormatNumber('551234') -- '55-1234'

Mensagens e correio

SendMessage(data) → number|false

Envia uma mensagem de texto para um número. from pode ser um número real ou um remetente inventado como '900100', para que um banco ou uma oficina possam escrever; se não pertencer a nenhum telemóvel, a mensagem chega como número desconhecido.

lua
exports['origen_phone']:SendMessage({
    to = number,
    from = '5550100',
    message = 'Hello',
})
Campo Tipo Descrição
to string Número do destinatário
from string|nil Remetente. Por omissão, Config.Messages.SystemNumber
message string Texto da mensagem
attachments table|nil Anexos

GetEmailAddress(source) → string|nil

O endereço de email do jogador, ou nil se ainda não tiver criado uma caixa de correio.

lua
local address = exports['origen_phone']:GetEmailAddress(source)

GetEmailByNumber(number) → string|nil

O endereço de email associado a um número de telemóvel.

lua
local address = exports['origen_phone']:GetEmailByNumber('551234')

SendMail(data) → table

Envia um email. Ao contrário de uma mensagem, o remetente pode ser qualquer endereço, mesmo que não pertença a um telemóvel.

lua
exports['origen_phone']:SendMail({
    sender = 'dealership@ogn.net',
    senderName = 'Premium Deluxe',
    to = exports['origen_phone']:GetEmailAddress(source),
    subject = 'Your invoice',
    body = 'Thank you for your purchase.',
})
Campo Tipo Descrição
to string Endereço do destinatário
sender string Endereço do remetente
senderName string Nome do remetente apresentado
subject string Assunto
body string Corpo
attachments table|nil Anexos (ligações)

Devolve { ok, delivered, unknown, error }.


Notificações

A tabela data partilhada pelos exports de notificações:

Campo Tipo Descrição
app string App sob a qual a notificação é agrupada. Por omissão, 'settings'
title string Título
content string Texto do corpo
avatar string|nil URL do avatar
thumbnail string|nil URL da miniatura
data table|nil Dados adicionais
silent boolean|nil Não reproduzir som
actions table|nil Botões de ação

SendNotification(data) → boolean

Notificação para um número. É sempre guardada, mesmo que o jogador esteja offline ou o telemóvel desligado.

lua
exports['origen_phone']:SendNotification({
    to = number,
    app = 'bank',
    title = 'Bank',
    content = 'Payment received',
})
Campo Tipo Descrição
to string Número do destinatário

NotifySource(source, data) → number

Notificação para um jogador em vez de um número. Chega a todos os telemóveis que ele leve; se não levar nenhum, fica guardada no telemóvel em nome dele. Devolve a quantos telemóveis chegou (0 significa que o jogador não tem telemóvel).

lua
exports['origen_phone']:NotifySource(source, {
    app = 'services',
    title = 'Dispatch',
    content = '10-13 in Vinewood',
})

NotifyJob(job, data) → number

Notificação para todos os jogadores online com esse trabalho. Devolve a quantos jogadores chegou.

lua
exports['origen_phone']:NotifyJob('police', {
    app = 'services',
    title = 'Dispatch',
    content = 'Alarm at the port',
})

NotifyGang(gang, data) → number

Notificação para todos os jogadores online dessa gangue. Devolve a quantos jogadores chegou.

lua
exports['origen_phone']:NotifyGang('ballas', {
    app = 'darkchat',
    title = 'Meeting',
    content = 'Usual place',
})

NotifyAll(data) → number

Notificação para todos os jogadores online que levem um telemóvel. Devolve a quantos jogadores chegou.

lua
exports['origen_phone']:NotifyAll({
    app = 'news',
    title = 'City Hall',
    content = 'Power cut downtown',
})

ClearNotifications(number, app) → boolean

Apaga as notificações de uma app num telemóvel. Sem app, apaga todas.

lua
exports['origen_phone']:ClearNotifications(number, 'delivery')
Parâmetro Tipo Descrição
number string Número de telemóvel
app string|nil Id da app

Widgets e apps

SetWidgetData(target, widget, data) → boolean

Preenche um widget cuja origem é 'fuera' (caixa de um negócio, frequência de rádio, turno de trabalho). Os dados são mantidos durante cinco minutos; depois disso o widget volta a ficar sem dados. Passa nil como data para os limpar.

lua
exports['origen_phone']:SetWidgetData(source, 'negocio', {
    name = 'Bennys Motorworks',
    caja = 12400,
    empleados = 3,
    stock = 62,
})
Parâmetro Tipo Descrição
target number|string Source do jogador ou número de telemóvel
widget string 'negocio', 'radio', 'trabajo'...
data table|nil Dados do widget

RegisterApp(data) → boolean

Adiciona uma app a partir de outro recurso. Aparece no ecrã inicial e abre a sua página em ecrã inteiro. Entra no catálogo como qualquer outra app, pelo que o painel de administração e SetAppRule a podem restringir. É removida automaticamente quando o seu recurso pára.

lua
exports['origen_phone']:RegisterApp({
    id = 'myworkshop',
    name = 'My Workshop',
    icon = 'lucide:wrench',
    url = 'nui://my_workshop/ui/index.html',
    slot = 30,
})
Campo Tipo Descrição
id string Letras minúsculas, números e sublinhados. Não pode já existir
name string Nome apresentado (máx. 40 caracteres)
icon string|nil Ícone do Iconify. Por omissão, 'lucide:app-window'
url string Tem de ser nui://<resource>/... ou https://...
slot number|nil Posição no ecrã inicial
default boolean|nil Instalada por omissão. Por omissão, true

UnregisterApp(id) → boolean

Remove uma app externa sem esperar que o seu recurso pare.

lua
exports['origen_phone']:UnregisterApp('myworkshop')

Acesso às apps

CanUseApp(source, appId) → boolean

Indica se o jogador pode usar essa app neste momento.

lua
if exports['origen_phone']:CanUseApp(source, 'bank') then
    -- ...
end

GetAppRule(appId) → table|nil

A regra definida numa app: { mode, list }.

lua
local rule = exports['origen_phone']:GetAppRule('bank')

SetAppRule(appId, mode, list) → boolean

Altera quem tem uma app. Guarda exatamente o que o painel de administração guarda, por isso a alteração é visível aí e pode ser desfeita à mão. As alterações chegam de imediato aos telemóveis abertos.

lua
exports['origen_phone']:SetAppRule('bank', 'menos', {
    { kind = 'negocio', id = 'prisoner' },
})
 
exports['origen_phone']:SetAppRule('bank', 'todos')
Parâmetro Tipo Descrição
appId string Id da app
mode string 'todos' (toda a gente), 'nadie' (ninguém), 'solo' (só a lista), 'menos' (todos exceto a lista)
list table[]|nil Entradas, só usadas por solo e menos
Entrada Corresponde a
{ kind = 'civiles' } Jogadores sem trabalho e sem gangue
{ kind = 'bandas' } Qualquer pessoa numa gangue
{ kind = 'negocios' } Qualquer pessoa com um trabalho
{ kind = 'banda', id = 'ballas' } Uma gangue específica
{ kind = 'negocio', id = 'mechanic' } Um trabalho específico

Contactos e conteúdo

AddContact(data) → boolean

Adiciona um contacto ao telemóvel de alguém. Não é duplicado se já existir.

lua
exports['origen_phone']:AddContact({
    owner = number,
    number = '5550100',
    name = 'Mechanic',
})
Campo Tipo Descrição
owner string Número de telemóvel que recebe o contacto
number string Número do contacto
name string Nome do contacto
avatar string|nil URL do avatar

AddPhoto(data) → number|nil

Guarda uma imagem já carregada na galeria de um telemóvel. Devolve o id da foto.

lua
exports['origen_phone']:AddPhoto({ owner = number, url = 'https://...' })
Campo Tipo Descrição
owner string Número de telemóvel
url string URL da imagem
isVideo boolean|nil Marca-a como vídeo

PublishNews(data) → number|nil

Publica um artigo na app de Notícias. Devolve o id do artigo.

lua
exports['origen_phone']:PublishNews({
    title = 'Headline',
    content = 'What happened',
})
Campo Tipo Descrição
title string Título
content string Corpo
author string|nil Autor
image string|nil URL da imagem
category string|nil Categoria
pinned boolean|nil Fixar o artigo

PublishAd(number, data) → number|nil, string|nil

Publica um anúncio no quadro de classificados em nome de alguém. Devolve o id do anúncio, ou nil e um erro.

lua
exports['origen_phone']:PublishAd(number, {
    title = 'Car for sale',
    body = 'Low mileage',
    price = 40000,
})
Campo Tipo Descrição
title string Título
body string Corpo
price number|nil Preço
category string|nil Uma de Config.Ads.Categories

AddNote(number, title, content) → number|nil

Deixa uma nota no telemóvel de alguém. Devolve o id da nota.

lua
exports['origen_phone']:AddNote(number, 'Reminder', 'Visit the garage')

AddCalendarEvent(number, data) → number|nil

Adiciona um evento ao calendário de alguém. Devolve o id do evento.

lua
exports['origen_phone']:AddCalendarEvent(number, {
    title = 'Court',
    date = '2026-09-04',
})
Campo Tipo Descrição
title string Título
note string|nil Nota
date string Data (YYYY-MM-DD)
time string|nil Hora

CreateDarkRoom(number, name, burn) → string|nil

Cria uma sala de DarkChat e devolve o seu código. O proprietário já tem de ter um alias de DarkChat; caso contrário devolve nil.

lua
local code = exports['origen_phone']:CreateDarkRoom(number, 'Harbour crew', 60)
Parâmetro Tipo Descrição
number string Proprietário da sala
name string Nome da sala
burn number|nil Minutos até as mensagens se autodestruírem. 0 nunca

Faturas e multas

Pagas a partir do telemóvel através do bridge de Banking.

CreateInvoice(data) → number|nil, string|nil

Emite uma fatura. O jogador paga-a ou recusa-a na app de Faturas.

lua
exports['origen_phone']:CreateInvoice({
    to = number,
    amount = 500,
    reason = 'Repair',
    issuer = 'Mechanic',
    issuerAccount = 'mechanic',
})
Campo Tipo Descrição
to number|string Source ou número de telemóvel do destinatário. Com o número, pode ser emitida a um jogador offline
amount number Montante positivo
reason string Motivo
issuer string Nome do emissor
issuerAccount string|nil Conta que recebe o dinheiro. Sem ela, o jogador é cobrado e o dinheiro não vai para lado nenhum
reference any O teu próprio id, devolvido quando a fatura é paga
dueAt number|nil Segundos a partir de agora até ao vencimento

CreateFine(data) → number|nil, string|nil

Como uma fatura, mas não pode ser recusada. O dinheiro vai para issuerAccount ou, se for omitido, para Config.FineAccount. Os mesmos campos que CreateInvoice.

lua
exports['origen_phone']:CreateFine({
    to = number,
    amount = 250,
    reason = 'Speeding',
    issuer = 'LSPD',
})

GetBills(number, kind, status) → table[]

Faturas de um telemóvel.

lua
local bills = exports['origen_phone']:GetBills(number, 'fine', 'pending')
Parâmetro Tipo Descrição
number string Número de telemóvel
kind string|nil 'invoice', 'fine' ou nil para ambas
status string|nil 'pending', 'paid', 'refused' ou 'cancelled'

GetPendingBills(number, kind) → number, number

Quantas faturas estão pendentes e o montante total em dívida.

lua
local count, total = exports['origen_phone']:GetPendingBills(number)

CancelBill(id) → boolean

Retira uma fatura. Só funciona enquanto estiver pendente.

lua
exports['origen_phone']:CancelBill(billId)

Chamadas e dispositivo

IsInCall(number) → boolean

Indica se esse número está numa chamada neste momento.

lua
local busy = exports['origen_phone']:IsInCall(number)

GetDeviceState(number) → table|nil

O que o servidor sabe sobre um telemóvel.

lua
local state = exports['origen_phone']:GetDeviceState(number)
-- { airplane, dnd, battery, charging, signal }

SetBattery(number, level) → boolean

Define o nível de bateria de um telemóvel (de 0 a 100).

lua
exports['origen_phone']:SetBattery(number, 100)

SetCharging(number, charging) → boolean

Marca um telemóvel como a carregar ou não.

lua
exports['origen_phone']:SetCharging(number, true)

Entregas

CreateSupplyDelivery(data) → number|nil, string|nil

Cria um trabalho de entrega de abastecimento na app Mandao. Quando o estafeta confirma a chegada, o telemóvel chama DeliverOrder(businessId, orderId) no bridge de Business, que coloca a mercadoria onde deve ficar. O estafeta nunca transporta a mercadoria.

lua
local id, err = exports['origen_phone']:CreateSupplyDelivery({
    businessId = 'burgershot',
    orderId = 42,
    label = 'Burger Shot',
    coords = { x = -1193.0, y = -892.0, z = 14.0 },
    items = { { name = 'bread', count = 20 } },
})
Campo Tipo Descrição
businessId string Negócio que recebe a encomenda
orderId any Id da encomenda devolvido a DeliverOrder
label string Etiqueta do destino
coords table Destino { x, y, z }. Tem de ser uma tabela simples, não um vector3
items table Mercadoria, guardada tal como é mostrada ao estafeta
requester any Quem a pediu
note string|nil Nota para o estafeta

A mercadoria é recolhida no depósito mais próximo de Config.Delivery.Depots.

Devolve nil, 'err_delivery_off' quando Config.Delivery.HandleBusinessOrders está desativado, e nil, 'err_delivery_no_couriers' quando nenhum estafeta está de serviço. Em ambos os casos, o negócio deve entregar a encomenda por conta própria.


SupplyActive(id) → boolean

Indica se uma entrega de abastecimento ainda está ativa (pending, taken, picked ou arrived). Uma entrega expirada ou cancelada nunca chegará.

lua
local alive = exports['origen_phone']:SupplyActive(deliveryId)

IsCourierOnDuty(number) → boolean

Indica se um número está registado como estafeta e de serviço.

lua
local onDuty = exports['origen_phone']:IsCourierOnDuty(number)

GetCurrentDelivery(number, asCourier) → table|nil

A entrega que alguém está a tratar, se existir.

lua
local delivery = exports['origen_phone']:GetCurrentDelivery(number, true)
Parâmetro Tipo Descrição
number string Número de telemóvel
asCourier boolean true procura-a como estafeta, false como cliente

Veículos e propriedades

Normalizados a partir dos bridges ativos de Garage e Housing, para que quem os chama não precise de saber que recurso está por trás.

GetVehicles(citizenid) → table[]

lua
local vehicles = exports['origen_phone']:GetVehicles(citizenid)
-- { { plate, model, garage, state, fuel, engine, body, depotPrice } }

GetProperties(citizenid) → table[]

As propriedades da personagem: as que possui e aquelas de que tem chave.

lua
local houses = exports['origen_phone']:GetProperties(citizenid)
-- { { id, name, mine, price, kind, keys, where } }

Exports do cliente

UsePhoneItem(data, slot)

Abre o telemóvel a partir de um item do ox_inventory. Lê o número dos metadados do slot, por isso, com dois telemóveis, abre-se o que foi usado.

lua
-- ox_inventory/data/items.lua
client = { export = 'origen_phone.UsePhoneItem' },

UsePhone(item)

Igual a UsePhoneItem, para inventários que passam o item inteiro em vez do slot.

lua
exports['origen_phone']:UsePhone(item)

Open()

Abre o primeiro telemóvel que o jogador leva.

lua
exports['origen_phone']:Open()

Close()

Fecha o telemóvel.

lua
exports['origen_phone']:Close()

IsOpen() → boolean

Indica se o telemóvel está aberto.

lua
local open = exports['origen_phone']:IsOpen()

GetNumber() → string|nil

O número do telemóvel em uso.

lua
local number = exports['origen_phone']:GetNumber()

IsInCall() → boolean

Indica se o jogador local está numa chamada.

lua
local busy = exports['origen_phone']:IsInCall()

ShowNotification(data) → boolean

Mostra um cartão de notificação do telemóvel sem o guardar: não conta como não lido e não abre nenhuma app. Respeita Custom.ShowNotification.

lua
exports['origen_phone']:ShowNotification({
    app = 'services',
    title = 'Dispatch',
    content = 'Alert in Vinewood',
})
Campo Tipo Descrição
app string Ícone da app. Por omissão, 'settings'
title string Título
content string Corpo
avatar string|nil URL do avatar
thumbnail string|nil URL da miniatura
silent boolean|nil Não reproduzir som

ShowServerNotification(data) → boolean

Replica no telemóvel uma notificação do servidor (ao estilo de origen_notify), quando Config.ServerNotifications.Enabled está ativado e o jogador leva um telemóvel. Devolve true quando o telemóvel assume a notificação.

lua
local handled = exports['origen_phone']:ShowServerNotification({
    title = 'Bank',
    description = 'You received $40',
    type = 'success',
})
Campo Tipo Descrição
description string Texto (text e content também são aceites)
title string|nil Título. Por omissão, o título do servidor
type string|nil Tipo de notificação, filtrado por Config.ServerNotifications.Types
app string|nil Ícone. Por omissão, o ícone do servidor

openManagement()

Abre o painel de administração. Usado por origen_admin; a permissão é verificada no servidor.

lua
exports['origen_phone']:openManagement()