Advertisement
Guest User

Untitled

a guest
Apr 5th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. Да, ты не один в этой боли. Работа с Papyrus в Skyrim (и особенно с фрагментами диалога) — это как жонглировать медведями. Вот как всё на самом деле устроено:
  2. 📌 Важно понимать: фрагменты диалогов — это не полноценные скрипты
  3.  
  4. Фрагменты (типа TIF__00012345) — это автоматически генерируемые скрипты, которые не могут просто так "наследовать" или "импортировать" другой скрипт. Они не знают, что такое Big_script просто потому, что ты его где-то создал.
  5. ✅ Как правильно вызвать функцию из большого скрипта в диалоге
  6. 🎯 Цель: использовать функцию из внешнего скрипта (Big_script) внутри фрагмента диалога.
  7.  
  8. Вот что нужно сделать пошагово:
  9. Шаг 1. Повесь Big_script на объект
  10.  
  11. Допустим, у тебя есть Big_script, в котором куча функций, и ты хочешь вызывать, например, MyCoolFunction() из диалога.
  12.  
  13. Ты должен прикрепить Big_script к какому-то объекту, к которому ты сможешь обратиться из диалога. Обычно это:
  14.  
  15. Актер (NPC, с которым диалог)
  16.  
  17. Квест (если твой скрипт глобальный)
  18.  
  19. Объект в мире (если ты хочешь обращаться к нему через ссылку)
  20.  
  21. Шаг 2. Получи ссылку на этот объект в фрагменте
  22.  
  23. Предположим, ты прикрепил Big_script к квесту. Тогда ты можешь вызвать его так:
  24.  
  25. (GetOwningQuest() as YourQuestScript).YourFunction()
  26.  
  27. или если твой Big_script сидит прямо на квесте:
  28.  
  29. (GetOwningQuest() as Big_script).MyCoolFunction()
  30.  
  31. 🧠 Важно: GetOwningQuest() работает только в диалоговых фрагментах, если они принадлежат квесту. Если диалог просто с NPC — нужен другой путь.
  32.  
  33. Шаг 3. Альтернатива: передай ссылку через Property
  34.  
  35. Если у тебя Big_script висит на каком-то объекте (например, объект XMarker в мире или сам NPC), ты можешь сделать в фрагменте Property:
  36.  
  37. Открой TIF__... фрагмент.
  38.  
  39. Добавь Property типа Big_script:
  40.  
  41. Big_script Property myBigScript Auto
  42.  
  43. Укажи через CK в свойствах, какой объект имеет этот скрипт.
  44.  
  45. Теперь ты можешь просто делать:
  46.  
  47. myBigScript.MyCoolFunction()
  48.  
  49. ❌ Почему Import Big_script не работает?
  50.  
  51. Import в Papyrus работает только для импорта функций из библиотек, которые объявлены как Global, или для удобства доступа к Structs, Enums, и Global Functions.
  52.  
  53. Если Big_script не глобальный, Import его не "втянет". И уж точно не даст доступ к методам без указания объекта.
  54. 💡 Что НЕ поможет:
  55.  
  56. Наследование (Scriptname Tif_fragment extends Big_script) — не сработает, потому что TIF__ уже жестко наследуется от TopicInfo, и ты не можешь поменять родителя.
  57.  
  58. Копипаста всех функций в каждый TIF__ — боль, страдание и не надо так.
  59.  
  60. 🛠 Пример:
  61.  
  62. У тебя есть квест MyAwesomeQuest, к нему прикреплён скрипт Big_script с функцией DebugFunction().
  63.  
  64. В диалоге пишешь:
  65.  
  66. (MyAwesomeQuest as Big_script).DebugFunction()
  67.  
  68. Или, если ты внутри самого квеста:
  69.  
  70. (GetOwningQuest() as Big_script).DebugFunction()
  71.  
  72. Хочешь — могу помочь прямо по твоему примеру, если скинешь, где у тебя Big_script висит и как ты его хочешь вызывать.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement