Что такое PING и с чем его едят? Решил я поиграть в Counter-Strike: Source, дабы посмотреть и понять принцип работы самой игры и, по возможности, отыскать фишки, которые неплохо было бы знать при игре в Counter-Strike: Source. И привело это к тому, что я их нашел. Некоторые из них сложные, некоторые легкие, некоторые интересные, но большинство скучные =). Ниже описаны три ситуации, которые я сейчас поясню. Вы выходите из-за угла стены/ящика и тут же быстро уходите назад. Вы не видите врага, но при этом получаете повреждения. Вы выбегаете из-за угла на врага, высаживаете в него всю обойму и умираете. После чего открываете консоль и видите, что попали в него всего дважды, не смотря на то, что выпустили в него всю обойму в упор. Вы стреляетесь с врагом, попадаете - видите, что на его теле и вокруг есть кровь, но в итоге попадание не были зарегистрированы и враг не получил ни одного повреждения. Я потратил на тесты около недели, чтобы понять, почему случаются такие ситуации и являются ли они ошибками Valve. Описанные ниже заключения и наблюдения, к которым я пришел на протяжении недельного теста игры, я постараюсь изложить в максимально доступной форме для обыкновенного читателя. Итак, для начала несколько определений: Latency (ping) – пинг - временной промежуток, за который пакет, отосланный от вашего компьютера проходит до сервера (и наоборот). В миллисекундах Server - Сервер – Выделенный сервер в Интернете, расположенный на каком-нибудь компьютере. Client Клиент – Игра, запущенная на вашем компьютере. Клиент подключается к Серверу. На сервере может выставляться количество возможных подключаемых клиентов. Shot Trajectory - Траектория выстрела – Линия между концом дула вашего оружия и местом, куда попала ваша пуля. Hitbox – Хитбокс – модели игроков в Counter-Strike: Source поделены на так называемые Хитбоксы (hitboxes), которые блокируют различные участки моделей. В одной моделе существует множество хитбоксов . Если выстрелить в хитбокс, то значение здоровья и броняи игрока уменьшается. CS:Source – Основы В абсолютно любом сетевом 3D шутере, главной проблемой, которую решают в первую очередь, является пинг. Каждый игрок должен видеть тоже что видят и его соперники. Соперники же должны двигаться плавно, без рывков и задержек – ведь на самом деле игра обновляется периодически, а время между отправкой и получением пакета порой может быть очень длинным промежутком. Немного информации На карте Ваша позиция у Вас на мониторе относительно вас же на сервере и вас же на экранах других клиентов никогда не будет одинаковой. Это происходит по причине задержки, из-за того, что Ваш компьютер отсылает серверу пакет с информацией о Вашем местоположении, сервер симулирует как бы кадр игры, обновляет у себя о Вас информацию, после чего отправляет информацию о Вас другим клиентам, а они получают и обновляют уже о Вас информацию у себя. Эта проблема в связке с тем, что у вас на экране все выглядит плавно, составляет неприятную картину. Ну
и получается в итоге следующая картина: Сервер получает информацию о
выстрелах Игрока 2 по Игроку 1, в то время как Игрок 1 находится уже
совсем в другом месте, следовательно, повреждения от выстрелов не
учитываются. Это не очень-то справедливо, по отношению к Игроку 2, так
как он-то как раз видит в это время Игрока 1. 2 Ситуация «Что за бред! Я в него выпустил всю обойму!»: Отметим,
что разница между позициями ног на сервере и клиенте существенно велика
(сервер – синий хитбокс, клиент - красный). Выстрел, который сделал
игрок, отмечен красной буквой «А», он не будет зарегистрирован на
сервере, так как там эта же нога находится в другом месте. Но игрок
будет уверен, что попал по врагу. Но
это не баг, а необходимый, легко реализуемый путь, который пришлось
использовать для увеличения производительности. Чтобы проверять все
выстрелы по одной определенной модели, учитывая все ее положения за
каждый определенный кусок времени, серверу придется следить или
просчитывать все задержки моделей для каждого игрока на сервере. На 16 местном сервере получится следующее: 16х15=240 позиций моделей, которые надо обработать, просчитать и протестировать на попадания, все ли модели были в зонах попадания или нет, и зарегистрировать и отсечь попадания и промахи (в худшем случае). Таким образом подобная задачу просто нереально просчитать. Но не стоит забывать, что бывают и также обратные ситуации (вы промахиваетесь у себя на компьютере, но сервер засчитывает вам попадание), таким образом стрельба выравнивается. Итого: sv_showimpacts – серверная команда, позволяющая увидеть точные попадания во врага, как на сервере, так и на клиенте. Она, кстати, так же позволяет смотреть, какое оружие, какие поверхности и стены пробивает. Посмотреть точность, аккуратность, разброс и силу пуль. Руки и ноги самые тяжело попадаемые места, из-за их постоянной подвижности. То есть, как было сказано выше, на сервере и клиенте практически всегда они имеют разную позицию (регистрируется всего около 70% попаданий), та же ситуация и с головой. Брызги крови – исключительно клиентская часть, и это вовсе не показатель того, сколько раз Вы попали в игрока. Но, кровь, которая остается на стенах и полу – серверная часть, по ней можно как раз судить о зарегистрированных попаданиях. Искры от бронежилета так же не показатель попадания. Высокий пинг (до поры пока не начнется потеря пакетов и choke) особо не влияет на Вашу игру из-за корректировки лагов. Предел я вам не могу точно назвать (может 100-150), так как протестировать игру на высокий пинг не было возможности. | |
Понравилось:
Категория: Counter-Strike Source
Просмотров: 1379
Комментариев: 0
|