CS 1.6 Netcode Po Polsku

Od HLDS.pl
(Różnice między wersjami)
Skocz do: nawigacji, wyszukiwania
(Historia)
 
(Nie pokazano 32 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
{{stub}}
 
 
 
[[kategoria:HLDS]]
 
[[kategoria:HLDS]]
 
 
[[kategoria:E-Sport]]
 
[[kategoria:E-Sport]]
 
[[Kategoria:Netcode]]
 
[[Kategoria:Netcode]]
Linia 10: Linia 7:
 
--[[Użytkownik:KaszpiR|KaszpiR]] 15:52, 9 sie 2006 (CEST)
 
--[[Użytkownik:KaszpiR|KaszpiR]] 15:52, 9 sie 2006 (CEST)
  
 +
{{stub}}
 
=Historia=
 
=Historia=
 
CS 1.6 Netcode Explained po Polsku (tłumaczenie by _KaszpiR_ http://nvt.prv.pl )
 
CS 1.6 Netcode Explained po Polsku (tłumaczenie by _KaszpiR_ http://nvt.prv.pl )
  
 
Artykuł był najpierw dostępny ogólnie na Gotfrag.
 
Artykuł był najpierw dostępny ogólnie na Gotfrag.
Następnie stal sie tzw Primie - czyli widocznym tylko dla zarejestrowanych.
+
Następnie stał się tzw. Primie - czyli widocznym tylko dla zarejestrowanych.
Cóż, ale http://google.com przeszło przez niego i zrobiło cache - dlatego bez obrazka, ale liczy sie treść.
+
Cóż, ale http://google.com przeszło przez niego i zrobiło cache - dlatego bez obrazka, ale liczy się treść.
  
A ja pozwoliłem sobie to przetłumaczyć, ale bez zbytniego lania wody zostawiając esencje. Dodatkowo trochę zmieniłem układ aby treść nie była tak poszatkowana jak w oryginale - wiec opisy zmiennych/komend są razem a nie osobno (co wprowadzało w pewne zakłopotanie co poniektórych :D )
+
A ja pozwoliłem sobie to przetłumaczyć, ale bez zbytniego lania wody zostawiając esencje. Dodatkowo trochę zmieniłem układ aby treść nie była tak poszatkowana jak w oryginale - więc opisy zmiennych/komend są razem a nie osobno (co wprowadzało w pewne zakłopotanie co poniektórych :D )
  
 
*''Originally by:''' Jon MellinBy, Submitted by: Jason, last updated April 7 2004 at 4:34 PM EDT Gotfrag http://www.gotfrag.net
 
*''Originally by:''' Jon MellinBy, Submitted by: Jason, last updated April 7 2004 at 4:34 PM EDT Gotfrag http://www.gotfrag.net
Linia 23: Linia 21:
  
 
=Opis=
 
=Opis=
W artykule zapoznasz sie z tzw. netkodem gry [[Half-Life]], czyli ta czescia gry ktora odpowiada za protokol sieciowy itp.
+
*W artykule zapoznasz się z tzw. netkodem gry [[Half-Life]], czyli ta częścią gry która odpowiada za protokół sieciowy itp.
Mam nadzieje, ze pomoze ci on lepiej ustawic wartosci aby osiagnac lepsze wykini w grze, jak i usprawnc serwer.
+
Mam nadzieje, że pomoże ci on lepiej ustawić wartości aby osiągnąć lepsze wyniki w grze, jak i usprawnić serwer.
  
'''Notka:'''
+
*'''Notka:''' Komendy/zmienne zaczynające się od sv_ czy też sys_ są komendami/zmiennymi działającymi tylko na serwerze - dedykowanym czy tzw listen.
 +
Wykonanie powyższych komend w konsoli u klienta zwróci ustawienia na lokalnym komputerze a nie na serwerze.
 +
Dlatego też trzeba te komendy wpisywać albo w konsoli hlds bezpośrednio (jak jest na screen'ie itp., albo wraz z użyciem komendy rcon,
 +
albo z żzyciem rcon zastępczych komend/aplikacji działających na serwer - mam tu na myśli komendy typu amx_rcon czy cm_rcon.
  
Komendy/zmienne zaczynajace sie od sv_ czy tez sys_ sa komendami/zmiennymi dzialajacymi tylko na serwerze - dedykowanym czy tzw listen.
+
Zależność miedzy komenda ex_interp a cl_updaterate jest bardzo ważna i prosimy nie czytać tylko jednego opisu,
Wykonanie powyzszych komend w konsoli u klienta zwroci ustawienia na lokalnym komputerze a nie na serwerze.
+
tylko przeczytać też info o drugiej komendzie.
Dlatego tez trzeba te komendy wpisywac albo w konsoli hlds bezposrednio (jak jest na screen'ie itp., albo wraz z uzyciem komendy rcon,
+
Ogólnie przeczytaj wszystko aby mieć ogólny zarys tego, co się dzieje jak się bawimy kilkoma komendami na raz.
albo z uzyciem rcon zastepczych komend/aplikacji dzialajacych na serwer - mam tu na mysli komendy typu amx_rcon czy cm_rcon.
+
  
Zaleznosc miedzy komenda ex_interp a cl_updaterate jest bardzo wazna i prosimy nie czytac tylko jednego opisu,
+
Artykuł oryginalnie był napisany dla osób o szerokopasmowym dostępie do internetu.
tylko przeczytac tez info o drugiej komendzie.
+
W naszych warunkach czytaj - coś lepszego niż SDI, najlepiej Neostrada i temu podobne.
Ogolnie przeczytaj wszystko aby miec ogolny zarys tego, co sie dzieje jak sie bawimy kilkoma komendami na raz.
+
  
Artykul oryginalnie byl napisany dla osob o szerokopasmowym dostepie do internetu.
+
*Najpierw ogólny opis komend/zmiennych a potem szczegóły, więc się nie wkurzać że 2x to samo czytacie - oryginalny artykuł był bardziej poszatkowany.
W naszych warunkach czytaj - cos lepszego niz SDI, najlepiej Neostrada i temu podobne.
+
 
+
Najpierw ogolny opis komend/zmiennych a potem szczegoly, wiec sie nie wkurzac ze 2x to samo czytacie - oryginalny artykul byl bardziej poszatkowany.
+
  
 
=Ogólnie o zmiennych=
 
=Ogólnie o zmiennych=
 
==cl_cmdrate==
 
==cl_cmdrate==
*definiuje ile maksymalnie pakietow moze wyslac klient (tzn. ty, graczu ze swojej maszyny) do serwera.
+
*definiuje ile maksymalnie pakietów może wysłać klient (tzn. ty, graczu że swojej maszyny) do serwera.
*numer oznacza liczbe pakietow na sekunde
+
*numer oznacza liczbę pakietów na sekundę
Oczywiscie wiecej znaczy lepiej - szybciej serwer zareaguje na twoje reakcje.
+
Oczywiście więcej znaczy lepiej - szybciej serwer zareaguje na twoje reakcje.
Traktuj to mniej wiecej tak - im wieksza wartosc tym mniejszy poslizg pomiedzy nacisnieciem fire a wyslaniem pakietu.
+
Traktuj to mniej więcej tak - im większa wartość tym mniejszy poślizg pomiędzy naciśnięciem fire a wysłaniem pakietu.
  
Jak masz dobre lacze i siedzisz na laczu sam to spoko mozesz zwiekszyc.
+
Jak masz dobre łącze i siedzisz na łączu sam to spoko możesz zwiększyć.
Jak wspoldzielisz z kims lacze (np. neo na 2 osoby) to zbyt wysokie wartosci u obu graczy beda powodowac nagle lagi i ping spike.
+
Jak współdzielisz z kimś łącze (np. neo na 2 osoby) to zbyt wysokie wartości u obu graczy będą powodować nagle lagi i ping spike.
Warotsc maksymalna zalezy tu od tego jaki masz upstream do provider'a - czyli ile mozesz wyslac w internet.
+
Wartość maksymalna zależy tu od tego jaki masz upstream do provider'a - czyli ile możesz wysłać w internet.
  
W idealnym przypadku ta komenda powinna sie rownac liczbie fps serwera!!! a nie klienta.
+
W idealnym przypadku ta komenda powinna się równać liczbie fps serwera!!! a nie klienta.
Jak wyslesz wiecej pakietow to serwer je po prostu zignoruje bo nie bedzie wyrabiac.
+
Jak wyślesz więcej pakietów to serwer je po prostu zignoruje bo nie będzie wyrabiać.
Tak wiec za wysokie wartosci nie zaszkodza ale tylko beda marnowac twoje lacze :D
+
Tak więc za wysokie wartości nie zaszkodzą ale tylko będą marnować twoje łącze :D
'''Rekomendujemy''' cl_cmdrate rowne fps serwera lub troche wieksze
+
'''Rekomendujemy''' cl_cmdrate równe fps serwera lub trochę większe.
  
Dlatego na serwerach linuksowych czesto jest 50 a na widowsowych 70
+
Dlatego na serwerach linuksowych często jest 50 a na windowsowych 70
oczywiscie jak serwer ma wiecej fps to walimy 100 i sie cieszymy
+
oczywiście jak serwer ma więcej fps to walimy 100 i się cieszymy
  
 
==cl_updaterate==
 
==cl_updaterate==
*podobna do poprzedniej komendy ale dziala w odwrotnym kierunku.
+
*podobna do poprzedniej komendy ale działa w odwrotnym kierunku.
*numer definiuje maksymalna liczbe pakietow na sekunde jaka ty mozesz otrzymac od serwera.
+
*numer definiuje maksymalna liczbę pakietów na sekundę jaka ty możesz otrzymać od serwera.
*wiecej znaczy lepiej ale tez zwieksza uzycie lacza.
+
*więcej znaczy lepiej ale też zwiększa użycie łącza.
  
traktuj to jak efekt blyskawicy - ktos strzela to nastepuje blysk (widoczny dla serwera natychmiast),
+
traktuj to jak efekt błyskawicy - ktoś strzela to następuje błysk (widoczny dla serwera natychmiast),
jednakze ty jestes nastawiony na grzmot.
+
jednakże ty jesteś nastawiony na grzmot.
im wieksza wartosc tym szybciej do ciebie grzmot dojdzie (wiem wiem, lopatologicznie...)
+
im większa wartość tym szybciej do ciebie grzmot dojdzie (wiem wiem, łopatologicznie...)
  
*Po prostu szybciej bedziesz mogl zareagowac.
+
*Po prostu szybciej będziesz mógł zareagować.
*Dodatkowo daje to dokladniejsze informacje o rzeczywistym polozeniu przeciwnikow, trafien po kulach itp.
+
*Dodatkowo daje to dokładniejsze informacje o rzeczywistym położeniu przeciwników, trafień po kulach itp.
  
*Wartosc maksymalna zalezy od twojego downstream'u czyli jak szybko mozesz zasysac od provider'a.
+
*Wartość maksymalna zależy od twojego downstream'u czyli jak szybko możesz zasysać od provider'a.
Przewaznie ta wartosc (mam na mysli downstream) jest 4x wieksza od twojego upstream'u
+
Przeważnie ta wartość (mam na myśli downstream) jest 4x większa od twojego upstream'u
Dlatego czasem cl_updaterate jest wiekszy 4 razy od cmdate
+
Dlatego czasem cl_updaterate jest większy 4 razy od cmdate
  
*Minimalna wartosc jest 10 (dlatego ex_interp ma 0.1, patrz nizej)
+
*Minimalna wartość jest 10 (dlatego ex_interp ma 0.1, patrz niżej)
  
Kiedys myslano ze cl_updaterate trza walnac na 101 i zjezdzac w dol. z wartosciami az bedziemy mieli w miare niski
+
Kiedyś myślano że cl_updaterate trza walnąć na 101 i zjeżdżać w dół z wartościami aż będziemy mieli w miarę niski
i zadowalajacy choke (prawie zero ale moze byc 2...3)
+
i zadowalający choke (prawie zero ale może być 2...3)
choke widac na net_graph 3
+
choke widać na net_graph 3
  
Jednak caly system cl_updaterate jest bardziej zlozony.
+
Jednak cały system cl_updaterate jest bardziej złożony.
np. serwery CAL daja sv_maxupdaterate 101 wiec normalnie kazdy by se tyle dal na kliencie.
+
np. serwery CAL dają sv_maxupdaterate 101 więc normalnie każdy by se tyle dal na kliencie.
w teorii jest to poprawne jednak praktyka sie tu rozmija.
+
w teorii jest to poprawne jednak praktyka się tu rozmija.
  
Wiekszosc serwerow nie wyciaga 100fps aby obliczyc te wlasnie 100 updaterate na sekunde.
+
Większość serwerów nie wyciąga 100fps aby obliczyć te właśnie 100 updaterate na sekundę.
oznacza to ze nie ma szans aby serwer tyle wyslal w rzeczywistosci.
+
oznacza to że nie ma szans aby serwer tyle wysłał w rzeczywistości.
  
Pomyslisz - walne se 101 updaterate i tak czy siak tyle max pakietow dostane.
+
Pomyślisz - walnę se 101 updaterate i tak czy siak tyle max pakietów dostanę.
  
Jak u siebie dasz cl_updaterate 101 to ex_interp bedzie 0.009ms - spodziewa sie gra ze bedziesz mial pakiety co 9ms
+
Jak u siebie dasz cl_updaterate 101 to ex_interp będzie 0.009ms - spodziewa się gra że będziesz miał pakiety co 9ms
i wszystko bedzie cacy.
+
i wszystko będzie cacy.
Jednakze serwer ma 50 fps czyli maksymalnie pusci 50 pakietow!!! tak wiec 2 razy mniej.
+
Jednakże serwer ma 50 fps czyli maksymalnie puści 50 pakietów!!! tak więc 2 razy mniej.
Co sie stanie?
+
Co się stanie?
Pakiety przychodza za rzadko i gra nie ma z czego interpolowac polozenia graczy - masz efekt skaczacych modeli.
+
Pakiety przychodzą za rzadko i gra nie ma z czego interpolować położenia graczy - masz efekt skaczących modeli.
No dobra. dajmy na to ze zjade na 70 - efekt skaczacych modeli spadnie.
+
No dobra. dajmy na to że zjadę na 70 - efekt skaczących modeli spadnie.
Oczywiscie idealnie jak bedziemy mieli cl_updaterate 50 - wtedy iterp bedzie 0.02 i modele nie powinny az tak skakac (tylko z rzadka z powodu lagow)
+
Oczywiście idealnie jak będziemy mieli cl_updaterate 50 - wtedy interp będzie 0.02 i modele nie powinny tak skakać (tylko z rzadka z powodu lagów)
  
*Poniewaz klient bez rcon'a nie ma jak sprawdzic ile serwer ma fps i se dobrze dobrac te zmienna, trzeba zgadywac.
+
*Ponieważ klient bez rcon'a nie ma jak sprawdzić ile serwer ma fps i se dobrze dobrać tę zmienną, trzeba zgadywać.
  
Na szczescie mozna to zrobic doswiadczalnie w prostu sposob.
+
Na szczęście można to zrobić doświadczalnie w prosty sposób.
 
1. zacznij z cl_updaterate 101, ex_interp 0
 
1. zacznij z cl_updaterate 101, ex_interp 0
2. zjezdzaj z cl_updaterate w dol. (mniej wiecej o 10 ) az zauwazysz ze modele az tak bardzo nie skacza. (tylko z rzadka z powodu zmiany pinga, lagow itp.)
+
2. zjeżdżaj z cl_updaterate w dol. (mniej więcej o 10 ) aż zauważysz że modele tak bardzo nie skaczą. (tylko z rzadka z powodu zmiany pinga, lagów itp.)
  
Oczywiscie "bardzo nie skacza" to kwestia gustu.
+
Oczywiście "bardzo nie skaczą" to kwestia gustu.
Dopoki ex_interp = 1/cl_updaterate modele beda na wioch rzeczywistych miejscach.
+
Dopóki ex_interp = 1/cl_updaterate modele będą na swoich rzeczywistych miejscach.
  
Oznacza to ze kazdy serwer bedzie mial swoje wlasne ustawienia cl_updaterate zalezne od ilosci graczy/lacza/fps - po prosu ile w danej chwili serwer moze z siebie wycisnac.
+
Oznacza to że każdy serwer będzie miał swoje własne ustawienia cl_updaterate zależne od ilości graczy/łącza/fps - po prostu ile w danej chwili serwer może z siebie wycisnąć.
Nie bojmy sie zejsc z wartosciami ponizej updaterate 50 bo tak czy siak interpolacja bedzie dzialac.
+
Nie bójmy się zejść z wartościami poniżej updaterate 50 bo tak czy siak interpolacja będzie działać.
  
No dobra, ktos pomysli, ale ja wezme updaterate 20 i bede szedl w gore.
+
No dobra, ktoś pomyśli, ale ja wezmę updaterate 20 i będę szedł w gore.
No to nie jest dobry pomysl bo ex_interp = 1/cl_updaterate.
+
No to nie jest dobry pomysł bo ex_interp = 1/cl_updaterate.
 
Jak mamy 20 to ex_interp = 1/20 = 0.05  
 
Jak mamy 20 to ex_interp = 1/20 = 0.05  
 
a jak zwierzymy na 50 to mamy ex_interp = 1/50 = 0.02
 
a jak zwierzymy na 50 to mamy ex_interp = 1/50 = 0.02
a ex intern 0.05 > 0.02 a H-L domyslnie nie zmniejsza sam z siebie interna.
+
a ex intern 0.05 > 0.02 a H-L domyślnie nie zmniejsza sam z siebie interna.
wtedy musisz wystukac za kadmy razem ex_interp 0 recznie aby obliczyc go.
+
wtedy musisz wystukać za kadmy razem ex_interp 0 ręcznie aby obliczyć go.
  
  
tak wiec widac ze istnieje zaleznosc pomiedzy serwer fps, cl_udpaterate i ex_interp 0 razem.
+
tak więc widać że istnieje zależność pomiędzy serwer fps, cl_udpaterate i ex_interp 0 razem.
najlepiej miec updaterate rowny fps serwera a ex_interp 0
+
najlepiej mieć updaterate równy fps serwera a ex_interp 0
  
 
'''Rekomendacja:'''
 
'''Rekomendacja:'''
cl_updaterate rowny fps serwera i nie wiekszy od sv_maxupdaterate.
+
cl_updaterate równy fps serwera i nie większy od sv_maxupdaterate.
  
Koncowa notka: wiele serwerow uzywa sv_maxupdaterate 30 tak wiec cl_updaterate 30 bedzie wtedy wartoscia najlepsza w
+
Końcowa notka: wiele serwerów używa sv_maxupdaterate 30 tak więc cl_updaterate 30 będzie wtedy wartością najlepszą w
 
takiej sytuacji.
 
takiej sytuacji.
  
 
==sv_maxupdaterate==
 
==sv_maxupdaterate==
Jak cl_maxupdaterate ale zdziala na serwer - ile klient maksymalnie moze przyjac od serwera.
+
*Jak cl_maxupdaterate ale działa na serwer - ile klient maksymalnie może przyjąć od serwera.
Szczegolnie uzyteczna jak serwer nie ma za dobrego lacza.
+
*Szczególnie użyteczna jak serwer nie ma za dobrego łącza.
Numer oznacz liczbe pakietow na sekunde jaka serwer moze wyslac.
+
*Numer oznacza liczbę pakietów na sekundę jaką serwer może wysłać na sekundę do klienta.
sv_maxupdaterate specifies the maximum number of packets per second a server is allowed to send.
+
* przeważnie daje się sv_maxupdaterate 101.
Dlatego jesli klient ma cl_updaterate 100, a serwer ma sv_maxupdaterate 50,
+
Dlatego jeśli klient ma cl_updaterate 100, a serwer ma sv_maxupdaterate 50,
to ten klient i tak nie dostanie wiecej niz. te 50.
+
to ten klient i tak nie dostanie więcej niż. te 50.
 +
 
 +
''Rekomendujemy'' zmieniać jeśli pozwana na to łącze serwera i jego moc procesora.
  
 
==sys_ticrate==
 
==sys_ticrate==
Definiuje ile maksymalnie klatek na sekunde moze wyciagnac serwer.
+
*Definiuje ile maksymalnie tików na sekundę serwer może przetworzyć. Przekłada się to nie bezpośrednio na ilość klatek na sekundą jakie wyciąga serwer.
Domyslnie jest 100, maksymalnie 10 000 :D
+
*Domyślnie jest 100, maksymalnie 10 000.
 +
 
 
Po co to komu?
 
Po co to komu?
Miedzy innymi wiecej fps daje ci lepsze poczucie gry.
 
Serwery normalnie maja okolo 50fps na linuksie i 64 na widowsach - ale czasem spada to do 20-30 to juz slabo.
 
Dobre serwery maja tak ustawione ten ticrate aby fps sie wahalo w granicy 150-180 fps(tzn. ogolnie do 200fps)
 
Wiecej i tak ci nic nie da bo nie zauwazysz.
 
  
Czasem ta komenda nie dziala na nieskorych platformach.
+
Miedzy innymi więcej fps daje ci lepsze poczucie gry.
dodatkowo im wiekszy ticrate tym wieksze uzycie procka.
+
Serwery normalnie maja około 50fps na linuksie i 64 na windowsach - ale czasem spada to do 20-30 to już słabo.
Czasem na mapach de_inferno i de_aztec uzycie procka skacze czasem do szalonych wartosci - ale to mowie - czasem.
+
Dobre serwery maja tak ustawione ten ticrate aby fps się wahało w granicy 150-180 fps (tzn. ogólnie do 200 fps).
Oczywiscie najlepiej aby miec w miare stabilny poziom fps - bo skoki z 100 do 500 i po chwili znowu na 100 nie sa
+
Więcej i tak ci nic nie da bo nie zauważysz.
przyjemne i wszystko raczej dziala gorzej - to zalezy od hardware'u
+
Wiec lepiej aby miec mniej ale z mniejszymi fluktuacjami.
+
  
Jak masz dostep do rcon to mozesz sprawdzic aktualne fps na serwerze wpisujac
+
<span style="color:red">Jak nikogo na serwerze nie ma to powinieneś mieć około 100 albo 60 fps - serwer po prostu nic nie robi jak nikogo na serwerze nie ma, i dopiero zaczyna się grzać jak wejdzie ktoś na serwer. Więc zawsze sprawdzaj fps z graczami na serwerze.</span>
 +
 
 +
*Czasem ta komenda nie działa na niektórych platformach.
 +
*Im większy ticrate tym większe użycie procesora.
 +
Czasem na mapach de_inferno i de_aztec użycie procka skacze czasem do szalonych wartości - ale to mowie - czasem.
 +
Oczywiście najlepiej aby mieć w miarę stabilny poziom fps - bo skoki z 100 do 500 i po chwili znowu na 100 nie są
 +
przyjemne i wszystko raczej działa gorzej - to zależy od hardware'u
 +
Więc lepiej aby mieć mniej ale z mniejszymi fluktuacjami.
 +
 
 +
*Jak masz dostęp do rcon to możesz sprawdzić aktualne fps na serwerze wpisując
 
  rcon stats
 
  rcon stats
Aby sprawdzic jakiego kopa dostanie serwer na chwile wlacz
+
Aby sprawdzić jakiego kopa dostanie serwer na chwile włącz
rcon sys_ticrate 10000
+
rcon sys_ticrate 10000
Jest teraz sprawdzisz rcon status i twoj serwer ma powyzej 100fps to znaczy ze boosting dziala i sie ciesz,
+
Jest teraz sprawdzisz rcon stats i twój serwer ma powyżej 100fps to znaczy że boosting działa i się ciesz, inaczej szukaj innych metod poprawy działania sprzętu
inaczej szukaj innych metod poprawy dzialania sprzetu
+
  
Zawsze sprawdz statusy kilka razy
+
*Zawsze sprawdź stats kilka razy.
  
==ex_interp==
+
Znajdowanie optymalnej wartości wymaga trochę eksperymentów.
interpolacja czyli przyblizenie wartosci korzystajac z co najmniej 2 wartosci granicznych
+
Najpierw sprawdź czy serwer jest boots'owany, bo inaczej nic ci to nie da.
np. srednia ocen w szkole to interpolacja .... :D
+
  
Czemu to sluzy?
+
<span style="color:red;">Pamiętaj że podnoszenie fps powyżej 200 jest zbyteczne ze względów możliwości samej gry i łączy internetowych.
W idealnym ustawieniu mialbys nieskonczona liczbe synchronizacji i bys wiedzial gdzie jest przeciwnik.
+
</span>
Oczywiste internet na to ci nie pozwoli i dostaniesz tylko skonczona liczbe pakietow.
+
Najlatwiej tu jest sie posluzyc interpolacja kola.
+
Masz kolo - idealny ksztalt rzeczywisty. Ale ty masz skonczona liczbe kresek do wykorzystania.
+
tak wiec wpisujesz wielokat foremny aby jak najbardziej upodobnic go do kola
+
Z daleka patrzac nie zauwazysz roznicy czy masz wielokat o 100 bokach czy kolo no ale jak usiadziesz z lupa to sie kapniesz :D
+
Przewaznie w CS mamy wielokat o 20 bokach no i tu widac ze nie zawsze pozycja gracza jest pozycja realna gracza.
+
  
Na szczescie do gry to starcza gdyz dziala interpolacja - wszelkie pozycje gdzie nie masz informacji gdzie sie znajduje gracz sa interpolowane.
+
Dodatkowo wyciskanie za dużo fps na maszynie która ma kilka serwerów hlds na sobie jest niekorzystne dla innych serwerów - spowoduje to tylko pogorszenie gry na obu serwerach bo procesor nie będzie wyrabiał. Nie zapominaj że często na serwerach działa też www , mail i ftp.
Po prostu modele na ekranie nie skacza, tylko poruszaja sie plynnie bo sa interpolowane bazujac na pakietach jakie otrzymujesz od serwera.
+
  
oznacza tu przedzial czasowy do wykorzystania przez gre - jako ulamek sekundy.
+
Nie każdy wie że czasem serwer fps wskazuje na niektóre tylko wartości albo po prostu działa na innych
Domyslnie jest to maksymalnie 0.1 Czyli 100 ms - oznacza to ze jesli nie dostaniesz pakietu o polozeniu gracza w ciagu 100ms to H-L bedzie
+
np. na jednej z maszyn zaobserwowano że fps układają się tak: 85, 102, 128, 170, 256 ...
Obliczal gdzie on sie znajduje.
+
i żadnych fps (liczb) miedzy nimi.
  
normalnie ex_interp powinien byc rowny lub troszke wiekszy od 1/cl_updaterate
+
Więc jak damy w tym przypadku sys_ticrate 100 to serwer będzie działał na prędkości niższej niż zapodana
 +
w tym wypadku będzie to 85 fps
  
natomiast niektorzy rekomenduja ex_interp 0
+
Dlatego lepiej jest dawać sys_ticrate zwiększone o 20 do 50 fps niż. tę którą chcesz osiągnąć
wtedy H-L sam obliczy te wartosc i ci powie ze "ex_interp forced to msec"
+
np. może się zdarzyć że masz sys_ticrate 150 a serwer będzie wyciągał tylko 128 fps.
tylko ze jest problem
+
1. jak zmieniasz jakkolwiek cl_updaterate to potem musisz wywolac ex_interp 0 aby to obliczyl
+
2. jak masz ex_interp 0 to modela moga zaczac skakac - bo pakiety sie spozniaja, to normalne.
+
  
maksymalnie ex_interp ma 0.1 czyli 100 milisekund - to jest duzo
+
rekomendowane:
najczesciej jak masz cl_updaterate 20 to masz ex_interp 0.05
+
sys_ticrate 110 - 180 w zależności od możliwości twojego sprzętu.
oczywiscie im wiekszy update tym mniejsza liczba
+
  
niektorzy tylko rekomenduja operowanie cl_updaterate i zostawianie ex_interp'a w spokoju aby sam sie kalkulowal... no ale jestesmy na polskich laczach...
 
  
czasem wartosci ex_interp ponizej 1/cl_updaterate nie da sie ustawic.
+
'''Rekomendujemy''' sys_ticrate 125, ale lepiej nie przekraczać 200.
czasem wartosci powyzej 1/cl_updaterate sa uwazane za exploit gdyz powoduje z musisz strzelac za rzeczywistym modelem
+
  
dlatego jest efekt spozniony headshot'ow - koles przebiegl, ty strzeliles gdzie on "byl" i dostal heda, a krew sika z pustki
+
==fps_max==
 +
*ustawia maksymalna ilość FPS jakie ma serwer wyciągać, ale działa także u gracza, tzn jest to zarówno zmienna klienta jak i serwera. Zależy ona od sys_ticrate  -im większe sys_ticrate tym większe fps_max można wycisnąć. Domyślnie serwera stara się wycisnąć 100fps przy pełnym obciążeniu. Jednakże nieraz ta wartość spada jak serwer nie wyrabia.
 +
* ustawiamy pewna wartość jak poniżej ( wartośc 100 jest wartością domyślną na serwerach) w [[server.cfg]]
 +
fps_max 100
 +
* nie opłaca się ustawiać raczej fps więcej niż 200, w rzeczywistości aktualnie zoptymalizowane binarki HLDS spokojnie wyciągają i działają ładnie na fps_max 125
 +
* ilość fps na serwerze zależy od ilości graczy, i można ją sprawdzić komendą '''stats'''
 +
*pamiętaj, że jak nikogo na serwerze nie ma albo jest jeden gracz to ilość fps będzie różnie skakać i nie osiągnie wartości 100 -  dlatego ilość fps sprawdzaj najlepiej przy pełnym obciążeniu serwera.
 +
==ex_interp==
 +
*interpolacja czyli przybliżenie wartości korzystając z co najmniej 2 wartości granicznych
 +
np. średnia ocen w szkole to interpolacja .... :D
 +
* często blokowany prze [[HLGuard]] w celu zapobieganiu nadużyciom (dość często niesłusznie blokowany).
 +
Czemu to służy?
 +
W idealnym ustawieniu miałbyś nieskończoną liczbę synchronizacji i byś wiedział gdzie jest przeciwnik.
 +
Oczywiste internet na to ci nie pozwoli i dostaniesz tylko skończoną liczbę pakietów.
 +
Najłatwiej tu jest się posłużyć interpolacją koła.
 +
Masz kolo - idealny kształt rzeczywisty. Ale ty masz skończoną liczbę kresek do wykorzystania.
 +
tak więc wpisujesz wielokąt foremny aby jak najbardziej upodobnić go do kola
 +
Z daleka patrząc nie zauważysz różnicy czy masz wielokąt o 100 bokach czy kolo no ale jak usiądziesz z lupa to się kapniesz :D
 +
Przeważnie w CS mamy wielokąt o 20 bokach no i tu widać że nie zawsze pozycja gracza jest pozycja realna gracza.
  
ja sugeruje popatrzec ile ex_interp 0 wyliczy i potem dodac recznie +0.01
+
Na szczęście do gry to starcza gdyż działa interpolacja - wszelkie pozycje gdzie nie masz informacji gdzie się znajduje gracz sa interpolowane.
np. cl_updatertae 20
+
Po prostu modele na ekranie nie skaczą, tylko poruszają się płynnie bo są interpolowane bazując na pakietach jakie otrzymujesz od serwera.
ex_interp 0.05
+
dodajemy i mamy ex_interp 0.06
+
efektu spoznionych hedow nie powinno byc tak wiele i modele nie powinny az tak bardzo skakac - no chyba ze lagi :D
+
natomiast modele nie biegaja na tyle wczesnie aby inni uwazali ze oszukujesz.
+
ja uwazam ze dodanie 0.01 to nie jest expliotem bo netcode nie jest idealny, szczegolnie jak na polskie warunki
+
  
moim zdaniem exploitem jest jak gracz ma cl_updaterate 101 i wtedy powinien miec ex_interp 0.009 (no powiedzmy 0.01) a w rzeczywistosci uzywa ex_interp 0.1 czyli 10x wiekszego!!!
+
*Oznacza to przedział czasowy do wykorzystania przez grę - jako ułamek sekundy.
 +
Domyślnie jest to maksymalnie 0.1 Czyli 100 ms - oznacza to że jeśli nie dostaniesz pakietu o położeniu gracza w ciągu 100ms to H-L będzie
 +
Obliczał gdzie on się znajduje.
  
ostateczna '''rekomendacja'''
+
*Normalnie ex_interp powinien być równy lub troszkę większy od 1/cl_updaterate
ex_interp 0
+
*Niektórzy rekomendują ex_interp 0
 +
wtedy H-L sam obliczy tę wartość i ci powie że "ex_interp forced to msec"
 +
tylko że jest problem
 +
#jak zmieniasz jakkolwiek cl_updaterate to potem musisz wywołać ex_interp 0 aby to obliczył
 +
#jak masz ex_interp 0 to modela mogą zacząć skakać - bo pakiety się spóźniają, to normalne.
  
 +
Maksymalnie ex_interp ma 0.1 czyli 100 milisekund - to jest dużo.
 +
Najczęściej jak masz cl_updaterate 20 to masz ex_interp 0.05 - oczywiście im większy update tym mniejsza liczba
  
 +
Niektórzy tylko rekomendują operowanie cl_updaterate i zostawianie ex_interp'a w spokoju aby sam się kalkulował... no ale jesteśmy na polskich łączach...
  
 +
*Czasem wartości ex_interp poniżej 1/cl_updaterate nie da się ustawić.
 +
Czasem wartości powyżej 1/cl_updaterate są uważane za exploit gdyż powoduje to, że musisz strzelać za rzeczywistym modelem - dlatego jest efekt spóźniony headshot'ów - koleś przebiegł, ty strzeliłeś gdzie on "był" i dostał heda, a krew sika z pustki
  
 +
Ja sugeruje popatrzeć ile ex_interp 0 wyliczy i potem dodać ręcznie +0.01,
 +
np. cl_updatertae 20 => ex_interp 0.05,
 +
dodajemy i mamy ex_interp 0.06
 +
efektu spóźnionych hedów nie powinno być tak wiele i modele nie powinny aż tak bardzo skakać - no chyba że lagi :D.
 +
Natomiast modele nie biegają na tyle wcześnie aby inni uważali że oszukujesz.
 +
Ja uważam że dodanie 0.01 to nie jest expliotem bo netcode nie jest idealny, szczególnie jak na polskie warunki
  
==rate==
+
Moim zdaniem exploitem jest jak gracz ma cl_updaterate 101 i wtedy powinien mieć ex_interp 0.009 (no powiedzmy 0.01) a w rzeczywistości używa ex_interp 0.1 czyli 10x większego!!!
jest to ile bajtow mozesz przeslac do serwera. maksymalnie jest 20000, bo wyzej H-L nie wyciagnie.
+
standardowo jest chyba 5000 albo i mniej ale np. clanbase uzywa 9999.
+
rekomendujemy zatem albo 9999 albo 20000 jesli serwer pozwala.
+
 
+
  
 +
'''Rekomendacja''' ostateczna
 +
ex_interp 0.1 czyli nie dotykać - wtedy HLGuard i jego blokowanie zmiennych nie będzie tak uciążliwe.
  
 +
==rate==
 +
Jest to ile bajtów możesz przesłać do serwera. maksymalnie jest 20000, bo wyżej H-L nie wyciągnie.
 +
standardowo jest chyba 5000 albo i mniej ale np. clanbase używa 9999.
  
 +
'''Rekomendujemy''' zatem albo 9999 albo 20000 jeśli serwer pozwala, ew jeśli masz słabe łącze to nie więcej niż 80% twojego uploadu.
  
 
==sv_maxrate==
 
==sv_maxrate==
domyslnie jest rowne 0 co nie oznacza ze jest najlepiej.
+
Domyślnie jest równe 0 co nie oznacza że jest najlepiej.
 +
 
 
Dlaczego?
 
Dlaczego?
sv_maxtrate 0 wykryje rate kazdego gracza i bedzie sie staralo spelnic wymogi gracza.
+
sv_maxrate 0 wykryje rate każdego gracza i będzie się starało spełnić wymogi gracza.
teraz zalozmy ze H-L daje mozliwosc dania rate powyzej 20 kafli, a jakis gracz ma fantazje
+
i walnie ostra wartosc np. 9999999999 (kosmiczna liczba)
+
serwer w tym przypadku probowalby wypchac te kosmiczna ilosc danych do tego gracza i tylko by marnowal lacze do tej osoby bo i tak tyle nie wysle
+
a reszta bedzie lagowana bo nie dostanie nic.
+
dlatego lepiej jest ustawiac sv_maxtrate na 20000.
+
moze sie wydawac ze to nie ma sensu ale chyba mozna sie po valve spodziewac wszystkiego od czasow steam.
+
  
 +
Teraz załóżmy że H-L daje możliwość dania rate powyżej 20 kafli, a jakiś gracz ma fantazję i walnie ostrą wartość np. 9999999999 (kosmiczna liczba).
 +
Serwer w tym przypadku próbowałby wypchać tę kosmiczną ilość danych do tego gracza i tylko by marnował łącze do tej osoby bo i tak tyle nie wyśle, a reszta będzie lagowana bo nie dostanie nic.
  
 +
*Dodatkowo, dzięki ustawieniu wartości sv_maxrate możemy przewidywać maksymalne użycie łącza na miesiąc - jeśli płacimy za transfer w GB.
  
 
+
'''Rekomendujemy''' dlatego ustawiać sv_maxrate na 20000.
 
+
==sys_ticrate==
+
znajdowanie optymalnej wartosci wymaga troche eksperymentow.
+
najpierw sprawdz czy serwer jest boots'owany, bo inaczej nic ci to nie da.
+
pamietaj ze podnoszenie fps powyzej 200 jest zbyteczne ze wzgledow mozliwosci samej gry i laczy internetowych.
+
dodatkowo wyciskanie za duzo fps na maszynie ktora ma kilka serwerow hlds na sobie jest niekorzystne dla innych serwerow
+
spowoduje to tylko pogorszenie gry na obu serwerach bo procesor nie bedzie wyrabial.
+
nie zapominaj ze czesto na serwerach dziala tez www , mail i ftp.
+
 
+
dodatkowo nie kazdy wie ze czasem serwer fps wskazuje na niektore tylko wartosci albo po prostu dziala na innych
+
np. na jednej z maszyn zaobserwowano ze fps ukladaja sie tak: 85, 102, 128, 170, 256 ...
+
i zadnych fps (liczb) miedzy nimi.
+
 
+
wiec jak damy w tym przypadku sys_ticrate 100 to serwer bedzie dzialal na predkosci nizszej ni zapodana
+
w typ wypadu bedzie to 85 fps
+
 
+
dlatego lepiej jest dawac sys_ticrate zwiekszone o 20 do 50 fps niz. te ktora chcesz osiagnac
+
np. moze sie zdarzyc ze masz sys_ticrate 150 a serwer bedzie wyciagal tylko 128 fps.
+
 
+
rekomendowane:
+
sys_ticrate 110 - 180 w zaleznosci od mozliwosci twojego sprzetu.
+
 
+
  
 
=LAN=
 
=LAN=
 +
No a jak grac na LAN'ie?
  
 +
organizacje typu [[CPL]] używają cl_updaterate 101 gdyż to się wiąże z jakością posiadanych przez nich serwerów - silne maszyny z booster'ami na bardzo dobrych łączach.
  
No a jak grac na LAN'ie
+
Aby łatwo się przekonać czy serwer na lanie jest z booster'em - popatrz na ping graczy z lan'u.
organizacje typu CPL uzywaja cl_updaterate 101 gdyz to sie wiaze z jakoscia serwowanych przez nich serwery - silne maszyny z booster'ami.
+
*normalny serwer bez booster'a na 60-65 fps powoduje że gracze maja pingi powyżej 15ms.
aby latwo sie przekonac czy serwer na lanie jest z booster'em - popatrz na ping graczy z lan'u.
+
*jak serwer ma więcej fps ( np ma booster'ato pingi o wiele mniejsze - przeważnie w granicy 5ms.
normalny serwer bez booster'a na 60-65 fps powoduje ze gracze maja pingi powyzej 15ms
+
natomiast jak serwer ma wiecej fps i ma booster'a to pingi sa o wiele mniejsze - przewaznie w granicy 5ms.
+
Wiadomo ze CPL, ESWC i WCG uzywaja serwerow z booster'ami.
+
 
+
 
+
  
 +
Wiadomo że CPL, ESWC i WCG używają serwerów z booster'ami bo ich na to stać.
  
 
=Podziękowania=
 
=Podziękowania=
Special thanks to:
+
Podziękowania dla:
Alfred Reynolds, Valve Software
+
*Alfred Reynolds, Valve Software
Yahn Bernier, Valve Software
+
*Yahn Bernier, Valve Software
Zibbo, UDPSoft
+
*Zibbo, UDPSoft
The HLDS Mailing Lists
+
*The HLDS Mailing Lists
The server.counter-strike.net forums
+
*The http://server.counter-strike.net forums
  
 
translated from english by _KaszpiR_
 
translated from english by _KaszpiR_
 +
 
9 May 2004
 
9 May 2004

Aktualna wersja na dzień 14:25, 6 lip 2007

Spis treści

Wstęp

Trochę stary artykuł, będę musiał go odkurzyć z debilizmów, więc się będzie zmieniał co jakiś czas.

--KaszpiR 15:52, 9 sie 2006 (CEST)

Ten artykuł jest niepełny i wymaga uzupełnienia. Jeżeli jesteś w stanie - postaraj się go uzupełnić.. Pamiętaj, że nawet najmniejsza zmiana jest cenna i pomocna :)


Historia

CS 1.6 Netcode Explained po Polsku (tłumaczenie by _KaszpiR_ http://nvt.prv.pl )

Artykuł był najpierw dostępny ogólnie na Gotfrag. Następnie stał się tzw. Primie - czyli widocznym tylko dla zarejestrowanych. Cóż, ale http://google.com przeszło przez niego i zrobiło cache - dlatego bez obrazka, ale liczy się treść.

A ja pozwoliłem sobie to przetłumaczyć, ale bez zbytniego lania wody zostawiając esencje. Dodatkowo trochę zmieniłem układ aby treść nie była tak poszatkowana jak w oryginale - więc opisy zmiennych/komend są razem a nie osobno (co wprowadzało w pewne zakłopotanie co poniektórych :D )

  • Originally by:' Jon MellinBy, Submitted by: Jason, last updated April 7 2004 at 4:34 PM EDT Gotfrag http://www.gotfrag.net

CS Netcode Explained

Opis

  • W artykule zapoznasz się z tzw. netkodem gry Half-Life, czyli ta częścią gry która odpowiada za protokół sieciowy itp.

Mam nadzieje, że pomoże ci on lepiej ustawić wartości aby osiągnąć lepsze wyniki w grze, jak i usprawnić serwer.

  • Notka: Komendy/zmienne zaczynające się od sv_ czy też sys_ są komendami/zmiennymi działającymi tylko na serwerze - dedykowanym czy tzw listen.

Wykonanie powyższych komend w konsoli u klienta zwróci ustawienia na lokalnym komputerze a nie na serwerze. Dlatego też trzeba te komendy wpisywać albo w konsoli hlds bezpośrednio (jak jest na screen'ie itp., albo wraz z użyciem komendy rcon, albo z żzyciem rcon zastępczych komend/aplikacji działających na serwer - mam tu na myśli komendy typu amx_rcon czy cm_rcon.

Zależność miedzy komenda ex_interp a cl_updaterate jest bardzo ważna i prosimy nie czytać tylko jednego opisu, tylko przeczytać też info o drugiej komendzie. Ogólnie przeczytaj wszystko aby mieć ogólny zarys tego, co się dzieje jak się bawimy kilkoma komendami na raz.

Artykuł oryginalnie był napisany dla osób o szerokopasmowym dostępie do internetu. W naszych warunkach czytaj - coś lepszego niż SDI, najlepiej Neostrada i temu podobne.

  • Najpierw ogólny opis komend/zmiennych a potem szczegóły, więc się nie wkurzać że 2x to samo czytacie - oryginalny artykuł był bardziej poszatkowany.

Ogólnie o zmiennych

cl_cmdrate

  • definiuje ile maksymalnie pakietów może wysłać klient (tzn. ty, graczu że swojej maszyny) do serwera.
  • numer oznacza liczbę pakietów na sekundę

Oczywiście więcej znaczy lepiej - szybciej serwer zareaguje na twoje reakcje. Traktuj to mniej więcej tak - im większa wartość tym mniejszy poślizg pomiędzy naciśnięciem fire a wysłaniem pakietu.

Jak masz dobre łącze i siedzisz na łączu sam to spoko możesz zwiększyć. Jak współdzielisz z kimś łącze (np. neo na 2 osoby) to zbyt wysokie wartości u obu graczy będą powodować nagle lagi i ping spike. Wartość maksymalna zależy tu od tego jaki masz upstream do provider'a - czyli ile możesz wysłać w internet.

W idealnym przypadku ta komenda powinna się równać liczbie fps serwera!!! a nie klienta. Jak wyślesz więcej pakietów to serwer je po prostu zignoruje bo nie będzie wyrabiać. Tak więc za wysokie wartości nie zaszkodzą ale tylko będą marnować twoje łącze :D Rekomendujemy cl_cmdrate równe fps serwera lub trochę większe.

Dlatego na serwerach linuksowych często jest 50 a na windowsowych 70 oczywiście jak serwer ma więcej fps to walimy 100 i się cieszymy

cl_updaterate

  • podobna do poprzedniej komendy ale działa w odwrotnym kierunku.
  • numer definiuje maksymalna liczbę pakietów na sekundę jaka ty możesz otrzymać od serwera.
  • więcej znaczy lepiej ale też zwiększa użycie łącza.

traktuj to jak efekt błyskawicy - ktoś strzela to następuje błysk (widoczny dla serwera natychmiast), jednakże ty jesteś nastawiony na grzmot. im większa wartość tym szybciej do ciebie grzmot dojdzie (wiem wiem, łopatologicznie...)

  • Po prostu szybciej będziesz mógł zareagować.
  • Dodatkowo daje to dokładniejsze informacje o rzeczywistym położeniu przeciwników, trafień po kulach itp.
  • Wartość maksymalna zależy od twojego downstream'u czyli jak szybko możesz zasysać od provider'a.

Przeważnie ta wartość (mam na myśli downstream) jest 4x większa od twojego upstream'u Dlatego czasem cl_updaterate jest większy 4 razy od cmdate

  • Minimalna wartość jest 10 (dlatego ex_interp ma 0.1, patrz niżej)

Kiedyś myślano że cl_updaterate trza walnąć na 101 i zjeżdżać w dół z wartościami aż będziemy mieli w miarę niski i zadowalający choke (prawie zero ale może być 2...3) choke widać na net_graph 3

Jednak cały system cl_updaterate jest bardziej złożony. np. serwery CAL dają sv_maxupdaterate 101 więc normalnie każdy by se tyle dal na kliencie. w teorii jest to poprawne jednak praktyka się tu rozmija.

Większość serwerów nie wyciąga 100fps aby obliczyć te właśnie 100 updaterate na sekundę. oznacza to że nie ma szans aby serwer tyle wysłał w rzeczywistości.

Pomyślisz - walnę se 101 updaterate i tak czy siak tyle max pakietów dostanę.

Jak u siebie dasz cl_updaterate 101 to ex_interp będzie 0.009ms - spodziewa się gra że będziesz miał pakiety co 9ms i wszystko będzie cacy. Jednakże serwer ma 50 fps czyli maksymalnie puści 50 pakietów!!! tak więc 2 razy mniej. Co się stanie? Pakiety przychodzą za rzadko i gra nie ma z czego interpolować położenia graczy - masz efekt skaczących modeli. No dobra. dajmy na to że zjadę na 70 - efekt skaczących modeli spadnie. Oczywiście idealnie jak będziemy mieli cl_updaterate 50 - wtedy interp będzie 0.02 i modele nie powinny aż tak skakać (tylko z rzadka z powodu lagów)

  • Ponieważ klient bez rcon'a nie ma jak sprawdzić ile serwer ma fps i se dobrze dobrać tę zmienną, trzeba zgadywać.

Na szczęście można to zrobić doświadczalnie w prosty sposób. 1. zacznij z cl_updaterate 101, ex_interp 0 2. zjeżdżaj z cl_updaterate w dol. (mniej więcej o 10 ) aż zauważysz że modele aż tak bardzo nie skaczą. (tylko z rzadka z powodu zmiany pinga, lagów itp.)

Oczywiście "bardzo nie skaczą" to kwestia gustu. Dopóki ex_interp = 1/cl_updaterate modele będą na swoich rzeczywistych miejscach.

Oznacza to że każdy serwer będzie miał swoje własne ustawienia cl_updaterate zależne od ilości graczy/łącza/fps - po prostu ile w danej chwili serwer może z siebie wycisnąć. Nie bójmy się zejść z wartościami poniżej updaterate 50 bo tak czy siak interpolacja będzie działać.

No dobra, ktoś pomyśli, ale ja wezmę updaterate 20 i będę szedł w gore. No to nie jest dobry pomysł bo ex_interp = 1/cl_updaterate. Jak mamy 20 to ex_interp = 1/20 = 0.05 a jak zwierzymy na 50 to mamy ex_interp = 1/50 = 0.02 a ex intern 0.05 > 0.02 a H-L domyślnie nie zmniejsza sam z siebie interna. wtedy musisz wystukać za kadmy razem ex_interp 0 ręcznie aby obliczyć go.


tak więc widać że istnieje zależność pomiędzy serwer fps, cl_udpaterate i ex_interp 0 razem. najlepiej mieć updaterate równy fps serwera a ex_interp 0

Rekomendacja: cl_updaterate równy fps serwera i nie większy od sv_maxupdaterate.

Końcowa notka: wiele serwerów używa sv_maxupdaterate 30 tak więc cl_updaterate 30 będzie wtedy wartością najlepszą w takiej sytuacji.

sv_maxupdaterate

  • Jak cl_maxupdaterate ale działa na serwer - ile klient maksymalnie może przyjąć od serwera.
  • Szczególnie użyteczna jak serwer nie ma za dobrego łącza.
  • Numer oznacza liczbę pakietów na sekundę jaką serwer może wysłać na sekundę do klienta.
  • przeważnie daje się sv_maxupdaterate 101.

Dlatego jeśli klient ma cl_updaterate 100, a serwer ma sv_maxupdaterate 50, to ten klient i tak nie dostanie więcej niż. te 50.

Rekomendujemy zmieniać jeśli pozwana na to łącze serwera i jego moc procesora.

sys_ticrate

  • Definiuje ile maksymalnie tików na sekundę serwer może przetworzyć. Przekłada się to nie bezpośrednio na ilość klatek na sekundą jakie wyciąga serwer.
  • Domyślnie jest 100, maksymalnie 10 000.

Po co to komu?

Miedzy innymi więcej fps daje ci lepsze poczucie gry. Serwery normalnie maja około 50fps na linuksie i 64 na windowsach - ale czasem spada to do 20-30 to już słabo. Dobre serwery maja tak ustawione ten ticrate aby fps się wahało w granicy 150-180 fps (tzn. ogólnie do 200 fps). Więcej i tak ci nic nie da bo nie zauważysz.

Jak nikogo na serwerze nie ma to powinieneś mieć około 100 albo 60 fps - serwer po prostu nic nie robi jak nikogo na serwerze nie ma, i dopiero zaczyna się grzać jak wejdzie ktoś na serwer. Więc zawsze sprawdzaj fps z graczami na serwerze.

  • Czasem ta komenda nie działa na niektórych platformach.
  • Im większy ticrate tym większe użycie procesora.

Czasem na mapach de_inferno i de_aztec użycie procka skacze czasem do szalonych wartości - ale to mowie - czasem. Oczywiście najlepiej aby mieć w miarę stabilny poziom fps - bo skoki z 100 do 500 i po chwili znowu na 100 nie są przyjemne i wszystko raczej działa gorzej - to zależy od hardware'u Więc lepiej aby mieć mniej ale z mniejszymi fluktuacjami.

  • Jak masz dostęp do rcon to możesz sprawdzić aktualne fps na serwerze wpisując
rcon stats

Aby sprawdzić jakiego kopa dostanie serwer na chwile włącz

rcon sys_ticrate 10000

Jest teraz sprawdzisz rcon stats i twój serwer ma powyżej 100fps to znaczy że boosting działa i się ciesz, inaczej szukaj innych metod poprawy działania sprzętu

  • Zawsze sprawdź stats kilka razy.

Znajdowanie optymalnej wartości wymaga trochę eksperymentów. Najpierw sprawdź czy serwer jest boots'owany, bo inaczej nic ci to nie da.

Pamiętaj że podnoszenie fps powyżej 200 jest zbyteczne ze względów możliwości samej gry i łączy internetowych.

Dodatkowo wyciskanie za dużo fps na maszynie która ma kilka serwerów hlds na sobie jest niekorzystne dla innych serwerów - spowoduje to tylko pogorszenie gry na obu serwerach bo procesor nie będzie wyrabiał. Nie zapominaj że często na serwerach działa też www , mail i ftp.

Nie każdy wie że czasem serwer fps wskazuje na niektóre tylko wartości albo po prostu działa na innych np. na jednej z maszyn zaobserwowano że fps układają się tak: 85, 102, 128, 170, 256 ... i żadnych fps (liczb) miedzy nimi.

Więc jak damy w tym przypadku sys_ticrate 100 to serwer będzie działał na prędkości niższej niż zapodana w tym wypadku będzie to 85 fps

Dlatego lepiej jest dawać sys_ticrate zwiększone o 20 do 50 fps niż. tę którą chcesz osiągnąć np. może się zdarzyć że masz sys_ticrate 150 a serwer będzie wyciągał tylko 128 fps.

rekomendowane: sys_ticrate 110 - 180 w zależności od możliwości twojego sprzętu.


Rekomendujemy sys_ticrate 125, ale lepiej nie przekraczać 200.

fps_max

  • ustawia maksymalna ilość FPS jakie ma serwer wyciągać, ale działa także u gracza, tzn jest to zarówno zmienna klienta jak i serwera. Zależy ona od sys_ticrate -im większe sys_ticrate tym większe fps_max można wycisnąć. Domyślnie serwera stara się wycisnąć 100fps przy pełnym obciążeniu. Jednakże nieraz ta wartość spada jak serwer nie wyrabia.
  • ustawiamy pewna wartość jak poniżej ( wartośc 100 jest wartością domyślną na serwerach) w server.cfg
fps_max 100
  • nie opłaca się ustawiać raczej fps więcej niż 200, w rzeczywistości aktualnie zoptymalizowane binarki HLDS spokojnie wyciągają i działają ładnie na fps_max 125
  • ilość fps na serwerze zależy od ilości graczy, i można ją sprawdzić komendą stats
  • pamiętaj, że jak nikogo na serwerze nie ma albo jest jeden gracz to ilość fps będzie różnie skakać i nie osiągnie wartości 100 - dlatego ilość fps sprawdzaj najlepiej przy pełnym obciążeniu serwera.

ex_interp

  • interpolacja czyli przybliżenie wartości korzystając z co najmniej 2 wartości granicznych

np. średnia ocen w szkole to interpolacja .... :D

  • często blokowany prze HLGuard w celu zapobieganiu nadużyciom (dość często niesłusznie blokowany).

Czemu to służy? W idealnym ustawieniu miałbyś nieskończoną liczbę synchronizacji i byś wiedział gdzie jest przeciwnik. Oczywiste internet na to ci nie pozwoli i dostaniesz tylko skończoną liczbę pakietów. Najłatwiej tu jest się posłużyć interpolacją koła. Masz kolo - idealny kształt rzeczywisty. Ale ty masz skończoną liczbę kresek do wykorzystania. tak więc wpisujesz wielokąt foremny aby jak najbardziej upodobnić go do kola Z daleka patrząc nie zauważysz różnicy czy masz wielokąt o 100 bokach czy kolo no ale jak usiądziesz z lupa to się kapniesz :D Przeważnie w CS mamy wielokąt o 20 bokach no i tu widać że nie zawsze pozycja gracza jest pozycja realna gracza.

Na szczęście do gry to starcza gdyż działa interpolacja - wszelkie pozycje gdzie nie masz informacji gdzie się znajduje gracz sa interpolowane. Po prostu modele na ekranie nie skaczą, tylko poruszają się płynnie bo są interpolowane bazując na pakietach jakie otrzymujesz od serwera.

  • Oznacza to przedział czasowy do wykorzystania przez grę - jako ułamek sekundy.

Domyślnie jest to maksymalnie 0.1 Czyli 100 ms - oznacza to że jeśli nie dostaniesz pakietu o położeniu gracza w ciągu 100ms to H-L będzie Obliczał gdzie on się znajduje.

  • Normalnie ex_interp powinien być równy lub troszkę większy od 1/cl_updaterate
  • Niektórzy rekomendują ex_interp 0

wtedy H-L sam obliczy tę wartość i ci powie że "ex_interp forced to msec" tylko że jest problem

  1. jak zmieniasz jakkolwiek cl_updaterate to potem musisz wywołać ex_interp 0 aby to obliczył
  2. jak masz ex_interp 0 to modela mogą zacząć skakać - bo pakiety się spóźniają, to normalne.

Maksymalnie ex_interp ma 0.1 czyli 100 milisekund - to jest dużo. Najczęściej jak masz cl_updaterate 20 to masz ex_interp 0.05 - oczywiście im większy update tym mniejsza liczba

Niektórzy tylko rekomendują operowanie cl_updaterate i zostawianie ex_interp'a w spokoju aby sam się kalkulował... no ale jesteśmy na polskich łączach...

  • Czasem wartości ex_interp poniżej 1/cl_updaterate nie da się ustawić.

Czasem wartości powyżej 1/cl_updaterate są uważane za exploit gdyż powoduje to, że musisz strzelać za rzeczywistym modelem - dlatego jest efekt spóźniony headshot'ów - koleś przebiegł, ty strzeliłeś gdzie on "był" i dostał heda, a krew sika z pustki

Ja sugeruje popatrzeć ile ex_interp 0 wyliczy i potem dodać ręcznie +0.01, np. cl_updatertae 20 => ex_interp 0.05, dodajemy i mamy ex_interp 0.06 efektu spóźnionych hedów nie powinno być tak wiele i modele nie powinny aż tak bardzo skakać - no chyba że lagi :D. Natomiast modele nie biegają na tyle wcześnie aby inni uważali że oszukujesz. Ja uważam że dodanie 0.01 to nie jest expliotem bo netcode nie jest idealny, szczególnie jak na polskie warunki

Moim zdaniem exploitem jest jak gracz ma cl_updaterate 101 i wtedy powinien mieć ex_interp 0.009 (no powiedzmy 0.01) a w rzeczywistości używa ex_interp 0.1 czyli 10x większego!!!

Rekomendacja ostateczna ex_interp 0.1 czyli nie dotykać - wtedy HLGuard i jego blokowanie zmiennych nie będzie tak uciążliwe.

rate

Jest to ile bajtów możesz przesłać do serwera. maksymalnie jest 20000, bo wyżej H-L nie wyciągnie. standardowo jest chyba 5000 albo i mniej ale np. clanbase używa 9999.

Rekomendujemy zatem albo 9999 albo 20000 jeśli serwer pozwala, ew jeśli masz słabe łącze to nie więcej niż 80% twojego uploadu.

sv_maxrate

Domyślnie jest równe 0 co nie oznacza że jest najlepiej.

Dlaczego? sv_maxrate 0 wykryje rate każdego gracza i będzie się starało spełnić wymogi gracza.

Teraz załóżmy że H-L daje możliwość dania rate powyżej 20 kafli, a jakiś gracz ma fantazję i walnie ostrą wartość np. 9999999999 (kosmiczna liczba). Serwer w tym przypadku próbowałby wypchać tę kosmiczną ilość danych do tego gracza i tylko by marnował łącze do tej osoby bo i tak tyle nie wyśle, a reszta będzie lagowana bo nie dostanie nic.

  • Dodatkowo, dzięki ustawieniu wartości sv_maxrate możemy przewidywać maksymalne użycie łącza na miesiąc - jeśli płacimy za transfer w GB.

Rekomendujemy dlatego ustawiać sv_maxrate na 20000.

LAN

No a jak grac na LAN'ie?

organizacje typu CPL używają cl_updaterate 101 gdyż to się wiąże z jakością posiadanych przez nich serwerów - silne maszyny z booster'ami na bardzo dobrych łączach.

Aby łatwo się przekonać czy serwer na lanie jest z booster'em - popatrz na ping graczy z lan'u.

  • normalny serwer bez booster'a na 60-65 fps powoduje że gracze maja pingi powyżej 15ms.
  • jak serwer ma więcej fps ( np ma booster'a) to pingi są o wiele mniejsze - przeważnie w granicy 5ms.

Wiadomo że CPL, ESWC i WCG używają serwerów z booster'ami bo ich na to stać.

Podziękowania

Podziękowania dla:

translated from english by _KaszpiR_

9 May 2004

Osobiste
Przestrzenie nazw
Warianty
Działania
HLDS.pl - Menu:
Inne
IRC
Inne sekcje:
Znajomi:
Narzędzia