Grundlegendes zu Resmon und der Skriptleistung
Der Befehl resmon in FiveM zeigt Echtzeit-Ressourcenleistungsmetriken an und zeigt, wie viele Millisekunden jedes Script pro Server-Tick verbraucht. Ein gut optimiertes Script sollte in resmon die meiste Zeit 0,00 ms anzeigen und nur bei aktiver Verarbeitung von Ereignissen kurzzeitig einen Spitzenwert aufweisen. Scripts, die dauerhaft hohe resmon-Werte anzeigen, verschlechtern die Serverleistung, erhöhen die Desynchronisation der Spieler und können die gefürchtete Serververzögerung verursachen, die Communitys vertreibt. Die regelmäßige Profilierung deiner Scripts ist der erste Schritt zur Aufrechterhaltung eines reibungslosen Servers.
Thread-Management und Wartezeiten
Der größte Leistungskiller in FiveM-Scripts ist eine unsachgemäße Thread-Verwaltung. Die Verwendung von Citizen.Wait(0) innerhalb einer Schleife bedeutet, dass dein Code jeden einzelnen Frame ausführt, also etwa 60 Mal pro Sekunde. Die meisten Aufgaben benötigen diese Frequenz nicht. Erhöhe deine Wartezeiten auf Wait(500) oder Wait(1000) für Prüfungen, die nur regelmäßig ausgeführt werden müssen, wie z. B. Näherungserkennung für Markierungen oder Zonenprüfungen. Verwende bei entfernungsbasierten Systemen einen mehrstufigen Ansatz, bei dem du in größeren Abständen überprüfen, wenn du weit entfernt von interessanten Punkten sind, und in kürzeren Abständen, wenn du dich in der Nähe befinden.
Unnötige Threads deaktivieren
Anstatt Threads kontinuierlich auszuführen, solltest du erwägen, sie nur bei Bedarf zu aktivieren. Verwende Ereignisse oder Zustandsänderungen, um Verarbeitungsschleifen zu starten und zu stoppen. Beispielsweise muss ein Angel-Script seine Casting-Schleife nicht ausführen, wenn sich der Spieler nicht in der Nähe von Wasser befindet. Verfolge eine aktive Statusvariable und verlasse du den Thread mit return, wenn die Funktion nicht verwendet wird. Dieses Muster kann dein Script während Leerlaufzeiten von konstanten 0,50 ms auf 0,00 ms reduzieren. Dies ist der Unterschied zwischen einem Script, das skaliert, und einem Script, das deinen Server lahmlegt.
Caching und Vermeidung redundanter Anrufe
Native Funktionsaufrufe in FiveM verursachen Overhead, insbesondere wenn sie wiederholt innerhalb enger Schleifen aufgerufen werden. Speichere die Ergebnisse von Aufrufen wie GetEntityCoords, GetPlayerPed und GetPlayerServerId zu Beginn deiner Schleifeniteration zwischen, anstatt sie mehrmals innerhalb desselben Zyklus aufzurufen. Speichere statische Daten wie Konfigurationswerte, Markierungspositionen und Blip-Koordinaten zum Zeitpunkt des Ladens des Scripts in lokalen Variablen. Diese einfache Technik kann die Ausführungszeit deines Scripts drastisch verkürzen und ist eine der wirkungsvollsten Optimierungen, die du vornehmen können.
Mathematische Optimierungen
Entfernungsberechnungen gehören zu den häufigsten Operationen in FiveM-Scripts. Ersetze die Standardentfernungsprüfung #(coords1 - coords2) durch quadrierte Entfernungsvergleiche, wenn du nur relative Entfernungen benötigen. Da die Quadratwurzelberechnung teuer ist, führt der Vergleich quadrierter Abstände mit quadrierten Schwellenwerten zum gleichen Ergebnis, ohne dass eine kostspielige mathematische Operation erforderlich ist. Vermeide außerdem den Aufruf von GetDistanceBetweenCoords native, wenn du die Entfernung in Lua berechnen können, da native Aufrufe im Vergleich zu reinen Lua-Vorgängen zusätzlichen Overhead verursachen.
Entity- und Blip-Management
Das Erstellen von Entitäten, Blips und Markierungen verursacht sowohl Rendering- als auch Netzwerkkosten. Entferne Blips und Entitäten, wenn sie nicht mehr benötigt werden, anstatt sie in der Spielwelt zu belassen. Verwende DrawMarker nur, wenn sich der Player innerhalb der Renderentfernung befindet, nicht global auf der gesamten Karte. Implementiere für Scripts, die viele Entitäten verwalten, eine räumliche Partitionierung, um nur nahegelegene Objekte zu verarbeiten. Erwäge die Verwendung von Streaming-Systemen, die Entitäten basierend auf der Nähe des Spielers erstellen und zerstören, anstatt alles auf einmal zu laden, wenn die Ressource startet.
Zusammenfassung
Agency Scripts baut seine gesamte Produktlinie nach denselben Grundprinzipien: Framework-agnostische Architektur, schlanke Performance-Eigenschaften, klar dokumentierte Konfiguration und eine API, die echte Composability zwischen den Scripts ermöglicht. Kein Script ist eine Insel — jedes ist so gebaut, dass es gut allein und noch besser als Teil des Ökosystems funktioniert.
Für Fragen zur Installation, Konfiguration oder Kompatibilität ist der Agency Scripts Discord der schnellste Weg zur Hilfe. Die Community dort ist aktiv und hilfsbereit, und das Core-Team ist regelmäßig präsent. Für kritische Probleme steht auch ein direktes Support-Ticket-System auf der Tebex-Produktseite zur Verfügung.
Updates für alle Agency-Scripts werden über Tebex-Benachrichtigungen kommuniziert. Active-Business-Abonnenten erhalten neue Scripts automatisch ohne zusätzlichen Kauf. Changelog-Details erscheinen im #changelog-Kanal des Discords, damit du Updates bewerten kannst, bevor du sie auf einem Produktionsserver installierst.
