Subversion Repository Public Repository

fonline_sdk

This repository has no backups
This repository's network speed is throttled to 100KB/sec

@ 495
Entry Size Revision Updated
ASCompiler 495 Tue 28 Apr, 2015 19:58:28 +0000
CodeAnalyzer 358 Mon 27 Feb, 2012 02:46:16 +0000
DataPatcher 298 Mon 14 Nov, 2011 21:55:23 +0000
DialogEditor 495 Tue 28 Apr, 2015 19:58:28 +0000
InterfaceEditor 495 Tue 28 Apr, 2015 19:58:28 +0000
Mapper 495 Tue 28 Apr, 2015 19:58:28 +0000
MrFixit 419 Sat 01 Feb, 2014 23:31:11 +0000
ObjectEditor 400 Sat 27 Apr, 2013 19:27:18 +0000
Runtime 396 Tue 16 Apr, 2013 12:09:50 +0000

Commits for fonline_sdk/Tools

Revision Author Commited Message
495 cvet picture cvet Tue 28 Apr, 2015 19:58:28 +0000

Идентификаторы прототипов переведены с индексированных номеров на строковые.
Имя прототипа это имя файла без расширения.
В файле прототипа содержатся секции с данными для новой копии предмета, для прототипа и тексты локализации.

Добавлена автоматическая концертация старых номеров и имен прототипов в новые при загрузке карт, диалогов и прочих систем, содержащих эти данные.
При конвертации используется файл Server/data/ItemPidsConversion.txt, где можно добавлять данные о своих прототипах.

Методы GetProtoId() и GetType() переименованы в свойства ProtoId и Type.
Добавлено строковое поле в объект маппера MapperObject::ProtoName, где записано имя прототипа.

Флаги предметов Flags разделены на отдельные свойства bool Is...
FLAG_HIDDEN -> bool Item::IsHidden
FLAG_TRAP -> bool Item::IsTrap
и т.д.

Добавлен механизм менеджмента контента в скриптах.
Используется прагама content:
#pragma content Group fileName
где Group может быть Dialog или Item, а fileName имя файла без расширения.
При указании файла его хеш будет помещен в пространство имен Content::Dialog или Content::Item, который можно использовать при работе с файлами диалогов или прототипами.
При загрузке сервера он автоматически провалидирует данные файлы на предмет их щагрузки и, если их нет, то выдаст ошибку загрузки.

494 cvet picture cvet Sun 19 Apr, 2015 17:01:46 +0000

Правки инструментария после ревизии 491.
Исправлена работа редактора диалогов.
Если диалог не будет загружаться, то пересохраните его в версии 2.22.

Правка работы нововой системы свойств для персонажей.
Проведены некоторые правки перенесенных свойств.

492 cvet picture cvet Sat 18 Apr, 2015 08:31:58 +0000

Правки инструментария псоле ревизии 491.
Исправлена работа маппера.

491 cvet picture cvet Fri 17 Apr, 2015 17:17:42 +0000

Инструментарий временно находится в неработоспособном (или полуработоспособном) состоянии, будет исправляться в последующих ревизиях.
В принципе и движок тоже, т.к. правки слишком объемные.

Для персонажей и прототипов предметов добавлен новый механизм свойств.
Создание свойств вынесено в файл _defines.fos.

В опциях свойств добавлена новая опция Group = name.
Можно группировать свойства по некоторому признаку (перки, трейты), и они будут автоматически помещены в глобальный массив ClassProperty[] ClassPropertyGrpoupName.
Например:
#pragma property Critter Protected MyValue1 Group = Other
#pragma property Critter Protected MyValue2 Group = Other
будет создан массив CritterProperty[] CritterPropertyOther, куда будут помещены эти два свойства MyValue1 и MyValue2.

Добавлен механизм установки дефолтных опций для свойств, что бы сократить количество повторяющегося кода.
Предыдущий пример может переписан так:
#pragma property Critter Defaults Group = Other
#pragma property Critter Protected MyValue1
#pragma property Critter Protected MyValue2
#pragma property Critter Defaults // Эта конструкция сбрасывает умолчания

Для свойств, которые разрешаются для регистрации (AddRegistrationProperty) создан глобальный массив с этими свойствами
CritterProperty[] CritterPropertyRegProperties

Virtual/VirtualClient/VirtualServer свойства переделаны на
VirtualPrivate - приватное свойство для клиента и сервера;
VirtualPrivateClient - приватное свойство только для клиента;
VirtualPrivateServer - приватное свойство только для сервера;
VirtualPublic - публичное свойство, имеют доступ все;
VirtualProtected - защищенное свойство, имеет доступ сервер и клиент.

Исправлен каст reflection::typeof к type.

Команда ~param заменена на ~prop:
~param crid index value
~prop crid prop_name value

490 cvet picture cvet Fri 27 Mar, 2015 22:20:46 +0000

Правка багов в работе новой системы свойств.

489 cvet picture cvet Fri 27 Mar, 2015 20:12:39 +0000

Перенесен интерфейс персонажа.
Из движка удален код введенных интерфейсов, поэтому использовать сейчас можно будет только их скриптовые аналоги.
В связи с этим были вынесены из движка некоторые данные персонажа, которые использовались в этих интерфейсах.

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

В свойства добавлена поддержка строк (string) и массивов примитивов (int[], uint64[] и т.п.).
Они синхронизируются по тому же принципу, что и обычные примитивы.

Лексемы предметов перемещены в новые свойства, в строку Lexems
#pragma property "Item Public string Lexems"
void Item::SetLexems
string@ ItemCl::Lexems

Для сохранения текстовых файлов добавлена функция
bool SaveText(string& filePath, string& text)
Для сохранения скриншотов добавлена функция
bool SaveScreenshot(string& filePath)
Удалены функции
bool SaveScreenshot()
bool SaveLogFile()
void filename_logfile( string& filename )
void filename_screenshot( string& filename )

Удален следующий скриптовый функционал:
hash ItemCl::GetScriptId() const
uint GetMessageFilters(int[]@+ filters)
void SetMessageFilters(int[]@+ filters)
int GetScroll(int scrollElement)
void SetScroll(int scrollElement, int value)
bool __ConsoleActive
string@ GetLastError()

В скриптовый GUIObject добавлено свойство
bool IsNotCathcable
что означает, что за этот элемент нельзя перетаскивать панель.

488 cvet picture cvet Thu 19 Mar, 2015 20:57:32 +0000

Добавлена возможность установки колбеков на получение и установку свойств.

Для получения свойства (используется для виртуальных свойств) используется функция
bool SetPropertyGetCallback(const string& className, const string& propertyName, const string& scriptFunc)
сигнатура функции колбека:
type FuncName(classType& obj)
возвращаемое значение должно быть того же типа, что и у свойства;
obj - объект для которого вычисляется значение (пока может быть Item/ItemCl).

Для добавления колбека на изменения свойства используется функция
bool AddPropertySetCallback(const string& className, const string& propertyName, const string& scriptFunc)
сигнатура функции колбека:
void FuncName(classType& obj, type oldValue)
type oldValue это предыдущее значение свойства, тип должен такой же, что и у свойства;
obj - объект для которого вычисляется значение (пока может быть Item/ItemCl).
Внутри данного колбека вы можете менять значение свойства, но колбеки уже не будут вызваны для данного изменения.

Добавлены опции настройки свойств, они указываются после определения свойства.
Сейчас доступны следующие:
Default = integer - стартовое значение по умолчанию;
Min = integer - ограничение на минимальное значение;
Max = integer - ограничение на максимальное значение;
Random = bool - генерация случайного стартового значения.
Пример использования:
#pragma property "Item Public uint MyProp Deafult = 10 Min = 5 Max = 20"
что означает, что при создании предмета данное свойство будет инициализировано значением 10, а по мере работы с ним не сможет быть меньше 5 или больше 20.

Настроены более корректно уровни доступа свойств предметов (см. _defines.fos).
Это повлияло на устранение бага с отсутствующей анимацией открытия двери.

Локальные переменные предметов вынесены в свойства.

Исправлены прочие баги связанные с введением новой системы свойств.

486 cvet picture cvet Tue 17 Mar, 2015 05:24:06 +0000

Правка компиляции клиентского скрипта.

484 cvet picture cvet Mon 16 Mar, 2015 18:09:54 +0000

Начата реализация новой системы свойств сущностей.
Сейчас для сущностей используются различные системы работы с их данными:
- хардкод свойства (Id, Access);
- индексированные параметры персонажей (ST_LUCK, SK_SNEAK);
- общие расшаренные поля (Item::Val0..9);
- пользовательские поля bindfield;
- локальные и уникальные переменные (LVAR_xxx, UVAR_zzz).
Новая реализация заменит все эти подходы на один унифицированный для всех сущностей - карт, локаций, предметов, персонажей.

Можно будет добавлять свои свойства в любом месте, что позволит писать обособленные моды более гибко.
Работы по введению новой системы будут идти параллельно миграции пользовательского интерфейса в скрипты.

Свойство (Property) будет декларироваться с помощью прагмы property
#pragma property "Class AccessType Type Name"
Class - класс сущности, пока может быть только Item;
AccessType - уровень доступа к свойству:
- Virtual - свойство виртуальное, т.е. значение вычисляется при каждом обращении к нему, нигде не хранясь физически; установка колбека на вычисление значения еще не введено;
- VirtualClient - то же, что и Virtual, но присутствует только в клиентских скриптах;
- VirtualServer - то же, что и Virtual, но присутствует только в серверных скриптах;
- Private - закрытое свойство, не передается по сети никому;
- PrivateClient - то же, что и Private, но присутствует только в клиентских скриптах;
- PrivateServer - то же, что и Private, но присутствует только в серверных скриптах;
- Public - открытое свойство, доступно для просмотра всем игрокам;
- PublicModifiable - то же, что и Public; возможно изменение значения игроком, которому принадлежит;
- Protected - защищенное свойство, доступно для просмотра только игроку, которому принадлежит;
- ProtectedModifiable - то же, что и Protected; возможно изменение значения игроком, которому принадлежит;
Type - тип свойства, пока может быть любым примитивом размером 1, 2, 4 или 8 байт (int, bool, uint64, hash и т.п.); в будущем будет добавлен string и dict;
Name - имя свойства, должно быть уникальное в рамках одной сущности; по имени происходит последующее сохранение и загрузка в сохранениях мира и клиентов;

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

Удален следующий функционал из скриптов:
MapperObject::AnimStayBegin
MapperObject::AnimStayEnd
MapperObject::AnimWait
MapperObject::InfoOffset
uint Item::GetCount() const
void Item::SetCount(uint count)
void Item::Update() const
int8[]@ GetItemDataMask(int maskType)
bool SetItemDataMask(int maskType, int8[]& mask)
uint ItemCl::GetCount() const
uint Item::GetCount() const
void Item::SetCount(uint count)
void Item::Update() const
int8[]@ GetItemDataMask(int maskType)
bool SetItemDataMask(int maskType, int8[]& mask)
uint ItemCl::GetCount() const

Количество теперь меняется изменением свой свойства Count.
Так же нет необходимости вызывать Update на предмете, свойства синхронизируются атвоматически.
Маска данных теперь не устанавливается в рамках новой системы.

482 cvet picture cvet Sat 07 Mar, 2015 20:55:59 +0000

С данной ревизии движок официально входит в режим переработки архитектуры взаимодействия контента с движком.
Архитектурные правки напрвлены не на расширение функционала, а на упрощение разработки на движке.
Движок станет менее монолитным, что позволит создавать общий контент, не имеющий привязки к определенной игре.
Еще это значит, что движок станет еще более нестабильным, будет отсутствовать совместимость между сохранениями между ревизиями.
А так же будет отсутствовать совместимость между контентом. Но для его миграции будут предложены варианты на подобие mapper_patcher.fos.

Продолжается работа по переходу индексации различных сущностей с номеров на имена.
В данной ревизии произведен переход для локаций и карт, подготовлена почва для перехода прототипов предметов и персонажей.
Прототипы локаций выделены в отдельные файлы с расширением foloc, там содержится информация о структуре и тексты локализации из FOGM.MSG.
Генерация мира перемещена в скрипты, в зарезервированную функцию generate_world.
В команды загрузки карты или локации теперь передается ее имя, а не идентификатор.

Бинарники теперь вновь будут работать на WindowsXP (перестали с 477 ревизии).

Дополнительная дебаг информация при выводе в логе сервера из скриптов отключена по умолчанию.

Изменения по скриптам.
Был введен новый тип hash, который на данный момент является алиасом для uint.
В данных под этим типом будут хранится хешированные значения строк.
Для получения хеша из строки или наоборот используются функции GetStrHash / GetHashStr.

Все данные содержащие номера прототипов, функций и имен файлов перемещены под данный тип.

Изменен тип на строку для данных полей
string@ MapperObject::Item_AmmoPid
string@ MapperObject::Scenery_ToMap (переименовано с Scenery_ToMapPid)

Изменена работа функции маппера
bool SaveMap(MapperMap@+ map, string& fileName, int pathType, bool keepName = false)
на
bool SaveMap(MapperMap@+ map, string@+ customName = null)
сейчас карта будет сохранена под текущим именем или под именем переданным в customName.

Обновлен скрипт для миграции карт на новый механизм, см. mapper_patcher.fos.
Он теперь в дополнение к правке номера дилога на имя, правит номер Scenery_ToMap на имя карты.