Баги - это весело... и быстро

EVE Online: Баги -- это весело... и быстро
На реддите в разделе EVE запустили опрос «Какой самый безумный баг вы встречали в игре». Шквал аплодисментов собрал ответ CCP Foxfour. Поделюсь переводом этой истории. Думаю, она того заслуживает.

У нас есть правило – не применять в игре повторно идентификаторы типов объектов, и мой рассказ будет прекрасной иллюстрацией, почему этого не стоит делать. Для тех, кто не в курсе, typeID – это уникальный идентификатор типа внутриигрового объекта. Не конкретного объекта, прошу заметить, конкретный объект имеет itemID. К примеру, 587 – это typeID Рифтера (и да, по какой-то неведомой причине я его помню), тогда как у Рифтера, на котором летаете именно вы, будет itemID в каком-то вот таком виде: 102343249878. А запасной Рифтер, который пылится в вашем ангаре, будет иметь itemID какой-то такой: 102343241111. Но у обоих этих рифтеров будет typeID: 587. Другой важный момент, который нужно понимать для полноты картины, это то, что мы часто ссылаемся на объекты через их typeID. То есть мы говорим, что вот такие typeID могут использоваться в этой миссии, или когда вы стреляете ракетами, мы просто говорим, что вот вы во время выстрела будете создавать объекты с таким-то typeID.

История, о которой я хочу рассказать, случилась до моего прихода в CCP, поэтому я заранее прошу прощения за возможные неточности. Но суть постараюсь передать. В общем, у нас был один NPC, который стрелял ракетами. Я не знаю почему, но из игры решили убрать этот тип ракет. Так что в базе просто удалили этот typeID. Что сделать забыли, так это удалить ссылки на удаленный typeID. Так что в игре остался этот NPC, который все пытался и пытался выстрелить ракетой, которой уже нет. В общем, это сама по себе душераздирающая история, но она на этом не заканчивается. Не-не-не, даже не думайте.

Через какое-то время кто-то создал новую структуру, которую нужно было разместить на миссии. Ну, знаете, такие огромные структуры-препятствия. Когда создавали эту структуру, typeID сгенерировался автоматически из пула свободных вариантов. В смысле, система честно посчитала, почему бы не взять один из тех typeID, которые были удалены? Верно? Нет смысла продолжать увеличивать значения, если есть еще незанятые. Логично? Все это было в прошлом, понятное дело. И тут мы возвращаемся к нашему печальному NPC, который все так же честно пытался выстрелить тем typeID, которого не было, но вдруг он снова появился.

Представьте это: NPC сидит на миссии и ждет. Вы варпаете. NPC делает то, что и должен, работа у него такая: лочит вас, прежде всего. В нормальной ситуации в этот момент он должен начать спавнить свои любимые ракеты, пытаться вас догнать и сбить ваш корабль. Но вместо этого охрененные космическими структуры появляются из ниоткуда. Вы наверняка думаете что-то вроде «Да какого хрена тут происходит?!!!!». Вас вполне можно понять. Но ситуация развивается по нарастающей, потому что как только наш печальный NPC спавнит структуру, он оказывается в самой ее середине. Это не может быть позволено текущей физической моделью нашего космоса! Не-не-не-не-не. Чтобы скорректировать ситуацию, игра дает смачный такой пинок NPC, выталкивая его наружу. Чем придает невероятное ускорение этому небольшому кораблику, жившему до этого своей тихой, хотя и печальной жизнью.

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

Источник: www.reddit.com/r/Eve/comments/3cnx7g/what_are_some_of_the_craziest_bugs_youve/
Читайте также

3 комментария

avatar
Отличная история =)
  • Jmur
  • +1
  • v
avatar
А такое бывает, если напрямую с базой общаться без проверок. Бывало и у меня, когда несколько однообразных операций делаешь, запомнил id объекта=x, начал писать delete from… where id=x+1;, удалил благополучно другую запись в базе, и ладно если сразу видно ошибку. А иногда всплывает через много месяцев, потом ищешь бэкап и смотришь чего ты там наудалял =( Вот после одного такого случая и завел правило —
begin

commit
Комментарий отредактирован 2015-07-13 15:46:02 пользователем inokaw
avatar
Браво!!!

Оставить комментарий