Модератор форума: Kris†a™  
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)

Вопросы по скриптам Papyrus
sansuli  Offline  Сообщение №1 написано: 31 августа 2012, 13:29 | Отредактировано: Multigone - 23 апреля 2020, 14:24


The Red Sun


193
Уроки по скриптованию на языке Papyrus
Прежде чем задать вопрос просмотрите вышеуказанные уроки.
ok


Тема регламентирована.


• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней.
• Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней.
• При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС.
• При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "
+" полезного сообщения.

Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Multigone  Offline  Сообщение №1201 написано: 22 августа 2014, 15:45



815
RiseD, и точно, работает с луками. А я почему-то думал, что только с оружием ближнего боя... Но там дело не в условиях, просто это работает.

GF_RaiseD  Offline  Сообщение №1202 написано: 22 августа 2014, 17:34



50
Нужен скрипт со следующим смыслом:

При попадании стрелой в живую цель  стрела заменяется на другую (которую можно потом "снять"). Такой же скрипт нужен для случая когда стрела отражается от цели (драугры в доспехах и т.д.), но не тогда, когда она заблокирована щитом.

Amiball1992  Offline  Сообщение №1203 написано: 23 августа 2014, 13:18



23
Куку всем, наткнулся на такую вот ситуацию - нужен скрипт, который устанавливает определенное время суток. Не могу ни функцию ни команду найти.

Multigone  Offline  Сообщение №1204 написано: 23 августа 2014, 15:22 | Отредактировано: Multigone - 23 августа 2014, 15:37



815
Amiball1992, меня тоже занимал этот вопрос. Специальной команды, подозреваю, для этого нет. Но я не ищу легких путей, поэтому после некоторых размышлений предлагаю свой (полностью работоспособный) вариант:



Amiball1992  Offline  Сообщение №1205 написано: 23 августа 2014, 19:47



23
Multigone, благодарю любезный, щас попробую использовать)

Multigone  Offline  Сообщение №1206 написано: 23 августа 2014, 20:31



815
Amiball1992, то же самое, но реализованное в виде функции, которую можно использовать в любом скрипте. Задаешь параметры функции, и назад, в будущее :) .



mxac  Offline  Сообщение №1207 написано: 14 сентября 2014, 14:26



178
Подскажите как заставить персонажа стоять на месте некоторое время, например пока проигрывается анимация.


Aksyonov  Offline  Сообщение №1208 написано: 14 сентября 2014, 14:28



937
Цитата mxac

Подскажите как заставить персонажа стоять на месте некоторое время, например пока проигрывается анимация.


Тоже интересует этот вопрос ! это нужно делать в 3d редакторах или?

mxac  Offline  Сообщение №1209 написано: 14 сентября 2014, 15:18



178
О DisablePlayerControls вроде сгодится.


Frostik  Offline  Сообщение №1210 написано: 17 сентября 2014, 03:56



53
Как сделать следующее? После реплики ГГ диалог закрывается, НПС медленно и грустно идет по коридору, заходит в комнату, и пока ГГ не зайдет за ним говорит "Давай скорее (с)". 
Далее, когда ГГ зашел, НПС уходит и запирает дверь на 100. 

PS Знаю, что это осуществимо, но для меня написать такой скрипт непосилам.... пока что... 
PS Делаю мод, главная проблема - скрипты.

mxac  Offline  Сообщение №1211 написано: 17 сентября 2014, 08:31 | Отредактировано: mxac - 17 сентября 2014, 08:34



178
Frostik, тут можно через ИИ пакет сделать, в комнате поставить маркер, а в самом пакете прописать чтобы он путешествовал к этому маркеру(про запирание двери не подскажу, ещё не сталкивался) и в сам пакет поставить условие при котором он работает, а в диалоге уже и выполняешь это условие, например через глобальную переменную... Ну и сам пакет добавить НПС который это и должен делать, ну или если возможно в самом диалоге просто добавить пакет, тогда и условия ненужны, разве что позаботиться чтобы пакет выполнился 1 раз.


Frostik  Offline  Сообщение №1212 написано: 18 сентября 2014, 17:41 | Отредактировано: Frostik - 18 сентября 2014, 17:41



53
Спс, буду разбираться.

Распаковал исходники мода в папку \Source\, вписал правильные пути в файле ScriptCompile.bat

Выбрал скрипт (**.psc) в Papyrus Script Manager и попробовал скомпилировать.

...\Scripts\Source\sslThreadController.psc(334,1): the parameter defaults of function centeroncoords in state animating on script sslthreadcontroller do not match the parent script sslthreadmodel
...\Scripts\Source\fnis.psc(134,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(134,36): none is not a known user-defined type
...\Scripts\Source\fnis.psc(186,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(186,36): none is not a known user-defined type
...\Scripts\Source\fnis.psc(233,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(233,36): none is not a known user-defined type
...\Scripts\Source\fnis.psc(259,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(259,36): none is not a known user-defined type
...\Scripts\Source\fnis.psc(285,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(285,36): none is not a known user-defined type
...\Scripts\Source\fnis.psc(314,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(314,36): none is not a known user-defined type
...\Scripts\Source\fnis.psc(340,16): variable FNISCreatureVersion is undefined
...\Scripts\Source\fnis.psc(340,36): none is not a known user-defined type
...\Scripts\Source\SexLabFramework.psc(945,1): the parameter defaults of function newthread in state disabled on script sexlabframework does not match the empty state
No output generated for _slwg_dogsex01.psc, compilation failed.

Что я делаю не так? Файлы sslThreadController.psc   fnis.psc  SexLabFramework.psc  в папке \Source\ присутствуют.....

Пробовал как с выбором esp, так и без.

Добавлено (18 Сентября 2014, 08:14)
---------------------------------------------

Так, надо было дополнительно поставить FNIS creature Pack 5.1

Остались ошибки:

...\Scripts\Source\sslThreadController.psc(334,1): the parameter defaults of function centeroncoords in state animating on script sslthreadcontroller do not match the parent script sslthreadmodel

...\Scripts\Source\SexLabFramework.psc(945,1): the parameter defaults of function newthread in state disabled on script sexlabframework does not match the empty state

Что-то про родительский скрипт...  Выбираю родной esp, +esp которые он требует, все равно такие ошибки.

Добавлено (18 Сентября 2014, 21:41)
---------------------------------------------

Нашел ответ! Работает.

Проверь в системе что служит у тебя разделителем точка или запятая. Поставь точку.

Панель управления->язык и стандарты->Форматы\дополнительно->разделитель целой и дробной части.

Multigone  Offline  Сообщение №1213 написано: 21 сентября 2014, 22:30



815
Кто-нибудь знает, как проверить скриптом, заполнен ли камень душ любой душой? Игра же как то определяет это, когда формально пустые камни душ (для игры они остаются пустыми, даже если заполнены любой душой, т.е. проходят проверку GetItemCount(SoulGemEMPTY_SLGM) > 0) при захвате души не заполняются повторно.

Для чего надо? В скрипте должны происходить разные действия в зависимости от того, есть ли у цели заполненные камни душ или пустые (точней, один камень - черная звезда Азуры; с остальным я почти разобрался).

Заменять ее при захвате души на др. форму (и возвращать обратно при использовании) не хотелось бы, иначе в модах, где для ч.-л. требуется наличие звезды Азуры, проверка будет выполняться только в случаях, когда она пустая.

VALKNUT  Offline  Сообщение №1214 написано: 22 сентября 2014, 04:43



Всем приветы!

Ребята, как через папирус, выполнить консольную команду "fov xx"?

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
@perture  Offline  Сообщение №1215 написано: 22 сентября 2014, 05:03 | Отредактировано: @perture - 22 сентября 2014, 05:45


$cience innov@tor


Цитата VALKNUT

Ребята, как через папирус, выполнить консольную команду "fov xx"?


Код
Utility.SetINIFloat("fDefaultWorldFOV:Display", значение)
Utility.SetINIFloat("fDefault1stPersonFOV:Display", значение)
Game.UpdateThirdPerson()

Значение должно иметь тип float.

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Multigone  Offline  Сообщение №1216 написано: 23 сентября 2014, 12:47



815
Угадайте, что не так в этой строке:

IF RandomFloat() > 1 / (6 - iCount)

Dsion  Offline  Сообщение №1217 написано: 24 сентября 2014, 03:37



Multigone, у меня сразу 6 вариантов :)
Но, наверное, ты имеешь в виду, что нужно 1.0, а не 1

Multigone  Offline  Сообщение №1218 написано: 24 сентября 2014, 07:30 | Отредактировано: Multigone - 24 сентября 2014, 09:58



815
Dsion, именно! Из-за этого результат условия всегда true, а я искал причину час, наверное.

А! Еще кое-какой вопрос назрел.

Я пишу:

aCount [iCount]= Ceiling(iSumm / aCost[iCount])

Выражение (iSumm / aCost[iCount]) будет являться Int.
Мне надо, чтобы оно являлось Float, поскольку переменные могут принимать не кратные значения (например, 24 / 16).

Поэтому я пишу:

aCount [iCount]= Ceiling((iSumm as float) / aCost[iCount])

При компиляции происходит ошибка: Int не может быть представлен как Float.

Тогда я пишу:

aCount [iCount]= Ceiling(1.0 * iSumm / aCost[iCount])

Компиляция происходит нормально. Но возникает вопрос, почему выражение (1.0 * iSumm) может быть представлено Float величиной, а (iSumm as float) - не может (по идее, целочисленному значению просто должны дописываться нолики после запятой). Движок скрипта как-то воспринимает же выражения вроде (fFloat as string) или (bBool as int).

Вот такой вот вопрос.

@perture  Offline  Сообщение №1219 написано: 24 сентября 2014, 09:25


$cience innov@tor


Цитата Multigone

Вот такой вот вопрос.

А массивы каких типов?

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Multigone  Offline  Сообщение №1220 написано: 24 сентября 2014, 09:52 | Отредактировано: Multigone - 24 сентября 2014, 10:12



815
@perture, я всегда в имени переменной первой буквой указываю ее тип. i = int, f = float, a = array, b = bool, ну и так далее.

А раз переменная массива является int, значит, массив тоже).

Написал не пойми что. Массив Int.

@perture  Offline  Сообщение №1221 написано: 24 сентября 2014, 10:45 | Отредактировано: @perture - 24 сентября 2014, 10:50


$cience innov@tor


Цитата Multigone

(1.0 * iSumm / aCost[iCount])

Если aCost и iSumm являются int, то и результатом будет int, независимо от умножения на 1.0. Или я ошибаюсь?

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Multigone  Offline  Сообщение №1222 написано: 24 сентября 2014, 14:19 | Отредактировано: Multigone - 24 сентября 2014, 16:26



815
Цитата @perture

Или я ошибаюсь?

Результатом применения арифметической операции к двум переменным, одна из которых является float, а другая int, по моим личным наблюдениям, всегда является float.

ЗЫ: Вышеприведенное различие в результатах будет происходить только при операции деления. В остальных случаях (сложение, вычитание, умножение) результаты будут совпадать, независимо от того, являются ли обе переменные int или float (конечно, с учетом того, что результат сам по себе будет int или float).

VALKNUT  Offline  Сообщение №1223 написано: 29 сентября 2014, 08:45



Знатоки, прошу подсказку...

Есть Event OnActivate(ObjectReference akActionRef)

При помощи которого, мы узнаем, что активатор был активирован, а каким боком узнать, что активатор был ДеАктивирован?

Ну, то есть:
НПС активирует некую фурнитуру - выполняется некий код
НПС перестает использовать фурнитуру - выполняется другой код

Буду признателен!

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Dsion  Offline  Сообщение №1224 написано: 29 сентября 2014, 09:48



VALKNUT, если на NPC вешать скрипт, то там есть OnSit и OnGetUp для фурнитуры. А если на саму фурнитуру, то черт знает.
Есть функция IsFurnitureInUse - можно проверять каждую секунду...

VALKNUT  Offline  Сообщение №1225 написано: 29 сентября 2014, 09:54 | Отредактировано: VALKNUT - 29 сентября 2014, 10:45



Dsion, надо на фурнитуру...

А как проверять(каждую секунду)?
Пока у меня вот такая колбаса.. понятное дело, что работает однобоко..

ObjectReference myNPC

Event OnActivate(ObjectReference akActivator)

    myNPC = akActivator

    if Self.IsFurnitureInUse(true)
        Debug.MessageBox("On")
    Else
        Debug.MessageBox("Off")
    EndIf
EndEvent

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Multigone  Offline  Сообщение №1226 написано: 29 сентября 2014, 11:01 | Отредактировано: Multigone - 29 сентября 2014, 11:02



815
VALKNUT,


VALKNUT  Offline  Сообщение №1227 написано: 29 сентября 2014, 11:03



Цитата Multigone

Для целей постоянной проверки использования объекта НПС не нужен.


НПС нужен для иных целей... код активации/деактивации будет применен именно к НПС, который взаимодействует с фурнитурой..

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Multigone  Offline  Сообщение №1228 написано: 29 сентября 2014, 11:06 | Отредактировано: Multigone - 29 сентября 2014, 11:07



815
VALKNUT, тогда с НПС:



VALKNUT  Offline  Сообщение №1229 написано: 29 сентября 2014, 11:34



Multigone, благодарю!
Попробую...

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Multigone  Offline  Сообщение №1230 написано: 29 сентября 2014, 11:42



815
VALKNUT, я не при делах, идея была Dsion'a.

Забыл сказать, 3.0 - это время обновления проверки в секундах. Можно устанавливать произовольные Float значения.

Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Поиск:





Ответ на жалобу смотрите в разделе жалоб