Попробуем объяснить все с точки зрения науки.
Теория
Для начала немного теории. Как многие наверняка слышали сервер евы работает "тиками", попытаюсь объяснить что они такое вкратце. Известная вам аббривеатура FPS, она же число кадров в секунду показывает количество обработок игровым движком всякой информации в секунду. Графическое ядро рисует 60 раз в секунду (в идеале), физика может обсчитываться реже, 20 - 30 раз в секунду, например, мгновенная обработка ввода пользователя тоже не во всех играх критична. Так вот ввиду того, что вычисления требуют процессорного времени, а игроков в одной системе и на одном кластере может быть много, то количество обсчетов некоторых игровых событий в еве еще меньше - 1 раз в секунду. По идее это должны быть только те события, которые считаются на стороне сервера. Во первых это события обсчитываемые State машиной, чтобы вам было понятно это такая штука, которая переключает состояние объекта.
То есть у пушки есть несколько состояний:
1. offline
2. online и готова к стрельбе
3. стреляет
4. перегревается
5. перезаряжается
Я не знаю всех состояний корабля, но определенно точно есть:
1. обычное движение
2. разгон до варпа
3. движение в варпе
Могут быть еще состояния, а может не быть какого-то из вышеназванных, это на усмотрение программистов. И эти состояния сервер переключает как раз 1 раз в секунду, на каждый тик.
Еще каждую секунду обсчитывается урон, уведомления, лок и много еще всякого интересного.
Каждый тик сервер обновляет все существующие гриды в системе, если корабль расклочился, то оно появится у всех в овервью только после тика сервера.
Разберем на примере по пунктам с точки зрения обычного кемпа:
1. Фрегат запрыгивает в систему, отдупляется и нажимает кнопку варпа. Информация идет на сервер и ставится в очередь на обработку.
2. ТИК сервера:
а. Сервер меняет состояние фрегата с "отдупление" на "разгон для варпа", отсчет разгона ведется с этого момента.
б. В это же время он обновляет грид ворот (гайки) и фрегат появляется в овервью у кемпера.
в. Кемпер посылает запрос на сервер "начать лок", запрос начинает обрабатываться сразу же.
Здесь может пройти некоторое время, несколько тиков, во время которых все обновляется, но никаких изменений не происходит, до тех пор, пока не завершится лок/отварп.
3а. Если завершился разгон фрегата, то его состояние переключается на "в варпе". Если лок у кемпера тоже завершился где - то в предыдущий тик, то фрегат получит желтый квадрат от кемпера, кемпер получает состояние фрегата но положить поинт уже нельзя.
3б. Если у фрегата нет достаточной скорости, а кемпер его уже залочил, он отправляет запрос на поинт и сразу фрегат будет пойман. На следущем ТИКе фрегат увидит красный квадрат от кемпера и переключение своего состояния обратно в "обычный полет".
Что такое тик вы теперь знаете, идем дальше.
Запрос на сервер:
Сервер обновляет состояние системы 1 раз в секунду, но запросы посылаются ему непрерывно, стоит игроку нажать на кнопку - пойдет запрос на сервер. Сервер принимает запрос и записывает его в очередь на обработку. Из этой очереди он сразу же, моментально забирается процессором для обработки, а обратно клиенту отправляется нужная, в основном для UI, информация. Если обработка запроса завершилась как надо, то на следующий тик все видят результат, если не завершилась - врубается ТД (грубо говоря).
Лаги:
К каждому запросу на сервер приплюсовывается задержка на доставку пакета куда следует, обычная интернетовая задержка. У меня в сибири она равна примерно 50мс, и это очень влияет на итоговый результат, т.к. задержка работает в обе стороны. Задержка на получение информации о появлении фрегата в овервью + задержка на первый запрос на лок + задержка на получение информации о локе + задержка на запрос на поинт, итого 0.2 секунды. И вся задержка кемпера работает на руку фрегату, т.к. ему не нужно посылать больше никаких запросов, кроме самого первого.
Пропинговать сервер евы сейчас нельзя, лавочку прикрыли, но по некоторым сведениям задержка для европы 20-30 секунд, для США 75-80, для австралии 150-200.
Задержки:
Так же есть время человеческой реакции, если слоубро кликает по цели в овервью через 1.5 секунды, то фрегату почти ничего не грозит. Если кликать 10 раз в секунду, то задержка будет от 0 до 100мс, как повезет. На 10 раз в секунду многовато, 2 - 3 раза выглядит более реалистичным, то есть 300 - 500 мс задержки перед отправкой запроса на лок.
Уложились в один тик:
Если возникает вопрос - кто будет первым, если запрос пришел в течении одного тика?
Некоторые заапросы обрабатываются в момент поступления. Если запрос на поинт придет на сервер раньше чем набор фрегатом 75% скорости для отварпа, то поинт ляжет. Урон должен работаетя по такой же схеме. Округление до секунд здесь уже не работает. Кто первый - того и тапки.
Некоторые запросы обрабатываются только во время тика сервера, например начало варпа и лока. Они друг другу не мешают.
В общем случае схема работы такова. по теории вроде все.
Закругляемся?
Раз все так плохо для кемпера, значит поймать фрегат с отварпом менее 2х секунд невозможно? Нет, это миф неизвестного происхождения. Поймать теоритически возможно многое, но практика вносит свои лаговые коррективы.
Округление:
Когда говорят про округление до секунд, имеется в виду округление до тиков. То есть если отварп равен 4.1 секунды то вы будете в варпе только после 5го тика.
Каждый тик происходит проверка - набрал ли корабль 75% скорости для разгона. Если набрал - уходит в варп. Фактически получается что нет смысла просто уменьшать время отварпа, нужно учитывать что оно округлится в большую сторону.
И исходя из вышеизложенного значит ли, что вся агильность корабля округляется? Опять же не факт. Уход в варп не единственное занятие в еве, а по какому принципу работает разгон и томожение при обычном полете я не знаю, но скорее всего берутся не округленные числа, так что 1.1с может быть почти в два раза лучше чем 1.9с (при боевом маневрировании так сказать).
Время лока цели так же округляется. Лок будет завершен только во время слудещего после команды "залочить фрегат" тика. Если лок занимает 1.2 секунды, то возможность послать запрос на поинт появится только после 2го тика.
Что делать?
Сканрез:
Основное оружие кемпера для ловли быстрых и клочных целей это сканрез. Но сканрез лишь половина успеха, есть еще сигнатура, дающие в итоге время лока цели. Если после тика сервера фрегат появился в овервью, то кемпер поймает фрегат если задержка на обновление системы + реакция кемпера + задержка запроса на лок + время на лок цели получаются меньше 1 секунды.
Из всего этого реально можно снизить задержку на реакцию путем более быстрого клацания мышкой по овервью и время на лок цели. Предела для сканреза нет, но есть разумный предел фитинга. Забивать все слоты сенсорбустерами (медслоты), сенсор амплифаерами(лоуслоты) и ригами не очень интересно, разве что от ловящего требуется только залочить и кинуть первый поинт. Если перед кемпом не стоит задача ловить все что движется, то на место сканрезного ловца подойдет любой корабль с длиннными поинтами/сетками и накачкой сканреза с другого корабля.
Почему огромный сканрез нужен? Все из-за округления, если лок цели занимает 1.2 секунды, то сам лок произойдет только на втором тике, не раньше. Но если лок 0.8 секунд, например, то благодаря лагам и реакции игрока сам лок может опять же занять чуть больше 1 секунды и завершиться на втором тике, таким образом время лока из 0.8 растянется до 2х секунд. Увеличивая сканрез, ловящий корабль немного снижает таким образом зависимость от лагов и задержек на реакцию игрока.
Итак, качайте сканрез и ловите.
Где пруфы Билли?
Проведя беглый поиск в интернетах я нашел статью на themittani.com которая ссылается на презентацию CPP Veritas на EVE vegas 2012 о работе сервера . https://www.themitta...ine-server-tick
Плюс в свободное время мною было прочитано множество статей по программированию игр, так что все написанное работает не только в еве, но и во многих других играх и программах.
Так же я много кемпил, ловил множество клочных кораблей, нано интеров и шаттлы. Не заставляю никого рыться в моей кб (она кстати в подписи), если нужны конкретные примеры - они есть.
10.10.15 проведена проверка на тестовом сервере со следущими результатами:
В качестве ловца Claw, сканрез 6372.
1. Цинабал с отварпом 2с и 1.4с ловится стабильно.
2. Драмиэль с отварпом 1.9с и 1.1с ловится стабильно.
3. Драмиэль с отварпом 1.9 и сигнатурой 20.2 по eft ловится только в 30% случаев. Лок по ней около 0.5 секунд.
4. Шаттл обычный ловится стабильно.
5. Шаттл с сигнатурой 16.9 (округлено самой евой до 16 в окне фиттинга) не ловится вообще. Лок по нему около 0.8 секунд.
6. Геката с отварпом 1.1с ловится стабильно.
7. Геката с отварпом 1с не ловится.
Почти в каждом случае не было 100% результата, но отклонения можно списать на человеческий фактор и возможно нестабильную работу тестового сервера.
Так же было выяснено что оружие не имеет никакого приоритета и его возможно активировать только по цели не находящейся в варпе.
Дальше попытаюсь ответить на часто возникающие вопросы:
Лечу я такой с ковроклокой, и тут бац - поинт
Нельзя запустить ковроклоку прям из послегейтовой клоки, и в результате есть три варианта развития событий:
1. Игрок нажимает на клоку через 0 целых хрен десятых секунд - транспорт клочится и уходит в варп спокойно.
2. Игрок нажимает на клоку сильно рано после алайна, ответ от сервера не успевает прийти с сервера и разблокировать кнопки. И при нажатии на кнопку клоки она не посылает ничего на сервер, клока не активируется, транспорт ловится.
3. Игрок нажимает на клоку слишком поздно, он успевает появиться в овервью и быть тупо залоченным без особых хитростей.
4. Игрок может случайно (или специально) два раза нажать по кнопке с клокой, из-за чего она включается и выключается сразу же.
Последние три варианта происходят довольно часто, так что ловля ковроклочных кораблей не является чудом.
А шатл/яйцо поймать можно?
Можно, отварп у шаттла pyfa показывает 1.5 секунды, но сигнатура 25 увеличивает время лока, при 3500 сканрезе это занимает 0.8 секунд, что есть много. Так что шаттл вполне себе уловим, но сильно зависит от задержек и сканреза. Другое дело с яйцами, у них время отварпа меньше 1 секунды.
Где был тик сервера, когда я из своего бубля отварпал?
При сильных лагах можно наблюдать всякие интересные вещи. Запуск бубля и запрос на варп могут прийти в один тик и обработаться не одновременно. Пакеты могут потеряться, задержаться или испортиться. В лагах возможно все.
Залочил его, а поинт не лег.
Тут все элементарно, сервер обновляет информацию о локе цели на каждом тике и уже после лока идет запрос на поинт. К моменту прихода запроса на поинт цель уже может набрать 75% скорости и сменить состояние на "в варпе" ведь ее ничего не удерживает.
Стабильность есть? А если найду?
Накачал сканреза овер 9000 и должен все ловить, но не получается? Если говорить про кемп, то гарантии ловли нет. Перечислю еще раз факторы, влияющие на нее:
1. Реакция игрока на появление цели в овервью, может очень большой.
2. Пинг до сервера, опять же может быть как мизерным, так и огромным.
3. Стабильность самого сервера.
Поэтому все измерения на тестсерверах и в игре могут давать очень разный результат, и нельзя сказать, например, что "при сканрезе 4500 100% ловится корабль с отварпом 1.5 секунды".
У меня друг на артитрешере вообще всё ловит
По результатам проверок нелья активировать пушки на цель, находящуюся в варпе. Это значит что если артитрешер успевает выстрелить по чему-либо, то он успеет и поинт положить.
Понаглядней можно?
Вкратце давай, чо там?
Время отварпа округляется и всегда кратно 1 сек. Но агила не округляется, чем больше тем лучше.
Сканрез округляется, но чем больше тем лучше.
Ловится все, кроме яиц и гекаты.
Магии нет