Клиент

Инвентарь

Главная задумка - сделать эту флэшку с минимум онлайна, т.к. на самом деле все легко и просто.

Флэшка вызывается с параметрами из которых главных два - один указывает на тип силуэта персонажа, а второй на его инвентарь.
В Flash это парсится переменная params. Скажем приходит строка ввиде hero|aaa|inv|bbb|, где aaa - указатель на образ, а bbb - закодированные данные инвенторя.

Про образ думаю и все так ясно - это может быть просто имя соотвествующего SWF файлика, например man или woman.
С вещами посложнее, но тоже просто. Думаю сделать это так:

Всплывающие подсказки

После того как паука стало можно убить, очень было интересно узнать сколько у него осталось жизни.
Нет, конечно это было видно и по передающим данным из лога a,11,6,1,51,4,8,0, что удар был(damage) 4 HP и у него осталось 8HP, но как-то это не кошерно.
информация о существе. 7 Лабиринтов

Паук пришел-2

Вообще перед тем как я начал внедрять «паука», я сильно заблуждался –считая, что код и меня уже сделан, что можно внедрять уже существ, кроме базового (героя).
Но оказалось, что зря казалось. Пришлось переписывать и искать баги.

Как бы, в базовом Flash ролике, уже обрабатывалось событие INS_CREATURE (при загрузке героя) – оно помещала в базовые массив классов creatureList - id существа и его координаты.

Следом вызвалась функция insertCreature, в которой уже пришлось делать первые изменения:if (plid==_root.userid)
creature.mcname = "you_hero";

Правки

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

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

Интеграция

Нарисовал героя и даже сделав для него анимацию, попытался прикрутить его в основной проект.
Для начала пришлось все-таки переписать загрузчик для SWF, теперь он сразу создает нужный клип, название которого приходит ему качестве параметра: function loadclipfromserver(path, loadname,nameclip).

Затем пришлось в структуру(объект) creature добавить mcname,dx,dy,и все другие параметры для анимации
Теперь в функции moveCreature не сразу присваиваются _x и _y, а выполняется ряд действий (может и избыточных, но пока нужных)

Анимация героя

Наконец-то вымученный герой хоть как-то получился, анимация в конец меня убила, но все же есть и результаты.
Сам герой/персонаж оформлен виде отдельного SWF файла с набором фреймов названных особым образом: stand_s, stand_se, stand_e и т.п.
Количество фреймов на анимацию ходьбы - 3, левой-стой-правой.

Загрузка простым образом через loadMovie уже не устраивает, т.к. необходимо отслеживать процесс загрузки. Клип загружаем через MovieClipLoader, на onLoadInit вешаем обработчик загрузки.

Осталось прикрутить эффект от ямы-ловушки к Flash

Собственно куда и зачем кто пошел Flash-клиенту неинтересно, а интересно ему принять событие - ACT_CR_DEAD. События у нас отлавливаются функцией playAction и в нем:
if (type_act == 0x05) //dead
{
var cid = toint(data_act[0]);
var how = toint(data_act[1]);
putCreatureInfo("i,"+cid+",h,0,");
addMessage("<font color='#1111ff'>>+getCreatureName(cid)+"</font> - гибнет");
if (cid==_root.userid)
showDead(how);
}

Добавляем характеристики

Про сами характеристики я писал уже ранее, сейчас же прикручиваем параметры. Для этого была сделана структура TCreatureParams.
typedef struct
{
short Stamina;
short Strength;
short Dexterity;
short Intellect;
short HP;
} TCreatureParams;

Которая была добавлена в две структуры в TUser и TMazeCreature, потому как игрок может оказаться в лабиринте, а вот существо из лабиринта никогда не попадает в список пользователей.

При переходе в лабиринт, было добавлено копирование структуры params из TUser в структуру TMazeCreature.

Прикручиваем "книгу действий"

Прикручивал «книгу действий» - экран который вызывается при нажатии на персонажа.
Легко нарисовал прямоугольник, вставил первый клип – активация телепорта, и столкнулся с проблемой №1.Не называешь клип как инстанцию – не получаешь к ней доступа, называешь – ошибка , что данный клип используется другой инстанцией. Отжимаешь галку экспорт в ActiveScript – ошибка пропадает, но т.к. клип лежит на другом клипе (книге), то доступа до него нет. Короче что-то не то. И уже было (с кнопкой конец хода)

RSS-материал