• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Ну, значит, ты его так написал Функции сами собой не начинают повторяться, если этого не прописать в коде... Ну и если они не прописаны внутри повторяющегося ивента...
Изменение репутации для пользователя W@nTeD
W@nTeDOffline
Сообщение №1862
написано: 9 сентября 2015, 18:17
| Отредактировано: W@nTeD - 9 сентября 2015, 18:18
;-- Properties -------------------------------------- wordofpower property Third auto actor property PlayerRef auto wordofpower property Second auto wordofpower property First auto
Вряд ли он действительно зацикливается. Но он ведь должен добавить три слова крика, да? Для каждого слова играет музыка и появляется сообщение на экране. 3 раза. Или у тебя больше?
И можно еще вот так переписать скрипт, чтоб было красивее и понятнее:
Код
Scriptname SionBookScript extends ObjectReference
WordOfPower Property First Auto WordOfPower Property Second Auto WordOfPower Property Third Auto
то это не совсем то. Потому что у каждого референса свой экземпляр скрипта. И если Довакин найдет где-то еще одну такую же книгу, снова будет "получать" слова.
Можно сделать с глобальной переменной:
Код
Scriptname SionNoteScript extends ObjectReference
WordOfPower Property First Auto WordOfPower Property Second Auto WordOfPower Property Third Auto
А разве нельзя, просто дать скрипту один раз выполниться, а после этого удалиться/отключиться? Что-бы меньше мороки было.
Удалить - не, нельзя... Удалить можно книгу после прочтения. А с отключением проблема в том, что у каждого референса свой скрипт. Отключишь на одной книге, на на другой он снова сработает.
Ладно, если вдруг еще что-то придет в голову, я обязательно напишу.
Добавлено (09 Сентября 2015, 23:19) --------------------------------------------- Вообще, вариантов дофига... Но тебе они должны быть виднее... Мы же не знаем, что ты задумал...
Если ты делаешь какой-то квест, можно использовать стадии квеста... Например, на одной из стадий задание "прочтите книгу". После прочтения книга меняет стадию и больше не активна.
Или сделать, чтоб она сгорела нафиг сразу после прочтения...
Или не вешать скрипт на базовую книгу, а выбросить её куда-то в мир и повесить скрипт на один конкретный референс...
Или вообще отказаться от книги... Мало вариантов что-ли. Словам игрока может научить какой-то NPC или какой-то камень, который отключится после первой активации.
Или еще что-то...
Добавлено (09 Сентября 2015, 23:22) --------------------------------------------- После прочтения тихонько отобрать у игрока книгу со скриптом и подсунуть такую же, но без скрипта :-D
Надеюсь, оно действительно идеальное А то тут недавно один чувак (не буду тыкать пальцем) писал что-то такого типа:
Не, потсоны, есть суп ложкой - это вообще лажа. Я пробовал-пробовал, но у меня ничего не получилось. Я нашел намного более удачное решение. Берем младшую сестру, даем ей кастрюлю с супом. Сами запрокидываем голову назад и открываем рот. Сестра должна каждые 2 секунды спрашивать "Хочешь ли еще супа? Если хочешь, моргни 2 раза." Ты моргаешь два раза и сестра заливает в тебя сверху суп. И не нужна никакая ложка. И те, кто советовал ложку, - вообще нубы...
Изменение репутации для пользователя W@nTeD
W@nTeDOffline
Сообщение №1871
написано: 10 сентября 2015, 08:23
| Отредактировано: W@nTeD - 10 сентября 2015, 08:24
Решил не париться по поводу скрипта, и самой книги, дополнив скрипт, командой. Книга просто удаляется из инвентаря Довакина при прочтении, тем самым, он больше не сможет, каждый полчаса тыркать бедную книгу, чтобы выучить, уже знающий ему ту'ум!
Всем доброго времени суток, уважаемые форумчане! Сегодня у меня парочка вопросов: 1) я хочу встроить скрипт в мод, чтобы этот скрипт при активном моде "брал" определенное оружие и менял его урон. Вопросы - как лучше "брать" оружие - через свойство или по formID? И как запускать скрипт (какой эвент) и от кого он должен происходить (extends), чтобы он работал тогда и только тогда, когда активен мой мод? С обязательным отключением при отключении мода. (Догадываюсь, что скрипт стОит засунуть в BSA). 2) я хочу изменять содержимое LeveledSpell и LeveledItem скриптом (добавлять заклинания и книги заклинаний в сундуки торговцам, не изменяя сами сундуки для лучшей совместимости с другими модами). Вопрос - опять же, как это реализовать при активном моде? В каком эвенте и от чего должен происходить (extends) скрипт? И в каком виде лучше добавлять туда объекты типа form - с использованием свойств?
Изменение репутации для пользователя andrelo-1
andrelo-1Offline
Сообщение №1873
написано: 30 сентября 2015, 09:13
| Отредактировано: andrelo-1 - 30 сентября 2015, 09:18
Ronolus, 1. Лучше через свойство чем по id, помогает избежать очепяток в id, да и самому будет понятнее, что именно меняешь, чем потом вспоминать к чему относится этот id. От чего происходить (extends) и какой эвент это зависит от того, в какой момент ты хочешь запустить скрипт. Если хочешь во время загрузки игры - ищешь тут событие OnPlayerLoadGame(). Оно вызывается только на player'e, значит нужно скрипт вешать на player'a. Делать это лучше через алиас на player'a, чтобы не конфликтовать с другими модами. Создаешь квест, в нем алиас на player'a, на него скрипт. Там реализуешь событие OnPlayerLoadGame(). Как-то так. Еще тоже самое нужно будет сделать на событие OnInit(), потому что при первом запуске OnPlayerLoadGame() не вызывается, а вызывается OnInit(). 2. То же самое, что в первом случае.
На счет активного мода. Скрипты привязаны к объектам через esp файл. Соответственно, если ты удаляешь esp, скрипты тоже перестают работать. Есть правда нюансы, вроде того, что скрипты на самом деле остаются в сейве, но без esp он не сможет нормально работать, если интересны подробности, то можно почитать на том же сайте. Засовывать в bsa или нет, это уж сам решай, принципиально это ничего не меняет.
1. А просто перезаписать в моде оружие нельзя? Пока мод включен, будет другой урон. Это самый простой вариант. Скриптом урон поменять тоже можно, но только с SKSE. Зависимость от SKSE приемлема? Скорее всего, изменение урона не будет сохраняться в сэйве. Потому, как правильно сказал andrelo-1, нужно вешаться именно на ивент OnPlayerLoadGame() на алиасе игрока, чтоб прописывался нужный урон каждый раз при загрузке игры. Если ни SKSE, ни перезапись оружия не приемлемы, то сдаваться рано. Можно зафигарить ПЕРК, который будет поднимать урон для какого-то оружия. Перком не изменить базовые характеристики этого оружия, но увеличить урон, скажем, в полтора раза или уменьшить в два раза можно. Скриптик, дающий перк, можно повесить, например, на ивент OnInit() собственного квеста.
2. Круто, что ты заботишься о совместимости. Я перестал использовать чужие моды потому что авторам обычно наплевать на производительность и совместимость. Добавлять в листы что-то скриптом - крутая идея. Скрипт можно повесить, опять же, на OnInit() своего квеста. Вот только, ясное дело, после отключения мода добавленные объекты из листов сами собой не уберутся. Я даже не уверен, что уберутся модовские объекты, которые пропали вместе с модом. Надо проверить. Понадобавлять скриптом в какой-то список модовских объектов, потом отключит мод, сохраниться без него и изучить сэйв. По сэйву уж будет видно, в каком виде остался список.
If akspeaker.GetRelationshipRank(Game.GetPlayer()) == 0 akspeaker.SetRelationshipRank(Game.GetPlayer(), 1) Endif
Starting 1 compile threads for 1 files... Compiling "TIF__01002332"... C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\TIF__01002332.psc(9,28): variable Gold is undefined C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\TIF__01002332.psc(10,18): variable gold is undefined C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\TIF__01002332.psc(11,0): variable FavorJobsBeggarsAbility is undefined C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\TIF__01002332.psc(11,24): none is not a known user-defined type C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\TIF__01002332.psc(12,0): variable FavorJobsBeggarsMessage is undefined C:\Games\Skyrim - Legendary Edition\Data\Scripts\Source\temp\TIF__01002332.psc(12,24): none is not a known user-defined type
Как сделать так чтобы игрок не 1 монету отдавал а 20?
В функциях removeitem и additem должно быть указано не только EditorID предмета, но и количество предметов. Тогда будет удаляться-даваться то количество, которое указано.
Всем привет, вообщем хочу заменить оригинальное горение глаз вампира, из мода "DVA" Когда в моде вампир начинает бой, у него пылают глаза в бою. Вообщем хочу всегда такие глаза. Помогите пожалуйста, что нужно cделать ? Вот скрин:
В Showracemenu ставлю такие глаза, но потом они возвращаются в оригинальное значение по умолчанию...
_Dark_Assassin_, скорее всего, там глаза скрипт меняет... И, скорее всего, SKSE-шный... Можно либо оставить этот DVA, но подпилить скрипт так, как тебе надо. Либо вообще удалить DVA, а глаза стырить и вынести в отдельный модик.
Люди я наверно надоел с глупыми вопросами, но опять возникла проблема. Деньги он отдает, только не показывает сколько. Как сделать ток чтобы было видно что ты отдал 20 монет. Game.GetPlayer().RemoveItem(Gold001, 20, true) akspeaker.additem(gold001)
Привет всем, хочу в мсм меню добавить два блока: 1) Один с ползунком, на регулировку громкости музыки, которая звучит в моде 2) На возможность, снять ваобще либо сменить одежду\броню, на костюм танцовщицы Мод вот этот , если что... Скачать -"Танцы в Скайриме" Видео с танцами здесь ...и здесь
Кто может помочь?
Очень много времени уходит на сами анимации(конвертация, редактирование-подгонка, подбор музыки..и т.п....), так что нет возможности углубленного изучения папируса
Изменение репутации для пользователя Нарада
НарадаOffline
Сообщение №1885
написано: 18 октября 2015, 13:33
| Отредактировано: Нарада - 18 октября 2015, 13:35
Уважаемые знатоки, не подскажите, как сделать, чтобы после открытия локации к ГГ подбегал посыльный и вручал ему письмо? Или подскажите в каком квесте ванили данное действо реализовано?
Нарада, в игре посыльные сделаны внутри квестов. Если игрок делает что-то в мире появляется посыльный с интеллектуальным пакетом найти игрока и т.д. Квест это просто удобный способ объединения скриптов, пакетов и персонажей.
Устранение одной из причин вылета при загрузке сохранения.
Как-то мне надоело что игра вылетает при загрузке и я включил трассировку для каждой строчки кода у нескольких скриптовых модов из сборки. Оказалось что на одном сохранении игра стабильно вылетает на строке: Utility.Wait(4) Данная строка кода была призвана снизить нагрузку на систему при старте путём разнесения по времени. Попытки заменить её на RegisterForSingleUpdate(4) или RegisterForUpdate(4) не избавили от вылетов. Помогло применение заклинания на игрока с временем жизни в 4 секуды.
Похоже, при старте игры на слабых компьютерах, одновременные вызовы этих функций провоцируют что-то вроде DOS-атаки.
Подобную картину я наблюдал при запуске квеста с большим числом алиасов(15 штук) у которых в скрипту в событии OnInit стояла строка Utility.Wait(0.1). Вылетов не было, но и квест, то запускался, то нет.
Не могу сказать, что я полностью избавился от вылетов. Но их количество уменьшилось после того как модифицировал подобным образом несколько модов из своей сборки.
Изменение репутации для пользователя andrelo-1
andrelo-1Offline
Сообщение №1888
написано: 19 октября 2015, 08:42
| Отредактировано: andrelo-1 - 19 октября 2015, 08:48
Kepper, по моему личному мнению, завалить игру с помощью скрипта практически невозможно, если не делать чего-то экстраординарного. Papyrus - это виртуальная машина, Utility.Wait() просто останавливает поток на какое-то время. Типичная причина вылета Скайрима - это проблемы с памятью. Я думаю, вылет во время Wait() - это всего лишь совпадение, и причина, скорее всего, именно в памяти.
Изменение репутации для пользователя Нарада
НарадаOffline
Сообщение №1889
написано: 19 октября 2015, 11:44
| Отредактировано: Нарада - 19 октября 2015, 11:44
Нарада, в игре посыльные сделаны внутри квестов. Если игрок делает что-то в мире появляется посыльный с интеллектуальным пакетом найти игрока
Спасибо за ответ, но пакета типа "найти игрока" (типа find player) я не нашел. Есть ForceGreet (сила приветствовать), FollowPlayer - следовать за игроком. Есть еще SayToPlayer - говорить с игроком. Так какой из них нужно выбрать, чтобы НПС искал ГГ?
andrelo-1, может быть проблема в памяти может ещё в чем-то. Я ищу такой вариант кода, при котором не будет вылетов при загрузке игры на моём компьютере. Может быть найденный метод подойдёт ещё кому-нибудь.
Были опробованы следующие варинаты кода:
Варинат 1 Event OnPlayerLoadGame() блок кода 1 Debug.Trace("OnPlayerLoadGame 1 ") Utility.Wait(4) Debug.Trace("OnPlayerLoadGame 2 ") блок кода 2 EndEvent
Варинат 2 Event OnPlayerLoadGame() блок кода 1 Debug.Trace("OnPlayerLoadGame 1 ") RegisterForSingleUpdate(4) Debug.Trace("OnPlayerLoadGame 2 ") блок кода 2 EndEvent
Варинат 3 Event OnPlayerLoadGame() блок кода 1 Debug.Trace("OnPlayerLoadGame 1 ") RegisterForUpdate(4) Debug.Trace("OnPlayerLoadGame 2 ") блок кода 2 EndEvent
На одном из сохранений стабильно выкидывало при любом из этих трёх вариантов. В лог файле строки "OnPlayerLoadGame 2" не было. Вылеты на этом сохранении прекратились только тогда, когда я убрал из кода предыдущую строку.
Функции RegisterForSingleUpdate и RegisterForUpdate на мой взгляд не имеют отношения к приостановке потока выполнения, но их вызов приводил к вылету.
Для того чтобы всё же отсрочить выполнение части кода, я повесил этот блок кода на окончание работы заклинания. А при старте применяю это заклинание на игрока.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)