Вверх Вниз


Модератор форума: Kris†a™  
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Вопросы по скриптам Papyrus
sansuli  Offline Сообщение №1 написано: 31 Августа 2012 в 17:29 | Отредактировано: sansuli - Пятница, 17 Апреля 2015, 21:08


The Red Sun


194
Уроки по скриптованию на языке Papyrus
Прежде чем задать вопрос просмотрите вышеуказанные уроки.
ok

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Myprism  Offline Сообщение №3031 написано: 04 Февраля 2020 в 08:43


Физик


1583
yakor77, я прочитал и совершенно растаял... :)
Нельзя воссоздать Скайрим, да ещё непроприетарно. Найдётся, куча людей, кто затаскает по судам за воровство идей и многого другого. К тому же, хоть мы и ругаем игру и её движок за баги, на самом деле, разработчики сделали великую работу и повторить её смогут только такие же гении. И на это потребуется совсем не один год...

yakor77  Offline Сообщение №3032 написано: 04 Февраля 2020 в 21:21 | Отредактировано: yakor77 - Вторник, 04 Февраля 2020, 22:08


Странник


35
Привет, Myprism!
Ваши сомнения мне так же знакомы. Как и основы права на интеллектуальную собственность. Воссоздать Скайрим можно, по его духу, а не по букве. То есть, открытость игры, скриптовый язык, модульность. Географию можно немножко изменить, персонажей немножко изменить, сюжет немножко изменить - и уже "по судам не затаскают".
Скайрим - это сказка. В сказках есть мировые сюжеты и мировые архетипы. На них ни у кого нет монополии. Каждый имеет право рассказать одну и ту же сказку - на своём языке, своими словами, со своей национальной спецификой. Сюжет о драконоборстве - мировой сюжет, дракон и драконоборец - мировой архетип. Сюжет о национально-освободительной борьбе - мировой сюжет, благородный разбойник, вождь повстанцев, - мировой архетип. Сюжет о живых мертвецах - вампирах - мировой сюжет, вампир, оборотень, зомби, - мировые архетипы.
В России достаточно своих былин и сказок, чтобы построить "свой Скайрим", и не хуже, а лучше! Можно взять период "татаро-монгольского ига" и освобождения от власти Золотой Орды, дракона Алдуина - заменить Змеем Горынычем, Довакина - Ильёй Муромцем. Богов в славянском пантеоне предостаточно, неоязычники хорошо постарались, напридумывали столько, сколько раньше и не было.
Я совершенно согласен с тем, что разработчики Скайрима проделали великую работу. Более открытго мира в жанре фэнтэзи, среди ммо рпг, до сих пор - нет. За что и люблю, и уважаю Скайрим. giverose Геральд Третий - не дотягивает. Его открытость - маленькая, косметическая. Фоллаут - это сайнс фикшн, а не фэнтэзи.
Однако, воссоздать Скайрим - и можно, и нужно! Если его сейчас не обновить - он умрёт. Просто со сменой операционок, с переходом на айфоны и айпэды. А я не хочу, чтобы он умер!
Гениев в России - много. (Лично знаю многих, пробившись в том году, в финалы, трёх хакатонов подряд.) Всё еще есть, несмотря на массовую многолетнюю эмиграцию, сравнимую с экстренной эвакуацией. Но они - нищие. Придавлены к земле банальным выживанием, упахиваются, как рабы, за кусок хлеба. Всё, что нужно, чтобы воссоздать Скайрим, - это деньги. Совсем немножко денег... Но добыть деньги в России на что-то хорошее, не будучи высшим чиновником, олигархом, или их родственником - посложнее, чем убить Алдуина, прогнать вампиров, и освободить Скайрим от имперцев, вместе взятое... dash

С уважением.
Маг Иридий.
Dsion  Offline Сообщение №3033 написано: 04 Февраля 2020 в 22:20



1292
По-моему, таким постам в теме не место...

Бывает, что человек, шарящий в программировании, мечтает создать игру. И он начинает её создавать. Своими силами, в свободное время. Порой таким людям удается создать что-то стоящее. Порой к ним присоединяются другие люди и начинают помогать. Они хотят создать игру и они готовы ради этого работать.

Бывает, что создать игру мечтает художник или тридешник. Тогда он рисует, создает работы, выкладывает их на тематических сайтах. Бывает, его замечают и ему удается поучаствовать в создании чего-то стоящего. Он хочет создать игру и он готов работать.

Бывает, талантливый писатель хочет создать игру. Тогда он продумывает мир, сеттинг и пишет книгу. Иногда таким людям везет и по их миру действительно создают игру, а их приглашают дополнять историю и придумывать квесты. Они тоже работают.

Бывает, хороший организатор хочет создать игру. Он создает кампанию на кикстартере, пиарит проект, нанимает людей, выгрызает инвестиции. И он работает.

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

Добавлено (04 Февраля 2020, 22:39)
---------------------------------------------
А, еще мододелов забыл. Много раз слышал истории о том, как моддеры попадали в серьезный геймдев.


yakor77  Offline Сообщение №3034 написано: 04 Февраля 2020 в 23:19


Странник


35
[quote=Dsion;1332456]По-моему, таким постам в теме не место... Бывает, чт[/quote] - колллега Дсион, всяко бывает. И так, как Вы описали, и как-то ещё. Но мы - живые люди, а не игровые роботы - нпс. Нам свойственно не только работу работать. Но и повспоминать. И помечтать. Если в меру и в тему - то, почему бы и нет? Что оффтоп, а что онтоп - решать здешнему админу, и только ему. А самомодерирование - дурной тон, не есть гуд.

С уважением.
Маг Иридий.
s1t1s  Offline Сообщение №3035 написано: 09 Февраля 2020 в 12:40 | Отредактировано: s1t1s - Воскресенье, 09 Февраля 2020, 13:03


Странник


6
Есть скрипт, который спавнит NPC после того, как пройден квест. (Например Ветреный Пик)?

Myprism  Offline Сообщение №3036 написано: 09 Февраля 2020 в 13:02


Физик


1583
s1t1s, это вопрос или утверждение?

s1t1s  Offline Сообщение №3037 написано: 09 Февраля 2020 в 13:03 | Отредактировано: s1t1s - Воскресенье, 09 Февраля 2020, 13:04


Странник


6
Сорямба, изменил. Это был вопрос.

Dsion  Offline Сообщение №3038 написано: 09 Февраля 2020 в 13:12



1292
s1t1s, в общем-то, можно добавить включение (или спавн) НИП в скрипт последней стадии завершаемого квеста. Но, если это ванильный квест, а не твой собственный, то лучше так не делать.

Момент завершения другого квеста особо и не поймаешь (не могу вспомнить сповобов его поймать).

Можно сделать через SM Event: Change Location Event. И там выполнять проверку завершенности другого квеста.

Ну или поэкспериментировать со скриптами на самом НИП. Если для "отключенных" (невидимых) НИП вызываются ивенты типа OnCellAttach() , то это вообще зашибись.
Когда игрок заходит в локацию с "отключенным" НИП, то на НИП вызывается OnCellAttach, выполняется проверка завершенности другого квеста и, если квест завершен, НИП "включается" и становится видимым.

Myprism  Offline Сообщение №3039 написано: 09 Февраля 2020 в 14:37


Физик


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

yakor77  Offline Сообщение №3040 написано: 10 Февраля 2020 в 03:22


Странник


35
[quote=Myprism;1332543]Или поставить свой триггер, прохождение которого неизбежно в конце того квеста и который воскресит нам кого надо.[/quote] - да, коллега Myprism-Физик, этот способ кажется мне надежней и удобней всего.

С уважением.
Маг Иридий.
Dsion  Offline Сообщение №3041 написано: 10 Февраля 2020 в 22:07



1292
Истинно надежный способ предусматривал бы возможность того, что квест будет завершен командой в консоль :-P

yakor77  Offline Сообщение №3042 написано: 11 Февраля 2020 в 14:57


Странник


35
[quote=Dsion;1332584]Истинно надежный способ предусматривал бы возможность того, что квест будет завершен командой в консоль :-P[/quote] - Коллега Dsion, не всегда это (консольное завершение квеста) - необходимо. К тому же маркёры завершения очередного этапа квеста, бывают настолько разреженными, что имеет смысл поставить свой маркёр, на каком-то промежуточном этапе, не предусмотренном ванилью.

С уважением.
Маг Иридий.
Dsion  Offline Сообщение №3043 написано: 11 Февраля 2020 в 21:44



1292
Если чертов игрок хочет завершить ванильный квест из консоли или если он подключает наш мод уже после завершения квеста, это не должно поломать нафиг наш мод.
Кстати, кроме двух вариантов, что я уже предложил, вот еще простенький, но без костылей. Вешаем на НИП пакет с двумя ветками:
1. (если другой квест завершен) стоять там, где нужно стоять
2. (если другой квест еще не завершен) стоять в каком-то целле, в который игрок не может попасть.
Не обязательно же, чтоб НИП именно спавнился и именно в момент завершения квеста? Пусть он туда просто приходит.

myav  Offline Сообщение №3044 написано: 13 Февраля 2020 в 11:15 | Отредактировано: myav - Четверг, 13 Февраля 2020, 14:05


Странник


26
Всем снова приветики)) Я вижу вы от скуки, уже про воссоздание Скайрима начали говорить, и про суды последствия :-Р А топик то про модинг и коды)) Если есть простаивающий программист, что думает что состартится умрет и его талант - не реализуется в жизни ==>  нужно свою игру сделать, а не пересоздавать скайрим))  Но! Давайте лучше отвлечемся от подобных мечтаний, и поговорим про кодинг :-Р.

Тут появился еще один политически-скриптовый вопрос.

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

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

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

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

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

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

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

attackStop
staggerStop
recoilStop

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

Надеюсь, что Dsion либо другой кодер практик - снова отпишутся, если есть опыт в этом.

А ФИЛОСОФЫ => ТССССССССС. Про теорию вероятностей, не нужно начинать рассуждения :).

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

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

Практики кодеры - ХЕЕЛП. Как заставить не начинать атаки и начать блок, вплотную к игроку?

yakor77  Offline Сообщение №3045 написано: 14 Февраля 2020 в 08:28 | Отредактировано: yakor77 - Пятница, 14 Февраля 2020, 09:17


Странник


35
[quote=myav;1332638]Как заставить не начинать атаки и начать блок, вплотную к игроку?
[/quote] - Уважаемый коллега Myav!
Знаете, чем Программист отличается от Кодера? Программист сначала думает, потом кодит. Кодер, наоборот, сначала кодит, а потом... либо снова кодит, либо думает (но это опционально). Прежде, чем тупо и вслепую перебирать варианты, а потом взывать о помощи, как котёнок, который забрался на дерево, и не может с него слезть, и орет "Мяяв! Мяяв!", я предлагаю стать программистом, включить мозги, и подумать. "От живого созерцания к абстрактному мышлению, и от него к практи - вот путь истинного познания!" А от созерцания сразу к практике переходят только кодеры, блондинки и котята. ;)
Итак, в абстрактном мышлении, рассмотрим логику процесса.
Если НПС находится на расстоянии от игрока, больше критического, всё хорошо, приказы исполняются. Если НПС находится от игрока на расстоянии меньше критического, всё плохо - приказы не исполняются. Почему, по какой причине? В этом случае, на расстоянии ближе критического, происходит перехват управления, и безусловный, наивысший приоритет - получает какая-то команда, исходящая от персонажа игрока (например, команда агрессивной атаки).
Как это можно проиллюстрировать на понятном бытовом примере?
Представьте, что Вы едете на автомобиле по горной дороге. Всё хорошо, автомобиль слушается команды управления. Но вот Вам не повезло, Вы сорвались и летите в пропасть. Вы можете при этом сколько угодно крутить баранку, жать на газ или на тормоз, мигать фарами, и пр. - бесполезно. Управление перехвачено Законом всемирного тяготения. Вы из водителя автомобиля, вместе с ним, превращаетесь в тупое механическое тело массы эм. Почему Вы не падали, когда находились на горной дороге? Потому что Вам препятствовало к этому реакция опоры, то есть, самой горной дороги.
Что надо сделать, чтобы не сорваться в пропасть на горной дороге?
1) Не подъезжать близко к краю обрыва на скорости, при которой Вы не сможете вырулить, или затормозить. Или сбросить скорость и ехать очень медленно.
2) Перед поездкой, если есть такая возможность, поставить заборчик вдоль обрыва, который помешал бы Вам сорваться в пропасть. Или ездить лишь по таким дорогам, где есть такие ограждения, имея карту.
3) Запастись средствами спасения, как пассивными, типа парашюта, или арбалета с тросом, чтобы выстрелить в склон и повиснуть на тросе, так и активными, сделав летающий автомобиль с крыльями. При встрече с землей надо или затормозить реактивным двигателем, или выпустить пузырь подушки безопасности, которая смягчит последствия удара. Антигравитации и обращения времени в нашем мире пока не открыто.
Ну и есть вариант 0 (ноль) - не кататься по горной дороге вообще.
А теперь переводим эту метафору опять на язык Скайрима.
Роль закона Всемирного тяготения, который перехватывает управление, скорее всего, является прошитый в движке намертво автоматизм, безусловный рефлекс персонажа игрока. Который Вы, не хакнув код движка, изменить не в силах. Что можно сделать без взлома движка?
А) Не приближаться к игроку ближе критического расстояния, для чего его постоянно мониторить. А если приблизились - тут же отскочить обратно. И на это написать скрипт. Отскочив, можно выключить агрессию персонажа.
Б) Поставить стеночку между НПС и ГГ, экранировав автоматизм. Персонаж Игрока должен стать как бы невидимым (выпить зелье невидимости, амулет или заклинание невидимости), исчезнуть для НПС. Возможно, исчезнуть буквально (дисэйбл - енейбл). Проверить подход в крадущемся режиме, на корточках. Проверить через консоль установление для визави максимального релейшншип дружелюбия. То есть, через консоль, сделать врага - другом.
В) Поставить абсолютную броню, и пусть себе дерется, делайте спокойно то, что надо.
Вариан полёта - проверьте, что будет, если НПС окажется НАД ГГ, взлетит над его головой, или ПОД ним, пройдя сквозь пол за пределы локации. Есть в Скайриме такой режим привидения, который позволяет проходить сквозь стены. Действует ли там, над и под, агрессия, и на каком расстоянии? То есть, область агрессии - она цилиндричская или сферическая? Это надо исследовать.
Наконец, поместите НПС ВНУТРЬ ГГ, совместите две фигурки. И выходите из ГГ, определив критическое растояние изнутри. Действует ли там агрессия, или есть "глаз торнадо", когда вокруг всё дико крутится, а внутри - тихо? То есть, цилиндр агрессии - он полый или полный? Это шар или сфера?
Мне интересны результаты Вашего микроисследования, в этих трёх странных случаях, тогда можно будет сформулировать разные варианты гипотезы для дальнейшего поиска решения.

С уважением.
Маг Иридий.
myav  Offline Сообщение №3046 написано: 14 Февраля 2020 в 22:26 | Отредактировано: myav - Пятница, 14 Февраля 2020, 23:09


Странник


26
Я же просил не философствовать про космос и горные дороги))  Ну почему от yakor77 ВСЕГДА так много текста с теорией...
возьми как пример ответы dsion-а, коротко и четко. Без тонны бУкВ.

yakor77, следующих твоих 100 рядков, я просто не переживу)))

Один раз отвечу по всем твоим пунктам, и хватит:

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 - там дистанция в разы больше, но эти атаки - редко выбираются).

yakor77, если появятся НОВЫЕ идеи, плз не надо писать 40 рядков вступления про горные дороги.

Кодеры, у которых есть опыт скриптинга боя - Воскресните! я уже не знаю с какой стороны подходить к этому непослушному блоку.

Multigone  Offline Сообщение №3047 написано: 15 Февраля 2020 в 00:33



661
myav, можно попробовать закинуть актера в алиас высокоприоритетного квеста, имеющий пакет с CombatStyle, в котором все атаки сведены к 0, а защита к 1. Чтобы пакет подействовал немедленно, EvaluatePackage(). Правда, неясно, как это будет выгдядеть в динамике боя.

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

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


Странник


26
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)  - НПС слишком вопят СДАЮСЬ, хватит, пощады, и т.д.

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

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

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

Multigone  Offline Сообщение №3049 написано: 15 Февраля 2020 в 04:05



661
myav, кхм.


Цитата
EvaluatePackage()

Неплохо бы понимать, что это делает. А делает оно следующее: выбирает из списка всех возможных для этого актера AI-пакетов (Packages) один подходящий по условиям (первый сверху по списку либо в листе актера, либо в одном из алиасов, заполненных этим актером; алиасы сортируются по приоритету квестов) и применяет его немедленно. В твоем коде он явно не нужен.


Код
ты не сможешь поменять стиль во время боя

Вообще-то можешь, согласно проверке, делая в точности то, что и написано выше.
1) Создать новый квест c флагами Start Game Enabled, Run Once (хз, может, и без них будет работать)
2) Создать пустой алиас Specifiс Ref c флагом Optional.
3) Создать новый стиль боя (General - первые 4 ползунка на 0, за исключением Defensive = 1) (Melee - все на 0)
4) Создать пустой пакет (Type = Package, Template = none, Public Package Data - все удалить) (Combat Style = п. 3)
5) Пакет внести в алиас п. 2.
6) Код активации:
   
Код
MyCreatedAlias.ForceRefTo(MyDarlingActor)
    Utility.Wait(0.25)
    MyDarlingActor.EvaluatePackage()

Думаю, можно обойтись и SetCombatStyle(), просто проверял по старинке.
Маги все равно атакуют, но вроде бы реже.
Драугры с 2H не блокируют от слова совсем.
Как вернуть прежний стиль, расписывать не буду.

yakor77  Offline Сообщение №3050 написано: 15 Февраля 2020 в 06:36 | Отредактировано: yakor77 - Суббота, 15 Февраля 2020, 06:38


Странник


35
[quote=myav;1332674]yakor77, если появятся НОВЫЕ идеи, плз не надо писать 40 рядков вступления про горные дороги.[/quote] - коллега Myav, нужно было выбить Вас из зацикленности, из слепого перебора вариантов все подряд, снять психологические барьеры, нацелить на спокойное логическое обдумывание, на нетривиальное, креативное решение. И это моей "философией" и было с успехом проделано.
Что же касается "новых идей"... проверьте возможность коллективной атаки. Наспавните вокруг атакуемого, скажем, штук 6 атакующих, по окружности, на равном расстоянии от него и друг от друга. Правильный шестиугольник. И посмотрите на его реакцию с блоками. Смысл теста: ситуация "буриданов осёл". Все атакующие - равны по всем параметрам. Кого атакуемый выберет первым? Что станет делать?

С уважением.
Маг Иридий.
myav  Offline Сообщение №3051 написано: 15 Февраля 2020 в 12:29


Странник


26
Multigone,

Приду с магазина и попробую убрать Evaulate, посмотрим.

А как заставить НПС молчать после удара. А тут есть у кого-нить идеи?

s1t1s  Offline Сообщение №3052 написано: 15 Февраля 2020 в 21:08


Странник


6
Кто может написать скрипт, чтобы после окончания диалога NPC становился агрессивным?

yakor77  Offline Сообщение №3053 написано: 17 Февраля 2020 в 10:46 | Отредактировано: yakor77 - Понедельник, 17 Февраля 2020, 10:47


Странник


35
[quote=s1t1s;1332698]Кто может написать скрипт, чтобы после окончания диалога NPC становился агрессивным?[/quote] - коллега, а зачем его писать, он уже есть! В ванильной версии есть диалоги, например, о кабацкой дуэли на кулачках, или тренинги по обучению владению холодным оружием. Обычный условный оператор. Если договор заключен, то противники начинают драться. Драка прекращается так же при выполнении заявленного условия.

С уважением.
Маг Иридий.
myav  Offline Сообщение №3054 написано: 17 Февраля 2020 в 23:40


Странник


26
Я так понял, с скриптингом разговоров никто не сталкивался ((

пока доведешь этот блок до ума :-Р с ума можно сойти... уже почти на финише.. осталось только убрать реплики и снова ситуация тормознулась(

yakor77  Offline Сообщение №3055 написано: 18 Февраля 2020 в 10:34 | Отредактировано: yakor77 - Вторник, 18 Февраля 2020, 10:34


Странник


35
[quote=myav;1332750]и снова ситуация тормознулась([/quote]- коллега Myav, да, я Вам всемерно сочувствую: трудно быть богом.
Но, к сожалению, нам никто и не обещал, что быть богом - будет легко...

С уважением.
Маг Иридий.
myav  Offline Сообщение №3056 написано: 18 Февраля 2020 в 17:17 | Отредактировано: myav - Вторник, 18 Февраля 2020, 17:20


Странник


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

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

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

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

yakor77  Offline Сообщение №3057 написано: 19 Февраля 2020 в 12:13


Странник


35
[quote=myav;1332759]Во время боя, как я и говорил - комбатстиль залочен и ему наплевать на всё, включая package. [/quote] - коллега Myav, как я и говорил, это и есть "падение в пропасть на горной дороге". Автоматизм, который получает высший приоритет, и игнорит все прочие. Если скрипт срабатывет вне боя - ну так и используйте его _вне_ боя. Не надо падать в пропасть, чтобы потом, в свободном падении, не вопить в бессильном ужасе "Да что за жопа с этим падением, ни руль, ни тормоза, ни газ - на машину не действуют!" dash

С уважением.
Маг Иридий.
Multigone  Offline Сообщение №3058 написано: 20 Февраля 2020 в 03:54



661
myav,


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


Странник


26
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_) ? огромнейший мод, который меняет больше чем все боевые моды вместе взятые, и так застрять на блоку)) скоро психону и забью болта, и будут одни увороты, без блока.

Multigone  Offline Сообщение №3060 написано: 22 Февраля 2020 в 03:33



661
Цитата myav ()
очень плохой пример...
Какой бы, по твоему мнению, это плохой пример не был, он ясно показывает, что стиль боя (CSTY) менять можно. Прямо во время боя. Хотя пару постов выше кое-кто утверждал обратное.

Цитата myav ()
1. родная защита данного врага выше за атаку. Иначе нпс не ходил бы в блоке 5 сек, до каста спела. И не то что выше, а в разы выше. Только танк-стиль будет атаковать блоком, а не атакой.
Лол, это вообще что. Да наплевать, какой стиль был у НПС до смены. А вот то, кем и какого типа экипировано оружие, для целей блокирования важно не только лишь немного.

Цитата myav ()
2. спел кастонут не вплотную, я уже 4ю страницу на форуме пишу что проблема именно "вплотную", враг около тебя не активирует блок по команде. А ты всё проигнорировал. Если враг в 2х шагах, как на твоему видео во время каста, то он включит блок и от простой команды sendanimation(blockstart)
А ничего, что это два принципиально разных способа заставить НПС блокировать? При смене CSTY мы регулируем поведение боевого AI, при SendAnimationEvent мы напрямую указываем, какую анимацию играть. Так что расстояние в моем случае не играет роли, что было доказано доп. тестом.

Цитата myav ()
возьми любого персонажа с кинжалом
Актер с кинжалом под управлением боевого AI не блокирует атаки вообще, согласно тестам. Я даже не припомню такого за все время игры. Так же, например, как и bash-атаки лучников. Так же, как нельзя поменять скорость силовой атаки парными кинжалами. И много чего еще.

Цитата myav ()
Именно ТАК я тестирую, все варианты блока. Не на персонаже у которого атака ниже за блок по умолчанию, а на персонаже у которого атака в 3 раза выше. И вплотную.
Попробуй взять в правую руку оружие, бессердечный AI безоружных атакует по возможности.

Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Поиск: