Начальная версия (1)

Начало ведения записей истории, после осознания перспектив проекта. Похоже, что до того были реализованы лишь прием/передача текста и зоны с локациями.


12.06.2007

  • Первая запись в истории.
  • В классе NerealAbstractTree создание списка потомков отложено на добавление первого потомка.

13.06.2007

  • Реализована система встраивания типов в XSD, благодаря чему больше не нужны отдельные классы коллекций и списков. Например, если в XSD объявлен элемент типа CharacterCollection, то в класс вместо него вставится содержимое указанного типа, а именно IdentCollection<Character>.
  • Добавлено понятие ролей — класс Roles.Role и его наследники. В класс Command добавлено поле «необходимая роль» и проверка на ее наличие при определении доступности команды. В класс Character добавлены методы HasRole и GetRoles.
  • Добавлена команда «!роль» для просмотра ролей и управления ими.
  • Добавлен класс State<T>, являющийся посредником между базовым State и конечными классами состояний, и избавляющий от необходимости постоянно приводить тип контекста.
  • В классе Character метод RemoveContext заменен на QuitContext с числовым параметром, в котором можно передать код, возвращаемый контекстом.
  • В класс Contexts.BaseContext добавлены виртуальные методы IsCorrect (проверка корректности данных контекста) и Return (возврат из другого контекста).
  • Добавлено понятие полного идентификатора: вирт.свойство в SerializableAbstract, методы построения в NerealAbstract, перекрытое свойство в Zone / Location / Link.
  • Класс Link вписан в общее дерево мира, и является потомком зоны.
  • Класс LinkSide вписан в общее дерево мира, и является потомком локации.
  • В команде «осмотреть» показываются возможные направления.

14.06.2007

  • Добавлена команда «идти».
  • Класс LinkSide дополнен нужными свойствами для поддержки направлений по сторонам света, включая автоопределение стороны по координатам локаций.
  • Добавлены статические данные по направлениям — Directions. В них содержатся названия и шаблоны для связей, и отношения направлений между собой.
  • Добавлены команды направлений, для перемещения сразу по ним.
  • Добавлены команда «опции» и контекст опций.
  • Добавлена команда «титул».

15.06.2007

  • Добавлена возможность самоописания команд и команда «справка».
  • В классе Commands.Social добавлен метод собственного вывода справки.
  • Добавление двух одинаковых ролей более недопустимо.

18.06.2007

  • Пробная реализация предметов. Идентификаторы предметов формируются из идентификаторов шаблонов и счетчика. В локации добавлен список предметов. Команда «смотреть» доработана на осмотр списка предметов в локации и осмотр отдельного предмета.
  • Реализована цветовая система ANSI.
  • Из локации удален список предметов. Вместо того хранение информации о местонахождении предмета перенесено в сам предмет, что гарантирует его единственность.
  • Добавлены команды: инвентарь, взять, положить.
  • В класс ItemTemplate добавлена проверка на возможность создания предмета по этому шаблону. По группам создавать предметы запрещено.
  • В классе ItemTemplate добавлены методы IsTemplateOf для проверки, является ли данный шаблон основным для указанного предмета/шаблона. В классе Item добавлен метод IsExemplarOf для проверки, является ли данный предмет экземпляром указанного шаблона.
  • Реализован контекст текстового редактора. (к сожалению, пока не сохраняющийся при перезапуске сервера)
  • Добавлена команда «внешность».
  • Реализовано сохранение текстового редактора с помощью создания отдельных контекстов редактирования для конкретных случаев.
  • Создан контекст CharacterDescriptionContext, команда «внешность» переделана на его вызов.

19.06.2007

  • Реализован справочный словарь — общий источник справки.
  • Загрузка всех статических данных сведена в одно место, и в команду управления сервером добавлена возможность перезагрузки статики.
  • В список EchoFlag добавлен флаг Flush — моментальная отсылка текста, без ожидания конца обработки пульса.
  • Метод сравнения алиаса и имени доработан до сравнения по словам. Теперь во всех обращениях можно указывать части слов, разделенные точкой. Например: «порт», «арв», «пор.арв» -> портал в Арвест, «вет», «подн», «в.п», «вет.подн» -> Ветер Поднебесья, «огн», «змей», «о.зм», «огн.зм» -> огненная змейка, «в.огн.пер» -> выбор огненного перехода, и т.д.
  • Убрана работа сервера через Socket.Select, все равно ничему оно не помогало. Добавлено понятие периода пульса, и после каждого пульса сервер считает время работы и делает паузу, равную недостающей до периода.

20.06.2007

  • В класс Serializer добавлена собственная поддержка типа DateTime, чтобы тот сохранялся в нужном формате.
  • В класс World добавлено свойство Config.

21.06.2007

  • Реализован класс DistributedList.
  • Реализован статический класс ProcessRegistrator. В класс NerealAbstract добавлены методы регистрации на обработку и виртуальные методы Process*** для самой обработки.
  • Добавлена возможность отправки NerealCode.
  • Добавлена отправка текущего времени при входе. (NCode)
  • Добавлена отправка имени при входе. (NCode)

22.06.2007

  • Сервер разделен на две части: Launcher.exe — компилятор / загрузчик / сетевой сервер, и Nereal.dll — все остальное. Теперь весь Нереал может быть обновлен и перекомпилирован на ходу, и без потерь подключений.
  • В интерфейс INerealServer добавлен метод Echo. При перекомпиляции сервера делается всеобщее оповещение о начале и окончании обновления. Если при компиляции были ошибки, то просто загружается предыдущая версия.

24.06.2007

  • Реализовано ведение серверного лога: в Launcher добавлен класс Logger, в интерфейс INerealServerCallback добавлен метод LogOutput.
  • Все выводы в консоль заменены на вызов метода LogOutput.
  • Исправлена проблема с истечением времени жизни удаленных объектов.
  • В Config добавлены свойства NerealSpeed и CurrentPulse.
  • В NerealAbstract добавлено вирт.свойство TimeSpeedCoeff.

25.06.2007

  • Создано пространство имен WorldLog с типами: Log, LogItem, LogType.
  • В World добавлено поле Log, для ведения или чтения мирового лога.
  • В Character добавлено свойство InputQueue, для хранения очереди ввода.

26.06.2007

  • Удалена первая попытка написать лог.
  • Написаны классы LogWriter и LogReader.
  • Добавлены параметры командной строки: /p portnum и /r replayname.
  • Полностью реализованы запись лога и его последующее воспроизведение.
  • В качестве испытания обновления на ходу добавлена команда «дать», поправлена команда «смотреть» для работы с инвентарем, исправлено восстановление кодировки в подключениях после обновления.

28.06.2007

  • Проведена децентрализация xsd-схем: вместо одной World.xsd теперь их может быть любое число и в любых местах.
  • Создание объединенной xsd-схемы и генерация исходников по схемам встроены в Launcher.