сервер

Газовая ловушка

яма-ловушка с газом, 7maze.ru, лабиринты зыбиВообще сейчас все силы брошены на заявки и турнирную арену, и есть куча предложений, весьма интересных. Но пока сделаем паузу, а т.к. наш арт-директор (будем называть его так :) подкинул нам новые концепты, то реализуем новую объект в лабиринтах - ловушку с газом.

TOP и рекорды

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

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

TOP игроков

Вообще сама задача создания TOPа - пустяковая, нужно просто решить по какому принципу она будет сортироваться (например по полученному опыты) и отсортировав игроков, вывести первых 10 (или 20, или 100).

Но вот задача будет посложнее если игроков уже далеко за 100000. Сортировка такого количества чисел, даже на мощном сервере может занять некоторое время. А т.к. структура игроков изменяемая придется блокировать ее, и в этот момент не обрабатывать другие запросы, от других игроков.

Пробирка жизни

Для более быстрого выздоровление героя, после трудовых будней, давно напрашивался вывод сделать пробирки жизни.
Чтобы выпил - и здоров.
Но на самом деле задача более сложная чем ввод нового типа предмета.

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

Глобальные переделки

Вообще ничего не предвещало беды, загрузил тестовый лабиринт с 10 пауками.
Сделал три шага и .... Очень долго ждал. На вид игры было похоже, что она зависла. Через секунд 20 - клиент получает от сервера 100 сообщений, о новых ходах, о ходах мобов, ну и завершающий что ход опять у игрока.

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

А если следующий игрок тоже компьютер - то опять тоже самое.

По чуть-чуть

Изменил алгоритм патрулирования, теперь в наличии 6 вариантов обхода, что разнообразит игру.

Сам алгоритм ниже:

if (as %2 == 0) {f=w;n=h;} else {n=w;f=h;}
for(int i=0;i<f;i++)
for(int j=0;j<n;j++)
{
int off;
int ii=i,jj=j;
if (as && 0x2)
if (as%2 == 0) {ii=(w-i)-1;} else {ii=(h-i)-1;}
if (as && 0x4)
if (as%2 == 0) {jj=(h-j)-1;} else {jj=(w-j)-1;}
if (as%2==0) off=jj*w+ii; else off=ii*w+jj;
}

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

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

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

Linux-сервер

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

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

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

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

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

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

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

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

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

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

RSS-материал