Accueil › Documentation › Exports · origen_phone
Tous les exports sont enregistrés sous le nom de ressource origen_phone.
Chaque export serveur valide ses données d’entrée et renvoie quelque chose de vérifiable (un booléen, un id, une table avec ok) au lieu d’échouer en silence. Une ressource mal écrite ne peut pas casser le téléphone de quelqu’un d’autre.
Identité
GetPhoneNumber(source) → string|nilLe numéro du téléphone que le joueur a allumé, s’il en porte un. L’inventaire est vérifié à nouveau, car le téléphone a pu lui être retiré entre-temps.
local number = exports['origen_phone']:GetPhoneNumber(source)| Paramètre | Type | Description |
|---|---|---|
source |
number |
ID serveur du joueur |
GetSourceByNumber(number) → number|nilLe joueur qui porte ce numéro, s’il est en ligne.
local src = exports['origen_phone']:GetSourceByNumber('551234')| Paramètre | Type | Description |
|---|---|---|
number |
string |
Numéro de téléphone |
HasPhoneOpen(source) → booleanIndique si le joueur a un téléphone allumé en ce moment.
local online = exports['origen_phone']:HasPhoneOpen(source)| Paramètre | Type | Description |
|---|---|---|
source |
number |
ID serveur du joueur |
GetNumbersByCitizenId(citizenid) → string[]Tous les numéros appartenant à un personnage, qu’il soit en ligne ou non. Utile pour écrire à quelqu’un qui ne joue pas.
local numbers = exports['origen_phone']:GetNumbersByCitizenId(citizenid)| Paramètre | Type | Description |
|---|---|---|
citizenid |
string |
Identifiant du personnage |
GetDisplayName(number, viewer) → stringLa façon dont un numéro apparaît sur un téléphone donné : le nom enregistré dans ses contacts, ou le numéro formaté.
local name = exports['origen_phone']:GetDisplayName('551234', '601111')| Paramètre | Type | Description |
|---|---|---|
number |
string |
Numéro à résoudre |
viewer |
string|nil |
Numéro dont les contacts sont utilisés. Sans lui, renvoie le numéro formaté |
FormatNumber(number) → stringFormate un numéro avec le format du serveur (Config.PhoneNumber.Format).
local formatted = exports['origen_phone']:FormatNumber('551234') -- '55-1234'Messages et courrier
SendMessage(data) → number|falseEnvoie un SMS à un numéro. from peut être un numéro réel ou un expéditeur inventé comme '900100', afin qu’une banque ou un garage puisse écrire ; s’il n’appartient à aucun téléphone, le message arrive comme un numéro inconnu.
exports['origen_phone']:SendMessage({
to = number,
from = '5550100',
message = 'Hello',
})| Champ | Type | Description |
|---|---|---|
to |
string |
Numéro du destinataire |
from |
string|nil |
Expéditeur. Par défaut Config.Messages.SystemNumber |
message |
string |
Texte du message |
attachments |
table|nil |
Pièces jointes |
GetEmailAddress(source) → string|nilL’adresse e-mail du joueur, ou nil s’il n’a pas encore créé de boîte mail.
local address = exports['origen_phone']:GetEmailAddress(source)GetEmailByNumber(number) → string|nilL’adresse e-mail liée à un numéro de téléphone.
local address = exports['origen_phone']:GetEmailByNumber('551234')SendMail(data) → tableEnvoie un e-mail. Contrairement à un message, l’expéditeur peut être n’importe quelle adresse, même si elle n’appartient pas à un téléphone.
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.',
})| Champ | Type | Description |
|---|---|---|
to |
string |
Adresse du destinataire |
sender |
string |
Adresse de l’expéditeur |
senderName |
string |
Nom affiché de l’expéditeur |
subject |
string |
Objet |
body |
string |
Corps |
attachments |
table|nil |
Pièces jointes (liens) |
Renvoie { ok, delivered, unknown, error }.
Notifications
La table data partagée par les exports de notification :
| Champ | Type | Description |
|---|---|---|
app |
string |
App sous laquelle la notification est regroupée. Par défaut 'settings' |
title |
string |
Titre |
content |
string |
Texte du corps |
avatar |
string|nil |
URL de l’avatar |
thumbnail |
string|nil |
URL de la miniature |
data |
table|nil |
Données supplémentaires |
silent |
boolean|nil |
Ne pas jouer de son |
actions |
table|nil |
Boutons d’action |
SendNotification(data) → booleanNotification envoyée à un numéro. Toujours enregistrée, même si le joueur est hors ligne ou si le téléphone est éteint.
exports['origen_phone']:SendNotification({
to = number,
app = 'bank',
title = 'Bank',
content = 'Payment received',
})| Champ | Type | Description |
|---|---|---|
to |
string |
Numéro du destinataire |
NotifySource(source, data) → numberNotification envoyée à un joueur plutôt qu’à un numéro. Elle atteint tous les téléphones qu’il porte ; s’il n’en porte aucun, elle est enregistrée sur le téléphone à son nom. Renvoie le nombre de téléphones atteints (0 signifie que le joueur n’a pas de téléphone).
exports['origen_phone']:NotifySource(source, {
app = 'services',
title = 'Dispatch',
content = '10-13 in Vinewood',
})NotifyJob(job, data) → numberNotification envoyée à tous les joueurs en ligne ayant ce métier. Renvoie le nombre de joueurs atteints.
exports['origen_phone']:NotifyJob('police', {
app = 'services',
title = 'Dispatch',
content = 'Alarm at the port',
})NotifyGang(gang, data) → numberNotification envoyée à tous les joueurs en ligne de ce gang. Renvoie le nombre de joueurs atteints.
exports['origen_phone']:NotifyGang('ballas', {
app = 'darkchat',
title = 'Meeting',
content = 'Usual place',
})NotifyAll(data) → numberNotification envoyée à tous les joueurs en ligne qui portent un téléphone. Renvoie le nombre de joueurs atteints.
exports['origen_phone']:NotifyAll({
app = 'news',
title = 'City Hall',
content = 'Power cut downtown',
})ClearNotifications(number, app) → booleanSupprime les notifications d’une app sur un téléphone. Sans app, supprime toutes les notifications.
exports['origen_phone']:ClearNotifications(number, 'delivery')| Paramètre | Type | Description |
|---|---|---|
number |
string |
Numéro de téléphone |
app |
string|nil |
Id de l’app |
Widgets et apps
SetWidgetData(target, widget, data) → booleanRemplit un widget dont la source est 'fuera' (caisse d’un commerce, fréquence radio, service de travail). Les données sont conservées cinq minutes ; passé ce délai, le widget n’affiche plus de données. Passe nil comme data pour les effacer.
exports['origen_phone']:SetWidgetData(source, 'negocio', {
name = 'Bennys Motorworks',
caja = 12400,
empleados = 3,
stock = 62,
})| Paramètre | Type | Description |
|---|---|---|
target |
number|string |
Source du joueur ou numéro de téléphone |
widget |
string |
'negocio', 'radio', 'trabajo'... |
data |
table|nil |
Données du widget |
RegisterApp(data) → booleanAjoute une app depuis une autre ressource. Elle apparaît sur l’écran d’accueil et ouvre sa page en plein écran. Elle entre dans le catalogue comme n’importe quelle autre app, si bien que le panneau d’administration et SetAppRule peuvent la restreindre. Elle est retirée automatiquement lorsque sa ressource s’arrête.
exports['origen_phone']:RegisterApp({
id = 'myworkshop',
name = 'My Workshop',
icon = 'lucide:wrench',
url = 'nui://my_workshop/ui/index.html',
slot = 30,
})| Champ | Type | Description |
|---|---|---|
id |
string |
Lettres minuscules, chiffres et tirets bas. Ne doit pas déjà exister |
name |
string |
Nom affiché (40 caractères max.) |
icon |
string|nil |
Icône Iconify. Par défaut 'lucide:app-window' |
url |
string |
Doit être nui://<resource>/... ou https://... |
slot |
number|nil |
Position sur l’écran d’accueil |
default |
boolean|nil |
Installée par défaut. Par défaut true |
UnregisterApp(id) → booleanRetire une app externe sans attendre l’arrêt de sa ressource.
exports['origen_phone']:UnregisterApp('myworkshop')Accès aux apps
CanUseApp(source, appId) → booleanIndique si le joueur peut utiliser cette app en ce moment.
if exports['origen_phone']:CanUseApp(source, 'bank') then
-- ...
endGetAppRule(appId) → table|nilLa règle définie sur une app : { mode, list }.
local rule = exports['origen_phone']:GetAppRule('bank')SetAppRule(appId, mode, list) → booleanModifie qui possède une app. Elle enregistre exactement ce qu’enregistre le panneau d’administration, de sorte que le changement y est visible et peut être annulé à la main. Les changements atteignent immédiatement les téléphones ouverts.
exports['origen_phone']:SetAppRule('bank', 'menos', {
{ kind = 'negocio', id = 'prisoner' },
})
exports['origen_phone']:SetAppRule('bank', 'todos')| Paramètre | Type | Description |
|---|---|---|
appId |
string |
Id de l’app |
mode |
string |
'todos' (tout le monde), 'nadie' (personne), 'solo' (uniquement la liste), 'menos' (tout le monde sauf la liste) |
list |
table[]|nil |
Entrées, utilisées uniquement par solo et menos |
| Entrée | Correspond à |
|---|---|
{ kind = 'civiles' } |
Joueurs sans métier et sans gang |
{ kind = 'bandas' } |
Toute personne dans un gang |
{ kind = 'negocios' } |
Toute personne ayant un métier |
{ kind = 'banda', id = 'ballas' } |
Un gang précis |
{ kind = 'negocio', id = 'mechanic' } |
Un métier précis |
Contacts et contenu
AddContact(data) → booleanAjoute un contact au téléphone de quelqu’un. Il n’est pas dupliqué s’il existe déjà.
exports['origen_phone']:AddContact({
owner = number,
number = '5550100',
name = 'Mechanic',
})| Champ | Type | Description |
|---|---|---|
owner |
string |
Numéro de téléphone qui reçoit le contact |
number |
string |
Numéro du contact |
name |
string |
Nom du contact |
avatar |
string|nil |
URL de l’avatar |
AddPhoto(data) → number|nilEnregistre une image déjà téléversée dans la galerie d’un téléphone. Renvoie l’id de la photo.
exports['origen_phone']:AddPhoto({ owner = number, url = 'https://...' })| Champ | Type | Description |
|---|---|---|
owner |
string |
Numéro de téléphone |
url |
string |
URL de l’image |
isVideo |
boolean|nil |
La marque comme vidéo |
PublishNews(data) → number|nilPublie un article dans l’app Actualités. Renvoie l’id de l’article.
exports['origen_phone']:PublishNews({
title = 'Headline',
content = 'What happened',
})| Champ | Type | Description |
|---|---|---|
title |
string |
Titre |
content |
string |
Corps |
author |
string|nil |
Auteur |
image |
string|nil |
URL de l’image |
category |
string|nil |
Catégorie |
pinned |
boolean|nil |
Épingler l’article |
PublishAd(number, data) → number|nil, string|nilPublie une annonce sur le tableau des petites annonces au nom de quelqu’un. Renvoie l’id de l’annonce, ou nil et une erreur.
exports['origen_phone']:PublishAd(number, {
title = 'Car for sale',
body = 'Low mileage',
price = 40000,
})| Champ | Type | Description |
|---|---|---|
title |
string |
Titre |
body |
string |
Corps |
price |
number|nil |
Prix |
category |
string|nil |
Une valeur de Config.Ads.Categories |
AddNote(number, title, content) → number|nilLaisse une note sur le téléphone de quelqu’un. Renvoie l’id de la note.
exports['origen_phone']:AddNote(number, 'Reminder', 'Visit the garage')AddCalendarEvent(number, data) → number|nilAjoute un événement au calendrier de quelqu’un. Renvoie l’id de l’événement.
exports['origen_phone']:AddCalendarEvent(number, {
title = 'Court',
date = '2026-09-04',
})| Champ | Type | Description |
|---|---|---|
title |
string |
Titre |
note |
string|nil |
Note |
date |
string |
Date (YYYY-MM-DD) |
time |
string|nil |
Heure |
CreateDarkRoom(number, name, burn) → string|nilCrée un salon DarkChat et renvoie son code. Le propriétaire doit déjà avoir un alias DarkChat ; sinon la fonction renvoie nil.
local code = exports['origen_phone']:CreateDarkRoom(number, 'Harbour crew', 60)| Paramètre | Type | Description |
|---|---|---|
number |
string |
Propriétaire du salon |
name |
string |
Nom du salon |
burn |
number|nil |
Minutes avant l’autodestruction des messages. 0 jamais |
Factures et amendes
Payées depuis le téléphone via le bridge Banking.
CreateInvoice(data) → number|nil, string|nilÉmet une facture. Le joueur la paie ou la refuse depuis l’app Factures.
exports['origen_phone']:CreateInvoice({
to = number,
amount = 500,
reason = 'Repair',
issuer = 'Mechanic',
issuerAccount = 'mechanic',
})| Champ | Type | Description |
|---|---|---|
to |
number|string |
Source ou numéro de téléphone du destinataire. Avec le numéro, elle peut être émise à un joueur hors ligne |
amount |
number |
Montant positif |
reason |
string |
Motif |
issuer |
string |
Nom de l’émetteur |
issuerAccount |
string|nil |
Compte qui reçoit l’argent. Sans lui, le joueur est débité et l’argent ne va nulle part |
reference |
any |
Ton propre id, renvoyé quand la facture est payée |
dueAt |
number|nil |
Secondes à partir de maintenant jusqu’à l’échéance |
CreateFine(data) → number|nil, string|nilComme une facture, mais elle ne peut pas être refusée. L’argent va à issuerAccount ou, s’il est omis, à Config.FineAccount. Mêmes champs que CreateInvoice.
exports['origen_phone']:CreateFine({
to = number,
amount = 250,
reason = 'Speeding',
issuer = 'LSPD',
})GetBills(number, kind, status) → table[]Factures d’un téléphone.
local bills = exports['origen_phone']:GetBills(number, 'fine', 'pending')| Paramètre | Type | Description |
|---|---|---|
number |
string |
Numéro de téléphone |
kind |
string|nil |
'invoice', 'fine' ou nil pour les deux |
status |
string|nil |
'pending', 'paid', 'refused' ou 'cancelled' |
GetPendingBills(number, kind) → number, numberLe nombre de factures en attente et le montant total dû.
local count, total = exports['origen_phone']:GetPendingBills(number)CancelBill(id) → booleanRetire une facture. Ne fonctionne que tant qu’elle est en attente.
exports['origen_phone']:CancelBill(billId)Appels et appareil
IsInCall(number) → booleanIndique si ce numéro est en appel en ce moment.
local busy = exports['origen_phone']:IsInCall(number)GetDeviceState(number) → table|nilCe que le serveur sait d’un téléphone.
local state = exports['origen_phone']:GetDeviceState(number)
-- { airplane, dnd, battery, charging, signal }SetBattery(number, level) → booleanDéfinit le niveau de batterie d’un téléphone (de 0 à 100).
exports['origen_phone']:SetBattery(number, 100)SetCharging(number, charging) → booleanMarque un téléphone comme en charge ou non.
exports['origen_phone']:SetCharging(number, true)Livraisons
CreateSupplyDelivery(data) → number|nil, string|nilCrée une mission de livraison d’approvisionnement dans l’app Mandao. Quand le livreur confirme son arrivée, le téléphone appelle DeliverOrder(businessId, orderId) sur le bridge Business, qui place la marchandise là où elle doit aller. Le livreur ne transporte jamais la marchandise.
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 } },
})| Champ | Type | Description |
|---|---|---|
businessId |
string |
Commerce qui reçoit la commande |
orderId |
any |
Id de la commande renvoyé à DeliverOrder |
label |
string |
Libellé de la destination |
coords |
table |
Destination { x, y, z }. Doit être une table simple, pas un vector3 |
items |
table |
Marchandise, enregistrée telle qu’elle est montrée au livreur |
requester |
any |
Qui l’a demandée |
note |
string|nil |
Note pour le livreur |
La marchandise est récupérée au dépôt le plus proche de Config.Delivery.Depots.
Renvoie nil, 'err_delivery_off' quand Config.Delivery.HandleBusinessOrders est désactivé, et nil, 'err_delivery_no_couriers' quand aucun livreur n’est en service. Dans les deux cas, le commerce doit livrer la commande par ses propres moyens.
SupplyActive(id) → booleanIndique si une livraison d’approvisionnement est toujours active (pending, taken, picked ou arrived). Une livraison expirée ou annulée n’arrivera jamais.
local alive = exports['origen_phone']:SupplyActive(deliveryId)IsCourierOnDuty(number) → booleanIndique si un numéro est enregistré comme livreur et en service.
local onDuty = exports['origen_phone']:IsCourierOnDuty(number)GetCurrentDelivery(number, asCourier) → table|nilLa livraison que quelqu’un est en train de gérer, le cas échéant.
local delivery = exports['origen_phone']:GetCurrentDelivery(number, true)| Paramètre | Type | Description |
|---|---|---|
number |
string |
Numéro de téléphone |
asCourier |
boolean |
true la recherche en tant que livreur, false en tant que client |
Véhicules et propriétés
Normalisés à partir des bridges Garage et Housing actifs, pour que les appelants n’aient pas besoin de savoir quelle ressource se trouve derrière.
GetVehicles(citizenid) → table[]local vehicles = exports['origen_phone']:GetVehicles(citizenid)
-- { { plate, model, garage, state, fuel, engine, body, depotPrice } }GetProperties(citizenid) → table[]Les propriétés du personnage : celles qu’il possède et celles dont il a une clé.
local houses = exports['origen_phone']:GetProperties(citizenid)
-- { { id, name, mine, price, kind, keys, where } }UsePhoneItem(data, slot)Ouvre le téléphone à partir d’un objet ox_inventory. Lit le numéro dans les métadonnées du slot, donc avec deux téléphones, c’est celui qui a été utilisé qui s’ouvre.
-- ox_inventory/data/items.lua
client = { export = 'origen_phone.UsePhoneItem' },UsePhone(item)Identique à UsePhoneItem, pour les inventaires qui transmettent l’objet entier plutôt que le slot.
exports['origen_phone']:UsePhone(item)Open()Ouvre le premier téléphone que le joueur porte.
exports['origen_phone']:Open()Close()Ferme le téléphone.
exports['origen_phone']:Close()IsOpen() → booleanIndique si le téléphone est ouvert.
local open = exports['origen_phone']:IsOpen()GetNumber() → string|nilLe numéro du téléphone utilisé.
local number = exports['origen_phone']:GetNumber()IsInCall() → booleanIndique si le joueur local est en appel.
local busy = exports['origen_phone']:IsInCall()ShowNotification(data) → booleanAffiche une carte de notification du téléphone sans l’enregistrer : elle ne compte pas comme non lue et n’ouvre aucune app. Respecte Custom.ShowNotification.
exports['origen_phone']:ShowNotification({
app = 'services',
title = 'Dispatch',
content = 'Alert in Vinewood',
})| Champ | Type | Description |
|---|---|---|
app |
string |
Icône de l’app. Par défaut 'settings' |
title |
string |
Titre |
content |
string |
Corps |
avatar |
string|nil |
URL de l’avatar |
thumbnail |
string|nil |
URL de la miniature |
silent |
boolean|nil |
Ne pas jouer de son |
ShowServerNotification(data) → booleanRépercute sur le téléphone une notification du serveur (style origen_notify), lorsque Config.ServerNotifications.Enabled est activé et que le joueur porte un téléphone. Renvoie true quand le téléphone prend en charge la notification.
local handled = exports['origen_phone']:ShowServerNotification({
title = 'Bank',
description = 'You received $40',
type = 'success',
})| Champ | Type | Description |
|---|---|---|
description |
string |
Texte (text et content sont aussi acceptés) |
title |
string|nil |
Titre. Par défaut, le titre du serveur |
type |
string|nil |
Type de notification, filtré par Config.ServerNotifications.Types |
app |
string|nil |
Icône. Par défaut, l’icône du serveur |
openManagement()Ouvre le panneau d’administration. Utilisé par origen_admin ; la permission est vérifiée côté serveur.
exports['origen_phone']:openManagement()