Объектная модель Нереала 1.xx

15 октября 2003 года (на самом деле, это дата файла, а не написания текста)

(для удобства вместо слова "пользователь" употребляется слово "игрок")

  1. Объект - это набор функций (и их параметров), описывающих свойства объекта, а так же информация о расположении объекта.
  2. Ввиду пункта 1, отсутствует понятие типа или вида объектов. Различных "типов" может быть до 2^X, где X - количество доступных необязательных функций.
  3. Расположение.
    1. Может быть четыре варианта расположения объекта.
      1. В комнате/локации. Видно при осмотре комнаты.
      2. У игрока в руках/"кармане". Видно как инвентарь, и только самому игроку.
      3. Одето на игроке. Видно при осмотре игрока. Возможно лишь при наличии соответствующей функции.
      4. Внутри другого объекта-"контейнера". Видно при осмотре "контейнера".
    2. Хранится расположение в виде списка идентификаторов объектов в соответствующих данному расположению местах. Таким образом сам объект освобождается от этого.
  4. Функции.
    1. Функции задают все свойства и всю функциональность объектов.
    2. Функции имеют параметры, которые могут быть различных типов.
      1. Флаг - функция дает что-либо одним своим наличием.
      2. Логический - функция может принимать лишь два значения, 0 или 1.
      3. Строка - любая строка, даже пустая.
      4. Текст - многострочный текст, хранимый внутри самого объекта.
      5. Внешний текст - многострочный текст, хранимый в отдельном файле.
      6. Целое число - любое целое число в диапазоне от 0 до 2147483647.
      7. Действительное число - любое положительное действительное число.
      8. Перечислимый - функция может принимать лишь одно из некоторого набора значений.
      9. Шаблон - обычная строка, используемая в качестве шаблона для генерации текста.
      10. Объект-шаблон - ссылка на объект-шаблон.
    3. Некоторые функцию налагают дополнительные условия на свои значения, но все они основаны на вышеперечисленных типах.
    4. Обязательные функции: название, род, описание, вес и объем. Все остальные являются необязательными, но именно они и создают функциональность объекта.
  5. Команды.
    1. Команды, оперирующие с объектами, можно разделить на три группы.
      1. Команды создания объектов. Наиболее сложная из всех группа. Сюда входит: создание заготовка, наполнение его функциями, и завершение. Подробнее смотрите раздел 7.
      2. Команды перемещения объектов. Их результатом является изменение расположения.
      3. Команды, использующие определенные функции объекта. Например, если есть функция "текст", то применение команды "читать" выдаст параметр этой функции, и таким образом прочитает текст.
  6. Идентификация объектов.
    1. Внутренняя идентификация: все объекты нумеруются, ибо может существовать два совершенно одинаковых объекта. Эти номера важны лишь для системы, и игрок ничего не знает о них. Используются для точной идентификации и в списках объектов.
    2. Внешняя идентификация: название. Если в названии несколько слов, то достаточно указать начало одного из слов. Поиск ведется в той области, с какой работает команда, и находится первый подходящий объект.
    3. Возможны модификаторы внешней идентификации.
      1. Если перед названием объекта указано число (отделенное ПРОБЕЛОМ), то оно считается количеством данных объектов. Применительно только в командах изменения расположения. Пример:
        команда - взять 2 ложка
        действие - Вы взяли две ложки.
        (примечание: на данный момент не реализовано)


      2. Если перед названием объекта указано число (отделенное ТОЧКОЙ), то оно считается номером объекта среди группы аналогичных. Пример:
        команда - взять 2.ложка
        действие - Вы взяли ложку. (вторую, если их две)
        или - Здесь нет 'ложка'. (если есть только одна)


  7. Команды создания и редактирования объектов.
    1. Принцип редактирования объекта заключается в том, что нужно выбрать его, и затем станут доступными команды для его изменения.
    2. Создание нового объекта: "+создать". Создаётся пустой объект, не имеющий даже названия.
    3. Изменение уже имеющегося объекта: "+изменить <что>". Объект должен быть либо в руках, либо в комнате. Он переводится в режим редактирования, исчезая из своего бывшего местонахождения. По окончанию оказывается на том же месте.
    4. Уничтожение объекта: "+уничтожить <что>". Объект должен быть либо в руках, либо в комнате. После применение команды объект безвозвратно исчезает.
    5. Добавление функции в объект: "+добфунк <функция> [значение]". В зависимости от типа функции значение требуется или нет. При типе "текст" вызывается многострочный редактор. Если функция уже существует, то её значение замещается или редактируется.
    6. Удаление функции из объекта: "+удалфунк <функция>".
    7. Просмотр значения функции: "+осмфунк [функция]". Если не указать конкретную функцию, выведется список всех функций с их значениями.
    8. Список функций в объекте без значений: "+списфунк".
    9. Список всех доступных функций и их типы: "+функции".
    10. Завершить редактирование объекта: "+завершить".
    11. Отменить редактирование объекта: "+отменить". Если объект был только что создан, он уничтожается, а иначе возвращается в своё прежнее состояние.
  8. Система объектов-шаблонов.
    1. При наличии в объекте специальной функции "шаблон", он считается шаблоном, и при завершении помещается в отдельный список. Доступ и работа с шаблонами осуществляется с помощью специальных команд.
      1. Просмотр списка имеющихся шаблонов: "+списшабл".
      2. Удаление шаблона: "+удалшабл <что>".
      3. Просмотр состава шаблона (функции с их значениям): "+осмшабл <что>".
      4. Изменение шаблона: "+измшабл <что>".
      5. Добавление шаблона в текущий редактируемый объект: "+добшабл <что>".
      6. Создание нового объекта на основе шаблона: "+создшабл <что>".
    2. Кроме облегчения создания множества одинаковых или похожих объектов, шаблоны еще бывают необходимы для некоторых функций объекта (см.п. 4.2.10.). Как правило, этим задаётся, во что превратится объект в таком-то случае.