WSZYSTKIE ZMIANY W PLIKACH KONFIGURACYJNYCH PRZEDSTAWIONE W TYM TEMACIE SĄ WPROWADZANE NA WŁASNĄ ODPOWIEDZIALNOŚĆ! NIKT NIE POWIEDZIAŁ, ŻE PUNKBUSTER NIE ZACZNIE ZA TO BANOWAĆ!
TOPIC POWSTAŁ ZA PRZYZWOLENIEM TOM@SA. WSZEKIE KŁÓTNIE / OBRAŻANIE / ITP. BĘDĄ MODEROWANE, A DLA NAJAMBITNIEJSZYCH NAGRODA W POSTACI BANANA!
Nadszedł czas na rozwianie tajemnicy, wielkiego tabu, panaceum i "zmory" freeplay'owców! Za chwilę dowiecie się wszystkiego o pliku
Usersettings.con i jego modyfikacji: co, gdzie, jak i dlaczego. Na początek jednak przyjrzyjmy się standardowej zawartości tego pliku:
Usersettings.con napisał(a):
rem
rem Settingsfile automatically saved by bf2
rem
SettingsManager.boolSet GSClPunkBuster 1
SettingsManager.floatSet GSDefaultLatencyCompensation 0.100000
SettingsManager.boolSet GSExtrapolateFrame 0
SettingsManager.U32Set GSExtrapolationTime 1200
SettingsManager.U32Set GSInterpolationTime 100
SettingsManager.U32Set GSPerfLogAtPlayerCount 30
SettingsManager.stringSet GSPlayerName "PlayerName"
SettingsManager.boolSet GSShowNetGraph 0
SettingsManager.boolSet GSUseObjectCache 1
Plik znajdziecie w katalogu z grą w ścieżce /mods/bf2/Settings.
Wygląda to jak kupa niewiele mówiących nam nazw i cyferek (z przewagą kupy, ofkoz
). W programach (w tym szczególnym przypadku jest to gra) nazywamy je zmiennymi. Tak więc po prawej mamy nazwy zmiennych, a po ich lewej stronie ich wartości. W nazwie po kropce jest podana tzw. funkcja składowa klasy SettingsManager, która składa się z dwóch części:
1. typ zmiennej (bool, float, U32) - określa jakie wartości można do niej wpisywać, bądź z niej wydobywać; np. bool przyjmuje wartości 0 i 1, a float wartości zmiennoprzecinkowe
2. operacja, która ma zostać wykonana - Set (ustaw) bądź Get (pobierz)
Tyle jeśli chodzi o typowo programistyczne podejście do owego pliku. Przejdźmy do mięska.
SettingsManager.boolSet GSClPunkBuster 1Jest to zmienna, która odpowiada za to, czy włączony jest w naszej grze PunkBuster Client. Wartość tej zmiennej możemy ustawić z poziomu gry nawet przez GUI! Pod listą serwerów MP jest takie cuś do zaznaczenia (tzw. check box) gdzie możemy włączać/wyłączać używanie PB. Jeśli ustawimy ją na 0, to nie będziemy mogli wejść na serwery z włączonym PB. Wniosek: zostawiamy jedynkę.
SettingsManager.floatSet GSDefaultLatencyCompensation 0.100000Ta zmienna odpowiada za ustawinie domyślnej kompensacji opóźnień (SIC!). Jaśniej? Czy zdarza się Wam strzelać prosto w kolesia i nie trafiać, a po strzale "za niego" (przeciwnie do kierunku, w którym się porusza) zaliczyć trafienie? To jest właśnie efekt opóźnień. Sam proces kompensacji jest dosyć skomplikowany i nie zamierzam nawet wdawać się w dyskusję na ten temat. Jedno jest pewne: wartość powinna być ustawiona na taką, żeby pokrywała się ze średnim ping'iem do serwera, na którym gracie. Jak sprawdzić jaki jest średni ping? Taką oto sentencję (np. dla NSZ):
CMD LINE napisał(a):
ping -t 193.33.34.11
wpisujemy w lini komend Windows (Start -> Uruchom -> cmd). Naciskamy ENTER i czekamy z 30 s. Następnie naciskamy Ctrl+C i w statystykach jest wypisany średni ping do serwera. Ten wpisujemy w wartości zmiennej "po kropce" z tym, że jeżeli jest mniejszy od 100, to dodajemy na początku ping'a "0".
Wszystko ładnie, pięknie, ale... No właśnie jest jedno "ale". Do niedawna myślałem, że to "coś daje". Niestety tak nie było, do momentu, kiedy kr0pek podesłał mi "magiczną zmienną", która przemieniała żabsko w królewnę...
SettingsManager.boolSet GSUseLatencyCompensation 1Tej zmiennej nie ma standardowo w
Usersettings.con - trzeba ją dopisać ręcznie! Cały pic polega na tym, że standardowo wartość tej zmiennej jest ustawiona na "0". Ludzie kumający troszkę "englisz" wiedzą już zapewne do czego ona służy. Tak, tak... Włącza ona używanie komendy opisanej wyżej! Dlatego ludzie, którzy jej nie używali doznawali efektu "placebo" - ustawiali poprzednią zmienną i jarali się tym, jak to fajnie im się gra, a wrzeczyistości grali "na standardzie".
Po ustawieniu w/w komend strzela nam się o wiele lepiej,
jeśli jesteśmy zwolennikami strzelania w kolesia, a nie szukania jego hitbox'a! Ludzie, którzy nauczyli się strzelać "za" będą musieli się oduczyć złych nawyków.
SettingsManager.boolSet GSExtrapolateFrame 0Ta zmienna oddziaływuje na kolejną (o niej za chwilę) - tak jak w poprzednim przypadku (zmienna typu bool) włącza/wyłącza (1/0) tzw. extrapolację ramki.
SettingsManager.U32Set GSExtrapolationTime 1200Ta zmienna, prawdopodobnie, ustawia czas, po jakim nasz komputer wyświetli na ekranie dane z buffor'a (którego wielkość (czas) jest determinowana przez następną zmienną) kiedy nie otrzyma kolejnych danych o pozycji celu od serwera. Troszkę to zamieszane, ale zaraz powinno się rozjaśnić...
SettingsManager.U32Set GSInterpolationTime 100I tutaj tkwi diabełek. Interpolacja jest związana z przewidywaniem pozycji celu podczas przerwy w dostępie danych, determinowanej przez ping (ping = 30 to 30 ms przerwy w otrzymywaniu danych). Bez tej techniki nie byłoby możliwe osiągnięcie płynności podczas gry przez internet. Ludziki poruszały by się punktowo zamiast liniowo. Natomiast sama zmienna definiuje wielkość buffor'a. Im większa jest, tym większy może być odstęp pomiędzy kolejnymi pakietami z serwera. Ale nie ma róży bez kolców... Nasz komputer
przewiduje, a więc nie wie na pewno. Dlatego strzelając w kolesia "na interpolacji" możemy strzelać tak na prawdę w powietrze i serwer nam tego nie zaliczy...
Jak ustawiać te trzy zmienne? Na początek można włączyć pierwszą i zmniejszyć dwie kolejne do wartości średniego pinga. Można także zmniejszać extrapolację i zwiększać interpolację. Osobiście na ustawieniu kolejno 1,10,200 strzelało mi się świetnie - headshot'y leciały jak złoto i w ogóle... Niestety - manipulowanie tymi dwiema zmiennymi jest jak obusieczny miecz. Jeżeli chcecie strzelać celniej, to musicie się przygotować na to, że w Was też będzie wszystko wchodzić jak w masło. Jeżeli wykombinujecie tak, że będzie się z Was strasznie "dymić", czyli trudno będzie Was trafić, to Wam też będzie się strzelać do kitu. Osobiście mam te opcje zostawione na default - jak ktoś chce, to może kombinować. Powiem tylko, że zmiana wpływa na częstość występowania "dymów", ale hitbox'a nie przesuwa nawet o milimetr.
SettingsManager.U32Set GSPerfLogAtPlayerCount 30Nie mam zielonego pojęcia do czego to służy...
SettingsManager.stringSet GSPlayerName "PlayerName"Nazwa ostatnio używanego konta
SettingsManager.boolSet GSShowNetGraph 0Po zmianie na "1" "powinno" wyświetlić graficzną reprezentację połączenia sieciowego z serwerem (gracze CS'a powinni wiedzieć o co chodzi), jednak... nie wyświetla.
SettingsManager.boolSet GSUseObjectCache 1Ta zmienna mówi, czy gra powinna ładować do RAM'u od razu wszystkie obiekty na mapie, czy robić to w momencie, kiedy je widzimy. Tutaj gracze RO powinni wiedzieć "o co B"
Tych czterech zmiennych chyba nikt nie zmienia, bo nie ma to wpływu na "trafialność".
I to by było na tyle moi drodzy. Pozostaje tylko zmienić atrybuty pliku na "Tylko do oczytu" i ruszać na serwery! Niektórzy pewno zastanawiają się teraz, gdzie do cholery jest to przesuwanie hitbox'a. Mogę powiedzieć tyle, że tutaj tego nie ma. Można zainteresować się programami do zarządzania siecią, którymi bawią się zagraniczni gracze, typu NetLimiter itp., ale sami przyznacie, że to już lekkie przegięcie.
Na koniec podaję Wam mojego, aktualnego konfiga:
jason's cfg napisał(a):
rem
rem Settingsfile automatically saved by bf2
rem
SettingsManager.boolSet GSClPunkBuster 1
SettingsManager.boolSet GSUseLatencyCompensation 1
SettingsManager.floatSet GSDefaultLatencyCompensation 0.030000
SettingsManager.boolSet GSExtrapolateFrame 0
SettingsManager.U32Set GSExtrapolationTime 1200
SettingsManager.U32Set GSInterpolationTime 100
SettingsManager.U32Set GSPerfLogAtPlayerCount 30
SettingsManager.stringSet GSPlayerName "manticore.X5#452"
SettingsManager.boolSet GSShowNetGraph 0
SettingsManager.boolSet GSUseObjectCache 1
Mam nadzieję, że udało mi się wytłumaczyć Wam na czym polega edycja pliku
Usersettings.con i jakie korzyści oraz straty można osiągnąć. Mam także cichą nadzieję, że ten temat ukruci dyskusje na temat tego legendarnego już pliku. Jeśli macie jakieś pytania lub poprawki do tego tutorial'a, to postujcie - byle z głową
Peace.Out.