• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
m4mk203, можно и без триггера... На алиасе игрока скрипт с ивентом смены локации. И если локация находится в списке запретных для простых смертных, то вешаем на игрока вредящий эффект. Опционально, можно сделать, чтоб эффект вредил только в заданном радиусе от двери. Или даже чтоб усиливался по мере приближения к двери. Лично мою интуицию такой вариант больше радует потому что гарантированно совместим с другими модами.
Правильно ли я понял систему с алиасами: создаем пустой квест без стадий и флагом стартовать в начале игы. В список алиасов вешаем игрока. И уже на алиас игрока все нужные скриптовые отработки. Так?
Теперь по дверям. Дело в том, что в нордских подземельях я хочу отрабатывать не только два класса дверей (первый - с драконьим когтем и замками-ребусами, второй - все остальные) но и точки логического разделения подземелий на области, а там уже к объекту не привяжешся. Под точками логического разделения я понимаю такие вещи как выход с винтовой лестницы в обрядную комнату на Ветренном Пике, то есть места, где происходит доступ в некие значимые обрядово или логически учатки подземелья, а вот дверей там может и не быть. По сути это некие "дверные проемы", небольшие комнаты, мосты. Там без триггерных областей ИМХО никак. Ну и не хочется мне трогать событие смены локаций. Как бы вылетов не наплодить.
Еще момент по поводу квестов и алиасов. Нужно реализовать такую штуку:
При начале новой игры после создания и подтверждения персонажа у гг нужно запустить эффект оглушения с анимацией и закинуть с соответствующим уведомлением ему в инвентарь записку и пару плюшек. Никакой квест при этом начинаться не должен. Событие одноразовое и происходит безусловно. При этом фокус должен корректно сработать даже при установленном моде "Живи другой жизнью". Как такое реализовать?
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2463
написано: 26 июня 2017, 14:10
| Отредактировано: Multigone - 22 апреля 2020, 15:46
m4mk203, вопрос, скорее, в том, к чему подцепиться... И как должен отреагировать мод, если его подключили уже после старта игры?
Можно прицепиться к началу отсчета игрового времени. Но в ванильном варианте оно начинается не тогда, когда игрок завершает создание персонажа, а когда его освобождают от наручников в крепости. Это самый простой вариант. В "живи другой жизнью" - вообще без понятия когда начинается.
Можно к расе игрока, к стадии главного квеста, входу в любую конкретную локацию. Или просто к смене локации, но при условии, что игрок уже полностью контролирует персонажа. Или просто проверять каждый игровой час, контролирует ли игрок персонажа. К первому входу в нордские руины итд итп.
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2465
написано: 26 июня 2017, 15:27
| Отредактировано: m4mk203 - 26 июня 2017, 15:30
Dsion, а можно отплясать таким колхозно-ломовым методом: нужное событие случается при достижении игроком скажем 2-го уровня? На получении 2-го уровня гг вряд-ли успеет сунуться хоть в один данж драугров. Если да, то как именно это реализовать? Событие одноразовое и никакого квеста на нем не стартует. Просто кидаем в инвенталь записку, пару приблуд и проигрываем под это все анимацию оглушения секунд на 10.
Вот сокращенный (без описания квестов и стадий) вариант ТЗ для мода.
ТЗ
Переработка древних подземелий.
Обоснование Три простых факта:
1. Этим данжам тысячи(!) лет и они до сих пор не разграблены, хотя территория их нахождения плотно заселена и авантюристов на ней хватает. 2. Кто похоронен в этих данжах? Великие воины прошлого среди которых хватало и Языков (читай тех же довакинов) + самые продвинутые черные маги того времени - драконьи жрецы. 3. В данжах есть гора предметов, которые не могли там пролежать тысячи лет тупо не сгнив + есть свежие продукты + горит огонь + механические ловушеки сохраняют работоспособность.
Отсюда вполне логические выводы: 1. В данжах лежат очень серьезные противники и зависеть от уровня ГГ они зависеть не могут ибо на момент смерти уже были люто прокачаны. 2. Данжи времен расцвета черных магов не могут быть защищены только парой тупых ребусов, доской с гвоздями и шатающимися топориками. Эти могильники должны защищать реально страшные заклятия для обеспечения их недоступности для самых искушенных грабителей (среди которых вполне могут быть и опытные маги) 3. В сокровищницах таких данжей не может лежать пара септимов и сраный кожанный шлем. Сундуки должны быть просто набиты ценностями и артефактами, которые должны обесапечить умершим в ином мире благополучие и власть. 4. Доступ к сундукам должен быть максимально закрыт отличными замками и охранными заклинаниями, способными эффективно отпугивать даже самых упоротых воров. 5. Кто сказал, что культ древних жрецов исчез окончательно, не оставив тайных последователей? Никто. Более того, ситуация в данжах ясно говорит о том, что их посещают и обслуживают. Отсюда вывод - должен быть способ безопасного существования в данжах.
Из вышесказанного следует ряд задач для приведения данжей в надлежащий вид
1. Противники в подземельях уровнем не ниже хорошо прокачанного доы - 50 левел. 2. Все сундуки заперты на экспертные замки + защищены серьезными заклинаниями, основная задача который предотвратить вынос ценностей и жестоко наказать вора. Предусматривается пороговое повышение жесткости наказания в зависимости от колличества срабатыцваний защиты. Первых 5 раз просто отберем весь шмот. С 6 по 10 разы отбираем шмот и телепортим в паскудное место с 11 по 15 шмот+место+режем до 5 навык скрытности и т.д. 3. Обеспечить магическую защиту ключевых дверей переходов и помещений данжей. При попадании в эти системы защиты без оберегающих амулетов гг ожидают неприятные дебафы. Достаточно мощные, чтобы даже неплохо раскачанный ГГ не смог уйти далеко по данжу без охранного амулета (специальная маска драконьего жреца) 4. Двери усыпальниц и ключи от них должны быть защищены самым серьезным образом. Попытка ношения когтя от неоткрытой еще двери без защитного амулета приводит к очень быстрой смерти ГГ вне зависимости от уровня прокачки. Попытка открыть или даже подойти дверь с когтем без соответствующего амулета автоматом убивает ГГ независимо от уровня прокачки. 5. Существует ряд защитных амулетов: а) Защита от заклятий сундуков б) защита от дверных и коридорных ловушек в) Защита для ношения когтя г) Защита для прохождения главной двери Оригиналы этих амулетов принадлежат посвященным и достать их гг не сможет, но сможет скрафтить ухудшенные аналоги в кузнице атронахов. Худшесть аналогов в том, что они уничтожаются каждый раз при контакте с соответствующей системой защиты. Основной ингридиент для крафта этих амулетов - магические свитки с благословениями жрецов. Найти эти свитки можно только в сундуках драугров в их данжах. То есть гг в любом случае придется туда лезть и рисковать. 6. Неким (пока не придумал) образом системы защиты данжей должны подстраиваться под гг: ловушки на воина могут быть пофигу магу и наоборот. Не должно быть читерной комбинации прокачки гг. Каждый тип (воин или маг) должен огребать по полной. 7. В конце квеста (прохождение всех данжей с драконьими когтями) гг получит возможность заиметь некоторые защитные амулеты в оригинальном качестве (не уничтожаются при контакте с ловушками). Но только один - максимум два.
8. Доп стимулом будет размещение с рандомным спавном в подземельях и сундуках серьезных вкусностей и плюшек в виде уникальной брони, заклинаний, оружия.
В первую очередь я планирую реализовать все плюшки, амулеты и механику ловушек. Потом очередь квестов.
Фактически нужно решить три основных задачи: 1. Серьезно мотивировать ГГ лезть в данжи. 2. Устроить в этих данжах реальное зверство при чем не банальным задиранием уровня неписей 3. Обеспечить реиграбельность пройденных данжей в рамках даже текущего прохождения (мотивировать ГГ возвращаться туда)
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2466
написано: 26 июня 2017, 18:16
| Отредактировано: Dsion - 26 июня 2017, 18:24
m4mk203, да всё можно. Можно даже в две строчки скрипта заюзать стандартного гонца, который доставит игроку посылку. Ладненько, выбор конкретного решения там, где есть много вариантов, - это не моё. Так что я сливаюсь!
Всем снова привет. Нашел альтернативный вариант относительно своего последнего вопроса, но возникли проблемы. Собственно, вот фрагмент кода:
.......... If (self.GetEquippedItemType(1) >= 1 && GetEquippedItemType(1) <= 8) || GetEquippedItemType(1) == 12 ;если в правой руке оружие, то... ObjectReference wpn1 = self.GetEquippedObject(1) as ObjectReference ;сохраняем в переменной предмет в виде Form, т.к. напрямуй никак, и какстуем Form в ObjectReference, т.к. требуют дальнейшие ф-ции float charge = wpn1.GetItemCharge() ;сохраняем уровень заряда зачарованного оружия для краткости и удобства Debug.Notification(wpn1 + "checked on" + self) ;проверяем результат в игре
If charge <= MinStaminaAVPercent*wpn1.GetItemMaxCharge() ;если уровень заряда ниже,то(MinStaminaAVPercent = 0.3) While charge < MaxStaminaAVPercent*wpn1.GetItemMaxCharge() ;заряжать, пока уровень заряда меньше, чем(MaxStaminaAVPercent = 0.8)
If self.GetItemCount(SoulGemPettyFilled) > 0 ;здесь и далее проверяем, какие заполненные камни душ есть, и используем их для зарядки(SoulGemPettyFilled - заполненный крохотный камень душ) self.RemoveItem(SoulGemPettyFilled, 1, true) ;удаляем камень wpn1.SetItemCharge(charge + 250.0) ;заряжаем на размер души в камне
Notification в игре выводит Nonchecked, судя по всему, не хочет кастоваться тип переменной, так как результатов нижеследующих действий нет (заполненные обычные камни душ не удаляются, проверял именно на них). Событие срабатывает, так как другие действия скрипта успешно выполняются. 1. Прав ли я? 2. Как это обойти/исправить?
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2470
написано: 26 июня 2017, 18:45
| Отредактировано: Dsion - 26 июня 2017, 18:47
Я сейчас на море без СК, но, по-моему, такой вариант срабатывает через 1/10 часа после начала отсчета игрового времени (освобождение игрока от наручиков). А если мод был подключен не с самого начала игры, то через 1/10 часа после входа игрока в мир со включенным модом.
А вариант с гонцом точно не хочешь? Оглушение и прилетающие из ниоткуда предметы - как-то не лорово.
Dsion, ох.... Ладно. Давай тоггда попробуем вариант универсального типа - с гонцом. Но я слыхал, что этот кадр глюковат. Правда сам с ним за три года общения со скаем проблем не имел. Расскажи как с гонцом запилить
m4mk203, а я не помню Помню только, что где-то есть квест гонца (что-то там со словом "Courier"). На квесте скрипт, а в скрипте функция, которую достаточно вызвать и всё. Как-то так:
Выдача наград за убийство именованых драконьих жрецов (тех из них, что имеют маски).
Есть секретные кусты, в них секретный алтарь. Есть сделанный руками набор наградных плюх, забитый в формлист. Есть глобальная переменная-счетчик (булл не катит ибо ГГ может вернуться за наградой после убийства нескольких жрецов) количества свежих трупаков жрецов . Есть формлист с перечнем масок жрецов.
Когда ГГ жмакает по алтарю скрипт смотрит на счетчик убийств и если он не 0, то начинает в цикле выдавать награды. Цикл по значению счетчика. После выдачи наград счетчик обнуляется.
Механизм выдачи награды. Для получения плюшки по задумке нужно выполнение двух условий:
1. Подтвержденное убийство жреца именно ГГ, а не компаньеном или законом всемирной справедливости. 2. Маска жреца в инвентаре ГГ (на данном этапе - чисто антуражная опция, но в дальнейшем будет иметь серьезное функциональное значение)
При выдаче награды маска жертвы удаляется из формлиста масок. Соответственно дважды за один намордник пиченьки не дают.
Проблема: глобальный счетчик убийств должен тикать только при условии, что жреца грохнул именно ГГ. Как это однозначно отловить? Че делать с остальным - понятно.
2. Нужна помощь в создании чудоплюшки.
"Стрела вора"
Эбонитовая стрела. Мой уникальный объект, созданный в ките. Под него создан свой эффект на попадание. При попадании по живым целям работает стандартным образом. Фишка в том, что если я попадаю такой стрелой в трупешник или сундук, то лут из таргета автоматом перемещается в инвентарь ГГ. При этом не должно возникать крайма на ГГ. Лут вполне может отмечаться, как ворованный. Главное не спровоцировать событие преступления.
Стрелы выдаются рандомным лутом с низким шансом и не крафтятся.
На сколько я понимаю тут нужно отрабатывать ситуацию скриптом, который висит на маг эффекте в специальном зачаре привязанном в графе зачарования на эффекте попадания данной стрелы. Вопрос: как должен выглядеть скрипт на маг. эффекте, который определит, что таргет нужного типа (и при этом не живой) и получит референс на контейнер, чтобы забрать лут. При этом должен сохраняться рабочим механизм стандартного попадания по живой цели.
m4mk203, попробуй сначала на стрелу хоть какое-то зачарование повесить. Я на море без СК, но не помню, чтоб такое было возможно. На арбалетных болтах висит Explosion - но это взрыв, а не зачарование. Там хрен получишь референсы тех, кого задел взрыв. А вот с помощью перка на ГГ можно сделать... Там можно к любому попаданию из любого оружия подцепиться или даже ко взмаху этим оружием.
Вот еще глянь: OnDeath другого способа не приходит в голову. вешать можно на базового актора, на конкретный референс или на алиас.
m4mk203, попробуй сначала на стрелу хоть какое-то зачарование повесить
Можно. Работает. Делал таким макаром отравленные стрелы, которые при попадании вешают на таргет эффект яда через зачар с дейтсвием при контакте. Просто хрен его знает как вынуть референс таргета. С перками не работал ни разу и даже не представляю как это работает. Буду посмотреть.
OnDeath имеется в виду то событие, что срабатывает на жреце и типа отдает референс на киллера? То есть вешаю скрипт на актора-жреца в СК и отрабатываю в скрипте его событие OnDeath. Правильно?
Dsion, скрипт привязал к стреле, но всплыла проблемка: OnEffectStart в этом варианте срабатывает только на живых целях и трупаках. Больше ни на каком типе контейнера этого события не возникает.
Так на неживые сундуки и магический эффект-то не накладывается. Поймать попадания по сундукам я только два способа знаю: один предполагает повешение скрипта на сам сундук, что плохо, а второй еще хуже и точно тебе не понравится.
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2480
написано: 29 июня 2017, 12:42
| Отредактировано: m4mk203 - 29 июня 2017, 12:49
Dsion, с сундуками дело гнилое. Ок. Буду развивать тему с живыми и мертвыми. Эффект прикольный получился
Такой вот прикол
Задача считать трупы по категориям. Подробнее. Есть два типа трупешников, за которые ГГ будет получать вознаграждение. Механизм не квестового типа. Предположим я пробежался по владению Истмарк и нарезал в нем пару десятков бандюков (в разных локациях этого владения). В какой-то момент я прихожу к ярлу Истмарка и через диалог с ним (отдельно созданную для этого ветку) получаю некую награду (по рандому из формлиста) за убиенных. После этого счетчик убийств для данного владения обнуляется и я снова иду на охоту. Счетчик не для локации, а именно для всего конкретного владения. 9 владений - 9 счетчиков.
Вопрос. К чему лепить скрипт-обработчик OnDeath для подсчета убийства бандюков в конкретном владении (независимо от конкретной локации этого владения)?
Ну и та же модель относительно драугров. Не важно где и когда я убил Драугра, но есои это сделал я, то счетчик должен тикнуть. Награда будет получаться у специального алтаря и место убийства драугров не имеет значения. Опять же вопрос на что повесить отслеживание события смерти.
Ну и главное... А вобще можно определить кого именно (бандюка, солдата, гражданского, драугра, фалмера и т.д.) я убил? И если да, то как именно определяется класс жертвы?
П.С.
Если нужен зачар на стрелы
В СК
Делаем так: создаем стрелы - создаем для них прожектл - создаем эксплоужн для данного прожектла - на эксплоужн в соответствующее поле вставляем нужный зачар контактного типа. Ну и на зачар можно повесить уже необходимый скрипт.
А вобще можно определить кого именно (бандюка, солдата, гражданского, драугра, фалмера и т.д.) я убил? И если да, то как именно определяется класс жертвы?
Dsion, ну, мысль о подсчете приперлась после взгляда на статистику прохождения в главном меню игры. Там же подсчитывается количество убийств. И при этом скриптов на неписи нима. Видимо, присутствует некая системная функция... Буду копать.
Цитата Dsion
А проверить класс жертвы
То есть ты имееш в виду что у каждой локации и НПС есть кейворд, определяющий класс или некую принадлежность? Я просто там еще не копался основательно.
Вариант со скриптовым событием предполагает примерно такое решение?
Приходит в голову такой алгоритм (правильно ли я думаю) 1. Делаем перманентный квест 2. Вешаем туду обработку события OnStoryKillActor 3. В обработчике события определяем фракцию убиенного и тикаем соответствующий глобальный счетчик.
То есть этот скрипт будет работать в любой локации и на событии убийства игроком любого НПС. Я правильно понимаю?
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2483
написано: 29 июня 2017, 15:00
| Отредактировано: Dsion - 29 июня 2017, 15:02
А я почём знаю? Я так не извращался! Да, нужен квест и в квесте событие. А еще запись в SM Event Node. И не забыть снова остановить квест после обработки события.
Кейворды почти у всего есть - да. По ним можно определить, например, является ли НИП нежитью, является ли локация таверной, сделан ли какой-то предмет брони из стали.
Статистика в меню - есть такая. Эти цифры можно считывать из скрипта. Но изменять или устанавливать условия измнения - нельзя. Скайрим, в основном, на С++ написан, а скрипты ограничены в возможностях.
И не забыть снова остановить квест после обработки события.
А тут можно как для тупых? зачем останавливать квест? Мне ж нужно чтобы он работал на протяжении всей игры. Я имел в виду отработку ситуации не когда ярл дает квест игроку на отстрел бандюков, а когда гг просто шатается по скаю, отстреливает бандитов и потом может прийти к ярлу владения мол "я тебе тут закоулки подчистил, кинь деньжат на развитие". Получил награду (квест при этом завершаться не должен) пошол дальше терорить скайрим снова вернулся за наградой ну и так до бесконечности.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2485
написано: 29 июня 2017, 17:30
| Отредактировано: Dsion - 29 июня 2017, 17:32
Ну OnStoryKillActor - это один из способов старта квеста. Квест может быть запущен изначально (Start game enabled), может запускаться из предыдущего квеста в цепочке, может запускаться из скрипта в любом месте. А может еще по ивентам вот такого типа, как OnStoryKillActor - их много. Но если его не остановить, то следующее убийство его и не запустит, ясно дело.
Тебе, наверное, кажется, что это способ ух-какой-кривой-и-вообще-через-задницу, но это еще ничего. CK ощутимо ограничивает фантазию людей и приходится придумывать вот такие штуки. Регулярно перезапускаемый квест - это еще цветочки и даже не вредит совместимости.
Хм... Другие вариаты? Не знаю даже... Ну можно дать пассивную абилити каждой расе, но перезаписывать все расы - бред. Еще можно подождать. Вдруг кто-то другой что-то придумает.
Начни пока реализовывать хоть что-то А то размечтался тут, заданий себе наставил)
Изменение репутации для пользователя m4mk203
m4mk203Offline
Сообщение №2486
написано: 2 июля 2017, 22:30
| Отредактировано: m4mk203 - 2 июля 2017, 22:32
Dsion, ага. Если стартует квест по ивенту то вариант вполне себе норм. Со стрелами было хуже. Я просто в самой механике квестов пока ноль.
А реализовывать.... Та реализовано уже дофига на самом деле. Сейчас просто выстраиваю все элемены задумки в логически связанную картину. Сложность в том, что только начал изучать скриптовую и квестовую части и по этой причине не могу глобально смоделировать механику задуманного процесса. ХЗ че можно реализовать, а что нет.
Добавлено (03 Июля 2017, 01:30) --------------------------------------------- Так. Счетчики убитых драугров, бандюков, драконьих жрецов сделать удалось. Прекрасно отлавливаются по фракциям.
А вот с драконьими когтями возникли сложности. При получении когтя все отлично. Западло возникло при обработке события сброса когтя из инвентаря.
EVENT OnStoryRemoveFromPlayer(ObjectReference akOwner, ObjectReference akItem, Location akLocation, Form akItemBase, int aiRemoveType) if ClawList.HasForm(akItemBase) bool MoreClaws = false int ind = 0 ;Debug.MessageBox("ClawList Size is "+ClawList.GetSize())
While (ind < ClawList.GetSize()) Form currClaw = ClawList.GetAt(ind) if Game.GetPlayer().GetItemCount(currClaw) > 0 ind = ClawList.GetSize() MoreClaws = true Debug.MessageBox("OOOPS!!!") else ind = ind + 1 endif EndWhile if MoreClaws == true Debug.MessageBox("You have MORE CLAWS!!!") else Debug.MessageBox("Now you are free from CLAWS!!!") endif
else Debug.MessageBox("Fuck... its not a claw") endIf stop() ENDEVENT
Суть скрипта: отловить событие ухода когтя из инвентаря ГГ и при этом проверить, что у ГГ не осталось других когтей из списка ClawList.
Все работает отлично если первым я перемещаю из инвентаря коготь. Если же первым я выбрасываю скажем волчью шкуру, а следом за ней (не закрывая инвентарь) коготь, то факт сброса когтя не отлавливается.
Как это побороть?
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2487
написано: 3 июля 2017, 10:03
| Отредактировано: Dsion - 3 июля 2017, 10:25
m4mk203, а что за OnStoryRemoveFromPlayer? Я такого и не видел. Через обычный OnItemRemoved работало бы точно. А если через старт квеста... Не пробовал переместить проверку предмета из самого скрипта в условие на SM Event Node? Но лучше скрипт с OnItemRemoved на алиас игрока.
Можешь расписать пошагово как на него вешать обработку события?
Да просто фигаришь квест (должен быть запущенным), в квесте алиас, а в алиасе Specific Reference и выбираешь игрока. Потом на него можно скрипты вешать, умения и еще всякое.