Die Architektur von Parksystemen verstehen
Ein Parksystem verleiht jedem FiveM-Roleplay-Server Tiefe und Realismus, indem es den Spielern bestimmte Bereiche zum Abstellen ihrer Fahrzeuge bietet, mit Konsequenzen für die Missachtung der Regeln. Auf seiner Grundlage verfolgt ein Parksystem, welche Parkplätze belegt sind, überwacht, wie lange Fahrzeuge geparkt sind, und wickelt die Bezahlung über Zähler oder Genehmigungen ab. Das System besteht aus einer serverseitigen Logik zur Statusverfolgung und Zahlungsabwicklung, einer clientseitigen Erkennung für die Parkzoneneinfahrt und -ausfahrt sowie einer optionalen NUI-Schnittstelle zur Anzeige des Zählerstatus und der Zahlungsoptionen. Ein gut implementiertes Parksystem lässt sich auch in deine bestehenden Polizei- und Abschlepp-Scripts integrieren, sodass illegal geparkte Fahrzeuge von autorisierten Spielern mit Strafzetteln belegt oder beschlagnahmt werden können.
Definieren von Parkzonen und -plätzen
Parkzonen werden als vieleckige oder kastenförmige Bereiche auf der Karte definiert, die jeweils einzelne Parkplätze mit bestimmten Koordinaten und Richtungen enthalten. Verwende eine Konfigurationsdatei, um diese Zonen zu definieren, damit Serveradministratoren neue Parkbereiche hinzufügen können, ohne den Code zu ändern. Für jede Zone können unterschiedliche Regeln gelten, z. B. kostenloses Parken, gebührenpflichtiges Parken oder Bereiche, in denen nur eine Genehmigung erteilt werden darf. Hier ist eine praktische Zonenkonfigurationsstruktur:
Das vector4-Format speichert x-, y- und z-Koordinaten zusammen mit dem Richtungswinkel und stellt so sicher, dass Fahrzeuge in der richtigen Richtung geparkt werden. Das Flag besetzt wird zur Laufzeit vom Server verwaltet und zwischen Neustarts nicht gespeichert, da Fahrzeuge separat über die Werkstattsystemdatenbank verfolgt werden. Halte die Anzahl der Spots für jeden Standort realistisch, da zu viele Spots auf kleinem Raum zu Problemen beim Überschneiden von Fahrzeugen führen.
Parkuhr-Timer-System
Das Zählersystem erfasst, wie lange jedes Fahrzeug geparkt ist, und berechnet entsprechend. Wenn ein Spieler in einer gebührenpflichtigen Zone parkt, interagiert er mit einem Zähler, um seine Sitzung zu starten, indem er eine Dauer auswählt und im Voraus bezahlt. Der Server speichert die Startzeit der Sitzung, die bezahlte Dauer, das Kennzeichen und die Zonen-ID. Ein serverseitiger Timer-Thread überprüft regelmäßig alle aktiven Zählersitzungen und markiert abgelaufene Sitzungen zur Durchsetzung. Hier ist die Kernlogik des Zählers:
Die Timer-Auflösung von 60 Sekunden reicht für die Parküberwachung aus, ohne unnötige CPU-Belastung zu verursachen. Speichere Zählersitzungen im Speicher und nicht in der Datenbank, da sie temporär sind und Serverneustarts nicht überleben müssen. Beim Neustart des Servers werden alle Zähler zurückgesetzt, was akzeptabel ist, da die Fahrzeuge in den meisten Frameworks beim Neustart auch zu den Werkstätten zurückkehren.
Fahrzeugerkennung und Spotzuweisung
Um zu erkennen, wann ein Fahrzeug in eine Parklücke einfährt oder diese verlässt, sind regelmäßige Annäherungsprüfungen auf Kundenseite erforderlich. Verwende eine entfernungsbasierte Prüfung aller Punkte in nahegelegenen Zonen, anstatt jeden Punkt auf der gesamten Karte zu überprüfen. Führe die Erkennungsschleife nur aus, wenn sich der Spieler in einem Fahrzeug und in der Nähe einer konfigurierten Parkzone befindet. Dadurch bleibt die CPU-Auslastung während des normalen Spiels minimal:
Die Geschwindigkeitsprüfung von 0,5 stellt sicher, dass die Parkaufforderung nur erscheint, wenn das Fahrzeug fast stillsteht, und verhindert so ein Flackern der Benutzeroberfläche, wenn der Spieler viel durchfährt. Das adaptive Schlafintervall von 200 ms in der Nähe von Zonen im Vergleich zu 1000 ms anderswo sorgt für ein Gleichgewicht zwischen Reaktionsfähigkeit und Leistung. Erwäge bei Servern mit vielen Parkzonen die Verwendung eines räumlichen Hashs oder Quadtrees, um zu vermeiden, dass bei jedem Tick jede Zone durchlaufen wird.
Parkstrafen- und Durchsetzungssystem
Wenn ein Zähler abläuft oder ein Fahrzeug illegal geparkt wird, verhängt das System ein Bußgeld, das an den Fahrzeughalter gebunden ist. Bußgelder werden in einer Datenbanktabelle gespeichert und angezeigt, wenn sich der Besitzer das nächste Mal anmeldet oder sein Fahrzeug abholt. Polizeispieler können mithilfe eines Befehls oder einer Zielinteraktion auch manuell Strafzettel ausstellen. Der Bußgeldsatz umfasst das Kennzeichen, den Betrag, den Ausstellungsgrund und den Zeitstempel:
Integriere das Bußgeldsystem in deinen Fahrzeugrückholprozess, sodass Spieler ausstehende Bußgelder bezahlen müssen, bevor sie ein Fahrzeug aus der Garage holen. Dadurch entsteht eine natürliche Durchsetzungsschleife, in der das Ignorieren der Parkregeln echte Konsequenzen im Spiel hat. Erwäge die Einführung einer Schonfrist von fünf bis zehn Minuten nach Ablauf des Parkautomaten, bevor ein Bußgeld verhängt wird, da dies die tatsächliche Parkkontrolle widerspiegelt und die Frustration der Spieler über perfekt getimte Bußgelder verringert.
NUI Messgerät-Anzeige und Zahlungsschnittstelle
Der Parkautomat NUI sollte sauber und informativ sein und den aktuellen Zonennamen, den Tarif pro Stunde, die verbleibende Zeit, falls bereits bezahlt, sowie Tasten zur Auswahl der Dauer und zur Durchführung der Zahlung anzeigen. Zeige einen Countdown-Timer an, der jede Sekunde aktualisiert wird, wenn ein Zähler aktiv ist, damit der Spieler genau weiß, wie viel Zeit ihm noch bleibt. Verwende ein kompaktes Design, das die Sicht auf das Spiel nicht behindert, ähnlich einem echten Parkuhrenbildschirm. Animiere die Timer-Anzeige mit einem Farbübergang von Grün über Gelb zu Rot, wenn die Zeit abläuft, und gibst du so einen intuitiven visuellen Hinweis, ohne dass der Spieler die genauen verbleibenden Minuten ablesen muss. Halte den NUI leicht, indem du Vanilla JavaScript und minimal CSS verwenden und schwere Frameworks vermeiden, die die Ladezeit für eine einfache Schnittstelle verlängern.
Abschleppintegration und verlassene Fahrzeuge
Verbinde dein Parksystem mit einem Abschleppmechaniker, damit abgelaufene oder illegal geparkte Fahrzeuge zum beschlagnahmten Parkplatz abgeschleppt werden können. Wenn bei einem Fahrzeug länger als der konfigurierte Schwellenwert ein Verstoß vorliegt, markiere es im Serverstatus als abschleppbar. Abschleppwagen-Job-Spieler können diese Fahrzeuge dann auf ihrer Karte hervorgehoben sehen und eine Bezahlung für das Abschleppen erhalten. Der Abschleppvorgang sollte den Fahrzeugstatus in der Datenbank von „aus“ auf „beschlagnahmt“ aktualisieren und den Beschlagnahmegrund als Parkverstoß erfassen. Implementiere für verlassene Fahrzeuge, die längere Zeit ohne Spielerinteraktion an Plätzen gestanden haben, eine automatische Reinigungsroutine, die sie nach einer konfigurierbaren Zeitspanne zur Beschlagnahmung bewegt und so Plätze für aktive Spieler freigibt. Dadurch wird verhindert, dass sich die Parkplätze mit Fahrzeugen von Spielern füllen, die sich seit Tagen oder Wochen nicht angemeldet haben.
Überlegungen zur Leistung und Skalierbarkeit
Parksysteme laufen in kontinuierlichen Erkennungsschleifen, die sich auf die Leistung auswirken können, wenn sie nicht sorgfältig optimiert werden. Die clientseitige Fahrzeugerkennung sollte nur für Zonen innerhalb der Renderentfernung aktiviert werden, und der serverseitige Meter-Check-Thread sollte alle aktiven Sitzungen stapelweise verarbeiten, anstatt individuelle Timer pro Fahrzeug zu erstellen. Indiziere die Datenbanktabelle für Parkstrafen sowohl in der Kennzeichen- als auch in der Bürger-ID-Spalte, um eine schnelle Suche zu gewährleisten, wenn Spieler Fahrzeuge abrufen oder wenn Administratoren den Bußgeldverlauf abfragen. Bei Servern mit Dutzenden von Parkzonen und Hunderten von gleichzeitigen Fahrzeugen solltest du erwägen, Zonendaten in einer Lua-Tabelle zwischenzuspeichern, anstatt sie bei jeder Prüfung aus der Konfiguration zu lesen, und verwendest du die native Funktion GetClosestVehicle sparsam, da sie alle Fahrzeuge in Reichweite scannt. Profiliere deine Parkressource mit dem in FiveM integrierten Profiler unter Spitzenlast, um etwaige Hotspots zu identifizieren. Denk daran, dass ein Parksystem weniger als 0,1 ms Server-Tick-Zeit benötigen sollte, um eine Beeinträchtigung der gesamten Serverleistung zu vermeiden.

