• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя GF_RaiseD
GF_RaiseDOffline
Сообщение №1531
написано: 9 мая 2015, 23:37
| Отредактировано: GF_RiseD - 9 мая 2015, 23:44
Scriptname ACForcePoisonArrowMenu extends ObjectReference {Uses to force the dialog window to ask the player if he want to poison an arrows}
ObjectReference Property ForcePoisonArrowsMenu Auto Message Property ACPoisonMenu Auto int switcher
Event OnActivate(ObjectReference akActionRef)
switcher = ACPoisonMenu.show()
if switcher == 0 Activate(ForcePoisonArrowsMenu) else Endif
EndEvent
Предположительно при выборе определенного пункта из всплывающего при активации объекта окна должен активироваться воркбенч из проперти. Но активируется все как обычно.
Исправил
Код
Scriptname ACForcePoisonArrowMenu extends ObjectReference {Uses to force the dialog window to ask the player if he want to poison an arrows}
ObjectReference Property ForcePoisonArrowsMenu Auto Message Property ACPoisonMenu Auto int switcher
Event OnActivate(ObjectReference akActionRef)
switcher = ACPoisonMenu.show()
if switcher == 0 ForcePoisonArrowsMenu.Activate(Game.GetPlayer()) else Endif
Одно лишь вешанье на объект скрипта с ивентом OnActivate не предотвращает его обычную активацию... Заблокировать её можно методомBlockActivation(True), но это отстой... Если пользователь решит отключить твой мод, то так больше никогда и не сможет использовать бенчи, для которых была заблокирована активация. Я бы все-таки пилил с помощью перка. И еще:
Цитата GF_RiseD
Activate(ForcePoisonArrowsMenu)
Вообще не по теме... Я в предыдущем сообщении приводил пример.
Можно посмотреть перк DA04BloodHarvestPerk. Он используется в квесте на сбор крови эльфов. При определенных условиях (которые там видны) при активации трупа появляется выбор: обыскать или собрать кровь.
Dsion, с диалоговыми окнами какраз все окей. Нужно активировать определенный воркбенч когда игрок делает определенный выбор. Вот, надеюсь получилось загрузить скрин.
Добавлено (10 Мая 2015, 03:06) --------------------------------------------- Я сделал копию алхим. воркбенча, с тем только отличием что на нем можно немного по другому создавать предметы - крафтить.
Да, видно... Так что конкретно ты предпринял для того, чтоб не активировался обычный алхимический стол? Ох, я прямо отсюда чую, как тебе лень разбираться с Entry Point перков :-D Но это было бы правильно.
Изменение репутации для пользователя GF_RaiseD
GF_RaiseDOffline
Сообщение №1537
написано: 10 мая 2015, 00:13
| Отредактировано: GF_RiseD - 10 мая 2015, 00:14
Dsion, ентри поинт настроить - дело нескольких минут. Всеровно появится диалоговое окно и опять постанет вопрос каким образом мне активировать необходимый воркбенч. Да немного, собственно говоря потому то я здесь. Я плохо себе представляю как такое сделать. Мои попытки не увенчались успехом.
Если крафт должен быть доступен с любого стола во всем мире, то лучше через перк... А если делать свой собственный уникальный стол, который будет стоять в одном месте... Тогда можно и через ивент, наверное. Только подпилить его, чтоб он не считался алхимическим столом. Чтоб был как-бы обычной фурнитурой. Тогда никакое меню крафта не будет выскакивать, пока ты его сам не вызовешь.
Уважаемые знатоки скриптов Помогите написать скрипт. Хочу чтобы в сундук с названием "Руда", можно было положить только руду. Нашел скрипт, который запрещает класть вещь в сундук, если она не из FormList. Мне бы хотелось чтобы при открывании сундука с названием "Руда", в инвентаре у игрока отображалась только руда.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1542
написано: 13 мая 2015, 18:46
| Отредактировано: Dsion - 13 мая 2015, 18:48
All55, такой фильтр можно добавить когда даешь вещи какому-то NPC... А для сундука - вряд ли. Никогда ничего подходящего не видел. Боюсь, выплевывание неподходящих вещей - это максимум, чего можно добиться. Во всяком случае, без SKSE.
Можно, наверное. Но с этим меню принятия/получения подарков там еще всякие другие проблемы. Например, оно может работать только на принятие вещей или на получение. Не одновременно. И еще там по мелочам.
при содзании скрипта пишет: "compilation failed - are you sure you want to save?". скрипт: Event OnContainerChanged(ObjectReference newContainer, ObjectReference oldContainer) if (newContainer == Game.GetPlayer()) GSQ01.SetObjectivedisplayed(30) GSQ01.SetStage(30) endif EndEvent
Compiler Output: Starting 1 compile threads for 1 files... Compiling "MSKQ01AmuletScript"... C:\Program Files (x86)\Steam\steamapps\common\Skyrim\Data\Scripts\Source\temp\MSKQ01AmuletScript.psc(1,0): mismatched input 'Event' expecting SCRIPTNAME C:\Program Files (x86)\Steam\steamapps\common\Skyrim\Data\Scripts\Source\temp\MSKQ01AmuletScript.psc(0,0): error while attempting to read script MSKQ01AmuletScript: ‚ нЄ§Ґ¬Ї«пॠ®ЎкҐЄв Ґ § ¤ ббл«Є ®ЎкҐЄв. No output generated for MSKQ01AmuletScript, compilation failed.
Batch compile of 1 files finished. 0 succeeded, 1 failed. Failed on MSKQ01AmuletScript
подскажите, что с этим делать?
изначально в стим-версии КК не хотел писать скрипты диалогам, отсутствовал флаг тесскйримчто-то-там.флг и огромная куча скриптов, позже скачал и установил пиратский КК, с ним шли все файлы эти и скрипты. далее проблема разрешилась и скрипты диалогов стали компилироваться, но теперь не могу написать скрипт для условной цели убийства в квесте и для предмета, который надо у него забрать после его смерти. подскажите, что делать? я в скриптах не шарю, не понимаю, что такое алиас и т.д. весь гугл уже перерыл, но решения проблемы найти не получается.
Изменение репутации для пользователя Arhatt
ArhattOffline
Сообщение №1547
написано: 16 мая 2015, 22:28
| Отредактировано: Arhatt - 16 мая 2015, 23:11
Ребят, только начинаю разбираться в скриптах Скайрима, пытаюсь создать простой скрипт при помощи которого будет добавляться фракция Дове при надевании брони, а при снятии будет эта фракция удаляться. Вроде бы немного подразобравшись написал скрипт,НО при компиляции выдает ошибку 8(( Вот мой скрипт: ----------------------------------------------------------------- Scriptname ArhattTEst extends ObjectReference
armor property ArmorDaedricCuirass auto faction property DaedraFaction auto
Event OnActorEquipped(Armor ArmorDaedricCuirass) function OnFrakcia(Actor Target) game.GetPlayer().AddToFaction(DaedraFaction) endFunction endEvent
Event OnActorUnequipped(Armor ArmorDaedricCuirass) function OffFrakcia(Actor Target) game.GetPlayer().RemoveFromFaction(DaedraFaction) endfunction endEvent Что я не так сделал тут ? Подскажите. ------------------------------------------------------------------ Scriptname ArhattTEst extends ObjectReference
Armor Property CharmArmor Auto Faction Property CharmFaction Auto
Event OnActorUnequipped(Armor CharmArmor) game.GetPlayer().RemoveFromFaction(CharmFaction) EndEvent последний мой вариант этого скрипта! И тоже не работает 8(
Да я тупанул, есть ивент OnActorEquip, а не OnActorEquipped . Спс, сейчас пробну. Еще НУБСКИЙ вопрос! чем отличается akActor от просто Actor????? Просто мне как начинающему все нюансы важны) даже самые незначительные)
Я снова по поводу сундука с рудой. Решил перекладывать "лишние" вещи в другой сундук. Теперь вопросы, на которые не нашел ответы. Все они сводятся к работе с инвентарем игрока.
Как узнать сколько наименований предметов в инвентаре у игрока Как обратиться к предмету в инвентаре по индексу
Уважаемые знатоки скриптов Помогите написать скрипт. Хочу чтобы в сундук с названием "Руда", можно было положить только руду. Нашел скрипт, который запрещает класть вещь в сундук, если она не из FormList. Мне бы хотелось чтобы при открывании сундука с названием "Руда", в инвентаре у игрока отображалась только руда.
Чисто теоретически - просто. При активации контейнера просматриваем все вещи в инвентаре и сравниваем со списком разрешенных вещей для данного сундука. Лишние складываем в отдельный контейнер. При закрытии сундука, вещи из контейнера забираем.
Scriptname _MyScriptCont extends ObjectReference ; Вешается на контейнер.
Import Game
ObjectReference Property MyREFRCONT Auto ; Копия пустого временного контейнера. FormList Property MyFLST Auto ; Лист с предметами, допустимыми для обмена с осн. контейнером.
EVENT OnActivate(ObjectReference xR) ObjectReference xP = GetPlayer() IF xR == xP xP.RemoveAllItems(MyREFRCONT, true) Int iL = MyFLST.GetSize() Int iC WHILE iC < iL Form xF = MyFLST.GetAt(iC) MyREFRCONT.RemoveItem(xF, MyREFRCONT.GetItemCount(xF), true, xP) iC += 1 ENDWHILE ENDIF ENDEVENT
При активации контейнера просматриваем все вещи в инвентаре и сравниваем со списком разрешенных вещей для данного сундука. Лишние складываем в отдельный контейнер.При закрытии сундука, вещи из контейнера забираем.
एक अच्छा विचार!
Добавлено (18 Мая 2015, 09:37) --------------------------------------------- Можно сделать так, чтоб, при активации сундука, вся руда, что есть у игрока, сама туда складывалась. Или при возвращении игрока домой... Или сразу после попадания к игроку.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)