Deaktiviere oder reduziere NPC-Verkehr und Peds in FiveM: Dichte-Natives
Schalte NPCs, Verkehr und geparkte Autos in FiveM aus oder reduziere sie mit den Dichte-Multiplikator-Natives, der Pro-Frame-Regel, Routing-Buckets, Entfernung von Cops und den Kosten jeder Option.
Typische Symptome:
Streets full of NPCs and traffic, low fps in the city, or random police responses nobody asked for.Die Bevölkerung in GTA wird durch eine Reihe von Natives kontrolliert, die du auf dem Client aufrufst. Die Hauptfalle ist, dass die meisten von ihnen jeden Frame zurückgesetzt werden. Dieser Artikel zeigt die Natives, die Schleife, die sie brauchen, die Server-seitige Option und die Kompromisse einer leeren Stadt.
Die eine Regel: jeden Frame
Die Dichte-Multiplikatoren gelten nur für den aktuellen Frame. Rufe sie einmal beim Start auf und sie tun nach einem Moment nichts. Sie müssen in einer Schleife ohne Verzögerung laufen:
CreateThread(function()
while true do
SetVehicleDensityMultiplierThisFrame(0.0)
SetPedDensityMultiplierThisFrame(0.0)
SetRandomVehicleDensityMultiplierThisFrame(0.0)
SetParkedVehicleDensityMultiplierThisFrame(0.0)
SetScenarioPedDensityMultiplierThisFrame(0.0, 0.0)
Wait(0)
end
end)Ein Multiplikator liegt zwischen 0.0 (keine) und 1.0 (der Standard-Betrag). Jeder Native steuert einen anderen Teil:
| Native | Steuert |
|---|---|
SetVehicleDensityMultiplierThisFrame |
Bewegter Verkehr |
SetRandomVehicleDensityMultiplierThisFrame |
Zufällige Fahrzeuge auf den Straßen |
SetParkedVehicleDensityMultiplierThisFrame |
Autos geparkt auf der Straße |
SetPedDensityMultiplierThisFrame |
Wandernde Fußgänger |
SetScenarioPedDensityMultiplierThisFrame |
Peds, die Aktivitäten durchführen (Innenraum, Außenraum) |
SetScenarioPedDensityMultiplierThisFrame nimmt zwei Werte, einen für Innenraum und einen für Außenraum.
Reduziere statt zu entfernen
Eine Stadt ohne jemanden darin sieht kaputt aus und Spieler bemerken es. Verwende einen Wert zwischen 0 und 1, um es auszudünnen:
local traffic = 0.3
local peds = 0.4
CreateThread(function()
while true do
SetVehicleDensityMultiplierThisFrame(traffic)
SetRandomVehicleDensityMultiplierThisFrame(traffic)
SetParkedVehicleDensityMultiplierThisFrame(traffic)
SetPedDensityMultiplierThisFrame(peds)
SetScenarioPedDensityMultiplierThisFrame(peds, peds)
Wait(0)
end
end)Versuche zuerst 0.3 bis 0.5, passe dann für deinen Server an. Lege die Werte in einer Konfigurationsdatei ab, damit du sie ändern kannst, ohne den Code zu berühren.
Server-Seite: Routing-Buckets
Der Server kann die Bevölkerung für einen ganzen Routing-Bucket ausschalten, was für eine Instanz wie einen Innenraum oder ein Ereignis, ohne eine Client-Schleife, nützlich ist:
-- server
SetRoutingBucketPopulationEnabled(bucketId, false)Damit spawnen keine Umgebungs-NPCs oder Verkehr für die Spieler in diesem Bucket. Bucket 0 ist die Standard-Welt. Lass ihn für die Hauptwelt an und deaktiviere ihn für private Instanzen. Siehe Routing-Buckets für wie man Spieler in einen bringt.
Entferne die Cops und den Dispatch
Das Setzen der Dichte auf Null stoppt die Polizei-Reaktion nicht. Wanted-Level und Dispatch laufen auf ihren eigenen Systemen. Um sie zu entfernen, schalte sie eine nach der anderen aus:
CreateThread(function()
SetMaxWantedLevel(0)
SetCreateRandomCops(false)
SetCreateRandomCopsNotOnScenarios(false)
SetCreateRandomCopsOnScenarios(false)
for service = 1, 15 do
EnableDispatchService(service, false)
end
end)
CreateThread(function()
while true do
if GetPlayerWantedLevel(PlayerId()) > 0 then
SetPlayerWantedLevel(PlayerId(), 0, false)
SetPlayerWantedLevelNow(PlayerId(), false)
end
Wait(500)
end
end)EnableDispatchService nimmt einen Service-Index und einen Boolean. Die Schleife über 1 bis 15 deckt die Polizei, den Hubschrauber, die Feuerwehr, den Krankenwagen und andere Services ab, die das Spiel definiert. Die Wanted-Level-Schleife fängt alles auf, das durchschlüpft.
Falls du die Polizei auf deinem Server für Roleplay hältst, deaktiviere die Services nicht für Spieler, die im Dienst sind. Bearbeite diesen Fall in deinem Job-Skript.
Andere Dinge, die du möglicherweise ausschalten möchtest
Die Bevölkerung ist mehr als Peds und Autos. Diese Natives entfernen ein paar andere Quellen, jeder nimmt einen Boolean:
SetGarbageTrucks(false)
SetRandomBoats(false)
SetRandomTrains(false)Rufe sie einmal beim Start auf, sie brauchen keine Pro-Frame-Schleife.
Leistungs-Kompromisse
Was du gewinnst. Jeder Ped und Fahrzeug wird simuliert, gezeichnet und synchronisiert. Das Schneiden reduziert die Kosten des Clients und die Anzahl der Entities im Netzwerk. Auf schwachen PCs kann dies ein großer fps-Unterschied sein. Für andere fps-Reparaturen, siehe niedriges FPS in FiveM.
Was du zahlst. Eine Schleife mit Wait(0) läuft jeden Frame, daher halte sie winzig und lege die Natives in einen einzigen Thread. Eine Schleife von fünf Aufrufen ist billig, aber zehn verschiedene Skripte mit jeweils ihrer eigenen Schleife nicht. Überprüfe, dass dein Server nicht bereits die Dichte setzt und dein Ressourcen-Monitor in resmon.
Die Atmosphäre. Eine Welt ohne NPCs ist leblos. Verkehr zu reduzieren und einige Peds zu behalten ist ein besserer Kompromiss, und geparkte Autos sind billig zu behalten, da sie sich nicht bewegen.
Das Gameplay. Viele Skripte verlassen sich auf Peds oder Autos: ein Drogenverkauf, ein Überfall mit Geisel, ein Heist mit Verkehr. Teste sie mit deinen Dichte-Einstellungen, da ein Job, der einen Passanten braucht, in einer leeren Stadt fehlschlägt.
Häufige Fehler
- Die Multiplikatoren einmal aufrufen. Sie werden jeden Frame zurückgesetzt, verwende eine Schleife.
- Ein langer
Waitin der Schleife. MitWait(1000)wird die Dichte einen Frame pro Sekunde angewendet und die NPCs spawnen in den Lücken. Es mussWait(0)sein. - Zwei Skripte mit verschiedenen Werten. Der letzte Aufruf des Frames gewinnt, daher bekommst du inkonsistente Ergebnisse. Halte eine Quelle.
- Vergesse die geparkte Autos. Verkehr bei Null und geparkte Autos bei Standard lassen immer noch eine Straße voller Autos.
- Erwartet der Server, dass er NPCs entfernt, die er nicht besitzt. Umgebungs-Population ist Client-seitig, abgesehen vom Routing-Bucket-Switch.
Checkliste
| Symptom | Behebung |
|---|---|
| NPCs kommen nach einem Moment zurück | Rufe die Dichte-Natives jeden Frame mit Wait(0) auf |
| Verkehr weg, geparkte Autos bleiben | Füge SetParkedVehicleDensityMultiplierThisFrame hinzu |
| Peds sitzen in Szenarien | Füge SetScenarioPedDensityMultiplierThisFrame(interior, exterior) hinzu |
| Cops zeigen sich immer noch | Wanted-Level 0, EnableDispatchService aus, zufällige Cops aus |
| Brauche keine NPCs in einer Instanz | SetRoutingBucketPopulationEnabled auf dem Server |
| Stadt fühlt sich leer an | Verwende Werte wie 0.3 bis 0.5 statt 0.0 |
| Hohe Resmon-Zeit | Nur eine Schleife, keine doppelten Skripte |
Kurze Antworten
Warum kommen NPCs zurück, nachdem ich die Dichte auf 0 gesetzt habe?
Die Dichte-Natives dauern nur einen Frame an. Wenn du sie einmal aufrufst, geht das Spiel auf dem nächsten Frame zu den Standardwerten zurück, daher müssen sie in einer Schleife aufgerufen werden, die jeden Frame läuft.
Verbessert das Deaktivieren von NPCs die Leistung?
Ja, weniger Peds und Autos bedeutet weniger Arbeit für den Client und mehr fps auf schwachen Maschinen. Es macht die Stadt auch leer wirken, daher reduzieren viele Server die Dichte, statt sie zu entfernen.
Wie entferne ich die Polizei-Reaktion?
Schalte den Dispatch-Dienst mit EnableDispatchService aus, stelle das Wanted-Level auf 0 und stoppe zufällige Cops. Mache alle drei, da jeder einen anderen Teil abdeckt.
Scripts ohne dieses Problem
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →
Quest CreatorEin visueller Editor für Quests und NPC-Dialoge, Node für Node im Spiel gebaut.Script ansehen →
CCTV Security CamerasPlatzierbare Kameras, ein Live-Tablet mit Multi-View und ausgedruckte Beweisfotos.Script ansehen →