Aller au contenu

Votre ressource à ses côtés

La page Exports et state bags traite de la communication avec le téléphone. Ici, nous abordons l’autre sens : les quelques principes qu’une ressource doit connaître pour éviter d’entrer en conflit avec le téléphone sur le même joueur.

Rien de tout cela ne nécessite de dépendance, d’événement ou d’autorisation spéciale. Quatre state bags et un export, et la plupart des scripts n’ont besoin que d’une seule ligne.


Une photo capture l’écran entier. Tout ce que vous affichiez au moment où le déclencheur s’est activé — un message d’aide, un marqueur 3D, une barre de progression, une interface textuelle — apparaîtra sur l’image, et cette ressource ne peut pas vous empêcher de le dessiner. Rien de notre côté ne s’interpose entre votre appel de rendu et l’écran.

Il existe donc un état à interroger à la place :

if LocalPlayer.state.phoneCamera then goto skip end -- or return, or whatever your loop wants

phoneCamera est à true dès l’instant où un viseur s’ouvre jusqu’à sa fermeture. Une seule ligne suffit pour éviter que votre texte d’aide ne termine dans l’album photo d’un inconnu.

L’interface du téléphone s’efface déjà d’elle-même : la mini-carte du jeu et les barres de santé sont masquées tant que l’appareil photo est ouvert, de sorte que le joueur capture fidèlement ce qu’il cadre.

2. Le téléphone dans la main n’est pas un déchet

Section intitulée « 2. Le téléphone dans la main n’est pas un déchet »

Le téléphone pliable est constitué de deux objets attachés à la main du ped. Un script qui ramasse les props éparpillés ou affiche Appuyez sur [E] pour supprimer l’objet sur tout élément à proximité proposera de supprimer le téléphone d’un joueur — et le fera alors même qu’il le tient en main.

La règle générale est bien plus précieuse qu’un nom de modèle : un objet attaché à un ped n’est pas un déchet.

if IsEntityAttached(object) then goto skip end

Si vous devez être précis, les modèles sont pear_fold_base* et pear_fold_leaf*, un par finition.

3. Le ped appartient au téléphone tant qu’il est sorti

Section intitulée « 3. Le ped appartient au téléphone tant qu’il est sorti »

mic_phone_props prend le contrôle de la posture du ped lorsque le téléphone est en main, et ce de façon stricte : un système de surveillance rétablit son animation de maintien en moins d’une demi-seconde si quoi que ce soit d’autre réquisitionne le haut du corps. Il ne peut pas deviner à qui appartient l’animation qu’il observe.

Si votre script impose une posture à ce ped — un appel, un scénario, une action qui vous est propre —, réclamez d’abord la libération des bras :

exports.mic_phone_props:SetPose(false) -- they are yours; the phone hangs where a phone hangs
-- … your animation …
exports.mic_phone_props:SetPose(true) -- and back

Céder la posture repositionne également le prop : il se place sur l’os et le décalage utilisés par le prop prop_npc_phone_02 du jeu de base, et se replie, de sorte que chaque animation de téléphone par défaut fonctionne sans que vous ayez à mesurer quoi que ce soit. SetPose(true) lui redonne la prise en main, l’angle de charnière et l’animation initiale.

IsOut() indique si le téléphone est actuellement sorti.

4. Le mode item modifie la nature d’un identifiant

Section intitulée « 4. Le mode item modifie la nature d’un identifiant »

Lorsque les téléphones sont des items, un téléphone appartient à l’appareil plutôt qu’au personnage. phoneDevice sur le joueur correspond à l’item dans lequel il réside, et vaut nil en mode personnage.

Cela a son importance si vous enregistrez des données associées à un téléphone : un numéro, un abonnement, une licence. Utilisez exports.mic_phone:GetDevice() et indexez vos données sur cet identifiant, sinon vos informations suivront la personne alors même qu’elle a vendu son téléphone.

5. Quatre state bags, et une commande pour tous les afficher

Section intitulée « 5. Quatre state bags, et une commande pour tous les afficher »
phoneOpen boolean the phone is out and on screen
phoneCamera boolean a viewfinder is up
onCallWith number | nil the source at the other end
flashlight boolean their torch is on

La liste complète, avec le reste, est disponible sur la page Exports et state bags. La commande phoneapi <id> affiche chacun d’entre eux pour un joueur dans la console du serveur, ce qui est bien plus rapide que de deviner de quel côté vient l’erreur.


Une notification, un message, un e-mail, une facture — tout se fait via des exports serveur, en une seule ligne, détaillés dans Exports et state bags.

Pour concevoir une application complète, consultez votre propre application dessus : un seul appel, aucune configuration du téléphone, aucun redémarrage, et elle tourne dans sa propre frame isolée.

Il n’existe pas de hook pour refuser l’ouverture du téléphone. Les règles résident dans Config.Open.Restrict — mort, menotté, nageant, au volant, etc. — et une ressource ne peut pas y greffer sa propre règle. Si vous avez besoin d’interdire l’ouverture du téléphone pendant un mini-jeu aujourd’hui, les solutions les plus saines sont une règle de configuration qui coïncide avec votre état, ou l’appel à exports.mic_phone:Close() dès le lancement de votre activité. Faites-le-nous savoir si ce hook vous est indispensable ; il est très simple à ajouter et personne ne l’a encore demandé.


  • Votre script affiche-t-il des éléments à l’écran ? → suspendez l’affichage tant que phoneCamera est actif
  • Supprime-t-il, nettoie-t-il ou saisit-il les objets à proximité ? → ignorez les entités attachées à une entité
  • Anime-t-il le joueur ? → utilisez SetPose(false) puis SetPose(true)
  • Stocke-t-il des données par téléphone ? → indexez sur phoneDevice, pas sur le personnage
  • Doit-il savoir si quelqu’un est joignable ? → consultez phoneOpen et onCallWith