• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя MemoriaVetusta
MemoriaVetustaOffline
Сообщение №961
написано: 18 апреля 2014, 15:12
| Отредактировано: MemoriaVetusta - 18 апреля 2014, 15:20
LordVadim, возможно, для Projectile нужно указать слой столкновений (Collision Layer)... только какой? Может быть, это "L_LIVING_AND_DEAD_ACTORS"? Но тогда снаряд будет пролетать через все остальное... если не создать новый слой столкновений, где указать, с какими слоями может сталкиваться снаряд.
Возможно ли реализовать такое? Чтобы при переключении стадии, появлялся предмет в рандомных местах(например: может на столе появиться, а может на полу или полке).
LordVadim, а как должно действовать заклинание? У меня есть идея... некая.
Суть в следующем: ГГ выпускает по НПС заклинание на цель. У НПС включено свойство Ghost и заклинание пролетает мимо. А мне нужно получить референс этого НПС. Как это сделать не отключая свойство Ghost?
Изменение репутации для пользователя MemoriaVetusta
MemoriaVetustaOffline
Сообщение №966
написано: 18 апреля 2014, 19:13
| Отредактировано: MemoriaVetusta - 18 апреля 2014, 19:24
LordVadim, может, вместо Aim попробовать Target Actor? Тогда надо указывать Explosion, а не Projectile. Правда, неизвестно, будет ли призрак считаться целевым актером, если, согласно описанию флага Is Ghost, "не действуют эффекты попадания и события попадания".
Хм... а ты не пробовал с L_COLLISIONBOX? В описании слоя говорится, что задает слои столкновения для фантомов.
LordVadim, может, вместо Aim попробовать Target Actor? Тогда надо указывать Explosion, а не Projectile. Правда, неизвестно, будет ли призрак считаться целевым актером, если, согласно описанию флага Is Ghost, "не действуют эффекты попадания и события попадания". Хм... а ты не пробовал с L_COLLISIONBOX? В описании слоя говорится, что задает слои столкновения для фантомов.
Не срабатывает.
Изменение репутации для пользователя MemoriaVetusta
MemoriaVetustaOffline
Сообщение №968
написано: 18 апреля 2014, 19:37
| Отредактировано: MemoriaVetusta - 18 апреля 2014, 19:41
LordVadim, если надо любой ценой узнать референс, можно задать активацию заклинания "на себя". У меня идеи кончились. Одно ясно: если снаряд никак не заставить попасть в НПС, значит, вся идея с айм-заклинанием гибнет на корню.
В качестве альтернативы можно взять заклинание с небольшим радиусом взрыва, чтобы игрок стрелял заклинанием хотя бы примерно в точку местонахождения НПС (ему под ноги).
Nothing is...
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №969
написано: 18 апреля 2014, 19:43
| Отредактировано: LordVadim - 18 апреля 2014, 19:46
если снаряд никак не заставить попасть в НПС, значит, вся идея с айм-заклинанием гибнет на корню.
Заставить то можно, сняв свойство Ghost, но когда поблизости от ГГ сотня НПС у которых надо снять свойство, то даже на моём, не слабом, компьютере эта процедура занимает 4 - 5 секунд. Я надеялся найти другой способ. Может AleksTirex что нибудь подскажет?
Изменение репутации для пользователя MemoriaVetusta
MemoriaVetustaOffline
Сообщение №970
написано: 18 апреля 2014, 19:48
| Отредактировано: MemoriaVetusta - 18 апреля 2014, 19:52
LordVadim, если задать каст на себя, но взрывом искать актера со свойством Is Ghost, я это имел в виду... Мне кажется, предложенная альтернатива была бы хорошей идеей (т.е. под ноги НПС).
LordVadim, если задать каст на себя, но взрывом искать актера со свойством Is Ghost, я это имел в виду...
Это сработало бы если бы НПС-призрак был бы один, а если их несколько и они стоят рядом друг с другом, а определить надо того, в которого целится ГГ...
Изменение репутации для пользователя MemoriaVetusta
MemoriaVetustaOffline
Сообщение №972
написано: 18 апреля 2014, 19:52
| Отредактировано: MemoriaVetusta - 18 апреля 2014, 19:55
LordVadim, а, так ты же не сказал, что тысячи их... Все же, подумай над предложенной альтернативой, и еще мне кажется, что ты пишешь посты быстрее, чем я произвожу в своих редактирование...
Nothing is...
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №973
написано: 18 апреля 2014, 20:08
| Отредактировано: LordVadim - 18 апреля 2014, 20:12
У меня такой вопрос, если в скрипте ввести переменную, int X, Затем при определенных события присваивать этой переменной нужные значения. Будут ли эти значения стабильны, то есть, не обнулятся ли они при респауне. К примеру. На нпк висит скрипт, ГГ подходит к нпк, активирует нпк и переменной Х, присваивается значение 5. далее гг покидает локацию, и через месяц возвращается, сохраниться ли это значение 5 или оно обнулится после респауна? Для моей задумки глобальная переменная не подходит и мне важно знать, как будет вести себя обычная переменная.
сергей007788, смотря кем именно будет выступать у тебя переменная Х. Восстанавливающиеся значение или нет. Если нпц умрет, после респауна у него будут стандартные значения из Астоr, пока ты снова не активируешь скрипт
У меня такой вопрос, если в скрипте ввести переменную, int X, Затем при определенных события присваивать этой переменной нужные значения. Будут ли эти значения стабильны, то есть, не обнулятся ли они при респауне.
При респауне объекта переменные в его скрипте обнулятся/сбросятся. Если надо сохранить данные, то лучше их хранить в невыключаемом квесте.
************************
LordVadim, да, действительно, хоть снаряды и "разлетаются визуально" при попадании в призрака (Огненная стрела, Ледяной шип), но взрыв происходит только на объекте, где останавливается снаряд, и это не призрак. Я этого эффекта раньше не замечал, каюсь.
Тогда есть другой вариант, но только уточни, это твои призраки или неизвестные и рендомные? И как ты насчёт SKSE?
В общем, принцип такой: на НПС вешается абилка со скриптом, там событие OnHit(). На призраках абилки работают, хит тоже срабатывает (проверил в игре ). При касте ГГ и попадании в призрака срабатывает хит в абилке НПС, и дальше проверка на агрессора и тип снаряда (если надо), и далее - любое нужное действие. Раздавать абилки можно в СК, если НПС твои, а если рендомные чужие, то динамически. Сама раздача тоже может быть по разному: или постоянное сканирование, или старт сканирования при экипировки магии (тут тоже есть разные способы).
При этом снаряд не остановится и полетит дальше (ведь это призрак) и может попасть во второго, третьего и т.д. призрака. Если это не критично, то ничего далее делать не надо, если нужен только один первый призрак, то надо тогда вводить общую обработку хитов, например в алиасе ГГ.
Удобнее всего это всё делать с SKSE, но можно и без него. Если принцип понятен и подходит, то пробуй, возникнут сложности - распишу подробнее, и сами скрипты тоже.
отправлять предмет к одному из них случайным образом.
Вот это меня и интересует, я просто не могу понять как. Допустим у меня есть 4 яблока расположенных в игровом мире, но все они выключены(Initiality disabled). Мне нужна функция которая будет енаблить одно из них случайным образом, при переключении стадии квеста.
Удобнее всего это всё делать с SKSE, но можно и без него. Если принцип понятен и подходит, то пробуй, возникнут сложности - распишу подробнее, и сами скрипты тоже.
AleksTirex, спасибо! После выходных попробую разобраться. НПС - мои. Без SKSE пока удавалось обходиться и не хотел бы его подключать без крайней необходимости.
LordVadim, если НПС твои, то всё упрощается - вешай скрипт с хит прямо на НПС.
*********************
nepewka, добавлять актёрам перки нельзя, замени действие перков маг.эффектами с похожими результатами. Мне сейчас совсем нет времени заняться вопросом перков, возможно, потом займусь.
**********************
AveDarkness, сделай свойство-массив, назначь в нём все свои яблоки, и рендомно включай одно из них:
ObjectReference[] Property akAple auto ; при создании свойства ставишь галочку Array и назначаешь все свои яблоки
В теле/окне стадии квеста пишешь эти команды:
int irandom = Utility.RandomInt(0, akAple.Length - 1) akAple[irandom].Enable()
При срабатывании стадии включится одно произвольное яблоко.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №982
написано: 19 апреля 2014, 19:35
| Отредактировано: nepewka - 19 апреля 2014, 19:43
AleksTirex, помоги пожалуйста с написанием скрипта.
Обьект - пассивная способность, с постоянным эффектом. Эта способность может быть как и у игрока, так и у нпц.
Цель - создать новый эффект, подобный стандартным эффектам уязвимости (Weakness), но который бы не затрагивал их.
Пример - актёр, владеющий этой пассивной способностью получает на 20% больше урона с любых заклинаний, которыми в него атакуют. В нас кинули фаерболл на 40 урона, после срабатывания скрипта этой способности до нас дошло на 20% больше = 48 магнитуды. Это хоть в теории возможно?
Может быть как то задействовать SetNthEffectMagnitude? Хотя он же работает только в тех эффектах, от которых сам исходит. Понимаю, что реализовать будет очень тяжело из за массовости. Была у меня идея создать формлист, закинуть туда все спеллы на которых это будет работать и сделать им всем SetNthEffectMagnitude *1.2, но это опять же будет работать только для тех спеллов, которые исходят от нас, плюс противоречит работе уязвимости, которая должна быть на цели применения, а не на нас. Но необязательно для всех спеллов, хотя бы для основных заклинаний школы разрушения он бы работал - было бы чудесно!
Принцип: при попадании заклинания на НПС срабатывает OnHit(), в котором проверяется: попало именно заклинание, кастовал не сам НПС, враждебное, школа разрушения. Далее считывается кол-во эффектов и записывается магнитуда каждого эффекта в массив (10 - этого хватит, т.к. больше 10 эффектов не бывает). Далее каждый такой эффект получает магнитуду 20% от номинала. Когда все эффекты изменены НПС кастует этим спеллом сам на себя, т.к. после попадания на НПС заклинания его уже бесполезно изменять, а тут НПС кастует уже изменённым заклинанием. Потом все эффекты этого спелла взвращаем в исходное значение.
Получается второй каст заклинания с силой в 20% от исходного, что и требовалось. Работает только на заклинания и оружие (посохи), зачарование, яды не действуют.
float[] aamagnitude
Event OnEffectStart(Actor akTarget, Actor akCaster) aamagnitude = new float[10] endEvent
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) Actor akSelf = GetTargetActor() if akSource as Spell && akAggressor as Actor != akSelf Spell akSpell = akSource as Spell if akSpell.IsHostile() int numEffects = akSpell.GetNumEffects() int index = 0 While index < numEffects MagicEffect effect = akSpell.GetNthEffectMagicEffect(index) if effect.GetAssociatedSkill() == "Destruction" float magnitude = akSpell.GetNthEffectMagnitude(index) aamagnitude [index]= magnitude magnitude = magnitude * 0.2 ; ==20% akSpell.SetNthEffectMagnitude(index, magnitude) endif index += 1 endWhile akSpell.Cast(akSelf, akSelf) Utility.Wait(0.2) index = 0 While index < numEffects MagicEffect Reffect = akSpell.GetNthEffectMagicEffect(index) if Reffect.GetAssociatedSkill() == "Destruction" akSpell.SetNthEffectMagnitude(index, aamagnitude[index]) endif index += 1 endWhile endif endif endEvent
******************* В игре не проверял, но компилиться должно. (нужен SKSE)
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №984
написано: 20 апреля 2014, 00:11
| Отредактировано: nepewka - 20 апреля 2014, 00:16
AleksTirex, такс. Вообщем проверил все на работоспособность.
Создал Способность с постоянным эффектом на себя и Effect Archetype Script, повесил скрипт, закомпилировал.
В игре подошел к первому же попавшемуся стражнику и командой addspell добавил нашу абилку. Теперь самое интересное, как работал эффект:
Кастовал фаерболлы.
1. После попадания спелла в стражника: через 0.2сек Utility.Wait от стражника вбок или куда то внебо вылетает уже 2 фаерболла.(видимо мой обратно летит + тот фаерболл, которым он в себя должен был кастануть). То есть в себя он не кастует, плюс не совсем понятно откуда 2 каст у него берется
2. Не работает Return магнитуды фаерболла.(Здесь большой вопрос работает ли он вообще для SetNthMagnitudeEffect) После моего первого каста, урон фаерболла становится 20% от начальных 40, тобишь 8.
Кастую ещё раз, становится 1. Третий уже - 0 и т.д.
Мои мысли, если надо)) Лично я думаю проблема в том, что непись неможет в себя кастануть спелл у которого направленность Fire and Forget - цель. Я как то пробовал заставить непися кастануть фаерболл в себя, ещё когда химичил с .cast Fireball.cast(akTarget, akTarget) Как итог - ничего не срабатывало, пока я не сменил направленность - на себя.
nepewka, возврат значений работает. Этот скрипт - шаблон для создания своего скрипта. Т.е. показан сам принцип, а дорабатывать его тебе надо самому.
При попадании в цель заклинания могут срабатывать несколько OnHit(), и поэтому второй просто переписывает значения в массиве на уже изменённые (маленькие). Для подобных обработок надо вводить "заглушку", или переменной, или статусом, чтобы пока полностью не отработает один блок, второй бы не смог работать/обрабатывать. Если введёшь такую заглушку, то всё будет правильно с магнитудой.
Далее думай над кастом. Возможно, попробуй создать под ногами НПС временный маркер и пусть он кастонёт по НПС. После каста сразу удаляешь этот маркер.
*************************
Вариант, как сделать простое "Уязвимость к магии" я не предлагаю, ведь если я правильно тебя понял, то тебе нужен процесс создания, а не сам результат. Поэтому играйся с новыми идеями, я лишь подскажу сами идеи, а уж реализовывать их надо тебе самому.
Вариант, как сделать простое "Уязвимость к магии" я не предлагаю, ведь если я правильно тебя понял, то тебе нужен процесс создания, а не сам результат. Поэтому играйся с новыми идеями, я лишь подскажу сами идеи, а уж реализовывать их надо тебе самому.
За советы большое спасибо!! Буду пробовать различные варианты.
Кстати насчет простой Уязвимости. В одном из твоих старых постов на этом форуме(кстати хороший учебник ) ты писал, что используешь свои Association item, для которых как то создаешь все необходимые, различные эффекты. Не поделишься ли знаниями? Уж очень меня заинтересовал этот пост.
nepewka, так это было год назад. Скорее всего, я говорил об архитектуре эффекта Cloak, вот в этом варианте я добавляю нужный спелл, который надо повесть на близкого актёра, т.е. делаю как бы пассивный мониторинг близкого окружения НПС/ГГ. В том втором спелле свой эффект и свой скрипт (если надо), в моём варианте тот эффект отдавал референс актёра, который подходил ближе 170 ед. Это хорошо тем, что нет скриптовых поисков, OnUpdate(), циклов и прочего, всё работает в дефолтном режиме.
AleksTirex, понятно, спасибо! Я уж думал придумал какую то хитроумную схему по редактированию/влиянию на Actor Value
Маркеры прям заинтриговали! Хочу ещё параллельно с ними разобраться, вижу в них большой потенциал)) Такой вот вопрос: Какой маркер можно взять, самый простой такой для использования под ногами нпц для спеллкастов? Можно какой нибудь бейсик скрипт увидеть для примера, самый что ни на есть простой?) Допустим где на каст ГГ, под ногами таргета образуется маркер, который кастует 2 фаерболла в цель (отдельно хотелось бы узнать как маркер определяет референс цели ?)
===========================
ещё 3 вопросика простых хотел давно спросить у вас))
Чем вот такая вот Function DoCombatSpellApply( Spell akSpell, ObjectReference akTarget ) native функция отличается от привычной SpellCast?
===
Можно ли в редакторе создать перк, который будет работать для всех? (Хочу таким образом обойти ограничение на динамичное добавление перкам актерам в игре. Создав его в редакторе заранее, но так чтобы работал на всех) А затем уже контролировать посредством Condition/Глобалок его влияние. Просто можно или нет так сделать?
===
Как хорошо ты знаком со вкладкой Gameplay > Settings. Есть ли там что то, что может влиять на урон спеллов? Помимо настроек игровой сложности, которые увеличивают урон от героя к нпц и обратно, с ними я уже знаком))
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)