PDA

Zobrazit normální verzi : Co dělají příkazy cl_lc a cl_lw a jaký mají na sebe vliv?



Grakon2702
01-04-18, 00:15
Představte si, že hrajete normálně na serveru. Spatříte nepřítele, namíříte na něj a dejme tomu, že v čase 10:05 stisknete tlačítko myši pro výstřel. Informace o tom, že jste stlačili tlačítko pro střelbu, se zabalí do paketu a odešle na server, kde se má nadále zpracovat. Mezitím, co však paket cestuje světem, hra pořád běží dál a daný nepřítel, na kterého jste vystřelili, se nakonec z pozice vašeho zaměřovače oddálí. Pak však server detekuje příchod vašeho paketu s informacemi o vašem výstřelu v čase 10:06. Server se podívá, zda je ve vašem zaměřovači někdo, koho by měl váš výstřel zasáhnout, ale vidí, že tam nikdo není a proto se váš výstřel vyhodnotí jako minutí, i přesto, že jste střelili přímo do vašeho nepřítele. Tato chyba je napravena pomocí systému tzv. lag kompenzace.

Technologie lag kompenzace běží na straně serveru. Server si zároveň uchovává jednosekundovou historii pozic všech hráčů na serveru. Když váš paket s informacemi o výstřelu dorazí na server, tak si server nejdříve vypočítá, kdy jste vlastně ve skutečnosti vystřelili pomocí následujícího vzorečku:




Čas výstřelu = Momentální čas na serveru - Polovina vašeho momentální pingu - (1 / Vaše hodnota cl_updaterate)



Jakmile server získá skutečný čas vašeho výstřelu, podívá se do své jednosekundové paměti pozic hráčů a až pak začne porovnávat, zda se v konkrétním čase nenacházel ve vašem zaměřovači nepřítel. Tímto je chyba, způsobená odezvou mezi vámi a serverem, napravena a střela skutečně vašeho nepřítele zasáhne.


Příkaz cl_lc 1 vysílá požadavek serveru o tom, aby byly klientovy výstřely napravovány technologií lag kompenzace. Samo o sobě tento příkaz nic nedělá. Lag kompenzace probíhá na serveru. Ten ji může buď poskytovat či nikoliv. Aby mohlo cl_lc 1 fungovat, musel by být nastaven i serverový cvar sv_unlag na hodnotě jedna a tak samo musí mít klient nastavený i příkaz cl_lw 1.


Důvodem, proč bývá manipulace s tímto příkazem na různých turnajích zakázána, je to, že může dojít ke zneužít chyb spojených právě s odezvou mezi vámi a serverem.

Grakon2702
01-04-18, 16:30
Příkaz cl_lw 1 zapíná technologii originálně zvanou "client-side weapon firing prediction", což by se dalo do češtiny nepřímo přeložit jako "technologie chování zbraně z klientovy strany". Tato technologie zaručuje to, že se chování zbraní bude jevit 100% neovlivněné odezvou mezi vámi a serverem.

Představte si, že hrajete normálně na serveru. Spatříte nepřítele, namíříte na něj a dejme tomu, že v čase 10:05 stisknete tlačítko myši pro výstřel. Informace o tom, že jste stlačili tlačítko pro střelbu, se zabalí do paketu a odešle na server, kde se má nadále zpracovat. Server vyhodnotí informace o vašem výstřelu a následně začne vracet zpátky informace o tom, jak se má zbraň při výstřelu chovat, tedy např. jaký má vydat zvuk, jaký má být zpětný náraz, jak má vypadat záblesk výstřelu u hlavně nebo jak má vypadat animace místa, kam má střela dopadnout. Kvůli odezvě mezi vámi a serverem se všechno tohle chování začne jevit se zpožděním, tzn., že se může projevit až v čase 10:06.

Toto je samozřejmě špatně a právě technologie fire predikce tomu zamezuje. Jednoduše to funguje tak, že se informace o výstřelu neposílají na server, ale rovnou jsou zpracovávány na počítači klienta, což znamená, že klient necítí žádnou odezvu.

Tento příkaz ovlivňuje pouze to, co klient vidí. Všechny dopady výstřelů jsou propočítávány na serveru, což znamená, že tento příkaz nemá žádný vliv na reálné dopady střel. Jediným důvodem, proč bývá manipulace s tímto příkazem na různých turnajích zakázána, je to, že s vypnutím této technologie se vypne i technologie lag kompenzace, což už má na reálné dopady střel opravdu vliv.

Pelargos
01-04-18, 17:39
Good job, but...? Čiže čo to pre mňa ako admina znamená? Na viacerých serveroch sú tieto príkazy zakázané a ak má niekto nastavené cl_lc 1 alebo cl_lw 1 spamuje to na serveri "nepovolené nastavenie". Mám to banovať, kickovať, upozorniť hráča nech si to zmení alebo to mám trpieť?

Grakon2702
01-04-18, 17:44
Well, abych řekl pravdu, nevím, kolik by mi zabralo času si nacvičit možnost zneužití těchto příkazů ke svému prospěchu. Pravdou je, že řešit tyto příkazy mělo smysl v dobách dávných, kdy bylo připojení k internetu opravdu hodně špatné a často měli lidé problémy s připojením. Pořád se bavíme o časovém ovlinění v podobě milisekund. Nějaký profesionální hráč, by to možná nějak využít ku prospěchu dokázal, ale dnešní generaci, která je pomalu ráda, že si stáhne nějaký rádoby "pro" konfig z netu, to je spíš více ke škodě než k užitku. Na public serverech bych toto tedy moc neřešil.

Mimochodem hodnota cl_lw a cl_lc má být správně nastavená právě na hodnotě jedna. Tak je to nastavené i defaultně po čerstvé instalaci hry. O možnosti zneužití se bavíme v momentě, kdy je minimálně jeden z těchto příkazů nastaven na hodnotě 0.

Military
17-12-18, 15:20
Môže byť aj nepriame zneužívanie chýb. Ale na tejto hre to nehrozí :)

Táto téma my pripadá jak šitá na mieru pre hru battlefield 3 a battlefield 4. Vystrieľate do nepriateľa 30 striel strieka mu krv z hlavy. A po dvanástom náboji ho začne každý náboj zasahovať. Ale záhadne keď zomriete všetky nasledovné náboje expiruju, už ho po vašej smrti nezastrelia, aj keď ste na 2 metre vystrieľali 15 striel utečie s 70%HP :D Ale na druhú stranu občas to pomáha, keď vás prepadne nepriateľ, beží na vás plná streľba vy sa naňho otočíte 1 náboj a zomrie a ani sa nezdalo že by vás trafil aj keď strieľal a stal pri vás :D

artetias
02-10-21, 12:02
woow thanks!