Deine Ressource daneben
Unter Exports und State Bags geht es darum, wie man mit dem Telefon spricht. Hier geht es um die umgekehrte Richtung: Die wenigen Dinge, die eine andere Ressource wissen sollte, damit sich beide Skripte nicht um denselben Spieler streiten.
Nichts davon erfordert eine Dependency, ein Event oder eine Freigabe. Vier State Bags und ein Export, und die meisten Skripte benötigen genau eine Zeile.
1. Jemand nimmt ein Foto auf
Abschnitt betitelt „1. Jemand nimmt ein Foto auf“Ein Foto erfasst den gesamten Bildschirm. Alles, was du beim Auslösen des Verschlusses gerendert hast — ein Hinweistext, eine 3D-Markierung, ein Ladebalken, ein Text-UI —, landet auf dem Bild, und dieses Telefonskript kann dich nicht daran hindern. Nichts von uns schiebt sich zwischen deinen Renderaufruf und den Bildschirm.
Daher gibt es stattdessen eine einfache Abfrage:
if LocalPlayer.state.phoneCamera then goto skip end -- or return, or whatever your loop wantsphoneCamera ist true vom Öffnen des Kamerasuchers bis zu dessen Schließen. Eine einzige Zeile genügt, damit deine UI nicht im Fotoalbum eines Fremden verewigt wird.
Das HUD des Telefons blendet sich bereits selbst aus: Minimap und Lebensanzeigen des Spiels werden für die Dauer der Kameraaktivität ausgeblendet, sodass der Spieler genau das fotografiert, was er anvisiert.
2. Das Telefon in der Hand ist kein Müll
Abschnitt betitelt „2. Das Telefon in der Hand ist kein Müll“Das Klapptelefon besteht aus zwei Objekten, die an der Hand des Peds befestigt sind. Ein Skript, das herumliegende Props einsammelt oder die Option Drücke [E] zum Löschen des Objekts auf nahegelegene Entities anwendet, wird anbieten, das Telefon des Spielers zu löschen — und zwar während er es in der Hand hält.
Die generelle Regel ist wertvoller als ein konkreter Modellname: Ein an ein Ped angehängtes Objekt ist kein Müll.
if IsEntityAttached(object) then goto skip endFalls du es genau spezifizieren musst: Die Modelle lauten pear_fold_base* und pear_fold_leaf* (eines pro Gehäusefarbe).
3. Das Ped gehört dem Telefon, solange es draußen ist
Abschnitt betitelt „3. Das Ped gehört dem Telefon, solange es draußen ist“mic_phone_props beansprucht die Körperhaltung des Peds, während das Telefon in der Hand liegt, und zwar kompromisslos: Ein interner Watchdog stellt die Halteanimation innerhalb einer halben Sekunde wieder her, sobald etwas anderes den Oberkörper übernimmt. Das Skript kann nicht wissen, wem die andere Animation gehört.
Falls dein Skript dieses Ped posieren lässt — für ein Telefonat, ein Szenario, eine eigene Animation —, gib zuerst die Arme frei:
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 backDas Freigeben bewegt auch das Prop: Es springt auf den Bone und den Offset, den das standardmäßige prop_npc_phone_02 des Spiels nutzt, und faltet sich zusammen; jede native Handy-Animation funktioniert somit ohne manuelles Nachmessen. SetPose(true) stellt Haltung, Scharnierwinkel und die ursprüngliche Animation wieder her.
IsOut() gibt an, ob das Telefon aktuell überhaupt herausgeholt ist.
4. Der Item-Modus ändert die Bedeutung von Identifikatoren
Abschnitt betitelt „4. Der Item-Modus ändert die Bedeutung von Identifikatoren“Wenn Telefone Items sind, gehört ein Telefon dem Gerät und nicht dem Charakter. phoneDevice auf dem Spieler ist das Item, in dem es lebt, und im Charakter-Modus nil.
Das ist entscheidend, wenn du Daten an ein Telefon bindest: Eine Nummer, ein Abo, eine Lizenz. Nutze exports.mic_phone:GetDevice() als Schlüssel, andernfalls folgen deine Daten der Person, obwohl diese das Telefon verkauft hat.
5. Vier State Bags und ein Befehl, der alle ausgibt
Abschnitt betitelt „5. Vier State Bags und ein Befehl, der alle ausgibt“phoneOpen boolean the phone is out and on screenphoneCamera boolean a viewfinder is uponCallWith number | nil the source at the other endflashlight boolean their torch is onDie vollständige Liste samt Details findest du unter Exports und State Bags. Der Konsolenbefehl phoneapi <id> gibt all diese Werte für einen Spieler in der Serverkonsole aus — schneller, als zu raten, wo der Fehler liegt.
Daten in das Telefon einspeisen
Abschnitt betitelt „Daten in das Telefon einspeisen“Eine Benachrichtigung, eine Nachricht, eine E-Mail, eine Rechnung — alles Server-Exports, alles eine Zeile, alles unter Exports und State Bags.
Eine eigenständige App erstellst du über deine eigene App darauf: Ein einziger Aufruf, keine Telefon-Config, kein Neustart, und sie läuft in einem isolierten Frame.
Was es aktuell noch nicht gibt
Abschnitt betitelt „Was es aktuell noch nicht gibt“Es gibt keinen Hook, um das Öffnen des Telefons zu verweigern. Die Regeln liegen in Config.Open.Restrict — tot, gefesselt, schwimmend, fahrend usw. — und eine externe Ressource kann keine eigene Regel anhängen. Wenn du das Öffnen des Telefons während eines Minigames unterbinden musst, sind die gangbaren Wege eine Config-Regel, die zu deinem Zustand passt, oder exports.mic_phone:Close() beim Start deiner Aktion. Melde dich, falls du einen solchen Hook benötigst; er ist schnell ergänzt und bisher hat noch niemand danach gefragt.
Das Ganze als Checkliste
Abschnitt betitelt „Das Ganze als Checkliste“- Zeichnet dein Skript auf dem Bildschirm? → Während
phoneCamerapausieren - Löscht, sammelt oder greift es nahe Objekte? → An Peds befestigte Objekte ignorieren
- Animiert es den Spieler? →
SetPose(false)und anschließendSetPose(true) - Speichert es Daten pro Telefon? → Auf
phoneDeviceindizieren, nicht auf den Charakter - Muss es wissen, ob jemand erreichbar ist? →
phoneOpen,onCallWith