Hi!
Minęło już sporo czasu od wprowadzenia SteamCMD i obecnie większość serwerów CS 1.6 jest uruchomionych na wersji silnika pochodzącej z właśnie tej platformy. W tej edycji engine HLDS ulepszono wiele funkcji, zlikwidowano wiele bugów lecz podczas wprowadzania jednej z nowości powstał dość poważny błąd, o którym producent gry wie ale wciąż milczy...
Istota problemu
Jakich wersji silnika gry to dotyczy?
6027 i w górę, obecnie 6132 oraz 6153
Jak sprawdzić wersję serwera?
Wejdź na serwer i wpisz "status" w konsolę gry
Jeżeli masz wersje silnika wyżej wypisaną i istnieją u Ciebie problemy typu zacinający się karabin podczas strzelania bądź chcesz strzelić - naciskasz klawisz ze zbindowanym +attack (pozdrawiamy strzelających [ENTER]em ) i wciąż nie strzela, to ten poradnik jest właśnie dla Ciebie.
Jak ten błąd wygląda, jak udowodnić jego istnienie?
Pozwolę posłużyć się cytatem, kopiując moją wypowiedź z innego tematu:
Na chmurze Pukawki utworzyłem dwa serwery, jeden engine 5787 a drugi to była kopia pierwszego, tylko z nową wersją silnika - 6027 (co zresztą nie ma znaczenia, 6132 zachowuje się identycznie). Ustawiłem mp_startmoney na 16000 oraz uruchomiłem mapę de_aztec, dołączyłem do serwera i respawnowałem się jako CT. Kupiłem M4 z pełnym pakietem broni, wystrzeliwałem wszystkie naboje na respie po czym restartowałem rundę na serwerze i robiłem analogicznie jak w pierwszej rundzie.
Dodatkowo można na ten temat wiele znaleźć w internecie: https://www.google.p...q=hlds 6027 lag
Skąd taki błąd?
W starszych wersjach silnika HLDS cała komunikacja sieciowa serwer <===> gracze opierała się na generowanych klatkach serwera, z angielskiego FPS. Takie rozwiązanie ma minus, mianowicie gdy serwer HLDS jest mocno obciążony i jest mało FPS to pingi graczy idą w górę oraz celność się pogarsza. Skoki FPS również widać na skokach pingów. Można to zauważyć np. na mapie de_aztec.
W changelogu od VALVE wygląda to następująco:
Improved firing behavior in Counter-Strike, Counter-Strike:Condition Zero and Half-Life Deathmatch, it is no longer dependant on client or server frame rate. This change needs both your client and server updates to see the improvements.
Podsumowując, w wersjach ze STEAMCMD kod sieciowy gry został tak przepisany aby jego funkcje były wywoływane niezależnie od funkcji odpowiedzialnych za klatki serwera. To w nim jest błąd.
Naprawa celności na serwerze
Jak to zrobić?
Najlepszym sposobem na poprawienie celności na serwerze jest przywrócenie serwera do wersji w której netcode był stricte połączony z FPS serwera. Ostatnią wersją jest 5758 którą polecam użyć.
W załączniku znajduje się paczka specjalnie przeznaczona do downgrade serwera na starą wersję engine. Zawiera ona:
- pliki engine dzięki którym serwer będzie działać w starej wersji, wersja 5758
- plik engine z wbudowanym patchem przeciwko atakowi DDoS na serwer
- pliki hamsandwicha z wersji 1.8.1, możesz spokojnie używac amxmodx 1.8.2 i nowszych na tej wersji hlds
Paczkę należy pobrać, rozpakować i wysłać na serwer z nadpisaniem plików. Po restarcie serwer powinien być już w wersji 5758.
Konfiguracja serwera
Kolejnym ważnym aspektem jest poprawne ustawienie serwera. Najważniejsza jest dość szybka wymiana danych (uniknięcie choke) oraz utrzymanie wysokiej stabilności FPS aby nie było ślepaków oraz skaczących pingów.
Pingboost
W ścieżce startowej możemy włączyć "dopalacz" pingboost, który w rzeczywistości więcej szkodzi niż pomaga. Serwer HLDS jest starą aplikacją, pisaną w momencie zupełnie innych dostępnych architektur sprzętowych przez co nie potrafi skorzystać z możliwości obecnych procesorów. Magia obecnej generacji procesorów to zestawy dodatkowych instrukcji dla CPU aby w jednym cyklu procesora można było wykonać więcej, niż bez nich. HLDS nie korzysta z nich w ogóle...
Jak wspomniałem, serwera HLDS nie należy wysilać ani dopuszczać do skoków FPS. Jedyną rozsądną wartością pingboost jest 0. Nie interesują nas przecież sztucznie zaniżone cyferki w tabeli tylko na płynnej grze, tak?
Ustawienia rate do server.cfg
Najniższymi sensownymi ustawieniami do serwera są:
sv_minrate 30000
sv_maxrate 45000
sv_minupdaterate 45
sv_maxupdaterate 102
sys_ticrate 300
Jeżeli masz serwer kupiony w "dobrej" firmie, a na serwerze występuje przy powyższych ustawieniach choke u graczy to spróbuj tych:
sv_minrate 70000
sv_maxrate 100000
sv_minupdaterate 45
sv_maxupdaterate 102
sys_ticrate 300
Uwaga! Nie zwiększaj bez celu sys_ticrate na większy. Więcej nie znaczy lepiej. Nie daj się zaślepić marketingowymi tekstami firm hostingowych o możliwych wartościach tego cvara. Najważniejsza jest stabilność.
Do serwera publicznego wystarczy w zupełności 300FPS.
DPROTO
Od wersji 5758 minęło już sporo czasu, przez który znaleziono wiele exploitów. Aby ustrzec się przed błędami należy mieć w miarę nowe dproto. Od siebie polecam najnowsze obecnie dostępne (0.9.391) gdyż poprawia ważny bug z możliwością zawieszenia serwera (zawieszenia - "freeze" - nie crash, trzeba serwer restartować ręcznie z panelu). Jako ciekawostkę powiem że engine ze STEAMCMD też jest na ten błąd podatne.
Dproto w aktualnej wersji znajduje się w załącznikach do tego tematu.
Podsumowanie
Na tą chwilę VALVE nie zamierza nic z tym błędem robić. Chodzą pogłoski że bug ten jest specjalnie wprowadzony aby zmusić przerzucenia się graczy na CS:GO...
W następnym poradniku poruszę temat optymalizacji serwera na silniku STEAMCMD. Istnieje szansa na wyeliminowanie bugu o którym piszę w tym temacie, ale o tym przeczytacie w kolejnym poradniku.
Pozdrawiam!