Авторизация
×

Логин (e-mail)

Пароль

Интерактивные истории, текстовые игры, квесты и визуальные новеллы
Гиперкнига

Библиотека    Блог

Модуль для работы с инвентарём «Inventory»

Борис Семёнов (Morych), 24.04.13 | Практика ASM

Версия 1.1

Модуль для работы с инвентарём «Inventory» представляет собой отдельный sm-файл, который содержит необходимые параграфы и объекты для организации полнофункционального инвентаря в вашем проекте. Теперь вам не обязательно заниматься программированием и отладкой этой части истории, можно просто добавить модуль и настроить его под себя.

Скачать модуль «Inventory»

Возможности

  • перечисляем предметы одной строкой в следующем виде: предмет1, предмет2 ... и предметN
  • оформляем перечисление предметов как ссылками, так и простым текстом
  • выбираем предмет нажатием ссылки и выводим его описание и возможные действия с ним
  • при количестве предметов от двух и более показываем быстрые действия сразу со всеми предметами перечисления
  • перемещаем предметы с одной сцены на другую
  • кладём любые предметы в другие предметы-контейнеры и достаём их оттуда, учитывая при этом объём предмета и пространство контейнера
  • добавляем к описанию выбранного предмета-контейнера перечисление содержащихся в нём предметов
  • покупаем и продаём предметы, устанавливая индивидуальную наценку для каждого магазина
  • отдаём любые предметы другим персонажам

Миниингра «Лучший подарок» наглядно демонстрирует возможности модуля.

Важные замечания

В основе модуля «Inventory» лежит использование списков. Поэтому для стабильной работы вам понадобится версия «AXMA Story Maker» не ниже 1.9.9.

В названиях параграфов и объектов модуля используется префикс «m_». Убедитесь, что в вашей истории нет одноимённых объектов и параграфов.

Как добавить модуль «Inventory» в свою историю?

Откройте «AXMA Story Maker» с проектом, в который нужно добавить инвентарь. Нажмите кнопку «Загрузить» на главной панели инструментов, а затем выберите пункт меню «Добавить». В появившемся диалоговом окне выберите файл «Inventory.sm» и нажмите кнопку «Открыть». В ответ на запрос программы, заменять ли одноимённые параграфы, ответьте «нет». Будет добавлено 11 новых параграфов с зелёной маркировкой.

Функции параграфов и объектов

1. m_Init

Параграф для инициализации объектов. Этот параграф обязательно нужно вызвать в начале истории. Здесь заполняются списки различных свойств предметов:
$m_listItem — названия всех предметов в винительном падеже;
$m_listPosition — начальное расположение всех предметов (название сцены или контейнера, имя героя или торговца);
$m_listVolume — условный объём всех предметов;
$m_listSpace — условное свободное пространство внутри всех контейнеров (обычно пространство меньше объёма); если в контейнере изначально находятся предметы, нужно учесть это;
$m_listPrice — номинальная цена всех предметов (если цена равна 0, то продать такой предмет нельзя).

Имя героя хранится в объекте $m_hero и по умолчанию равно «гг».

2. m_Items

Этот параграф перечисляет все предметы в заданной позиции, а также выводит ссылки для быстрых действий над всеми этими предметами. Объект $m_itemsEnabled отвечает за то, в каком виде показывать предметы: true — в виде ссылок, false — в виде простого текста (по умолчанию true). Перед каждым вызовом параграфа необходимо установить значения следующих объектов:
$m_position — позиция предметов перечисления;
$m_textPosition — текст, с которого начинается перечисление (например, «Вы видите»);
$m_textEmpty — текст, который выводится вместо перечисления при отсутствии предметов (например, «Здесь ничего нет.»).

После вызова параграфа значение объекта $m_total будет равно количеству предметов перечисления.

3. m_Title

Этот параграф должен выводиться на каждой сцене. Показывает ссылку «инвентарь», деньги, название сцены и последнее действие героя с предметами. Объект $m_inventoryEnabled отвечает за доступность инвентаря: true — доступен, false — закрыт (по умолчанию true). Перед вызовом параграфа необходимо установить значение объекта $m_location соответственно названию текущей сцены.

По ссылке «инвентарь» отображается список предметов, которые герой держит в руках (позиция которых равна $m_hero).

4. m_ItemActions

Этот параграф показывает описание выбранного предмета и базовые действия с ним в зависимости от ситуации. При отсутствии описания показывается описание по умолчанию. Если выбран предмет-контейнер, после описания будут перечислены содержащиеся в нём предметы (кроме контейнеров в продаже). Название выбранного предмета содержится в объекте $m_item.

5. m_SpecialActions

В этом параграфе содержатся уникальные действия для каждого предмета. Также может содержаться изображение предмета или дополнительное динамическое описание. Вывод информации осуществляется по условию, в зависимости от названия выбранного предмета ($m_item), текущей сцены ($m_location) и т.д.

6. m_Search

Этот параграф производит поиск определённого предмета в заданной позиции. Перед вызовом параграфа необходимо установить значения следующих объектов:
$m_searchPosition — позиция для поиска (если значением является пустая строка, то позиция не учитывается);
$m_searchItem — название предмета для поиска (если значением является пустая строка, то название не учитывается).

После вызова параграфа объект $m_searchList будет содержать список индексов всех найденных предметов. Объект $m_searchIndex будет содержать индекс одного из найденных предметов, выбранный случайным образом. Если поиск не дал результатов, значение объекта $m_searchIndex будет равно -1.

7. m_Move

Этот параграф перемещает выбранный предмет в другую позицию. Под перемещением предмета понимается смена его позиции или владельца. После перемещения текущий параграф-сцена обновится, объект $m_index будет содержать индекс активного предмета, $m_boxIndex — индекс контейнера, с которым взаимодействует предмет, а объект $m_textAction — автоматически сформированный текст действия героя. Код этого действия будет содержаться в объекте $m_action (список всех кодов смотрите ниже). На основании кода можно соответствующим образом описать реакцию сцены или персонажей на действия героя.

8. m_MoveAll

Этот параграф перемещает сразу несколько предметов данного перечисления в другую позицию. После вызова параграфа значение объекта $m_count будет равно количеству перемещённых предметов. Это количество не всегда будет совпадать с общим числом предметов перечисления. Например, у героя может не хватить денег для покупки всех предметов торговца. Здесь также устанавливаются значения объектов $m_action и $m_textAction.

9. m_RefreshLocation

Этот параграф обновляет текущую сцену. В версии модуля 1.0 название каждого параграфа, который вызывает m_RefreshLocation, следует занести в список $m_listPassage при инициализации объектов. Начиная с версии 1.1 делать этого не нужно.

10. m_предмет

Параграф-образец для обычных предметов (не контейнеров). Дублируйте этот параграф для каждого предмета, занесённого в список предметов $m_listItem. Названия новых параграфов должны полностью, включая падеж, совпадать с названиями предметов списка. В каждом новом параграфе следует заменить текст «m_предмет» на название данного предмета. Здесь также следует задать описание предмета (объект $m_description).

11. m_коробку

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

Торговля и передача предметов другим персонажам

Для установки режима торговли на какой-либо сцене следует после вызова параграфа m_Title задать значения следующих объектов:
$m_trader — имя текущего торговца;
$m_market — параметр торговли (коэффициент наценки): больше 0, если герой будет покупать, и меньше 0, если герой будет продавать.

Стоимость предмета при покупке или продаже будет равна номинальной цене умноженной на коэффициент наценки и округлённой до ближайшего целого. В режиме торговли к описанию выбранного предмета добавляется также его стоимость.

Объект $m_money отвечает за количество денег героя. Деньги торговцев бесконечны.

Для установки режима передачи предмета другому персонажу следует после вызова параграфа m_Title внести в объект $m_giveTo имя другого персонажа.

Коды действий

После каждого действия героя объект $m_action принимает одно из следующих значений:
0 — действия нет;
Успешные действия:
1— герой взял предмет;
2 — герой бросил предмет находившийся в руках;
3 — герой извлёк предмет из контейнера;
4 — герой поместил предмет в контейнер;
5 — герой передал предмет другому персонажу;
6 — герой купил предмет у торговца;
7 — герой продал предмет торговцу;
8 — герой взял все предметы перечисления;
9 — герой бросил все предметы находившиеся в руках;
10 — герой извлёк все предметы из контейнера;
11 — герой отдал все предметы другому персонажу;
12 — герой купил все предметы у торговца;
14 — герой продал все предметы торговцу;
Частично завершённые действия:
13 — герой купил у торговца все предметы, на которые хватило денег;
15 — герой продал торговцу все предметы, цена которых была больше 0;
Неудачные действия:
-4 — герой хотел поместить предмет в контейнер, но там не хватило места;
-6 — герою не хватило денег, чтобы купить предмет у торговца;
-7 — герой попытался продать торговцу предмет, цена которого равна 0;
-12 — герой хотел купить у торговца все предметы, но денег не хватило ни на один;
-14 — герой хотел продать торговцу все предметы, но цена каждого равна 0.

В следующей статье смотрите пример индивидуальной настройки модуля.

Комментарии: 9.

Профиль


Закрыть

Показать все комментарии

DoubleDragon
25.04.13 11:14

Поддержка своих тем оформления возможно появится уже в версии 2.0, остальное — только в долгосрочной перспективе.
Torise69
17.02.16 18:40

Замечательная вещь. Применили бы вы ещё модуль на примере(как это было сделано обыкновенным руководством)
Torise69
17.02.16 21:39

Ой, не заметил остальные части рук-ства, прошу прощения

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

При использовании любых материалов блога обязательно указание ссылки на источник