Модератор форума: 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? Пиши не в ЛС, а в эту тему.
Raser0919  Offline  Сообщение №301 написано: 12 июля 2013, 19:08



409
Вопрос. Как в скрипте определить столкновение коллизий игрока и объекта(стены, дерева, НПС и т.д.)

Arin  Offline  Сообщение №302 написано: 13 июля 2013, 05:32



570
Использовала скрипт для добавления благословения при погружении в воду, но ничего не происходит. Персонаж заходит в воду, плавает, вылезает - и ничего... Видимо, я что-то не то делаю.

Scriptname aaaPomestieOchishenie extends ObjectReference  
Spell Property TempleBlessing  Auto
Message Property BlessingMessage  Auto
Message Property AltarRemoveMsg  Auto  
 
Event OnTrigger (ObjectReference akActionRef)
    if akActionRef == Game.GetPlayer()
        TempleBlessing.Cast(akActionRef, akActionRef)
        AltarRemoveMsg.Show()
        BlessingMessage.Show()
    endif

EndEvent

Скрипт прикрепила к воде.

Наука всегда оказывается не права. Она не в состоянии решить ни одного вопроса, не поставив при этом десятка новых.
Джордж Бернард Шоу
Иsкатель  Offline  Сообщение №303 написано: 13 июля 2013, 07:52



71
Arin, замени эту строчку:
Event OnTrigger (ObjectReference akActionRef) 
на эту:
Event OnTriggerEnter(ObjectReference akActionRef)

Arin  Offline  Сообщение №304 написано: 13 июля 2013, 08:26 | Отредактировано: Arin - 13 июля 2013, 08:27



570
Цитата Иsкатель

Arin, замени эту строчку:Event OnTrigger (ObjectReference akActionRef)
на эту:
Event OnTriggerEnter(ObjectReference akActionRef)

Не помогло... Он даже сообщение не выводит.

Наука всегда оказывается не права. Она не в состоянии решить ни одного вопроса, не поставив при этом десятка новых.
Джордж Бернард Шоу
Иsкатель  Offline  Сообщение №305 написано: 13 июля 2013, 08:31



71
А для вот этих Property:
Spell Property TempleBlessing  Auto 
Message Property BlessingMessage  Auto 
Message Property AltarRemoveMsg  Auto

назначила объекты?

Arin  Offline  Сообщение №306 написано: 13 июля 2013, 08:46



570
Цитата Иsкатель

А для вот этих Property:Spell Property TempleBlessing Auto
Message Property BlessingMessage Auto
Message Property AltarRemoveMsg Auto

назначила объекты?


Да.Заклинание использовала из тех, которые кастуются на себя.

Наука всегда оказывается не права. Она не в состоянии решить ни одного вопроса, не поставив при этом десятка новых.
Джордж Бернард Шоу
AleksTirex  Offline  Сообщение №307 написано: 13 июля 2013, 10:46


Архимаг


371
Цитата Arin

Не помогло... Он даже сообщение не выводит.



И не поможет. На воде не может сработать событие триггера.
 
В разделе "Активаторы" создаёшь активатор со своим скриптом, меши назначать не надо. Потом тыркаешь по своей воде и нажимаешь кнопочку "Create Trigger" (кубик с буковкой "Т" по центру), появится список, в нём выбирай свой активатор, ОК. На месте воды появится красненький плоский "кубик", чтобы он стал объёмным в графе Primitive выставь размер Z как тебе нужно. Тогда в размер твоей воды будет триг.зона со скриптом, в которой всё это будет работать.

Arin  Offline  Сообщение №308 написано: 13 июля 2013, 10:54



570
Цитата AleksTirex

В разделе "Активаторы" создаёшь активатор со своим скриптом, меши назначать не надо. Потом тыркаешь по своей воде и нажимаешь кнопочку "Create Trigger" (кубик с буковкой "Т" по центру), появится список, в нём выбирай свой активатор, ОК. На месте воды появится красненький плоский "кубик", чтобы он стал объёмным в графе Primitive выставь размер Z как тебе нужно. Тогда в размер твоей воды будет триг.зона со скриптом, в которой всё это будет работать.



Блин Х( А я как дура два часа учила английский с помощью сайта по Папирусу и гугла-переводчика...

Наука всегда оказывается не права. Она не в состоянии решить ни одного вопроса, не поставив при этом десятка новых.
Джордж Бернард Шоу
Aresnir  Offline  Сообщение №309 написано: 17 июля 2013, 14:19 | Отредактировано: Aresnir - 17 июля 2013, 15:09



32
Я новичок в скриптах. Подскажите, пожалуйста, простой скрипт, добавляющий заклинание "Обнаружение Жизни", когда игрок одевает соответствующий предмет брони, и снимающий заклинание, когда предмет не используется?
Сам разобрался, с помощью друга.

Изменю вопрос - как с помощью скрипта добавить к этой же броня способность "бинокля" как у луков и другого оружия?

PaukSama  Offline  Сообщение №310 написано: 17 июля 2013, 15:09


Прячущий свое сердце


Aresnir, кушай пока горяченький. Надеюсь не надо объяснять как твое заклинание назначить свойству LifeDetect 

Scriptname AmuletScript extends ObjectReference

Spell property LifeDetect auto

Event OnEquipped(Actor akActor)
if akActor == Game.GetPlayer()
akActor.AddSpell (LifeDetect)
endif
endevent

Event OnUnequipped(Actor akActor)
if akActor == Game.GetPlayer()
akActor.RemoveSpell (LifeDetect)
endif
endevent

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
Aresnir  Offline  Сообщение №311 написано: 17 июля 2013, 15:12



32
Цитата PaukSama

Aresnir, кушай пока горяченький. Надеюсь не надо объяснять как твое заклинание назначить свойству LifeDetect Scriptname AmuletScript extends ObjectReference

Spell property LifeDetect auto

Event OnEquipped(Actor akActor)
if akActor == Game.GetPlayer()
akActor.AddSpell (LifeDetect)
endif
endevent

Event OnUnequipped(Actor akActor)
if akActor == Game.GetPlayer()
akActor.RemoveSpell (LifeDetect)
endif
endevent

Спасибо за помощь! Но я уже сам разобрался и написал свой скрипт:

Scriptname AkakuXRayVision extends ObjectReference
 
SPELL property BioMaskSpell auto

Event OnEquipped(Actor akActor)
Game.GetPlayer().AddSpell(BioMaskSpell)
EndEvent

Event onUnequipped(Actor akAktor)
Game.GetPlayer().RemoveSpell(BioMaskSpell)
EndEvent

Пока еще не проверял в игре, в редакторе ошибок нет, но обязательны ли дополнительные условия, которые вы написали?

PaukSama  Offline  Сообщение №312 написано: 17 июля 2013, 15:19


Прячущий свое сердце


Цитата Aresnir

Пока еще не проверял в игре, в редакторе ошибок нет, но обязательны ли дополнительные условия, которые вы написали?

да в общем не обязательны, твой вариант вполне рабочий можешь ничего больше не добавлять.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
VALKNUT  Offline  Сообщение №313 написано: 17 июля 2013, 17:02



Цитата Aresnir

Event OnEquipped(Actor akActor)

Дружище, а если мне нужно при напяливании предмета выполнить некоторые условия для НПС? (если не трудно)
Смысл в следующем. НПС экипируется чем-то и к нему применяются некоторые условия, а если снимает с себя, то соответственно убирается "ништяк"...
"Actor.akActor" не прокатило...

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
PaukSama  Offline  Сообщение №314 написано: 17 июля 2013, 17:21


Прячущий свое сердце


VALKNUT, Actor.akActor это вообще не условия это выражаясь по простому - исполнитель действия. Если событие хочешь сделать с условием применяй приставку if (она в принципе и означает "Если"). Вроде я правильно вопрос понял да

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
Artem13  Offline  Сообщение №315 написано: 17 июля 2013, 17:23


Mercenaries. Со смертью на ты.


Цитата VALKNUT

"Actor.akActor" не прокатило...

Правильно должно быть  "Actor akActor".

<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a>
Да, мы бандиты и бродяги, как злословит молва,
Мы попадаем в передряги, помня эти слова.
Смотри вперед и не сдавайся ты на милость судьбе!
Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
VALKNUT  Offline  Сообщение №316 написано: 17 июля 2013, 20:12



Цитата PaukSama

Actor.akActor это вообще не условия это выражаясь по простому - исполнитель действия. Если событие хочешь сделать с условием применяй приставку if

А можно на примере?
Допустим простейший вариант... Дал НПС колечко - НПС получил фракцию фолловер...

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
slastik  Offline  Сообщение №317 написано: 18 июля 2013, 01:10


Жаждущий


209
Цитата VALKNUT

Допустим простейший вариант... Дал НПС колечко - НПС получил фракцию фолловер...

Ну так а условие какое? Если вам нужно фракцию добавить, то просто AddSpell заменяете на AddToFaction, а RemoveSpell на RemoveFromFaction. Ну и в Property, конечно, меняете Spell на Faction. Условие - это когда функция срабатывает если ..... Например, заклинание добавляется если актер в снике. Тогда указываете If Game.GetPlayer.IsSneaking и дальше функцию, а в конце EndIf.

- Что это за горы стоят?
- А, это орки бегут!
VALKNUT  Offline  Сообщение №318 написано: 18 июля 2013, 03:54



Цитата slastik

Ну так а условие какое?

Экипировано колечко/шлем/бусики(да что угодно) или не экипировано... у НПС.

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
alexwar  Offline  Сообщение №319 написано: 18 июля 2013, 05:54 | Отредактировано: alexwar - 18 июля 2013, 05:54


Freelancer - White Raven


VALKNUT, создай спел и проверяй в спеле ключевые слова

смотри в личке подробней


Мой блог-VIDEO-ALEXWAR
The Elder Scrolls Online
PaukSama  Offline  Сообщение №320 написано: 18 июля 2013, 06:26


Прячущий свое сердце


VALKNUT, ты определись уже. Сначала ты хочешь вроде как событие экипировки после которого дают фракцию. А потом тебе нужно условие экипировки, выполнив которое игрок получит фракцию(То есть событие будет другое?)
Ну в общем отсюда два варианта. Вот например если ты хочешь условие при событии(например игрок активировал какой нибудь объект, алтарь там или че, то при условии что на нем одето кольцо он получит свою фракцию)

Faction property Fact auto
Armor property Prop auto

Event OnActivate(ObjectReference akActionRef)
If akActionRef == game.getplayer()
if game.getplayer().Equipitem(Prop)
game.getplayer().AddToFaction(Fact)
endif
endif
EndEvent

А вот так - событие без условия(как только игрок одел кольцо - получил фракцию)

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

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
VALKNUT  Offline  Сообщение №321 написано: 18 июля 2013, 06:55



Цитата PaukSama

VALKNUT, ты определись уже. Сначала ты хочешь вроде как событие экипировки после которого дают фракцию. А потом тебе нужно условие экипировки, выполнив которое игрок получит фракцию(То есть событие будет другое?)

Я не говорил о ГГ.. я говорил о НПС, которому я дал что-то и он получил нужную мне фракцию.. как-то так..

Благодарю за помощь, кстати!

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
PaukSama  Offline  Сообщение №322 написано: 18 июля 2013, 06:59 | Отредактировано: PaukSama - 18 июля 2013, 07:04


Прячущий свое сердце


VALKNUT, а ну тогда по другому, вместо game.getplayer() нужно использовать нпс, правда не совсем понимаю зачем тогда тут условие экипировки. Событие предмет экипирован, актер - твой нпс, и все дальнейшие следствия события действует на нем, вроде должно получиться.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
VALKNUT  Offline  Сообщение №323 написано: 18 июля 2013, 07:06



Цитата PaukSama

а ну тогда по другому, вместо game.getplayer() нужно использовать нпс, правда не совсем понимаю зачем тогда тут условие экипировки. Событие предмет экипирован, актер - твой нпс, и все дальнейшие следствия события действует на нем, вроде должно получиться.

По этому мне и нужно, чтоб это был "Actor akActor"(ну или как-то так), то есть любой НПС, получивший предмет, а не явно указанный..

Кто к нам с чем и за чем, тот от того и того... ʘ_ʘ
<a class="link" href="http://modgames.net/load/0-0-200451-0-17" rel="nofollow" target="_blank"> border="0" alt=""/</a>
PaukSama  Offline  Сообщение №324 написано: 18 июля 2013, 07:15 | Отредактировано: PaukSama - 18 июля 2013, 07:23


Прячущий свое сердце


VALKNUT, тогда просто не нужно условие. Просто пишешь Actor или akActor или akActionRef или что там у тебя в событии есть. Этот самый Actor и будет любым нпс или игроком. Точнее тем кто совершил событие.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
Aresnir  Offline  Сообщение №325 написано: 18 июля 2013, 16:49



32
Цитата PaukSama

да в общем не обязательны, твой вариант вполне рабочий можешь ничего больше не добавлять.

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

Я попробовал так:
Код
Scriptname AkakuXRayVision extends ObjectReference  
   
SPELL property BioMaskSpell auto

Event OnEquipped(Actor akActor)
Game.GetPlayer().AddSpell(BioMaskSpell)
Game.GetPlayer().EquipSpell(BioMaskSpell)  
EndEvent

Event onUnequipped(Actor akAktor)
Game.GetPlayer().RemoveSpell(BioMaskSpell)
EndEvent

Но в редакторе этот скрипт не прошел компиляцию (то есть он не правильный).

PaukSama  Offline  Сообщение №326 написано: 18 июля 2013, 17:50


Прячущий свое сердце


Цитата Aresnir

Но в редакторе этот скрипт не прошел компиляцию (то есть он не правильный).

Game.GetPlayer().EquipSpell(BioMaskSpell, 1) 
надо вот так, я не помню вроде цифра отвечает за количество экипировки то есть в одну или две руки, поэксперементируй, хотя для таланта разницы нет.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
Aresnir  Offline  Сообщение №327 написано: 18 июля 2013, 18:05



32
Цитата PaukSama

Game.GetPlayer().EquipSpell(BioMaskSpell, 1) надо вот так, я не помню вроде цифра отвечает за количество экипировки то есть в одну или две руки, поэксперементируй, хотя для таланта разницы нет.

Спасибо, теперь работает.

А у меня еще такой сложный вопрос (не только к PaukSama) - возможно ли создать такое заклинание со скриптом, чтобы все статичные объекты вокруг игрока (стены, дома, камни и скалы) на время стали бы полу-прозрачными? (мне нужно сделать эффект рентгеновского зрения)

PaukSama  Offline  Сообщение №328 написано: 25 июля 2013, 17:11


Прячущий свое сердце


Мне тут для скрипта пара строк понадобилась. Никто не знает как будет выглядеть такое:
if Game.GetPlayer() обнажил оружие(боевая стойка)
Game.GetPlayer() убирает оружие

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №329 написано: 25 июля 2013, 23:24


Архимаг


371
Цитата PaukSama

Мне тут для скрипта пара строк понадобилась. Никто не знает как будет выглядеть такое:  if Game.GetPlayer() обнажил оружие(боевая стойка)  Game.GetPlayer() убирает оружие



If Game.GetPlayer().IsWeaponDrawn()
    Game.GetPlayer().SheatheWeapon() ; SKSE
EndIf

MZRNLeader  Offline  Сообщение №330 написано: 27 июля 2013, 19:02 | Отредактировано: MZRNLeader - 27 июля 2013, 20:11



6
Добрый день, ломаю голову с одним скриптом. Вообщем надо сделать так, чтобы после использывания, допустим, спела, время в игре прибавлялось на 1 час, или любое другое количество времени, было бы хорошо на рандомное количество,допустим, от одной минуты до дня. И возможно-ли привязать к этому скрипту какой-нибудь эффект, наподобие затемнения экрана.Лучше всего, чтобы скрипт подходил под Magic Effect, спасибо.

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





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