m4mk203, OnHit срабатывает и от магии тоже. Больше ничего и нету. Разве что каждую секунду проверять ХП. А не хочешь сделать игрока неубиваемым? Тогда можно будет попробовать подцепиться к событию OnEnterBleedout()
m4mk203, а хрен как Если фолловеры управляются только ванильными квестами, то можно, а модовым ничего так просто не сделаешь. Хотя, по-моему, это не основная проблема. Вот в Скайриме есть места, где за игроком закрывается дверь и он не может выйти, пока не победит противников. А что будет, если игрока победят с твоим модом? Без оружия-то у него шансов будет еще меньше. И выйти не сможет.
m4mk203, ну получишь ты референсы и что дальше? Как ты их "отпустишь"? Фолловеры управляются пакетами на квестах. Ванильного спутника или наемника отпустить - запросто. Серану - тоже. Но если установлены какие-то моды, но хрен ты им чо сделаешь.
Добавлено (07 Декабря 2017, 09:41) --------------------------------------------- refusepit, не знаю, как в фоллауте, но в скайриме нельзя функцией moveto перемещать статические объекты, созданные в редакторе. Можно перемещать те, что были созданы уже во время игры функицей placeatme и у которых id начинается с ff. Если твой стул в редакторе поставлен, можешь поробовать создать перемещаемого клона.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1146
| Тема: Вопросы по скриптам Papyrus
написано: 7 декабря 2017, 09:29
| Отредактировано: Dsion - 7 декабря 2017, 09:32
refusepit, не, в Скайриме в консоли тоже не работает, если id не c FF начинается. Попробуй еще вывести id форм перед moveto. В скайример это делается как-то так: Debug.MessageBox(objStul); Debug.MessageBox(akReference); Вдруг ты забыл заполнить objStul и там NULL.
Ну и без disable|enable можно попробовать. Должно работать... Ошибка явно в какой-то мелочи.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1147
| Тема: Вопросы по скриптам Papyrus
написано: 8 декабря 2017, 10:28
| Отредактировано: Dsion - 8 декабря 2017, 10:30
Князь_Далик, 1. Создаешь новый квест. Прописываешь ему ID и имя. Сохраняешь. 2. Открываешь снова квест, переходишь во вкладку Quest Aliases. 3. Создаешь новый Reference Alias. Прописываешь имя. Fill type изменяешь на Specific Reference, ставишь галочку Optional. Сохраняешь. 4. Переходишь во вкладку Quest Objectives. Создаешь новую Objective. В Target Ref добавляешь свой алиас. Запомнинаешь Index Objective. Сохраняешь.
5. В любом другом скрипте в любом другом месте создаешь Property типа Quest. Заполняешь своим квестом. Создаешь проперти типа ReferenceAlias заполняешь своим алиасом из своего квеста. 6. В любом месте этого скрипта пишешь: myAlias.ForceRefTo(myTarget); myQuest.SetObjectiveDisplayed(0, true); Заменив myAlias и myQuest на имена, которые ты дал пропертям. myTarget - на цель (твой сундук). А ноль на id обджективы.
Если сундук есть и может быть только один, то можно сразу в алиасе указать конкретный объект. Тогда проперти алиаса и ForceRefTo не нужны.
gangrena1972, если на фразах только reset таймер, то по порядку. А если таймер и галочка Random (+ Random end на последнем), то произносятся все фразы в случайном порядке и, вроде как, на каждую отдельно вешается время сброса.
Игра просматривет список фраз сверху вниз. Находит первую, удовлетворяющую условиям. Если она не Random, то сразу её и произносит. А если Random, то произносит одну из группы. (Начало группы - первая фраза с Random, конец группы - фраза с Random End или фраза без Random). Если на произнесенной фразе был Reset Timer или Say once, то она выпадает из списка (по крайней мере, до перезапуска игры).
Потому самые важные фразы должны быть на самом верху. Если у тебя только один комментарий о Мшистой пещере, то галочка Random на нем не нужна. Если несколько, то можно сделать и рандомный выбор, но вся Random группа должна быть повыше в списке. И быть отделенной от следующей Random группы галочкой Random End.
Вот, например, в таком порядке можно было бы расположить фразы:
1. Самые важные комментарии. 2. Группа комментариев о конкретном месте (о Рифтене, например). Random End в конце группы. 3. Группа комментариев о типа места (город). Random End в конце группы. 4. Группа комментариев о здоровье игрока. Random End в конце группы. 5. Группа самых незначительных комментариев (о погоде, например). Random End в конце.
Чтоб не запутаться, лично я распределил бы это всё по разным квестам с разным приоритетом.
Не знаю... Можно создать в том же квесте другой топик и из первого в правильном порядке перебросить туда фразы. Там есть пункт Move to topic. Можно и в другой квест отправлять, вроде. Не хочешь разделить всё по квестам?
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1152
| Тема: Вопросы по скриптам Papyrus
написано: 9 декабря 2017, 14:54
| Отредактировано: Multigone - 22 апреля 2020, 13:20
modgms_user, нативные функции в этих скриптах выполняются очень медленно. А у тебя их досточно много между проверкой на None и установкой цели. Может, игрок успевает убрать прицел с цели, пока всё это выполняется. А даже если и не так, всё-равно лажа это всё. Автору надо разобраться с переменными. И сделать так, чтоб во всем скрипте был только один вызов GetCurrentCrosshairRef() с занесением результата в переменную:
modgms_user, дались тебе эти мутные SKSE-шные скрипты "If" проверка, которую ты описал, от ошибки в логе не избавит. Потому что функция таки выполняется, а проверяется уже возвращенное из неё значение. Если функция возвращает Bool, то "if func()" - это то же самое, что "if func() == true". А если возвращает Int или Float, то, скоре всего, "if func()" - это то же самое, что "if func() != 0". Во всяком случае, в Си так, а в папирусе не проверял.
modgms_user, идем, лучше, играть в WOW и писать аддоны для WOW, а? Там хоть нормальное API и код самого близзарда очень качественный. А по GetMagnitude() - ну возьми проверь, какое значение оно возвращает при ошибке. Если там ноль и ноль не является допустимым для работы остального скрипта, то можно сделать проверку на ноль.
Чем отличается ESM от ESP? Зачем превращать ЕСП в ЕСМ и обратно?
Да ничем... Одним битом в заголовке. И тем, что esm может быть зависимостью у esp. Никаких особых недокументированных возможностей у esm нету. Арбалет был добавлен не esm файлом, а новой версией exe.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1157
| Тема: Вопросы по скриптам Papyrus
написано: 8 января 2018, 16:40
| Отредактировано: Dsion - 8 января 2018, 16:42
Multigone, чо-то у тебя реально странные представления о программах... Попрограммировал бы на Си...
modgms_user, возьми да замерь время выполнения первого и второго вариантов... В Utility Script, вроде, есть функция получения точного реального времени. Если будет слишком быстро выполняться, можно повторить тест 1000 раз или сколько нужно. Вряд ли у нас на форуме есть кто-то, кто понимает компилятор папируса достаточно хорошо, чтоб сразу сказать, какой вариант быстрее.
Можешь заюзать GetFormFromFile. Можно сделать вот так: если чудой мод с одеждой подключен, одеваем персонажа в модовую одежду, а если не подключен, одеваем в ванильную. Ну или можно добавить возможность переодевать спутников в игре. Типа, чтоб он надевал то, что ему даешь. Тогда пофиг, из какого мода даваемая ему одежда.
AlexeyVN, Lexo, попробуйте обое разобраться с запуском квестов по Story Manager Event. Там можно и убийство актора поймать, и каст заклинания. Хотя, может, от крика оно и не срабатывает.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1160
| Тема: Вопросы по скриптам Papyrus
написано: 18 января 2018, 20:05
| Отредактировано: Dsion - 18 января 2018, 20:06
ladyinna, ага, вон ApeX дело базарит... Сундук указан в Property, да? Если вручную не указать иначе, то они считываются только при Init-иализации объекта. И это правильно. Скрипты должны иметь возможность изменить значение property и она не должна сбрасываться к исходному значению.
В fallout (не уверен за Скайрим) бывают еще const property: int property myConstProperty auto const Их нельзя изменить в игре и они не сохраняются в сейвах. Можешь попробовать изменить тип property на const. А если не поможет и загружать сейв без мода - не вариант, то можно установить правильное значение property из консоли... Только я уже не помню, какая там команда. Будет нужно - найду.
Добавлено (14 Февраля 2018, 21:16) --------------------------------------------- еще можно попробовать поменять имя проперти (не проверял) или заменить проперти на заполненный алиас (это работает)
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1165
| Тема: Вопросы по скриптам Papyrus
написано: 11 августа 2018, 14:10
| Отредактировано: Dsion - 11 августа 2018, 14:12
В общем-то, этот скрипт не поддерживает добавление новых заклинаний. Во всяком случае, без изменения кода скрипта, а менять ванильные скрипты - плохой тон. Можно попробовать два варианта: 1. Заменить одно из заклинаний с скрипте на своё (для одной конкретной ловушки или для нового типа ловушек). Например, выбираем "2 = flames". И вставляем своё заклинание в проперти sLvlFlames1, sLvlFlames2, ..., sLvlFlames6. В иделе, должно быть шесть разных заклинаний разной силы. Но можно заполнить и одинаковым. При этом всём, если ваше заклинание имеет тип chanelling, то нужно заменять заклинание типа chanelling (2, 5 ил 7), а если мгновенное, то одно из мгновенных. 2. Сделать новый скрипт. Либо с нуля, либо постепенно выпиливая лишнее из TrapFlamethrower. Я бы так и сделал... Могу даже попробовать, но проблема в том, что я сейчас торчу в деревне с ноутбуком, на котором нет скайрима. Я не смогу проверить даже то, компилируется ли скрипт, не говоря уже о его работоспособности.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1167
| Тема: Вопросы по скриптам Papyrus
написано: 13 сентября 2018, 09:00
| Отредактировано: Dsion - 13 сентября 2018, 09:05
И я так понимаю, создавать и вставлять надо, к примеру, не Frostbite, а TrapFrostbite01, TrapFrostbite02... и так далее, до TrapFrostbite06?
Я даже не могу проверить, чем заполнены sLvlFlames1 итп. в ванильных ловушках. Подозреваю, что да, там разные spell разной мощности и, ясное дело, с разным названием. Но, теоретически, можно заполнить одинаковым любым spell. Если делать по-первому варианту, то: 1. Находим ванильную ловушку с этим скриптом. 2. Создаем её дубликат. 3. На скрипте дубликата очищаем 6 проперти типа sLvlFlamesX, заполненные какими-то заклинанием, и заполняем их одним своим. 4. Устанавливаем дубликат на пути какого-нибудь мирного путешествинника где-то и заходим в него. А если создавать свой скрипт и учить папирус, то TrapFlamethrower - не лучший референс... На мой взгляд, он безосновательно запутан и усложнен. Если тебе нужно только одно заклинание одного уровня, то скрипт получится раз в 6 короче. Ну давай, удачки.
Достойная трата времени... Я где-то месяц назад начал учиться рисовать мангу и постоянно подглядываю в Blender'e, как идут линии и ложатся тени. Моделировать тоже учился, но дальше уровня "начинающего" так и не продвинулся. Ладненько, удачи.
Если редактировать скрипт, то можно было бы убрать флаг "hidden" с проперти magicWeapon, заполнить её нужным заклинанием и выпилить строчку "magicWeapon = lvlWeapon" из конца функции ResolveLeveledWeapon(). Но это минимум. А вообще, там 5/6 кода можно выпилить.
1. ... Заменить одно из заклинаний с скрипте на своё (для одной конкретной ловушки или для нового типа ловушек). Например, выбираем "2 = flames". И вставляем своё заклинание в проперти sLvlFlames1, sLvlFlames2, ..., sLvlFlames6. В иделе, должно быть шесть разных заклинаний разной силы. Но можно заполнить и одинаковым
Для кого я вообще эту хрень писал?( А дальше я еще писал, что вариант это не изящный и лучше сделать свой скрипт...
Unlogin, чо-то у меня тоже никаких идей. Ну до того, что можно отменять эффект перка навсегда, если игрок сменит оружие, ты, наверное, додумался. Не совсем то, но лорно. Выпустил оружие из рук - разорвал связь. До того, что можно сохранять базовый ID тоже, наверняка, додумался. Большинство ванильных орудий имеют разные базовые id для разных типов зачарования. Но это будет давать сбой, если игрок наденет оружие такого же типа с таким же зачарованием. И в случае предметов, которые ирок сам заточил/зачаровал тоже будут сбои. Я бы так не делал. Ну еще жутко неудобный вариант, когда игрок должен выбросить оружие на землю (или на какой-то алтарь), чтоб зачаровать.
Больше нифига в голову не приходит... Я бы просто отменял эффект навсегда в случае смены оружие.
Я даже когда-то читал про один баг. В какой-то там ветке есть перк, делающий надетую на игрока бронь невесомой. Так вот этот перк делает невесомой не только надетую бронь, а и точно такую же, лежащую в инвентаре.