Начальная версия (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.