1. apache

    apache Well-Known Member Команда форума

    Регистрация:
    15 ноя 2012
    Сообщения:
    1.395
    Симпатии:
    480
    Баллы:
    83
    Решил запилить небольшую статью на тему регистрации на игровых серверах. Уже 4 года занимаюсь серваками и кое что разузнал на эту тему. Авось и вы что узнаете для себя. Либо захотите добавить/оспорить.


    ОСТОРОЖНО!!!! МНОГА БУКАВ!!!

    Что такое регистрация?
    Не все вкладывают в это понятие одинаковый смысл. Правильная регистрация (понятным языком) - это соответствие между тем, что видит клиент и что регистрирует сервер. Сервер ведет перманентный обмен информацией с клиентом. Информация эта в ИТ сфере называется пакетами. В тот момент когда вы попадете в игрока, вы скидываете пакет с вашим успешным фрагом серверу. Сервер его регистрирует и защитывает вам попадание. Если пакет по какой-то причине задержался, похерился, то ваш выстрел был впустую. Если вам просто не прет, или на сервере слишком мало нубов, в которых вы способны попасть, к регистрации это не относится. :Lol:

    От чего зависит регистрация?
    • Соединение между клиентом и сервером (Расстояние, скорость соединения)
    • Производительность ПК клиента
    • Оптимизация карты
    • Настройки клиента
    • Мощность сервера

    А теперь все по порядку:
    Соединение.
    Ваша скорость интернета должна позволять вам комфортно играть. Скачки пинга, кратковременные сбои роутера будут создавать проблемы. Если вам важна регистрация, роутер - не самая лучшая вещь. На моем опыте скорость передачи с него не всегда стабильная (вероятно, сбивается волнами вокруг нас). Это незаметно при веб-серфинге, но в игре ощущается довольно плотно.
    Расстояние между сервером и клиентом так же важно. Его можно прикинуть, посмотрев на столбик Latency в таблице счета. На мой взгляд 80 мс - это предел для додса, после которого комфортная игра превращается в раздражение. Хотя Якуты могут нормально раздавать и при пингах 120-150. Но сейчас не об этом. Человек с меньшим пингом, скорее всего, будет вас обыгрывать при равных силах т.к. его пакеты на сервер приходят раньше. А то, что вы тоже попали, и, возможно, даже стреляли раньше, сервер уже узнает после и его это не е**т.

    П.С: реальный пинг можно посмотреть, набрав ping в консоли. Либо сделав трассировку к серверу.
    Производительность ПК клиента
    Очень важно для регистрации. Количество отсылаемых вами пакетов будет <= вашему ФПС (Кол-во кадров в секунду). Если ваш ФПС проседает до 30-ти на открытой местности, то о корректной регистрации стоит забыть. Компьютер просто не генерирует пакеты с правильной скоростью и отсылает их в два раза меньше. При этом потерь пакетов не будет, но результат тот же.
    Оптимизация карты
    Додс весьма отличается от других игр движка сорс в силу своей тематики. Мусор, бочки, ящики, бумага и прочая дребень валяется на картах в больших количествах. При отличной оптимизации карты, вам будет передаваться информация о перемещении лишь тех предметов и игроков, которые находятся в вашем поле видимости или рядом. При хреново оптимизированной карте, вы будете "знать" даже о перемещении маленького ящика на другом конце карты. Не говоря уже о игроках. Это приводит к раздутию пакетов и, как обычно, их потере. Особенно чувствуется в сравнении, например, карты креш (где вся битва происходит на одном холме) с каким нибудь кольмаром - картой на 90% состоящей из коридоров.
    Настройки клиента
    Большинство серверов настроены на тикрейт 66. некоторые на 33, но есть и на 101 (Хотя Вольво давно определила этот тикрейт в мусор на сорс движке и ограничили его средствами движка). Тем не менее, для комфортной игры желательно прописать в консолях:
    Код:
    rate 30000
    cl_cmdrate 101
    cl_updaterate 101
    
    Не переживайте если тикрейт сервера будет меньше чем ваши настройки рейтов. Как правило, сервер их ограничивает самостоятельно, выставляя минимум и максимум, установленный адмистратором сервера. Но до сих пор есть и одаренные сервера, с которых за неверные рейты вас будут кикать "типа " за изменение конфига. Но мы-то знаем, что админ криворукий х*есос.
    Есть и дополнительные команды, типа cl_interp cl_lagcomp_errorcheck cl_lagcompensation, но о них речи пока что не будет.
    Мощность сервера
    Не особо актуально в наши дни. Вполне приемлемый сервер вы можете запустить даже на своем АМД\Интел 4 ядра процессор. На хостингах с мощностью проблем нет. На частных серверах бывает, но бошковитые админы всегда знают что прикупить и где прикрутить. Об этом беспокоиться не стоит. Сюда же относятся т.н. серверные плагины. На медленных серверах они могут убить реистрацию, увеличивая время обработки событий. В наше время так же почти неактуально. В прямом смысле на регистрацию не влияет, так как 90% операций в плагинах происходят на сервере, отсылая клиентам лишь результат действий.

    П.С:
    net_graph 1|2|3 - команда выводит информацию о пакетах, ФПС и прочии полезности. Подробнее об этом в интернете. Например, тут.
    Так же не забывайте каждое утро приносить в жертву Богине Регистрации одного негритенка. Тогда она будет к вам благосклонна и будет радовать вас на протяжении всей жизни.

    [​IMG]
     
    Последнее редактирование: 26 авг 2015
    dimka:>, I7e4eHbKA, Faust и 5 другим нравится это.
  2. apache

    apache Well-Known Member Команда форума

    Регистрация:
    15 ноя 2012
    Сообщения:
    1.395
    Симпатии:
    480
    Баллы:
    83
    * Спасибо за лестные комментарии. Я потер их правда, дабы сохранить целостность статьи. Лучше оставляйте тут вопросики, если имеются.

    Сегодняшняя тема: интерполяция в игре.
    Короткая версия статьи:
    Пишем в консоль cl_interp 0.01 (Либо добавляем в autoexec.cfg).

    Длинная версия статьи:

    Наткнулся сегодня на годную статью про это магическое слово. Статья короткая, без заумностей, и очень доступная пониманию:

    Интерполяция – сложный процесс в игре, который отвечает за приблизительное месторасположение игроков. Изображение, которое вы видите на мониторе не во многом, но все же отличается от действительности. Цифровое значение параметра – это частота, с которой вычисляется новое местонахождение игроков.
    Иными словами – это небольшая лагоконпенсация со стороны клиента. Сделана для того, чтобы люди, у которых большой пинг, не чувствовали большого дискомфорта в игре. Естественно чем значение меньше, тем чаще обновляется местонахождение противника. Иногда, установив самое минимальное значение cl_interp 0.01, мы можем видеть, как моделька слегка телепортируется; в
    то время как со значением cl_interp 0.1, моделька противника бегает плавно. Так вот что бы не было трудно играть с большим пингом, придумали интерполяцию. Благодаря интерполяции 0.01 ваш клиент запрашивает у сервера месторасположения противника намного быстрей, чем это делает клиент противника.
    Своровал тут

    Warning!
    На некоторых серверах за такое значение параметра cl_interp банят. Но по мне так эта команда лишь добавляет комфорта в игре. Кроме того доступна каждому желающему.
    rr.JPG
    В этой же статье есть замечание, которое относится к Counter-Strike GO:
    То есть сами разработчики посчитали нужным снизить этот параметр для всех игроков. А те, у кого пинг повыше сами должны выставить интерполяцию побольше, если конечно не хотят видеть в игре такое:


    Без лишних слов:
    Так не будем же отставать! Пишем в консоль cl_interp 0.01 (Либо добавляем в autoexec.cfg).
     
    I7e4eHbKA и Faust нравится это.
  3. Silver Dragon

    Silver Dragon Пользователь

    Регистрация:
    15 окт 2014
    Сообщения:
    207
    Симпатии:
    132
    Баллы:
    43
    Добавлю от себя замечание о пинге, он же latency.

    Для начала немного о возможности нашего с вами организма. У здорового и трезвого организма время реакции на внешний раздражитель ровняется 3/4 секунды. То есть 0.750 ms.

    Что же такое ping/latency? Это время, за которое информация доходит от сервера до компьютера, на котором мы шпилим в ДОД. Единицы измереня - милисекунды.

    Теперь разберем как происходит процесс игры на сервере. (Очень примитивно, кто хочет полное описание, высылайте пиво).
    1) Сервер шлет нам пакет данных в котором написано что перед нами враг.
    2)Комп отрисовывает врага
    3)Мозг понимает что видит врага и палец жмет кнопочку.
    4)Комп шлет на сервер пакет "я выстрелил"

    Следовательно время от появлении врага перед вами до регистрации убийства проходит 2x Latency + 750 ms.

    Теперь разберем следующий пример:
    Человек с пингом 30 встречает врага с пингом 130. Допустим у обоих игроков реакция примерно одинакова. Следовательно человек с пингом 30 сможет выстрелить на 130×2 — 30×2 ms быстрее. То есть на 200 ms.
    К сожалению наш с вами мозг не способен различить задержку в 1 ms и 200 ms. Шкалой нашего мозга для восприятия времени является шкала с делениями в 750 ms. Следовательно имеем уравнение latency1 * 2 — latency2 * 2 = 750. У такого уравнения бесконечное количество рациональных корней, однако легко заметить что только если разница в.пинге не привышает 375 ms ни у одного из игроков нет преимущества. Мозг в,е равно не способен так быстро реагировать.

    Вввод: разница в пинге до значени 375 не является существенной.

    Теперь разберем пару технических.моментов. все написанное мной выше базировалось на том, что у обоих игроков нет проблем , подключенмем и пинг был разный только вследствии удаления от сервера.

    Если же ваш обычный пинг равен 30 и вдруг он под,кочил до 100- играть вы не ,можете. Все дело в потере данных. Ваша команда "стреляй блеееееаааттььь" просто не дойдет с первого раза до сервера. Да и команда о враге перед вами тоже не дойдет вовремя. Причиной этому является то, что при плохом соединении теряется за раз ПРОИЗВОЛЬНОЕ количетсво пакетов.
    Если бы терялся каждый второй, то не было бы проблем. Ваш пинг бы возрос до 60, но ощутимой разн цы в игре не было бы заметно.

    Количество потерянных пакетов произвольно и не постоянно. Потеряв 10 подряд, следующие 30 подряд могут прийти. Значение пинга, видимое вами в игре это , усредненное значение за промежуток времени. Следовательно потеря 10 из 40 повысит значение пинга на 25%. Однако если попытки выстрелить придутся на эти 10 недошедших пакетов - в момент выстрела ваш пинг теоретически подскочит на 1000%. Именно поэтому так тяжело играть при повышении стандар ного пинга.

    P.S
    Я немного упростил механизм игры на сервере. Есть еще несколько аспектов, , следовательно максимальная "незаметная" разначительно ниже.

    Всем добра и побед :) надеюсь эта статья ответит на вопрос "Как эти читеры играют с таким пингом"
     
    dimka:>, I7e4eHbKA и apache нравится это.
  4. Ухты Пухты

    Ухты Пухты Пользователь

    Регистрация:
    27 мар 2015
    Сообщения:
    24
    Симпатии:
    6
    Баллы:
    3
    Есчо бы про коллизию кадров написали и инкапсуляцию:Biggrin:
     
  5. dimka:>

    dimka:> Пользователь

    Регистрация:
    23 янв 2017
    Сообщения:
    63
    Симпатии:
    60
    Баллы:
    18
    Пол:
    Мужской
    Адрес:
    Эстония
    Ты имеешь в виду, что только при подскоке пинга идет потеря, а не то, что с высоким пингом идет постоянная потеря?
    Как я понимаю, потеря пакетов это loss на net_graph 3? и можно ли доверять значению потери в этой команде?

    А нету ли каких-нибудь лайфхаков с роутером, чтобы он работал постабильнее да получше? Допустим фольгой или чем-то направить сигнал? Я как раз страдаю от плохого и загруженного юзерами роутера и было бы интересно почитать, можно ли было бы что-то с этим сделать?
     
  6. Silver Dragon

    Silver Dragon Пользователь

    Регистрация:
    15 окт 2014
    Сообщения:
    207
    Симпатии:
    132
    Баллы:
    43
    Есть изначальное значение ping, которое зависит почти на 100% от расстояния (длина проводов) до сервера. У меня это значение в районе 120.
    Это время в милисекундах, за которое сервер отвечает на запрос (двинутся, выстрелить) от клиента. Если пакеты теряются, то сервер начинает слать пакеты по второму/третьему разу. Тут же игра начинает дергаться (ведь все пакеты теряются, не только ответы пинга) ну и сам пинг подскакивает.

    Если сеьевое оборудование загружено, пинг возрастет на то время, которое займет у перегруженого раутера, например, обработать и послать пакет дальше.
    Из лайфхаков, я бы поставил значение rate пониже. Rate, cmdrate, updaterate. Если я не ошибаюсь в игре используется в основном UDP пакеты. Если сеть перегружена то первое что будет "выброшено" это как раз udp пакеты. А уж если они еще и часто посылаются, то сам Бог велел их выкидывать. А это приведет к высокому пингу и дерганью.
    Снизив рэйты игра станет плавнее, но рега будет не очень. Запросы редкие, запросто можно не успеть послать запрос на "выстрел" вовремя