Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да, ты не один в этой боли. Работа с Papyrus в Skyrim (и особенно с фрагментами диалога) — это как жонглировать медведями. Вот как всё на самом деле устроено:
- 📌 Важно понимать: фрагменты диалогов — это не полноценные скрипты
- Фрагменты (типа TIF__00012345) — это автоматически генерируемые скрипты, которые не могут просто так "наследовать" или "импортировать" другой скрипт. Они не знают, что такое Big_script просто потому, что ты его где-то создал.
- ✅ Как правильно вызвать функцию из большого скрипта в диалоге
- 🎯 Цель: использовать функцию из внешнего скрипта (Big_script) внутри фрагмента диалога.
- Вот что нужно сделать пошагово:
- Шаг 1. Повесь Big_script на объект
- Допустим, у тебя есть Big_script, в котором куча функций, и ты хочешь вызывать, например, MyCoolFunction() из диалога.
- Ты должен прикрепить Big_script к какому-то объекту, к которому ты сможешь обратиться из диалога. Обычно это:
- Актер (NPC, с которым диалог)
- Квест (если твой скрипт глобальный)
- Объект в мире (если ты хочешь обращаться к нему через ссылку)
- Шаг 2. Получи ссылку на этот объект в фрагменте
- Предположим, ты прикрепил Big_script к квесту. Тогда ты можешь вызвать его так:
- (GetOwningQuest() as YourQuestScript).YourFunction()
- или если твой Big_script сидит прямо на квесте:
- (GetOwningQuest() as Big_script).MyCoolFunction()
- 🧠 Важно: GetOwningQuest() работает только в диалоговых фрагментах, если они принадлежат квесту. Если диалог просто с NPC — нужен другой путь.
- Шаг 3. Альтернатива: передай ссылку через Property
- Если у тебя Big_script висит на каком-то объекте (например, объект XMarker в мире или сам NPC), ты можешь сделать в фрагменте Property:
- Открой TIF__... фрагмент.
- Добавь Property типа Big_script:
- Big_script Property myBigScript Auto
- Укажи через CK в свойствах, какой объект имеет этот скрипт.
- Теперь ты можешь просто делать:
- myBigScript.MyCoolFunction()
- ❌ Почему Import Big_script не работает?
- Import в Papyrus работает только для импорта функций из библиотек, которые объявлены как Global, или для удобства доступа к Structs, Enums, и Global Functions.
- Если Big_script не глобальный, Import его не "втянет". И уж точно не даст доступ к методам без указания объекта.
- 💡 Что НЕ поможет:
- Наследование (Scriptname Tif_fragment extends Big_script) — не сработает, потому что TIF__ уже жестко наследуется от TopicInfo, и ты не можешь поменять родителя.
- Копипаста всех функций в каждый TIF__ — боль, страдание и не надо так.
- 🛠 Пример:
- У тебя есть квест MyAwesomeQuest, к нему прикреплён скрипт Big_script с функцией DebugFunction().
- В диалоге пишешь:
- (MyAwesomeQuest as Big_script).DebugFunction()
- Или, если ты внутри самого квеста:
- (GetOwningQuest() as Big_script).DebugFunction()
- Хочешь — могу помочь прямо по твоему примеру, если скинешь, где у тебя Big_script висит и как ты его хочешь вызывать.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement