- PVSM.RU - https://www.pvsm.ru -

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

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

Начало

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

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

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

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

Игрок

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

Вещи

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

Рынок

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

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

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

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

Итог

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

Автор: aszhitarev


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/drupal/14116

Ссылки в тексте:

[1] Profile2: http://drupal.org/project/profile2

[2] Field group: http://drupal.org/project/field_group

[3] Computed fields: http://drupal.org/project/computed_field

[4] Field permissions: http://drupal.org/project/field_permissions

[5] Entity reference: http://drupal.org/project/entityreference

[6] views: http://drupal.org/project/views

[7] про товары с атрибутами: http://aszh.com/post/5

[8] Ubercart: http://drupal.org/project/ubercart

[9] Flag: http://drupal.org/project/flag

[10] Rules: http://drupal.org/project/rules