anton, попробуй мою лодку: http://rghost.ru/53777742 она то точно работает. Запускай на лодку TranslateTo() к дальнему маркеру с небольшой скоростью, и прыгай в неё. Конечно, она проходит сквозь другие статики, но на мобильные объекты работает с коллизией. Хотя, так и должно быть, ведь в самом Скайриме статик со статиком не могут взаимодействовать, движок на это не рассчитан/не умеет, да и не должен, на коллизию реагируют только мобильные объекты.
******* anton, у меня в доме ещё и ковёр такой сделан, под ним люк скрывается, так когда его сдвигаешь, то наибольшую радость это доставляет кошаку, он на нём катается, очень прикольно смотрится. Кстати, сам ковёр сделан вообще "активатор", а не моваблестатик, и коллизия двигается вместе с самим ковром.
******* ******* Пы.Сы. Я бы мог выложить этот мод со всеми этими "наворотами", но там проблема - не могу найти девчонок на озвучку, мод то "компаньон", поэтому озвучка просто необходима, а так мод уже готов (осталось чуточку доделать одежду).
Вот только если просто стоять на статике во время движения, то ГГ начинает трясти как паралитика вверх-вниз. Но если в это время двигаться, то анимация остаётся нормальной. Наверное это так в игре "инверсная кинематика" ног действует, или скорее всего движок начинает считать, что я падаю и пытается проиграть анимацию приземления. (т.к. мой камень по диагонали вниз спускается). Интересно можно ли его будет как то обмануть ...
Можно уменьшить скорость камня. Можно на момент нахождения на камне и его движения привязать коллизию ГГ к камню SetVehicle(камень). (эту команду надо прописывать самой последней, иначе ГГ может не привязаться к камню) При этом горизонтальное перемещение ГГ будет только в плоскости камня, точнее в плоскости той точки на момент привязки. Т.е. бугры/ямки и другие неровности камня ГГ будет игнорировать.
интересно, не думал, что так можно, считал что для этого камень должен быть типа "лошадь" и иметь нод в НИФ-е для привязки, но попробую...
Подругой Вильи она не будет, она дружит только с Лидией, а если обнаружит присутствие любого другого компаньона - сразу уйдёт, в гареме жить не будет, да и делить своего ГГ с кем-то тоже не станет. Далее по теме: в этом моде используется своя анимация и для её работы приходится привязывать НПС или ГГ к объектам. Так я просто создаю в нужном месте XMarkerHeading и к нему привязываю. Т.е. НПС можно привязать вообще к любому объекту. По окончании процесса просто удаляю этот маркер.
Так вот и ты можешь в верхней точке прыжка создать маркер и привязать к нему ГГ, так он не станет подать, пока не отвяжешь от маркера.
У драконов свой принцип передвижения, они не навмешами пользуются, а картой высот данной местности. Поэтому сам принцип драконов не применить к ГГ/НПС.
Как сделаны те моды - не знаю. Можно применить для левитации/полёта простой (относительно) способ: привязать ГГ/НПС к маркеру, (или к модели дракона) и двигать этот маркер и ГГ командой TranslateTo(). Цель этой команде можно по разному задавать: или постоянно перемещать целевой маркер вперёд перед ГГ, или вычислять координаты по камере+углу_зрения+и т.д. Нечто подобное у меня сделано для управления лодкой. (но без привязки к ней ГГ, это вариант я потом попробую реализовать)
ГГ-дракон, скорее всего сделан проще - командой переключается камера на дракона и отдаётся управление драконом игроку вместо персонажа ГГ, это всего пару дефолтных команд. Сам же ГГ визуально отключается и периодически переносится/подтягивается к дракону, для правильной загрузки локации. Возможно, так там и сделано, это один из вариантов, а как именно они сделали - я не знаю.
AleksTirex, попробовал я SetVehicle() - она привязала ГГ к камню (с низу) или к лодке (нормально), но в обоих случаях без возможности двигаться (хотя анимация движения есть но ГГ стоит при этом на месте)
Привязка идёт к главному ноду модели, и если надо привязать к другой координате, то надо изменить ниф: коллизию и видимую часть сдвинуть, т.к. основной нод сдвинуть без Макса нельзя.
Есть ещё особенность: ГГ не прилипает к коллизии маркера (как было с "Movable Static"), а фиксируется на той высоте, на которой сработала команда SetVehicle().
Да, всё правильно, так и должно быть, я именно это и писал: "При этом горизонтальное перемещение ГГ будет только в плоскости камня, точнее в плоскости той точки на момент привязки." А возможная причина - отсутствие коллизии у объекта (маркера). Как мне кажется, движок при этой команде попросту назначает коллизию целевого объекта на привязываемый объект (актёру). Ведь у актёров нет своей коллизии, она "назначаемая" (в модели актёров нет коллизии), и при смерти её тоже нет. Так вот, если у камня убрать коллизию вообще (из нифа), то возможно, ГГ сможет перемещаться как и в случае с маркером. Этот эффект можно тогда будет применить для любых "лифтов", и для твоего камня тоже. Хотя, тогда придётся и самого ГГ "транслировать" вместе с камнем, да и "умный" ГГ сможет выбежать за пределы лифта/камня, стены то его не остановят...
************** nepewka, ничего не понятно. Объясни "на пальцах" то, что ты хочешь получит в итоге. (например, ГГ сильно ударили, а ему пофиг и здоровье не упало)
У него 5000 здоровья, при получении смертельного урона срабатывает эффект, добавляющий ему 5000 здоровья от 0. (желательно без задержек и выхода из боя) И так ещё раз, после того как он якобы умрет.
Скрипт вешается на Алдуина (тип Actor) или на алиас с Алдуином (тогда добавить GetActorRef()):
Alex, чтобы контролировать кол-во добавляемого здоровья в скрипте вместо GetBaseAV("Health"), привязать int с числом? скажем вместо базового здоровья, добавить определенное число 3000, 4000
Можно и цифры использовать. GetBaseAV("Health")- это чтобы не писать цифры, а восстанавливать здоровье на 100% от базового, ведь неизвестно, какие моды как смогут изменить базовое значение здоровья. В таком варианте будет полное исцеление вне зависимости от изначального здоровья дракона.
nepewka, а событие OnEffectStart в каком скрипте, в каком именно маг.эффекте? Если в том эффекте, который наносит урон, то поздно давать уязвимость, эффект то уже отработал и нанёс урон. Если в другом маг.эффекте, то сработает уязвимость, если она будет наложена на актёра раньше, чем эффект с уроном.
Как срабатывают эффекты в эвенте? По своей очереди или же одновременно?
Наверно, ты имел в виду не эффекты, а команды. Всегда и все команды в скрипте выполняются по очереди сверху вниз. Это справедливо для любой последовательности/цепочки команд. Если во время исполнения этой цепочки в скрипте запустить другую цепочку событием или функцией, то эта новая цепочка будет исполнятся сама по себе и не зависит от первой цепочки. Вот тогда и только тогда, смогут выполняться команды одновременно, и только из разных цепочек/последовательностей.
************ nepewka, смени команду akTarget.DamageAV("FireResist", WeakFire), она не будет давать уязвимости к огню.
DamageAV - это повреждение параметра, т.е. его уменьшение. Лучше кастонуть спеллом на уязвимость к огню, есть такие.
nepewka, ID сейчас не помню. Ты открой СК и найди спеллы или эффекты с названием "Уязвимость к огню" (сортировка по столбцу с названиями, и далее по алфавиту легко найти).
Можешь даже и не кастовать отдельное заклинание, а сделать в основном/первом/скоростном маг.эффекте эту уязвимость. Тогда сделай длительность спелла/эффекта 2-3 сек. Ты просто открой дефолтный эффект с уязвимостью и посмотри как именно сделана такая уязвимость, и тоже самое сделай на своём эффекте.
Это точно будет работать и давать уязвимость раньше, чем файерболт, что тебе и надо.
Если MGEffect это маг.эффект, то работать не будет, а если физический объект, то будет.
Поскольку используются алиасы, то тип свойства Alias надо заменить на ReferenceAlias. Если автор хотел вкл/выкл именно сами объекты и они не прописываются в алиасы, тогда так:
ObjectReference Property MGEffect Auto ObjectReference Property SGDoor Auto ... SGDoor.Enable() MGEffect.Enable() ...
FreiEngel, твой мод только на сам дом? Тогда вскрой мод на "благословение" и посмотри пакеты сна: какие там настройки и условия. НПС может не ложиться спать при старте пакета сна, если: собственность кровати чужая, если в пакете указана конкретная кровать или её параметры и они не совпадают, если на кроватях стоят некорректные кейворды (например есть FurnitureSpetial), если изменены модели кроватей (и неправильно сделаны маркеры фурнитуры), если сами кровати в СК сделаны неверно, если есть проблемы с файлами анимации сна, если в СК изменена анимация кроватей (т.е. анимация не может запуститься по её условиям), если в пакете сна указана цель не Bed, а алиас и он оказался пустой (не инициализирован по какой-то причине), что бы дети спали галочки на детской кровати Can Use Child быть не должно.
Если НПС не спят только в твоём доме, то анимацию можно не проверять. Если НПС ночью стоят столбом на месте, то запуск пакетов сна работает. Привязывать НПС к конкретной кровати лучше кейвордами или собственностью, это зависит от построения мода благословения.
Для поиска проблемы надо начать с отключения привязки и не обязательных условий на кроватях.
@perture, к тебе технический вопрос: судя по двум скелетам, для НН ты просто переключаешь расу ГГ, в итоге переключаются скелеты. Так вот как происходит этот процесс, автоматически или вручную? Если автоматически, то как это срабатывает: по типу обуви или по другому признаку? И что будет, если я (игрок) надену свои (мной сделанные) туфли на каблуках? Т.е. как дела с совместимостью на подобную обувь.
Kris†a™, понятно. И не эффективно, увы. Вешать на всю обувь скрипты - ни есть хорошо.
Если позволите, дам совет: не надо вешать скрипты на всю обувь, достаточно одного скрипта на алиасе, а вот назначать на этот алиас можно любую обувь, хоть по списку форм-листу, хоть по кейвордам, хоть по проверке нифа на нужный нод (HasNode("myNode")), да по любому признаку. Последний вариант самый предпочтительный, т.к. этим проверяется сам ниф/модель обуви.
Kris†a™, вот ты сама моделишь и, возможно, знаешь, если в обуви на каблуках специфические ноды? Если есть, и есть какой-то стандарт на их названия, то это решит проблему совместимости. Если нет, то можно сделать "свой стандарт" на свою обувь, и тогда никакой адаптации не надо будет. Если надо адаптировать какую-то обувь под этот мод, то достаточно чуть изменить только ниф - прописать название нода по своему стандарту, и не надо тогда отдельных патч-модов и доп.скриптов.
Я так думаю, что @perture понял мою мысль о скриптах, а Kris†a™ о нифах.
Последний вопрос: данный мод вообще не поддерживает ничего, что не адаптировано под него? Я имею в виду одежду.
Тогда для каждой шмотки нужен патч-мод, отдельный ESP, и для каждого мода, где используется какая-то одежда - тоже нужен патч. Это так? А модов/ESP/ESM в игре может быть только 255...
Вот я делаю мод, в нём по сюжету на ГГ надевается одежда - как с этим быть, нужна адаптация? И нужна таковая для всех подобных модов?
nepewka, в одном спелле могут быть только однотипные эффекты. Если спелл типа "на цель", то и все эффекты там будут "на цель". У тебя этот эффект "на себя" - переделай его "на цель". Точнее не его переделывай, а задублируй этот и уже крути дубликат, дабы не испортить дефолтный эффект. А так же сделай, как пишет сергей007788.
Хочу точно определить кол-во хп у нпц, будь то охранник или вызванный огненный атронах. У меня 24 уровень, есть ли формула?
Полистай официальный сайт СК, там есть такая формула. Можно и просто посчитать: возьми посмотри класс НПС, открой этот класс, там указано, сколько и чего повышается за один уровень. У каждого класса разное поднятие здоровья/магии/силы. Перемножь показатель/коэффициент здоровья на уровень НПС и прибавь стартовый показатель здоровья. Так же прибавь бонусы от способностей, если они есть.
Или узнай в игре через консоль: тырк по НПС и команда getav health В скрипте почти так же: GetAV("Health")
Я вот хочу перенести некоторые агрегаты из Хертфайра (печь и мельница), но кроме моделей и текстур там есть ещё и анимация (совать лопатой пирожки в печь). Она привязана к модели или её нужно извлекать из другого места? (типа папка Animations) и как её привязать к модели?
Есть два способа: 1. использовать тот аддон как мастер и просто использовать тот агрегат, или сделать свой такой на основе того нифа с полным сохранением всех кейвордов. 2. если без мастер-файла, тогда надо сделать свою фурнитуру на том нифе, взять из того аадона анимацию (файлы), сделать свою анимацию (ID) по аналогии с анимацией из аддона. Для создания своей анимации фурнитуры нужен FNIS версии не ниже 5.01 (лучше 5.02). Принцип создания бехавиора и обновления стандартный для FNIS.
Сам принцип запуска анимации для фурнитуры: при активации фурнитуры возникает "событие" ActionActivate - ActivateRootChar. Далее генерится событие анимации, чьё условие совпадёт с условиями объекта и НПС: тип фурнитуры, кейворды, статус НПС (GetSit) и т.д. И запускается файл анимации.
У фурнитуры должно быть не менее трёх файлов анимации: старт (сесть), ожидание/работа (сидеть) и конец (встать). По сути, почти вся фурнитура - это стул (тип Sit), и различается только кейвордами, вот за счёт них и выбирается нужная анимация. Поэтому на своей фурнитуре должен стоять свой уникальный кейворд, помимо необходимых (FurnityreSpetial и т.д.).
НО! Добавленная анимация фурнитуры через FNIS очень глючная. Слишком большой шанс пропуска стартовой и финальной анимации (~20-50%), анимация старта и финиша пропускается и срабатывает только анимация работы (сидеть), т.е. смотрится довольно некрасиво.
DarkVetal, FNIS создаёт новый мастер-бехавиор файл взамен дефолтного, в который добавляет твою анимацию. В общем, или использовать FNIS и тебе и всем игрокам с твоим модом, или забыть о любых новых анимациях. Третьего варианта не существует (почти, но FNIS нужен по любому).
anton, "Idle Marker" на ГГ не работает, если не отобрать управление и не дать АИ (выполнять пакеты). ГГ по дефолту что-либо активирует только "мышкой".
"карта высот", а зачем? Она никак не поможет заставить летать актёров. Но есть вариант: делаешь дракона, а он может летать, и назначаешь ему свой скин (ты в Максе умеешь работать, поэтому сможешь сделать такое). Можно даже в процессе игры менять скины, тем самым можно "подменять" любого актёра на своего дракошу с заменой скина, типа это сам тот актёр полетел. Конечно, можно скриптами заставить "летать/левитировать", но это совсем не то.
nepewka, можно: OnItemAdded, и далее проверка итема и добавление/применение на ГГ аналогов зачарования. Но это 100% чит (!), т.к. можно будет применить все зачарования из инвентаря, хоть сотню, хоть тысячу. Тогда проще TGM...
anton, чтобы дракон мог летать, у него в пакете должна быть процедура Orbit, вот эта процедура и заставляет лететь дракона. (это типа Travel/Sandbox, но только для полёта)
Конечно, управлять "куда и как" должен лететь дракон нельзя, как в Sandbox нельзя указать "как и куда" должен двигаться/ходить НПС. Но можно динамически менять TargetLocation - центр полёта, тем самым как бы направляя дракона (через алиас, а его всегда можно сменит/изменить).
Добавлено (13 Апреля 2014, 16:04) --------------------------------------------- ***************************
У меня просьба ко всем - есть у кого сохранки: перед освобождением дракона в Драконьем пределе, и перед квестом соратников, где надо идти в Древний каирн и там соратник превращается в оборотня.
Сойдут любые расы и задействованные моды. Если у кго есть такие сохранки - сбросьте мне, пожалуйста.
В Древний каирн ведёт Фракас за обломком секиры, там ГГ попадает за решётку и видит сцену, как Фракас превращается в оборотня и всех "Серебрянноруких" кусает. Вот мне надо сохранка до этого похода, чтобы проверить правильно ли мой компаньон работает в этом квесте, ведь там квест соратников подменяет компаньона на Фракаса (хоть мой компаньон и не использует дефолтный квест компаньонов, то терпеть не может конкурентов, типа ревнует).
********* ГГ тоже может пользоваться пакетами, поэтому можно сделать как с НПС, так и с ГГ.
Просто запустить "SetPlayerAIDriven()" и пакет начнёт выполнятся ?
Не совсем. После этой команды назначаешь ГГ в свой алиас своего квеста (который к этому времени уже запущен) - AliasPlayer.ForceRefTo(Game.GetPlayer)
В этом алиасе есть окно для пакетов, в него в СК добавляешь свой пакет. Когда на алиас назначится НПС/ГГ, то заработает этот пакет на этом НПС/ГГ. Сам же пакет делаешь собственностью этого квеста, тогда в параметре "цель" можно будет использовать алиас из этого квеста. Этот алиас так же назначается такой же командой, но только маркер, который и будет целью пакета (он создаётся у ГГ и дальше просто передвигается). Этот маркер можешь двигать как хочешь, и в теории (!) дракон должен следовать за этим маркером. Управлять положением маркера при отсутствии управления персонажем просто - OnKeyUp / OnKeyDown, и дальше ты сам знаешь как.
По окончании "одраконивания" просто очищаешь алиас AliasPlayer.Clear(), удаляешь этот маркер и очищаешь его алиас, возвращаешь ГГ в своё состояние SetPlayerAIDriven(false), и меняешь расу.
*********** Как себя поведёт процедура Orbit на изменение координат цели я не знаю, но все основные процедуры адекватно на это реагируют.
**************** **************** anton, спасибо за сейвы!!!
nepewka, не мучайся, НПС используют только заклинания, крики и абилки. При этом крики добавляться скриптом не могут - словишь СТД. Заклинания должны быть уровнем использования ниже, чем уровень НПС (Minimum Skill Level < Level_NPC) и надо выставить школу заклинания (для правильной работы АИ). Тип каста должен быть только на руки: L, R, L+R. Если заклинание возможно "с двух рук", то в CombatStyle должна быть галочка Allow Dual.
Если очень хочется дать НПС талант, то сделай заклинание на основе этого таланта и дай его НПС.
anton, если алиас назначаемый, то необходима галочка Optional, а также пустая позиция SpecificReference (но не уникальный актёр).
Я обычно создаю маркеры через PlaceAtMe(), потом назначаю его в алиас как и НПС/ГГ (см. выше).
Пакет правильно.
************** В скрипте: ГГ назначен правильно, маркер не очень, т.к. не понятно, зачем назначать movablestatic, да ещё и который находится чёрт знает где, здесь лучше использовать XMarker (создаёшь и назначаешь на алиас точно так же, как и с ГГ). Если movablestatic нужен для чего-то, то пусть будет (и имей в виду, что подвижный movablestatic не транслируется).
Добавлено (14 Апреля 2014, 00:15) --------------------------------------------- anton, и ещё, нельзя делать генерируемые/создаваемые алиасы, если они привязаны к назначаемым алиасам. Квест не запустится, ведь объект, у которого или в котором должен сгенерироваться новый объект/алиас не существует на момент старта квеста, и он из-за этого не может создаться, и алиас, соответственно, не может заполнится.
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №329
| Тема: Вопросы по скриптам Papyrus
написано: 18 апреля 2014, 12:39
| Отредактировано: AleksTirex - 18 апреля 2014, 12:45
AleksTirex, приветствую! Можно как то сделать, чтобы дистанционное заклинание срабатывало на НПС у которого установлено свойство Ghost? Или как то отслеживать его попадание в НПС?
Можно использовать возвратный принцип заклинания.
Делается алиас ГГ в своём квесте (или по другому вешается скрипт на ГГ), на него вешается скрипт. Но сперва надо сделать свой Explosion. Он должен быть "невидимым", т.е. без визуализации, и с нужным радиусом дкйствия, чтобы радиус был не меньше предполагаемого срабатывания/расстояния от ГГ до цели, например 4000-9000. В своём маг.эффекте заклинания против призраков добавляется этот Explosion, делается площадь (Area) срабатывания. Или в Projecticle этого маг.эффекта (делается свой Projecticle) добавляется тот свой созданный Explosion. Подойдёт любой вариант.
Explosion Property myExplosion auto ; свой сделанный Explosion
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) if akSource as Explosion == myExplosion ObjectReference closestExplosion = Game.FindClosestReferenceOfTypeFromRef(akSource, Game.GetPlayer(), 1500.0) if closestExplosion Actor akActor = Game.FindClosestActorFromRef(closestExplosion, 50.0) if akActor.IsGhost() ; akActor - ближайший актёр*призрак к месту попадания снаряда endif endif endif endEvent
********************************** 1500.0 - радиус обнаружения взрыва, т.е. максимальное расстояние от ГГ до цели, оно равно (<=) радиусу/размеру Explosion. 50.0 - радиус поиска ближайшего актёра от центра взрыва, настраивается по желанию. ***********************************
Принцип работы: при касте заклинания на цель Projecticle сработает/врежится в НПС, даже если тот Ghost, произойдёт взрыв и этот взрыв отработает на ГГ (событие OnHit()). Этим событием определим место взрыва, и найдём ближайшего актёра в точке взрыва. На поиск актёра не повлияют ни его состояние, ни какие другие факторы. Далее... уже то, что придумает автор что именно делать с этим найденным актёром.
У меня такой вопрос, если в скрипте ввести переменную, int X, Затем при определенных события присваивать этой переменной нужные значения. Будут ли эти значения стабильны, то есть, не обнулятся ли они при респауне.
При респауне объекта переменные в его скрипте обнулятся/сбросятся. Если надо сохранить данные, то лучше их хранить в невыключаемом квесте.
************************
LordVadim, да, действительно, хоть снаряды и "разлетаются визуально" при попадании в призрака (Огненная стрела, Ледяной шип), но взрыв происходит только на объекте, где останавливается снаряд, и это не призрак. Я этого эффекта раньше не замечал, каюсь.
Тогда есть другой вариант, но только уточни, это твои призраки или неизвестные и рендомные? И как ты насчёт SKSE?
В общем, принцип такой: на НПС вешается абилка со скриптом, там событие OnHit(). На призраках абилки работают, хит тоже срабатывает (проверил в игре ). При касте ГГ и попадании в призрака срабатывает хит в абилке НПС, и дальше проверка на агрессора и тип снаряда (если надо), и далее - любое нужное действие. Раздавать абилки можно в СК, если НПС твои, а если рендомные чужие, то динамически. Сама раздача тоже может быть по разному: или постоянное сканирование, или старт сканирования при экипировки магии (тут тоже есть разные способы).
При этом снаряд не остановится и полетит дальше (ведь это призрак) и может попасть во второго, третьего и т.д. призрака. Если это не критично, то ничего далее делать не надо, если нужен только один первый призрак, то надо тогда вводить общую обработку хитов, например в алиасе ГГ.
Удобнее всего это всё делать с SKSE, но можно и без него. Если принцип понятен и подходит, то пробуй, возникнут сложности - распишу подробнее, и сами скрипты тоже.