Пост посвящен разжевыванию основных концепций работы всего, что связано с регистрацией урона для тех, кто не особо знаком с технической базой.
Обращаю ваше внимание, что я НЕ являюсь разработчиком EXBO, но работал на других minecraft-based серверах, в том числе VimeWorld, StreamCraft etc. Я трактую своё видение исходя из своего опыта и знаний.
- Разработчики не могут пофиксить неткод, они вообще дураки и блин почему я стреляю, а пуля не залетает???
Это примерное обобщенное восприятие проблемы игроками. Давайте разбираться, кто прав и кто виноват.
Для начала введём такое понятие как tickrate. Tickrate - частота обновления сервера для обработки игровых состояний. В обычном майнкрафте tickrate равен 20. Это значит, что за 1 секунду (1000 миллисекунд) сервер обновится 20 раз, то есть он обновляется раз в 1000 / 20 = 50 мс = 0.05 секунды. Для сравнения в КС тикрейт равняется 128, а значит сервер обновляет состояние сущностей на нём раз в 8 мс ~= 0.008 секунды.
- Так вот в шутерах всё круто и регает всё хорошо, почему тут не сделать так?
Будем разбираться в порядке очереди.
Давайте подумаем, чем кс критически отличается от сталкрафта? В КС нет ентити. К сожалению, серверу необходимо, чтобы регистрация урона шла адекватно и по мутантам, и по нпс, и по игрокам. К тому же, тиковая система является гарантией стабильности игровой логики. Программисты понимают, что энтити будут обновляться ПРИМЕРНО раз в 0.N секунды, значит скорость передвижения энтити и прочие механики выстраиваются с ориентировкой на стабильность в тиках.
- Тогда нужно сделать обработку пакетов отдельно, а тики для ентити отдельно!
Нужно, но сложно. К сожалению, майнкрафт вообще не приспособлен для многопоточности (и да, такая особенность есть и на стороне сервера, а сталкрафт, КАК МИНИМУМ, вдохновлён майнкрафтом. Корабль Тесея можно перестраивать сколько угодно, но в самолёт он от этого не превратится), настолько, что мобы (на самом деле весь мир) в майнкрафте из коробки не умеют в обработку в разных потоках. Если пытаться реализовать такую систему, то очень высоки риски уничтожить свою голову в попытках разбить ей стену синхронизации. По-хорошему, я вижу решение проблемы именно в этом пункте, но это ужасно трудо- и ресурсозатратно.
- Давайте сделает тикрейт 200 и регистрация будет даже лучше, чем в кс!!!!
Да, должно, но вот есть одна проблема: что будем делать, если сервер не сможет обрабатывать 200 тиков в секунду? Тогда мобы начнут сходить с ума, регистрация урона станет непредсказуемой, да вообще вселенная схлопнется.
- Какие шаги предпринимает EXBO?
ДАЛЕЕ ИДЁТ ИСКЛЮЧИТЕЛЬНО ОЦЕНОЧНОЕ СУЖДЕНИЕ
Не обязательно идти по затопленному болоту, если можно его обойти. В частности, недавно эксбо научились с большей частотой (судя по тому, что некоторые модельки начали буквально телепортироваться) обновлять состояние модельки на клиенте. Пока что для меня это выглядит сыро, но это определенный шаг к улучшению сходства хитбокса и модельки, за это респект.
На этом, мои основные мысли подходят к концу. Надеюсь, я улучшил ваше восприятие того, что происходит на уровне сервера и вы будете с бОльшим осознанием ситуации рассуждать об этой проблеме.