Начало ведения записей истории, после осознания перспектив проекта. Похоже, что до того были реализованы лишь прием/передача текста и зоны с локациями.
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.