So reduzierst du die NPC-Dichte in FiveM: Vollständiger Guide
0.2 Dichte
Sicherer RP-Startwert
Guter Ausgangspunkt für aktive RP-Server mit weniger Desync und noch etwas Straßenleben.
0.0-0.1 Dichte
Fallback bei hoher Spielerzahl
Sinnvoll, wenn die Spieler die Welt bereits selbst bevölkern und KI nur noch stört.
Jeder Frame
Aktualisierungstakt
Die Native-Calls müssen pro Frame gesetzt werden, sonst füllt GTA V die Welt sofort wieder auf.
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 'FiveMX'
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).
Empfohlene Dichte-Presets nach Server-Typ
Der größte Fehler ist, jede Server-Art gleich zu behandeln. Ein ernsthafter City-RP-Server mit 90 aktiven Spielern braucht ein anderes Profil als ein Public-Freeroam- oder Drift-Server.
| Server-Typ | Fahrzeugdichte | Ped-Dichte | Szenario-Peds | Warum |
|---|---|---|---|---|
| Ernsthaftes RP / City-Economy | 0.1-0.2 | 0.1-0.2 | 0.0-0.1 | Weniger Ghost Cars, weniger zufällige KI-Störungen, trotzdem genug Atmosphäre. |
| Public RP / gemischter Server | 0.2-0.4 | 0.2-0.4 | 0.1-0.2 | Die Stadt wirkt nicht leer, wenn weniger Spieler online sind. |
| Drift / Racing | 0.0-0.1 | 0.0 | 0.0 | Maximale Streckenfreiheit und deutlich weniger Kollisionen mit KI. |
| PvP / Arena / Event-Server | 0.0 | 0.0 | 0.0 | Jede unnötige KI-Last wird entfernt. |
| Development / Testing | 0.3-0.5 | 0.3-0.5 | 0.2 | Praktisch, wenn du noch Maps, Pfade oder Abläufe testen willst. |
Wenn du unsicher bist, beginne mit 0.2 und miss dann Resmon, Spielgefühl und Desync unter realer Last.
Beispiel: Dynamische Dichte anhand der Spielerzahl
Mit diesem Muster bleibt die Stadt in ruhigen Phasen lebendig, skaliert aber sauber herunter, sobald viel los ist:
local function getDensityForPlayerCount(playerCount)
if playerCount >= 80 then
return 0.0
end
if playerCount >= 40 then
return 0.2
end
return 0.5
end
Citizen.CreateThread(function()
while true do
Citizen.Wait(5000)
LocalPlayer.state.trafficDensity = getDensityForPlayerCount(#GetActivePlayers())
end
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
local densityMultiplier = LocalPlayer.state.trafficDensity or 0.2
SetVehicleDensityMultiplierThisFrame(densityMultiplier)
SetPedDensityMultiplierThisFrame(densityMultiplier)
SetRandomVehicleDensityMultiplierThisFrame(densityMultiplier)
SetParkedVehicleDensityMultiplierThisFrame(densityMultiplier)
SetScenarioPedDensityMultiplierThisFrame(densityMultiplier, densityMultiplier)
end
end)
Die exakten Schwellenwerte sind zweitrangig. Entscheidend ist das Prinzip: Je mehr echte Spieler deine Welt füllen, desto weniger sollte ambient KI im Weg stehen.
Typische Probleme und schnelle Fixes
Wenn sich die Dichte-Änderung instabil anfühlt, liegt die Ursache meist bei Ressourcenkonflikten:
- Verkehr kommt nach ein paar Sekunden zurück: Ein anderes Skript setzt dieselben Native-Funktionen erneut. Suche im Ressourcen-Ordner nach
SetVehicleDensityMultiplierThisFrame. - Nur ein Teil der KI verschwindet: Oft werden Scenario-Peds oder Parkfahrzeuge vergessen. Reduziere zuerst alle fünf Dichte-Gruppen gemeinsam.
- Polizei spawnt trotzdem: Notfalldienste sind ein separater Bereich. Hier helfen
ClearAreaOfCopsoder angepasste Wanted-Level-Mechaniken. - Die Stadt wirkt zu leer: Erhöhe zuerst geparkte Fahrzeuge und Fußgänger leicht, bevor du den fahrenden Verkehr wieder hochsetzt.
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.
Checkliste vor dem Live-Gang
Bevor du die Änderung produktiv ausrollst, prüfe vier Dinge:
- Resmon bleibt stabil, wenn das Skript mehrere Minuten in einem belebten Gebiet läuft.
- Zwei Spieler im selben Bezirk sehen denselben Straßenstatus statt unterschiedlicher Ghost Vehicles.
- Wichtige Job- oder Missionsskripte funktionieren weiterhin sauber.
- Die Stadt fühlt sich bei geringer Spielerzahl nicht tot an.
Das ist der eigentliche Zielwert: nicht "immer null NPCs", sondern "genug Atmosphäre ohne verschwendetes Sync-Budget".
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.
Frequently Asked Questions
Mit welchem Dichtewert sollte ich auf einem RP-Server starten?
Für die meisten RP-Server ist 0.2 der beste Startwert. Damit entfernst du den Großteil unnötiger KI, ohne die Stadt komplett leer wirken zu lassen.
Kann das Reduzieren der NPC-Dichte ESX- oder QBCore-Ressourcen kaputt machen?
Nein, die Dichte-Anpassung allein bricht keine Framework-Ressourcen. Probleme entstehen meist nur dann, wenn ein anderes Skript dieselben Native-Funktionen mit abweichenden Werten überschreibt.


