Репозитории II: начало
Начало здесь.
Продолжаю дневник о разработке мода, создаем хранилища.
Вчера мы создали контейнер с названием CB_Container, он послужит нам образцом, шаблоном для создания хранилищ-репозиториев. Но есть важная задача, которую необходимо решить прежде, чем двигаться дальше - где размещать хранилища?
В первой версии мода я использовал для этих целей служебную ячейку QASmoke, но это не самый удобный вариант. Хотя бы потому что заставляет рядового игрока использовать консоль и запоминать "необязательную" информацию.
В этот раз я собираюсь рассмотреть два варианта - размещение в известном, доступном игроку месте и создание собственной ячейки исключительно для размещения хранилищ.
Итак, первый вариант, размещение контейнеров в уже известном мире. Плюсы - легкодоступность для игрока и простая реализация. Минусы - несомненная конфликтность с модами, изменяющими эту ячейку. Чем популярнее ячейка, тем больше вероятность ее "улучшения", а значит и конфликт с хранилищами.
Вариант второй, собственная ячейка. Плюсы - полная "неконфликтность". Минусы - относительная сложность реализации, ведь доступ в ячейку возможен только через телепортацию (дверь, заклинание).
И все-таки, прикинув свои возможности, я выбираю второй, сложный вариант, для обеспечения неконфликтности с любым модом, включая даже экзотический "Тропический Скайрим"! И пусть это потребует больше работы, но я постараюсь обойтись даже без телепортации.
Механизм будет следующий - создание хранилищ в собственной ячейке и их динамическое размещение в доступном игроку месте.
Теперь понятно что и где делать и я приступаю...
Жмем пиктограмму Сохранить, чтобы не потерять нашу работу.
Осталось прицепить фильтр на каждый контейнер, чтобы туда попадали объекты только определенной категории. Сделаем это с помощью скриптов и так как событие это однообразное для большинства хранилищ, то сделаем его на основе шаблона скрипта.
В данном случае я собираюсь писать "универсальный" скрипт, который выступит шаблоном-образцом для всех моих хранилищ, поэтому методы его создания будут отличаться от создания "стандартного", обычного скрипта. Я не буду использовать возможности автоматического заполнения свойств скрипта, используемые мной названия свойств носят описательный характер. И да, мне придется использовать функцию SKSE.
Вы, наверное, уже заметили что не все типы объектов можно так определить. Например, еду (Food) или драгоценные камни (Gem) с помощью этой функции не обнаружить. Не страшно - применим для их определения другую функцию, а значит напишем и прицепим новый скрипт!
Осталось "обработать" последнее хранилище CB_Box_Anim, предназначенное для хранения шкур, кожи и прочих частей животных.
[success]
В этом случае скрипт ничем не отличается от предыдущих, но использует два ключевых слова (Keyword). Когда есть возможность, я всегда использую названия объектов из Creation Kit, это позволяет автоматически заполнять свойства.
[/success]
Жмем пиктограмму Сохранить.
На этом этап создания хранилищ закончен. Половина мода сделана, ведь хранилища - основной компонент всего проекта! Остались мелочи - реализовать механизм по обслуживанию этих хранилищ, но это сделаем чуть позже...
Продолжение здесь.
Продолжаю дневник о разработке мода, создаем хранилища.
Вчера мы создали контейнер с названием 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]
Жмем пиктограмму Сохранить.
На этом этап создания хранилищ закончен. Половина мода сделана, ведь хранилища - основной компонент всего проекта! Остались мелочи - реализовать механизм по обслуживанию этих хранилищ, но это сделаем чуть позже...
Продолжение здесь.
-
5




















5 Комментариев
Рекомендуемые комментарии
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти