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

Перенос работы в линукс.


04.07.2007

  • Проект успешно перенесен на Sourceforge.
  • Генератор кода по схемам переделан на генерацию одного единого файла вместо отдельного для каждой схемы.
  • Схема World.xsd разделена на множество отдельных схем, собираемых вместе при запуске.

09.07.2007

  • Файлы статики вынесены в отдельный каталог Static и включены в репозитарий.

10.07.2007

  • Класс Character разделен на два: AbstractCharacter и Character.
  • Классы контекстов и состояний адаптированы к AbstractCharacter.

12.07.2007

  • Классы команд адаптированы к AbstractCharacter.
  • Добавлен класс CommandCondition - его наследники представляют собой условия на команды.
  • Добавлен класс CommandConditionAll - группировка условий с выбором минимального результата.
  • Добавлен класс CommandConditionAny - группировка условий с выбором максимального результата.
  • Добавлен класс CommandConditionRole - условие на роль.
  • Из класса Command удалено свойство Role. Вместо него добавлено свойство Condition - условие команды, которое может быть как единственным, так и группой.
  • Команды, ранее использовавшие ограничение по роли, исправлены на новый способ условий.
  • В класс CommandCondition добавлен метод EchoError - вывод ошибки по этому условию.

13.07.2007

  • Добавлен параметр компиляции "-codepage:utf8".
  • Реализована нормальная проверка отключения клиентских сокетов.
  • Добавлены команды "пароль" и "!пароль", а так же поддерживающий их контекст ChangePasswordContext.
  • Класс NerealClient адаптирован к AbstractCharacter.
  • В класс AbstractCharacter добавлен метод ExchangeConnection для обмена подключениями с другим персонажем.
  • При входе персонажа сделан обмен подключениями и отключение временного персонажа.

16.07.2007

  • В Launcher добавлен класс ServerSettings, разбирающий и хранящий параметры командной строки.
  • В Launcher добавлен параметр -g, означающий запуск только генерации файлов по xsd-схемам.
  • Добавлен класс Observer, наследуемый от AbstractCharacter.
  • Свойства Name, Title, Description, Options перенесены из AbstractCharacter в Character.
  • При внешнем подключении в режиме воспроизведения создается клиент с отрицательным id и новым экземпляром Observer в качестве персонажа. Список созданных Observer хранится отдельно.
  • Метод World.Echo рассылает не только всем зарегистрированным персонажам, но и всем Observer'ам по их отдельному списку.
  • В классе AbstractCharacter метод Login переименован в EndLogin и сделан виртуальным.
  • В классе AbstractCharacter добавлены вирт.методы BeginLogin и GetDefaultContext.
  • В классе Observer свойство Name всегда имеет значение "наблюдатель".
  • Тип CommandGroup переименован в CommandFlag и сделан множественным.
  • Добавлен флаг CommandFlag.Observer, команды с его наличием разрешены Observer'ам.
  • Добавлена команда "!пульс".
  • Команды адаптированы к использованию их Observer'ом.
  • Добавлен модификатор положения "в глубокой медитации", добавляемый при отключенном состоянии.

18.07.2007

  • Добавлена особенность Observer'а: его не видит никто и ничто, он видит всё (включая себе подобных).
  • Добавлено пространство имен Nereal.Recipes с классами в нем: Recipe, Requirement, RequirementAll, RequirementAny, RequirementItem, RequirementInstrument, RequirementTime, Resource, ResourceItem, ResourceInstrument, ResourceTime, Result, ResultGroup, ResultItem.
  • В World добавлено свойство Recipes - глобальная коллекция рецептов.
  • В Utility добавлен метод GetExemplarItems - запрос списка предметов определенного шаблона.
  • В Utility добавлены методы GetFirst и GetCount - запрос первого элемента списка и запрос количества элементов в списке.
  • В NerealAbstract добавлен виртуальный метод Delete - удаление объекта из дерева. Этот метод в Character, Item и ItemTemplate так же удаляет объект из глобальной коллекции.
  • В World добавлены методы GetRecipes - получение списка рецептов по некоторым условиям.
  • Добавлен базовый класс AutoRecipeCommand - команда, только вызывающая рецепт определенной группы.
  • Добавлены команды "согнуть" и "разогнуть".
  • В Recipe добавлены свойства SuccessMessage и LookType.
  • В Requirement и Resource добавлено свойство ArgumentNumber.
  • Сделан вывод сообщения об успешном производстве рецепта.
  • В CommandContext реализован перехват ошибок при вызове команд.

20.07.2007

  • Исправлена ошибка с выводом самому себе трехвариантного выбора окончания.
  • Исправлена ошибка с отсоединением при дисконнекте персонажа от подключения, из-за чего даже после выхода казалось, что персонаж подключен.

25.07.2007

  • Класс ItemTemplates.Group переименован в ItemTemplates.Set.
  • Добавлен класс ItemTemplateGroup, представляющий группу в иерархии шаблонов и содержащий шаблоны и другие группы.
  • В World свойство ItemTemplates изменено с коллекции шаблонов на корневую группу шаблонов и переименовано в RootItemTemplate.
  • Шаблоны предметов успешно реорганизованы на иерархию групп (дерево).
  • Добавлен класс RecipeGroup, представляющий группу в иерархии рецептов и содержащий рецепты и другие группы.
  • В World свойство Recipes изменено с коллекции рецептов на корневую группу рецептов и переименовано в RootRecipe.
  • Методы GetRecipes перенесены из World в RecipeGroup.
  • В GlobalConfig добавлены свойства MeridianLength и EquatorLength.
  • В NerealAbstract добавлен метод GetSphereCoordinates.
  • Добавлена команда "время", показывающая текущее время.

27.07.2007

  • Интерфейсы связи между Launcher и Nereal вынесены в отдельную сборку Interfaces.

28.07.2007

  • В InputArgs добавлены методы GetDouble.
  • Добавлена команда "!управление время" для изменения текущего времени.
  • В World и AbstractCharacter добавлены методы UpdateTime для оповещения о текущем времени.

31.07.2007

  • Добавлена структура StarEquatorCoordinates - экваториальные координаты светила. Реализован конструктор для расчета координат солнца. Реализован метод расчета высоты светила в определенной точке.
  • В GlobalConfig добавлено несохраняемое свойство Sun - текущие временные координаты солнца.
  • В GlobalConfig добавлены свойства WorldSavePeriod (по умолчанию 3000) и SunMovePeriod (по умолчанию 10).
  • Реализовано периодическое сохранение мира.
  • В Location добавлено несохраняемое свойство SunHeight.
  • В Location добавлен метод GetWeatherTemplate.
  • В команде "смотреть" в осмотре локации добавлен вывод погодной строчки.

07.08.2007

  • Все файлы статики переведены в кодировку UTF8.
  • Добавлен класс Weather. В World добавлено свойство Weather.
  • Добавлены классы ClimateZone и Cyclone. В Weather добавлены их списки.
  • В Zone добавлено свойство Climate, получаемое либо из собственного поля зоны, либо из стандартных по широте зоны.
  • Добавлены статические данные Climates - стандартные широтные климаты.
  • В Weather добавлены методы GetClimate и GetClimateFor.
  • В Zone и Location добавлено свойство ParentZone - просто возвращает Parent как Zone.

11.08.2007

  • Исправлена ошибка при попытке получить элемент в IdentCollection по индексу null.
  • В Weather добавлены методы GetCyclone - получение циклона по координатам.
  • В ClimateZone добавлены методы: GetTemperatureChange - изменение температуры в данную единицу времени, GetTemperatureHeatUp - расчет нагрева, GetTemperatureCooling - расчет остывания.
  • В GlobalConfig свойство SunMovePeriod переименовано в WeatherPeriod - период обновления всей погоды. Так же периоды там сделаны в секундах вместо пульсов.
  • В Location добавлено свойство Temperature - текущее значение температуры, постепенно стремящееся к значению, выдаваемому методом GetFinalTemperature.
  • В Weather добавлен метод Process, вызываемый один раз в период обновления погоды (указанный в конфиге).
  • Добавлен класс CycloneVector.
  • В Coordinates добавлены: свойства Length и PlaneAngle, статический метод Center, операторы умножения и деления на число.
  • Добавлена структура Wind. В Weather добавлены методы GetWind.
  • В Location добавлены несохраняемые кэширующие свойства CurrentCyclone, Wind, finalTemperature.

13.08.2007

  • В GlobalConfig добавлены свойство MaxCyclones, вычисляемые свойства PlanetRadius и WeatherNerealPeriod.
  • В Cyclone добавлен метод Process - внутренняя обработка циклона - перемещение, рост, затухание.
  • В Cyclone добавлен метод Intersect - обработка пересечений циклонов.
  • В Cyclone добавлены свойства: MaxPower, LifeTime, CurrentTime. Свойство Power сделано вычисляемым.
  • Реализовано рождение и умирание циклонов.
  • Исправлено сохранение мира, которое происходило 10 раз подряд.

14.08.2007

  • Добавлена структура SphereCoordinates.
  • Добавлен статический класс CMath с дополнительными математическими константами и методами.
  • В GlobalConfig удалено свойство MeridianLength, а при изменении EquatorLength обновляется BaseRadius в SphereCoordinates.

16.08.2007

  • В NerealAbstract тип свойства Coords изменен на SphereCoordinates. Удален метод GetSphereCoordinates. Во всех наследуемых и зависимых классах переделана работа со свойством Coords.
  • Добавлена вспомогательная структура SphereCoordinatesDiff.

17.08.2007 - 13.09.2007

  • Бессмысленная возня со всем, кроме Нереала.
  • Попытка сделать универсальный xpath-поиск.
  • Генерация информации о свойствах классов и запрос по ней значений свойств.

14.09.2007

  • Информация о свойствах переделана на генерик-классы, что решило проблему с сохранением коллекций.
  • Сериализация переделана на универсальную, без необходимости генерации метода Serialize в каждом классе.

15.09.2007

  • Генерация методов установки значений свойств по их номеру/имени.

16.09.2007

  • Десериализация переделана на универсальную, без необходимости генерации методов Deserialize/PostDeserialize в каждом классе.
  • Ввиду того, что получение объекта по идентификатору стало через делегаты, введен класс Finders с набором статических методов-делегатов.

19.09.2007

  • В иерархию классов NodeInfo добавлены методы упрощенных получения и установки значений свойств.

21.09.2007

  • Добавлен класс XsiTypeInfo, представляющий атрибут с информацией о типе и входящий во все классы (тогда как при сериализации он сохраняется только если тип отличен от номинального).

22-24.09.2007

  • Доделан класс Navigator для работы xpath по объектам в памяти.
  • Добавлена команда "!запрос" для выполнения xpath-запросов.

26.09.2007

  • Доработана команда "!запрос" для распознавания типа результата запроса и различных способов его вывода.
  • Добавлен флаг EchoFlag.NotWrap - запрет переноса слов в посылаемой строке.

28.09.2007

  • Доработана команда "!запрос": ошибка при отсутствии запроса, параметр "все" для полного вывода всех результатов, корректная обработка элементов строковых коллекций.
  • Снова переделаны Finder'ы: вместо статического класса и указания в схеме однотипной информации, теперь методы FindById генерируются в самих классах.
  • Добавлены статические данные BodyParts - все возможные типы частей тела. (пока там занесены только три)

30.09.2007

  • Добавлен класс Race - раса для персонажей.
  • Добавлены статические данные Races - список рас.
  • При загрузке библиотеки Nereal.dll добавлена установка инвариантной культуры текушему рабочему потоку.

01.10.2007

  • Добавлен класс Form - конкретная форма персонажа, содержащая все параметры, зависящие от формы, в частности, расу. Также содержит предыдущую форму, то есть формы организованы в виде стека.
  • В класс Character добавлено свойство CurrentForm.

02.10.2007

  • В классе Race добавлено свойство Playable.
  • Значения SphereCoordinates при сериализации округляются до 8го знака для исключения погрешностей перевода градусы<->радианы.
  • Исправлена ошибка, при которой иногда метод SphereCoordinates.AngleDistance выдавал NaN, что портило все последующие расчеты. (точнее, ошибка замаскирована с помощью округления)

03.10.2007

  • Статические данные BodyPartTypes заменены на ItemSlotTypes.
  • В классе Race добавлено свойство Slots - список слотов для данной расы.

04.10.2007

  • Добавлен класс ItemSlotDescription - описание косметики для слота.
  • В классах ItemSlot и ItemSlotType добавлено свойство Description.
  • В классе Character добавлено свойство LostBody - список отсутствующих частей тела.
  • В классе Form добавлены свойства: AddSlots - список добавленных слотов, LostSlots - список отсутствующих слотов.
  • В классе NerealAbstract добавлены вирт.метод GetSlots и метод GetSlot.
  • Добавлены классы ItemBlock и ItemTemplateBlock - базовые классы блоков для экземпляров и шаблонов предметов.
  • В классе Item добавлено свойство Blocks - список блоков экземпляра.
  • В классе ItemTemplate добавлено свойство Blocks - список блоков шаблона.
  • В классах Item и ItemTemplate добавлен метод GetBlock.
  • В методе World.NewItem добавлено создание экземплярных блоков по шаблонным.
  • Добавлены классы: ItemStructure, SimpleItemStructure, ComplexItemStructure.
  • В классе ItemTemplate добавлено свойство Structure.
  • Добавлены статические данные Materials - список доступных материалов.
  • В классе Item добавлены свойства: Quality, Damping.
  • В классе Item добавлены вычисляемые свойства: CurrentQuality, Weight, Volume.