Zum Inhalt springen

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.


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 wants

phoneCamera 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.

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 end

Falls 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 back

Das 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 screen
phoneCamera boolean a viewfinder is up
onCallWith number | nil the source at the other end
flashlight boolean their torch is on

Die 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.


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.

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.


  • Zeichnet dein Skript auf dem Bildschirm? → Während phoneCamera pausieren
  • Löscht, sammelt oder greift es nahe Objekte? → An Peds befestigte Objekte ignorieren
  • Animiert es den Spieler? → SetPose(false) und anschließend SetPose(true)
  • Speichert es Daten pro Telefon? → Auf phoneDevice indizieren, nicht auf den Charakter
  • Muss es wissen, ob jemand erreichbar ist? → phoneOpen, onCallWith