Accueil › Documentation › Configuration · origen_phone

Configuration · origen_phone

Fichier Contenu
config/config.lua Réglages de jeu : prix, limites, touches, comportement des apps. Partagé avec les clients
config/bridge.lua Quel système externe utiliser pour chaque catégorie
config/server.lua Secrets réservés au serveur (clé d’upload). Jamais envoyé aux clients
config/apps.lua Catalogue des apps de l’écran d’accueil et propriété des domaines de l’API
config/widgets.lua Catalogue des widgets de l’écran d’accueil
config/pescabichos*.lua Données du jeu Pescabichos : espèces, zones d’apparition, attaques, arènes, progression
locales/*.json Traductions

La plupart des réglages du quotidien (fonds d’écran, couleurs d’accent, batterie, accès aux apps, prix, points de recharge, boutiques, voiturier) se trouvent dans le panneau d’administration (/telefonoadmin) et sont stockés dans la base de données, donc ils changent sans redémarrage. Les valeurs de config/config.lua pour ces réglages ne sont que les valeurs par défaut d’une installation neuve.

config/config.lua est envoyé à tous les clients. N’y mets jamais de secrets : utilise config/server.lua ou 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',
}
Valeur Comportement
'auto' Choisit la première ressource démarrée de la liste des ressources compatibles
'<resource>' Force une ressource précise grâce au nom exact de son dossier
'custom' Utilise ton implémentation dans custom/bridge/<category>/
'none' Désactive volontairement l’intégration

Consulte Dépendances pour connaître les ressources compatibles de chaque catégorie.


config/server.lua

lua
ServerConfig.Fivemanage = {
    ApiKey = GetConvar('ogphone_fivemanage_key', ''),
}
Option Par défaut Description
ServerConfig.Fivemanage.ApiKey convar ogphone_fivemanage_key Clé d’API Fivemanage utilisée par le bridge Uploader par défaut. Mieux vaut utiliser le convar que coller la clé dans le fichier

Général

Option Par défaut Description
Config.Debug convar ogphone_debug Journalise chaque RPC dans la console. Laisse désactivé en production
Config.EsxIdentifier nil ESX uniquement. Champ du xPlayer qui contient l’identifiant du personnage sur les serveurs multipersonnages. Laisse nil sur un ESX à personnage unique
Config.Carrier 'OGN MOVIL' Nom de l’opérateur affiché dans la barre d’état
Config.Currency '$' Symbole monétaire utilisé par les factures, les amendes et les notifications

Objet

Option Par défaut Description
Config.Item.Require true L’objet est obligatoire pour ouvrir le téléphone
Config.Item.Unique true Chaque téléphone est un objet distinct avec ses propres métadonnées
Config.Item.Name 'ognphone' Nom de l’objet dans l’inventaire
Config.Item.MetaNumber 'ognPhoneNumber' Clé de métadonnées du numéro de téléphone
Config.Item.MetaFormatted 'ognFormattedNumber' Clé de métadonnées du numéro formaté
Config.Item.MetaName 'ognPhoneName' Clé de métadonnées du nom de l’appareil
Config.Item.MetaId 'ognPhoneId' Clé de métadonnées de l’id de l’enregistrement du téléphone. Indique lequel des appareils affichant un numéro est le vrai. Écrite automatiquement sur les anciens objets à leur première ouverture
Config.Item.Owner 'person' À qui appartiennent les données : 'person' (le personnage) ou 'item' (l’appareil). Se contrôle en direct depuis le panneau d’administration ; ce n’est que la valeur par défaut

Numéros de téléphone

Option Par défaut Description
Config.PhoneNumber.Format '{2}-{4}' Format d’affichage. Les numéros sont stockés uniquement sous forme de chiffres
Config.PhoneNumber.Length 4 Chiffres après le préfixe
Config.PhoneNumber.Prefixes { '55', '60', '62', '68', '70' } Préfixes attribués aux nouveaux numéros

Numéros personnalisés

Un service VIP : le joueur demande un numéro depuis les Réglages et un administrateur l’approuve ou le refuse depuis le panneau. L’argent est prélevé à l’approbation, pas à la demande.

Option Par défaut Description
Config.Numbers.Enabled true Active les demandes de numéro personnalisé
Config.Numbers.Price 25000 Prix. 0 le rend gratuit
Config.Numbers.KeepPrefix true Le numéro demandé doit commencer par l’un des préfixes configurés
Config.Numbers.Reserved voir ci-dessous Numéros qui ne peuvent pas être demandés
lua
Config.Numbers.Reserved = {
    '550000', '551111', '552222', '555555',
    '600000', '601111', '606060', '666666',
    '700000', '707070', '777777',
}

Ouverture

Option Par défaut Description
Config.Command 'ogphone' Commande pour ouvrir ou fermer le téléphone. false la désactive
Config.Keybind 'F1' Touche par défaut. Les joueurs peuvent la modifier dans les raccourcis clavier de FiveM
Config.CloseOnDeath true Ferme le téléphone quand le joueur meurt
Config.CloseWhenSwimming true Ferme le téléphone pendant la nage
Config.AllowInVehicle true Autorise l’utilisation du téléphone dans les véhicules

Animation et prop

Option Par défaut Description
Config.Animation.Enabled true Joue l’animation du téléphone
Config.Animation.Prop prop_amb_phone Modèle du prop
Config.Animation.PropBone 28422 Os auquel le prop est attaché
Config.Animation.PropOffset vector3(0.0, 0.0, 0.0) Décalage du prop
Config.Animation.PropRotation vector3(0.0, 0.0, 0.0) Rotation du prop

Notifications

Ce que voient les joueurs quand quelque chose arrive alors que le téléphone est fermé. Le téléphone apparaît par le bord inférieur avec sa coque, son fond d’écran et l’horloge. Le contenu est masqué quand le joueur a désactivé les aperçus ou est en mode streamer.

Option Par défaut Description
Config.Notifications.Outside true Affiche le téléphone qui apparaît. Avec false, seul un son est joué
Config.Notifications.Side 'right' 'right', 'center' ou 'left'
Config.Notifications.Seconds 6 Durée d’affichage à l’écran
Config.Notifications.Max 3 Notifications empilées en même temps
Config.Notifications.AutoWake true Allume le téléphone de façon invisible quand le joueur apparaît en en portant un, pour que les appels et les messages lui parviennent avant qu’il ne l’ouvre
Config.Notifications.WakeEvery 20 Secondes entre deux vérifications de la présence d’un téléphone sur le joueur

Notifications du serveur

Les notifications de origen_notify peuvent aussi s’afficher sur le téléphone. Elles ne sont pas conservées dans le centre de notifications.

Option Par défaut Description
Config.ServerNotifications.Enabled false Affiche les notifications du serveur sur le téléphone. Les options ci-dessous ne s’appliquent que si c’est activé
Config.ServerNotifications.Replace true Avec true, la notification passe sur le téléphone ; avec false, elle s’affiche aux deux endroits
Config.ServerNotifications.Sound false Joue la sonnerie d’alerte du téléphone
Config.ServerNotifications.Types nil Types à afficher. nil ou vide les affiche tous. Exemple : { error = true, primary = true }
Config.ServerNotifications.Cooldown 1500 Un texte identique dans ce délai en millisecondes n’est pas réaffiché

Logs

Envoie l’activité du téléphone à un webhook Discord. Le contenu des messages, les photos et les données privées ne sont jamais envoyés.

Option Par défaut Description
Config.Logs.Webhook '' URL du webhook Discord. Vide, les logs sont désactivés
Config.Logs.Name 'ORIGEN' Nom de l’expéditeur du 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
}

Stockage

Option Par défaut Description
Config.Storage.Capacity 0 Capacité en Mo. 0 la calcule à partir de Config.Uploader.MaxPhotos (recommandé)
Config.Storage.Slack 120 Mo supplémentaires pour le contenu qui n’est pas des photos quand la capacité est calculée automatiquement
lua
Config.Storage.Weights = {
    photo   = 2400,
    video   = 18000,
    memo    = 900,
    note    = 4,
    message = 1,
}

Taille comptée par élément stocké, en kilo-octets, quand la taille réelle est inconnue.


Batterie

Option Par défaut Description
Config.Battery.Enabled false Active la décharge de la batterie
Config.Battery.DrainSeconds 55 Secondes par 1 % avec le téléphone ouvert
Config.Battery.DrainSecondsIdle 100 Secondes par 1 % avec le téléphone fermé
Config.Battery.ChargePerTick 5 Charge par tick
Config.Battery.ChargeMinutes 20 Minutes pour une charge complète sur un point de recharge

Les points de recharge se placent depuis le panneau d’administration.


Récupération de ligne et boutique de téléphones

Option Par défaut Description
Config.Recovery.Enabled true Active la récupération de ligne à la boutique de l’opérateur
Config.Recovery.Price 5000 Frais de récupération. 0 la rend gratuite
Config.Recovery.Range 3.0 Distance au comptoir, en mètres
Config.Shop.Enabled true Active la boutique de téléphones
Config.Shop.PhonePrice 1500 Prix d’un téléphone neuf. 0 le rend gratuit

Les emplacements des boutiques se définissent depuis le panneau d’administration, dans Carte > Boutiques. La récupération utilise les mêmes comptoirs.

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,
}

Mets Config.Shop.Ped ou Config.Shop.Blip à false pour désactiver le vendeur ou le blip.


Appels

Option Par défaut Description
Config.Calls.KeyAnswer 'RETURN' Touche par défaut pour répondre à un appel entrant
Config.Calls.KeyHangup 'BACK' Touche par défaut pour refuser ou raccrocher
Config.Calls.RingTimeout 30 Secondes de sonnerie avant que l’appel compte comme manqué
Config.Calls.MaxDuration 3600 Coupure de sécurité, en secondes
Config.Calls.AllowVideo true Active les appels vidéo
Config.Calls.AllowRecording true Active l’enregistrement des appels. L’autre personne est enregistrée sans être prévenue
Config.Calls.AllowVoiceFilter true Active le modificateur de voix. Le filtre s’exécute sur le client de celui qui écoute
Config.Calls.SpeakerRadius 3.0 Mètres dans lesquels les joueurs proches rejoignent un appel en haut-parleur
Config.Calls.MaxParticipants 5 Nombre maximum de personnes dans un appel, y compris les deux qui l’ont lancé
lua
Config.Calls.Emergency = {
    ['911'] = 'police',
    ['112'] = 'police',
    ['police'] = 'police',
    ['061'] = 'ambulance',
    ['ambulance'] = 'ambulance',
    ['mechanic'] = 'mechanic',
}

Numéros courts qui redirigent un appel vers un métier de service.

Vidéo (repli par images)

Utilisé uniquement quand la connexion directe WebRTC n’est pas disponible.

Option Par défaut Description
Config.Calls.Video.Fps 12 Plafond d’images par seconde
Config.Calls.Video.Width 240 Largeur de l’image, en pixels
Config.Calls.Video.Quality 0.5 Qualité JPEG initiale (0 à 1)
Config.Calls.Video.KBPorSegundo 96 Upload maximum par côté via la connexion du jeu, en Ko/s
Config.Calls.Video.MaxConcurrent 8 Appels vidéo qui envoient des images en même temps. Au-delà, les appels n’ont que l’audio

Augmenter KBPorSegundo est le seul réglage risqué de ce bloc. Les images circulent sur la même connexion que le jeu ; trop d’upload fait expulser les joueurs pour timeout.

Messagerie vocale

Option Par défaut Description
Config.Voicemail.Window 120 Secondes après un appel sans réponse pendant lesquelles on peut laisser un message
Config.Voicemail.MaxSeconds 30 Durée maximale de l’enregistrement

WebRTC

Option Par défaut Description
Config.WebRTC.Enabled true Envoie la vidéo en pair à pair. Désactivé, ou si la connexion échoue, on retombe sur des images relayées par le serveur
Config.WebRTC.Turn 'cloudflare' 'cloudflare' demande des identifiants TURN à Cloudflare Realtime (nécessite les convars ogphone_turn_token_id et ogphone_turn_api_token). false utilise uniquement STUN
Config.WebRTC.TurnTtl 86400 Durée de vie des identifiants demandés, en secondes
Config.WebRTC.Timeout 6 Secondes d’attente de la connexion directe avant de basculer sur le repli
Config.WebRTC.MaxKbit 1000 Débit d’upload maximal pour la vidéo directe, 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' },
}

Messages

Option Par défaut Description
Config.Messages.MaxLength 1000 Caractères par message
Config.Messages.SystemNumber '900100' Numéro expéditeur des messages du serveur sans expéditeur
Config.Messages.EditWindow 900 Secondes pendant lesquelles un message peut être modifié
Config.Messages.PageSize 30 Messages par page lors du défilement
Config.Messages.MaxGroupMembers 32 Membres par discussion de groupe
Config.Messages.AllowDelete true Autorise la suppression des messages pour tout le monde
Config.Messages.DeleteWindow 3600 Secondes pendant lesquelles un message peut être supprimé pour tout le monde

Stickers

Packs fournis avec le serveur, chargés dans la base de données au démarrage selon le slug. Les URL peuvent être externes ou provenir de la ressource (nui://origen_phone/ui/...). Les packs des joueurs se créent depuis la galerie.

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

Option Par défaut Description
Config.Uploader.MaxPhotos 500 Photos par téléphone
Config.Uploader.TrashDays 30 Jours passés dans la corbeille avant la suppression définitive

Contacts, alarmes et e-mails

Option Par défaut Description
Config.Contacts.ShareRange 5.0 Mètres dans lesquels on peut partager un numéro en face à face
Config.Alarms.Max 10 Alarmes par téléphone
Config.Alarms.RingSeconds 30 Secondes de sonnerie d’une alarme avant qu’elle ne s’arrête
Config.Mail.Domain 'ogn.net' Domaine des adresses e-mail du serveur
Config.Mail.MaxLength 4000 Caractères par e-mail
Config.Mail.MaxRecipients 10 Destinataires par e-mail
Config.Mail.MaxAttachments 6 Pièces jointes par e-mail (des liens, pas des fichiers)

OGN (réseau social)

Option Par défaut Description
Config.OGN.Enabled true Active le réseau social
Config.OGN.UsernamePattern '^[%w%._]+$' Caractères autorisés dans le nom d’utilisateur
Config.OGN.UsernameMin 3 Longueur minimale du nom d’utilisateur
Config.OGN.UsernameMax 20 Longueur maximale du nom d’utilisateur
Config.OGN.MaxCaption 2200 Caractères par légende
Config.OGN.MaxComment 500 Caractères par commentaire
Config.OGN.MaxMediaPerPost 10 Médias par publication
Config.OGN.StoryHours 24 Durée de vie d’une story
Config.OGN.FeedPageSize 12 Publications par page du fil
Config.OGN.CostToVerify false Prix de la vérification. false désactive la vérification payante

Lives

Option Par défaut Description
Config.OGN.Live.Enabled true Active les lives
Config.OGN.Live.Fps 2 Images par seconde
Config.OGN.Live.Width 320 Plus grand côté de l’image, en pixels
Config.OGN.Live.Quality 0.45 Qualité JPEG (0 à 1)
Config.OGN.Live.MaxConcurrent 3 Lives simultanés sur tout le serveur
Config.OGN.Live.MaxViewers 20 Spectateurs par live. Baisse d’abord cette valeur si la bande passante est juste
Config.OGN.Live.ChatLines 60 Lignes de chat conservées pendant le live

OGN Fans

Photos payantes à débloquer. Ceux qui ne les achètent pas les voient pixélisées.

Option Par défaut Description
Config.Fans.Commission 0.20 Part du serveur sur chaque vente et chaque pourboire (0 à 1)
Config.Fans.MinPrice 0 Prix minimum d’une photo. 0 signifie gratuit
Config.Fans.MaxPrice 50000 Prix maximum d’une photo
Config.Fans.MinTip 10 Pourboire minimum
Config.Fans.MaxTip 100000 Pourboire maximum
Config.Fans.PageSize 20 Publications par page
Config.Fans.ImageHosts { 'fivemanage.com', 'fmfile.com' } Hôtes depuis lesquels le serveur peut télécharger pour pixéliser les photos
Config.Fans.MaxImageBytes 8388608 Taille maximale de la photo téléchargée, en octets

DarkChat

Le « chiffrement » n’existe que pour le roleplay : les messages sont stockés dans la base de données et le staff peut les lire.

Option Par défaut Description
Config.DarkChat.Enabled true Active DarkChat
Config.DarkChat.CodeLength 6 Longueur du code de salon
Config.DarkChat.MaxMembers 24 Membres par salon
Config.DarkChat.MaxRooms 8 Salons qu’un joueur peut avoir ouverts
Config.DarkChat.InviteRadius 3.0 Mètres dans lesquels on peut ajouter quelqu’un sans le code
Config.DarkChat.BurnOptions { 0, 5, 30, 60, 1440 } Options d’autodestruction, en minutes. 0 ne supprime jamais

Marché noir

Annonces sous un pseudonyme, livrées via des points de dépôt cachés.

Option Par défaut Description
Config.BlackMarket.Enabled true Active le marché noir
Config.BlackMarket.Days 3 Jours de durée d’une annonce
Config.BlackMarket.MaxPerPhone 6 Annonces actives par joueur
Config.BlackMarket.MaxItems 6 Objets distincts par annonce
Config.BlackMarket.MaxStock 50 Unités par annonce
Config.BlackMarket.Commission 0.1 Commission par vente
Config.BlackMarket.DropRadius 5.0 Distance de récupération d’un point de dépôt, en mètres
Config.BlackMarket.DropMinutes 60 Minutes pendant lesquelles un colis reste au point de dépôt avant que la transaction soit annulée et remboursée
lua
Config.BlackMarket.Blocked = {
    'vehiclekey', 'vehicle_key', 'carkeys', 'keys',
    'vehicledocs', 'vehicle_papers', 'documentacion_vehiculo',
}

Annonces et marketplace

Option Par défaut Description
Config.Ads.Days 7 Jours de durée d’une annonce
Config.Ads.MaxPerPhone 5 Annonces actives par téléphone
Config.Ads.Cost 0 Coût de publication. 0 signifie gratuit
Config.Market.MaxItems 6 Objets distincts par annonce
Config.Market.MaxStock 50 Unités par annonce
Config.Market.Commission 0.05 Commission de la plateforme par vente
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',
}

Les objets vendus quittent l’inventaire du vendeur et arrivent dans celui de l’acheteur, livrés par un coursier Mandao.


Courses : Taxi et GO

Option Par défaut Description
Config.Rides.MinDistance 100 Distance minimale de la course, en mètres
Config.Rides.DriverCut 0.85 Part conservée par le chauffeur. Le reste sort de l’économie
Config.Rides.Timeout 5 Minutes d’attente d’une demande non acceptée
Config.Rides.StuckMinutes 30 Minutes après l’acceptation à partir desquelles le passager peut annuler une fois dans le véhicule
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,
}
Champ Description
employer Qui peut conduire. jobs sont les métiers du framework, businesses sont des noms ou types d’entreprise du bridge Business. Remplir l’une des deux conditions suffit. false laisse conduire n’importe qui. Vérifié à chaque fois, pas seulement à l’inscription
base Tarif de base
perKm Tarif par kilomètre

Courses de taxi avec PNJ

Quand il y a des chauffeurs de taxi libres et peu de demandes, des courses de passagers PNJ sont générées. Le serveur valide la position du chauffeur à la prise en charge et à la destination, et rejette les temps d’arrivée impossibles.

Champ Par défaut Description
enabled true Active les courses PNJ
every 45 Secondes entre deux vérifications de génération
chance 0.6 Probabilité d’une course à chaque vérification (0 à 1)
perDriver 1 Maximum de courses PNJ en attente par chauffeur libre
maxPending 4 Maximum de courses PNJ en attente au total
nearDriver 2500 La prise en charge se fait à cette distance d’un chauffeur libre, en mètres
minTrip / maxTrip 600 / 4500 Plage de longueur du trajet, en mètres
radius 80.0 Rayon autour du point où le taxi doit se trouver
maxSpeed 30 Vitesse moyenne maximale plausible, en m/s
fareFactor 1.0 Tarif PNJ par rapport au tarif normal
models liste Modèles de ped utilisés comme passagers
names liste Noms d’affichage des passagers
notes liste Notes envoyées par le passager. Les chaînes vides signifient aucune note
places liste Points de prise en charge et de dépose { x, y, z, label }. Le passager apparaît sur le trottoir le plus proche

Mandao (livraisons)

Option Par défaut Description
Config.Delivery.Base 200 Tarif de base de livraison
Config.Delivery.PerKm 60 Tarif par kilomètre
Config.Delivery.CourierCut 0.85 Part conservée par le coursier
Config.Delivery.Timeout 20 Minutes d’attente d’une mission non acceptée
Config.Delivery.Deadline 10 Minutes pour livrer une mission acceptée. À l’expiration, la marchandise est quand même livrée et le coursier reçoit un avertissement
Config.Delivery.StrikeBans { 10, 30, 60 } Minutes de blocage par avertissement. La dernière valeur se répète
Config.Delivery.StrikeReset 120 Minutes sans échec avant que les avertissements soient oubliés
Config.Delivery.MinDistance 150 Distance minimale de livraison, en mètres
Config.Delivery.Reach 8.0 Distance requise pour récupérer ou livrer, en mètres
Config.Delivery.MaxItems 8 Objets distincts par livraison entre joueurs
Config.Delivery.Employer false Qui peut livrer. Même format que Config.Rides.Taxi.employer
Config.Delivery.HandleBusinessOrders true Les commandes des entreprises attendent un coursier au lieu d’arriver automatiquement
Config.Delivery.BusinessFee 450 Ce que l’entreprise paie au coursier pour livrer sa commande
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 },
}

Lieu où la marchandise des commandes d’entreprise est récupérée. Vide, la récupération se fait dans l’entreprise elle-même.


Beboteo (rencontres)

Option Par défaut Description
Config.Dating.DailyLikes 20 Likes quotidiens pour les utilisateurs non VIP
Config.Dating.MaxPhotos 6 Photos par profil
Config.Dating.VipPrice 5000 Prix du VIP
Config.Dating.VipDays 30 Durée du VIP
Config.Dating.VipLabel 'BEBOTEO VIP' Texte du badge VIP
lua
Config.Dating.Genders = {
    hombre = 'dating_gender_male',
    mujer = 'dating_gender_female',
    otro = 'dating_gender_other',
}

La clé est stockée et comparée ; la valeur est la clé de locale affichée.


Banque, factures et amendes

Option Par défaut Description
Config.Bank.MaxTransfer 500000 Limite par virement depuis le téléphone
Config.Bank.MaxDaily 2000000 Total pouvant être déplacé par jour. 0 supprime la limite
Config.Bank.MaxWeekly 8000000 Total pouvant être déplacé par semaine. 0 supprime la limite
Config.FineAccount '' Compte qui reçoit les paiements d’amendes. Vide, le joueur est débité sans dépôt nulle part

Crypto

Désactivé par défaut car il récupère des prix en direct sur internet. Pour l’activer, mets Config.Crypto.Enabled = true, ajoute { id = 'crypto', label = 'Monedas', slot = 27, default = true } à Apps et crypto = 'crypto' à AppDomains dans config/apps.lua.

Option Par défaut Description
Config.Crypto.Enabled false Active le trading de cryptomonnaies
Config.Crypto.Api endpoint public de CoinGecko Source des prix. Aucune clé d’API nécessaire
Config.Crypto.Currency 'usd' Devise des prix
Config.Crypto.Refresh 300 Secondes entre deux récupérations des prix (partagé par tout le serveur)
Config.Crypto.Fee 0.02 Frais de la maison par opération
Config.Crypto.MaxPerTrade 500000 Montant maximum par opération. 0 supprime la limite
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 source des prix ne répond pas, le trading est désactivé.


Navigateur

N’ouvre que les sites de la liste blanche. Les domaines sont comparés, donc origen.net autorise toutes ses pages et ses sous-domaines.

Option Par défaut Description
Config.Browser.Enabled true Active le navigateur
Config.Browser.Home '' Page d’accueil. Vide, on démarre sur les favoris
Config.Browser.Sites {} Sites autorisés. Vide, rien ne s’ouvre
Config.Browser.Bookmarks {} Favoris définis par le serveur

Musique

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

L’URL doit être un flux que le navigateur peut lire (mp3, aac ou m3u8 audio). Il ne se lit que pour le joueur qui le lance.


Actualités

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

Qui peut écrire des articles depuis le téléphone. Remplir l’une des conditions businesses ou jobs suffit. Mets Publishers à false pour publier uniquement via l’export PublishNews. MaxPerDay est la limite par téléphone ; 0 la supprime.


Services d’urgence

Les alertes sont envoyées au bridge Dispatch avec la position de l’appelant.

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',
    },
}
Champ Description
Cooldown Secondes entre deux alertes du même téléphone
job Métier qui reçoit l’alerte
alertTitle Titre de l’alerte de dispatch

Les mécaniciens et les dépanneuses n’ont pas leur place ici : avec une ressource d’entreprises, ils apparaissent comme des entreprises dans l’app.


Modération

Option Par défaut Description
Config.Filter.Enabled true Active les filtres
Config.Filter.Words {} Mots masqués dans tout ce qu’écrit un joueur. Détectés à l’intérieur d’autres mots, sans tenir compte de la casse ni des accents. Vide par défaut
Config.Filter.Mask '***' Texte de remplacement
Config.Filter.ReservedNames voir ci-dessous Noms interdits dans les noms d’utilisateur, les pseudonymes et les noms de profil
lua
Config.Filter.ReservedNames = {
    'admin', 'administrador', 'staff', 'moderador', 'soporte', 'support',
    'police', 'policia', 'lspd', 'bcso', 'sheriff', 'ems', 'sama', 'emergencias',
    'origen', 'ogn', 'sistema', 'system', 'oficial', 'official',
}

Panneau d’administration et accès aux apps

Option Par défaut Description
Config.Admin.Command 'telefonoadmin' Commande qui ouvre le panneau
Config.Admin.Ace 'ogphone.admin' Permission ACE
Config.Admin.Export { resource = 'origen_admin', method = 'IsAdmin' } Export qui reçoit le source et renvoie true ou false. S’exécute dans un pcall
Config.Admin.Licenses {} Identifiants individuels autorisés
Config.AppRules.Unemployed 'unemployed' Nom du métier pour les joueurs sans métier
Config.AppRules.NoGang 'none' Nom du gang pour les joueurs qui n’appartiennent à aucun gang

Les règles d’accès aux apps (qui obtient quelle app) se définissent depuis le panneau d’administration ou avec l’export SetAppRule.


Apparence et sons

Ce sont des valeurs par défaut ; une fois modifiées depuis le panneau, ce sont celles de la base de données qui prennent le relais.

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 peut être un fichier de ui/images/wallpapers ou une adresse externe. label peut être une clé de locale ou du texte simple.

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 },
}

Les sonneries et les alertes sont des fichiers dans ui/sounds/. L’id est enregistré dans les réglages de chaque joueur, il ne doit donc pas changer une fois publié.


Langues

Option Par défaut Description
Config.DefaultLanguage 'es' Langue par défaut du téléphone
Config.Languages { 'es', 'en', 'fr', 'de', 'pt' } Langues disponibles. Avec une seule, le sélecteur de langue est masqué
Config.DateLocales es-ES, en-GB, fr-FR, de-DE, pt-PT Format des dates et des nombres par langue
Config.DateLocale 'es-ES' Valeur de repli pour une langue absente de DateLocales

Pour ajouter une langue, copie locales/en.json, traduis-le et ajoute son code à Config.Languages et Config.DateLocales.


config/apps.lua

La source de vérité du serveur pour savoir quelles apps existent. Modifier l’interface ne suffit pas pour accéder à une app.

Champ Description
id Identifiant de l’app
label Nom affiché
slot Position dans la grille de l’écran d’accueil (1 à 24 par page)
dock Placée dans le dock du bas au lieu de la grille
default Installée par défaut
fija Ne peut pas être désinstallée depuis la boutique d’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
}

Retire une app de cette liste pour la désactiver pour tout le monde. Pour la restreindre à certains joueurs (civils, un gang, un métier), utilise plutôt le panneau d’administration.

AppDomains associe chaque domaine de l’API du serveur à l’app qui en est propriétaire. Quand un joueur perd l’accès à une app, les méthodes serveur de celle-ci cessent de lui répondre : l’accès est donc appliqué côté serveur.


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 Signification
'propio' Rempli par le téléphone lui-même
'fuera' Rempli par une autre ressource avec l’export SetWidgetData

Les permissions des widgets se gèrent dans le panneau d’administration.


Pescabichos

Données de jeu de l’app de capture de créatures. Les noms et les textes sont des clés de locale (pb_sp_12, pb_sp_12_desc, pb_atk_12_1) ; pour renommer une créature, modifie cette clé dans chaque locales/*.json. Une valeur qui n’est pas une clé s’affiche telle quelle.

Fichier Contenu
config/pescabichos.lua Types, raretés, zones d’apparition et espèces 1 à 50
config/pescabichos_especies2.lua / pescabichos_especies3.lua Espèces à partir de la 51
config/pescabichos_combate.lua Combats, tableau des types, attaques par type, arènes, raids, évolution
config/pescabichos_ataques.lua Attaques de chaque créature
config/pescabichos_progreso.lua Niveau du joueur, déblocages et boutique

Champs d’une espèce

Champ Description
id Numéro de collection (1 à 200). C’est aussi le nom de l’image : ui/images/pescabichos/<id>.webp
nombre Clé de locale du nom
tipos Un ou deux parmi asfalto, neon, marea, polvo, pino, chatarra, brasa, niebla
rareza comun, poco, rara, epica ou legendaria
zonas Où elle apparaît. Vide, c’est n’importe où sur terre. 'mar' correspond à de la vraie eau
peso Poids d’apparition facultatif. Par défaut, celui de sa rareté
stock Maximum facultatif sur tout le serveur
red Filet spécial facultatif nécessaire pour la capturer
dificultad Difficulté de capture facultative (1 à 5)
hora nil toujours, 'noche' (21-6) ou 'dia' (7-20)
familia / fase Lignée d’évolution et stade (1, 2 ou 3)
pc Puissance minimale et maximale avec laquelle elle apparaît
texto Clé de locale de sa fiche dans le dex

Raretés

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 },
}
Champ Description
peso Poids d’apparition par rapport aux autres raretés
captura Probabilité de capture de base
huye Probabilité de fuite après une tentative ratée
xp XP accordé à la capture

Zones

Les zones terrestres sont des rectangles de la carte { min x, min y, max x, max y }, vérifiés dans l’ordre (les petites zones d’abord). En dehors de toutes, la zone est 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 } },
    -- ...
}

Progression

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 },
}
Champ Description
rareza Niveau du joueur à partir duquel chaque rareté apparaît
salvajes Niveaux des créatures sauvages relatifs au joueur (abajo, arriba, max)
porEncima Pénalité sur la probabilité de capture par niveau au-dessus du joueur, et l’écart de niveaux à partir duquel elle ne peut plus être capturée
topeBicho Les créatures peuvent monter jusqu’au niveau du joueur plus cette valeur
abre Niveau auquel chaque fonctionnalité se débloque