Небольшие изменения – большие мучения

Итак:

  • Пофиксен баг бесконечным боезапасом стрел – если игрок проигрывал на арене, его количество стрел было равное количеству стрел перед боем
  • Пофиксен баг – с длинным ходом – когда герой никуда не шел. Ошибка была, в том что игрок ориентировался по своей внутренней карте, а не по настоящей – это было сделано для мобов – пришлось делать ветку.
    Правда получилась некая рассинхронизация показа пути и реального перемещения. Тянуть на клиента алгоритм обхода препятствий – глупо. Наверное будем менять указания маршрута (например установка флажка или типа того)

Активные навыки

Это навыки, для работа которых нужна активация, на активацию может тратиться ход, а может даже жизнь (это из будущих задумок).

Первым активным навыком стал навык «глухая оборона». Реализация в серверной части оказалась не сложной, всего добавилось: массив активные навыки в структуру TMazeCreature, функция определения возможности включения навыка, она же служит перед каждым ходом игрока.

Динамически изменяемые кнопки в Flash

Начали реализовывать «активируемые» способности, для этого нужно чтобы кнопка в Flash приобретала «нажатый» дизайн при включенной способности.

Т.к. Button вроде как MovieClip – было решение, приаттачить (attachMovieClip) к нему рамку – чтобы было видно что кнопка «нажата».

Но это был неправильный подход, т.к. Button в Flash – это Object, а не MovieClip.

Тестирование

Еще порция глюков. Первый из них не загрузка героя, но запуск игры.

Вообще в игре все объекты грузятся через специальный класс, который увеличивает по мере загрузки счетчик на один, а после успешной загрузки уменьшает его на единицу и только при 100% загрузке игрового поля (_root.getBytesLoaded = _root.getBytesTotal) и при счетчике загрузок = 0 переключается на другой фрейм (play), а до этого топчемся на фрейме загрузки.

Т.е. вроде без загрузки- нет игры, но что-то пошло не так. Это выясняем.

Борьба с сервером. Часть вторая

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

Уже столько всего выводил в лог – что при запуске сервера лог пух на почти мегабайт от каждого действия.

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

Linux-сервер

Сегодня пытался скопилить проект под Linux, куча ошибок – это если ничего не сказать, очень много и много.
От неказистых (например #include <mem.h> вместо #include <memory.h>) до более больших (в Win – это в stdlib.h, а в Lin – unistd.h)

После некоторого времени оно запустилось! Но сразу выпало, причем на прорисовки примитивного окна.

Наконец-то чат!

Вообще вроде бы для игрового чата, было уже все готово – и база и цвета и движок, но вот оказалось, что все вместе это не работало.

Во-первых, оказалось, что еще не совсем внедрена система передачи событий конкретному игроку, и вроде бы про это говорилось еще в реализации сундуков, но оказывается в коде этого нет. Либо не доделали, либо откатили в процессе разработки.

Легко решилось внедрением в события переменной кому, если 0 – то всем.

Опять цвета и как можно все испортить

Делаем новый чат и сейчас понадобились цвета, вообще история с чатом и цветами имеет самые долгие корни, но как выяснилось – увы, но это не то что надо.

Цвета – были ужасно похожими очень многие, а потому была составлена вручную палитра цветов (пока 50 штук), для героев.
Было сделана передача в клиент, цвета героя (определяется порядковым номером в лабиринте, тупо позицией в векторе m->creatures.

Передача осуществляется как и другие параметры, при запросе getinfo.

Кровь

Что-бы разнообразить игру, добавили кровь. При уроне противника – на экран выливается кровь :)
При проигрывание события put_strike, срабатывает функция add_blood

Сама по себе функция простая и ничего сложного не содержит. Размер пятна - зависит от урона, а также накапливается в луже. От одного удара – будет одного размера, при таком-же ударе – может стать больше.

Тень и другое

Изменил функцию тени на Flash-клиенте, теперь оно считается также как и на сервере – круговым просмотром, конечно не быстро – зато уж точно правильно.

Теперь на клиенте просмотр считается заполнением дополнительной карты, где 1 означает, что данный квадрат игрок видит, а 0 – что нет. Определение видит ли игрок, любой и объект – весьма простой – нужно посмотреть координаты и значение по этим координатам в этой карте.

Сейчас внедряем чат.

Также дописал алгоритм, поведения лучника – и теперь этот гад убивает меня быстрее, чем я его :)

RSS-материал