Ce este ping și ce mănâncă

Ce este PING și ce mănâncă?

Am decis să joace Counter-Strike: Source, pentru a vedea și de a înțelege funcționarea jocului și, dacă este posibil, uita-te pentru piese care ar fi frumos să știu atunci când joacă Counter-Strike: Source. Și acest lucru a condus la faptul că le-am găsit. Unele dintre ele dificil, unele usor, unele interesante, dar cel mai plictisitor =).
    Următoarele trei situații descrise, pe care le voi explica acum.
  1. Tu ieși din spatele de perete / colț al casetei și apoi du-te repede înapoi. Nu vezi inamicul, dar primiți daune.
  2. Ai alerga în jurul valorii de colț la inamic plantat un clip plin și să moară în ea. După aceea, se va deschide consola și a vedea ce la lovit doar de două ori, în ciuda faptului că a fost lansat un clip plin de aproape.
  3. Tu trage inamicul, pentru a primi - puteți vedea că corpul său în jurul și există sânge, dar în cele din urmă a lovit nu au fost înregistrate, iar inamicul nu va primi nici un prejudiciu.
Am petrecut aproximativ o săptămână pentru teste pentru a înțelege de ce există astfel de situații și dacă acestea sunt erori de supape. Următoarele concluzii și observații, la care am venit pentru testul săptămânal al jocului, voi încerca să citesc cât mai mult posibil mod accesibil pentru cititorul obișnuit.

Deci, pentru a începe cu câteva definiții:
Latency (ping) - Ping - perioada de timp pentru care pachetul trimis de la computer merge la server (și vice-versa). în milisecunde
Server - Server - server dedicat pe Internet, situat pe orice computer.
Client Client - un joc care rulează pe computer. Clientul se conectează la server. Pe serverul poate stabili numărul de posibili clienți conectați.
Traiectoria Shot - Traiectoria o lovitură - linie între capătul botului de arma, iar locul unde glonțul tău a plecat.
Hitbox - succes de box - model de jucători în Counter-Strike: Source sunt împărțite în așa-numitele hitboxes (hitboxes), care blochează diferite părți ale modelului. Într-un model, există multe hitbox. Dacă trage o cutie de ocurență, valoarea sănătății și a jucătorului bronyai scade.

CS: Source - Noțiuni de bază
În absolut orice shooter 3D în rețea, problema principală, care este rezolvată în primul rând, este Ping. Fiecare jucător trebuie, de asemenea, a se vedea ceea ce văd și rivalii săi. Pretendenți trebuie să se deplaseze lin, fără labagii și întârzieri - pentru că, de fapt, jocul este actualizat periodic, iar timpul între trimiterea și primirea pachetului poate fi uneori decalaj foarte mult timp.

unele informații
Poziția pe hartă de pe ecran despre tine este pe server și tu, de asemenea, pe alte ecrane clienții nu vor mai fi la fel. Acest lucru se datorează întârzierii, datorită faptului că computerul trimite pachetul la serverul cu informații despre locația dvs., serverul simulează, așa cum ar fi fost cadrul jocului, actualizări la informații despre tine, și apoi trimite informații despre tine cu alți clienți, și pe care le primesc și actualizare are informații despre tine acasă. Această problemă în legătură cu faptul că aveți pe ecran, totul pare neted, este o imagine neplăcută.

Ce este ping și ce mănâncă
Un astfel de model este uneori văzut în joc, de multe ori ceea ce duce la dezorientare jucători.

Situația 1 "Slide Show of hitbox":

„Tu ieși din spatele de perete / colț al casetei și apoi du-te repede înapoi. Nu vezi inamicul, dar veți obține daune. "

explicaţie:
Pentru a explica motivul pentru care un astfel de comportament de joc, trebuie să luăm în considerare tot ceea ce se întâmplă pe computer, pe calculatorul server și pe computerele altor jucători.
    Lucrurile trebuie să știți înainte de a merge mai departe
  • daune real (sau localizarea hitbox în cazul în care acest lucru mai clar) sunt calculate pe partea de server. Dar, pe partea de client urmărit, de asemenea, poziția hitbox, ci pur și simplu pentru vizualizare (de exemplu, scântei de gloanțe când armura popodanii, Splatters de sânge din organism și așa mai departe.), Dar vom vorbi mai mult atunci când vom ajunge la a treia situație.
  • In mod ideal, schimb de pachete are loc în termen de 30 de milisecunde. Acesta este momentul pentru care serverul poate actualiza informațiile despre tine, si tu - serverul. Dar, în practică, această cifră este de multe ori mai mult, în funcție de ping.
  • Timpul petrecut de client și server pentru a procesa informațiile primite este atât de mică încât nu are nici un sens să se ia în considerare.
Problema în această situație se observă și în cazul în care există o așa-numită „corecție de întârziere (lag)“, care este încorporată în motorul Source. Pentru a înțelege pe deplin de ce acest lucru este necesar, pentru început, vom vedea ce se întâmplă cu jocul, în cazul în care nu există nici o ajustare rămâne în.

0 milisecundă (Scene 1)
Jucător 1: brusc din colț, 2 vede jucatorul, care este staționară.
Server: Nu se întâmplă nimic (pachetul nu a fost încă atins)
Jucător 2: Ar trebui să fie, și nimeni nu se uita

30 milisecunde (Etapa 2)
Jucător 1: merge înapoi la adăpost.
Server: primește un pachet cu informații de la Scena 1 ca jucatorul 1 a ieșit din spatele ascunzătoarea sa, și trimite aceste informații la player 2.
Jucător 2: Nu se întâmplă nimic (amintiți-vă pachetul este de 30 de milisecunde ca player-ul la server, și vice-versa?).

60 milisecunde (Etapa 3)
Jucător 1: pe computer, a ascuns într-un adăpost.
Server: Ia un pachet de la Scenariul 3 la informațiile pe care jucătorul 1 este din nou în spatele capacului (astfel încât datele de server sincronizate și player 1)
Jucător 2: Gets pachetul cu situația vede Jucătorul 1 îl împușcă, dar, desigur, trage într-un spațiu gol, deoarece player-ul deja ca 60 de milisecunde, acum a apărut din nou în adăpostul său.

Să considerăm, pentru claritate, o schemă vizuală

Ce este ping și ce mănâncă
Ei bine, se pare ca urmare a imaginii următoare: Serverul primește informații despre jucătorului 2 fotografii de jucător 1, în timp ce jucătorul 1 este destul de un loc diferit, prin urmare, pagubele provocate de focurile de armă nu sunt numărate. Nu e chiar corect la player 2, deoarece este ceva doar vede în acest moment jucătorului 1.

Și este destul de rezonabil se pune întrebarea: cum să rezolve această problemă? engine-ul Source face următoarele. Și anume, programul calculează traiectoria împușcat 2 player și poartă ei ca în cazul în care el a fost tragere la un jucător adevărat 1, indiferent de locul în care acesta din urmă este acum.
Serverul calculează ideale traiectoriile de fotografii de transfer de valoare bazate pe ping tuturor jucătorilor.

Ce este ping și ce mănâncă
In imagine: hitbox roșu ne arată în cazul în care clientul a fost, când am tras în el. Albastru, de asemenea, arată în cazul în care clientul se află pe server, atunci când (server) a fost informat de fotografii mele. Notă roșu cub-o singură bucată în hitbox roșu. Acesta este locul în care a fost împușcat mea de la clientul meu. Albastru același cub în hitbox albastru - acesta este locul de situația mea a lovit o lovitură, dar ajustate pentru ping meu. Dar este posibil ca traiectoria împușcat pe monitoare de alți jucători a rămas vechi. Încurcată!

Acum, ia în considerare scenele cu „ping de corecție“
0 milisecunde (Scene 1)
Jucător 1: brusc din colț, 2 vede jucatorul, care este staționară.
Server: Nu se întâmplă nimic (pachetul nu a fost încă atins)
Jucător 2: Ar trebui să fie, și nimeni nu se uita

30 milisecunde (Etapa 2)
Jucător 1: du-te înapoi la adăpost
Server: primește un pachet cu informații privind stadiul 1, 1 jucător în aer liber, dar nimeni nu știe despre asta.
Jucător 2: Ar trebui să fie, și nimeni nu se uita

60 milisecunde (Etapa 3)
Jucător 1: ascuns
Server: primește un pachet cu informații despre stadiul 2 (adică serverul este sincronizat cu clientul 1: și aici, și acolo un jucător stă în adăpost)
Jucător 2: 2 jucător primește un pachet cu informații despre stadiul 1 vede jucător 1 șutează la el. Dar atunci când primesc informații despre fotografii, serverul face o corecție în ceea ce privește ping și a jucătorului 2 ia starea de sănătate a jucătorului 1, care la acel moment deja, așa cum am spus, se ascunde. 1 perplex Player.

Acum situația este mai corect, în ciuda faptului că jucătorului 1 a fost deja în ascuns, Jucător 2, văzând lovitura sa, astfel serverul a numărat primul daune. Singura problemă este că primul jucător are daune după ce a fost aplecat, care este deja în adăpost și acest lucru este probabil ca el va scrie ceva familiar pentru toate „modul în care am primit aceste jurnale!“ =). Astfel, „ajustarea GAL-uri“ este că jucătorul 2 este posibil de a provoca daune jucătorului 1 nu este atent la întârzierea între timp, în timp ce se mișcă jucătorului 1 și jucător până când a fost observat 2. Nu este un început prost.

Un alt beneficiu al corecției lag este că acum nu trebuie să țină din vedere scopul de a obține pe ea, iar când doi jucători întâlni nas în nas, atunci jucătorul cu cel mai mic ping nu primește privilegii.

Uita-te la aceste screenshot-uri (obținut prin sv_showimpacts 1). Ele arată diferența dintre pozițiile jucătorilor pe server (hitbox albastru) și client (roșu), iar traiectoria împușcăturii, care este prezentat în cuburi roșu și albastru. Să acorde o atenție - serverul corectat traiectoria împușcat în raport cu inamicul.

Ce este ping și ce mănâncă
Ce este ping și ce mănâncă

2 Situația este „Ce fel de prostii! L-am lăsat în întregul clip „:

„Ai alerga în jurul valorii de colț la inamic plantat un clip plin și să moară în ea. După aceea, se va deschide consola și a vedea ce la lovit doar de două ori, în ciuda faptului că a fost lansat un clip plin de la mică distanță ".

explicaţie:
Această situație apare (similar cu primul exemplu), din cauza întârzierii între întâmplă pe server și calculatorul dvs. lucrurile.

Principalul lucru este de a înțelege că lucrurile care se petrec pe server apar mai devreme decât aveți pe calculator - clientul. Pentru a facilita înțelegerea situației, cu condiția ca atât clienții lag (ping) la fel, asa ca nu deranjez și se calculează corecția dintre cele două mașini.

Deci, atunci când Jucătorul 1 vine la un colț, atunci atât clientul (și jucătorul 1 și 2 player) sunt conștienți de acest lucru, nu există nici o întârziere, atât informațiile sincronizate. Lăsând ambele începe tragere. Acum, din cauza întârzierii (există un schimb de informații cu privire la focurile de armă) fiecare pentru a vedea un alt client de fotografiere este necesar de 60 de milisecunde (amintiți-vă prima situație, precum și pentru a trimite daune. Acest lucru înseamnă că, în timpul până când copiii împărtășesc aceste informații, puteți trage gramada de muniție. și dacă adversarul a început să tragă la o fracțiune de secundă înainte de a (sau chiar mai devreme, dar el trebuie să-ți, să zicem, în cap), și sunt, probabil, mort, dar clientul nu știe încă despre acest lucru deoarece nu ia 60 de milisecunde între momentul în care vedeți inamicul de asemenea! Ca rezultat, serverul ignoră pur și simplu prin toate imaginile eliberate până până când nu ucide, și ucide. Și ai iluzia că ai tras un întreg clip înainte de ucis.

3 Situația "Single shot!":

„Trebuie să trage inamic, pentru a primi - puteți vedea că corpul său în jurul și nu există sânge, dar în cele din urmă nu au fost înregistrate lovit, iar inamicul nu va primi nici un prejudiciu.“

Să examinăm acum modul în care serverul traduce împușcat nostru într-o nouă cale, ținând cont de ajustările. După cum se știe, serverul se ocupă nu numai toate obiectele de pe hartă, poziția modelelor, dar, de asemenea, anima modele (care rulează, mersul pe jos, și așa mai departe.). Când trage, împușcat este difuzat pe server, testate pentru gradul de deteriorare, indiferent în ce poziție a fost modelul. Din cauza întârzierilor în modelul pe server și pe modelul de client sunt rareori în aceleași poziții. De exemplu, animație foarte rar într-un singur cadru, se pare că fiecare postură, în același timp, este un pic de puncte diferite. Animația mai în mișcare este rulat și bombarda. Swing cap, mâini și picioare - toate în mișcare. Se pare că, dacă fotografiați în umăr, împușcat dvs. este transmis la server, în cazul în care modelul, care a fost concediat Ați putea fi deja într-o poziție diferită, de exemplu, capul este pornit în direcția opusă, piciorul mutat și așa mai departe.

Aruncati o privire la screenshot și să vedem și să verifice dacă modelul pe server și pe client și sunt, cu toate acestea, în diverse ipostaze.

Ce este ping și ce mănâncă
Rețineți că diferența dintre pozițiile picioarelor pe server și client semnificativ mai mare (de server - albastru hitbox client - roșu). Shot care a făcut player-ul marcat cu o literă roșie „A“, nu este înregistrată pe server, deci cum e același picior este într-un loc diferit. Dar jucătorul este încrezător că el a fost inamicul.

Și aici este un exemplu tipic, atunci când intră în serverul nu este înregistrat - am trage la marginea unui rucsac (care are în mod natural o poziție diferită atât pe server și pe monitor), iar cutia albastră era pe peretele din spatele, deoarece serverul nu a înregistrat rana.

Ce este ping și ce mănâncă
Dar acest lucru nu este un bug, ci o condiție necesară, cale ușor de implementat, care a trebuit să fie utilizat pentru a crește productivitatea. Pentru a verifica toate imaginile de pe un anumit model, cu toate dispozițiile acesteia pentru fiecare bucată specifică de timp, serverul va trebui sa ma uit si numara toate modelele de întârziere pentru fiecare jucător de pe server.

La 16 server local vor primi următoarele:
16h15 = 240 poziții ale modelelor care trebuie procesate pentru a calcula și de testare pentru a obține că toate modelele au fost în zonele afectate sau nu, și să se înregistreze și să deconecteze hit-uri si rateaza (cel mai rău caz).

Astfel, o astfel de sarcină este pur și simplu imposibil de calculat.

Dar nu uitați că există, de asemenea, situația inversă (e dor de tine pe computer, dar serverul te-a lovit contează), astfel încât fotografierea este nivelat.