Модератор форума: 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? Пиши не в ЛС, а в эту тему.
GF_RaiseD  Offline  Сообщение №1531 написано: 9 мая 2015, 23:37 | Отредактировано: GF_RiseD - 9 мая 2015, 23:44



50






Dsion  Offline  Сообщение №1532 написано: 9 мая 2015, 23:47



Одно лишь вешанье на объект скрипта с ивентом OnActivate не предотвращает его обычную активацию...
Заблокировать её можно методом BlockActivation(True), но это отстой... Если пользователь решит отключить твой мод, то так больше никогда и не сможет использовать бенчи, для которых была заблокирована активация. Я бы все-таки пилил с помощью перка.
И еще:
Цитата GF_RiseD

Activate(ForcePoisonArrowsMenu)

Вообще не по теме... Я в предыдущем сообщении приводил пример.

GF_RaiseD  Offline  Сообщение №1533 написано: 9 мая 2015, 23:56



50
Исправил. Тот же результат. В том смысле что обьект из проперти не активируется. Еще проверяю.

Dsion  Offline  Сообщение №1534 написано: 9 мая 2015, 23:56



Можно посмотреть перк DA04BloodHarvestPerk. Он используется в квесте на сбор крови эльфов. При определенных условиях (которые там видны) при активации трупа появляется выбор: обыскать или собрать кровь.

GF_RaiseD  Offline  Сообщение №1535 написано: 10 мая 2015, 00:06



50
Dsion, с диалоговыми окнами какраз все окей. Нужно активировать определенный воркбенч когда игрок делает определенный выбор. Вот, надеюсь получилось загрузить скрин.

Добавлено (10 Мая 2015, 03:06)
---------------------------------------------
Я сделал копию алхим. воркбенча, с тем только отличием что на нем можно немного по другому создавать предметы - крафтить.


Dsion  Offline  Сообщение №1536 написано: 10 мая 2015, 00:06



Да, видно... Так что конкретно ты предпринял для того, чтоб не активировался обычный алхимический стол?
Ох, я прямо отсюда чую, как тебе лень разбираться с Entry Point перков :-D Но это было бы правильно.

GF_RaiseD  Offline  Сообщение №1537 написано: 10 мая 2015, 00:13 | Отредактировано: GF_RiseD - 10 мая 2015, 00:14



50
Dsion, ентри поинт настроить - дело нескольких минут. Всеровно появится диалоговое окно и опять постанет вопрос каким образом мне активировать необходимый воркбенч. Да немного, собственно говоря потому то я здесь. Я плохо себе представляю как такое сделать. Мои попытки не увенчались успехом.

Dsion  Offline  Сообщение №1538 написано: 10 мая 2015, 00:14



Если крафт должен быть доступен с любого стола во всем мире, то лучше через перк...
А если делать свой собственный уникальный стол, который будет стоять в одном месте... Тогда можно и через ивент, наверное. Только подпилить его, чтоб он не считался алхимическим столом. Чтоб был как-бы обычной фурнитурой. Тогда никакое меню крафта не будет выскакивать, пока ты его сам не вызовешь.

GF_RaiseD  Offline  Сообщение №1539 написано: 10 мая 2015, 00:25



50
Как вызвать воркбенч с любого места в мире? По нажатию кнопки, например, "Алхимия"? Я не знаю как это сделать.

Dsion  Offline  Сообщение №1540 написано: 10 мая 2015, 01:09



Перепроверил на всякий случай. Всё работает.
Bench.Activate(Game.GetPlayer())


All55  Offline  Сообщение №1541 написано: 13 мая 2015, 18:36



8
Уважаемые знатоки скриптов
Помогите написать скрипт.
Хочу чтобы в сундук с названием "Руда", можно было положить только руду.
Нашел скрипт, который запрещает класть вещь в сундук, если она не из FormList.
Мне бы хотелось чтобы при открывании сундука с названием "Руда", в инвентаре у игрока отображалась только руда.

Dsion  Offline  Сообщение №1542 написано: 13 мая 2015, 18:46 | Отредактировано: Dsion - 13 мая 2015, 18:48



All55, такой фильтр можно добавить когда даешь вещи какому-то NPC... А для сундука - вряд ли. Никогда ничего подходящего не видел.  Боюсь, выплевывание неподходящих вещей - это максимум, чего можно добиться. Во всяком случае, без SKSE.

All55  Offline  Сообщение №1543 написано: 13 мая 2015, 19:00



8
Я чайник. Объясните, пожалуйста, что такое SKSE.

Multigone  Offline  Сообщение №1544 написано: 13 мая 2015, 19:58



832
Dsion, а если привязать фейкового НПС к сундуку, и при его активации открывать инвентарь НПС? </genius mod off>

Dsion  Offline  Сообщение №1545 написано: 13 мая 2015, 20:06 | Отредактировано: Dsion - 13 мая 2015, 20:07



Можно, наверное. Но с этим меню принятия/получения подарков там еще всякие другие проблемы. Например, оно может работать только на принятие вещей или на получение. Не одновременно. И еще там по мелочам.

deadlypanda  Offline  Сообщение №1546 написано: 13 мая 2015, 22:11



5
при содзании скрипта пишет: "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  Offline  Сообщение №1547 написано: 16 мая 2015, 22:28 | Отредактировано: Arhatt - 16 мая 2015, 23:11



8
Ребят, только начинаю разбираться в скриптах Скайрима, пытаюсь создать простой скрипт при помощи которого будет добавляться фракция Дове при надевании брони, а при снятии будет эта фракция удаляться. Вроде бы немного подразобравшись написал скрипт,НО при компиляции выдает ошибку 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 OnActorEquipped(Armor CharmArmor) 
game.GetPlayer().AddToFaction(CharmFaction) 
EndEvent 

Event OnActorUnequipped(Armor CharmArmor) 
game.GetPlayer().RemoveFromFaction(CharmFaction) 
EndEvent 
последний мой вариант этого скрипта! И тоже не работает 8(

Dsion  Offline  Сообщение №1548 написано: 16 мая 2015, 23:53



Event OnActorEquipped(Armor CharmArmor)
Откуда ты это взял? Нету такого ивента... Те, что есть, тут:
http://www.creationkit.com/ObjectReference_Script

Можно попробовать вот так, но я не проверял (это если скрипт вешается именно на броню, а не на игрока):

Код
Scriptname Test extends ObjectReference

Faction Property MyFaction Auto

Event OnEquipped(Actor akActor)
    akActor.AddToFaction(MyFaction)
EndEvent

Event OnUnequipped(Actor akActor)
     akActor.RemoveFromFaction(MyFaction)
EndEvent




Arhatt  Offline  Сообщение №1549 написано: 17 мая 2015, 01:00



8
Да я тупанул, есть ивент OnActorEquip, а не OnActorEquipped . Спс, сейчас пробну. Еще НУБСКИЙ вопрос! чем отличается akActor от просто Actor????? Просто мне как начинающему все нюансы важны) даже самые незначительные)

Dsion  Offline  Сообщение №1550 написано: 17 мая 2015, 01:32



Int i = 5
Тут "Int" - это тип переменной, "i" - имя, а 5 - значение.

Actor akActor
Actor - тип, akActor - имя. Имя может быть любое.

Arhatt  Offline  Сообщение №1551 написано: 17 мая 2015, 15:12



8
А это я знаю) спс за разъяснение)))

All55  Offline  Сообщение №1552 написано: 17 мая 2015, 16:08



8
Я снова по поводу сундука с рудой.
Решил перекладывать "лишние" вещи в другой сундук.
Теперь вопросы, на которые не нашел ответы.
Все они сводятся к работе с инвентарем игрока.

Как узнать сколько наименований предметов в инвентаре у игрока
Как обратиться к предмету в инвентаре по индексу

Multigone  Offline  Сообщение №1553 написано: 17 мая 2015, 17:03



832
All55

Цитата All55

Как обратиться к предмету в инвентаре по индексу


Если под индексом понимается FormID, и по FormID нужно найти форму, то так:

Form MyForm = Game.GetForm(iFormID)

Конкретная задача какова?

All55  Offline  Сообщение №1554 написано: 17 мая 2015, 17:32



8
Цитата Multigone

Конкретная задача какова?


Сообщение №1542

Не получилось оформить цитатой поэтому повторюсь

 Уважаемые знатоки скриптов
Помогите написать скрипт.
Хочу чтобы в сундук с названием "Руда", можно было положить только руду.
Нашел скрипт, который запрещает класть вещь в сундук, если она не из FormList.
Мне бы хотелось чтобы при открывании сундука с названием "Руда", в инвентаре у игрока отображалась только руда.

Multigone  Offline  Сообщение №1555 написано: 17 мая 2015, 17:40



832
All55, это сложно реализовать.

All55  Offline  Сообщение №1556 написано: 17 мая 2015, 18:08



8
Цитата Multigone

All55, это сложно реализовать.


А в чем проблема? В функциональности Папируса?

Чисто теоретически - просто. При активации контейнера просматриваем все вещи в инвентаре и сравниваем со списком разрешенных вещей для данного сундука. Лишние складываем в отдельный контейнер.
При закрытии сундука, вещи из контейнера забираем.

Multigone  Offline  Сообщение №1557 написано: 17 мая 2015, 19:58



832
All55



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

All55  Offline  Сообщение №1558 написано: 17 мая 2015, 20:18



8
Multigone, Спасибо за скрипт.
Ваш скрипт требует SKSE?

Multigone  Offline  Сообщение №1559 написано: 17 мая 2015, 20:37



832
All55, нет. Возможно, сделать квестовыми предметами не получится, т.к. алиас обычно работает с Object Reference, а предметы в инвентаре его не имеют.

Dsion  Offline  Сообщение №1560 написано: 18 мая 2015, 06:37



Цитата All55

При активации контейнера просматриваем все вещи в инвентаре и сравниваем со списком разрешенных вещей для данного сундука. Лишние складываем в отдельный контейнер.При закрытии сундука, вещи из контейнера забираем.

एक अच्छा विचार!

Добавлено (18 Мая 2015, 09:37)
---------------------------------------------
Можно сделать так, чтоб, при активации сундука, вся руда, что есть у игрока, сама туда складывалась.
Или при возвращении игрока домой...
Или сразу после попадания к игроку.


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





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