Installation
Dix minutes, dont la majeure partie consiste Ă attendre que le serveur dĂ©marre. Il nây a aucun fichier SQL Ă importer et aucun second programme Ă exĂ©cuter â les tables se crĂ©ent dâelles-mĂȘmes au premier dĂ©marrage de la ressource.
Chaque étape ci-dessous se termine par comment savoir si cela a fonctionné, pour ne jamais passer à la suite avec un doute.
Avant de commencer
Section intitulée « Avant de commencer »| Ce dont vous avez besoin | Pourquoi |
|---|---|
| oxmysql, en cours dâexĂ©cution | Tout ce que le tĂ©lĂ©phone retient rĂ©side dans votre base de donnĂ©es |
| ESX, QBCore, QBox ou fmLib | Détecté automatiquement ; pas besoin de préciser lequel |
| Un serveur FiveM des deux derniÚres années | La partie web du téléphone utilise le Node intégré du serveur |
Rien dâautre. Pas de npm, pas dâĂ©tape de compilation, pas de serveur web.
1. Mettez le dossier en place
Section intitulĂ©e « 1. Mettez le dossier en place »DĂ©posez mic_phone dans vos resources â un dossier entre crochets est ce quâil y a de plus propre :
resources/[mic]/mic_phone/Gardez le nom de dossier mic_phone. Rien ne casse si vous le renommez, mais lâadresse web du tĂ©lĂ©phone est construite Ă partir du nom du dossier, donc tout ce qui est documentĂ© Ă son sujet changerait Ă©galement.
2. Démarrez-le aprÚs ce dont il dépend
Section intitulĂ©e « 2. DĂ©marrez-le aprĂšs ce dont il dĂ©pend »Dans server.cfg, en dessous dâoxmysql et en dessous de votre framework :
ensure oxmysqlensure es_extended # or qb-core / qbx_coreensure mic_phoneCela a fonctionné lorsque la console indique, au démarrage :
[mic_phone] web: door B listening on http://0.0.0.0:30125 · door A at /mic_phone/web/ on the game portSi vous voyez une ligne rouge concernant un framework Ă la place, dĂ©marrez mic_phone aprĂšs votre framework â câest presque toujours la cause.
3. La base de donnĂ©es â rien Ă faire
Section intitulĂ©e « 3. La base de donnĂ©es â rien Ă faire »Le premier dĂ©marrage lit sql/schema.sql et crĂ©e tout ce qui manque. Vous verrez dĂ©filer une sĂ©rie de lignes CREATE TABLE IF NOT EXISTS mic_phone_âŠ. Câest tout.
Cela a fonctionné lorsque ces lignes apparaissent une seule fois et plus jamais lors des démarrages ultérieurs.
4. Donnez aux joueurs un objet Ă ouvrir
Section intitulĂ©e « 4. Donnez aux joueurs un objet Ă ouvrir »Par dĂ©faut, le tĂ©lĂ©phone nĂ©cessite un item dâinventaire nommĂ© phone :
-- shared/config.luaConfig.Open = { RequireItem = true, Item = 'phone', ...}La plupart des configurations ESX et QB possĂšdent dĂ©jĂ cet item. Utilisateurs dâox_inventory : ajoutez-le Ă votre liste dâitems sâil nây est pas. Vous voulez simplement lâessayer ? DĂ©finissez RequireItem = false et ignorez totalement cette Ă©tape.
Cela a fonctionnĂ© lorsque vous vous connectez, portez lâitem, et que F1 ouvre le tĂ©lĂ©phone. /phone fait de mĂȘme, et T le dĂ©plie en tablette lorsquâil est ouvert.
5. ParamÚtres cÎté serveur uniquement
Section intitulĂ©e « 5. ParamĂštres cĂŽtĂ© serveur uniquement »Copiez le fichier dâexemple et remplissez ce que vous souhaitez :
shared/server_config.example.lua â shared/server_config.luaCe fichier est chargĂ© uniquement comme script serveur, donc rien de son contenu ne parvient Ă un joueur. Deux Ă©lĂ©ments y rĂ©sident :
Photos, vidĂ©os et notes vocales. Indiquez un token mĂ©dia Fivemanage dans ServerConfig.Media.Token (ou la convar FIVEMANAGE_MEDIA_API_KEY) et le tĂ©lĂ©phone tĂ©lĂ©verse les fichiers lui-mĂȘme, en ne stockant que le lien obtenu. Un webhook Discord sert de solution de secours.
Si aucun des deux nâest dĂ©fini,
FallbackToDataUrlconserve le fichier au sein de votre base de donnĂ©es. Câest parfait pour un test mais trĂšs lourd en production â quelques secondes de voix reprĂ©sentent des dizaines de kilo-octets sur chaque ligne concernĂ©e. DĂ©finissez un token, ou dĂ©sactivez cette option pour que les tĂ©lĂ©versements Ă©chouent explicitement.
Webhooks Discord. Une URL par type dâĂ©vĂ©nement, ou Default pour tout intercepter. Celui qui mĂ©rite dâĂȘtre configurĂ© mĂȘme si vous ignorez le reste est Server : câest le seul qui vous informe sur le serveur plutĂŽt que sur un joueur â changement dâadresse, certificat non renouvelĂ©.
Vous avez terminé
Section intitulée « Vous avez terminé »Le téléphone fonctionne. Tout ce qui suit est optionnel.
Optionnel : le téléphone sur un vrai smartphone
Section intitulĂ©e « Optionnel : le tĂ©lĂ©phone sur un vrai smartphone »Les joueurs peuvent consulter le tĂ©lĂ©phone de leur personnage sur leur propre appareil. Câest dĂ©jĂ activĂ© : ParamĂštres âș Appareils liĂ©s sur le tĂ©lĂ©phone en jeu affiche un code QR, ils le scannent et saisissent en jeu les six chiffres affichĂ©s. Cet appareil agit alors en tant que ce personnage.
En simple HTTP, cela leur donne dĂ©jĂ accĂšs aux messages, e-mails, contacts, au garage, aux propriĂ©tĂ©s et au reste. Ce quâun navigateur refuse de fournir Ă une page non sĂ©curisĂ©e reprĂ©sente pourtant le meilleur :
| HTTP simple | HTTPS | |
|---|---|---|
| Messages, e-mails, garage, tout le reste | oui | oui |
| Notifications avec lâapplication fermĂ©e | non | oui |
| Appels | non | oui |
| Le microphone, pour les notes vocales | non | oui |
| Lâinstaller en tant quâapp, avec son icĂŽne | non | oui |
Obtenir HTTPS sans rien installer
Section intitulée « Obtenir HTTPS sans rien installer »Cette ressource peut obtenir et renouveler son propre certificat. Faites pointer un nom de domaine vers votre serveur, ouvrez deux ports et renseignez trois lignes :
-- shared/server_config.lua (server-only: this file is never sent to a client)ServerConfig.Web = { Url = 'https://phone.yourserver.com/', Https = { Enabled = true, Names = { 'phone.yourserver.com' }, },}- Un nom de domaine. Sur un VPS, câest un enregistrement A pointant vers son adresse IP. Pas de domaine ?
duckdns.orgvous en fournit un gratuitement en une minute. - Port 80 et port 443 ouverts sur le pare-feu. Le port 80 nâest ouvert que pendant la demande du certificat, puis refermĂ© dĂšs que la validation est effectuĂ©e.
Cela a fonctionné lorsque la console indique :
https: asking for phone.yourserver.comhttps: port 80 open for the challengehttps: challenge port closedhttps: certificate in hand, good until 2027-01-31https: listening on https://phone.yourserver.com/Si le port 443 est dĂ©jĂ pris â certains routeurs le conservent pour leur propre page dâadministration â diffusez sur un autre port : Port = 8443, redirigez le 8443 et Ă©crivez Url = 'https://phone.yourserver.com:8443/'. Seul le challenge doit obligatoirement passer par le port 80 ; un certificat appartient Ă un nom de domaine, pas Ă un port, et tout fonctionne parfaitement.
docs/HTTPS.md détaille les autres cas de figure : derriÚre le proxy Cfx.re, derriÚre un reverse proxy que vous exploitez déjà , ou sur un hébergeur qui ne vous ouvre pas de ports.
Quand quelque chose ne va pas
Section intitulĂ©e « Quand quelque chose ne va pas »phonehttps check â demande au serveur de test de lâautoritĂ© de certification sâil parvient Ă communiquer avec votre machine. ExĂ©cutez ceci en premier si aucun certificat nâarrive : cela permet de distinguer un souci sur votre pare-feu dâun problĂšme sur cette ressource.
phonehttps â statut du certificat et date de son prochain renouvellement.
phoneduck â statut du nom de domaine, si ce serveur pointe son propre domaine DuckDNS vers lui-mĂȘme, et date de sa derniĂšre notification. phoneduck now transmet lâadresse quâil a actuellement et affiche la rĂ©ponse de DuckDNS, ce qui permet de sâapercevoir quâun token est incorrect sans attendre que lâadresse IP ne change.
| Ce que vous observez | Ce que câest |
|---|---|
| Le tĂ©lĂ©phone ne sâouvre pas | Aucun item phone, ou RequireItem est activĂ© et le joueur nâen porte pas |
| Le QR pointe vers un endroit inaccessible | DĂ©finissez ServerConfig.Web.Url manuellement ; la dĂ©tection automatique ne voit pas au-delĂ dâun routeur ayant dĂ©placĂ© le port |
| Aucun certificat, et le log met en cause le challenge | Le port 80 nâatteint pas cette machine. VĂ©rifiez la redirection de port puis le pare-feu, dans cet ordre |
| Les photos sont énormes / la BDD grossit vite | Pas de token média, et FallbackToDataUrl enregistre les fichiers dans la base de données |
| Les appels entre deux joueurs sont silencieux | La voix est sur auto et nâa trouvĂ© aucune ressource vocale ; indiquez la vĂŽtre dans Config.Bridge.voice |
Avant dâouvrir votre ville
Section intitulĂ©e « Avant dâouvrir votre ville »shared/server_config.luavous appartient. Ne le partagez jamais et ne le committez sur aucun dĂ©pĂŽt public ; il contient votre token mĂ©dia et les URL de vos webhooks.- Faites pointer le webhook
Serververs un salon que vous lisez. Câest lui qui avertit que la porte dâentrĂ©e du tĂ©lĂ©phone ne fonctionne plus, et câest le seul avertissement que vous aurez avant quâun joueur ne vienne vous le signaler. - DĂ©sactivez
Config.Debugsi vous lâaviez activĂ© : il affiche chaque dĂ©cision du bridge dans la console. - SĂ©curitĂ© mĂ©rite dix minutes si vous gĂ©rez une ville publique : les hypothĂšses que cette ressource fait sur les personnes qui sây connectent, et les rĂšgles quâelle applique pour quâun client modifiĂ© ne puisse rien atteindre en dehors de son propre personnage.