Zum Inhalt springen

Netzabdeckung

Wie viele Balken ein Telefon hat und was passiert, wenn es keine hat.

Standardmäßig ausgeschaltet. Eine Stadt, die keine Netzabdeckung eingerichtet hat, behält das gewohnte Verhalten — überall voller Empfang, nichts abgelehnt, nichts gemessen:

-- shared/config/signal.lua
Enabled = false, -- turn it on when you want bars that come from where the player is standing

Wenn du es einschaltest und sonst nichts änderst, passiert immer noch kaum etwas: Ohne Funkmasten und Funklöcher hat die Karte lückenlosen Empfang, und der einzige Unterschied ist eine Empfangsanzeige, die endlich die Wahrheit sagt. Füge eine der Zeilen unten hinzu, und das System erhält eine echte Funktion.

Alles wird auf dem Server entschieden, basierend auf dem tatsächlichen Standort des Spielers. Ein Client, der sein eigenes Signal bestimmt, ist ein Client ohne Balken, wenn ihn jemand anruft, und mit vier Balken, sobald er selbst jemanden anrufen möchte.


Dasselbe wie der Flugmodus, denn es ist derselbe Umstand aus der Gegenrichtung: Die Stadt kann dieses Telefon nicht erreichen.

  • Eingehende und ausgehende Anrufe werden abgelehnt, und das Telefon meldet Du hast hier keinen Empfang statt nicht erreichbar.
  • Nachrichten werden nicht gesendet, und an diesen Spieler gesendete Nachrichten werden zwischengespeichert.
  • Alles, was die Stadt zuzustellen versuchte, wird in dem Moment übergeben, in dem der Empfang zurückkehrt — nichts geht verloren, es wartet nur ab.
  • Das Telefon an sich funktioniert weiter: Kamera, Notizen, Taschenlampe und bereits gespeicherte Fotos.

Die Statusleiste zeichnet die vorhandenen Balken, und bei null Empfang steht dort Kein Dienst.


-- shared/config/signal.lua
City = {
Centre = vector3(195.0, -890.0, 30.0), -- Legion Square, near enough
Full = 3000.0, -- full signal within this
None = 9000.0, -- nothing at all past this
},

Voller Empfang in der Stadt, und die Balken sinken stufenweise ab, je weiter man sich entfernt. Gemessen auf einem Live-Server mit obigen Standardwerten:

OrtBalken
Legion Square4
Sandy Shores3
Paleto Bay1

Setze City = false, um dieses Verhalten zu deaktivieren und ausschließlich Funkmasten zu nutzen.

Funkmasten, für Städte mit greifbarer Infrastruktur

Abschnitt betitelt „Funkmasten, für Städte mit greifbarer Infrastruktur“
Range = 900.0, -- full signal this close to a mast
Fade = 1400.0, -- and nothing this much further out
Masts = {
vector3(-75.0, -818.0, 326.0), -- the tower on Maze Bank
vector3(2358.0, 2570.0, 46.0), -- the masts above Sandy Shores
},

Sobald diese Liste Einträge enthält, stammen die Balken vom nächstgelegenen Funkmasten und City wird ignoriert. Ein gesprengter Mast bedeutet ein Viertel ohne Telefonnetz, bis er repariert wird — genau das Richtige für Städte, die daraus RP machen wollen.

Dead = {
{ Coords = vector3(895.0, -3245.0, -98.0), Radius = 120.0, Bars = 0 }, -- the labs
{ Coords = vector3(480.0, -1310.0, 29.0), Radius = 40.0, Bars = 1 }, -- the chop shop
},

Ein Funkloch überschreibt die Angaben der Masten, und bei Überlappungen gewinnt der kleinere Wert: Ein Bunker in einem Tal hat nicht mehr Empfang, nur weil er in beiden Zonen liegt. Bars = 0 bedeutet kein Netz; jeder andere Wert simuliert einen Keller, der noch einen Balken empfängt.

Eine Kugel, weil sich der Mittelpunkt einer Kugel mit einem einzigen Befehl bestimmen lässt.


exports.mic_phone:GetSignal(src) --> 0 to Config.Signal.Bars
exports.mic_phone:SetJammed(src, true) --> takes their bars away until you give them back

Beide Aufrufe funktionieren auch bei deaktivierter Netzabdeckung. GetSignal liefert die volle Balkenanzahl, sodass ein Skript den Wert abfragen kann, ohne vorher prüfen zu müssen, ob das Feature aktiv ist — und das Jammen entzieht Spielern verlässlich den Empfang; ein Raubüberfall oder ein Gefängnis, das ein Gebäude ohne Telefone benötigt, muss nicht erst das gesamte Signal-System konfigurieren. Das ist der einzige Fall, in dem ein Telefon bei einer Standardinstallation sein Signal verlieren kann, und zwar weil eine andere Ressource dies angefordert hat.

Jamming ist bewusst serverseitig: Ein State Bag, den der Client schreiben könnte, könnte er auch zurücksetzen. Genau das nutzt ein Überfall, ein Gefängnis oder eine Quest: Jamme alle Personen im Gebäude und gib den Empfang wieder frei, wenn es vorbei ist.

Das Auslesen über den State Bag verursacht keinerlei Performance-Kosten:

if (Player(src).state.phoneSignal or 4) == 0 then
-- nobody is calling the police from in here
end
  • Sämtliche Zeitintervalle spielen erst eine Rolle, wenn Enabled = true gesetzt ist; im deaktivierten Zustand wird rein gar nichts gemessen.
  • Die Berechnung erfolgt alle Config.Signal.Tick Sekunden (standardmäßig fünf). Es ist ein simpler Distanzabgleich gegen eine kurze Liste, den niemand auf die Sekunde genau benötigt.
  • Config.Signal.Tell bestimmt, ob das Telefon eine kurze Meldung ausgibt, wenn das Netz abbricht und wenn es zurückkehrt. Beides ist standardmäßig aktiv: Signalverlust erfordert eine Erklärung, und die Rückkehr des Netzes ist der Moment, in dem alle wartenden Nachrichten eintreffen.