Модератор форума: 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? Пиши не в ЛС, а в эту тему.
Multigone  Offline  Сообщение №2671 написано: 17 июня 2018, 22:12



815
asdklghl, наверное, как-то так:


Код
Actor FUNCTION MyFun(Actor xCaster, ActorBase xCreatureBase, MiscObject xMarkerItem = none, Float fRadius = 500.0, Int iAttempts = 10)
    Actor xSomething
    WHILE iAttempts > 0
        xSomething = Game.FindRandomActorFromRef(xCaster, fRadius)
        IF xSomething && xSomething != xCaster && xSomething.GetActorBase() == xCreatureBase && !xSomething.GetItemCount(xMarkerItem)
            xSomething.AddItem(xMarkerItem)
            RETURN xSomething
        ENDIF
        iAttempts -= 1
    ENDWHILE
ENDFUNCTION

Пример вызова:


Код
ActorBase Property SummonAtronachFire Auto
MiscObject Property xDetector Auto ; Создать пустой неиграбельный предмет, служит для отметки существа, что оно найдено.

Actor xSummoned

EVENT OnEffectStart(Actor xT, Actor xC)
    Utility.Wait(1.0) ; Ждем, пока будет кого искать.
    xSummoned = MyFun(xT, SummonAtronachFire, xDetector)
    Utility.Wait(5.0)
    xSummoned.Kill()
ENDEVENT

asdklghl  Offline  Сообщение №2672 написано: 19 июня 2018, 19:34



4
Как изменить количество отмычек в тюрьме? Мб за это отвечает какая-то global, или скрипт? Есть желание поменять их количество. На нексусе информации не нашёл по этому вопросу.

Aksyonov  Offline  Сообщение №2673 написано: 14 июля 2018, 05:22 | Отредактировано: Aksyonov - 14 июля 2018, 05:22



937
Всем привет кто нибудь знает как заставить говорить (вызвать диалоги с призванным существом) именно с призванным а не с Actror, так как вот когда призывной персонаж Actor является призывным, и призывается заклинанием почему то он не говорит хотя диалоги прописаны в квесте и реплики тоже, окно диалога не появляется в чём проблема, раньше не озвучивал призраков, призывных - может призывные не могут говорить вообще? Если так может кто знает как тогда призвать (псевдо призвать) актера при надевании кольца - что бы выглядел как призыв но вызывался актер с шейдером духа а не призванное существо? (эффект внешний духа сделать не проблема) надо как то решать вопрос, буду рад любой подсказки, спасибо.

Multigone  Offline  Сообщение №2674 написано: 14 июля 2018, 07:12



815
Aksyonov, попробуй поменять призываемого актера на НПС, например, Лидию, или любого, кто гарантированно имеет возможность диалога. Убедись, что в расе твоего призываемого существа есть флаг Allow PC Dialogue.

Aksyonov  Offline  Сообщение №2675 написано: 14 июля 2018, 09:34 | Отредактировано: Aksyonov - 14 июля 2018, 09:35



937
Цитата Multigone

попробуй поменять призываемого актера на НПС, например, Лидию


Призвал Лидию таким же способом через выбор Assoc. item 1 магическом эффекте, молчит, получается все NPC у которых отмечен флажок: Summonable, не говорят, а значит реализовать призыв полноценного компаньона через добавление заклинания когда одеваешь кольцо, не получиться, остаётся использовать какую нибудь функцию типа Place at me, и так далее что бы просто поместить NPC обычного возле игрока на тригер а до появления Npc кастовать на его место ещё и эффект с призывом (саму сферу) что то не могу припомнить реального призрака который бы хоть что то бормотал после призыва - хотя они же вроде стонут, это тоже реплика, звук, и каким же образом она тогда выводиться у конкретного призрака? Надо потрошись наверное самих призраков подобных верно? В правильном ли направлении копаю?

Multigone  Offline  Сообщение №2676 написано: 14 июля 2018, 10:41



815
Aksyonov, посмотри, как сделан дремора-торговец в драгонборне.

Aksyonov  Offline  Сообщение №2677 написано: 14 июля 2018, 12:06 | Отредактировано: Aksyonov - 14 июля 2018, 12:06



937
Цитата Multigone

посмотри, как сделан дремора-торговец в драгонборне.


Спс гляну, если найду как сделано отпишусь - может кому то будет полезно кроме меня.

Добавлено (01 Августа 2018, 11:37)
---------------------------------------------
Всем привет, скажите может кто из вас знает как можно скриптом добавить заклинание определенному NPC - ну скажем эффект свечение из NPC в совангарде обычному NPC что бы у него появилось свечение, нужно для задачи небольшой, хочу превратить обычных оживших трупов в призраков после того как они возродятся (визуально в призраков)


Нарада  Offline  Сообщение №2678 написано: 11 августа 2018, 12:22 | Отредактировано: Нарада - 11 августа 2018, 12:22



129
Здравствуйте, делаю мод и столкнулся с проблемой, что не могу программно добавить торговцам предмет, в часности кофе барману в таверне.
Такой код ни к чему не приводит. Кофе не появляется у торговца.

Potion Property Coffe  Auto
ObjectReference Property ChefSudiREF  Auto

ChefSudiREF.additem(Coffe,10)
ChefSudiREF.Reset()

Multigone  Offline  Сообщение №2679 написано: 11 августа 2018, 12:41



815
Нарада, у торговцев для продажи есть спец. сундук, у каждого свой, указывается в одной из его faction во вкладке Vendor, одноразовое добавление в долгосрочной перспективе ни к чему не приведет, поскольку сундук каждые несколько дней перезагружает свой лут.

Я бы делал так: где-нибудь создал постоянный апдейт с небольшим периодом, добавлял в этот сундук 1 неигровой проверочный предмет и остальные основные предметы. Добавление должно происходить только в случае, если сундук не содержит проверочного предмета (т.е. произошло обновление содержимого). Поскольку неигровой предмет не может быть куплен.
А может, я бы сделал через постоянно перезапускаемый квест с алиасом этого сундука, в котором указаны добавляемые предметы. Не знаю, что лучше.

Нарада  Offline  Сообщение №2680 написано: 11 августа 2018, 12:54



129
Multigone,  Я тоже подумывал относительно алиаса, но как сделать перезапускаемый квест?

Dsion  Offline  Сообщение №2681 написано: 11 августа 2018, 14:10 | Отредактировано: Dsion - 11 августа 2018, 14:12



Нарада, а найти у всех барменов общий LeveledItem и добавить туда предмет скриптом нельзя? Или нужно только одному?

Нарада  Offline  Сообщение №2682 написано: 11 августа 2018, 14:23 | Отредактировано: Нарада - 11 августа 2018, 15:31



129
Dsion, благодарю за отклик. Насчет общего LeveledItem, попробую. Пусть во всех тавернах продают кофе  :) .
Только какой функцией можно в LeveledItem добавить предмет? Никогда не приходилось применять.
------------------------------------------------------------------------------------------------------
Эта функция?
Function AddForm(Form apForm, int auiLevel, int auiCount) native

Kolyanus93  Offline  Сообщение №2683 написано: 13 августа 2018, 19:36 | Отредактировано: Multigone - 22 апреля 2020, 15:18



35
Доброго времени суток! Решил я значит себе мод установить для восстановления зачарования оружия со временем (а они все завязаны на скриптах) и мой взгляд пал на этот. Однако меня в нем не устраивает проверка уровня перка Зачарование в оригинале: 1-19 лвл соотношение единиц зачарования к мане составляет 1/8, на 20 - 39 это 1 / 4  и  так далее до 100 - 4 / 1. Полез я в Creation Kit, чтобы поменять соотношение так, как мне нужно. Нашел я это заклинание и его магический эффект - SofiRechargeLPEffect, однако там нигде не было проверки на навык зачарования. Вот в чем собственно и вопрос: как всё же поменять эти коэффициенты? Запутанно написал, однако заранее благодарен, если эту проблему можно решить.

Ответ: в SofiRechargeLPScript, строки 148-161.

Aksyonov  Offline  Сообщение №2684 написано: 26 августа 2018, 05:37 | Отредактировано: Aksyonov - 26 августа 2018, 05:38



937
Всем привет помогите пожалуйста, я создаю компаньона в ручную с нуля не используя стандартные диалоги существующих компаньонов ничего в общем не юзаю из стандартного - ai пакеты фракции не добавлял стандартные, вопрос такой - при создания нового аи пакета - я используя шаблон аи пакета под названием: FollowPlayer - npc начинает следовать за игроком но не переселяется с ним если он переходит в новую локацию, как это исправить? Присвоить фракцию? Или нужно присвоить отношения, как это делается не знаю скрипта подскажите.

Нарада  Offline  Сообщение №2685 написано: 29 августа 2018, 11:08



129
Aksyonov, используемый пакет тут не при чем. Если последователь "дернулся" за ГГ, то пакет работает. Стандартные фракции нужны только для стандартного (ванильного) последователя, чтобы вывести ванильные диалоги с последующими командами. В конкретном вашем случае, скорее всего, или не финизирован переход между локациями, или на пути последователя до маркера перехода имеется кривой навмеш.

Aksyonov  Offline  Сообщение №2686 написано: 29 августа 2018, 14:05 | Отредактировано: Aksyonov - 29 августа 2018, 16:09



937
Цитата Нарада

или на пути последователя до маркера перехода имеется кривой навмеш.


То есть достаточно использовать пакет следование за персонажем и он должен автоматически переселятся за гг? Что то я сомневаюсь по поводу нав мешей - попробую так как локация закрытого типа туда никто не может переселится через дверь, нужно обязательно делать вход через дверь? Ну я к тому что бы она была на виду? Или должен быть лишь маркер (желтый) дабы npc смог пройти - и если дело в нав мешах - это может препятствовать переселению npc к гг при использование команды Coc Whiterun, то есть если физически двери входа нет - npc даже через консоль при перемещение не будет перемещаться за гг, верно понимаю?

*Нав меши проверил создал дверей не было выхода из локации тоже - npc пошел за гг конечно, но я не об этом - мне то надо что бы он перемещался со мной как какая нибудь лошадь так же при быстром перемещении по карте m или с применением кода Coc, в общем при быстром путешествии он не следует на гг - а мне нужно сделать именно это, но я не знаю как и какой скрипт использовать.

Нарада  Offline  Сообщение №2687 написано: 30 августа 2018, 08:31 | Отредактировано: Нарада - 30 августа 2018, 08:32



129
Это поможет решить проблему:
Event OnActivate(ObjectReference akActionRef)
Game.FastTravel(Marker)
EndEvent

Что касается "СОС", то это тестовая функция.

Aksyonov  Offline  Сообщение №2688 написано: 8 сентября 2018, 06:05 | Отредактировано: Aksyonov - 8 сентября 2018, 06:08



937
Есть маза )) В общем Всем привет такое дело, эм... если в отношениях NPC с ГГ выставлено Ally по умолчанию будет ли работать скрипт Djiro.StartCombat(game.GetPlayer()) - где Djiro это Npc который должен атаковать гг, почему этого не происходит? Как заставить аттаковать Npc гг невзирая на всё происходящие в мире, то есть где бы то ни был NPC - пошел и начал атаковать ГГ - почему не работает Djiro.StartCombat(game.GetPlayer()) ? Вешаю скрипт начала боя на диалоги квеста.

Добавлено (08 Сентября 2018, 10:15)
---------------------------------------------

Цитата Нарада

Это поможет решить проблему:Event OnActivate(ObjectReference akActionRef)
Game.FastTravel(Marker)
EndEvent

Что касается "СОС", то это тестовая функция.


Спасибо попробую, надеюсь всё заработает.

Dirzi  Offline  Сообщение №2689 написано: 8 сентября 2018, 08:27



54
Добрый день.
Подскажите, пожалуйста, есть ли какой-либо способ выводить на экран надпись, имитирующую сообщение об открытии (первом посещении) локации, то есть не по центру с паузой (как в случае с Message Box), и не в верхнем левом углу мелким шрифтом, а именно так, как выглядит в игре срабатывание MapMarker'а. 
Предвидя вопрос "А зачем это, если есть MapMarker?", поясню: как выяснилось, MM работает только в exterior. Хорошо бы, если при посещении отдельных залов и комнат interior-локации появлялись их названия.
Заранее благодарна.

"Не сломано - не чини!"
StanislavD  Offline  Сообщение №2690 написано: 8 сентября 2018, 08:27 | Отредактировано: ApeX - 8 сентября 2018, 19:08



123
приветствую!

нужен скрипт чтобы отслеживать состояние PortGatePole02 - пика выдвинута, пика убрана...
нужен скрипт чтобы отслеживать состояние TrapLinker - прошла активация через него или нет...
Перемещено в соответствующую тему.
ApeX

Andrey059918  Offline  Сообщение №2691 написано: 10 сентября 2018, 20:53



5
Дарова всем
Можно ли открыть меню контейнера, но так, чтобы вместо вкладки Игрока была вкладка другого контейнера?
То есть нужен обмен предметами между двумя контейнерами
Уже 3 день ищу инфу, и в репозитори SkyUI был, и creationkit.com весь излазил - либо я не умею искать, либо это не реализуемо
Помогите чем-нибудь, если можете

Dirzi  Offline  Сообщение №2692 написано: 12 сентября 2018, 23:18



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


Допустим, я создала свое собственное заклинание. Каким образом можно его добавить в этот скрипт?

"Не сломано - не чини!"
Dsion  Offline  Сообщение №2693 написано: 13 сентября 2018, 05:48 | Отредактировано: Dsion - 13 сентября 2018, 05:50



Цитата Dirzi

в стандартном скрипте TrapFlamethrower


В общем-то, этот скрипт не поддерживает добавление новых заклинаний. Во всяком случае, без изменения кода скрипта, а менять ванильные скрипты - плохой тон.
Можно попробовать два варианта:
1. Заменить одно из заклинаний с скрипте на своё (для одной конкретной ловушки или для нового типа ловушек). Например, выбираем "2 = flames". И вставляем своё заклинание в проперти sLvlFlames1, sLvlFlames2, ..., sLvlFlames6. В иделе, должно быть шесть разных заклинаний разной силы. Но можно заполнить и одинаковым. При этом всём, если ваше заклинание имеет тип chanelling, то нужно заменять заклинание типа chanelling (2, 5 ил 7), а если мгновенное, то одно из мгновенных.
2. Сделать новый скрипт. Либо с нуля, либо постепенно выпиливая лишнее из TrapFlamethrower. Я бы так и сделал... Могу даже попробовать, но проблема в том, что я сейчас торчу в деревне с ноутбуком, на котором нет скайрима. Я не смогу проверить даже то, компилируется ли скрипт, не говоря уже о его работоспособности.

Dirzi  Offline  Сообщение №2694 написано: 13 сентября 2018, 07:49 | Отредактировано: Dirzi - 13 сентября 2018, 08:02



54
Цитата Dsion

Могу даже попробовать, но проблема в том, что я сейчас торчу в деревне с ноутбуком...

Сочувствую вашему положение и благодарна вам за предложение. Но сперва попробую сама - и, как я писала выше, в первую очередь именно вариант с измененной копией скрипта. Каждый раз помогать вы вряд ли сможете (даже если и захотите), а учить Papyrus все равно придется...
Вот если не справлюсь - обращусь с челобитной.
В любом случае, большое вам спасибо за ответ! Да примет вас городская жизнь в свои достойные объятия;)

"Не сломано - не чини!"
Dsion  Offline  Сообщение №2695 написано: 13 сентября 2018, 09:00 | Отредактировано: Dsion - 13 сентября 2018, 09:05



Цитата Dirzi

И я так понимаю, создавать и вставлять надо, к примеру, не Frostbite, а TrapFrostbite01, TrapFrostbite02... и так далее, до TrapFrostbite06?

Я даже не могу проверить, чем заполнены sLvlFlames1 итп. в ванильных ловушках. Подозреваю, что да, там разные spell разной мощности и, ясное дело, с разным названием. Но, теоретически, можно заполнить одинаковым любым spell. Если делать по-первому варианту, то:
1. Находим ванильную ловушку с этим скриптом.
2. Создаем её дубликат.
3. На скрипте дубликата очищаем 6 проперти типа sLvlFlamesX, заполненные какими-то заклинанием, и заполняем их одним своим.
4. Устанавливаем дубликат на пути какого-нибудь мирного путешествинника где-то и заходим в него.
А если создавать свой скрипт и учить папирус, то TrapFlamethrower - не лучший референс... На мой взгляд, он безосновательно запутан и усложнен. Если тебе нужно только одно заклинание одного уровня, то скрипт получится раз в 6 короче.
Ну давай, удачки.

Dirzi  Offline  Сообщение №2696 написано: 13 сентября 2018, 09:41 | Отредактировано: Dirzi - 13 сентября 2018, 09:43



54
Цитата Dsion

Если тебе нужно только одно заклинание одного уровня, то скрипт получится раз в 6 короче.

Возможно. Даже, я бы сказала - скорее всего, вы правы.  Но редактировать готовый скрипт (при условии, что писать свои скрипты не умеешь, но в принципе понимаешь что такое язык программирования) чаще куда быстрее. Доводить свое жилище до ума, оптимизировать все до блеска и плеска буду позже; прежде нужно в принципе определить доступные возможности - ведь они влияют на функциональные объекты в interior, а через них и на саму архитектуру помещения

Еще раз мои вам благодарности. К сожалению, повышать репутацию можно лишь раз в сутки:(

"Не сломано - не чини!"
Dsion  Offline  Сообщение №2697 написано: 13 сентября 2018, 10:25



Цитата Dirzi

в Blender'е придется разбираться


Достойная трата времени...
Я где-то месяц назад начал учиться рисовать мангу и постоянно подглядываю в Blender'e, как идут линии и ложатся тени. Моделировать тоже учился, но дальше уровня "начинающего" так и не продвинулся.
Ладненько, удачи.

Если редактировать скрипт, то можно было бы убрать флаг "hidden" с проперти magicWeapon, заполнить её нужным заклинанием и выпилить строчку "magicWeapon = lvlWeapon" из конца функции ResolveLeveledWeapon(). Но это минимум. А вообще, там 5/6 кода можно выпилить.

Dsion  Offline  Сообщение №2698 написано: 13 сентября 2018, 14:18



Цитата Dsion

1. ... Заменить одно из заклинаний с скрипте на своё (для одной конкретной ловушки или для нового типа ловушек). Например, выбираем "2 = flames". И вставляем своё заклинание в проперти sLvlFlames1, sLvlFlames2, ..., sLvlFlames6. В иделе, должно быть шесть разных заклинаний разной силы. Но можно заполнить и одинаковым


Для кого я вообще эту хрень писал?(
А дальше я еще писал, что вариант это не изящный и лучше сделать свой скрипт...

Dirzi  Offline  Сообщение №2699 написано: 13 сентября 2018, 14:32 | Отредактировано: Dirzi - 13 сентября 2018, 14:40



54
Если честно, я ваши слова:

Цитата Dsion

... Заменить одно из заклинаний в скрипте на своё

...поняла как "заменить непосредственно в тексте скрипта". Возможно, моя неопытность в терминологии скриптинга/моддинга и не извиняет меня в достаточной степени, но вы, мягко говоря, горячитесь избыточно. Если вас так волнует вопрос приоритета решения - я удалю свой предыдущий комментарий.

"Не сломано - не чини!"
Andrey059918  Offline  Сообщение №2700 написано: 14 сентября 2018, 15:11



5
Пока читал эту тему, заметил несколько сообщений насчёт кракозябр при вызове GetName() из SKSE
Модеры, может стоит добавить в шапку темы, что нужен SKSE Russian Fix?
(Кстати, что-то я его не нашел на ModGames.net)

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





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