сервер

ИИ. Обход территории. Дополнение

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

Для флага и индекса использую одну переменную в структуре TMazeCreature - это int cPoint.
В самом начале переменная равная 0 и означает, что существо (моб) прошел(узнал) не всю карту.
В случае когда карта пройдена выполняется инструкции:

ИИ. Патрулирование

Одним из важнейших составляющих игры является наличие так называемого искусственного интеллекта. Чем хуже ИИ – тем скучнее игра.

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

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

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

Полет стрелы. Серверная часть.

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

Проверка на наличие снарядов и возможности стрельбы – очень простая: проверяется, что оружие в правой руке – тип артиллерия (TW_RANGE), наличие снарядов, что в правой есть предмет с типом снарядов (TW_ARROW), далее проверяется количество снарядов (прочность предмета).

Магазин

Продолжение темы про городские постройки, ранее было уже реализованы наброски алгоритма работы магазина.

В дополнение, т.к. теперь в одном городе (или на точке карты) может быть несколько магазинов, то по умолчанию ссылка на магазин /shop автоматически перемещает на "лучший" (по рейтингу) магазин /shop?id=XXXX.
Рейтинг будет считаться от количества прибыли и прочего (пока в размышлениях), но понятно что частным магазинам будет очень "приятно" если их магазин будет открываться как по умолчанию.

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

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

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

Прикручиваем базу данных

В базе будем хранить все объекты, т.е. и те которые раньше хранили в 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);
}

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

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

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

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

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

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

Изменяемые шаблоны

Ранее думалось, что реализовывать экраны через скрипты, но сейчас думаю это из пушки по воробьям. Нет, в целом скрипты очень даже нужны будут, особенно при программировании ИИ существ, но вот для зарузки html страничек – это перебор.

RSS-материал