Достаточно поигравшись с модом Репозитории (Collector bags v1.0) и столкнувшись с рядом проблем в совместимости, я понял, что надо менять концепцию мода. И менять кардинально. Поэтому, начинаю новый проект с "чистого листа". А поскольку задачи, которые я буду решать, могут заинтересовать начинающих мододелов, постараюсь как можно детальнее проиллюстрировать весь процесс создания мода.
Первым делом попробую сформулировать новый алгоритм.
Но прежде, напомню о назначении или "призвании" мода Репозитории - хранилища по категориям, этакие "бездонные сумки", автоматически сортирующие все попадающие в инвентарь объекты, что избавляет игрока от необходимости постоянно их выкладывать и в то же время, легко доступны.
Главной проблемой первой версии мода стали объекты не подлежащие немедленной сортировке. И если задачу, например, с медвежьими шкурами, которые надо насобирать определенное количество, или Алыми корнями Нирна и тому подобное, можно решить путем создания "стоп-листа", то специальные объекты из DLC HearthFire вообще не видны игроку и не должны перемещаться из инвентаря! Таким образом, правильное решение - это отсутствие действия автосортировки по-умолчанию!
Итак! Цели обозначены, проблемы определены. Попробую представить порядок действий мода, пока в общих чертах.
Необходимые шаги по созданию мода:
* Создаю контейнеры для каждой категории, к которой хочу иметь отдельный доступ и размещаю в "мире". Необходимо продумать размещение для облегчения доступа игрока к ним.
* На каждый контейнер вешаю скрипт, проверяющий поступающий объект на наличие "keyword" характеризующего данную категорию. Это исключит попадание "сторонних" объектов в это хранилище.
* Если в первой версии, любой объект попавший в инвентарь подвергался сортировке, то теперь этого не будет. При попадании объекта в инвентарь ничего не происходит! Это позволит работать игровым скриптам в "штатном" режиме.
* Автосортировка будет производится на основе списка объектов, выбранных игроком. Нужно придумать механизм создания такого списка. В первой версии это был динамически создаваемый FormList.
* Имея список для сортировки, можно использовать функцию AddInventoryEventFilter() для реагирования на событие добавления объекта. Объекты из списка будут автоматически рассортированы по хранилищам.
* Добавление в хранилище объектов "не из списка", т.е. одноразовое, сделать без открытия соответствующего хранилища. Просто выбрав в инвентаре объект и нажав "горячую клавишу" , отправляю его в нужное хранилище. Это значительно сэкономит время обработки и решит проблему с зависанием открытия сундука, время от времени появлявшуюся в первой версии мода.
* Доступ к хранилищам для изъятия объектов. Если организовать доступ через меню, это получится слишком громоздко и не вместится в одно окно, что усложнит скрипт. Вероятно, использую метод из первой версии - создание специальных объектов инвентаря в каждой категории.
* Автовыгрузка перед использованием станков крафтинга. Вероятно, использую метод из первой версии - создание специального объекта инвентаря в категории Разное.
Ну вот, в общих чертах, алгоритм готов и можно приступать к созданию!
Сохранив свою работу, закрываем Creation Kit. Продолжим завтра...
Продолжение здесь.
Первым делом попробую сформулировать новый алгоритм.
Но прежде, напомню о назначении или "призвании" мода Репозитории - хранилища по категориям, этакие "бездонные сумки", автоматически сортирующие все попадающие в инвентарь объекты, что избавляет игрока от необходимости постоянно их выкладывать и в то же время, легко доступны.
Главной проблемой первой версии мода стали объекты не подлежащие немедленной сортировке. И если задачу, например, с медвежьими шкурами, которые надо насобирать определенное количество, или Алыми корнями Нирна и тому подобное, можно решить путем создания "стоп-листа", то специальные объекты из DLC HearthFire вообще не видны игроку и не должны перемещаться из инвентаря! Таким образом, правильное решение - это отсутствие действия автосортировки по-умолчанию!
Итак! Цели обозначены, проблемы определены. Попробую представить порядок действий мода, пока в общих чертах.
Необходимые шаги по созданию мода:
* Создаю контейнеры для каждой категории, к которой хочу иметь отдельный доступ и размещаю в "мире". Необходимо продумать размещение для облегчения доступа игрока к ним.
* На каждый контейнер вешаю скрипт, проверяющий поступающий объект на наличие "keyword" характеризующего данную категорию. Это исключит попадание "сторонних" объектов в это хранилище.
* Если в первой версии, любой объект попавший в инвентарь подвергался сортировке, то теперь этого не будет. При попадании объекта в инвентарь ничего не происходит! Это позволит работать игровым скриптам в "штатном" режиме.
* Автосортировка будет производится на основе списка объектов, выбранных игроком. Нужно придумать механизм создания такого списка. В первой версии это был динамически создаваемый FormList.
* Имея список для сортировки, можно использовать функцию AddInventoryEventFilter() для реагирования на событие добавления объекта. Объекты из списка будут автоматически рассортированы по хранилищам.
* Добавление в хранилище объектов "не из списка", т.е. одноразовое, сделать без открытия соответствующего хранилища. Просто выбрав в инвентаре объект и нажав "горячую клавишу" , отправляю его в нужное хранилище. Это значительно сэкономит время обработки и решит проблему с зависанием открытия сундука, время от времени появлявшуюся в первой версии мода.
* Доступ к хранилищам для изъятия объектов. Если организовать доступ через меню, это получится слишком громоздко и не вместится в одно окно, что усложнит скрипт. Вероятно, использую метод из первой версии - создание специальных объектов инвентаря в каждой категории.
* Автовыгрузка перед использованием станков крафтинга. Вероятно, использую метод из первой версии - создание специального объекта инвентаря в категории Разное.
Ну вот, в общих чертах, алгоритм готов и можно приступать к созданию!
Сохранив свою работу, закрываем Creation Kit. Продолжим завтра...
Продолжение здесь.
- TES-Diesel modding и Narnia нравится это