Прошу о помощи. Мод Requiem неким образом отключает возможность перехода в режим приказов при удержании кнопки активации на компаньоне. Есть даже подозрение, что дело не в скриптах, или же реквием подменяет собственными скриптами некоторые ванильные. В любом случае, самому найти, где содержится эта функция не удалось, как ковырянием в CS и TESVedit, так и копанием добавляемых реквиемом скриптов. Известно, что при активации режима приказов происходит akspeaker.SetDoingFavor. Какие-то идеи?
Когда зовешь NPC с собой, скрипт на квесте DialogueFollower выполняет на спутнике функцию SetPlayerTeammate(Bool abTeammate, Bool abCanDoFavor). После установки этого флага NPC начинает включать стелс одновременно с игроком, доставать оружие одновременно с игроком и ему можно отдавать команды. Может, твой злостный мод редактирует ванильный скрипт и отменяет установку флага? Или снимает его при каких-то условиях.
Проверь, перезаписывает ли мод скрипт DialogueFollowerScript, проверь, всегда ли спутник достает оружие одновременно с игроком. И сделай выводы.
Но, когда идешь вслед за эльфом, талморцы становятся агрессивны. Вопрос - что нужно поменять в квесте, чтобы он позволил завершить задание мирным путем?
У меня этот неофициальный патч не установлен и я не знаю, что он там меняет... Но, пока никто не дал более дельного ответа, подкину несколько идей.
Есть фракция MS09NorthwatchFaction - это Талморцы в крепости. Есть фракция MS09PlayerAllyFaction - она враждебна Талморцам, но изначально игрока в ней нет. Если игрок выбирает насильственный подход, то его и его команду добавляют в MS09PlayerAllyFaction. Талморцы становятся враждебны.
Все входы в крепость обставлены триггерами со скриптом. Если игрок проходит через триггер, его немедленно засовывают в MS09PlayerAllyFaction и квест переходит в насильственную стадию. Если сначала показать Талморцу приказ от генерала, на квесте устанавливается переменная MS09NonCombat в 1, но оригинальной версии триггера на это наплевать.
Может, авторы неофициального патча и забыли добавить проверку в скрипт триггера?
Даже самый заядлый бандит имеет право на раскаяние. Неправильно отказывать в этом Партурнаксу только потому, что он дракон!
:-D
По поводу ремонта MS09: можно сначала открыть MS09NonCombatTrigger1 и MS09NonCombatTrigger2 и вообще удалить с них скрипт. Просто проверить, работает ли всё остальное в квесте. Или телепортироваться в крепость после вручения письма. Мимо триггеров.
Добавлено (20 Июня 2014, 11:54) --------------------------------------------- Ой, не. В крепости тоже триггеры. Вот чертовы параноики...
Добавлено (20 Июня 2014, 15:23) --------------------------------------------- Не знаю, изменен ли как-то этот скрипт в патче. Но если отталкиваться от оригинальной версии, то можно сделать как-то вот так:
Я добавил только это: && (MS09 as MS09QuestScript).MS09NonCombat != 1 Суть такая: когда даешь Талморцу письмо и он говорит "Всё круто", на скрипте квеста устанавливается переменная MS09NonCombat в 1 (это есть в оригинале). И если она установлена, новая версия скрипта на триггерах уже не сделает игрока врагом Талморцев. Но будет ли работать квест дальше - черт знает.
Надо работать, пробовать что-то. Например, удалить все GMST записи из мода и посмотреть, что будет... Потом все GLOB, перки итп. Может, кто-то знает, в чем конкретно проблема. А если нет, надо искать.
1. Я бы очень не рекомендовал использовать RegisterForUpdate вообще. Даже на creationkit.com об этом написано длинное предупреждение: http://www.creationkit.com/RegisterForUpdate_-_Form Если пользователь отключит твой мод, эта регистрация так и останется висеть в сейве навсегда. И это только одна из многих проблем, связанных с этой функцией.
2. Допустим, есть простое кольцо, не занесенное ни в какой алиас. Когда оно у тебя в инвентаре, у него НЕТУ собственного ID. И оно не может регистрироваться для каких-то событий. Когда выбрасываешь в мир, оно получает ID. Берешь в инвентарь - теряет ID. Выбрасываешь - снова получает ID, но уже другое. Это еще одна причина не использовать RegisterForUpdate...
Теперь ближе к вопросу:
1. Для первого варианта надо обеспечить, чтоб у кольца всегда было собственное ID. Запихивание в алиас должно помочь... А потом алгоритм такого типа: - каждую секунду кольцо определяет, лежит ли оно в чьем-то инвентаре. - если НЕ лежит, то проверят, загружена ли его модель. Если загружена, колдует заклинание. - если лежит в инвентаре, проверят, загружена ли модель того, у кого оно лежит. Если загружена, колдует другое заклинание от имени того, у кого лежит.
В принципе, никакого ущерба производительности игры одна маленькая проверка раз в секунду не нанесет... Но можно и по-другому.
2. Если кольцо валяется в мире, то просто начинает кастит вокруг себя ауру после OnLoad. Но если попадает к кому-то в инвентарь, то оно запихивает своего НОСИТЕЛЯ в алиас квеста. А на алиасе уже скрипт, ивент OnLoad и каст ослабленной ауры.
3. Предыдущее варианты подходят только тогда, когда предмет уникальный или их мало. Есть еще вариант, который позволит штамповать предметы в любом количестве... Если будет нужно, тоже напишу...
Ну это то, что сходу придумалось. Может, есть и лучше способы...
А например заставить ГГ посидеть скажем на пне? или бревне? Я думал решает все маркер.. пичалька просто
Посидеть - это какая-то Idle анимация... А заставить персонажа её выполнить есть куча способов. Idle маркеры, фурнитура, скриптом можно, пакетом... Извините, если я совсем не в тему Пропустил начало дискуссии.
Все просто. Я в доме сделал нужник , просто из балок и досок с крышкой типа как в садовых домках но оно так было ранее , и для полноты реализма решил поставить маркер сидения для ГГ , но как выяснилось не все так просто unsure
Не просто, если хочешь собственную уникальную анимацию... А если тебя устраивает какая-то из стандартных анимаций сидения, то чего ж не просто... Просто всё... Только игрок обычно не может использовать Idle маркеры... Нужно или фурнитуру сделать, как уже сказали, или отбирать у игрока управление и садить...
Я что-то уже засыпаю и торможу очень... Но, вроде, уже похоже на правду... Важно не забыть поставить у алиаса галочку Optional. Написал еще вот такую версию скрипта, но в таком сонном состоянии я мог упустить даже очень очевидные и важные вещи
Код
Scriptname TESTItemScript extends ObjectReference
TESTAliasScript Property AuraSource Auto Spell Property StrongSpell Auto Spell Property WeakSpell Auto
Но при проверке алиасов выдает, что значения в них = None
Debug.Notification("lern_Quest.GetAlias(0)="+lern_Quest.GetAlias(0)) Эта проверка? А чего ты решил, что номера алиасов начинаются с нуля? И эта функция, в любом случае, не будет проверять, заполнен ли алиас. Честно говоря, я бы GetAlias(Int aiAliasID) вообще не использовал... Не круто, когда работоспособность скрипта зависит от порядка алиасов в квесте.
Можно ведь создавать ReferenceAlias Property или LocationAlias Property, а потом можно поверить их содержимое функциями GetReference() и GetLocation().
Еще... Я что-то не уверен, что там вообще нужны алиасы и не уверен, что ты по верному пути пошел...
Откуда тебе знать, что они не заполнены? lern_Quest.GetAlias(1) Вообще не проверяет содержимое алиаса. Кстати, если алиас не смог заполниться и на нем нету галочки Optional, то квест не запустится.
Добавлено (23 Июня 2014, 13:29) --------------------------------------------- Можно в консоли набрать: sqv имя_квеста
В конце результата будет написано, запущен ли квест. Если запущен, то все non-optional алиасы заполнены.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №165
| Тема: Вопросы по скриптам Papyrus
написано: 23 июня 2014, 19:23
| Отредактировано: Dsion - 23 июня 2014, 19:24
Можно еще кастом... Если на квесте SomeQuest есть скрипт SomeQuestScript, то можно вот так:
Quest Property SomeQuest Auto
Event OnInit() (SomeQuest As SomeQuestScript).Func() EndEvent
Я как-то для одного мода сильно извратился и получилось использовать папирус почти как нормальный объектно-ориентированный язык программирования... То есть, создавать свои классы, передавать и возвращать их из функций. Но это уже вряд ли кому-то тут надо.
Ага... Я бы тоже сначала попробовал поменять расу прямо через консоль в игре... Посмотрев, что получится, можно будет выбирать курс для последующих действий. Может, сразу всё заработает. Или нужно будет подредактировать расу Демоника и сохранить как ДемоникаМанекен. В худшем случае, придется с нуля создавать своих манекенов...
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №167
| Тема: Вопросы по моделированию
написано: 24 июня 2014, 13:53
| Отредактировано: Dsion - 24 июня 2014, 13:58
Я бы все-таки не игнорировал тот факт, что Скайрим - это игра, которой нужно рендерить 60 кадров в секунду. Модели с (относительно) малым количеством полигонов не потому используются, что тридэшникам лень сабсёрфа добавить...
Карты нормалей тоже не от хорошей жизни придумали...
Страдать-страдать... Просто с пониманием причин разницы в весе. Не знаю, на сколько Вы опытный тридэшник, но, на всякий случай, скопирую еще вот это:
Карта нормалей – это разновидность текстуры, используемая для того, чтобы придать объекту с малым количеством полигонов детализацию аналогичного объекта с большим их количеством. Создается она так: имеются две одинаковых 3D-модели, скажем, человеческого лица, причем одна из них состоит из сотен тысяч или даже миллионов полигонов, вторая же – более простая и имеет в активе несколько тысяч треугольников. В игру (или приложение, где мы это лицо будем наблюдать) можно вставить и более детализированный вариант, но такой сложный объект видеокарта вряд ли рассчитает, сохраняя в сцене приличный FPS. Поэтому предварительно вычисляется разница между этими двумя моделями, которая и выливается в карту нормалей, содержащую в себе информацию обо всех неровностях и прочих деталях исходного объекта. Наложив ее на низкополигональную модель, мы получаем изображение, которое визуально отличить от оригинала довольно сложно (хотя и можно) – при этом затраты производительности практически отсутствуют.
но мне и нужно узнать примерный (рекомендуемый) размер файла.
Самые "тяжелые" объекты в ванильном мире (всякие большие замки и корабли) - это в районе 30-40к полигонов и вес НИФа - около 3-4 Мб... Самая сложная мебель - это около 10к полигонов, вес НИФа - 1 Мб. Среднестатистическая мебель - 200 Кб.
Думаю, игра не умрет, если делать мебель на 10-20к полигонов... Но больше 20к точно не надо.
Означает, что не крафтится, пока глобальная переменная DLC1TechXbowSteelChanceNone не будет равняться нулю... А равняться нулю она начнет, когда попросишь Сорин научить делать арбалет...
werelf, фигово, что id упомянутых объектов не написал... Это нам надо сначала догадаться, что за Нчардак, потом найти там какие-то двери, какие-то пьедесталоподобные активаторы... Брр( Скорее всего, там скриптик какой-то.
Возможно, стоит подумать о спрайтах... То есть, вместо трехмерных актёров, наставить двухмерные плоскости с текстурой. В первых трехмерных играх (типа Дума) все враги были спрайтовыми. Сделать не-анимированный спрайт - проще пареной репы. Даже из скриншота можно. Анимированный, наверное, посложнее.
Ну еще можно сделать 2-3 низкополигональные модели людей с разной анимацией. И штук 7-8 разных текстур для них. Лично я не в курсе, как экспортировать анимарованные модели в nif, но как-то можно.
Использовать оригинальные скайримские модели людей, наверное, не выйдет. Там много полигонов и они будут тормозить компьютер, не зависимо от того, каким типом объекта будут: актёром или статиком... А, может, и нет... Я ничего из этого не пробовал, но нужно же свои пять копеек вставить
Есть очень простые программы для перемещения окон за пределы экрана. Кроме того, если именно для окна воды, можно установить курсор в поле ввода ID, а потом Tab > Tab > Enter (по крайней мере, на XP). Странно, что у меня кнопка достается при высоте экрана 900 п.
Приветствую. У меня такой вопрос: попыталась исправить походку женщинам-оркам, но не только нпц, а расе, чтоб и ГГ орк тоже нормально ходила. В редакторе у расы в body data - behavior Graph переписала Actors\Character\DefaultMale.hkx на Actors\Character\DefaultFemaleale.hkx. Вроде должно было сработать. Но после этого все женские персонажи в игре, которые используют женскую походку стали буквой "Т" и ни с места. Пробовала начинать новую игру - то же самое. Никакие fnis или моды, меняющие анимацию не установлены, так что дело не в конфликте. А Лидия и прочие дамы, использующие мужскую походку передвигаются нормально. Может кто-нибудь подсказать, в чем тут дело?
Сделал в точности то, что Вы описали, - всё работает нормально. Орчихи даже получили женскую анимацию. Да и каким, спрашивается, образом редактирование одной расы может повлиять на другие?
Убедитесь, что в папке Data\Meshes\Actors\Character\ нету файла DefaultFemale.hkx - его там не должно быть при нормальных условиях, он загружается из BSA. Вы ведь не создавали там пустой файл с таким именем?
Ну и конфликт я бы не спешил исключать... Такой мод может конфликтовать не только с тем, что меняет анимацию.
До этого я пользовался глобальными переменными для сообщения данных между скриптами, хотя это и неудобно. Зато надежно. Все это очень печально, когда то, что должно работать, работать отказывается...
;_MVAWeightSKSE Property _MVAWeightLINK Auto ; Скрипт на актере. К какому конкретно актору этот скрипт прицеплен и каким образом? Ты ведь не забыл эту property заполнить? Скрипт наследует Actor или ObjectReference?
Вариант1: Actor Property MyActor Auto MyActor.Disable()
Вариант2: ExtendedActor Property MyExtendedActor Auto MyExtendedActor.SomeVariable = 4
Вероятность того, что второе не работает такая же, как вероятность того, что первое не работает. Главное не забыть прицепить скрипт ExtendedActor к конкретному актору и заполнить property. Разница только в том, что скрипт Actor есть всегда на всех акторах, а расширенный скрипт надо прицепить. Один мой мод создавал 74 объекта с тремя разными видами моих личных скриптов. И они не только переменные друг на друге меняли, а еще и в функции друг друга передавали итп.
Сделать контейнер и в него класть книги заклинаний. Книга указывает тип заклинания, их количество в контейнере - номер варианта.
Без SKSE ты и не определишь, какое заклинание соответствует данной книге. Ну без SKSE или, опять же, больших массивов. Я бы эту информацию все-таки в скрипте хранил. Двумя массивами. Хотя есть способ похитрее и более близкий к традиционному программированию.
Обновление инициализированных скриптов у пользователя - больная тема. И я её особо не изучал. Могу только предположить. После обновления скрипта OnInit на нем почти наверняка не вызывается и переменные не сбрасываются. Но когда дойдет до какого-то инвента, будет вызываться уже новая версия ивента. Некоторые изменения скриптов пройдут для пользователя гладко, а другие - вообще убьют мод. Потому если нужно сделать мод со скриптами обновляемым, об этом нужно с самого начала думать. Если нужно сбросить какие-то переменные после обновления мода, можно сделать специальную функцию на ивенте OnPlayerLoadGame.
Касательно производительности. Массив из 128 чисел типа int32 - это всего 512 байт. Большинству пользователей пофигу, что к его 15Мб сэйву добавится 512 байт... Но думать о чистоте - это, конечно, правильно. На частоту смены кадров в игре скрипт может только коственно повлиять. Например, вызвав 100 NPC. Даже если в нем есть абсолютно багнутая функция типа: While (True) EndWhile То это очень плохо, но производительность игры не снизится. Скрипты отдельно выполняются. Не так, как было в Обливионе.
Добавлено (30 Июня 2014, 17:02) --------------------------------------------- MemoriaVetusta, может, тот мой конкретный скрипт и не работает (хотя чего ему не работать?), но общая идея работает абсолютно точно.
Можешь попробовать сначала что-то более простое, чтоб убедиться. Сделай квест и прицепи к нему скрипт MyQuestScript с какой-то простенькой функцией типа
Код
Function Test(Actor akSpeaker) Debug.MessageBox(akSpeaker) EndFunction
А потом в квесте какой-то диалог с любым NPC и чтоб после выбора какого-то пункта вызывалось: (GetOwningQuest() As MyQuestScript).Test(akSpeaker)