Сперва добейся (c)
war_tundra — 12.09.20151. Ошибка
Для начала докажем тезис о "самолеты и танки выдаются пользователю в неверном состоянии" в этом нам поможет следующее видео:
Видео снято на продакшен сервере, тест план выглядит следующим образом: выехать на Т26->Т26->БТ->Т26->БТ, в процессе произвести пару действий на каждом танке после чего самоуничтожиться и выбрать следующий, при просмотре наблюдаем за положением башни:
В результате теста обнаруживается очевидный косяк 1,3,4,5 танк выдаются нам в "нулевом" состоянии (орудие смотрит вперед, артудар готов к применению и т.д), вот 2-й явно "б/у" и наследует положение башни и таймер артудара от первого.
Эффект этот обладает 100% воспроизводимостью и заключается в том, что "возрождении" техника, которую дают игроку часть своего состояния сохраняет из "предыдущей жизни". В данном конкретном случае это происходит, когда мы берем ту же технику на которой только что были в этом бою, а вот если чередуем, то все происходит правильно.
Сохранившиеся после возрождения состояния, а это не только положение орудия, таймер арт удара, тип заряженного снаряда, но и скажем эффект пожара или дыма от пожара на только что выданном "новом" танке и еще куча состояний, которых мы скорее всего просто не видим т.к. они не бросаются в глаза и не отражаются в логах, по своей сути являются случайным мусором из "прежней жизни".
2. Серьезность проблемы.
На первый взгляд эта ошибка не кажется серьезной: "подумаешь башня не туда повернута", но на самом деле это серийно воспроизводимая ошибка, которую мы уже не раз встречали. Например после ввода в аркаду возможности возрождения на аэродроме самолеты начали случайным образом переворачиваться, дело оказалось в том, что самолет возрождался в том положении в котором разбился его предшественник, хоть вверх ногами!
К исправлению других косяков после возрождения типа отдельно летающего гака от корсара или шлейфов дыма за самолетами (была такая ошибка ЕМНИП при выходе мажора с посадками на брюхо) я не был причастен, но общая картина подозрительно похожа - косяки возникали исключительно после возрождения.
Да и сам текущий пост вызван очередным багрепортом о том, что самолет криво себя ведет после починки на аэродроме (тут собственно ситуация аналогична возрождению, мы должны получить новый самолет, но что-то пошло не так).
3. Что с этим делать?
Ну конечно, можно ничего с этим не делать и продолжать плодить ошибки подобного рода (именно так получается БагТандер), а можно отправить "четких профи" от улитки на курсы повышения квалификации или там книжки дать почитать на тему написания "надежного" кода.
Программисты они люди, а людям свойственно ошибаться и забывать сделать необходимое, потому и существуют всякие там правила, что любую заведенную переменную нужно сразу инициализировать начальным значением.
Если бы при возрождении или ремонте код улиток принудительно приводил все переменные состояния объекта в начальное состояние (как это собственно и так делается когда мы меняем один танк на другой), а не полагался на то, что там что-то полезное записано, то это дало бы мизерный оверхед, но зато избавило бы от кучи уже выявленных и еще только будущих ошибок, когда программисты где-то чего-то забыли и оно осталось в по сути случайном состоянии.
4. Эпилог.
Видео в посте было записано практически год назад. Записывалось оно для багрепорта, который нонче безвести сгинул в пучинах форума, предъявлялось оно и А.Юдинцеву:
А К. Юдинцев выписывал после этого автору сего опуса RO:
За это время частично поменялась механика (возрождений стало меньше, арт удар дают по иным правилам), но этот косяк естественно живее всех живых. Можете прямо сейчас сгонять в полигон на резервах и проверить.
Косяк этот далеко не единственный, наши "профи от улиток" любят заниматься быдлокодингом вместо написания кода устойчивого к ошибкам.
Когда я узнал о причинах бага с мнимой смертью пилота, я сразу написал разработчику с ником SDK (он тогда занимался кодом ДМ), что при таких алгоритмах дальше будет еще куча багов, на что мне сказали в духе "гуляй мальчик, мы тут все умнее тебя".
Но как говориться "пи*деть, не мешки ворочать"(c) и мнимые повреждения встречаются регулярно:
24 секунда Do.217M нафиг сгорел, на иконке парашютик и отсутствует левый руль направления. А на 2.10 у него нормальная иконка и левый руль направления РЕГЕНЕРИРОВАЛ
Поэтому БАГТАНДЕР НАВСЕГДА!
|
</> |