Desactivar o reducir el tráfico de NPC y peds en FiveM: natives de densidad
Apaga o reduce NPCs, tráfico y coches aparcados en FiveM con los natives multiplicadores de densidad, la regla por fotograma, buckets de enrutamiento, eliminar policía y el costo de cada opción.
Síntomas típicos:
Streets full of NPCs and traffic, low fps in the city, or random police responses nobody asked for.La población en GTA se controla con un conjunto de natives que llamas en el cliente. La trampa principal es que la mayoría de ellos se reinician cada fotograma. Este artículo muestra los natives, el bucle que necesitan, la opción del lado del servidor, y los compromisos de una ciudad vacía.
La única regla: cada fotograma
Los multiplicadores de densidad se aplican a el fotograma actual solamente. Llámalos una vez al inicio y no hacen nada un momento después. Deben ejecutarse en un bucle sin demora:
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 multiplicador está entre 0.0 (ninguno) y 1.0 (la cantidad predeterminada). Cada native controla una parte diferente:
| Native | Controla |
|---|---|
SetVehicleDensityMultiplierThisFrame |
Tráfico en movimiento |
SetRandomVehicleDensityMultiplierThisFrame |
Vehículos aleatorios en las carreteras |
SetParkedVehicleDensityMultiplierThisFrame |
Coches aparcados en la calle |
SetPedDensityMultiplierThisFrame |
Peatones caminando |
SetScenarioPedDensityMultiplierThisFrame |
Peds haciendo actividades (interior, exterior) |
SetScenarioPedDensityMultiplierThisFrame toma dos valores, uno para el interior y otro para el exterior.
Reduce en lugar de eliminar
Una ciudad sin nadie se ve rota, y los jugadores lo notan. Usa un valor entre 0 y 1 para adelgazarla:
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)Prueba primero 0.3 a 0.5, luego ajusta a tu servidor. Pon los valores en un fichero de configuración para poder cambiarlos sin tocar el código.
Del lado del servidor: buckets de enrutamiento
El servidor puede desactivar la población para un bucket de enrutamiento completo, que es útil para una instancia como un interior o un evento, sin un bucle de cliente:
-- server
SetRoutingBucketPopulationEnabled(bucketId, false)Con esto, no hay NPCs ambientes o tráfico que aparezcan para los jugadores en ese bucket. El bucket 0 es el mundo predeterminado. Déjalo encendido para el mundo principal y desactívalo para instancias privadas. Ver routing buckets para cómo poner jugadores en uno.
Elimina la policía y el despacho
Establecer la densidad a cero no detiene la respuesta de la policía. Los niveles deseados y el despacho funcionan en sus propios sistemas. Para eliminarlos, apágalos uno por uno:
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 toma un índice de servicio y un booleano. El bucle sobre 1 a 15 cubre la policía, helicóptero, bomberos, ambulancia y otros servicios que define el juego. El bucle de nivel deseado atrapa cualquier cosa que se escape.
Si mantienes la policía en tu servidor para roleplay, no desactives los servicios para jugadores que estén en servicio. Maneja ese caso en tu script de trabajo.
Otras cosas que podrías querer apagadas
La población es más que peds y coches. Estos natives eliminan algunas otras fuentes, cada uno toma un booleano:
SetGarbageTrucks(false)
SetRandomBoats(false)
SetRandomTrains(false)Llámalos una vez al inicio, no necesitan un bucle por fotograma.
Compromisos de rendimiento
Lo que ganas. Cada ped y vehículo se simula, se dibuja y se sincroniza. Cortarlos reduce el costo del cliente y el número de entidades en la red. En PCs débiles esto puede ser una gran diferencia de fps. Para otras correcciones de fps, ver low FPS in FiveM.
Lo que pagas. Un bucle con Wait(0) se ejecuta cada fotograma, así que mantenlo diminuto y pon los natives en un único hilo. Un bucle de cinco llamadas es barato, pero diez scripts diferentes cada uno con su propio bucle no. Comprueba que tu servidor ya no establezca la densidad, y tu monitor de recursos en resmon.
La atmósfera. Un mundo sin NPCs es sin vida. Reducir el tráfico y mantener algunos peds es un mejor término medio, y los coches aparcados son baratos de mantener ya que no se mueven.
El juego. Muchos scripts dependen de peds o coches: una venta de drogas, un robo con rehenes, un asalto con tráfico. Pruébalos con tu configuración de densidad, ya que un trabajo que necesita un transeúnte fallará en una ciudad vacía.
Errores comunes
- Llamar a los multiplicadores una vez. Se reinician cada fotograma, usa un bucle.
- Una
Waitlarga en el bucle. ConWait(1000)la densidad se aplica un fotograma por segundo y los NPCs aparecen en los espacios. Debe serWait(0). - Dos scripts con valores diferentes. La última llamada del fotograma gana, así que obtienes resultados inconsistentes. Mantén una fuente.
- Olvidar los coches aparcados. Tráfico a cero y coches aparcados al predeterminado aún deja una calle llena de coches.
- Esperar que el servidor elimine NPCs que no posee. La población ambiental es del lado del cliente, aparte del cambio del bucket de enrutamiento.
Lista de verificación
| Síntoma | Solución |
|---|---|
| Los NPCs vuelven después de un momento | Llama a los natives de densidad cada fotograma con Wait(0) |
| Tráfico desaparecido, coches aparcados permanecen | Añade SetParkedVehicleDensityMultiplierThisFrame |
| Los peds se sientan en escenarios | Añade SetScenarioPedDensityMultiplierThisFrame(interior, exterior) |
| La policía aún se muestra | Nivel deseado 0, EnableDispatchService apagado, policías aleatorios apagados |
| Sin NPCs en una instancia | SetRoutingBucketPopulationEnabled en el servidor |
| La ciudad se siente vacía | Usa valores como 0.3 a 0.5 en lugar de 0.0 |
| Tiempo de resmon alto | Solo un bucle, ningún script duplicado |
Respuestas rápidas
¿Por qué los NPCs vuelven después de que establezco la densidad a 0?
Los natives de densidad solo duran un fotograma. Si los llamas una vez, el juego vuelve al predeterminado en el siguiente fotograma, así que deben llamarse en un bucle que se ejecuta cada fotograma.
¿Desactivar NPCs mejora el rendimiento?
Sí, menos peds y coches significa menos trabajo para el cliente, y más fps en máquinas débiles. También hace que la ciudad se sienta vacía, así que muchos servidores reducen la densidad en lugar de eliminarla.
¿Cómo elimino la respuesta de la policía?
Desactiva los servicios de despacho con EnableDispatchService, establece el nivel deseado a 0 y detén a los policías aleatorios. Haz los tres, ya que cada uno cubre una parte diferente.
Scripts que evitan este problema
Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →
Quest CreatorUn editor visual de misiones y diálogos con NPC, nodo a nodo dentro del juego.Ver script →
CCTV Security CamerasCámaras colocables, una tablet con vista múltiple en vivo y fotos como prueba.Ver script →