• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя anton
antonOffline
Сообщение №511
написано: 21 ноября 2013, 09:40
| Отредактировано: anton - 21 ноября 2013, 09:52
Kepper, 1. Про тюрьму не знаю, до сих пор туда ни разу не попал . Function EquipItem() - это если скриптом надевать, а если игрок сам это делает ?
2. Event OnEffectFinish() не подходит, он срабатывает в момент завершающей анимации, когда когти только начали прятаться. А мне нужно чтобы анимация полностью завершилась + АртОбьект когтей пропал. И только тогда стартовать другой маг. эффект. "HasMagicEffect" должна была быть отличным решением, но она совсем не работает.
1) -Игрок одевает армор со скриптом. -Скрипт вешает маг эффект. -Маг эффект переодевает правильно и анигилируется(возможно перед этим придётся вещь снять) Возможно будет лучше если одеваться будет другой армор.
Перечитал твой ворос. Раз у тебя игрок может снимать когти то мне кажется что надо копать в сторону квестовых предметов(одел когти - и они стали квестовыми, снял - вернулись в нормальное состояние). То, что я говорил ранее блокирует снятие предмета игроком
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №515
написано: 21 ноября 2013, 17:06
| Отредактировано: LordVadim - 21 ноября 2013, 17:09
2. Event OnEffectFinish() не подходит, он срабатывает в момент завершающей анимации, когда когти только начали прятаться. А мне нужно чтобы анимация полностью завершилась + АртОбьект когтей пропал. И только тогда стартовать другой маг. эффект. "HasMagicEffect" должна была быть отличным решением, но она совсем не работает.
А что мешает посмотреть длительность анимации и в OnEffectFinish() поставить Wait(...) на это время, а после уже выполнять ваши действия?
Изменение репутации для пользователя anton
antonOffline
Сообщение №516
написано: 21 ноября 2013, 18:02
| Отредактировано: anton - 21 ноября 2013, 18:06
И главное в игре же есть спец функция HasMagicEffect для этого, но увы, она совсем не работает.
anton, а кто мешает сымитировать данную функцию? Сделай, как написал LordVadim, а после задержки не команду ставь, а меняй свойство, и уже это свойство пропиши как условие вместо HasMagicEffect. Например, меняй свойство bMag01 в квесте из своего маг.эффекта (скрипт квеста и свойство сделай conditional). При старте первого маг.эффекта в его скрипте (myQuest as myQuestScript).bMag01 = true при его завершении Utility.Wait(№№) (myQuest as myQuestScript).bMag01 = false
В условии второго маг.эффекта ставишь GetVMQuestVariable - myQuest - ::bMag01_var == 0 (+ остальные нужные условия)
Тогда второй маг.эффект сможет запуститься только после окончания первого + своё назначенное время (это не помешает запускаться второму эффекту при не запущенном первом, т.к. bMag01 будет всегда false). Т.е. запускать эффект будет движок.
AleksTirex, спасибо за подсказку! не знал что свои переменные тоже можно включать в такие проверки. Поэтому я полистал список условий и по аналогии нашёл ещё "GetGlobalValue" и "GetQuestRunning", которые тоже должны подойти для этой цели. В итоге "GetGlobalValue" заработал именно так как нужно ! (и очень просто, и без квестов). Я надеюсь такое решение не будет иметь "подводных камней", пока что всё чётко работает...
По поводу квестовых предметов: Попал сегодня в тюрьму и оказалось, что из инвентаря пропали все предметы, включая квестовые. Так что мне кажется предмет насильственно оставить на персонаже никак не получится. Ну разве что вообще отказаться от идеи предмета как одежды и возможности его быстрого снятия. Тогда можно один раз нацепить на себя маг-способность выпускать когти используя например зелье или книгу, а снять когти можно будет только заклинанием диспелла (или другим зельем). Но это только в том случае если при попадании в тюрьму диспелл не происходит автоматически...
anton, ещё можно вмешаться в процесс ареста. Там наверняка при отборе вещей можно поставить некий FormList, в котором прописать неотбираемые вещи. Теоретическая возможность есть, надо разбираться с квестами...
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №520
написано: 23 ноября 2013, 04:47
| Отредактировано: LordVadim - 23 ноября 2013, 05:02
Попал сегодня в тюрьму и оказалось, что из инвентаря пропали все предметы, включая квестовые. Так что мне кажется предмет насильственно оставить на персонаже никак не получится. Ну разве что вообще отказаться от идеи предмета как одежды и возможности его быстрого снятия. Тогда можно один раз нацепить на себя маг-способность выпускать когти используя например зелье или книгу, а снять когти можно будет только заклинанием диспелла (или другим зельем). Но это только в том случае если при попадании в тюрьму диспелл не происходит автоматически...
В скрипте отслеживать событие OnItemRemoved:
Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) if (akBaseItem== ваш предмет) && (akDestContainer == Значение при аресте) Game.GetPlayer().AddItem(akBaseItem, 1, True) EndIf EndEvent
Чтобы иметь возможность снимать предмет надо выяснить значениеakDestContainerпри аресте и включить в условие. Узнать значение можно вставив в событиеDebug.MessageBox(akDestContainer)исдаться властям.
LordVadim, тут ещё проблемка будет, нельзя чтобы движок самостоятельно снимал когти с игрока (ГГ так и помереть случайно может). Я думаю можно найти скрипт, отвечающий за раздевание при попадании в тюрьму, и попробовать модифицировать его. Конечно нехорошо ванильные скрипты править, но как вариант... Вот если бы ещё мне кто подсказал, как найти этот скрипт ?
Я думаю можно найти скрипт, отвечающий за раздевание при попадании в тюрьму, и попробовать модифицировать его.
Не самый простой вариант. Я на 90% уверен, что там используется функция RemoveAllItems - то есть у игрока забираются сразу все предметы и переносятся в EvidenceChestPlayerInventory (Сундук с имуществом пленных). По крайней мере возврат предметов игроку реализован так. И как это модифицировать? Список инвентаря игрока для выборочного перемещения предметов не получить без SKSE. А использовать ли SKSE в ванильных скриптах - это уже тебе решать (я бы не стал).
Изменение репутации для пользователя DarkVetal
DarkVetal
Сообщение №525
написано: 23 ноября 2013, 13:55
| Отредактировано: DarkVetal - 23 ноября 2013, 13:56
Народ, кто знает скрипт, когда при активации рычага появляется предмет статики в нужном месте, а при выключении рычага предмет исчезает. Пример: повернул кран - потекла вода. Нажал на кнопку - появилась стена, триггер, любой в общем предмет. Нажал еще раз - все исчезло.
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №526
написано: 23 ноября 2013, 14:12
| Отредактировано: LordVadim - 23 ноября 2013, 14:16
Народ, кто знает скрипт, когда при активации рычага появляется предмет статики в нужном месте, а при выключении рычага предмет исчезает. Пример: повернул кран - потекла вода. Нажал на кнопку - появилась стена, триггер, любой в общем предмет. Нажал еще раз - все исчезло.
Со Static такой вариант не пройдет. Можно использовать MiscItem с отключенным свойством Playable и без имени. Для вызова использовать функцию PlaceAtME() для удаления Delete().
Изменение репутации для пользователя Artem13
Artem13Offline
Сообщение №527
написано: 23 ноября 2013, 15:36
| Отредактировано: Artem13 - 23 ноября 2013, 15:47
LordVadim, вполне себе пройдёт. Только они должны быть изначально размещены в мире. Если должны быть невидимы, то Initially Disabled. А потом включаются или через родительский маркер, или напрямую reference.Enable. Аналогично дизайблятся изначально видимые. Перемещаются они вроде бы тоже без проблем через SetPosition, например. Во всяком случае, контейнеры в ФНВ я так двигал.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
LordVadim, вполне себе пройдёт. Только они должны быть изначально размещены в мире. Если должны быть невидимы, то Initially Disabled. А потом включаются или через родительский маркер, или напрямую reference.Enable. Аналогично дизайблятся изначально видимые. Перемещаются они вроде бы тоже без проблем через SetPosition, например. Во всяком случае, контейнеры в ФНВ я так двигал.
Согласен. Я имел ввиду, что создать из скрипта их не получится. Если ставить из Creation Kit, то да - управлять можно.
Согласен. Я имел ввиду, что создать из скрипта их не получится. Если ставить из Creation Kit, то да - управлять можно.
Да нет, статики можно и создавать из скрипта, и потом управлять ими, и перемещать, и... всё, что угодно делать. Надо просто получать референс создаваемого объекта в момент его создания, и после этого уже нет разницы, скриптом или в СК он был добавлен.
Если надо статик вкл/выкл в определённом и заранее известном месте, то проще это в СК добавлять, а если местоположение неопределённое или рендомное, то можно и скриптом всё это делать. (у меня компаньонка в лесу и костры разжигает куда ГГ пальцем ткнёт, и фурнитуру на них ставит, и маркеры с анимацией вокруг костра расставляет и т.д., а потом всё это убирает за собой, т.е. ограничений на управление никаких нет)
Надо просто получать референс создаваемого объекта в момент его создания, и после этого уже нет разницы, скриптом или в СК он был добавлен.
Эээ, не уловил. Коротенький пример можно? Со статиком, желательно.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Ну вот например я размещаю объекты "вода" и "огонь" под краном и котелком, и нажимая на соответствующие рычаги, предмет должен появляться там, будто я включаю газ или душ, при этом не важно, будет ли предмет до этого не видимым, или находится в другой точке пространства, например где-то за стенами интерьера, где он не виден и не слышен. При повторном нажатии все это должно отключатся.
Ну вот например я размещаю объекты "вода" и "огонь" под краном и котелком, и нажимая на соответствующие рычаги, предмет должен появляться там, будто я включаю газ или душ, при этом не важно, будет ли предмет до этого не видимым, или находится в другой точке пространства, например где-то за стенами интерьера, где он не виден и не слышен. При повторном нажатии все это должно отключатся.
В конструкторе создаешь объект sFire с отмеченным свойством Initially Disabled и активатор. На активатор вешаешь следующий скрипт:
Ну вот например я размещаю объекты "вода" и "огонь" под краном и котелком, и нажимая на соответствующие рычаги, предмет должен появляться там, будто я включаю газ или душ,
Делаешь в СК кран и добавляешь к нему воду, объект воды выключаешь (ставишь галочку), получится в игре просто кран, а воду видно не будет. На рычаге скрипт, который будет включать и выключать воду:
ObjectReference Property akWater Auto
Event OnActivate(ObjectReference akActionRef) if akWater.IsDisabled() akWater.Enable() else akWater.Disable() endif endEvent
Свойству akWater надо назначить эту воду (объект воды под краном).
Если кранов и прочего такого будет много, то можно сделать один скрипт на все краны и его вешать на свой рычаг:
Event OnActivate(ObjectReference akActionRef) if GetLinkedRef().IsDisabled() GetLinkedRef().Enable() else GetLinkedRef().Disable() endif endEvent
На каждом рычаге во вкладке LinkedRef назначается свой объект (вода или другое, что надо вкл/выкл).
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №534
написано: 24 ноября 2013, 12:04
| Отредактировано: LordVadim - 24 ноября 2013, 12:05
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №536
написано: 24 ноября 2013, 18:56
| Отредактировано: LordVadim - 24 ноября 2013, 18:58
Пробовал ограничивать пробелами, кавычками, слешами, ставить символ < два, три раза - ничего не помогает. Всё что стоит после этого символа, включая и его - не отображается на кнопке. Может кто нибудь видел этот символ "<" на кнопке в message в каком нибудь моде?
Изменение репутации для пользователя nine-dragon-art
Может я не в тему попаду, но относится ли формат .pex к скриптам и если да то чем открыть ?
Формат PEX - это скомпилированный скрипт. Чтобы получить исходник PSC нужно .pex файл декомпилировать. В архиве есть декомпилятор и инструкция по настройке: Инструкции по работе с ESP и BSA
LordVadim, а конструкция в стиле С тоже не канаеть? " \< "
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя nine-dragon-art