elrian2 Опубликовано 5 июня, 2019 Опубликовано 5 июня, 2019 Доброго времени суток! Пытаюсь сделать заклинание, которое заменит некоторые части головы персонажа определенной расы на другие. Проверка расы цели не срабатывает, так как скрипт не видит объект ElrianIorvethRace: Scriptname ElrianIorvethShowScar extends ActiveMagicEffect Race Property ElrianIorvethRace Auto Event OnEffectStart(Actor Target, Actor Caster) if (Target.GetActorBase().GetRace() == ElrianIorvethRace) Debug.Notification("It's Iorveth!"); else Debug.Notification("Not Iorveth!"); endif; endEvent Попробовала поэкспериментировать на ванильной расе: Scriptname ElrianIorvethShowScar extends ActiveMagicEffect Race Property BretonRace auto Event OnEffectStart(Actor Target, Actor Caster) Debug.Notification(BretonRace); Debug.Notification(Target.GetActorBase().GetRace()); endEvent На экран выводится: None [Race Помогите, пожалуйста, не могу понять, что я делаю не так
Azazellz Опубликовано 5 июня, 2019 Опубликовано 5 июня, 2019 05.06.2019 18:47:15, elrian2 сказал(-а):Помогите, пожалуйста, не могу понять, что я делаю не такЗачем тебе ActorBase?GetRace работает на актере напрямую.Т.е. просто Target.GetRace()
elrian2 Опубликовано 5 июня, 2019 Опубликовано 5 июня, 2019 05.06.2019 20:12:49, Azazellz сказал(-а): Зачем тебе ActorBase? GetRace работает на актере напрямую. Т.е. просто Target.GetRace() Взяла из ванильных исходников. Target.GetRace() тоже тестировала, работает идентично, но проблема в другом - почему раса не имеет тип Debug.Notification(BretonRace) - выводит None;
CISCO.:i:..:i:. Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 Прошу помощи - сделал скрипт который повесил на триггер и при входе в триггер опускается мост, а при выходе из триггера поднимается обратно - и всё работает как надо. Но мне этого недостаточно - нужно сделать так что бы мост опускался при входе в триггер, а поднимался только тогда - когда не только сам игрок покинет триггер но и все его спутники. Как я понимаю нужна какая то проверка на это - но не понимаю как это прописать. скриптObjectReference Property Drawbridge Auto Event OnTriggerEnter(ObjectReference akActionRef) if akActionRef == game.GetPlayer() as ObjectReference Drawbridge.PlayGamebryoAnimation("Backward", TRUE) endIf endEvent Event OnTriggerLeave(ObjectReference akActionRef) if akActionRef == game.GetPlayer() as ObjectReference Drawbridge.PlayGamebryoAnimation("Forward", TRUE) endIf endEvent
Azazellz Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 05.06.2019 20:21:21, elrian2 сказал(-а): Debug.Notification(BretonRace) - выводит None Потому что ошибка в том, что ты в нотификейшн посылаешь. Debug.Notification("Target Rase is: " + Target.GetRace()) Вот так должно сработать.
Azazellz Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 (изменено) 06.06.2019 05:19:54, CISCO.:i:..:i:. сказал(-а):Как я понимаю нужна какая то проверка на это - но не понимаю как это прописать. Сделай "счетчик", стартующий с нуля - просто int-переменную. Каждый раз, как кто-то заходит в триггер - прибавляй к ней 1. Каждый раз, как кто-то выходит - отнимай 1. В этом же ивенте выхода делай проверку этой переменной. Как опять будет ноль (все вошедшие - вышли) - делай свой код. Изменено 6 июня, 2019 пользователем Azazellz
I.L.Pron Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 06.06.2019 07:36:57, Azazellz сказал(-а): Сделай "счетчик", стартующий с нуля - просто int-переменную. Каждый раз, как кто-то заходит в триггер - прибавляй к ней 1. Каждый раз, как кто-то выходит - отнимай 1. В этом же ивенте выхода делай проверку этой переменной. Как опять будет ноль (все вошедшие - вышли) - делай свой код. Не оптимальное решение, которое может в некоторых случаях приводить к багу. К примеру, в тригер забегает злокрыс "счётчик" вырос на +1, ГГ убивает злокрыса и всё - твой скрипт повисает намертво, т.к. мёртвый злокрыс уже никогда из тригера не выберется и "счётчик" всегда будет на +1 больше. Поэтому, во избежание подобной ситуации, перед тем как увеличивать/уменьшать счётчик, надо проверять принадлежность зашедшего в тригер к фракции героя. Хотя и это тоже не оптимальный вариант, т.к. если завяжется бой у моста, ГГ вполне может призвать какое-нибудь существо, которое зайдёт в тригер и там сдохнет/анигилирует, увеличив при это счётчик на единицу, т.к. принадлежит фракции ГГ. В общем, всё зависит от того, где этот мост расположен и когда и как им будут пользоваться. Может простого счётчика действительно будет достаточно, а может надо будет сочинять кучу доп.проверок.
elrian2 Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 06.06.2019 07:27:19, Azazellz сказал(-а): Потому что ошибка в том, что ты в нотификейшн посылаешь. Debug.Notification("Target Rase is: " + Target.GetRace()) Вот так должно сработать. Решила проблему: забыла в Creation Kit сделать инициализацию объявленных в скрипте properties.
Azazellz Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 06.06.2019 14:18:47, I.L.Pron сказал(-а):Поэтому, во избежание подобной ситуации, перед тем как увеличивать/уменьшать счётчик, надо проверять принадлежность зашедшего в тригер к фракции героя. Это как бы подразумевается априори. Иначе триггер будет срабатывать на все, что ни попадя. Ну и левелдизайн тоже важен, да. 06.06.2019 14:35:01, elrian2 сказал(-а):Решила проблему: забыла в Creation Kit сделать инициализацию объявленных в скрипте properties. Хех.
elrian2 Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 06.06.2019 14:52:18, Azazellz сказал(-а): Это как бы подразумевается априори. Иначе триггер будет срабатывать на все, что ни попадя. Ну и левелдизайн тоже важен, да. Хех. Рабочий скрипт Scriptname ElrianIorvethShowScar extends ActiveMagicEffect Race Property ElrianIorvethRace Auto FormList Property ElrianIorvethHeadsList Auto Event OnEffectStart(Actor Target, Actor Caster) if (target.GetRace() == ElrianIorvethRace) Debug.Notification("It's Iorveth!"); Target.ChangeHeadPart(ElrianIorvethHeadsList.GetAt(0) as HeadPart); Target.RegenerateHead(); else Debug.Notification("No Iorveth!"); endif; endEvent Теперь другая проблема - изменения сохраняются только до перезагрузки игры. Но об этом и в документации указано - ChangeHeadPart работает стабильно только на ГГ, видимо придется искать обходной путь: через смену расы или подмену актера
CISCO.:i:..:i:. Опубликовано 6 июня, 2019 Опубликовано 6 июня, 2019 06.06.2019 07:36:57, Azazellz сказал(-а): Сделай "счетчик", стартующий с нуля - просто int-переменную. Каждый раз, как кто-то заходит в триггер - прибавляй к ней 1. Каждый раз, как кто-то выходит - отнимай 1. В этом же ивенте выхода делай проверку этой переменной. Как опять будет ноль (все вошедшие - вышли) - делай свой код. 06.06.2019 14:18:47, I.L.Pron сказал(-а): Не оптимальное решение, которое может в некоторых случаях приводить к багу. К примеру, в тригер забегает злокрыс "счётчик" вырос на +1, ГГ убивает злокрыса и всё - твой скрипт повисает намертво, т.к. мёртвый злокрыс уже никогда из тригера не выберется и "счётчик" всегда будет на +1 больше. Поэтому, во избежание подобной ситуации, перед тем как увеличивать/уменьшать счётчик, надо проверять принадлежность зашедшего в тригер к фракции героя. Хотя и это тоже не оптимальный вариант, т.к. если завяжется бой у моста, ГГ вполне может призвать какое-нибудь существо, которое зайдёт в тригер и там сдохнет/анигилирует, увеличив при это счётчик на единицу, т.к. принадлежит фракции ГГ. В общем, всё зависит от того, где этот мост расположен и когда и как им будут пользоваться. Может простого счётчика действительно будет достаточно, а может надо будет сочинять кучу доп.проверок. В общем как я понял без кучи проверок не обойтись? А жаль - сам я это не осилю (мозгов маловато) - придётся делать топорным методом - установлю задержку секунд на 10 думаю все спутники успеют за это время перебраться. Я то думал что можно это прописать как то просто - а фиг там!( В любом случае спасибо!
CISCO.:i:..:i:. Опубликовано 10 июня, 2019 Опубликовано 10 июня, 2019 Сам не справился - кто подскажет как сюда запихнуть wait на 10 секунд - Drawbridge.PlayGamebryoAnimation("Forward", TRUE) скриптObjectReference Property Drawbridge Auto Event OnTriggerEnter(ObjectReference akActionRef) if akActionRef == game.GetPlayer() as ObjectReference Drawbridge.PlayGamebryoAnimation("Backward", TRUE) endIf endEvent Event OnTriggerLeave(ObjectReference akActionRef) if akActionRef == game.GetPlayer() as ObjectReference Drawbridge.PlayGamebryoAnimation("Forward", TRUE) endIf endEvent
Azazellz Опубликовано 10 июня, 2019 Опубликовано 10 июня, 2019 10.06.2019 10:01:52, CISCO.:i:..:i:. сказал(-а):как сюда запихнуть wait на 10 секунд utility.wait (10.0)
CISCO.:i:..:i:. Опубликовано 11 июня, 2019 Опубликовано 11 июня, 2019 10.06.2019 12:50:53, Azazellz сказал(-а): utility.wait (10.0) Спасибо всё гуд!
T1m0n Опубликовано 30 июня, 2019 Опубликовано 30 июня, 2019 Решил поизучать скрипты и столкнулся с такой проблемой. PapyrusAssembler не хочет компилировать скрипты. Причём если взять скомпилированный скрипт, декомпилировать в *.pas и снова скомпилировать, то проблем нет. А если пытаться скомпилировать *.psc, выдаёт ошибку "Cannot open store for class "...имя скрипта...", missing file?". Пробовал как в creationkit, так и батником на скриптах из разных модов. Рекомендуемые моды для Skyrim SE/AE
Azazellz Опубликовано 30 июня, 2019 Опубликовано 30 июня, 2019 (изменено) 30.06.2019 10:33:04, T1m0n сказал(-а): Решил поизучать скрипты и столкнулся с такой проблемой. PapyrusAssembler не хочет компилировать скрипты. Причём если взять скомпилированный скрипт, декомпилировать в *.pas и снова скомпилировать, то проблем нет. А если пытаться скомпилировать *.psc, выдаёт ошибку "Cannot open store for class "...имя скрипта...", missing file?". Пробовал как в creationkit, так и батником на скриптах из разных модов. Сам скрипт было бы неплохо еще показать. Телепаты все в отпуске, считать напрямую некому. Изменено 30 июня, 2019 пользователем Azazellz
werr Опубликовано 30 июня, 2019 Опубликовано 30 июня, 2019 30.06.2019 10:33:04, T1m0n сказал(-а): Решил поизучать скрипты и столкнулся с такой проблемой. PapyrusAssembler не хочет компилировать скрипты. Причём если взять скомпилированный скрипт, декомпилировать в *.pas и снова скомпилировать, то проблем нет. А если пытаться скомпилировать *.psc, выдаёт ошибку "Cannot open store for class "...имя скрипта...", missing file?". Пробовал как в creationkit, так и батником на скриптах из разных модов. Тебе нужно распаковать исходники скриптов (среди них есть и базовые, в которых находятся все native-функции, что ты вызываешь в своем коде), а также файл с флагами для папируса. Все это лежит в Scripts.rar в папке Data. 1 A Random Dude's Story
T1m0n Опубликовано 30 июня, 2019 Опубликовано 30 июня, 2019 30.06.2019 11:39:20, werr сказал(-а):Тебе нужно распаковать исходники скриптов 30.06.2019 11:25:53, Azazellz сказал(-а):Сам скрипт было бы неплохо еще показать. Похоже дело было в том, что запускал CreationKit из ModOrganizer2. Сейчас попробовал напрямую запустить и всё стало нормально компилироваться. В любом случае спасибо за помощь. Рекомендуемые моды для Skyrim SE/AE
Azazellz Опубликовано 30 июня, 2019 Опубликовано 30 июня, 2019 30.06.2019 13:07:07, T1m0n сказал(-а):Похоже дело было в том, что запускал CreationKit из ModOrganizer2. Сейчас попробовал напрямую запустить и всё стало нормально компилироваться. В любом случае спасибо за помощь. Да, компиллер не работает из-под МО. Вообще из-под него моддить - фиговая идея. VFS накладывает слишком много ограничений.
Rh4eg4n Опубликовано 6 июля, 2019 Опубликовано 6 июля, 2019 (изменено) Всем доброго времени суток! Подскажите как сделать заклинание воскрешающие все трупы допустим в радиусе 200 и чтоб воскресшие сражались на стороне того кто их воскресил? Изменено 6 июля, 2019 пользователем Rh4eg4n
Azazellz Опубликовано 6 июля, 2019 Опубликовано 6 июля, 2019 06.07.2019 18:24:59, Rh4eg4n сказал(-а): Подскажите как сделать заклинание воскрешающие все трупы допустим в радиусе 200 и чтоб воскресшие сражались на стороне того кто их воскресил? А открыть и посмотреть ванильный спелл от Камня Ритуала? Как раз это самое он и делает. Яхз, нафига спрашивать то, что тебе уже дано самой игрой? 2
Rh4eg4n Опубликовано 6 июля, 2019 Опубликовано 6 июля, 2019 06.07.2019 18:39:47, Azazellz сказал(-а): А открыть и посмотреть ванильный спелл от Камня Ритуала? Как раз это самое он и делает. Яхз, нафига спрашивать то, что тебе уже дано самой игрой? Извините конечно, просто я не сталкивался с ним, знал бы тогда не спрашивал и спасибо Вам!)
mr Jyggalag Опубликовано 6 июля, 2019 Опубликовано 6 июля, 2019 06.07.2019 18:39:47, Azazellz сказал(-а): Яхз, нафига спрашивать то, что тебе уже дано самой игрой?О некоторых вещах можно не догадаться, а некоторых вообще не знать. Но да, погуглить тоже можно. 1
Azazellz Опубликовано 6 июля, 2019 Опубликовано 6 июля, 2019 06.07.2019 18:54:00, Rh4eg4n сказал(-а):Извините конечно, просто я не сталкивался с ним, знал бы тогда не спрашивал и спасибо Вам!) Нууу. Надо ж знать, что тебе игра предлагает, прежде чем ее моддить начинать =) Тем более что разработчики сами тут помогают - почти все скрипты в игре имеют комментарии, например. 1
werr Опубликовано 7 июля, 2019 Опубликовано 7 июля, 2019 06.07.2019 19:12:05, Azazellz сказал(-а):Нууу. Надо ж знать, что тебе игра предлагает, прежде чем ее моддить начинать =) Это была единственная причина, по которой я прошел в свое время четвертый Фоллаут. A Random Dude's Story
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти