So reduzierst du die NPC-Dichte in FiveM: Vollständiger Guide
Lerne, wie du die FiveM-Server-Performance optimierst, indem du die NPC- und Verkehrsdichte mit nativen Lua-Skripten reduzierst oder vollständig deaktivierst.

Grand Theft Auto V wurde als Einzelspieler-Spiel konzipiert, bevölkert von Tausenden KI-gesteuerten Fußgängern und Fahrzeugen. Während dies im Story-Modus eine lebhafte, lebendige Welt schafft, kann es in einer Multiplayer-FiveM-Umgebung zu schwerwiegenden Performance- und Synchronisationsproblemen führen.
Ob du einen Roleplay-Server mit 100+ Spielern oder einen Hochgeschwindigkeits-Rennserver betreibst, zu lernen, wie man die NPC-Dichte reduziert oder vollständig eliminiert, ist ein entscheidender Schritt bei der Optimierung deiner FiveM-Server-Performance.
Warum solltest du die NPC-Dichte reduzieren?
Bevor du in den Code eintauchst, solltest du verstehen, warum fast jeder große Server die Standard-KI-Dichte verändert.
Server- und Client-Performance
Jeder NPC (Non-Player Character) benötigt CPU-Leistung für die Berechnung von Wegfindung, KI-Verhalten und Physik. Wenn du das mit 50+ Spielern multiplizierst, die über Los Santos verteilt sind, kämpfen Server und Spieler-Clients darum, Schritt zu halten. Die Reduzierung der NPC-Dichte ist einer der schnellsten Wege, um FPS in FiveM zu steigern.
Desync und "Geisterwagen"
Wenn du jemals mit 150 km/h auf der Autobahn gefahren bist und gegen ein unsichtbares Auto geprallt bist, hast du Desync erlebt. Hohe NPC-Fahrzeugdichte überwältigt den Netzwerkzustand, was bedeutet, dass Spieler A ein Auto sieht, das Spieler B nicht sieht. Weniger KI bedeutet weniger zu synchronisierende Daten.
Roleplay-Immersion
In ernsthaften RP-Umgebungen, die von FiveM-Frameworks betrieben werden, verlassen sich Spieler darauf, die Welt zu bevölkern. Wenn zufällige KI in aktive Geiselverhandlungen läuft oder KI-Autos in angehaltene Fahrzeuge rammen, bricht das die Immersion sofort.
Die Lösung: Lua-Native-Funktionen
Um die NPC-Dichte zu kontrollieren, verwenden wir spezifische native Funktionen von Cfx.re. Da diese Funktionen jeden einzelnen Spielframe ausgeführt werden müssen, um die Basis-Engine des Spiels zu überschreiben, werden sie in einer clientseitigen Citizen.CreateThread-Schleife platziert.
Die wichtigsten Dichte-Funktionen
Es gibt fünf primäre Natives, die du kennen musst:
SetVehicleDensityMultiplierThisFrame(multiplier)- Steuert den fahrenden Verkehr.SetPedDensityMultiplierThisFrame(multiplier)- Steuert laufende Fußgänger.SetRandomVehicleDensityMultiplierThisFrame(multiplier)- Steuert geparkte/zufällige Autos.SetParkedVehicleDensityMultiplierThisFrame(multiplier)- Steuert statisch geparkte Autos auf Parkplätzen.SetScenarioPedDensityMultiplierThisFrame(multiplier, multiplier)- Steuert NPCs bei Aktivitäten (Rauchen, Kaffeetrinken, Sitzen).
Der multiplier ist ein Float-Wert zwischen 0.0 (vollständig deaktiviert) und 1.0 (Standard-GTA-V-Dichte).
So erstellst du das Dichte-Kontroll-Skript
Wir erstellen eine leichtgewichtige, eigenständige Ressource, um dies zu handhaben, damit es nicht mit deinen anderen Skripten interferiert.
Schritt 1: Die Ordnerstruktur erstellen
- Navigiere zum
resources-Ordner deines Servers. - Erstelle einen neuen Ordner namens
traffic_control. - Erstelle innerhalb von
traffic_controlzwei Dateien:fxmanifest.luaundclient.lua.
Schritt 2: Die fxmanifest.lua konfigurieren
Öffne fxmanifest.lua und definiere die Ressource. Dies weist FiveM an, dein Client-Skript zu laden.
fx_version 'cerulean'
game 'gta5'
author 'VertexMods'
description 'Steuert NPC- und Verkehrsdichte'
version '1.0.0'
client_script 'client.lua'
Schritt 3: Das Client-Skript schreiben (client.lua)
Öffne client.lua und füge folgenden Code ein. Dieses Beispiel reduziert den gesamten Verkehr und alle Fußgänger auf 20% ihres normalen Volumens, was der "Sweet Spot" für aktive RP-Server ist.
-- Gewünschten Dichte-Multiplikator setzen (0.0 bis 1.0)
local densityMultiplier = 0.2
Citizen.CreateThread(function()
while true do
Citizen.Wait(0) -- Muss jeden Frame ausgeführt werden
-- Multiplikatoren anwenden
SetVehicleDensityMultiplierThisFrame(densityMultiplier)
SetPedDensityMultiplierThisFrame(densityMultiplier)
SetRandomVehicleDensityMultiplierThisFrame(densityMultiplier)
SetParkedVehicleDensityMultiplierThisFrame(densityMultiplier)
SetScenarioPedDensityMultiplierThisFrame(densityMultiplier, densityMultiplier)
-- Optional: KI-Notfalldienste deaktivieren
-- Dies verhindert, dass KI-Cops/Sanitäter auf Spielerverbrechen reagieren
local playerPed = GetPlayerPed(-1)
local pos = GetEntityCoords(playerPed)
ClearAreaOfCops(pos.x, pos.y, pos.z, 400.0)
end
end)
Vollständige Auslöschung (Null NPCs)
Wenn du einen Drift-Server oder eine reine PvP-Arena betreibst, möchtest du wahrscheinlich null KI. Ändere einfach local densityMultiplier = 0.2 auf 0.0.
Du möchtest möglicherweise auch eine Garbage-Bereinigung hinzufügen, um defekte KI-Fahrzeuge zu entfernen:
-- Innerhalb der while-Schleife hinzufügen, wenn multiplier 0.0 ist
SetGarbageTrucks(false)
SetRandomBoats(false)
Fortgeschrittener Tipp: Dynamische Dichte
Das Ausführen eines Zero-Wait-Threads (Citizen.Wait(0)) ist Standard für diese Frame-basierten Natives, aber wenn du noch weiter optimieren möchtest, kannst du die Dichte basierend auf der aktuellen Spieleranzahl anpassen.
Viele fortgeschrittene Server verwenden serverseitige Callbacks, um zu prüfen, wie viele Spieler online sind:
- 0–30 Spieler:
0.8Dichte (Stadt lebendig fühlen lassen, wenn es ruhig ist). - 30–80 Spieler:
0.4Dichte (Performance ausbalancieren). - 80+ Spieler:
0.0Dichte (Spieler bevölkern die Stadt vollständig, maximale Performance).
Integration mit anderen Ressourcen
Stelle sicher, dass dein neues traffic_control-Skript zu deiner server.cfg hinzugefügt wird:
ensure traffic_control
Wenn du robuste Frameworks wie QBCore oder ESX verwendest, stelle sicher, dass dieses Skript nach dem Framework startet, um zu verhindern, dass Basis-Ressourcen deine nativen Aufrufe überschreiben.
Fazit
Die Reduzierung der NPC-Dichte ist die einfachste, effektivste Modifikation, die du vornehmen kannst, um die Server-Stabilität und die Trefferregistrierung zu verbessern. Ob du sie zur Verbesserung der Performance reduzierst oder für wettbewerbsfähiges Gameplay vollständig abschaltest, ein paar Zeilen Lua-Code werden das Spielerlebnis drastisch verbessern.
Möchtest du weiter optimieren? Schau dir unsere Guides zur ordentlichen Datenmigration von MySQL Async zu OxMySQL an oder erkunde hochperformante FiveM-Skripte, die mit Optimierung im Sinn entwickelt wurden.


