Модератор форума: 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? Пиши не в ЛС, а в эту тему.
NoSilence  Offline  Сообщение №1981 написано: 20 февраля 2016, 16:41 | Отредактировано: NoSilence - 20 февраля 2016, 16:45



3
Хз, короче.

Впихнул вот так и черт с ним
Код
Form asd = Game.GetForm(0x020047DA)
if(akCaster == Game.GetPlayer() && akCaster.IsEquipped(asd) == 1)

andrelo1, ага, про help и строку уже понял. Про == 1 я без понятия. Лично я бы просто написал if(akCaster.IsEquipped(asd)), а остальное на совести компилятора.

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

Dsion  Offline  Сообщение №1982 написано: 20 февраля 2016, 16:59



NoSilence, ну молодец, что впихнул. А если у кого-то давнгард окажется под порядковым номером не 2?
Ну можно было бы использовать GetFormFromFile, но в данном случае это лажа лажовая.
Просто проперти заполнять научись.

andrelo1  Offline  Сообщение №1983 написано: 20 февраля 2016, 17:02



13
Цитата NoSilence

я бы просто написал if(akCaster.IsEquipped(asd))


Дак так и надо впринципе.

Myprism  Offline  Сообщение №1984 написано: 20 февраля 2016, 18:02


Физик


Цитата andrelo1

Ну а изменять наверно все равно когда, когда удобно, тогда и меняешь.


Вот тут и загвоздка. Надо дополнять уровневые списки оутфитов и самих персонажей. Скажем. есть уровневый персонаж, при инициализации его он экипируется, а мне эту экипировку надо дополнить. Вроде, как надо отслеживать инициализацию персонажа. Но нет такого события у актёра.

evTau  Offline  Сообщение №1985 написано: 20 февраля 2016, 18:09 | Отредактировано: evTau - 20 февраля 2016, 18:21



Цитата Myprism

В Скайриме есть такая удобная штука, как уровневые списки (левельные списки). Через них обычно персонажи снабжаются шмотками. Всё бы хорошо, но если мод меняет такой список, то он становится несовместим с другими модами, которые меняют тот же список. Т.е. списки не суммируются (объединяются), а используется либо один, либо другой. Возникает естественное желание модифицировать нужные уровневые списки через скрипт. Благо есть соответствующая команда:

Зачем так усложнять себе жизнь... ведь проще сделать отдельный esp с уровневыми листами прикрутить к ниму баш теги и все...  Wrye Bash спокойно создаст bashed patch с учетом ваших изменений. Обычно люди так и делают если дофига изменений в уровневых листах.


andrelo1  Offline  Сообщение №1986 написано: 20 февраля 2016, 18:40



13
Myprism, по идее надо делать так как evTau говорит, т.е. сливать уровневые списки в один. А скриптами отловить момент инициализации списка и вклинится в него не получится.
Правда изменение списков через esp тоже будет работать только на новой игре/новых персонажах, старые так и останутся в старом оутфите.

Dsion  Offline  Сообщение №1987 написано: 20 февраля 2016, 19:11



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

evTau  Offline  Сообщение №1988 написано: 20 февраля 2016, 19:13 | Отредактировано: evTau - 20 февраля 2016, 19:27



Цитата andrelo1

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

Тут все проще человеку просто нужна возможность совмещенеия его уровневых листов с текущими что бы не было конфликтов.

PS: Я может чего то не понял... но если рассуждать с той точки зрения как я понял суть проблемы, вы только все усложняете.  :) Что бы тупо слить все изменения уровневых списков в 1 единый такие танцы с бубном... уже давно все придумано.

Myprism  Offline  Сообщение №1989 написано: 20 февраля 2016, 19:26


Физик


evTau, andrelo1,  работа через Врай Баш не годится. Мод должен быть самостоятельным и не требовать больше ничего. В крайнем случае SKSE. Буду думать.

evTau  Offline  Сообщение №1990 написано: 20 февраля 2016, 19:32



Цитата Myprism

evTau, andrelo1,  работа через Врай Баш не годится. Мод должен быть самостоятельным и не требовать больше ничего. В крайнем случае SKSE. Буду думать.


Это не зависимость... это необходимость. Но если хочется гемороя то можно разобрать Complete Crafting Overhaul в нем точно есть скрипт обновления уровневых списков. Или Wet and Cold в нем тоже есть такой скрипт.

andrelo1  Offline  Сообщение №1991 написано: 20 февраля 2016, 19:48 | Отредактировано: andrelo1 - 20 февраля 2016, 19:50



13
Цитата evTau

Но если хочется гемороя то можно разобрать Complete Crafting Overhaul в нем точно есть скрипт обновления уровневых списков.


С продавцами проще, потому что ассортимент у них генерируется в тот момент когда ты спрашиваешь, что у них есть на продажу.

evTau  Offline  Сообщение №1992 написано: 20 февраля 2016, 20:03 | Отредактировано: evTau - 20 февраля 2016, 20:13



Цитата andrelo1

С продавцами проще, потому что ассортимент у них генерируется в тот момент когда ты спрашиваешь, что у них есть на продажу.


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

Myprism  Offline  Сообщение №1993 написано: 20 февраля 2016, 20:33


Физик


evTau, совершенно верно. Сейчас я добавляю туда татуировки и нижнее бельё. Есть и задача изменения уровневых списков персонажей. Т.е. левельных персонажей.

evTau  Offline  Сообщение №1994 написано: 20 февраля 2016, 21:05 | Отредактировано: evTau - 20 февраля 2016, 21:19



Цитата Myprism

evTau, совершенно верно. Сейчас я добавляю туда татуировки и нижнее бельё. Есть и задача изменения уровневых списков персонажей. Т.е. левельных персонажей.

Реализация через скрпиты точно есть, но мне кажется тут без skse не обошлось... И тут встает вопрос что лучше привязать к моду SKSE или создание bashed patch. 2 вариант куда проще и требует минимум усилий и от разработчика мода и от тех кто им пользуется, такова реальность либо так либо так. Вы ведь делаете мод для чистого скайрима и вам пофиг на постороние модификации (вы не должны подстраиватся под других, пусть другие подстраиваются под вас), если у вас есть любимчики которые вносят изменения в лвл листы вы можете делать для них патчи совместимости, а для всего остального пусть делают башед патч это не ваш геморой. Да и гемороем я бы это не назвал, это займет минуту времени. Вы посмотрите практически каждый 2 мод изменяющий глобально лвл листы требует, даже нет не требует, а рекомендует создание башед патча.

PS: Татухи у вас в моде по моему дофига весят, понятно что для качества и все такое, но если их массово раздавать нпс это плохо может кончится.

вадавад  Offline  Сообщение №1995 написано: 20 февраля 2016, 23:27



5
Kepper
Цитата Kepper

Scriptname NameOfSomeScript extends ObjectReference

Почему-то не работает.
Когда я сделал зачарование хождения по воде оно перестало работать после перезагрузки компа. Может СК глючит?

Myprism  Offline  Сообщение №1996 написано: 21 февраля 2016, 02:57 | Отредактировано: Myprism - 21 февраля 2016, 02:58


Физик


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

evTau  Offline  Сообщение №1997 написано: 21 февраля 2016, 11:58 | Отредактировано: evTau - 21 февраля 2016, 12:01



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

Суть такая хочу поставить реплейсер тела нагишом, но сделать скрипт который при первой встрече закидывал бы им в инвентарь труселя мужикам свои женщинам свои. На FNV есть такой мод, но я не видел его порта на Skyrim.

Dsion  Offline  Сообщение №1998 написано: 21 февраля 2016, 16:01



Надевать белье в момент активации не подойдет? Если игрок убьет кого-то одетого, а потом активирует, чтоб снять одежду, белье появится. Но если разденет каким-то другим способом (без активации), тогда не будет.
Ну или можно сделать ауру вокруг игрока с большим радиусом. Я так и делал.

evTau  Offline  Сообщение №1999 написано: 21 февраля 2016, 16:28



Цитата Dsion

Надевать белье в момент активации не подойдет? Если игрок убьет кого-то одетого, а потом активирует, чтоб снять одежду, белье появится. Но если разденет каким-то другим способом (без активации), тогда не будет.

Можно и такой вариант. Так даже наверно лучше.

andrelo1  Offline  Сообщение №2000 написано: 21 февраля 2016, 16:43



13
evTau, а есть еще нпц, которые вообще без одежды изначально, например в Хелгене в клетке или у горячих источников. Их тоже придется как-то одеть.

Myprism  Offline  Сообщение №2001 написано: 22 февраля 2016, 17:24


Физик


Нашёл изящный способ объединения уровневых списков. Обошёлся без скриптов, но опишу его здесь, так как именно здесь этот вопрос обсуждался.
Надо не изменять имеющийся список, а создавать новый - список прокладку. Именно его подставлять где надо в игру. А уже в него в качестве составляющей части включить ванильный список. Другой составной частью моего нового списка составляют мои добавленные шмотки. Любой мод мог менять родной список и все изменения войдут в мой. Таким образом происходит объединение моих изменений с изменениями внесёнными ранее установленными модами.

andrelo-1  Offline  Сообщение №2002 написано: 22 февраля 2016, 18:35



172
Myprism, правда этот способ не будет работать для оутфитов, в которых не используются уровневые списки, или если другой мод удаляет уровневые списки из оутфитов, а также этим методом не получится разрешить конфликт более чем для двух модов.

evTau  Offline  Сообщение №2003 написано: 22 февраля 2016, 19:40 | Отредактировано: evTau - 22 февраля 2016, 19:47



Цитата andrelo-1

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

Мб у него новые оутфиты где он использует лвллисты и ему нужно было чтобы его новый сливался с ванильным без конфликтов и мог использовать вещи из других модов. Хотя нет слишком просто.

Myprism  Offline  Сообщение №2004 написано: 23 февраля 2016, 00:40


Физик


andrelo-1
1. Да, проблему для Оутфитов я не решил. Решил только для уровневых списков. Проверил для уровневых списков персонажей. Я добавил фалмеров-женщин, а потом обнаружил, что Даунгард меняет те же списки добавляя туда своих продвинутых персонажей. Привязывать мод только из-за этого к Даунгарду мне не хотелось. Вот я и решил задачу таким образом. Проверил. Бегают у меня там и дамочки мои и фалмеры в даунгардовской одёжке.
2. У меня нет задачи связать несколько модов. Это головная боль пользователя, но не моя. Ко мне будут предъявлять претензии только если мой мод что-то у пользователя нарушит. Вот пользователь там у себя что-то настроил (скажем врай башем) или не настроил и выбросил, что не сумел настроить. У него всё работает. Мой мод не должен это нарушить. Значит, мне нужно обеспечить совместимость только с тем, что игрок там у себя создал. А у него там изменённые уровневые списки. Их вложенность и устройство меня не волнует.
Кстати, преложенный мною способ может использоваться и для последовательной связи нескольких модов. Уровневые списки превращаются в матрёшку.

Myprism  Offline  Сообщение №2005 написано: 23 февраля 2016, 00:48 | Отредактировано: Myprism - 23 февраля 2016, 05:46


Физик


А теперь у меня вопрос именно по скриптам. Давно и успешно использую систему высокого каблука HDT High Heels. Она работает так. В папке Plagins SKSE кладётся специальная ДЛЛька. На сапоги вешается скриптом заклинание высокого каблука:

Scriptname hdtHighHeelShoes extends ObjectReference

SPELL Property hdtHighHeelSpell Auto
int Property SexFlag = 1 Auto; // 0 for male only, 1 for female only, 2 for both
bool Property isUnequipped = false Auto hidden;

Event OnEquipped(Actor akActor)
isUnequipped = false;
Utility.Wait(0.1);
if(!isUnequipped)
ActorBase base = akActor.GetBaseObject() as ActorBase;
if( SexFlag == base.GetSex() || SexFlag == 2 )
akActor.AddSpell(hdtHighHeelSpell, false)
endif
endif
endEvent

Event OnUnequipped(Actor akActor)
akActor.removeSpell(hdtHighHeelSpell)
isUnequipped = true;
endEvent


Всё это прекрасно работает на главном герое и на его спутницах. Но отказалось работать на уровневых персонажах. Т.е. одни и те же сапоги на уникальных - всё отлично, на не уникальных - не работают. В чём может быть дело? Возможно проблема в LeveledActorBase? Как исправить?

evTau  Offline  Сообщение №2006 написано: 23 февраля 2016, 07:36 | Отредактировано: evTau - 23 февраля 2016, 07:44



НПС давать HH плохая затея это же лишняя нагрузка на папирус. Его делали без расчета на то что НПС (массово) будут ходить в такой обуви.

Myprism  Offline  Сообщение №2007 написано: 23 февраля 2016, 09:54


Физик


evTau
1. Такая обувь встречается в игре редко. Должна, по крайней мере. По тундре на каблуках не походишь.
2. В поле зрения всегда мало персонажей. Игра ведь рассчитана на возможность её запуска на консоли. Исключение - батальные сцены, а там высоких каблуков нет.

evTau  Offline  Сообщение №2008 написано: 23 февраля 2016, 10:15 | Отредактировано: evTau - 23 февраля 2016, 10:17



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

andrelo-1  Offline  Сообщение №2009 написано: 23 февраля 2016, 11:49 | Отредактировано: andrelo-1 - 23 февраля 2016, 11:53



172
Myprism, вообще да, проблема может быть как раз akActor.GetBaseObject(), потому что для уровневых нпц эта функция, на сколько я помню, возвращает None. Надо использовать GetLeveledActorBase(), она работает для любых нпц.
Кстати, уже есть система Equippable Transforms, которая позволяет реализовать High Heels без скриптов. Про нее можно на странице RaceMenu почитать.

Myprism  Offline  Сообщение №2010 написано: 23 февраля 2016, 12:34


Физик


andrelo-1, спасибо большое! GetLeveledActorBase() решило мою проблему. С RaceMenu буду разбираться позже, а пока у меня есть всё, что нужно, чтобы выложить первую версию нового мода.

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





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