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) Как итог - ничего не срабатывало, пока я не сменил направленность - на себя.
Вариант, как сделать простое "Уязвимость к магии" я не предлагаю, ведь если я правильно тебя понял, то тебе нужен процесс создания, а не сам результат. Поэтому играйся с новыми идеями, я лишь подскажу сами идеи, а уж реализовывать их надо тебе самому.
За советы большое спасибо!! Буду пробовать различные варианты.
Кстати насчет простой Уязвимости. В одном из твоих старых постов на этом форуме(кстати хороший учебник ) ты писал, что используешь свои Association item, для которых как то создаешь все необходимые, различные эффекты. Не поделишься ли знаниями? Уж очень меня заинтересовал этот пост.
AleksTirex, понятно, спасибо! Я уж думал придумал какую то хитроумную схему по редактированию/влиянию на Actor Value
Маркеры прям заинтриговали! Хочу ещё параллельно с ними разобраться, вижу в них большой потенциал)) Такой вот вопрос: Какой маркер можно взять, самый простой такой для использования под ногами нпц для спеллкастов? Можно какой нибудь бейсик скрипт увидеть для примера, самый что ни на есть простой?) Допустим где на каст ГГ, под ногами таргета образуется маркер, который кастует 2 фаерболла в цель (отдельно хотелось бы узнать как маркер определяет референс цели ?)
===========================
ещё 3 вопросика простых хотел давно спросить у вас))
Чем вот такая вот Function DoCombatSpellApply( Spell akSpell, ObjectReference akTarget ) native функция отличается от привычной SpellCast?
===
Можно ли в редакторе создать перк, который будет работать для всех? (Хочу таким образом обойти ограничение на динамичное добавление перкам актерам в игре. Создав его в редакторе заранее, но так чтобы работал на всех) А затем уже контролировать посредством Condition/Глобалок его влияние. Просто можно или нет так сделать?
===
Как хорошо ты знаком со вкладкой Gameplay > Settings. Есть ли там что то, что может влиять на урон спеллов? Помимо настроек игровой сложности, которые увеличивают урон от героя к нпц и обратно, с ними я уже знаком))
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №95
| Тема: Вопросы по скриптам Papyrus
написано: 20 апреля 2014, 22:04
| Отредактировано: nepewka - 20 апреля 2014, 22:08
Чтобы в этом же скрипте добавить ещё 2 маркера, достаточно будет дописать? ObjectReference akMarker = akSelf.PlaceAtMe(XMarker) ObjectReference akMarker2 = akSelf.PlaceAtMe(XMarker) ObjectReference akMarker3 = akSelf.PlaceAtMe(XMarker)
Ах да, маркеры будут работать в любых условиях или только для ГГ? Допустим если мой саммон, грозовой атронах, кастит в нпц под влиянием этой абилки
=== Ну и последнее что хотел спросить, если хочу чтобы маркер дал 3 каста подряд akSpell.Cast(akMarker, akSelf) akSpell.Cast(akMarker, akSelf) akSpell.Cast(akMarker, akSelf) ; можно ли как то заменить 3 каста одной командой? Есть ли такая в наличии? Может быть repeat какая нибудь )) Чисто для удобства, чтобы не писать 3 одинаковых строчки
===================
Проверил все в игре. С виду всё работает и выглядит прекрасно!
Даже не знаю как тебя отблагодарить! Скинь мне какой нибудь свой кошелек в лс, готов платить за каждый подобный скрипт. Ещё раз спасибо!
sppassword, Заходишь в СК, пишешь в поиск по айди ALL 00000007 заходишь, дальше в спелллисте все удаляешь. Мод сохраняешь, ставишь ему приоритет как можно выше запускаешь игру. Всё ли ты так сделал? проверь
кстати, что нужно сделать чтобы маркер пулял по таргету, который двигается? Допустим положили мы его под своими ногами, а задача стоит чтобы он пульнул в нпс.
В onEffectStart - понятно, он определит наш akTarget и будет по нему кастовать. А если эвент onSpellCast? Надо написать ему в цели GetTargetActor?
====================
И ещё вопросик. Просто подскажи как правильно мне сделать) После складывания общей магнитуды от int numEffects = akSpell.GetNumEffects() в float magnitude = akSpell.GetNthEffectMagnitude(index) Мы получили 300 магнитуды. Цель - разделить 300 на 3 части по 100, так чтобы не разом в 300 урон наносился, а 3 раза по 100 (Упустим ту часть где высчитываем новый урон в SetNthEffectMagnitude и кастуем новый спелл в 20% от общей магнитуды. Этого щас нет)
>>>
int numEffects = akSpell.GetNumEffects() ; получили все эффекты заклинания int index = 0 While index < numEffects float magnitude = akSpell.GetNthEffectMagnitude(index) ; получили 300 магнитуды со всех эффектов aamagnitude [index]= magnitude ; сохранили дефолтный урон
While magnitude > 100 ; делим урон. ; не знаю можно ли сделать так, чтобы спелл наносил дамаг 3 раза по 100, срабатывая при этом 1 раз.(???) Поэтому сделаю 3 спелла по 100 урона magnitude = magnitude - 100 if magnitude = 100 endWhile endif akSpell.SetNthEffectMagnitude(index, magnitude) ; akSpell наносит 100 урона index += 1 endWhile
; кастуем. Эх, ещё бы я мог заставить его считать за меня, так чтобы он кастовал akSpell по 100 урона столько раз, сколько надо до полного деления, было бы идеально! akSpell.cast() akSpell.cast() akSpell.cast()
While index < numEffects akSpell.SetNthEffectMagnitude(index, aamagnitude[index]) ; вернули дефолт index += 1 endWhile
... Что не так?
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №102
| Тема: Вопросы по скриптам Papyrus
написано: 21 апреля 2014, 16:45
| Отредактировано: nepewka - 21 апреля 2014, 16:57
Прочитай мой пост на предыдущей странице про "События"/эвенты. Ты внимательно причитай и постарайся понять, что такое "Событие". Событию ничего не надо прописывать, а это ещё и невозможно.
Прочитал) Впринципе стало понятней. но по прежнему не понятно, как задать цель каста маркеру, если маркер лежит к примеру под нашему ногами, а кастануть ему надо в нпц.
"Маркер кастует на цель, а цель выбирает не он, а ты сам, и прописываешь эту цель в команду каста"
То есть и akTarget, и GetTargetActor подойдут? Главное чтобы в игре наш прицел был наведен на нпс?
p.s отдельное спасибо за ошибки. Бьюсь головой, даётся тяжело, но понимать это нужно
AleksTirex, отлично! Finally, как на примере нашего скрипта сделать так, чтобы маркер пальнул в нпц?
Обьясняю: мы ставим маркер под ногами нпц, с Utility.Wait(0.3) нпц не успевает никуда убежать, поэтому получает от маркера фаерболл в лицо, НО если поставить скажем Utility.Wait(10.0) перед кастом спелла от маркера, нпц успевает недалеко уйти от места где появился наш маркер. Спустя 10 секунд фаерболл взрывается в месте появления маркера, но ни в коем случае не летит в место, где сейчас находится нпс
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №104
| Тема: Вопросы по скриптам Papyrus
написано: 21 апреля 2014, 17:49
| Отредактировано: nepewka - 21 апреля 2014, 17:54
Finally, как на примере нашего скрипта сделать так, чтобы маркер пальнул в нпц? Обьясняю: мы ставим маркер под ногами нпц, с Utility.Wait(0.3) нпц не успевает никуда убежать, поэтому получает от маркера фаерболл в лицо, НО если поставить скажем Utility.Wait(10.0) перед кастом спелла от маркера, нпц успевает недалеко уйти от места где появился наш маркер. Спустя 10 секунд фаерболл взрывается в месте появления маркера, но ни в коем случае не летит в место, где сейчас находится нпс
Кстати, насчет заглушек. Если захочу повесить на этот эффект абилки ещё какой нибудь скрипт, но заглушка не даст ему работать. Можно ли что то сделать, или другие скрипты в любом случае будут блокироваться?
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №107
| Тема: Вопросы по скриптам Papyrus
написано: 22 апреля 2014, 01:50
| Отредактировано: nepewka - 22 апреля 2014, 01:54
В скрипте под спойлером есть ошибка: magnitude = magnitude / iNumCast - ошибка magnitude = magnitude / iNumCastTMP - правильно
Спасибо, поправил!
===========
Можно ли как нибудь при повторении одного и того же события MGEF как то ограничить появление маркеров? Я очень хочу, чтобы после 1 моего каста в игровом мире появилось 3 маркера, но я не хочу чтобы они появлялись после каждого моего каста и делали повторые касты до окончания эффекта (Utility.Wait(60.0)). Кастанул спелл с 2 рук - получил 6 маркеров, кастанул 6 спеллов в промежутке 2-3 секунд - получил 18 маркеров. Красным выделил то, повторения каких команд я хочу избежать.
Но теперь возникла проблема в финальной части создания скрипта.
Вообщем суть:
Идея - При попадании заклинанием Fireball, на помощь к akCaster приходят 3 невидимых духа предков (Маркеры), которые с интервалом раз в 5 секунд на протяжении 20 секунд произносят свои заклинания. Через 20 секунд они пропадают и в течении следующих 180 секунд, покуда наша GlobalVariable == 1, вызывать снова мы их не можем. Не работает цикл заклинаний While. При чем до этой версии скрипта он у меня работал, но там был хаос и не удавалось заполучить контроль над ним (было слишком много заклинаний от маркеров).
Посмотрите пожалуйста, что не так?
GlobalVariable Property AAAbegemot auto Static Property XMarker auto Spell Property AAAptaxa auto
Event OnEffectStart(Actor akTarget, Actor akCaster)
float begemot = AAAbegemot.GetValue() Actor akVictim = GetTargetActor()
можно поподробнее, что за команда на повтор? Может быть с ней у меня получится...
Добавлено (22 Апреля 2014, 21:47) --------------------------------------------- Можно посчитать необходимое кол-во кастов iNumCasts, как ты вчера писал и задать цикл
Спасибо ребята! С вашей помощью скрипт закончен и полностью готов к работе. А мы можем переходить к следующим, не менее легким скриптам! Также выяснил почему работал ни с 1 раза он, оказывается пробелы после обьявления события в коде нежелательны
Как заставить компаньона использовать заклинание? Дала ему Круг защиты, поставила 100 уровень как персонажа, так и навыка восстановления, кучу маны, перки, запустила в тестовую локацию с драуграми, а он их руками колошматить принялся, Круг защиты отказывается кастовать. Проверила с другими заклинаниями - работают, хотя не все. Хочу понять по какому принципу нпс пользуются заклинаниями, может галочка какая-то есть или скрипт можно написать?
для начала найти нпс который кастует плащи изначально и уже потом с его копией что то пробовать делать.
Самая распространенная ошибка в этом случае - это редактирование существующего актера, вместо дупликата/cоздания нового. Проверить можно командой getav Magicka <- тык по компаньону, если мана у него будет стандартная, твои изменения просто не сохраняются в игре.
Сделала AI пакет, теперь персонаж использует Круг защиты несколько раз за бой, если сражается с нежитью, как я и хотела, но возникла другая проблема. Когда пакет активируется персонаж "застывает" и перестает делать что либо еще, кроме использования этого заклинания по кулдауну. Хотелось бы, что бы в перерывах между кастами он сражался и хоть как-то двигался по полю боя.
c пакетами забей вообще, лучше ничего не делать.
Попробуй Израна, он действительно кастует на себя спелл Fire and Forget > Self то что тебе нужно, смени на круг защиты только
Круг Защиты имеет Effect Archetype - Spawn Hazard, который судя по всему НПС кастовать сами отказываются. Можно оставить Effect Archetype - Cloak, как в заклинании Израна, но тогда нежить будет разбегаться от НПС, к которому будет привязан плащ-кург, а не из зоны, куда заклинание скастовано. Не совсем то(
ну тогда самое простое, что можно сделать скриптом: добавь любой спелл своему компаньону на усмотрение, а через него, вернее через его MGEF можно сделать скрипт с событием oneffectstart/onspellcast и вызовом нужного тебе заклинания, который в дефолтном пакете он кастовать не хочет. Только придется выбрать подходящий спелл на усмотрение и продумать время вызова/перезарядку
Можно ли на подобии как в Morrowind реализовать "активируемые" итемы, которые работают как спеллы? А то тут только либо постоянный эффект на себя, если броня, либо эффект при ударе, если оружие. А активируемых вещей, как в морровинде, либо на себя, либо на цель, как спелл - даже и не видел..