- Регистрация
- 19.05.2010
- Сообщения
- 5 347
- Реакции
- 3
- Награды
- 10
Уважаемые игроки!
Разработка игр - процесс поистине увлекательный и неповторимый. Каждый день специалисты Allods Team решают массу задач, разбирают множество багов и работают над обновлениями для игры. Сегодня мы расскажем вам одну незаурядную историю, которая произошла с классом Храмовник и его умением "Вызов".
Текст ниже практически полностью дублирует письмо, отправленное одним из программистов команды игровой механики "Аллодов Онлайн" на одну из внутренних рассылок проекта.
Расскажу я вам историю. Все началось с того что сразу после выдачи игрокам патча 3.0.03 на форуме и в службе поддержки начали появляться массовые сообщения от игроков про то, что у паладинов перестало работать умение "Вызов". Причём сообщения были разных видов. У некоторых всё работало, у некоторых иногда работало, иногда не работало, у некоторых не работало совсем.
На поиски источника проблемы почти сразу подключилась команда QA игровой механики и на протяжении полутора недель пыталась найти хоть какое-то аномальное поведение, но у них ничего не получалось, мобы агрились как положено, отвлекались на "Вызов", возвращались к топдпс, если тот обгонял паладина по аггро. После этого к поиску подключились программисты игровой механики. Внимательно читали код, пробовали разные странные комбинации из нескольких паладинов, петов и черта лысого. Всё было бесполезно, мобы вели себя, так как должны. Запросили детальный анализ сообщений от игроков, в личном порядке опрашивали глав гильдий и топ-игроков. Внятной информации нигде не нашлось.
И тут настал *четверг*, и я засел на полночи летать в астрал. Внезапно, на одном из островов (Кьëльтмарк) на первом из боссов, которого всегда все вытягивали, и которого я убивал уже много раз на боевых серверах, обнаружилось аномальное поведение. Вместо того чтобы висеть на танке или, если Вызов не работал, хотя бы на топдпс, моб хаотично бегал между бившими его игроками. И так три острова подряд.
На следующий же день с утра мы стали пытаться воспроизводить баг. Но черт возьми, нет бага. Я стал вспоминать состав группы, мы пробовали разные классы, безрезультатно. И тут я решил воспроизвести ситуацию *целиком*. А именно, вместо того чтобы бить моба на его площадке, мы вытащили его ко входу на остров, как это делали игроки. Вот оно! Аномальное поведение проявилось. Несколько минут копания в коде и обнаруживается прекрасное.
У мобов есть механизм эвейда по расстоянию, который говорит следующее: если моб в процессе отдалился от места входа в бой более чем на N метров и его никто агрит в течение M секунд, он каждые две секунды полностью обнуляет аггро на своего аггролидера и обновляет время последнего аггро на текущее. Баг был двойной: во-первых, этот механизм вообще не должен был срабатывать в инстансах. А во-вторых, ещё с год назад возникла ошибка из-за которой M оказался равен нулю. В результате моб, которого утащили от места входа в бой более чем на 80 метров, каждые 2 секунды полностью обнулял аггро на своего аггро-лидера, что и приводило к хаотичному бегу между атаковавшими его. А полностью он не эвейдился, потому что его били чаще чем раз в 6*2=12 секунд и снова записывались в аггролист. Соответственно больше всего от бага страдали паладины, ибо как только они применяли "Вызов", они становились аггро-лидерами и через 2 секунды после этого аггро моба на них гарантированно обнулялось. А в предыдущие разы проблема не проявлялась, ибо граница в 80 метров проходило аккурат посередине площадки, на которой обычно били босса и видимо его раньше держали немного ближе к месту входа в бой.
Механизм эвейда по расстоянию был отключен в инстансах (и поправлены его настройки для обычных зон) и мы довольные собой выдали фикс в патче 3.0.03.20, смело заявив в пачноуте что "Вызов" починен. К нашему удивлению и недоумению, жалобы игроков продолжились.
И вот, вечером ничем не примечательного воскресенья, когда все ключи были отлетаны, я решил сходить на Фронтир выполнить наконец задание на убийство Королевы. По Фронтиру бегал полурейд нубов, которые как раз собирались на Рамштайна/Королеву. Помог нубам убить Рамштайна, оказалось что я был топдпс, паладинов не было, поэтому танковал я и всë было хорошо.
После этого мы тем же составом пошли на Королеву, которую я танчил-танчил, но в какой-то момент сильно просел по ХП. Хил-спеллы были в откате, поэтому я включил *бабл*. Мне очень не хотелось этого делать, ибо включение бабла означало что моб на меня забьёт на время висения бабла и пойдёт бить следующего по аггру. С другой стороны, если бы я этого не сделал (а умер), то Королева бы точно всех поубивала. Так вот, включаю бабл и... Королева продолжает бить меня. Новая аномалия налицо.
После майских праздников, офис, истеричная отладка бабла и обнаруживается новый, не менее прекрасный, чем предыдущий, баг. Бабл и около двух десятков других эффектов, в том числе навешиваемых мобами, ставит на игрока метку, говорящую, что он неинтересная цель для моба. И если у моба есть цель без метки, то он тут же переключается на неё, возвращаясь назад, когда метка снимается. Беда состояла в том, что метка не снималась никогда, только релогом игрока. И единственное объяснение наблюдаемому мной поведению состоит в том, что на момент включения мной бабла такая метка была уже на всех 15 игроках, бивших Королеву со мной.
Вдобавок, если на паладине висела метка, то у него от всего Вызова оставалось только однократное становление аггролидером, перебиваемое следующим же ударом топдпсера, ибо эффект, который поддерживал паладина аггролидером на время висения Вызова, не работал, если паладин обладал меткой. Этот баг ещё лучше объяснял проблемы с танкованием. Если на паладине была метка, а на остальной пати нет, то что бы он ни делал, он не смог бы держать на себе моба. И наоборот, если вся пати имела метку, а паладин нет, то ему достаточно было один раз за весь бой ударить моба и моб бы точно с него не переаггрился.
Такие дела. Окончательное исправление аггро попало в хотфикс 3.0.03.23.
Мораль: играйте в Аллоды.
На этом все. Спасибо всем, кто любит нашу игру и продолжает играть в нее!
Источник: http://forum.allods.ru/