Wyłącz lub zmniejsz ruch NPC i postaci w FiveM: rodzime gęstości
Wyłącz lub zmniejsz NPC, ruch i zaparkowane samochody w FiveM z rodzimymi mnożnikami gęstości, regułą na klatkę, routingiem buckety, usuwaniem policji i kosztem każdej opcji.
Typowe objawy:
Streets full of NPCs and traffic, low fps in the city, or random police responses nobody asked for.Populacja w GTA jest kontrolowana zestawem rodzimych, które wołasz na kliencie. Główna pułapka to, że większość z nich resetuje się każdą klatkę. Ten artykuł pokazuje rodzimych, pętlę, której potrzebują, opcję po stronie serwera, i kompromisy pustego miasta.
Jedna reguła: każda klatka
Mnożniki gęstości dotyczą tylko bieżącej klatki. Wołaj je raz przy starcie i robią nic chwilę później. Muszą działać w pętli bez opóźnienia:
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)Mnożnik jest między 0.0 (żaden) i 1.0 (domyślna kwota). Każdy rodzime kontroluje inną część:
| Rodzime | Kontroluje |
|---|---|
SetVehicleDensityMultiplierThisFrame |
Ruch poruszający się |
SetRandomVehicleDensityMultiplierThisFrame |
Losowe pojazdy na drogach |
SetParkedVehicleDensityMultiplierThisFrame |
Samochody zaparkowane na ulicy |
SetPedDensityMultiplierThisFrame |
Spacerujące postaci |
SetScenarioPedDensityMultiplierThisFrame |
Postaci zajęte czynnościami (wnętrze, zewnętrze) |
SetScenarioPedDensityMultiplierThisFrame przyjmuje dwie wartości, jedną dla wnętrza i jedną dla zewnętrza.
Zmniejsz zamiast usuwać
Miasto bez nikogo w nim wygląda na zepsute, i gracze to zauważą. Użyj wartości między 0 i 1, aby je przerzedzić:
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)Spróbuj 0.3 do 0.5 najpierw, potem dostosuj do serwera. Włóż wartości w plik config, aby mógł je zmienić bez dotykania kodu.
Po stronie serwera: routowanie bucketów
Serwer może wyłączyć populację dla całego bucketu routingowego, co jest przydatne dla instancji, takie jak wnętrze lub zdarzenie, bez pętli klienta:
-- server
SetRoutingBucketPopulationEnabled(bucketId, false)Dzięki temu, żaden otoczenie NPC lub ruch nie spawni się dla graczy w tym buckecie. Bucket 0 to domyślny świat. Trzymaj go włączony dla głównego świata i wyłącz dla prywatnych instancji. Zobacz routing buckets, aby wiedzieć, jak włożyć graczy do jednego.
Usuń policję i dyspozycję
Ustawienie gęstości na zero nie zatrzymuje odpowiedzi policji. Żądane poziomy i dyspozycja działają na własnych systemach. Aby je usunąć, wyłącz je jedno po drugim:
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 przyjmuje indeks usługi i zmienną logiczną. Pętla ponad 1 do 15 obejmuje policję, helikopter, straż pożarną, karetkę i inne usługi, które gra definiuje. Pętla żądanego poziomu łapie cokolwiek, co prześliznęło się.
Jeśli trzymasz policję na serwerze dla roleplay, nie wyłączaj usług dla graczy, którzy są na stanowisku. Obsłużyć ten przypadek w swoim skrypcie pracy.
Inne rzeczy, które możesz chcieć wyłączyć
Populacja to więcej niż postaci i samochody. Te rodzime usuwają kilka innych źródeł, każde przyjmuje logiczną:
SetGarbageTrucks(false)
SetRandomBoats(false)
SetRandomTrains(false)Wołaj je raz przy starcie, nie potrzebują pętli na klatkę.
Kompromisy wydajności
Co zyskujesz. Każda postać i pojazd jest symulowany, rysowany i synchronizowany. Cięcie ich cięcie kosztu klienta i liczby jednostek w sieci. Na słabych komputerach to może być dużą różnicą fps. Dla innych poprawek fps, zobacz low FPS in FiveM.
Co płacisz. Pętla z Wait(0) działa każdą klatkę, więc trzymaj ją małą i włóż rodzimych w jednym wątku. Pętla pięciu wołań jest tania, ale dziesięć różnych skryptów każdy ze swoją pętlą nie. Sprawdzić, że serwer już nie ustawia gęstości, i monitor zasobów w resmon.
Atmosfera. Świat bez NPC jest bez życia. Zmniejszenie ruchu i trzymanie niektórych pedów to lepszy kompromis, a zaparkowane samochody są tanie do trzymania, ponieważ się nie poruszają.
Rozgrywka. Wiele skryptów opiera się na pedach lub samochodach: sprzedaż narkotyków, napad z zakładnikami, skok z ruchem. Przetestuj je z ustawieniami gęstości, ponieważ praca, która potrzebuje przechodnia, się nie powiedzie w pustym mieście.
Częste błędy
- Wołanie mnożników raz. Resetują się każdą klatkę, użyj pętli.
- Długi
Waitw pętli. ZWait(1000)gęstość stosuje się jedną klatkę na sekundę i NPC spawniają się w szczelinach. Musi byćWait(0). - Dwa skrypty z różnymi wartościami. Ostatnie wołanie klatki wygrywa, więc otrzymujesz niespójne wyniki. Trzymaj jedno źródło.
- Zapomnienie zaparkowanych samochodów. Ruch na zero i zaparkowane samochody na domyślnym wciąż pozostawia ulicę pełną samochodów.
- Oczekiwanie, że serwer usunie NPC, którymi nie posiadł. Populacja otoczenia to po stronie klienta, oprócz przełącznika routingu bucketu.
Lista kontrolna
| Symptom | Naprawa |
|---|---|
| NPC wracają po chwili | Wołaj rodzimych gęstości każdą klatkę z Wait(0) |
| Ruch zniknął, zaparkowane samochody zostają | Dodaj SetParkedVehicleDensityMultiplierThisFrame |
| Postaci siedzą w scenariuszach | Dodaj SetScenarioPedDensityMultiplierThisFrame(interior, exterior) |
| Policja wciąż się pojawia | Żądany poziom 0, EnableDispatchService wyłączony, losowi policjanci wyłączeni |
| Brak NPC w instancji | SetRoutingBucketPopulationEnabled na serwerze |
| Miasto wygląda puste | Użyj wartości takie jak 0.3 do 0.5 zamiast 0.0 |
| Wysoki czas resmon | Tylko jedna pętla, brak zduplikowanych skryptów |
Szybkie odpowiedzi
Dlaczego NPC wracają po ustawieniu gęstości na 0?
Rodzime gęstości trwają tylko jedną klatkę. Jeśli wołasz je raz, gra wraca do domyślnej na następnej klatce, więc muszą być wołane w pętli, która działa każdą klatkę.
Czy wyłączenie NPC poprawia wydajność?
Tak, mniej pedów i samochodów oznacza mniej pracy dla klienta i więcej fps na słabych maszynach. To też sprawia, że miasto wygląda puste, więc wiele serwerów zmniejsza gęstość zamiast usuwania jej.
Jak usunąć odpowiedź policji?
Wyłącz usługi dyspozytorskie z EnableDispatchService, ustaw żądany poziom na 0 i zatrzymaj losowych policjantów. Zrób wszystkie trzy, ponieważ każdy obejmuje inną część.
Skrypty bez tego problemu
Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →
Quest CreatorWizualny edytor questów i dialogów z NPC, budowanych węzeł po węźle w grze.Zobacz skrypt →
CCTV Security CamerasKamery do rozstawienia, tablet z podglądem wielu kamer na żywo i drukowane zdjęcia jako dowody.Zobacz skrypt →