Тема для вопросов по скриптингу.
Функции папируса:
На английском
На русском (не все, но базис)
#401
Отправлено
- werr, Chesh¡re и Olechkafum нравится это
#402
Отправлено
Скрипт прикрепляешь к квесту, скрипт должен быть типа Conditional. Далее, внутри скрипта создаёшь функцию (к примеру - UnequipArmor(); как создавать свои функции написано здесь), которую будешь вызывать на определённой стадии квеста. Всё сделано? Идём далее - в Quest Stges, в своём квесте, ты создаёшь нужный этап квеста (10), а далее в таблице с надписью в верхней части "Log Entry" и выбираешь пункт "New" Закрываешь квест через кнопку "Ок", сохраняешь плагин. ДАлее заново открываешь квест, заходишь в этапы квеста, открываешь нужный этап и в поле Papyrus Fragment в "kmyQuest" выбираешь твой скрипт.
Далее, в этом же окошке прописываешь код, а нужную функцию вызываешь через "kmyQuest.UnequipArmor()"
спасибо, это работает. Теперь возник другой вопрос. У меня квест вызывается пакетом ForceGreet. Но когда он заканчивается и игрок сам вступает в разговор с персонажем квеста, линия диалогов из квеста становится видна в окне обычного диалога. Квест у меня повторяющийся. Как можно убрать квестовую линию диалога из окна обычного разговора?
#403
Отправлено
У меня квест вызывается пакетом ForceGreet. Но когда он заканчивается и игрок сам вступает в разговор с персонажем квеста, линия диалогов из квеста становится видна в окне обычного диалога. Квест у меня повторяющийся. Как можно убрать квестовую линию диалога из окна обычного разговора?
Поменять тип бранчи диалога с Top-Level на Normal (цвет фона бранчи сменится с золотого на фиолетовый).
#404
Отправлено
Доброго времени суток господа. У меня сразу просьба - помогите решить проблемы со скриптами. Есть скрипты которые работают - но работают не совсем так как нужно мне - ниже приведу примеры - и постараюсь описать всё как можно подробнее (прошу строго не судить - у меня совсем нет опыта в модестроении - поэтому и изъясняться я буду топорно)
1) Скрипт который рандомно включает (Enable) один из объектов когда ГГ (главный герой-Довакин-актёр) входит в область триггера и выключает (Disable) этот объект когда ГГ покидает область триггера. Суть в том что я уже три дня пытаюсь сделать так чтобы скрипт срабатывал не тольно на ГГ но так же на NPC - подскажите в чём моя проблема что нужно прописать в скрипте что бы он так же срабатывал на NPC (когда те входят в триггер и покидают его)
Scriptname _0000_HMD_Trigger_RandomObject_Enable extends ObjectReference
;-- Properties --------------------------------------
ObjectReference property RandomObjectEnable_1 auto
ObjectReference property RandomObjectEnable_2 auto
ObjectReference property RandomObjectEnable_3 auto
ObjectReference property RandomObjectEnable_4 auto
ObjectReference property RandomObjectEnable_5 auto
ObjectReference property RandomObjectEnable_6 auto
ObjectReference property RandomObjectEnable_7 auto
;-- Variables ---------------------------------------
;-- Functions ---------------------------------------
function OnTriggerLeave(ObjectReference akActionRef)
if akActionRef == game.GetPlayer() as ObjectReference
RandomObjectEnable_1.DisableNoWait(true)
RandomObjectEnable_2.DisableNoWait(true)
RandomObjectEnable_3.DisableNoWait(true)
RandomObjectEnable_4.DisableNoWait(true)
RandomObjectEnable_5.DisableNoWait(true)
RandomObjectEnable_6.DisableNoWait(true)
RandomObjectEnable_7.DisableNoWait(true)
else
return
endIf
endFunction
; Skipped compiler generated GetState
function OnTriggerEnter(ObjectReference akActionRef)
if akActionRef == game.GetPlayer() as ObjectReference
Int random = utility.RandomInt(1, 75)
if random >= 1 && random < 10
RandomObjectEnable_1.EnableNoWait(true)
elseIf random >= 10 && random < 20
RandomObjectEnable_2.EnableNoWait(true)
elseIf random >= 20 && random < 30
RandomObjectEnable_3.EnableNoWait(true)
elseIf random >= 30 && random < 40
RandomObjectEnable_4.EnableNoWait(true)
elseIf random >= 40 && random < 50
RandomObjectEnable_5.EnableNoWait(true)
elseIf random >= 50 && random < 60
RandomObjectEnable_6.EnableNoWait(true)
elseIf random >= 60
RandomObjectEnable_7.EnableNoWait(true)
endIf
else
return
endIf
endFunction
; Skipped compiler generated GotoState
2) Есть скрипт который при активации триггера рандомно дает ГГ один из предметов ingredient - мне нужно что бы этот предмет + активный эффект (хороший отдых) ГГ получал спустя час - то есть при активации триггера должен проходить час (ну как со сном - только без возможности выбора временного интервала) и появлялось всплывающее окошко (Message box) в котором будет написано что прошел час и ГГ хорошо отдохнул. Важно что бы хороший отдых ГГ получал в независимости от рандомной составляющей
Scriptname _0000_HMD_Crafting_Resources extends ObjectReference
ingredient property Eff1 auto
ingredient property Eff2 auto
ingredient property Eff3 auto
ingredient property Eff4 auto
ingredient property Eff5 auto
ingredient property Eff6 auto
ingredient property Eff7 auto
function OnActivate (ObjectReference akActionRef)
if akActionRef == game.GetPlayer() as ObjectReference
Int random = utility.RandomInt(1, 75)
if random >= 1 && random < 10
game.getplayer().additem(Eff1, 1)
elseIf random >= 10 && random < 20
game.getplayer().additem(Eff2, 1)
elseIf random >= 20 && random < 30
game.getplayer().additem(Eff3, 1)
elseIf random >= 30 && random < 40
game.getplayer().additem(Eff4, 1)
elseIf random >= 40 && random < 50
game.getplayer().additem(Eff5, 1)
elseIf random >= 50 && random < 60
game.getplayer().additem(Eff6, 1)
elseIf random >= 60
game.getplayer().additem(Eff7, 1)
endIf
else
return
endIf
endFunction
Заранее спасибо.
#405
Отправлено
1)
Scriptname _0000_HMD_Trigger_RandomObject_Enable extends ObjectReference ObjectReference property RandomObjectEnable_1 auto ObjectReference property RandomObjectEnable_2 auto ObjectReference property RandomObjectEnable_3 auto ObjectReference property RandomObjectEnable_4 auto ObjectReference property RandomObjectEnable_5 auto ObjectReference property RandomObjectEnable_6 auto ObjectReference property RandomObjectEnable_7 auto function OnTriggerLeave(ObjectReference akActionRef) RandomObjectEnable_1.DisableNoWait(true) RandomObjectEnable_2.DisableNoWait(true) RandomObjectEnable_3.DisableNoWait(true) RandomObjectEnable_4.DisableNoWait(true) RandomObjectEnable_5.DisableNoWait(true) RandomObjectEnable_6.DisableNoWait(true) RandomObjectEnable_7.DisableNoWait(true) endFunction function OnTriggerEnter(ObjectReference akActionRef) Int random = utility.RandomInt(1, 75) if random >= 1 && random < 10 RandomObjectEnable_1.EnableNoWait(true) elseIf random >= 10 && random < 20 RandomObjectEnable_2.EnableNoWait(true) elseIf random >= 20 && random < 30 RandomObjectEnable_3.EnableNoWait(true) elseIf random >= 30 && random < 40 RandomObjectEnable_4.EnableNoWait(true) elseIf random >= 40 && random < 50 RandomObjectEnable_5.EnableNoWait(true) elseIf random >= 50 && random < 60 RandomObjectEnable_6.EnableNoWait(true) elseIf random >= 60 RandomObjectEnable_7.EnableNoWait(true) endIf endFunction
2)
Scriptname _0000_HMD_Crafting_Resources extends ObjectReference actor property PlayerRef auto messagebox property GoodRestMessage auto spell property GoodRestSpell auto ingredient property Eff1 auto ingredient property Eff2 auto ingredient property Eff3 auto ingredient property Eff4 auto ingredient property Eff5 auto ingredient property Eff6 auto ingredient property Eff7 auto function OnActivate (ObjectReference akActionRef) if akActionRef == game.GetPlayer() as ObjectReference Int random = utility.RandomInt(1, 75) if random >= 1 && random < 10 game.getplayer().additem(Eff1, 1) elseIf random >= 10 && random < 20 game.getplayer().additem(Eff2, 1) elseIf random >= 20 && random < 30 game.getplayer().additem(Eff3, 1) elseIf random >= 30 && random < 40 game.getplayer().additem(Eff4, 1) elseIf random >= 40 && random < 50 game.getplayer().additem(Eff5, 1) elseIf random >= 50 && random < 60 game.getplayer().additem(Eff6, 1) elseIf random >= 60 game.getplayer().additem(Eff7, 1) endIf GoodRestSpell.cast(PlayerRef, PlayerRef) GoodRestMessage.Show() endIf endFunction
Не забудь проставить все проперти в СК.
PlayerRef - игрок
GoodRestMessage - твой месседжбокс (в СК его сделаешь, так имхо правильнее, чем текст напрямую в скрипте задавать).
GoodRestSpell - заклинание с эффектом отдыха.
- CISCO.:i:..:i:. это нравится
#406
Отправлено
PlayerRef - игрок
GoodRestMessage - твой месседжбокс (в СК его сделаешь, так имхо правильнее, чем текст напрямую в скрипте задавать).
GoodRestSpell - заклинание с эффектом отдыха.
ух ты как быстро помогли - спасибо огромное - пойду тестить)) про месседж бокс - ты абсолютно прав - так гораздо лучше и универсальнее.
Сообщение отредактировал CISCO.:i:..:i:.: 10 сентября 2018 - 13:46
#407
Отправлено
второй скрипт при компиляции выдает ошибку:
Starting 1 compile threads for 1 files...
Compiling "aaaaHMD_Crafting_Resources"...
C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\aaaaHMD_Crafting_Resources.psc(5,20): unknown type messagebox
C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\aaaaHMD_Crafting_Resources.psc(35,16): messagebox is not a known user-defined type
No output generated for aaaaHMD_Crafting_Resources, compilation failed.
Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on aaaaHMD_Crafting_Resources
что делать?
#408
Отправлено
Попробуй заменить в строчке
messagebox property GoodRestMessage auto
слово messagebox на просто message.
Что-то я не помню, как там эти сообщения в проперти должны быть.
- CISCO.:i:..:i:. это нравится
#410
Отправлено
А. Это я пропустил.
И что-то даже хз, как это реализовать. Прямой команды, чтоб зафорсить игрока "отдохнуть" я не нашел.
Можно попробовать разобрать каие-нибудь моды на такую тематику - их несколько существует. Living takes time или как-то так.
Еще была пара домов, которые строить надо - и которые при постройке "проматывали" время.
Сообщение отредактировал Azazellz: 10 сентября 2018 - 15:02
#412
Отправлено
Замени
GoodRestSpell.cast(PlayerRef, PlayerRef)
На
PlayerRef.AddSpell(GoodRestSpell)
Отдых, оказывается, не спелл, а абилити со скриптом-таймером. Через каст не добавится.
- CISCO.:i:..:i:. это нравится
#414
Отправлено
Народ есть у кого нибудь готовый скрипт с принципом работы enable\disable. Дано три объекта A В С все изначально (desable) - объекты А и В - активируются (становятся enable) с помощью триггеров активаторов - а объект С активируется (становиться enable) только если объекты А и В enable. Если хотя бы один из объектов А и В становиться disable - тогда и объект С - становиться disable.
Скрипт на А и В у меня есть - они же простые))))) а вот на С не могу понять как накписать - смотрел принцип работы скрипта стены Бладскал - где дверь открывается если предыдущие активаторы сработали - но так и не смог разобраться что к чему - а где смотреть еще ума не приложу. Наверняка у Вас матёрых мододелов завалялось что нить подобное)
P.S. предыдущий мой вопрос с ожиданием времени (как при активации ожидания времени или сна)- так и не был решен мной - помощь всё еще нужна.
Сообщение отредактировал CISCO.:i:..:i:.: 11 сентября 2018 - 11:45
#415
Отправлено
Если скрипт на А и В у меня есть - они же простые
Ну так включай голову.
Условие "If" тебе знакомо же?
Вот и используй.
A.Enable(true) if (B.IsEnabled()) C.Enable(true) endif
Наоборот еще проще - если у тебя отключается А или B, то сразу отключается и С. Тут даже If не нужен, просто две строчки disable подряд.
A.Disable(true) C.Disable(true)
Для B аналогично.
#416
Отправлено
Ну так включай голову.
Условие "If" тебе знакомо же?
Вот и используй.
A.Enable(true) if (B.IsEnabled()) C.Enable(true) endifНаоборот еще проще - если у тебя отключается А или B, то сразу отключается и С. Тут даже If не нужен, просто две строчки disable подряд.
A.Disable(true) C.Disable(true)Для B аналогично.
ну это если я хочу что бы у меня С активировалось (становилось enable) от одного из частников цепи. А мне нужно что бы С становился enable только когда оба объекта станут enable. и что бы С становилось обратно disable если один из объектов либо А либо В становился disable. То есть если А и В (enable) - то тогда С тоже (enable). если А (enable) В (disable) то тогда С (disable) - как же еще объяснить - в общем мне нужно что бы скрипт на С запускал проверку на наличие (enable\disable) у двух объектов А и В - и если они оба (enable) тогда и С становится(enable) - если же один из них (disable неважно какой) тогда и С (disable)
P.S. заранее извиняюсь если чего не понял.
#417
Отправлено
P.S. заранее извиняюсь если чего не понял.
Извиняю, потому что ты не понял.
Скрипт, который будет висеть на С и чего-то там отслеживать тебе не нужен.
У тебя есть А и Б.
Ты включаешь А, и в скрипте, прицепленном к А, сразу проверяется состояние Б.
Если Б - включено, этим же скриптом включается и С. Если Б - не включено, ничего, кроме включения, А не происходит.
Т.е. это первый код в моем сообщении выше.
Для Б - аналогично.
Включаешь Б, этим же скриптом проверяется состояние А, если оно включено - включается и С.
Этот код уже напиши сам.
Опять же, если ты отключаешь любой из элементов, и хочешь, чтобы С работал, только пока включены оба, никакой скрипт на С тебе так же не нужен.
Ибо если хоть один из элементов у тебя отключен - С так же отключается.
Т.е. ты можешь просто отключать оба элемента одним скриптом - А и С (код в сообщении выше), или Б и С (код пиши сам).
Это самый простой метод, который требует минимума знаний СК и папируса.
Можно, конечно, замутить сложную систему (сделать квест, например, который будет включать\отключать С в зависимости от стадий, которые будут переключаться через А и Б...) - но тут это явно не нужно.
Сообщение отредактировал Azazellz: 11 сентября 2018 - 16:13
#420
Отправлено
Разобрался с временем ожидания - получилось следующие:
но смущает только одно что отдых добавляется как ингредиент - присутствует надпись в левом верхнем углу - "Хороший отдых добавлено" я так понимаю это из за использования заклинания - и как сделать так что бы убрать это сообщение? Можно ли замутить отдых через новый Keywords и если да то как?
#421
Отправлено
Как ты игре добавлять сказал - так она это и делает. И это не ингридиент - это обычное сообщения о том, что игроку что-то добавлено. Магия, абилка, ингридиент, предмет - неважно."Хороший отдых добавлено" я так понимаю это из за использования заклинания
Сделаешь так - сообщения не будет.
PlayerRef.AddSpell(MySpell, false)
Какой еще кейворд? Зачем?Можно ли замутить отдых через новый Keywords и если да то как?
Отдых по сути - перк, ускоряющий прокачку, прицепленный к заклинанию-способности с постоянным эффектом (и скриптом, который этот эффект через нужное время снимает).
Где там кейворды?
У меня кстати есть сомнения, как это вот будет работать, если у тебя, скажем, на часах - 23:00, а в Time стоит 2 часа.GameHour.SetValue(GameHour.GetValue() + Time)
Нормально оно на час ночи промотается, или таки что-то сломается?
Рекомендую протестировать такой вариант.
Сообщение отредактировал Azazellz: 13 сентября 2018 - 16:34
Темы с аналогичным тегами papyrus, help, скрипты, вопросы
Моддинг →
Моддинг Skyrim →
Восстановление на основе Зала ДозораАвтор Alex_andra, 11 дек 2023 mod, help |
|
|||
|
Моддинг →
Моддинг Skyrim →
Отстройка ВинтерхолдаАвтор Alex_andra, 10 авг 2023 bugs, moding, help |
|
||
Моддинг →
Моддинг Oblivion →
Скрипт Для СнаряженияАвтор БесездаБойчик, 07 сен 2022 скрипты, скрипт |
|
|||
Моддинг →
Моддинг Skyrim →
Нужны добровольцы для теста модаАвтор arkadiy111, 11 апр 2022 help |
|
|||
help
Моддинг →
Моддинг Skyrim →
Ram and Skyrim seАвтор Samurai1, 03 апр 2022 help |
|
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 скрытых