четверг, 26 июля 2012 г.

Непобедимое победимо)

Пару дней назад загорелся старой идеей исправить древный баг MuOnline с неверным отображением значений HP/Mana/Stamina/SD и т.п. Суть бага заключается в том, что под перечисленные атрибуты в памяти выделялись значения размером по 2 байта, тобишь вместится в такую ячейку могло только число от 0 до 65535. Поэтому некоторые цифры засчет переполнения переменных отображались неверно. Этому багу столько же лет сколько и самой MuOnline, его с уверенностью можно назвать самым олдовым багом игры)


Однако меня всегда терзала эта тупая недороботка и вот найдя время, я собрался духом и занялся изучением этой ошибки. Оказалось что корни уходят в сам протокол, который так же предусматривает передачу 2 байтовых значений, вместо 4. Теперь стало понятно почему исправлением никто вроде как и не занимался) Но как говорится волков боятся в лес не ходить. Решил я попробывать, к таму же такая фитча пригодилась бы для моего сервера, который сейчас в разработке.

... начал я вечером и к вечеру следующего дня я уже имел следующую картину :


как и предпалогалось реализация вышла не идеальная и требовала ряда тестов и доработак, однако я всётаки сделал это) Именно этот факт меня радовал и подталкивал на долнейший допил сего фикса. Сложность тут заключалась в том что данные о ХП, Мане, Стамин, СД, отсылались сервером разными пакетами, а main в свою очередь использовал значения хранящиеся в 2 байтовой структуры которую расширить нельзя, пришлось вешать горсть костылей что на протокол, что на клиент.

Одной из таких проблем создал аналогичный баг с уроном. Дело в том что урон тоже подвержен багу с переполнением переменной, 2 байтовое значение урона придя в main отнималось от значения HP, все бы ничего но если урон приходил урезанный, например вместо  настоящих 70000, в клиент пришло бы только 5000. Такой ход портил всю картину, какой толк от фикса HP, если он не работает при получении урона. Пришлось ковырнуть и урон ... Как выяснилось чуть позже не напрасно. Я решил исправить баг с уроном тоже. Вообщем еще денёк другой работы и поитогу получилась вот такая картина :


Полностью на реализацию этих фитч у меня ушло 3 дня, на исправление этих багов у разрабов из Webzen ушло бы не больше 20-30 минут.

2 комментария:

  1. Я этот фикс не вылаживал в паблик, где-то воляется на ПК. Там нужно вытаскивать код из исходника библиотеки которую я писал для своего сервера, + разьеснять как его ставить, мне это лень делать.

    ОтветитьУдалить