Counter-Strike Source. Як потрібно вчитися грати!
Підведення підсумків: Це керівництво було написано для того, щоб пояснити мою концепцію ідеального прицілювання в Контре і я думаю, якщо хтось хечет поліпшити свою гру, йому буде корисно прочитати і засвоїти речі викладені тут. Це моя точка зренія.Ви можете погодитися або нет.Для мене не має значення що ви думаетй якщо тільки ви не можете аргументувати свою думку. Я думаю top CS гравці все ще можуть багато поліпшити своє прицілюванні. Я написав цей посібник, щоб допомогти всім людям бажаючим грати краще тому я думаю що речі викладених вище дають вам принаймні невелику перевагу над гравцями рівного вам рівня не яке використовує ці тактики.
2) Зниження пінгу
Що таке PING і з чим його їдять?
Вирішив я пограти в Counter-Strike: Source, щоб подивитися і зрозуміти принцип роботи самої гри і, по можливості, відшукати фішки, які непогано було б знати при грі в Counter-Strike: Source. І привело це до того, що я їх знайшов. Деякі з них складні, деякі легкі, деякі цікаві, але більшість нудні =).
Нижче описані три ситуації, які я зараз поясню.
Ви виходите з-за рогу стіни / ящика і тут же швидко йдіть назад. Ви не бачите ворога, але при цьому отримуєте пошкодження.
Ви вибігаєте з-за рогу на ворога, висаджуєте в нього всю обойму і вмираєте. Після чого відкриваєте консоль і бачите, що потрапили в нього всього двічі, не дивлячись на те, що випустили в нього всю обойму в упор.
Ви стріляти з ворогом, потрапляєте - бачите, що на його тілі і навколо є кров, але в підсумку потрапляння не були зареєстровані і ворог не отримав жодного ушкодження.
Я витратив на тести близько тижня, щоб зрозуміти, чому трапляються такі ситуації і чи є вони помилками Valve. Описані нижче ув'язнення і спостереження, до яких я прийшов на протязі тижневого тесту гри, я спробую викласти в максимально доступній формі для звичайного читача.
Отже, для початку кілька визначень:
Latency (ping) - пінг - часовий проміжок, за який пакет, відісланий від вашого комп'ютера проходить до сервера (і навпаки). У миллисекундах
Server - Сервер - Виділений сервер в Інтернеті, розташований на якомусь комп'ютері.
Client Клієнт - Гра, запущена на вашому комп'ютері. Клієнт підключається до Сервера. На сервері може виставлятися кількість можливих підключаються клієнтів.
Shot Trajectory - Траєкторія пострілу - Лінія між кінцем дула вашого зброї і місцем, куди потрапила ваша куля.
Hitbox - Хітбокс - моделі гравців в Counter-Strike: Source поділені на так звані Хітбокси (hitboxes), які блокують різні ділянки моделей. В одній моделе існує безліч хітбоксов. Якщо вистрілити в хітбокс, то значення здоров'я та броняі гравця зменшується.
CS: Source - Основи
В абсолютно будь-якому мережевому 3D шутере, головною проблемою, яку вирішують в першу чергу, є пінг. Кожен гравець повинен бачити теж що бачать і його суперники. Суперники ж повинні рухатися плавно, без ривків і затримок - адже насправді гра оновлюється періодично, а час між відправленням і отриманням пакету часом може бути дуже довгим проміжком.
Трохи інформації
На карті Ваша позиція у Вас на моніторі щодо вас же на сервері і вас же на екранах інших клієнтів ніколи не буде однаковою. Це відбувається через затримку, через те, що Ваш комп'ютер відсилає серверу пакет з інформацією про Ваше місцезнаходження, сервер симулює як би кадр гри, оновлює у себе про Вас інформацію, після чого відправляє інформацію про Вас іншим клієнтам, а вони отримують і оновлюють вже про Вас інформацію у себе. Ця проблема в зв'язці з тим, що у вас на екрані все виглядає плавно, становить неприємну картину.
Така картина іноді видно в самій грі, часто приводячи до здивуванню гравців.
1 Ситуація «Слайдшоу з хітбоксов»:
«Ви виходите з-за рогу стіни / ящика і тут же швидко йдіть назад. Ви не бачите ворога, але при цьому ви отримуєте пошкодження. »
пояснення:
Щоб пояснити причину такої поведінки гри, ми повинні взяти до уваги все, що відбувається на Вашому комп'ютері, на комп'ютері сервера і на комп'ютерах інших гравців.
Речі, про які Вам треба знати, перед тим, як я продовжу
Фактичні пошкодження (ну або розташування хітбоксов, якщо так зрозуміліше) прораховуються на стороні сервера. Але на стороні клієнта також відстежується положення хітбоксов, але чисто для візуалізації (скажімо, іскри від куль при поподании в броню, бризки крові з тіла і тд.), Але про це ми докладніше поговоримо, коли дійдемо до третьої ситуації.
В ідеалі обмін пакетами відбувається протягом 30 мілісекунд. Це той час за яке сервер встигає оновити інформацію про Вас, а Ви - про сервер. Але на практиці ця цифра в рази більше, судячи з пінг.
Час, який витрачається клієнтом і сервером на обробку отриманої інформації настільки мало, що його навіть не має сенсу брати до уваги.
Проблема в даній ситуації спостерігається в разі, якщо відбувається так звана «корекція затримок (лагов)», яка вбудована в движок Source. Щоб повністю зрозуміти, навіщо це потрібно, для початку ми подивимося, що відбувається з грою, якщо немає ніякої коригування лагов.
0 мілісекунда (Сцена 1)
Гравець 1: різко виходить з-за рогу, бачить Гравця 2, який знаходиться в нерухомому стані.
Сервер: Нічого не відбувається (Пакет не встиг ще дійти)
Гравець 2: Чи варто і нікого не спостерігає
30 мілісекунд (Сцена 2)
Гравець 1: Іде назад в укриття.
Сервер: отримує пакет з інформацією з Сцени 1 про те, що Гравець 1 вийшов з-за свого укриття і відправляє цю інформацію Гравцеві 2.
Гравець 2: Нічого не відбувається (пам'ятаєте? Пакет йде 30 мілісекунд, як від гравця до сервера, так і навпаки).
60 мілісекунд (Сцена 3)
Гравець 1: у себе на комп'ютері він сховався в своєму укритті.
Сервер: Отримує пакет з Ситуації 3 з інформацією про те, що Гравець 1 знаходиться знову за укриттям (так що дані сервера і Гравця 1 синхронізовані)
Гравець 2: Отримує пакет з Ситуацією 1, бачить Гравця 1, стріляє по ньому, але природно стріляє по порожньому місці, так як гравець вже як 60 мілісекунд назад виявився знову в своєму укритті.
Давайте для наочності розглянемо таку візуальну схему
Ну і виходить в результаті наступна картина: Сервер отримує інформацію про постріли Гравця 2 по Гравцеві 1, в той час як Гравець 1 знаходиться вже зовсім в іншому місці, отже, пошкодження від пострілів не враховуються. Це не дуже-то справедливо, по відношенню до Гравця 2, так як він-то якраз бачить в цей час Гравця 1.
І цілком резонне питання виникає: як вирішувати цю проблему? Движок Source робить наступне. А саме програма прораховує траєкторію пострілу Гравця 2 і переносить її так, як ніби він стріляв в реального Гравця 1, незалежно від того, де останній перебуває зараз.
Сервер вираховує ідеальне значення перенесення траєкторій пострілів, грунтуючись на пінг всіх гравців.
На зображенні: червоний хітбокс показує нам, де знаходився клієнт, коли я стріляв по ньому. Синій же показує, де знаходився клієнт на сервері, коли той (сервер) отримав інформацію про моїх пострілах. Зверніть увагу на червоний цілісний кубик в червоному хітбоксе. Це те місце, куди потрапив мій постріл у мене на клієнті. Синій же кубик в синьому хітбоксе - це ж місце положення попадання від мого пострілу, але з поправкою на мій пінг. Але не виключено, що траєкторія пострілу на моніторах інших гравців так і залишилася старою. Збиває з пантелику!
Тепер розглянемо Сцени з «корекцією Пінг»
0 мілісекунд (Сцена 1)
Гравець 1: різко виходить з-за рогу, бачить гравця 2, який знаходиться в нерухомому стані.
Сервер: Нічого не відбувається (Пакет не встиг дійти)
Гравець 2: Чи варто і нікого не спостерігає
30 мілісекунд (Сцена 2)
Гравець 1: йде назад в укриття
Сервер: отримує пакет з інформацією про сцену 1, Гравець 1 на відкритому просторі, але ще ніхто про це не знає.
Гравець 2: Чи варто і нікого не спостерігає
60 мілісекунд (Сцена 3)
Гравець 1: сховався
Сервер: отримує пакет з інформацією про сцену 2 (тобто сервер синхронізується з клієнтом 1: і там і там гравець 1 сидить в укритті)
Гравець 2: Гравець 2 отримує пакет з інформацією про Сцені 1, бачить Гравця 1, стріляє по ньому. Але при отриманні інформації про постріли, сервер робить корекцію щодо пинга Гравця 2 і забирає здоров'я у Гравця 1, який в цей час вже, як ми сказали, знаходиться в укритті. Гравець 1 в подиві.
Тепер ситуація стає більш справедливою, незважаючи на те що, Гравець 1 знаходився вже в укритті, Гравець 2, помітивши його, вистрілив, тим самим сервер нарахував першому пошкодження. Проблема тільки в тому, що Перший гравець отримує пошкодження вже після того, як висунувся, тобто вже в укритті і з цього швидше за все він напише щось знайоме всім типу «як мене дістали ці лаги!» =). Отже, «коригування лагов» полягає в тому, що у Гравця 2 з'являється можливість наносити пошкодження Гравцеві 1 не звертаючи уваги на затримки між тим, поки рухається Гравець 1 і тим поки його не помітить Гравець 2. Непоганий початок.
Інша користь від корекції лагов полягає в тому, що тепер вам не треба вести приціл за метою, щоб потрапити по ній, і коли два гравці зустрічаються ніс до носа, то гравець з більш низьким пінгом не отримує привілеїв.
Погляньмо на ці скріншоти (отримані завдяки sv_showimpacts 1). На них показана різниця між позиціями гравця на сервері (синій хітбокс) і на клієнті (червоний), і траєкторія пострілу, яка показана червоним і синім кубиком. Звернемо увагу - сервер відкоригував траєкторію пострілу щодо ворога.