Вверх Вниз


  • Страница 1 из 1
  • 1
Форум » Записи участника » myav [30]
Результаты поиска
myav  Offline Сообщение №1 | Тема: Вопросы по скриптам Papyrus написано: 20 Декабря 2019 в 14:30 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 23:23


Странник


30
Помимо прочих радостей (которые у меня уже получились), я пытаюсь сделать
spell расслабленность. Чтоб во время боя можно было его кастонуть на
НПС, и чтобы он перестал атаковать "во время боя" (не отключая его ИИ и
не заставляя его убегать).

Помимо всяких безумных вариантов, самый адекватный вариант, что я пробовал:

Код
Scriptname frivolity extends activemagiceffect

actor selfactor
ActorBase MyBase

Event onInit() ; (либо Event onEffectStart, я пробовал оба варианта)
   selfactor = GetTargetActor()
   MyBase = selfactor.GetActorBase()
   Combatstyle csStyle = MyBase.GetCombatStyle()
   ; (также я пробовал Form csForm = MyBase.GetCombatStyle() as Form а потом Combatstyle csStyle = csForm as Combatstyle)
   csStyle.SetOffensiveMult(0.10)
   selfactor.StopCombat()
   MyBase.SetCombatStyle(csStyle)
   selfactor.StopCombat()
   selfactor.EvaluatePackage()
EndEvent


Вот, скажите мне - почему это не работает?
в SetCombatStyle написано что комбатстиль базы привязан к бою и поменять не получится пока бой, вот потому я и добавил StopCombat.

И меня не так волнует, почему это не работает, как волнует ==> Как можно заставить НПС не атаковать, прямо во время боя.

Хелп....  Кто-то может показать кусок кода который будет получше чем мой и сможет поменять SetOffensiveMult во время боя, чтоб дошло до мозгов НПС?

myav  Offline Сообщение №2 | Тема: Вопросы по скриптам Papyrus написано: 20 Декабря 2019 в 16:53 | Отредактировано: myav - Пятница, 20 Декабря 2019, 17:40


Странник


30
Myprism, вот потому я и запостил это тут.

Кто может помочь и подсказать, как поменять CombatStyle именно к "уже инициализированному" актеру? Если SetCombatStyle применяется к его базе а не к нему самому.

Я думал EvaulatePackage - сбрасывает ИИ и заставляет актера заново прочитать его базу. Но если эта команда не затрагивает CombatStyle, то печально.

Хелп!

myav  Offline Сообщение №3 | Тема: Вопросы по скриптам Papyrus написано: 30 Января 2020 в 15:21


Странник


30
Кто-то знает как заставить Papyrus распознавать русские имена?

Вот, к примеру:

string CheckName1 = SelfActor.GetDisplayName()
string CheckName2 = SelfActor.GetActorBase.GetName()
if CheckName1 == "Разбойник"  - не работает.
if CheckName2 == "Разбойник" - тоже не работает.

У меня что-то появилось впечатление, что папирус ВООБЩЕ не понимает русского языка, вот потому и не может сравнить string.

Кто-то может подсказать, не нашли ли люди решение этой проблемы, за последних 7 лет?

Мне нужно взять и сравнить именно ИМЯ, а не расу или еще что-то другое.

myav  Offline Сообщение №4 | Тема: Вопросы по скриптам Papyrus написано: 31 Января 2020 в 11:55 | Отредактировано: myav - Пятница, 31 Января 2020, 12:08


Странник


30
Dsion, я просто делаю огромный боевой мод. Так как разработчики четко сказали, что следующая версия свитков - будет через несколько лет, не раньше. И пока это не случилось, захотелось еще разок оживить скайрим. Так как, wildcat, ultimate, evolved, deadly моды - слишком слабые. Я на гохе подробно их всех разобрал.

И распознавание НПС по имени - критически нужно :), чтоб боевой мод моментально чекал имя, и по результату - делал разные изменения в боевке. А делать изменения в ванильных данных - плохая идея (любой другой мод тоже перепишет ваниль, а потом начнутся конфликты и сбои). Ты предлагаешь фракции, кейворды, но к примеру, фракция бандитов имеет 480 членов :-Р как углубиться? Отличить бандита от разбойника? По статам? нельзя - другие моды меняют статы. По спелам? тоже нельзя - среди 480 членов, по 30-40 имеют одинаковые спелы. А вот чекнуть имя "разбойник", и сразу куча гемороя с идентификацией отпадет.

Мой мод, уже на 95% закончен, я застрял только в 2х местах. На первый мой вопрос про combatstyles, который я кстати тоже тут задал))) никто не ответил :( Но, на нексусе, общими усилиями - таки разобрались, что к чему.

А второй вопрос на нексусе смысла задавать нету, им не интересен русский язык.

Кто-то может помочь с организацией распознавания русских букв? Или хотя бы - подробно объяснить как выносить и заносить в стринг? Я и сам разберусь, но когда с нуля и методом тыка, это - потерянный месяц. А если кто-то УЖЕ знает, то может помочь за час...

Брать другие моды - это не вариант, так как мне нужно всунуть распознавание прямо в скрипт, и начнутся разборки за авторское право, если я всуну другой мод во внутрь себя :-Р.

myav  Offline Сообщение №5 | Тема: Вопросы по скриптам Papyrus написано: 31 Января 2020 в 12:14 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 23:00


Странник


30
Myprism, тогда банальный вопрос - как узнать ид разбойника? и отличить его от головореза? Тут подробно расписаны RefId: https://en.uesp.net/wiki/Skyrim:Bandit

я дал ссылку только на разбойников, но там на сайте вообще ВСЕ нпс.

Но, папирус не умеет чекать RefId. Разве что через проверку Cell, но если я буду проверять полное содержимое НПС в Cell каждых 4 секунды, особенно в городах - игра будет фризить. Что очень не хочется... хочется чтобы игра шла даже на древних компах.

всё что мне нужно, это просто идентифицировать. Чтоб скрипт различал босса от рядового.  Это можно сделать или по имени (но проблема с юникодом), или по ид (но как заставить папирус распознавать ref?)

myav  Offline Сообщение №6 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 15:55 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 22:55


Странник


30
Myprism, итак:

На самом деле монстры и нпс не имеют никакого базового ид.
В кодинге скайрима есть только FormID, и RefID.  При чем, RefID базового обьекта вариации на карте является одновременно и BaseID.
Я ничуть не сомневаюсь, что говоря про свой ИД, вы и имели ввиду FormID, только не знали его правильное название. Но, суть не в этом. А суть в том - что по нему НЕЛЬЗЯ сортировать, чтоб запустить другие проверки, и советую больше не предлагать этот метод, другим людям. Я даже распишу, почему.

Что такое FormID ? Когда к игре подключается новый мод, игра по очереди записывает все обьекты (магию, персонажей, магические эффекты, квэсты, книги и т.д.) мода и каждому из них присваивает FormID +1.  Тоесть, на единичку больший. И кроме того, эти форм-ид менять нельзя, но можно удалить.

3 месяца назад, когда я только начинал строить мод, я решил что можно использовать эти FormID для идентификации персонажей. Но потом я увидел как этот FormID взял и поменялся. И мне пришлось поднять этот вопрос на Нексусе, почему формид одного и того же персонажа отличается и можно ли его использовать.

Оказалось, что FormID ванильных персонажей использовать в модах - нельзя. Так как, он может отличаться на разных компьютерах, в зависимости от порядка установки модулей, и от их версий. Всё расписывать тут я не буду, так как их механику мне уже разжевали, и заново философствовать про FormID - нету смысла.

И что у нас остается? А остается только RefID конкретных персонажей и RefID базовых обьектов для этих персонажей... Я и этот вопрос поднял на нексусе, какие есть пути идентификации RefID.  Но к сожалению, ответили что вариантов только 2: либо писать собственный плюгин под skse, либо использовать GetNtfRef, но этот метод даст большие фризы.

И у меня осталось только 2 варианта: либо начать менять ванильные обьекты НПС и писать патчи совместимости под популярные моды, которые их тоже меняют, либо попытаться сделать идентификацию по имени.

Но опять же.. кириллица. Пошел на русский форум, сюда, в надежде что тут адекватные люди и помогут с примерами, как сделать функцию либо плагин чтоб можно было конвертировать имена туда сюда и распозновать по им.

Если практики так и не объявятся, через неделю я закрою этот вопрос и решу проблему методом изменения ванильных нпс + патчи совместимости (как сделали Combat Evolved и Revenge of The Enemies). Но, хотелось бы не трогать ваниль.

Если найдется практик с доброй душой и кучей энтузиазма, и поможет кодом: конвертировать имена с последующей идентификацией по ним, я добавлю его имя (ник) как помощника создания мода + он первым узнает и увидит, что и как мод делает.

myav  Offline Сообщение №7 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 18:00 | Отредактировано: myav - Суббота, 01 Февраля 2020, 18:26


Странник


30
yakor77, cloak срабатывает каждых 2 секунды и чекает огромную площадь вокруг игрока: 180 метров.

Если во время этого чека проверять фракцию, класс, все спелы, базовых персонажей и т.д. и это будет проверка только 1 персонажа (и за секунду нужно проверить еще пару десятков персонажей (а в городах - под сотню) а у нас установлено еще 100-150 модов + графические моды - игра зафризит в 80% игроков, кто не имеет топовых компьютеров.

нужна именно КОРОТКАЯ проверка. Просто узнать РЕФ, или просто узнать ИМЯ. реф узнать не получится (не используя cell), этот вопрос уже обсуждали с пол месяца на нексусе, остается только имя. Либо забить на затею и начать менять ваниль. И я уже расписал что базового ИД - не существует.

Но, я всё еще надеюсь, что кто-то поможет по имени.

Lexo, я ничего не путаю.  Я понимаю, что вы пытаетесь выгородить Myprism, после того, что он понаписывал.
Но, проверка ActorBase - засорит кодом по самые уши. Я сначала проверяю, а потом уже пишу и кратко, и философствовать - не мой конек.

Только у одного "бандит" есть около 30и ActorBase:

Бандит с одноручным оружием эльф
Бандит с одноручным оружием бретон
и еще 4 рассы

Бандит с двуручным оружием эльф
и еще 5 рас

Бандит маг
и еще 5 рас

Бандит лучник
и еще 5 рас

Бандит Босс
и т.д.

ВСЕ ОНИ имеют РАЗНУЮ selfactor.GetActorBase и в сумме этих баз - больше тридцати. А персонажей по этой базе - больше пары сотен.
А потом пойдет разбойник, а потом мародер, а потом маг-новичек, маг-адепт, маг-мастер, ледяной маг-новичек и еще сотня имен и по каждой сотне имен: не менее 30и ActorBase.

И если проверить по ActorBase, просто представь, сколько ТЫСЯЧ global variable property придется добавить в скрипт и как он нагрузится.

А если проверять по именни или по ref, нужно "0" global variable, и на каждый случай - всего 1 рядок кода-проверки.

Если кратко:

Какое у тебя имя?
Ты лучник?
Ты маг?
Ты с двуручным оружием?
Ты босс?
Я уже знаю кто ты.

Вот и вся проверка.

А если проверять по ActorBase - тысячи тысяч global variable ActorBase придется добавить в код. Так как, использовать ИД их форм - нельзя. Я уже писал, почему.

Вот почему я и прошу помощь с конвертацией имен, на нексусе ЕСТЬ такие моды, что позволяют распознавать локализованые имена. Но они как плюгины, и я не могу посмотреть их код. Вот потому и нужна помощь, чтобы "повторить" их действие. А не делать тысячи переменных.

myav  Offline Сообщение №8 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 18:55 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 22:51


Странник


30
yakor77, и которая зафризит клиент. Я же вам ответил отдельно, по поводу БОЛЬШОЙ проверки каждых 2 секунды. А вы или не прочитали или проигнорировали. По первому вашему сообщению я понял, что предложение было: чекать разные параметры персонажей, а потом результаты конвертировать в цифры. И не менять ваниль.

Но, последнее ваше сообщение: каждому ванильному персонажу добавить код вручную, чтобы по коду потом распознавать.

Второй метод работать будет быстро и без фризов, но будет конфликтовать со ВСЕМИ модами, которые тоже трогают ваниль. А таких модов - очень много.

Я про второй метод (что буду править ваниль) тоже написал, но ТОЛЬКО если зайду в полный тупик - не разберусь как проверять по имени. Править ваниль - это плохой метод ((( и годится только как крайняя мера.

myav  Offline Сообщение №9 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 20:40 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 22:50


Странник


30
Myprism, читайте мой ответ для Lexo, там я подробно расписал, насколько грузится скрипт, если всунуть в него 5.000+ переменных ActorBase.

FormList, это тоже самое, так как он копирует формы ActorBase - полностью. Я FormList использую только для мелких поисков, к примеру для CombatStyles, где их всего до 50, что нужны для проверок.
Но создавать массив на 5000-10000 объектов, и куда скопируется ВСЁ (очень много не нужного) - это перебор.

Сказанные на этих 2х страницах варианты - уже проверены месяцы назад, они все не годятся. К сожалению ((
если бы после проверки, оказались годными - я в жизни не поднял бы вопрос тут.

идентифицировать безошибочно, и без нагрузки на фпс, нпс, когда их ДОФИГА похожих - не так уже и легко. Если бы можно было узнать со старта RefID, была бы халява. Но..

Единственное, что я хочу - решить проблемы идентификации. Чтобы мой "cloak" каждых 2 секунды проверял не 5000 переменных (по ActorBase/FormList) и не подвешивал игру, а проверял всего 5 переменных: имя. маг ли. лучник ли. двуручник ли. И всё. Короткая проверка и без нагрузки.

myav  Offline Сообщение №10 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 21:04 | Отредактировано: myav - Суббота, 01 Февраля 2020, 21:16


Странник


30
Dsion, пробовал. Но, papyrus не понимает кириллицы(  Он может сохранить имя, или изменить. И вывести/присвоить назад. Но СРАВНИТЬ русские имена - не может.

myav  Offline Сообщение №11 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 21:26 | Отредактировано: myav - Суббота, 01 Февраля 2020, 21:30


Странник


30
Dsion, я делал проверку так:

в игре добавляю существо через player.placeatme RefID

Например:

player.placeatme 00037bfc  (вызов бандита: имперец, лучник, женского пола)
player.placeatme 00039d3e (вызов разбойника: норд, маг, мужского пола)

а потом простейшая проверка у вызванного нпс:

Код
string TempName=selfactor.GetDisplayName()
debug.notification("имя нпс: " + TempName)
if TempName == "Бандит"
    debug.notification("Проверка что бандит - успешна")
endif


И игра выдает всплывающее сообщение:

имя нпс: бандит

Из чего следует:
1. что мой скрипт запустился вообще, раз что-то написало.
2. что имя взялось (getdisplayname) и вывелось (первая notification)

Но игра НЕ выдает: Проверка что бандит - успешна.

Из чего следует:
1. papyrus не смог сравнить if ("бандит" == "бандит")

тоесть - не понимает кириллицу

тоже самое и по разбойнику и по другим нпс. Я что-только не пробовал.

myav  Offline Сообщение №12 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 21:51 | Отредактировано: myav - Суббота, 01 Февраля 2020, 21:57


Странник


30
Dsion, это нужно проверять именно так.

Чтобы не создавать глобальных переменных, в коде идут проверки: if == "разбойник", if == "снежный троль", if == "колдун-новичек".

А если я буду сравнивать с переменными, то придется создавать List невероятных размеров, пока всё туда всунется.

Но, я раньше делал эксперименты и с другими вариантами проверки

Код
string TempName1 = selfactor.getdisplayname()
string TempName2 = "Разбойник"
if (TempName1 == TempName2)


это тоже не работает

yakor77, наличие ЧЕГО-ЛИБО лишнего у ванили, чревато перезаписыванием другими модами. А потом будет проверка, а кольцо - перезаписалось, и результат - сбой.

БЗОПАСНО, можно добавлять "кольца" и другие вещи только через "cloak". В этом случаю, нам будет до одного места, что другие моды поназаписывали.

myav  Offline Сообщение №13 | Тема: Вопросы по скриптам Papyrus написано: 01 Февраля 2020 в 23:26 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 23:53


Странник


30
Dsion, разбирать каждую букву на код, а потом слепить все коды в одно целое mellow , и сделать проверку на абракадабру как имя - работает.

Фух... наконец-то вопрос решился. Без 5и тысяч ActorBase в FormList.  Хоть один человек, в своих комментариях: показывал и предлагал проверять коды.

Хоть теперь бандита звут -63z-32z-19z-28z-24z-14z0,  а разбойника -48z-32z-25z-31z-18z-23z-19.  Но уже прогресс! :-Р можно чекать имя, тратя всего 20-30 символов на проверку и обойтись вообще "без" глобальных переменных.

Dsion-у - спасибо за идею, которую я развил и сработало.

myav  Offline Сообщение №14 | Тема: Вопросы по скриптам Papyrus написано: 13 Февраля 2020 в 11:15 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 22:39


Странник


30
Вопрос: НПС хоть убей, не хочет подчинится в одному месте :)

Команды атаковать/пинать/кикать - слушают, бутылки глотать - тоже. По земле кататься в доджах, и даже прыгать в ролах - всё слушают.

Это я про анимации)))

А вот заставить НПС блочиться - ХОТЬ УБЕЙ не послушные.
Код
Debug.SendAnimationEvent(selfactor as objectreference, "blockStart")

НПС слушает эту команду, но только ЕСЛИ до игрока больше чем 2 шага дистанции. Тогда он - блочится, после этой команды.

Но вот вплотную к врагу, НПС с высоким AttackRate (combatstyle) полностью игнорят скрипт-команду блока и продолжают атачить.

Я пробовал их встряхнуть..

attackStop
staggerStop
recoilStop

чтобы после этих команд (которые отменяют атаку либо встряхивают нпс) сразу же запустить блок-команду. Но.... Даже после встряски! нпс предпочитает и запускает атаку, игнорируя скрипт-команду блока.

Есть ли метод, заставить НПС блочиться пару секунд, когда он вплотную к игроку?
(когда он издалека он и так блочится выше написанной командой).

И я уже потерялся.. Что только не пробовал (сотни экспериментов). И комбатстили менял, но потом понял что в данном случаю, их трогать не нужно (нужен блок 2 секунды а не постоянный) + стиль во время боя лочится, и команды stopcombat - не помогают поменять, и читал про флаги Package - игнорировать бой, но так и не нашел, как их можно поменять, во время боя. Уже вплоть до временного отключения или ослабления АИ дошел, но тоже не то (( если отключить аи.. нпс зависает в неестественных позах, после удара.

Как заставить не начинать атаки и начать блок, вплотную к игроку?

myav  Offline Сообщение №15 | Тема: Вопросы по скриптам Papyrus написано: 14 Февраля 2020 в 22:26 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 22:36


Странник


30
yakor77, отвечу по всем твоим пунктам:

1. В скайриме нету никакого "перехвата управления на критической дистанции". ВСЕ команды (если они вообще рабочие) - делаются, на любой дистанции. Вплотную делаются и доджи, и блоки, и атаки, что прикажешь то и СДЕЛАЕТ.

Но, прикол блока в том, что его МАЛО - просто запустить. Его нужно еще и поддерживать активным. Вот потому у меня и появилась эта проблема.

blockStart - работает и вплотную, но нету команд, которые бы заставляли его постоянно работать 2 сек. Запустился блок, и сразу же закончился и дальше => идут атаки, а для нашего глаза кажется, что блок не произошел вообще (миллисекунды его срабатывания - не замечаем).

Запускать каждых 0.1 - 0.3 сек его заново - тоже не дают постоянного эффекта (заметного для глаз). И как вариант - не годится, я это попробовал в самую первую очередь... Запустить блок 10 раз за 2 сек.

2. Отойти от противника (чтоб потом включить блок), я пытался заскриптовать еще перед новым годом (когда надо было отойти и сделать провокацию). перебрал все до единой команды, и в финале не нашел адекватного, работающего варианта.

animation - moveBackward/ startMoving - срабатывают на миллисекунду и сразу же заканчивают свое действие, на глаз это не заметно и кажется что они не работают вообще
SetDontMove - после этой команды НПС бежит на одном месте, что ломает правдоподобность и сильно бросается в глаза.
Follow / Escord команды заставляют НПС следовать, но они не могут заставить отдалиться.

Единственный "Рабочий" вариант отдалиться - сделать додж назад. Но это уворот, а не блок. Увороты я уже все заскриптовал, а сейчас нужен именно БЛОК. У меня НПС, когда у них высокий уровень контр-атаки + опытности + концентрации + ловкости: читают анимации своих противников и контр-атакуют еще до получения удара.

И по скрипту, НПС выставляет щит, чтобы заблочить летящий в него удар, и сразу же портит жизнь, серией комбо-ударов. Реакции с уворотами/отскоками, я уже заскриптовал. А сейчас нужен именно БЛОК удара. А не отскоки/кувырки/пляски.

нужно заставить говнюков именно выставить щит не на миллисекунду, а на такое время, чтобы глаз игрока это заметил.

3. Если НПС станет дружественным, это ничего не поменяет. Во время боя - игнорируется, друга ты валишь или врага. Если бой УЖЕ начался, НПС будет бить и друга. А если отменить бой, то НПС спрячет оружие, а без оружия в руке: все команды на атаки оружием - игнорируются.

4. Если НПС не будет видеть игрока, эта команда в скайриме называется LOS, он перейдет в режим "поиск пропавшего врага". Команда блока - запускается, но сразу же заканчивается, так как нету CombatTarget в поле обзора, чтобы держать перед ним блок. Кроме того, даже за секунду (не видения врага) НПС может развернуться боком или спиной к тебе, и пойти "искать".

5. какой смысл абсолютной брони? Я когда тестирую скрипты, ставлю вообще tgm (god mode) где ничто тебя не пробивает. Нужно чтоб нпс именно ЗАБЛОЧИЛ удар, а потом контр-атака. А не - игнорировать его атаки.

6. совмещать 2 фигурки в одно целое а потом мерять критические дистанции? :-Р Зачем? Все и так знают дистанции доставания обычной атаки. НПС будет атаковать на расстоянии 0-220 (для атак с тагом forward - там дистанция в разы больше, но эти атаки - редко выбираются).

myav  Offline Сообщение №16 | Тема: Вопросы по скриптам Papyrus написано: 15 Февраля 2020 в 00:36 | Отредактировано: myav - Суббота, 15 Февраля 2020, 01:32


Странник


30
Multigone,

Во время боя, CombatStyle - залочен. Если сделать ForceRef или Evaulate - то обновится всё, кроме стиля)

Кстати, EvaulatePackage даже по задумке - не затрагивает обновление инфы по бою.

StopCombat+Evaulate - тоже не помогает снять блокировку.

Я в ноябре, хотел дать нпс перепады характера, написал спелл и скрипт "надменности". Что в начале боя есть шанс что нпс тебя не воспримет всерьез, будет показывать "провокации", и не будет тебя атаковать. Но после пары пинков игрока, чтобы нпс приходил в чувства и возвращался к своему обычному стилю.

И... Получилось заставить работать всё (провокации, смена настроения после пинка, шансы на надменность), но не смена комбатстиля (( Пол месяца убил. И на нексусе много людей писало советы, перепробовали всё...

Скажу коротко результат - ты не сможешь поменять стиль во время боя. Ни через квэст, ни через  stopcombat, ни через другие методы.

Сам стиль - ПОМЕНЯЕТСЯ, GetOffensive будет показывать что цифры уже поменяны. Но именно до МОЗГОВ НПС - эти изменения не доходят, по неизвестной причине (стиль поменян, но нпс игнорит новые числа).

А ResetAI - крашит игру.

Чтобы "АИ" подхватил и начал использовать новые числа с нового комбат стиля, нужна другая команда (вместо EvaulatePackage, которое не обновляет в ИИ изменения по бою). Но, я просмотрел все команды в Actor Script и ObjectReference Script, и не нашел таковой. Вся надежда была на ResetAI, но он оказался нестабильным, либо им нужно пользоваться как-то по особенному. Программисты Скайрима быстрее всего просто забили на это дело, и решили что модерам такая команда не понадобится.

И по поводу отхода назад, если бой УЖЕ начался - актеры игнорят следование/преследование + команды на ходьбу и спринт. Точней, не игнорят а запускают их всего на миллисекунду и отменяется эффект, если есть возможность "ударить".

дописал:

через заднее место, но после миллионного моего эксперимента, блок вплотную таки заработал:

Код
Debug.SendAnimationEvent(selfactor as objectreference, "staggerStop")
SelfActor.SetAV("Confidence", 0 as Float)        
SelfActor.EvaluatePackage()
Debug.SendAnimationEvent(selfactor as objectreference, "blockStart")
Utility.Wait(0.3000000)
Debug.SendAnimationEvent(selfactor as objectreference, "blockStart")    
Utility.Wait(0.3000000)
Debug.SendAnimationEvent(selfactor as objectreference, "blockStart")    
Utility.Wait(0.3000000)
Debug.SendAnimationEvent(selfactor as objectreference, "blockStart")
Utility.Wait(0.3000000)    
SelfActor.SetAV("Confidence", 4 as Float)        
SelfActor.EvaluatePackage()

Но... Появились новые проблемы.

1. нпс пытается убежать 1 секунду. Эту проблему я решил через selfactor.SetDontMove(true). После чего, он топчется на месте, но уже не бежит и БЛОЧИТСЯ.. и более менее правдоподобно выглядит.

2. с SelfActor.SetAV("Confidence", 0 as Float)  - НПС слишком вопят СДАЮСЬ, хватит, пощады, и т.д.

Как заставить персонажа не произносить стандартные фразы, после удара?

Можно как-то прервать стандартную фразу либо заменить пустой фразой ?

Только не надо теорию, мне от нее уже ...плохо.
Кто может помочь с фрагментом КОДА, как заткнуть персонажа (чтоб он молчал после удара)?

myav  Offline Сообщение №17 | Тема: Вопросы по скриптам Papyrus написано: 18 Февраля 2020 в 17:17 | Отредактировано: myav - Вторник, 18 Февраля 2020, 17:20


Странник


30
Multigone, сегодня на нексусе предложили потестить тоже один вариант "как заставить блочиться" - менять Package, где сделать combat override и поставить useweapon - shield.

Раз пришлось лезть в RefAllias и Packages, я заодно потестил и твой метод (что можно поменять комбат стиль через package).

Твой метод сработал ТОЛЬКО ТОГДА когда скрипт срабатывает ВНЕ боя (нпс - спокоен). Во время боя, как я и говорил - комбатстиль залочен и ему наплевать на всё, включая package. И сегодня тестирование повторилось еще раз.

Да что за жопа с этим блокированием.... Заставить говнюка 2 секунды подержать блок ===> самая большая проблема, которую я только встречал в модинге скайрима :-Р

myav  Offline Сообщение №18 | Тема: Вопросы по скриптам Papyrus написано: 21 Февраля 2020 в 13:36 | Отредактировано: myav - Пятница, 21 Февраля 2020, 16:45


Странник


30
Multigone, очень плохой пример...

1. родная защита данного врага выше за атаку. Иначе нпс не ходил бы в блоке 5 сек, до каста спела. И не то что выше, а в разы выше. Только танк-стиль будет атаковать блоком, а не атакой.
2. спел кастонут не вплотную, я уже 4ю страницу на форуме пишу что проблема именно "вплотную", враг около тебя не активирует блок по команде. А ты всё проигнорировал. Если враг в 2х шагах, как на твоему видео во время каста, то он включит блок и от простой команды sendanimation(blockstart)

Тестируй как я, и увидишь, всё, что не учел:

1. возьми любого персонажа с кинжалом (нпс с кинжалом дает команды на атаки в разы чаще чем с двуручниками), мой любимый бандит: 00037bfc
2. поменяй csHumanMissile:  offensive 90%, defensive: 30%

И попробуй его заставить блочиться вплотную. Чтоб он сделал 10 ударов подряд, не включая блок. А потом, после скрипта - перестал атаковать вплотную.

Именно ТАК я тестирую, все варианты блока. Не на персонаже у которого атака ниже за блок по умолчанию, а на персонаже у которого атака в 3 раза выше. И вплотную.

Видео с пошаговыми действиями тестирования, твоего варианта:

(Первых 10 сек будет мыло, я хз почему так записало. А потом будет 1080. Поэтому прикрепляю скриншот первой вкладки на видео + в некоторых местах СК подвисает, когда ищет, так что: по 5 секунд можно перемотывать в таких местах)




Multigone, если бы твой метод заработал - я сказал бы спасибо и был бы очень рад, что наконец-то говнюки начали блочиться. Но... Ничего не работает (( Я даже сделал видео со всеми своими шагами подробно. Может где то есть маленькая ошибка, которая всё портит?

По тестированию:

1. В Package я проверял оба варианта: "Combat Override" и без него.
2. точно также, я проверял оба варианта "Owner quest": пусто, и название моего мода. Обычно я ставлю пусто, так как (по другим тестированиям), знаю что будет работать, не указывая квэста.
3. Я тестировал на НПС что атакует очень часто (не танк) и кинжалом (частота атак в 2 раза выше чем у двуручника). И на видео показал рейты атак.
4. мои скрипты очень большие (119 переменных только тут), но: когда я что-то тестирую, я всё остальное временно отключаю. Временный return стоит на ВСЕХ функциях, с самого начала (кроме броска рендома + изменения имени в effectStart, но имя - на бой не влияет).

Так что, кроме твоего кода - на "мозги" больше ничего не влияло.

Ты видишь ошибку, почему не блочится? (на видео, хорошо видны: окно - refAllias, окно - Package, и все вкладки к нему, и сам скрипт)

Я не исключаю варианта, что где-то может быть не поставлена всего одна галочка, и из-за этого всё не работает. Но.. Вроде все галочки на месте))

Я скопировал 1:1 как ты сказал, и на видео это видно. Попробуй потестировать точно также (не на танку, а на маньяку с ножем).

Или на твоем видео другой код, не тот, что ты написал? Напиши тогда, как выглядит измененный код. Я проверю любой вариант, мне не лень. Если поможешь добить эту проблему и найти, что не так - буду очень благодарен, и упомяну тебя в релизе, за помощь.

Этот блок у меня уже в печенках сидит. Видишь сколько у меня функций в creation kit (все начинается на UCM_) ? огромнейший мод, который меняет больше чем все боевые моды вместе взятые, и так застрять на блоку)) скоро психону и забью болта, и будут одни увороты, без блока.

myav  Offline Сообщение №19 | Тема: Вопросы по скриптам Papyrus написано: 22 Февраля 2020 в 13:20 | Отредактировано: myav - Воскресенье, 23 Февраля 2020, 12:53


Странник


30
Multigone, ты хочешь сказать, что причина всех моих неудач, что я пытаюсь заставить блочиться именно КИНЖАЛ? dash

P.S.: ну это не так уже и безнадежно)) Confidence + разворачивать лицом к себе + запретить бегать = кинжал БУДЕТ блочиться, и даже делать баш атаки.  Уже продвижение есть)) только говорит много нпс во время этого...

Сегодня проверю и эту теорию. Может все мои функции и смена комбатстиля - работали, а на глаз не было заметно только потому что враг - кинжал. Правда это, или нет, сегодня станет ясно, во время теста.

Добавлено (23 Февраля 2020, 12:42)
---------------------------------------------
Потестил...

Multigone, твой метод - никуда не годится. Слушаются только двуручники и нпс с одноручными топорами/булавами. Тоесть, действительно ставишь forceref с комбатстилем "глухой блок" и они блочатся.

НО!  Всем остальным (у кого не только кинжалы, но и мечи) - насрать ((  даже танкам...  Вот пример 0003de87 - комбатстиль танк (тоесть дефится и так), и в руке - щит. Если он заспавнится с топором - слушается, но если с мечем - он засунет смену Package в задницу и полностью игнорит смену Package. Я думаю, что проблема в том что у него в руках меч (ножи и одноручные мечи не слушают скриптовые команды блока и только юзают свои собственные команды).

И.... НПС у которых в руках мечи/кинжалы это 60% от всех врагов в игре (все лучники с кинжалами, и каждый второй милишник с мечем).

так что, метод который срабатывает только на 40% нпс - не годится. Так как, не слушают даже танки со щитами в руке.
Вот попробуй сам, заставить блочиться через forceref(комбатстиль - глухой блок), персонажа 0003de87, если он заспавнится с мечем. Или любого другого, по аналогии.

Так что... мой вопрос всё еще открыт. Мне нужно заставить блочится ВСЕХ, а не только "избранных".

myav  Offline Сообщение №20 | Тема: Вопросы по скриптам Papyrus написано: 24 Февраля 2020 в 20:30 | Отредактировано: myav - Понедельник, 24 Февраля 2020, 20:44


Странник


30
Multigone, у меня creation kit и notepad++ - на первом месте в списке windows, как самые часто запускаемые программы.
Я даже игрушки реже запускаю )) Это тебе мой ответ, что я типа ленюсь проверять. Это не правда. Я все до единой идеи - долблю до посинения, пытаясь заставить работать))

По поводу твоего списка с 7 пунктов, добавлю от себя - НПС с мечами, что одноручными что с двуручными, слушают "блок приказы" намного слабее, чем те же самые нпс (тот же самый комбатстиль/package), но которые заспавнились с другим оружием. Заставить меча блочиться - это нужно просто заспамить потоком повторений attackstop+blockstart, когда булава - очень послушный, всего 1 команда - и уходит в глухой блок.

Это показали мои вчерашние множественные тесты.

P.S.: я уже запарился с этим блоком. И с сегодня - забиваю болта => добавил в код проверку, если нпс с топорами/булавами/двуручными топорами/молотами - тогда срабатывают мои блок команды и контр-атаки.

Но если нпс с мечем или кинжалом, теперь моя проверка со старта убирает любую попытку блочится, пусть сразу идут на уворот. Даже если со щитом. Не слушают гады, и пофиг на них.

Multigone, за твой пример где ты расписал ForceRefto - спс. Я это применил для топоров/булав, и теперь блочат, когда приказываю). Упомяну тебя за помощь на релизе)

Всё.

ТЕМА БЛОКА - ЗАКРЫТА.

Но.... Появился еще один любительский вопрос. Кто знает, как можно использовать SKSE команду actor.ResetAI ?  без краша... Эта команда тупо крашит игру, моментально ((

Я читал на wiki что в EvaluatePackage() тоже есть => bool ResetAi = false.

Но, папирус не хочет компилировать, ни один из следующих вариантов:
Код
selfactor.EvaluatePackage(true)
selfactor.EvaluatePackage(ResetAi = true)
selfactor.EvaluatePackage(bool ResetAi = true)


а просто selfactor.resetAI() - ложит игру, если использовать его в OnHit.

Никто не пробовал заставить эти команды работать?

Я это спрашиваю, потому что через консоль - resetAI очень помогает мне обновить мозги НПС в одном месте, во время боя, где не помогает EvaluatePackage. Через консоль - работает, а через папирус - я уже описал выше результаты. Если кто-то знает, как эту команду запустить через папирус без краша - плз напишите.

myav  Offline Сообщение №21 | Тема: Вопросы по скриптам Papyrus написано: 13 Апреля 2020 в 10:23


Странник


30
Что-то тут вообще тихо стало...  Надеюсь что все - еще живы)

Помогите плз найти где я промазал логикой.

Есть нпс с оружием, и есть бутылка яда.  И я пытаюсь наложить яд на оружие.

Код
Potion property DamageHealth01 auto
Event OnCombatStateChanged(Actor akTarget, int aeCombatState)        
if (aeCombatState == 1)            
    Utility.Wait(1.5)               
        if (selfactor.GetEquippedItemType(1) < 7 && selfactor.GetEquippedItemType(1) != 0)
            debug.notification("try to apply poison")                    
            form MyPoison = DamageHealth01 as Form                    
           selfactor.EquipItem(MyPoison, false, true)            
        endif        
endif        
EndEvent


но...

яд кидает в карман, сообщение пишет.. а вот на оружие накладывать - никак не хочет.

Помогите идеей как заставить нпс это сделать?

myav  Offline Сообщение №22 | Тема: Вопросы по скриптам Papyrus написано: 15 Апреля 2020 в 11:40 | Отредактировано: Multigone - Вторник, 21 Апреля 2020, 23:46


Странник


30
Мой осмотр модов (с ссылок):

Я подумал, может НПС не хавают зелья с ядом из-за окна подтверждения и использовал первый мод по ссылке якоря (что убирает окно), но не повезло ((( окна исчезли, но всеравно не хавают.

Потом я посмотрел код мода, где автор авто-использует зелья. Там автор использует те же команды что пробовал и я:

Код
_selfRef.EquipItem(_foodDummyRestoreHealth as form, false, true)

а если зелье не дает себя выпить))) то радикальный обход:

Код

  _selfRef.RemoveItem(_foodEffectRestoreHealth [indexArray]as form, countItem, true, none)
                    _selfRef.RestoreActorValue("Health", (_multFoodEffectRestoreHealth [indexArray]* countItem) as Float)


Но, к сожалению, таким методом ты не пропишешь яд на оружие (( так как нету ванильного оружия с ядом, чтобы можно было просто удалить меч, и добавить меч с ядом, как он прописал на хил бутылки.

Теоретически - можно создать "кустом" оружие (сразу с ядом) и удалять обычное оружие/добавлять ядовитые на место (я так делал с ледяными топорами для драугов).  Но оружия в скайриме - много, и моды на оружие - еще больше множат вплоть до гор (особенно immersive weapons).  Метод (удалить обычное, добавить ядовитое) плох, так как большой шанс, что он не обхватит кустом оружие. Правильно будет - именно заставить НПС использовать бутылку.

myav  Offline Сообщение №23 | Тема: United Combat Mod - приветствуются энтузиасты написано: 15 Апреля 2020 в 13:15 | Отредактировано: myav - Среда, 15 Апреля 2020, 13:36


Странник


30
Зачем создана тема:

Ищу напарников по кодингу, сейчас я опишу ситуацию, а вы уже сами решайте.

Вступление:

В общем, пока по всему миру - карантин, и многие сидят дома (а студенты, вообще - почти все дома) ==> у нас появилось больше времени на свои дела)) а Точней - В РАЗЫ больше времени ;) .

Пока не вышли следующие свитки (а они выйдут еще не скоро, судя по пресс-релизам беседки), захотелось в очередной раз помодить Скайрим.

Как я определялся, какую часть игры - модить:

Но... Что модить? модов то тут уже миллион)))) Модами на графику - я удовлетворен (я нашел аж 7 модов конкурентов, и все дают супер глобальный эффект). Модами на шмот, алхимию, собирательство, заселение - я тоже доволен.
Но вот, моды на боевую систему - очень и очень слабуют.

Если читать их описание, то думается что супер пупер мупер (combat evolved, duel, ultimate combat, deadly combat, wildcat, Requiem, Revenge of the Enemies, SkyTEST).

Но потом, я решил просто слепить их все в один мод (чтобы не было конфликтов и крашей, когда сразу все боевые моды). И когда я посмотрел не на описание модов, а именно на КОД. Как же я разочаровался во всех боевых модах.

Везде - очень и очень слабый код и "реальная" продвинутость боя.

После очень долго разбора кода, хвалю:

Единственный человек, что сделал более менее продвинутый код - автор Ultimate Combat. В некоторых местах, пришлось даже пару часов думать, как это вообще работает. Этот автор реально понапрягался с кодом. Но... Он быстро выдохся и его код хоть и сильный, но застрагивает - очень мало.
Единственный человек, у которого не очень код, но норм и интересные идеи (которые и реализованы по простому) - автор Wildcat.

Все остальные, боевые моды - сделали только по грамульке продвинутости боя.
А авторы модов SkyTest и Duel Realism => полные халтурщики (их код не соответствует описанию их модов).

Но, даже если убрать конфликты и слепить: Ultimate + Wildcat = суммарный эффект очень слабый.

Так что, получив кайф от остальных аспектов скайрима.. Я решил, что именно боевку - нужно подтянуть.

Что именно я собрался подтягивать:

Не таскать ползунки в Combat Styles на макс. в право (как сделали все автора других модов), а потом рассказывать что сделали мега работу (хоть на самом деле - просто передвинули уже существующий ползунок). А хочу сделать уникальными ВСЕ ВИДЫ встречаемых врагов, с помощью папирус скриптов.

Что УЖЕ сделано:

1.
 Я уже практически полностью разобрался с людьми, осталось только повысить стабильность кода и уменьшить нагрузку на игру.

В новой боевой системе, люди УЖЕ делают:

Имеют разные ранги крутости (к примеру, встречаешь 5 бандитов, в ванильном скайриме они все будут просто бандитами, в нашем же случаю: один будет новичек, второй - умелый, третий - ветеран, четвертый - тоже новичек, и есть шанс что один из них будет мастер).

На что влияет ранг крутости:

На шанс спец-ударов (что не просто махнет мечем, а прыгнет с вертухой с разворота, либо сделает тройное комбо, либо отскочит всторону, чтобы сразу же резануть сбоку).

На шанс, что враг увернется от твоего удара, либо заблочит его.

На шанс, что враг контратакует тебя сразу (либо после своего уворота).

Что враг потеряет мораль от смертей союзников, и начнет отступать либо убегать.

Что враг перестанет контролировать себя и впадет в бешенство (со сменой поведения)

На шанс продолжительной концентрации (один враг увернется раз, и сразу выдохнется, но если встретишь мастера, он будет блочить уворачиваться, спец-приемить и контрить и устанет только секунд через 15 => твоя жопо-боль может случится раньше, чем он устанет).

На навыки (у новичков 1-3 навыка, у мастеров: 10-15).

Опытных врагов - тяжелее оглушить, и они - легче оглушают тебя.

Опытные враги с большим шансом имеют хил-бутылки и с большим шансом хиляют других нпс с помощью магии.

Это всё уже - реализовано.

2. По такой же системе реализовано поведение стражей. Только у них - другая иерархия по крутости, и свои способности.

3. Сейчас я воюю с драугами. Я не хочу, чтобы их поведение было похожим на поведение людей. Поэтому, для драугов - совершенно другой подход (по рендомизации кого ты встретишь, и что он может в плане приемов, шмота, проклятий).

4.  по всем видам зверей - тоже реализовано уникальные личности (волки - имеют либо пак-эффект, либо одиночка, тигры - соло хищники с внезапными критами (если со спины), кабаны - рваные раны, медведи - переломы ваших костей и опрокидывания.

Что еще нужно:

Но творить еще много много и очень много.... Поведение некромантов с вызовом существ... колдунов с подчинением.. троллей.. ассасинов.. ИИ вампиров.. вреклингов... и других существ - которых очень много.

+ можно еще дальше улучшить поведение людей, драугов, зверей, если появятся еще идеи.

Кого я ищу:

1. Людей которые хорошо понимают папирус mellow .

2. Чтобы был БОЛЬШОЙ энтузиазм и ЕЩЕ БОЛЬШОЕ - упрямство в борьбе (ибо боевка, это та часть скайрима когда читаешь wiki creation kit и там написанно - будет работать. Делаешь - а оно не работает. Гуглишь, спрашиваешь, ищешь, тестируешь, обходные пути и МОРЕ мозахизма, пока заработает)

Это всё дело - добровольное. Хочется тебе сделать крутую боевку? Го долбить дальше вместе, и в финале будем соавторами.

Ну а если тебе лень - качай игрушки и задроть до посинения)))) А я буду дальше улучшать боевку. Но в соло - долго (

myav  Offline Сообщение №24 | Тема: United Combat Mod - приветствуются энтузиасты написано: 15 Апреля 2020 в 21:20 | Отредактировано: myav - Среда, 15 Апреля 2020, 21:25


Странник


30
Dsion, Эта тема создана не для сравнивания модов)) А для - объединения людей в команду, чтобы сделать "больше" и "качественнее" чем в одиночку.

Хардкор со старта и 100е уровни в начале игры - это перебор. Сложность должна зависеть от "выбора игрока". Вот скачает какой-то хомячек мод и он сам решит, жопо-боли он хочет, или казуальности.

Лично я - полностью всё заточил под выбор пользователя (игра проверит какую сложность выбрал игрок. И от этого будет зависеть, кого он встретит и с какой яростью либо ленью, его будут бить).

В общем, ищу напарников (чтобы хотя бы просто помогали с оптимизацией и логикой). Ибо, когда размер скриптов - огромен, просто не успеваешь везде сам.

myav  Offline Сообщение №25 | Тема: United Combat Mod - приветствуются энтузиасты написано: 15 Апреля 2020 в 21:52 | Отредактировано: myav - Среда, 15 Апреля 2020, 21:54


Странник


30
То, что ты написал под: 1-4 на нексусе есть и довольно популярно)) (more needs, immersive disable fast travel, combat evolved - magic module). Ты зря сам писал всё это, мог просто скачать)

Лучше скажи, в команду не хочешь? не развлекухой страдать, а серьезно страдать)))))) и по полной)) ибо продвинутая боевка - жутко сопротивляется скриптингу.

myav  Offline Сообщение №26 | Тема: United Combat Mod - приветствуются энтузиасты написано: 16 Апреля 2020 в 01:50


Странник


30
Когда принимаешь участие, это уже не чужой. 

Я и сам начинал не с нуля, а взял все самые интересные идеи, с текущих боевых модов, и начал добавлять свои.

Но, оки.

Если кто-то захочет поучаствовать в созданию/улучшению крутой боевки - пишите. Я думаю, удовольствие растянется еще как минимум на 2 месяца, так что - тема будет актуальной, еще долго)

myav  Offline Сообщение №27 | Тема: Вопросы по скриптам Papyrus написано: 04 Августа 2020 в 14:03 | Отредактировано: myav - Вторник, 04 Августа 2020, 14:28


Странник


30
Всем хай. Смотрю, у вас тут как всегда))) философские толкания мыслей от якоря)

Ладно, я не из-за этого сюда зашел.

В общем, 4 месяца я делал огромный ИИ мод под стелларис, всё сделал, всё работает, выложил. И для себя пришел к выводу, что менять ИИ в скайриме это самый сложный моддинг :-Р а всё остальное - в разы проще (так как - там всё просто и работает. А тут - не хочет работать и всё).

Я столкнулся с очередной "непонятной" проблемой. Может кому-то будет не лень догадаться и помочь.

В общем, у меня есть функция которая проверяет имя НПС. А потом вторая функция берет базу НПС + имя и меняет имя, если баба)

И я столкнулся с проблемой...

Если призвать НПС через консоль player.placeatme  (код НПС)

То всё работает, игра распознает что бандит, распознает что баба и меняет имя на женское. Например: меняет бандит на бандитка.

Но если я встречаю этого же бандита в игре - игра распознает что это бандит, распознает имя, но НЕ распознает секс (баба или мужик).

Может кто-то сталкивался с этим ?

OneffectStart
....
CheckWho()
....

Код
Function CheckWho ()
    ActorBase UCM_TempBase = selfactor.GetActorBase()
    string TempName=selfactor.GetDisplayName()
    int MySex = UCM_TempBase.GetSex()
        if(selfactor.IsInFaction(BanditFaction))
        CheckName()    
        debug.notification("checkname launched")

            if (FinalName=="-63z-32z-19z-28z-24z-14z0z0z0z0z0z0")
                debug.notification("bandit detected, now check sex")
                if MySex == 1
                     debug.notification("sex female detected and name changed")
                    TempName="Бандитка"
                else
                    debug.notification("sex female NOT detected")
                endif

Если я призываю через консоль то всё всегда работает и получаю сообщения:

checkname launched
bandit detected, now check sex
sex female detected and name changed

Но если я встречаю этих же бандитов где угодно в мире, я получаю сообщения:

checkname launched
bandit detected, now check sex
sex female NOT detected

Они что.. БЕЗПОЛЫЕ ? :-Р

Или я не учел какой-то прикол ? Помогите кто знает, что не так с актор.базой в мире, и почему всё работает через консоль.

Отдельное сообщение якорю: НИ СЛОВА плз.

myav  Offline Сообщение №28 | Тема: Вопросы по скриптам Papyrus написано: 06 Августа 2020 в 00:47


Странник


30
Myprism, Dsion спс что направили мой взор в нужную сторону. Я про эти leveled списки вообще забыл. GetLeveledActorBase() - сегодня тестил - работает, правда иногда попадаются бандиты которых даже такое не берет и мои дебуг сообщения не могут определить кого встретили (может еще один lvl-список внутри списка).

Ezalor, а создать переменную temp и автоматом её менять после каждой выполненной задачи? И чтобы выяснить стадию, просто чекнуть temp.

myav  Offline Сообщение №29 | Тема: Вопросы по скриптам Papyrus написано: 06 Августа 2020 в 14:18 | Отредактировано: myav - Четверг, 06 Августа 2020, 14:33


Странник


30
Закончил с бандитами... Перешел к волкам, и снова проблема.

Я реализовал, что каждый волк во время effect start кастует на себя спел с радиусом поражения (чтобы задело всех остальных волков рядом), чтобы определить сам волк или не сам

Код
Event OnEffectStart (...)
UCM_Wolf_Pack_Spell.Cast(selfactor as objectreference, selfactor as objectreference)
debug.notification("Pack Casted")
....

Event OnHit (ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)    

    if (akSource As Spell)
        debug.notification("ONHIT spell detected")
        if !(akSource As Spell).IsHostile()
            if (akSource As Spell).GetNthEffectMagicEffect(0) == UCM_Wolf_Pack
                debug.notification("ONHIT pack detected")
....


и не проходит хит даже не появляется надпись ONHIT spell detected... 2 волка 3 волка.. сколько бы их не было. Друг друга не задевают спелом, чтобы прошел OnHit. Хоть радиус поражения 15 метров.

Пишет дебуг сообщение что спел кастонут, но что хит прилетел - не пишет.

Скриншот спела:

https://prnt.sc/tv1bdi

Я пробовал менять stagger архетип на другие варианты (включая скрипт), пробовал ставить галочку не recovery, пробовал добавить magnitude. Но OnHit не регистрирует даже сам по себе (в spell.cast я же указал как цель selfactor as objectreference)

Onhit aksource as spell не проходит, хоть убей...

Опять я что-то упускаю... Если кто-то заметит что именно - хелп плз. Что нужно поменять чтобы onhit зарегистрировался по всем волками, без нанесения урона (если с уроном то всё просто, я бы просто скопировал любой эффект FFAimedArea).

myav  Offline Сообщение №30 | Тема: Вопросы по скриптам Papyrus написано: 06 Августа 2020 в 19:43


Странник


30
Multigone, так у меня же Area не <15 а =15 ))

и цель заклинания (delivery) не "self" а "on target". Или ты про что-то другое говоришь ?

ну ладно, area я сегодня подниму до 20 и еще раз проверю, а вот про self я не понял про что разговор.

Форум » Записи участника » myav [30]
  • Страница 1 из 1
  • 1
Поиск: