Désactiver ou réduire le trafic NPC et les peds dans FiveM : natives de densité

Éteindre ou réduire les NPCs, le trafic et les voitures garées dans FiveM avec les natives du multiplicateur de densité, la règle par frame, les buckets de routage, suppression des flics et le coût de chaque option.

Symptômes typiques :

text
Streets full of NPCs and traffic, low fps in the city, or random police responses nobody asked for.

La population dans GTA est contrôlée par un ensemble de natives que vous appelez sur le client. Le piège principal est que la plupart d'entre elles se réinitialisent chaque frame. Cet article montre les natives, la boucle dont elles ont besoin, l'option du côté serveur, et les compromis d'une ville vide.

La seule règle : chaque frame

Les multiplicateurs de densité s'appliquent à la frame courante seulement. Appelez-les une fois au démarrage et ils ne font rien un moment plus tard. Ils doivent s'exécuter dans une boucle sans délai :

lua
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)

Un multiplicateur est entre 0.0 (aucun) et 1.0 (la quantité par défaut). Chaque native contrôle une partie différente :

Native Contrôle
SetVehicleDensityMultiplierThisFrame Trafic en mouvement
SetRandomVehicleDensityMultiplierThisFrame Véhicules aléatoires sur les routes
SetParkedVehicleDensityMultiplierThisFrame Voitures garées dans la rue
SetPedDensityMultiplierThisFrame Piétons à pied
SetScenarioPedDensityMultiplierThisFrame Peds faisant des activités (intérieur, extérieur)

SetScenarioPedDensityMultiplierThisFrame prend deux valeurs, une pour l'intérieur et une pour l'extérieur.

Réduire au lieu d'éliminer

Une ville sans personne dedans a l'air cassée, et les joueurs le remarquent. Utilisez une valeur entre 0 et 1 pour l'éclaircir :

lua
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)

Essayez 0.3 à 0.5 d'abord, puis ajustez à votre serveur. Mettez les valeurs dans un fichier de configuration pour que vous puissiez les changer sans toucher au code.

Côté serveur : buckets de routage

Le serveur peut éteindre la population pour tout un bucket de routage, ce qui est utile pour une instance comme un intérieur ou un événement, sans une boucle client :

lua
-- server
SetRoutingBucketPopulationEnabled(bucketId, false)

Avec cela, aucun NPC ambiant ou trafic n'apparaît pour les joueurs dans ce bucket. Le bucket 0 c'est le monde par défaut. Laissez-le activé pour le monde principal et désactivez-le pour les instances privées. Voir buckets de routage pour comment mettre les joueurs dans un.

Supprimer les flics et le dispatch

Mettre la densité à zéro n'arrête pas la réponse policière. Les niveaux recherchés et le dispatch fonctionnent sur leurs propres systèmes. Pour les supprimer, éteignez-les un par un :

lua
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 prend un index de service et un booléen. La boucle sur 1 à 15 couvre la police, l'hélicoptère, le feu, l'ambulance et autres services que le jeu définit. La boucle du niveau recherché attrape tout ce qui s'échappe.

Si vous gardez la police sur votre serveur pour le roleplay, ne désactivez pas les services pour les joueurs qui sont en service. Gérez ce cas dans votre script de job.

Autres choses que vous pourriez vouloir éteindre

La population est plus que des peds et voitures. Ces natives suppriment quelques autres sources, chacune prend un booléen :

lua
SetGarbageTrucks(false)
SetRandomBoats(false)
SetRandomTrains(false)

Appelez-les une fois au démarrage, ils n'ont pas besoin d'une boucle par frame.

Compromis de performance

Ce que vous gagnez. Chaque ped et véhicule est simulé, dessiné et synchronisé. Les couper réduit le coût du client et le nombre d'entités dans le réseau. Sur les PC faibles, cela peut être une grande différence fps. Pour d'autres correctifs fps, voir bas fps dans FiveM.

Ce que vous payez. Une boucle avec Wait(0) s'exécute chaque frame, donc gardez-la minuscule et mettez les natives dans un seul fil unique. Une boucle de cinq appels est bon marché, mais dix scripts différents chacun avec sa propre boucle ne l'est pas. Vérifiez que votre serveur n'a pas déjà défini la densité, et votre moniteur de ressources dans resmon.

L'atmosphère. Un monde sans NPCs est sans vie. Réduire le trafic et garder quelques peds est un meilleur compromis, et les voitures garées sont bon marché à garder puisqu'elles ne bougent pas.

Gameplay. Beaucoup de scripts dépendent des peds ou voitures : une vente de drogue, un vol avec otages, un vol avec trafic. Testez-les avec vos paramètres de densité, puisqu'un job qui a besoin d'un passant échouera dans une ville vide.

Erreurs courantes

  • Appeler les multiplicateurs une fois. Ils se réinitialisent chaque frame, utilisez une boucle.
  • Un long Wait dans la boucle. Avec Wait(1000) la densité s'applique une frame par seconde et les NPCs apparaissent dans les lacunes. Cela doit être Wait(0).
  • Deux scripts avec des valeurs différentes. Le dernier appel de la frame gagne, donc vous obtenez des résultats incohérents. Gardez une source.
  • Oublier les voitures garées. Le trafic à zéro et les voitures garées par défaut laisse toujours une rue pleine de voitures.
  • S'attendre à ce que le serveur supprime les NPCs qu'il ne possède pas. La population ambiante est côté client, en dehors du commutateur de bucket de routage.

Checklist

Problème Solution
Les NPCs reviennent après un moment Appelez les natives de densité chaque frame avec Wait(0)
Le trafic disparu, les voitures garées restent Ajoutez SetParkedVehicleDensityMultiplierThisFrame
Les peds s'assoient dans les scénarios Ajoutez SetScenarioPedDensityMultiplierThisFrame(interior, exterior)
Les flics montrent toujours Niveau recherché 0, EnableDispatchService éteint, flics aléatoires éteints
Pas besoin de NPCs dans une instance SetRoutingBucketPopulationEnabled sur le serveur
La ville se sent vide Utilisez des valeurs comme 0.3 à 0.5 au lieu de 0.0
Temps resmon élevé Une seule boucle, pas de scripts en double

Réponses rapides

Pourquoi les NPCs reviennent après que j'ai mis la densité à 0 ?

Les natives de densité durent seulement pour une frame. Si vous les appelez une fois, le jeu revient au défaut sur la frame suivante, donc ils doivent être appelés dans une boucle qui s'exécute chaque frame.

Désactiver les NPCs améliore-t-il la performance ?

Oui, moins de peds et voitures signifie moins de travail pour le client, et plus de fps sur les machines faibles. Cela fait aussi que la ville se sente vide, donc beaucoup de serveurs réduisent la densité au lieu de l'éliminer.

Comment je supprime la réponse de la police ?

Éteignez les services de dispatch avec EnableDispatchService, définissez le niveau recherché à 0 et arrêtez les flics aléatoires. Faites les trois, puisque chacun couvre une partie différente.

Des scripts sans ce problème

Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →Quest CreatorUn éditeur visuel de quêtes et de dialogues PNJ, construit nœud par nœud en jeu.Voir le script →CCTV Security CamerasDes caméras à placer, une tablette multi-vues en direct et des photos imprimées comme preuves.Voir le script →

À lire aussi