Drupal, как игровая платформа (часть 1)

в 16:39, , рубрики: drupal, Gamedev, Песочница, метки: ,

На одном из докладов я говорил, что делать просто сайты мне не интересно. Мне интересно создавать проекты, которые выходят за рамки сайта, предоставляющего информацию о компании «Абырвалг» + инернет-магазин с носками. Мне интересно делать проекты, в которых идёт активное взаимодействие с пользователем. И таким образом мне в голову пришла идея сделать игру. Говорю сразу, что я (пока) не профессиональный гейм-разработчик и поэтому могу ошибаться. Я лишь делюсь своим опытом.

Начало

Исходя из особенностей Drupal, игра должна быть браузерной. И не просто скрипт или флеш, встроенный в ноду, а полноценная игра, которая именно построена на Drupal. C самого начала делать что-либо сложное мне не особо хотелось, было интересно реализовать саму идею. Я выбирал между экономической стратегией и файтингом. Выбор всё-таки пал на последнее, потому, как мне показалось, что это несколько попроще.

Начинаем строить

Итак, нам понадобятся:

  • Игрок
  • Вещи
  • Рынок
  • Реализация поединка

Игрок

Персонажа, управляемого человеком, я сделал при помощи модуля Profile2. Тут, как раз всё достаточно просто. Накидал пачку полей с характеристиками. Группировать поля лучше всего при помощи Field group, а поля, значение которых нужно получать программно при помощи Computed fields. Часть полей нам понадобится закрыть от редактирования (например деньги, здоровье и прочее). Сделать это нам поможет Field permissions. Процесс «экипировки» реализуется при помощи Entity reference и views. Хотя сайт без views ещё поискать надо.

Вещи

С игроком разобрались. Давайте разбираться с экипировкой. Тут, как ни странно, тоже нет ничего особо сложного. Обращаемся к моей статье про товары с атрибутами и делаем классы товаров «Оружие», «Броня», «Амулеты» и прочее. И да, нам таки понадобится Ubercart.

Рынок

Упомянутый выше Ubercart нам понадобится и для реализации рынка вещей. Процесс присвоения конкретному игроку конкретной вещи из базы я реализовал при помощи модуля Flag и Rules. Делаем флаг (не глобальный!) «my» и при покупке вещи вешаем на эту ноду
флаг «my» от имени покупателя. Через это же реализуется «экипировка» игрока. Инвентарь отображаем также при помощи Views. Просто выводим все ноды с флагом «my» и группировкой по «классу» вещей.

Реализация поединка

Тут самое интересное. Реализуя это я, на самом деле, впервые близко познакомился с именно программированием в Drupal. Нам понадобится включить PHP Filter в модулях. Основной моей идеей при продумывании игры была фишка, что нападать на человека можно было только тогда, когда он был к этому готов. Поэтому в «анкете» я сделал поле
«готовность к поединку» и при помощи Views выводил всех игроков готовых к драке. Далее делаем флаг «напасть на игрока» и на присвоение этого флага навешиваем правило, которое считает:

  • Урон оружия
  • Эффективность брони
  • Количество здоровья
  • Поправки на урон и здоровье от амулетов

Итог

В итоге — игра на Drupal вполне себе возможна. Критика в комментариях приветствуется. Особенно буду признателен за критику от разработчиков игр.

Автор: aszhitarev

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js