• Страница 1 из 1
  • 1
Форум » Записи участника [emelya8307]

Результаты поиска
emelya8307  Offline  Сообщение №1 | Тема: Вопросы по скриптам Papyrus написано: 10 Апрель 2020, 15:15 | Отредактировано: Multigone - 21 Апрель 2020, 23:50



22
Здравствуйте! Многие сейчас пробуют играть в Скайрим без убийств, чтобы в статистике убийств были красивые нули. Но вот беда - есть некоторые заскриптованные квестовые персонажи, их не так много, которых может убить только ГГ. Приходится убивать, и в статистике появляеся убийство.
Родилась идея мода - некий алтарь, молясь перед которым ГГ мог бы "очистить свою совесть", то есть стереть из статистики вынужденное убийство.
В консоли есть для этого команда ModMiscStat "people killed" -1
А есть ли в Папирусе подобные команды? Может кто-то исследовал этот вопрос?
Например при обращении к алтарю проходит проверка на убийство персонажа, и если персонаж был из списка заскриптованных, то статистика убийства очищается, если персонаж обычный, не Protected, то нет.

Моральная сторона меня мало волнует. Все равно противников так или иначе приходится лишать жизни - будь то кастование на них бешенства, чтобы убили другие, сбрасывание их криком ФусРоДа с высоты, заманивание в ловушки, и т.д., главное, чтобы убийство не попало в статистику игрока. Чисто спортивный интерес.
Но есть некоторые персонажи, которых может убить только Главный Герой собственными руками, иначе квест будет не пройденным. Некоторые персы так заскриптованы, совершенно необоснованно, например Диджа в квесте "Туши свет!", или Энодий Папий в квестах Темного братства.
Или другой случай - Дюрневир в Каирне душ. Его убийство записывается на игрока, даже если игрок сидел курил в сторонке во время боя.
И потом этот Дюрневир оказывается жив-здоров, его можно даже призывать в Тамриэль, а убийство в статистике остается.
Поэтому и придумал такой способ с алтарем. Ну или еще как-нибудь красиво это обыграть. Чистить консолью не хочется, и оставлять так тоже.
Я в скриптах могу самое большее написать примитивный скрипт на включение выключение или на добавление предмета и всё.
Нашел функцию в скрипте Game

Function IncrementStat(string asStatName, int aiModAmount = 1) native global

Но даже воспользоваться ею правильно у меня не хватает ума. всё, что я ни пытался написать, даже не компилируется, потому что я асолютно не понимаю, что делаю. Темный лес. javascript://
Потому и спрашиваю.

Dsion, вот я написал крохотный тестовый скриптик, повешал на переключатель в Доме теплых ветров в качестве эксперимента. Скриптик работает, убирает статистику убитых существ (у меня там висело одно убийство Дюрневира)

Код
Event OnActivate (ObjectReference akActionRef)
   If GetPlayer() == akActionRef
      IncrementStat("creatures killed", -1)
      Debug.MessageBox("Твои грехи прощены")
   endif
endEvent


Но я понимаю, что нужно как-то сделать проверку, что это было убийство именно заскриптованного актера. Внести всех таких актеров в форм-лист?
Кроме этого как то надо сделать чтобы статистика опускалась до нуля и не уходила в минус.
Я нифига не понимаю реально в этих скриптах, хотя прочел все учебники, прочел эту ветку в форуме, пересмотрел кучу чужих скриптов. В голове каша.

emelya8307  Offline  Сообщение №2 | Тема: Вопросы по скриптам Papyrus написано: 11 Апрель 2020, 04:00



22
Огромное спасибо за ответ. В принцепе стало понятно в общем, в каком направлении двигаться, но для моих познаний это реально трудно))) Может и забью, а может, на карантине делать нечего, и попробую что-то.
Щас на алиас Энодия Папия повешал скрипт на событие OnDeath, чтобы счетчик убийств щелкнул -1, в игре сработало, убийство не засчитали, но на каждого такого актера вешать скрипт тоже как то не очень.

emelya8307  Offline  Сообщение №3 | Тема: Вопросы по скриптам Papyrus написано: 11 Апрель 2020, 11:43



22
Myprism, так это и так квестовые персонажи, и они и так находятся в алиасе. и убивать их приходится по ходу квеста. Тот же Энодий появляется в игре только на время квеста "убить Энодия Папия"

emelya8307  Offline  Сообщение №4 | Тема: Вопросы по скриптам Papyrus написано: 11 Апрель 2020, 15:38



22
Я сейчас поковырялся в Creation Kit и подумал, что проще сделать esp плагин без всяких скриптов, где снять галочки Protected с алиасов этих персонажей в квестах. Попробовал на Гае Мароне, Дидже и Энодии - работает. Все же esp файл напрямую не затрагивает ваниль, мод делаю для себя, так что ну иво нафиг эти скрипты, я уже понял, что скриптер из меня никакой. Огромное спасибо за участие и помощь.

emelya8307  Offline  Сообщение №5 | Тема: Вопросы по скриптам Papyrus написано: 13 Апрель 2020, 17:52 | Отредактировано: emelya8307 - 13 Апрель 2020, 17:53



22
Dsion
Фух, возился долго, но сделал по твоему совету квест, запускающийся ивентом OnStoryKillActor, написал Скрипт (на пределе своих умственных возможностей), который при убийстве актера выводит сообщение "вы убили человека" либо "вы убили животное", по кейворду определяет, что в алиас жертвы попало. По началу срабатывал через раз, либо вообще переставал срабатывать. Потом сделал алиас на игрока, указал его как киллера, и все поехало как по маслу. Но я рано радовался, потому что идея с форм-листом не проходит. Потому что если заносить жертву в формлист, то при загрузке более раннего сохранения, получится ерунда.
Надо брать данные именно из сохранения.
Я могу менять статистику функцией IncrementStat, но я не знаю, какой функцией добыть MiscStat из игры.

emelya8307  Offline  Сообщение №6 | Тема: Вопросы по скриптам Papyrus написано: 13 Апрель 2020, 20:58



22
Dsion, это я понял. Такой способ будет работать, если очищать статистику прямо на месте убийства. А с задумкой типа алтаря уже не получится. Особенно если жертва не одна, а две или три. Эти данные где хранить? Если в каком то форм листе, то если задумаешь загрузить более раннее сохранение и переиграть по другому, а в формлисте уже 2 жертвы. Или я чего-то не понимаю?

Вообще очень интересно, особенно когда что-то начинает получаться. Да, я допер вчера, что нужно после функции писать команду Stop()

emelya8307  Offline  Сообщение №7 | Тема: Вопросы по скриптам Papyrus написано: 14 Апрель 2020, 00:06 | Отредактировано: Multigone - 21 Апрель 2020, 22:23



22
Dsion,

Нашел функцию int Function QueryStat(string asStat) native global

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

emelya8307  Offline  Сообщение №8 | Тема: Вопросы по скриптам Papyrus написано: 17 Апрель 2020, 00:34 | Отредактировано: Multigone - 21 Апрель 2020, 21:56



22
Dsion, еще один вопрос можно? Вот я создал квест, запускающийся при убийстве актера. Написал скрипт (ух как долго бился)При убийстве выходит сообщение "Вы убили человека" или "Вы убили животное" или "Вы убили нежить". Проверяется по кейворду ActorType... скриптовых персонажей забил в формлист и они отправляются в GlobalVariable, вобщем всё работает))
Но блин, убийство КУРИЦЫ не высвечивается на экране, хотя в статистику попадает, как убийство животного. У курицы Кейворд ActorTypeAnimal , как и у остальных животных. Не подскажешь тупому, почему не появляется сообщение?
(Эти сообщения мне необходимы, чтобы вовремя заметить убийство, так как я играю прохождение без убийств).

emelya8307  Offline  Сообщение №9 | Тема: Вопросы по скриптам Papyrus написано: 18 Апрель 2020, 22:08 | Отредактировано: Multigone - 21 Апрель 2020, 21:54



22
Цитата yakor77

Емеля, если Вы в Яндексе погуглите "Скайрим Курица", то в первой же статье прочтёте вот такое примечание.


Нет, просто у курицы, оказывается, стоит флаг "Simple Actor", а это значт в том числе, что "Also disables the Story Manager's Death and Assault events".

То есть убийство курицы, как я понял, отключено в ивентах Story Manager, а у меня как раз этот квест построен на событии OnStoryKillActor, Стори Менеджер просто его не фиксирует. А как фиксировать я не знаю, я всего лишь третью неделю изучаю скрипты и квесты.

emelya8307  Offline  Сообщение №10 | Тема: Вопросы по скриптам Papyrus написано: 28 Апрель 2020, 01:46



22
Уважаемые скриптеры. Хочу сделать, чтобы в сообщениях квеста отображалось количество убитых определенных персонажей. В игровых квестах это делается через тег <Global=MyGlobal>, тег заменяется значением из глобальной переменной MyGlobal . Но у меня всегда цифра 0.
В Quest Data в окне Text Display Globals я эту переменную вписал.
При убийстве определенные персонажи вносятся в эту глобальную переменную. Другие скрипты её значение нормально видят и работают с ней правильно. А в тексте сообщения, выводимого квестом всегда "убито 0". Пишу так: "Убито <Global=MyGlobal>"
Смотрел в игровых квестах, например, про виноград джазби - точно так же сделано. Но там нормально выводится значение.
Вносить значение в переменную пробовал разными командами, например:
MyGlobal.SetValue(MyGlobal.GetValue() +1)
или
ModObjectiveGlobal(1, MyGlobal)
или
MyGlobal.Value +=1
и еще другими способами.
У меня совсем нет опыта, многое делаю наугад или по аналогии с другими скриптами.

emelya8307  Offline  Сообщение №11 | Тема: Вопросы по скриптам Papyrus написано: 28 Апрель 2020, 16:30 | Отредактировано: emelya8307 - 28 Апрель 2020, 16:31



22
Dsion, Myprism, Multigone, спасибо за отклик. Заставил-таки отображаться значение переменной в сообщениях. Оно отбражается при условии, что значение переменной было изменено в этом же квесте.
А у меня при событии убийства заносилось значение в переменную, затем стартовал другой квест, из которого я пытался выцепить это значение переменной. Но оно почему-то из другого квеста не читается. Хотя квесты связаны, и в пропертях ее обьявил, и в первой вкладке квеста прописал.

emelya8307  Offline  Сообщение №12 | Тема: Вопросы по скриптам Papyrus написано: 28 Апрель 2020, 19:38



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

emelya8307  Offline  Сообщение №13 | Тема: Вопросы по скриптам Papyrus написано: 3 Январь 2021, 17:22 | Отредактировано: Multigone - 8 Февраль 2021, 23:21



22
Приветствую! Друзья, не могу разобраться с пакетами АИ. Почему не работает пакет в алиасе?
Создал квест, алиас актера. Алиас заполняется случайным уникальным персонажем, список персонажей есть в кондишенах алиаса. В алиасе создал пакет. Актер должен при страте квеста прийти в определенную локацию и находиться там.
Дело в том, что актер при старте квеста продолжают заниматься своими делами, и никуда не идёт. Алиас заполняется как надо, случайным персонажем из кондишенов. В пакете прописана локация и референс, возле которого он должен находиться и юзать маркеры. Если его принудительно фрагментом скрипта отправить в эту локацию, он там появляется и юзает маркеры, как положено.
Не идет. Смотрел похожий мод, там все работает, делал точно так же.
Вобщем долго рассказывать, может кто-то сталкивался с похожей проблемой?

UPD: разобрался. На двери в локацию висел скрипт. Убрал скрипт с двери - актеры стали заходить, пакет заработал.

emelya8307  Offline  Сообщение №14 | Тема: Вопросы по скриптам Papyrus написано: 12 Январь 2021, 01:20 | Отредактировано: emelya8307 - 12 Январь 2021, 01:20



22
Скажите, пожалуйста, как получить день недели? Мне нужно, чтобы событие происходило регулярно в определенный день недели. (Сандас, например). Как игра это вычисляет? Единственное, что нашел, это глобальная переменная GameDaysPassed, количество дней с начала игры. Как из нее вычислить текущий день недели? Заранее, спасибо.
blush

emelya8307  Offline  Сообщение №15 | Тема: Вопросы по скриптам Papyrus написано: 5 Февраль 2021, 21:32



22
Здравствуйте! Помогите горе-скриптописателю. Делаю для себя мод наподобие "Северных бань Скайрима". Чтобы НПС не расхаживали в бане нагишом, при входе им экипируется полотенце. Когда входят в бассейн - там триггер, полотенце снимается, при выходе - снова надевается.
НПС у меня не специально созданные. Пустые алиасы заполняются случайными городскими персонажами, которые играют роль посетителей бани, когда игрок принимает водные процедуры.
Проблема в чем - если я выйду из этой локации, а затем снова зайду - НПС сидят в бассейне в полотенцах.

Пока что на триггер бассейна прицепил скрипт:
Код
Event OnLoad()
    Self.Disable()
    Utility.Wait(0.15)
    Self.Enable()
End Event

Скрипт работает, при перезаходе в локацию, НПС, которые сидят в бассейне, на долю секунды надевают полотенца, затем снова снимают.
Есть ли более элегантное и правильное решение? Скрипты изучаю методом тыка, соответствующего образования нет. Но научиться хочется.

Да, проще было бы удалять и экипировать полотенце при входе-выходе в триггер. Но сложность в том, что это рандомное полотенце, их несколько видов, и требуется, чтоб какое полотенце НПС снял при входе, то же самое он и надел при выходе.

Скрипт вот такой: (Подглядел в других модах, адаптировал под себя). Там используется формлист, в который занесены все полотенца.
Код
Scriptname aaaBathPoolScript extends ObjectReference
FormList Property aaaBathTowel Auto

Event OnTriggerEnter(ObjectReference triggerRef)
    Actor akactionRef = triggerRef as Actor
    Int i =0
    While i < aaaBathTowel.GetSize()
        Form MyForm = aaaBathTowel.GetAt(i)
        If (MyForm&& akActionRef.GetItemCount(MyForm)>0)
            akActionRef.UnequipItem(MyForm)
        Endif
        i+=1
    EndWhile
EndEvent

Ну и на выходе аналогично. То есть если из инвентаря удалить полотенце, то неизвестно потом, какое добавлять обратно. Вот такой бред.

emelya8307  Offline  Сообщение №16 | Тема: Вопросы по скриптам Papyrus написано: 7 Февраль 2021, 00:27 | Отредактировано: emelya8307 - 7 Февраль 2021, 00:27



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

emelya8307  Offline  Сообщение №17 | Тема: Вопросы по скриптам Papyrus написано: 7 Февраль 2021, 21:37 | Отредактировано: emelya8307 - 7 Февраль 2021, 22:35



22
Multigone, А ларчик, оказывается, просто открывался! В ваших скриптах увидел условие
Код
If !MyActor
    RETURN

У меня триггер бассейна расположен внутри большого триггера, который как раз и выдает и экипирует полотенца при входе в интерьер. Когда в условии события OnTriggerEnter я прописал IF !MyActor то сразу скрипты (мои) стали работать как надо. Видимо при загрузке локации большой триггер экипировал всех НПС в полотенца. Век живи, век учись!!! Огромное спасибо за помощь!

UPD Хотя нет, щас потестил, все-таки глюки случаются. Дело не в скриптах, дело скорее всего в конфликте триггеров находящихся один в другом и претендующих на одни и те же переменные. Едрить я бестолочь

emelya8307  Offline  Сообщение №18 | Тема: Вопросы по скриптам Papyrus написано: 16 Март 2022, 20:44



22
Здравствуйте. Подскажите, пожалуйста, как мне в моем квесте отследить событие диалога, ну например, когда Лидия говорит "Целительные чары? Ты что, из храма?". Мне нужно, чтобы после этих слов сработала функция в моем квесте. Но вроде бы ванильные скрипты диалогов править нежелательно. Как мне поймать это событие? Но необязательно этот диалог. Любой другой ванильный диалог.

emelya8307  Offline  Сообщение №19 | Тема: Вопросы по скриптам Papyrus написано: 17 Март 2022, 20:12



22
Multigone ,  да, спасибо. Щас посмотрел SM Event Node, там есть ActorDialogueEvent, как я понял, надо создать квест который будет запускаться при событии диалога. Короче пока для меня тут много непонятного, как все работает

emelya8307  Offline  Сообщение №20 | Тема: Вопросы по скриптам Papyrus написано: 29 Март 2022, 19:10



22
Подскажите, пожалуйста, почему у меня не срабатывает фрагмент скрипта в квесте?

Alias_Victim.GetActorRef().GetActorBase().SetEssential(False)

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

ActorBase Ref = Alias_Victim.GetActorRef().GetActorBase()

While Ref.IsEssential()

Ref.SetEssential(False)

Utility.Wait(1.5)

EndWhile

Допускю, что этот скрипт дичь полнейшая, потому что теоретического образования по программированию у меня ноль. Нужно, чтобы бессмертный актер после нападения на него игрока становился смертным. Флаг Essential стоит на актере,  не на алиасе.

Буду надеяться, что сюда кто-нибудь заглянетblush2




emelya8307  Offline  Сообщение №21 | Тема: Вопросы по скриптам Papyrus написано: 31 Март 2022, 20:37



22
Multigone,  Попробовал твой способ, работает примерно так же как и мой, иногда не срабатывает, хз почему.

emelya8307  Offline  Сообщение №22 | Тема: Вопросы по скриптам Papyrus написано: 24 Апрель 2022, 23:25 | Отредактировано: emelya8307 - 25 Апрель 2022, 00:23



22
Кто-нибудь знает, как отследить, что игрок открыл новую локацию?

Lexo, Это легко отслеживается через изменение статистики. На Алиас игрока или квест повешить скрипт:

Event OnInit()

  RegisterForTrackedStatsEvent() ; Для отслеживания изменения сттистики нужно сначала зарегистрироваться.

EndEvent

Event OnTrackedStatsEvent(string asStatFilter, int aiStatValue)

    if (asStatFilter == "Locations Discovered")

     Debug.Notification("Открыта новая локация.")

       ; что-то сделать

    endif

endEvent


У меня все прекрасно работало. Не надо никаких форм-листов, кейвордов, переменных, отслеживание происходит мгновенно при открытии новой локации.

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


Форум » Записи участника [emelya8307]
  • Страница 1 из 1
  • 1
Поиск:





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