База, сохранение данных

В начале, было решено сохранять и загружать все объекты и их текущие состояния: игроков, лабиринты, магазины.

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

Спамеры

Как меня задолбали спамеры! Эти куча комментариев типа чудестно, прелестно и афоризмы, само-собой в сообщениях под пустыми анкорами (выглядит как пробел с подчеркиванием) - куча ссылок на кучу сайтов.

Но сегодняшний "коммент" сделал всех - в нем было почти 1kB кода - а выводил он "прелестно, милая информация"

Посоветуйте, пожалуйста, хороший плагин для Drupal от спама, достало уже чистить сайт и почту.

Прыжок

Сегодня прислали интересную идею – сделать навык прыжок, активирующая способность, которая позволяет персонажу перепрыгивать любую клетку.

Мысль интересная и в качестве простого расследования лабиринтов (например перепрыгнуть яму ловушку), так и тактика боя – когда более активный игрок (с большим количество единиц движения, перепрыгивает через «тормоза» и убегает)

Распределение по уровням:

  • Basic – требует 4 единицы движения
  • Master – требует 3 единицы движения
  • Expert – требует 2 единицы движения
  • Прикручиваем базу данных

    В базе будем хранить все объекты, т.е. и те которые раньше хранили в XML-файликах (оружие, типы монстров),
    а также пользователей(TUser) и лабиринты (TMaze).

    Сначала решено было сделать для каждого объекта одну табличку с n-полями(столбцами), но сразу наткнулись на трудность: инвентарь, данные, навыки.
    Все это массивы - конечно можно пойти дилетантским путем и сделать столбцы inv_0, inv_1 и т.д., но это уж совсем.

    Решено было сделать для таких данных отдельные таблички, которые будут связываться с основной по ключу - id. (игрока или лабиринта).

    Арена и воины

    Доводим до ума арену, решил уменьшить ее размер (10x10) и сделать ее фиксированной вот, такого вида:
    unsigned char pack[13]={255,7,88,111,133,149,86,90,104,191,1,254,7};

    Собственно это сжатая на биты карта, для ее отображения небольшой код:
    int TMap::MakeMapFromPack(unsigned char *pack)
    {
    int l =w*h;
    int size_pack = l/8;
    if (l % 8) size_pack++;
    for(int j=0,i=0;i<size_pack;i++)
    for(int k=0;k<8;k++)
    if (j<l) Map[j++] = pack[i] & (1 << k);
    }

    Новогодние правки

    Во время новогодней недели мы планировали сделать очень многое, но оказалось совсем наоборот - всем лень и некогда.
    Оливье, шампанское - вот чем все заняты.

    Из сделанного:

  • Внедрили навыки в код сервера, пока любой навык дает 5% к повреждению, а аналогичный навык у противника снижает на на 2.5%
  • Перемещение героя в лабиринте - теперь в два клика, первым устанавливаем путь (показывается шаги), вторым по той-же точке - команда перемещение. Клик по другой точке - установка нового пути.
  • Навыки оружия

    Продолжение темы.
    Для начала решил разделить оружие на типа:

    режущее (мечи, кинжалы) cutting
    тупое (дубины) blunt
    колющее (копье) stab
    Артилерия (лук) range
    #define SKILL_CUTTING 1//режающее
    #define SKILL_BLUNT 2//тупое
    #define SKILL_STAB 3//колющее
    #define SKILL_RANGE 4//артелерия

    #define SKILL_STUPEFACTION 5//ошеломление
    #define SKILL_LIGHTNING_STROKE 6//молнеиностный выпад

    Навыки

    Одним из главных аспектом в любой онлайн игре - это PVP-поединки, в переводе игрок(player) против(vs) игрока.
    В будущей игре лабыринты зыби - это арена (уже почти реализовано), массовые бои против нашествий монстров и прочие "битвы".

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

    Очередной этап

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

    Также пришлось изменить количество минерала на картах (кроме пустой карты) в два раза по сравнению с расчетными показателями, потому как некоторые «кусты» минерала попадает на закрытые территории (нельзя до них дойти), да и в целом покупать карту за 50 золотых, чтобы получить 60 и это все только раз в час – это задротство какое-то, ей богу.

    Квестовые карты - собираем рапаппилу

    Доделали на сервере окончательную покупку карт и квест по сбору минерала.

    Код, не очень сложный получился - и не очень большой (даже маленький) ~ 150 строк.

    RSS-материал