Salta ai contenuti

La tua risorsa accanto al telefono

Export e state bag spiega come parlare con il telefono. Questa pagina riguarda la direzione opposta: quelle poche cose che una risorsa dovrebbe sapere per evitare che i due script litighino sullo stesso giocatore.

Nulla di tutto ciò richiede dipendenze, eventi o permessi. Quattro state bag e un export, e alla maggior parte degli script basta una sola riga.


Una fotografia cattura l’intero fotogramma. Qualsiasi cosa tu stessi disegnando a schermo nel momento dello scatto — un suggerimento tasti, l’etichetta di un marker, una barra di avanzamento, una text UI — finisce nella foto, e questa risorsa non può impedirti di disegnarla. Non c’è nulla di nostro tra la tua chiamata di disegno e lo schermo.

Quindi c’è una condizione da controllare prima:

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

phoneCamera è true dal momento in cui si apre il mirino fino a quando si chiude. Una riga e il tuo avviso resta fuori dall’album fotografico di uno sconosciuto.

L’HUD del telefono si toglie già di mezzo da solo: la minimappa e le barre della vita del gioco vengono nascoste finché la fotocamera è attiva, così ciò che qualcuno inquadra è esattamente ciò che ottiene.

2. Il telefono che hanno in mano non è spazzatura

Sezione intitolata “2. Il telefono che hanno in mano non è spazzatura”

Il telefono pieghevole è composto da due oggetti attaccati alla mano del ped. Uno script che ripulisce i prop vaganti per la mappa, o che mostra Premi [E] per eliminare l’oggetto per qualsiasi cosa si trovi nelle vicinanze, proporrà di eliminare il telefono di qualcuno — e lo farà mentre lo tiene in mano.

La regola generale vale più del nome di un modello: un oggetto attaccato a un ped non è spazzatura.

if IsEntityAttached(object) then goto skip end

Se hai bisogno di essere specifico, i modelli sono pear_fold_base* e pear_fold_leaf*, uno per ciascuna finitura.

3. Il ped appartiene al telefono mentre è impugnato

Sezione intitolata “3. Il ped appartiene al telefono mentre è impugnato”

mic_phone_props controlla la posa del ped mentre il telefono è in mano, e fa sul serio: c’è un watchdog che ripristina l’animazione di impugnatura entro mezzo secondo se qualsiasi altra cosa prende il controllo della parte superiore del corpo. Non può sapere di chi sia l’animazione che sta vedendo.

Se il tuo script deve mettere in posa quel ped — una chiamata, uno scenario, un’animazione tua — chiedi prima in prestito le braccia:

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

Mettere in pausa la posa sposta anche il prop: passa all’osso e all’offset usati dal prop_npc_phone_02 nativo del gioco, e si chiude, così tutte le animazioni cellulare standard funzionano senza che tu debba misurare nulla. SetPose(true) restituisce l’impugnatura, l’angolo della cerniera e l’animazione che aveva prima.

IsOut() ti dice se c’è effettivamente un telefono impugnato da mettere da parte.

4. La modalità oggetto cambia il significato di un identificatore

Sezione intitolata “4. La modalità oggetto cambia il significato di un identificatore”

Quando i telefoni sono oggetti nell’inventario, un telefono appartiene al dispositivo anziché al personaggio. phoneDevice sul giocatore indica l’oggetto specifico in cui vive quel telefono, ed è nil in modalità personaggio.

Questo fa la differenza se salvi dati associati a un telefono: un numero, un abbonamento, una licenza. Usa exports.mic_phone:GetDevice() come chiave, altrimenti i tuoi dati seguiranno la persona anche quando ciò che ha venduto era il telefono.

5. Quattro state bag e un comando che li stampa tutti

Sezione intitolata “5. Quattro state bag e un comando che li stampa tutti”
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

L’elenco completo, insieme a tutto il resto, si trova in Export e state bag. phoneapi <id> li stampa tutti per un giocatore nella console del server, che è molto più rapido rispetto a tirare a indovinare quale lato stia sbagliando.


Una notifica, un messaggio, un’email, una fattura: sono tutti export lato server, tutti da una sola riga, tutti spiegati in Export e state bag.

Un’intera app creata da te è descritta in la tua app sul telefono: una sola chiamata, nessuna configurazione sul telefono, nessun riavvio, e gira in un frame tutto suo.

Non c’è un hook per rifiutare l’apertura del telefono. Le regole vivono in Config.Open.Restrict — morto, ammanettato, nuotando, guidando e così via — e una risorsa esterna non può aggiungerne una propria. Se oggi hai bisogno che il telefono non possa essere aperto durante il tuo minigioco, le opzioni concrete sono sfruttare una regola di configurazione che coincide con il tuo stato oppure chiamare exports.mic_phone:Close() quando inizia la tua attività. Faccelo sapere se ti serve quell’hook: è una piccola aggiunta e finora non l’ha chiesta nessuno.


  • Il tuo script disegna a schermo? → saltalo mentre phoneCamera è attivo
  • Elimina, ripulisce o afferra oggetti vicini? → salta quelli attaccati (IsEntityAttached)
  • Esegue animazioni sul giocatore? → usa SetPose(false) e SetPose(true)
  • Salva dati legati al singolo telefono? → usa phoneDevice come chiave, non il personaggio
  • Deve sapere se qualcuno è raggiungibile o impegnato? → controlla phoneOpen, onCallWith