Начало здесь.
Продолжаю дневник о разработке мода, создаем хранилища.
Вчера мы создали контейнер с названием CB_Container, он послужит нам образцом, шаблоном для создания хранилищ-репозиториев. Но есть важная задача, которую необходимо решить прежде, чем двигаться дальше - где размещать хранилища?
В первой версии мода я использовал для этих целей служебную ячейку QASmoke, но это не самый удобный вариант. Хотя бы потому что заставляет рядового игрока использовать консоль и запоминать "необязательную" информацию.
В этот раз я собираюсь рассмотреть два варианта - размещение в известном, доступном игроку месте и создание собственной ячейки исключительно для размещения хранилищ.
Итак, первый вариант, размещение контейнеров в уже известном мире. Плюсы - легкодоступность для игрока и простая реализация. Минусы - несомненная конфликтность с модами, изменяющими эту ячейку. Чем популярнее ячейка, тем больше вероятность ее "улучшения", а значит и конфликт с хранилищами.
Вариант второй, собственная ячейка. Плюсы - полная "неконфликтность". Минусы - относительная сложность реализации, ведь доступ в ячейку возможен только через телепортацию (дверь, заклинание).
И все-таки, прикинув свои возможности, я выбираю второй, сложный вариант, для обеспечения неконфликтности с любым модом, включая даже экзотический "Тропический Скайрим"! И пусть это потребует больше работы, но я постараюсь обойтись даже без телепортации.
Механизм будет следующий - создание хранилищ в собственной ячейке и их динамическое размещение в доступном игроку месте.
Теперь понятно что и где делать и я приступаю...
Жмем пиктограмму Сохранить, чтобы не потерять нашу работу.
Осталось прицепить фильтр на каждый контейнер, чтобы туда попадали объекты только определенной категории. Сделаем это с помощью скриптов и так как событие это однообразное для большинства хранилищ, то сделаем его на основе шаблона скрипта.
В данном случае я собираюсь писать "универсальный" скрипт, который выступит шаблоном-образцом для всех моих хранилищ, поэтому методы его создания будут отличаться от создания "стандартного", обычного скрипта. Я не буду использовать возможности автоматического заполнения свойств скрипта, используемые мной названия свойств носят описательный характер. И да, мне придется использовать функцию SKSE.
Вы, наверное, уже заметили что не все типы объектов можно так определить. Например, еду (Food) или драгоценные камни (Gem) с помощью этой функции не обнаружить. Не страшно - применим для их определения другую функцию, а значит напишем и прицепим новый скрипт!
Осталось "обработать" последнее хранилище CB_Box_Anim, предназначенное для хранения шкур, кожи и прочих частей животных.
[success]
В этом случае скрипт ничем не отличается от предыдущих, но использует два ключевых слова (Keyword). Когда есть возможность, я всегда использую названия объектов из Creation Kit, это позволяет автоматически заполнять свойства.
Жмем пиктограмму Сохранить.
На этом этап создания хранилищ закончен. Половина мода сделана, ведь хранилища - основной компонент всего проекта! Остались мелочи - реализовать механизм по обслуживанию этих хранилищ, но это сделаем чуть позже...
Продолжение здесь.
Продолжаю дневник о разработке мода, создаем хранилища.
Вчера мы создали контейнер с названием CB_Container, он послужит нам образцом, шаблоном для создания хранилищ-репозиториев. Но есть важная задача, которую необходимо решить прежде, чем двигаться дальше - где размещать хранилища?
В первой версии мода я использовал для этих целей служебную ячейку QASmoke, но это не самый удобный вариант. Хотя бы потому что заставляет рядового игрока использовать консоль и запоминать "необязательную" информацию.
В этот раз я собираюсь рассмотреть два варианта - размещение в известном, доступном игроку месте и создание собственной ячейки исключительно для размещения хранилищ.
Итак, первый вариант, размещение контейнеров в уже известном мире. Плюсы - легкодоступность для игрока и простая реализация. Минусы - несомненная конфликтность с модами, изменяющими эту ячейку. Чем популярнее ячейка, тем больше вероятность ее "улучшения", а значит и конфликт с хранилищами.
Вариант второй, собственная ячейка. Плюсы - полная "неконфликтность". Минусы - относительная сложность реализации, ведь доступ в ячейку возможен только через телепортацию (дверь, заклинание).
И все-таки, прикинув свои возможности, я выбираю второй, сложный вариант, для обеспечения неконфликтности с любым модом, включая даже экзотический "Тропический Скайрим"! И пусть это потребует больше работы, но я постараюсь обойтись даже без телепортации.
Механизм будет следующий - создание хранилищ в собственной ячейке и их динамическое размещение в доступном игроку месте.
Теперь понятно что и где делать и я приступаю...
Жмем пиктограмму Сохранить, чтобы не потерять нашу работу.
Осталось прицепить фильтр на каждый контейнер, чтобы туда попадали объекты только определенной категории. Сделаем это с помощью скриптов и так как событие это однообразное для большинства хранилищ, то сделаем его на основе шаблона скрипта.
В данном случае я собираюсь писать "универсальный" скрипт, который выступит шаблоном-образцом для всех моих хранилищ, поэтому методы его создания будут отличаться от создания "стандартного", обычного скрипта. Я не буду использовать возможности автоматического заполнения свойств скрипта, используемые мной названия свойств носят описательный характер. И да, мне придется использовать функцию SKSE.
Вы, наверное, уже заметили что не все типы объектов можно так определить. Например, еду (Food) или драгоценные камни (Gem) с помощью этой функции не обнаружить. Не страшно - применим для их определения другую функцию, а значит напишем и прицепим новый скрипт!
Осталось "обработать" последнее хранилище CB_Box_Anim, предназначенное для хранения шкур, кожи и прочих частей животных.
[success]
В этом случае скрипт ничем не отличается от предыдущих, но использует два ключевых слова (Keyword). Когда есть возможность, я всегда использую названия объектов из Creation Kit, это позволяет автоматически заполнять свойства.
Scriptname CB_Box_FilterAnim_Script extends ObjectReference {Фильтр по ключевым словам для контейнера} Keyword Property VendorItemAnimalHide Auto Keyword Property VendorItemAnimalPart Auto Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) If akBaseItem.HasKeyword(VendorItemAnimalHide) || akBaseItem.HasKeyword(VendorItemAnimalPart) Else Self.RemoveItem(akBaseItem, aiItemCount, True, akSourceContainer) EndIf EndEvent
[/success]
Жмем пиктограмму Сохранить.
На этом этап создания хранилищ закончен. Половина мода сделана, ведь хранилища - основной компонент всего проекта! Остались мелочи - реализовать механизм по обслуживанию этих хранилищ, но это сделаем чуть позже...
Продолжение здесь.
- Siegrun, Petrovich, TES-Diesel modding и 2 другим это нравится
Хмммм. Мдя. Ну будем надеяться это исправят. Придется тебе составлять текст в Статьях и там держать копию и там же править.