Модератор форума: 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? Пиши не в ЛС, а в эту тему.
Dsion  Offline  Сообщение №1261 написано: 3 октября 2014, 12:11



Это ты так мягко намекаешь, что я сам придумал команды startquest и stopquest? :) Ну спасибо!

Myprism  Offline  Сообщение №1262 написано: 4 октября 2014, 02:54


Физик


Цитата anton

а setstage однозначно мой квест не запускает

Тоже столкнулся с таким. Такая команда в моём квесте отказалась запускать ванильный. Причём, именно с моими квестами таких проблем не было. Безуспешно пытался найти разницу и отказался от этого запуска, благо он и не очень был нужен. Дополнительные команды типа startquest мне там не помогали.

anton  Offline  Сообщение №1263 написано: 4 октября 2014, 08:53



362
Dsion, не не не, ничего такого :) , сами команды есть (я уже проверил), просто на том сайте где я смотрел они почему то небыли задокументированы.

Myprism, а у меня наоборот, мой квест не запускается ни через startquest ни через setstage. Что меня очень радует, так как это мне и нужно !
(наверное старта нету из за условий запуска квеста, прописанных в SM Event Node)

Мой Блог
mxac  Offline  Сообщение №1264 написано: 4 октября 2014, 18:44



178
Ребят, подскажите скрипт запуска квеста каждый определённый день недели =) Я так понял надо 2 квеста, 1 постоянный будет отслеживать день недели и запускать 2-й квест...


Multigone  Offline  Сообщение №1265 написано: 4 октября 2014, 22:07



832
mxac, как есть.



Иероним  Offline  Сообщение №1266 написано: 8 октября 2014, 11:49



770
Очень нужно чтобы создание персонажа при начале новой игры происходило в строго обозначенном мною месте, в новой локации то бишь. Попытки найти скрипт или нечто подобное в других модах результата мне не дало (Не нашёл короче говоря).

Dsion  Offline  Сообщение №1267 написано: 8 октября 2014, 14:28



Цитата Иероним

Очень нужно чтобы создание персонажа при начале новой игры происходило в строго обозначенном мною месте, в новой локации то бишь. Попытки найти скрипт или нечто подобное в других модах результата мне не дало (Не нашёл короче говоря).


По-моему, игрок вообще нигде не появляется, если не использовать на нем MoveTo.
В одном из первых скриптов главного квеста, есть строчка, которая перемещает игрока на стартовую позицию. Если эту строчку закомментировать, то игра вообще не начинается.

Иероним  Offline  Сообщение №1268 написано: 8 октября 2014, 16:12



770
Dsion, То есть скрипт появления игрока вшит главный в квест? В идеале мне бы задать место старта и чтобы никакие квесты не начинались.

Dsion  Offline  Сообщение №1269 написано: 8 октября 2014, 16:25



Не так, чтоб "вшит"... На одной из стадий игрока просто одевают в одежду заключенного и перемещают на стартовую позицию.
Тебе, наверное, нужно:
1) Предотвратить запуск главного квеста.
2) Сделать свой квест, который будет перемещать игрока в нужную тебе позицию.
3) На каком-то этапе запустить таки главный квест, но не с начала, а с той стадии, которая тебе нужна.

Иероним  Offline  Сообщение №1270 написано: 8 октября 2014, 16:41



770
Цитата Dsion

1) Предотвратить запуск главного квеста. 2) Сделать свой квест, который будет перемещать игрока в нужную тебе позицию.
3) На каком-то этапе запустить таки главный квест, но не с начала, а с той стадии, которая тебе нужна.


Ой ёй, звучит страшно для меня. Попробую что-нибудь сделать.

Dsion  Offline  Сообщение №1271 написано: 8 октября 2014, 17:14 | Отредактировано: Dsion - 8 октября 2014, 17:15



Можно сделать ini файл с таким же именем, как твой мод. Например, lexmod.ini для lexmod.esp, а в нем прописать:
Код
[General]sCharGenQuest=0
тогда главный квест не запустится и игрок нигде не появится.

А потом можно создать свой квест, который будет запускаться сразу и перемещать игрока туда, куда тебе нужно:
Код
Actor Property PlayerRef Auto
ObjectReference Property StartMarker Auto

Event OnInit()
          PlayerRef.MoveTo(StartMarker)
EndEvent


Если вариант с отключением главного квеста через ini не подходит, можно еще отредактировать стадию 0 на главном квесте (MQ101), чтоб она останавливала ванильный квест и запускала твой.
Я оба варианта проверил.

Добавлено (08 Октября 2014, 21:14)
---------------------------------------------
После [General]там новая линия начинается. Не знаю, почему чертов форум не дает её поставить.

Multigone  Offline  Сообщение №1272 написано: 8 октября 2014, 17:32 | Отредактировано: Multigone - 8 октября 2014, 17:39



832
Dsion, наверное, это знаешь ты один:

Есть алиас игрока с событиями...


Игрок последовательно создает 2 заклинания и интервалом 0.5 секунд. Событие обновления произойдет тоже дважды? Или оно произойдет один раз через (0.5 + 1) секунд после создания первого заклинания? Этот момент мне не совсем ясен.

Просто если второй вариант, значение глобальной будет ломаться полностью.
Вариант с Utility.Wait(1.0) мне не подходит, т.к. после MyGLOB.Mod(100.0) будет еще объемный кусок кода (его необходимо выполнить, не ожидая), который добавит к этой секунде доп. время, затраченное на расчеты. А мне нужно, чтобы значение глобальной менялось строго на 1.0 секунд реального времени.

Dsion  Offline  Сообщение №1273 написано: 8 октября 2014, 17:51



На creationkit.com написано вот такое:
Subsequent calls to ResisterForSingleUpdate will override previous ones - i.e. calling it back to back will result in the second registered
update occurring, but not the first. It will not interfere with updates
started by RegisterForUpdate however.

То есть, вторая регистрация полностью выбивает первую. По идее, событие сработает через секунду после второго каста...

Multigone  Offline  Сообщение №1274 написано: 8 октября 2014, 17:57



832
Dsion, что ж, я этого и боялся. Хорошо, спасибо. Буду думать, как все это разрулить.

Amiball1992  Offline  Сообщение №1275 написано: 9 октября 2014, 16:31



23
Ребята, хочу создать магический эффект, который скриптом вешается на игрока. Так вот, нужен такой эффект, который НЕ БУДЕТ позволять ГГ пользоваться криками и магией. Тоесть они будут не активны, ну или что то типа такого. Это вообще возможно реализовать?

Myprism  Offline  Сообщение №1276 написано: 14 октября 2014, 07:14


Физик


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

Multigone  Offline  Сообщение №1277 написано: 14 октября 2014, 12:13



832
Myprism, в исходнике Race.pcs нет такой функции. Можно оперировать только флагами, расположенными во вкладке "General Data".

Sovetski  Offline  Сообщение №1278 написано: 23 октября 2014, 14:41



46
Ребят помогите у меня есть кольцо которое души драконов превращает в перки. Но с проходом времени золота становиться столько что кажется ты и императора купить можешь как дописать выбор-за души или золото? Это чисто для себя.
Ещо интересно а можно сделать покупку стотов типа здоровья-манны и запас сил?

Dsion  Offline  Сообщение №1279 написано: 23 октября 2014, 15:01



Зачем заморачиваться? Раз уж ты забил на честность и решил читерить, просто установи себе 100000 хп, маны и выносливости через консоль. И добавь все перки.

Добавлено (23 Октября 2014, 19:01)
---------------------------------------------
Можно еще завершить все квесты через консоль... Ну чтоб хвалиться, что прошел Скайрим.


Sovetski  Offline  Сообщение №1280 написано: 23 октября 2014, 16:05



46
Читерить это одно а за честно заработанное золото покупать это совсем другое!
Тем более что игру уже 4-ый раз прохожу можно и облегчить.

Kepper  Offline  Сообщение №1281 написано: 23 октября 2014, 18:31



860
Надо вычислить сколько было затрачено маны пока игрок применял произвольное заклинание с типом Концентрация.
Никак не могу сообразить как это провернуть, не изменяя все заклинания на концентрацию(мало ли какие модовские заклинания установлю).

Есть событие OnSpellCast.
С его помощью я узнаю стоимость заклинаний типа Fire and Fogot.
Но для заклинаний с типом концентрация выдает только стоимость 1 секунды, а не всего периода работы заклинания.

Sovetski, самый простой вариант: сделать зелье Poton, к нему прицепить MagicEffect с таким скриптом.
Scriptname AddHeal Extends ActivemagicEffect
Event OnEffectStart(Actor akTarget, Actor akCaster)
akTarget.ModActorValue("Health", 10.0)
EndEvent
И дать это зелье торговцу.
Для повышения маны и выносливости замени в скрипте Health на Magicka или Stamina

Multigone  Offline  Сообщение №1282 написано: 23 октября 2014, 19:42 | Отредактировано: Multigone - 23 октября 2014, 19:16



832
Sovetski, вот скрипт, его нужно прицепить к своему кольцу. Какой у тебя был до этого способ, я без понятия, поэтому лучше создай новое кольцо. Или прицепи к тому самому кольцу, предварительно удалив у него скрипт, ответственный за предыдущий способ получения очков способностей.




Как должно выглядеть сообщение:



Как создать скрипт и заполнить его Property?

Как будет в игре: при экипировании кольца появится окно с сообщением и вариантами выбора. Варианты доступны, если игрок имеет золото или души больше, чем указано. После выбора одного из вариантов добавляется 1 ед. очков способностей и удаляются души / золото. Нужен тест.
Все.

Добавлено (23 Октября 2014, 23:42)
---------------------------------------------
Kepper, попробуй так:


Суть ™ - кол-во затраченной маны определяется по разнице между значениями маны в начале каста и в конце. Недостатки: возможна некорректное  определение результата, если в процессе каста с одной руки референс-алиас вдруг вздумает кастовать со второй (ну и так далее). По-идее, для каждого типа каста (с одной, с другой или с обеих) нужно делать свои расчеты.
Во всяком случае, для этого способа никакого SKSE не нужно.

Dsion  Offline  Сообщение №1283 написано: 23 октября 2014, 20:31



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

Но предложить нечего... Можно сделать функцию аналогичную ивенту OnSpellCast, но которая будет вызываться каждую секунду пока персонаж колдует. Но это не надежно и данные получатся только приблизительные...

Добавлено (24 Октября 2014, 00:31)
---------------------------------------------
Вспомнил еще про знак атронаха и перк "Ward Absorb", которые тоже запросто могут добавить ману в процессе каста...


Multigone  Offline  Сообщение №1284 написано: 23 октября 2014, 20:36 | Отредактировано: Multigone - 23 октября 2014, 20:37



832
Dsion, ну да. Как вариант: используя СКСЕ, считать расход через цену каста Х время каста.

В том примере:
fTime += 0.2

Sovetski  Offline  Сообщение №1285 написано: 23 октября 2014, 20:55



46
Всем спасибо за ответы будем пробовать! good

Добавлено (24 Октября 2014, 00:55)
---------------------------------------------
Multigone
Большое спасибо за подробное разьяснение


Multigone  Offline  Сообщение №1286 написано: 23 октября 2014, 21:18



832
Sovetski, не за что :) .

Dsion, кстати, я с помощью этого метода сделал то, что не удавалось долгое время - замутил заклинание "огненный барьер" из Dungeon Siege 3. Его описание: поглощает суммарный урон в размере 75% здоровья заклинателя, после чего взрывается и прочее. Как сосчитать полученный урон? Вот только таким образом.

А вот и сам скрипт (он несовершенен, писал давно):



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

Kepper  Offline  Сообщение №1287 написано: 31 октября 2014, 16:16



860
MultigoneDsion, спасибо за наводку.
Вариант с СКСЕ и подсчётом времени с помощью EVENT OnUpdate() будет оптимальным.

Добавлено (31 Октября 2014, 19:16)
---------------------------------------------
Никак не могу забороть кракозябры в выводимом сообщении.
Такое сообщение выводится в читаемом виде:
Debug.MessageBox("Компаньон предпочитает носить обувь на каблуках") (кодировка UTF-8)

Но хочется сделать покрасивее чтобы подставлялось имя актёра.
Debug.MessageBox(tgActor.GetLeveledActorBase().GetName() + " предпочитает носить обувь на каблуках")
На выходе же получаю нормальное имя НПС и кракозябры.

Пробовал кодировки ANSI KOIU8-R.


Amiball1992  Offline  Сообщение №1288 написано: 6 ноября 2014, 18:56



23
Столкнулся с такой проблемой - как мне создать обычный xmarker под ногами ГГ, что бы тот, смог телепортироваться в него обратно? Тоесть не в него а на его месторасположение? Скажем так - "метка возврата".

Dsion  Offline  Сообщение №1289 написано: 6 ноября 2014, 19:01 | Отредактировано: Dsion - 6 ноября 2014, 19:02



Создать что-то:
ObjectReference MarkerRef = PlayerRef.PlaceAtMe(XMarker)

Но если что-то создал, нужно не забыть удалить. Тебе это действительно надо? Можно ведь просто сохранить координаты игрока, а потом его туда перемещать методом SetPosition.
Или хоть не создавать новый маркер каждый раз, а создать один единственный и перемещать его.

Amiball1992  Offline  Сообщение №1290 написано: 6 ноября 2014, 20:39



23
Dsion, да мне нужно, что бы игрок к примеру на стадии квеста 10 перемещался по нужному мне маркеру, неважно откуда, а потом, к примеру, сос тадии 20 премещался обратно на то же место, где и был в момент 10 стадии.

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





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