Missy, честно говоря, лично я знаю, что можно сделать, чтоб для всех диалогов демоника считалась, например, эльфом. Но это совсем другой (и я почти уверен, что не твой) уровень. Подождем, что еще кто скажет... Я уже несколько лет не запускал СК и запросто мог что-то забыть.
slastik, а без скрипта точно нельзя, да? Я пока не могу проверить... Лучше бы, конечно, без скрипта.
Не хочешь поискать ивент, который срабатывает в момент выхода игрока из локации? Можно проверить OnCellDetach() и OnDetachedFromCell(). Лучше запускать музыку в одном ивенте, а потом в другом останавливать по instance id.
Хрень в том, что в Скайриме не желательно писать функции, которые выполняются дольше одной секунды. Да и вообще, везде, где есть event loop (асинхронное программирование). Вернее, их лучше не вызывать в основном потоке. А, ладно, забудь.
Но если в Скайриме у тебя есть функция типа PlayMySound, которая выполняется дольше секунды, то что-то у тебя не так.
Ridart, так, вроде ж, не сложно. Выбрасывается случайное число от 0 до 100. А условие срабатывает, если это число больше 75. То есть, шанс 25%. Наверное, можно получить тот же эффект, написав "< 25".
MIKIFORTH, та не, это известная проблема. Если на квесте стоит галочка автозапуска при наначе игры, то вот так вот оно. Обычно мы это решали отключением автозапуска на первой закладке квеста и добавлением на квест скрипта такого типа:
Код
Event OnInit() If (!IsRunning()) Start(); EndIf EndEvent
MIKIFORTH, в общем-то, не сложно. Можно на этих драугров повесить скрипт, который будет вызывать функцию на квесте, когда те упокаиваются. А функция на квесте будет наращивать счетчик убитых драугров и делать что там еще надо, когда счетчик достигает определенной отметки. Но я все-таки пас (готовые скрипты не буду писать).
Dirzi, лично я не вижу никаких причин, по которым это могло бы не работать. В пакете указано, что делать и где делать. И НИП пойдет к этому "где" даже если оно на противоположном конце Скайрима.
Stea1ch, у меня сейчас нет CK и скайрима... Но единственное, что приходит в голову и что можно было бы попробовать: Там где-то в верхних меню есть пункт типа Default Objects. Надо их все просмотреть и глянуть, указан ли там где-то MagicDisallowEnchanting. Ну шансы 50/50. Если есть, то можно заменить его на какой-то свой нигде не используемый кейворд.
Miron1812, а "Mod Incoming Spell Duration" не пробовал? Я не говорю, что оно работает... Просто можно попробовать. Сначала попробовать без фильтра: просто удвоить длительность всех входящих эффектов. А если сработает для зелий, то можно добавить фильтр.
Miranda_Kusland, глянь GameSettings, которые начинаются на fDiffMult
Если нужно понизить входящий урон по игроку на какой-то сложности на заданный процент, то это то, что надо. Правда, я никогда не пробовало их изменять.
А как изменить броню - не знаю. Но даже если и знать, то там легко запутаться. Броня, чем её больше, тем эффективнее каждая добавленная единаца. Разницы между 0 и 100 почти никакой, а между 500 и 600 - огромная: https://en.uesp.net/wiki/File:SR-graph-Armor_and_Durability.png Если игрок носит улучшенную тяжелую броню, то давать ему даже 20% бонус - это адский чит.
MIKIFORTH, я уже фигово помню, но, пока никто другой не отвечает, могу рассказать то, что помню. Игра начинается когда скрипт на каком-то квесте телепортирует игрока в мир. Или можно прямо в главном меню открыть консоль, телепортировать игрока пофиг-куда и игра начнется. Например
Код
coc whiterun
В ванильном варианте есть один квест, который запускается в самом начале. Название уже позабыл. Может, MQ00 или нет. Этот квест проводит кучу настроек (одевает игрока в лохмотья, связывает ему руки, блокирует управление), а потом телепортирует игрока на повозку и игра начинается. По-моему, этот квест еще указан в Default Objects как главный или что-то такое. В общем, надо сделать так, чтоб этот квест либо вообще не запускался, либо запускался и сразу останавливался. Что-то в таком духе. А из другого квеста мы сами телепортируем игрока куда нам надо.
Добавлено (06 Октября 2019, 10:13) --------------------------------------------- И не забываем вызвать меню выбора расы.
valambar, думаю, для этого вообще скрипт не нужен. Просто изменить Actor Value "JumpingBonus". Но если увеличить слишком сильно, то будет та же проблема, что и с летанием - мир для этого не предназначен.
yakor77, повесить оба скрипта на один объект легко, но 95%, что это не даст желаемого эффекта... Вручную исправить один из скриптов, подглядывая в другие, тоже можно. А так, чтоб склеить... автоматически... Не думаю... Ну я, конечно, не большой авторитет. Но я последние лет 5 активно изучаю программирование, использовал штук 10 разных языков и лично я не представляю, как такое можно провернуть.
Myprism, а как ты native функцию исправишь-то..? Скайрим ведь не весь на папирусе написан. И из папируса далеко не на все механики повлиять можно. Потому и появился SKSE, который пытается расширить возможности папируса... А так-то большая часть Скайрима на С++. Доступа к исходному коду у нас нет. То есть, можно работать только с ассемблером. Вооружившись чем-то типа OllyDbg сделать можно что-угодно, но это совсем не то, что писать скрипты на папирусе с использованием официальных стабильных API... Даже просто найти процедуру (функцию), с которой начинается заполнение камня душ - это можно день мучиться. Потому что в ассеблере никаких имен у функций и переменных нет. Остается только по коду догадываться, что там и для чего.
Myprism, я немного подумал еще тогда, когда ты первый раз спросил, и ничего полезного не придумал... А еще, одна неосмотрительная компания недавно наняла меня С++ программистом Так что я сейчас во всю прикидываюсь нормальный трудолюбивым телом и мало сил остается думать о чем-то еще. А GetSoulSize() не работает на объектах, выброшенных в мир? Тех, кто не в контейнере. Единственное, что приходит в голову, - так это вообще выкинуть всю систему захвата душ и написать с нуля на папирусе. Абсолютно новый спелл, который проверяет уровень цели, наличие в инвентаре пустого камня достаточного размера, удаляет пустой камень и дает заполненный. Не, бред, забудь.
frodo01, так получение конкретного актора, на которого в данный момент ссылается алиас. Если не ясно, разберитесь с алиасами. Они создаются в настройках квеста и являются чем-то типа переменных: могут указывать или не указывать на конкретные объекты. Например, в квесте управления спутником есть алиас, который указывает на вашего текущего спутника. И мы, можем, например, убить его как-то так: FollowerAlias.GetActorReference().Kill().
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1224
| Тема: Вопросы по скриптам Papyrus
написано: 30 января 2020, 23:18
| Отредактировано: Dsion - 30 января 2020, 23:24
Интересно было бы узнать, зачем может понадобиться сравнивать имя НИП с константым значением... Нет, правда... Есть ведь фракции, кейворды, формлисты на худой конец. Может, какой-то смысл в этом и есть, но на первый взгляд выглядит так, будто кто-то пытается жестко изнасиловать все принцыпы совместимости... Типа, как если бы три здоровенных орка поймали молодую эльфиечку.
Ну можно попробовать создать еще одного актора, у которого точно будет имя "Разбойник" и сравнивать их GetDisplayName()
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1225
| Тема: Вопросы по скриптам Papyrus
написано: 1 февраля 2020, 18:01
| Отредактировано: Dsion - 1 февраля 2020, 18:12
myav, ты уже попробовал сравнивать имя НИП с именем другого НИП или объекта? Кольца, например. Даже если ты хочешь именно сравнивать имя, то прописывать это имя в сам скрипт - это точно лажа лажовая нубская. Создай кольцо, пропиши ему имя "Разбойник" и попробуй сравнивать это имя с именем НИП. Интересно, что будет. Но ты все-равно рехнулся.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1226
| Тема: Вопросы по скриптам Papyrus
написано: 1 февраля 2020, 18:16
| Отредактировано: Dsion - 1 февраля 2020, 18:17
myav, в StringUtil есть следующие функции: 1. получение длины строки 2. получение конкретной буквы по её индексу 3. получение коды буквы (цифра)
Можно проверить, какие коды (и сколько) выдаются для кириллицы. Для имени, возвращаемого по GetDisplayName и для статического имени. Если там есть какая-то разумная логика, то получится сделать функцию сравнения строк и использовать её как-то так: string TempName = selfactor.getdisplayname() if (strcmp(TempName, "Разбойник"))
Но, разумеется, ты этого проверять не будешь, да? Ты будешь сраться на форуме.
Бывает, что человек, шарящий в программировании, мечтает создать игру. И он начинает её создавать. Своими силами, в свободное время. Порой таким людям удается создать что-то стоящее. Порой к ним присоединяются другие люди и начинают помогать. Они хотят создать игру и они готовы ради этого работать.
Бывает, что создать игру мечтает художник или тридешник. Тогда он рисует, создает работы, выкладывает их на тематических сайтах. Бывает, его замечают и ему удается поучаствовать в создании чего-то стоящего. Он хочет создать игру и он готов работать.
Бывает, талантливый писатель хочет создать игру. Тогда он продумывает мир, сеттинг и пишет книгу. Иногда таким людям везет и по их миру действительно создают игру, а их приглашают дополнять историю и придумывать квесты. Они тоже работают.
Бывает, хороший организатор хочет создать игру. Он создает кампанию на кикстартере, пиарит проект, нанимает людей, выгрызает инвестиции. И он работает.
А бывает какой-то сраный школьник, пошпилив в скайрим, хочет загорается идеей создать свою игру. Он не может сделать вообще ничего. И ничего не собирается делать. Ничему не собирается учиться. Посты таких людей легко узнать.
Добавлено (04 Февраля 2020, 22:39) --------------------------------------------- А, еще мододелов забыл. Много раз слышал истории о том, как моддеры попадали в серьезный геймдев.