• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Нужен скрипт со следующим смыслом: При попадании стрелой в живую цель стрела заменяется на другую (которую можно потом "снять"). Такой же скрипт нужен для случая когда стрела отражается от цели (драугры в доспехах и т.д.), но не тогда, когда она заблокирована щитом.
Amiball1992, меня тоже занимал этот вопрос. Специальной команды, подозреваю, для этого нет. Но я не ищу легких путей, поэтому после некоторых размышлений предлагаю свой (полностью работоспособный) вариант:
Scriptname _MySCRIPT extends ObjectReference ; Цепляем к объекту, который будем экипировать. Сделано для удобства проверки.
GlobalVariable Property TimeScale Auto ; Глобальная, определяющая скорость течения игрового времени. Будем менять скриптом. По умолчанию: 20.0 Float Property MyTime = 12.0 Auto ; Время (игровое, в часах), которое должно наступить (почти) немедленно. Пример: 11.0 (одинадцать утра) или 21.0 (девять вечера). Float Property MyShift = 5.0 Auto ; Время в секундах, за которое должно произойти смещение игрового времени суток с произвольного на заданное. Пример: за 5.0 реальных сек.
Float fTracer Bool bLock
EVENT OnEquipped(Actor akActor) ; Событие, при котором произойдет активация. Можно выбрать любым. IF akActor == Game.GetPlayer() ; Это на всякий случай, а то полчаса отлавливал баг IF !bLock ; Начало основного кода. bLock = true fTracer = TimeScale.GetValue() Float fGT = Utility.GetCurrentGameTime() Float fDelta = (MyTime / 24.0) - (fGT - Math.Floor(fGT)) IF fDelta < 0 fDelta += 1.0 ENDIF TimeScale.SetValue(86400 * fDelta / MyShift) Debug.Notification("Текущее время: " + ((Utility.GetCurrentGameTime() - Math.Floor(Utility.GetCurrentGameTime())) * 24) as string + " Ускорение: " + (TimeScale.GetValue()) as string) ; Уведомления можно отключить или удалить. Utility.Wait(MyShift) TimeScale.SetValue(fTracer) Debug.Notification("Текущее время: " + ((Utility.GetCurrentGameTime() - Math.Floor(Utility.GetCurrentGameTime())) * 24) as string + " Ускорение: " + (TimeScale.GetValue()) as string) ; Уведомления можно отключить или удалить. bLock = false ENDIF ; Конец основного кода. ENDIF ENDEVENT
Amiball1992, то же самое, но реализованное в виде функции, которую можно использовать в любом скрипте. Задаешь параметры функции, и назад, в будущее .
Scriptname ??? extends ???
Import Utility Import Math
GlobalVariable Property TimeScale Auto Bool bLock
Float FUNCTION GetGameHours() ; Простая функция, сообщающая текущий игровой час. Float fGT = GetCurrentGameTime() Return (fGT - Floor(fGT)) * 24 ENDFUNCTION
FUNCTION SetGameHours(Float fDesirableTime, Float fShift = 5.0, Bool bNotify) ; Функция установки игрового времени суток с произвольного значения к заданному. ; fDesirableTime - игровое время, которое необходимо установить (в часах). ; fShift - реальное время, за которое нужно произвести перевод (в секундах). Не устанавливать значение меньше 1.0. ; bNotify - уведомлять о значении игрового времени после перевода? По умолчанию: нет. IF !bLock && fShift >= 1.0 bLock = true Float fTracer = TimeScale.GetValue() Float fDelta = (fDesirableTime - GetGameHours()) / 24.0 IF fDelta < 0 fDelta += 1.0 ENDIF TimeScale.SetValue(86400 * fDelta / fShift) Wait(fShift) TimeScale.SetValue(fTracer) IF bNotify Debug.Notification("Время переведено к " + GetGameHours() as string + " часам.") ENDIF bLock = false ENDIF ENDFUNCTION
Как сделать следующее? После реплики ГГ диалог закрывается, НПС медленно и грустно идет по коридору, заходит в комнату, и пока ГГ не зайдет за ним говорит "Давай скорее (с)". Далее, когда ГГ зашел, НПС уходит и запирает дверь на 100.
PS Знаю, что это осуществимо, но для меня написать такой скрипт непосилам.... пока что... PS Делаю мод, главная проблема - скрипты.
Изменение репутации для пользователя mxac
mxacOffline
Сообщение №1211
написано: 17 сентября 2014, 08:31
| Отредактировано: mxac - 17 сентября 2014, 08:34
Frostik, тут можно через ИИ пакет сделать, в комнате поставить маркер, а в самом пакете прописать чтобы он путешествовал к этому маркеру(про запирание двери не подскажу, ещё не сталкивался) и в сам пакет поставить условие при котором он работает, а в диалоге уже и выполняешь это условие, например через глобальную переменную... Ну и сам пакет добавить НПС который это и должен делать, ну или если возможно в самом диалоге просто добавить пакет, тогда и условия ненужны, разве что позаботиться чтобы пакет выполнился 1 раз.
Изменение репутации для пользователя Frostik
FrostikOffline
Сообщение №1212
написано: 18 сентября 2014, 17:41
| Отредактировано: Frostik - 18 сентября 2014, 17:41
Распаковал исходники мода в папку \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) ---------------------------------------------
Нашел ответ! Работает.
Проверь в системе что служит у тебя разделителем точка или запятая. Поставь точку.
Панель управления->язык и стандарты->Форматы\дополнительно->разделитель целой и дробной части.
Кто-нибудь знает, как проверить скриптом, заполнен ли камень душ любой душой? Игра же как то определяет это, когда формально пустые камни душ (для игры они остаются пустыми, даже если заполнены любой душой, т.е. проходят проверку GetItemCount(SoulGemEMPTY_SLGM) > 0) при захвате души не заполняются повторно.
Для чего надо? В скрипте должны происходить разные действия в зависимости от того, есть ли у цели заполненные камни душ или пустые (точней, один камень - черная звезда Азуры; с остальным я почти разобрался).
Заменять ее при захвате души на др. форму (и возвращать обратно при использовании) не хотелось бы, иначе в модах, где для ч.-л. требуется наличие звезды Азуры, проверка будет выполняться только в случаях, когда она пустая.
Ребята, как через папирус, выполнить консольную команду "fov xx"?
Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ <a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Изменение репутации для пользователя @perture
@pertureOffline
Сообщение №1215
написано: 22 сентября 2014, 05:03
| Отредактировано: @perture - 22 сентября 2014, 05:45
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.
Компиляция происходит нормально. Но возникает вопрос, почему выражение (1.0 * iSumm) может быть представлено Float величиной, а (iSumm as float) - не может (по идее, целочисленному значению просто должны дописываться нолики после запятой). Движок скрипта как-то воспринимает же выражения вроде (fFloat as string) или (bBool as int).
Результатом применения арифметической операции к двум переменным, одна из которых является float, а другая int, по моим личным наблюдениям, всегда является float.
ЗЫ: Вышеприведенное различие в результатах будет происходить только при операции деления. В остальных случаях (сложение, вычитание, умножение) результаты будут совпадать, независимо от того, являются ли обе переменные int или float (конечно, с учетом того, что результат сам по себе будет int или float).
Есть 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>
VALKNUT, если на NPC вешать скрипт, то там есть OnSit и OnGetUp для фурнитуры. А если на саму фурнитуру, то черт знает. Есть функция IsFurnitureInUse - можно проверять каждую секунду...
Изменение репутации для пользователя VALKNUT
VALKNUTOffline
Сообщение №1225
написано: 29 сентября 2014, 09:54
| Отредактировано: VALKNUT - 29 сентября 2014, 10:45
А как проверять(каждую секунду)? Пока у меня вот такая колбаса.. понятное дело, что работает однобоко..
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
MultigoneOffline
Сообщение №1226
написано: 29 сентября 2014, 11:01
| Отредактировано: Multigone - 29 сентября 2014, 11:02
Для целей постоянной проверки использования объекта НПС не нужен.
НПС нужен для иных целей... код активации/деактивации будет применен именно к НПС, который взаимодействует с фурнитурой..
Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ <a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №1228
написано: 29 сентября 2014, 11:06
| Отредактировано: Multigone - 29 сентября 2014, 11:07
Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ <a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>