Сперва добейся (c)

топ 100 блогов war_tundra12.09.2015 2015-09-12 03-56-41 1.51.9.44 Як-9К дергаются рули высоты и направления - Летная модель и модель повреждений - War Thunder


1. Ошибка

Для начала докажем тезис о "самолеты и танки выдаются пользователю в неверном состоянии" в этом нам поможет следующее видео:

Видео снято на продакшен сервере, тест план выглядит следующим образом: выехать на Т26->Т26->БТ->Т26->БТ, в процессе произвести пару действий на каждом танке после чего самоуничтожиться и выбрать следующий, при просмотре наблюдаем за положением башни:



В результате теста обнаруживается очевидный косяк 1,3,4,5 танк выдаются нам в "нулевом" состоянии (орудие смотрит вперед, артудар готов к применению и т.д), вот 2-й явно "б/у" и наследует положение башни и таймер артудара от первого.

Эффект этот обладает 100% воспроизводимостью и заключается в том, что "возрождении" техника, которую дают игроку часть своего состояния сохраняет из "предыдущей жизни". В данном конкретном случае это происходит, когда мы берем ту же технику на которой только что были в этом бою, а вот если чередуем, то все происходит правильно.

Сохранившиеся после возрождения состояния, а это не только положение орудия, таймер арт удара, тип заряженного снаряда, но и скажем эффект пожара или дыма от пожара на только что выданном "новом" танке и еще куча состояний, которых мы скорее всего просто не видим т.к. они не бросаются в глаза и не отражаются в логах, по своей сути являются случайным мусором из "прежней жизни".

2. Серьезность проблемы.

На первый взгляд эта ошибка не кажется серьезной: "подумаешь башня не туда повернута", но на самом деле это серийно воспроизводимая ошибка, которую мы уже не раз встречали. Например после ввода в аркаду возможности возрождения на аэродроме самолеты начали случайным образом переворачиваться, дело оказалось в том, что самолет возрождался в том положении в котором разбился его предшественник, хоть вверх ногами!

К исправлению других косяков после возрождения типа отдельно летающего гака от корсара или шлейфов дыма за самолетами (была такая ошибка ЕМНИП при выходе мажора с посадками на брюхо) я не был причастен, но общая картина подозрительно похожа - косяки возникали исключительно после возрождения.

Да и сам текущий пост вызван очередным багрепортом о том, что самолет криво себя ведет после починки на аэродроме (тут собственно ситуация аналогична возрождению, мы должны получить новый самолет, но что-то пошло не так).

3. Что с этим делать?

Ну конечно, можно ничего с этим не делать и продолжать плодить ошибки подобного рода (именно так получается БагТандер), а можно отправить "четких профи" от улитки на курсы повышения квалификации или там книжки дать почитать на тему написания "надежного" кода.

Программисты они люди, а людям свойственно ошибаться и забывать сделать необходимое, потому и существуют всякие там правила, что любую заведенную переменную нужно сразу инициализировать начальным значением.

Если бы при возрождении или ремонте код улиток принудительно приводил все переменные состояния объекта в начальное состояние (как это собственно и так делается когда мы меняем один танк на другой), а не полагался на то, что там что-то полезное записано, то это дало бы мизерный оверхед, но зато избавило бы от кучи уже выявленных и еще только будущих ошибок, когда программисты где-то чего-то забыли и оно осталось в по сути случайном состоянии.

4. Эпилог.

Видео в посте было записано практически год назад. Записывалось оно для багрепорта, который нонче безвести сгинул в пучинах форума, предъявлялось оно и А.Юдинцеву:
Сперва добейся (c) anton1

А К. Юдинцев выписывал после этого автору сего опуса RO:
Сперва добейся (c) todace
За это время частично поменялась механика (возрождений стало меньше, арт удар дают по иным правилам), но этот косяк естественно живее всех живых. Можете прямо сейчас сгонять в полигон на резервах и проверить.

Косяк этот далеко не единственный, наши "профи от улиток" любят заниматься быдлокодингом вместо написания кода устойчивого к ошибкам.

Когда я узнал о причинах бага с мнимой смертью пилота, я сразу написал разработчику с ником SDK (он тогда занимался кодом ДМ), что при таких алгоритмах дальше будет еще куча багов, на что мне сказали в духе "гуляй мальчик, мы тут все умнее тебя".

Но как говориться "пи*деть, не мешки ворочать"(c) и мнимые повреждения встречаются регулярно:


24 секунда Do.217M нафиг сгорел, на иконке парашютик и отсутствует левый руль направления. А на 2.10 у него нормальная иконка и левый руль направления РЕГЕНЕРИРОВАЛ


Поэтому БАГТАНДЕР НАВСЕГДА!

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

Архив записей в блогах:
Удивительное освещение, прям конструктор Лего, а не домики) С вечерком всех, завтра снова будет вчера, постараемся что - менять и сюда записывать, будет что ...
...
Хотите посмотреть, в какую стерву превращается рапунцель, которая немного разморозилась, а потом снова заморозилась? Уйти она не может, потому что кто же ее еще разморозит? Она и так много лет ждала. Но и жить нормально не может с этим мужчиной, потому что он ее бесит каждую минуту. Есл ...
        *   *   * Воспоминания — вериги. Воспоминания — дурман. Смешались люди, время, книги, Былое и благой обман, Приобретения, утраты, Успехи, горечь неудач В утробе памяти чреватой. То врач она, то вдруг палач. ...
А. Мат в 2 хода: 3n4/2n1p3/2r1P1QR/2p1k1N1/2K2N1q/3P1R2/4pr1B/1B6 w - - 0 1 Б. Кооперативный мат в 2 хода (2 решения): 8/6p1/1B3N2/8/6pk/1R6/8/3K4 w - - 0 1 ...