Myprism, как я знаю, NPC сначала голыми загружаются. А потом происходит надевание вещей и срабатывает ивент OnLoad(). Если есть возможность повесить на NPC скрипт, то в OnLoad() можно донадевать нужное...
Надевать белье в момент активации не подойдет? Если игрок убьет кого-то одетого, а потом активирует, чтоб снять одежду, белье появится. Но если разденет каким-то другим способом (без активации), тогда не будет. Ну или можно сделать ауру вокруг игрока с большим радиусом. Я так и делал.
Сделать пол полупрозрачным, а под ним еще одну такую же комнату, но вверх ногами? :) Шутка. На самом деле, я без понятия. Не помню ни чего-либо отражающего в Скайриме, ни подходящих полей в настройках шейдеров...
Сидел бы на XP да был бы счастлив... Но, увы, всё больше новых игр переставали под ней запускаться, а производители железа переставали выпускать под неё драйвера... Пришлось пеерехать на 7... Негативное: Проводник и многие панели работают ощутимо медленне, иногда подвисают на доли секунды, чего в XP не было. Почему-то намного дольше строятся эскизы в том же проводнике. Поиск (по файлам и папкам) просто бесит. Не понимаю, почему он занимает ТАК много времени - это просто бред. Настроил, вроде, всё разумно. Плюс всякие мелкие неудобства. Позитивное: Ну UAC, конечно. В юниксах пользователь всегда работает с ограниченными правами по-умолчанию. Майкрософт поздновато спохватился, но таки спохватился. Еще файрволл более-менее нормальный, если поднастроить и дополнить парой скриптов. Если пользователь разумный, то никаких сторонних антивирусов и файрволлов не нужно. DirectX11 - тоже плюсик.
Не очень нравится, в общем. Был бы выбор - вернулся бы к XP. Или вообще на какое-то BSD, если бы там не было адской потери производительности в играх из-за отсутствия direct3d
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №907
| Тема: Вопросы по скриптам Papyrus
написано: 29 февраля 2016, 05:27
| Отредактировано: Dsion - 29 февраля 2016, 05:28
Ну есть еще стат "Dragon Souls Collected"... Можно было бы попробовать RegisterForTrackedStatsEvent() и Event OnTrackedStatsEvent(string asStat, int aiStatValue)... Но это отстой... Лучше, наверное, второй вариант Multigone. Как пример можно посмотреть квест MGSuspensionQuest - он запускается, когда игрок убивает члена гильдии магов. И, наверное, надо не забыть сделать так, чтоб квест останавливался после выдачи денег. А то может не запуститься в следующий раз.
Добавлено (29 Февраля 2016, 08:27) --------------------------------------------- О, а еще можно с помощью перка сделать так, чтоб всем мертвым драконам в инвентарь добавлялось любое количество золота или других предметов. Или чтоб игрок мгновенно получал золото при активации драконьего трупа.
С перками там никакой проблемы. Даже два варианта есть: 1) перехватить активацию, если это труп именно дракона 2) добавить деньги в инвентарь, опять же, если это труп дракона
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №909
| Тема: Вопросы по скриптам Papyrus
написано: 1 марта 2016, 10:07
| Отредактировано: Dsion - 1 марта 2016, 10:16
Сообщение с выбором - опциональное... И еще там есть что-то типа add leveled list on death - если дать игроку такой перк без условий, то всем убитым NPC будут заданные предметы добавляться в инвентарь.
Есть даже два варианта. В CK где-то там наверху в меню есть поиск. Можно в поиске вбить фразу (или часть фразы), которую говорит NPC, и она найдется. Или в тех же меню где-то есть фильтрация диалогов. Можно отфильтровать по конкретному NPC. Но это не так надежно. Лучше первый вариант.
Я сам не пробовал, но у пакетов, вроде, есть три типа ветки: stacked, когда выбирается первая процедура, удовлетворяющая условия, sequence, когда (как я думаю) процедуры выполняются по порядку и simu-что-то там, когда они выполняются одновременно.
erlick, 95% вероятности, что это ты где-то подзатупил... Функция Debug.MessageBox() поможет найти, где именно.
Можно в окончание диалога временно добавить Debug.MessageBox("1") и узнаешь, вызывается ли этот фрагмент скрипта. Потом можно в стадию 05 добавить Debug.MessageBox(Alias_Chest) - узнаешь, срабатывает ли этот фрагмент и не забыл ли ты заполнить проперти алиаса (должно писать не None). Туда же потом можно Debug.MessageBox(Alias_Chest.GetReference()) - узнаешь, действительно ли сундук находится в алиасе. Ну а Activate должно сработать с любого расстояния - это я использовал уже.
Наверное, ты знаешь, но еще добавлю, что алиас (и стадию) использовать не обязательно. Можно прямо к скрипту на диалоге добавить ObjectReference проперти ChestRef и там же вызвать ChestRef.Activate(Game.GetPlayer())
Когда NPC загружается и срабатывает ивент OnLoad(), то он всегда надевает свой аутфит и ничего с этим не поделать... Это первое важное... А второе: кроме аутфита, на NPC останутся надеты вещи, которые были надеты на него скриптом с флагом prevent unequip (не снимать). Если сапоги есть в аутфите, а другие были надеты скриптом с prevent unequip, то окажутся одновременно надеты две пары сапог.
Можно перед OpenInvenory засовывать NPC в алиас, а на алиас повесить скрипт, надевающий полученные от игрока вещи. Можно даже с флагом. Но когда игрок вернется в локацию после выхода из неё, NPC все-равно свой аутфит наденет...
Я мод делал для переодевание любых NPC и все возможные решение по 15 раз изучил - идеального не нашел. Можно удалять NPC аутфит (заменять пустым), но это необратимо и может вызвать проблемы после отключения мода. Можно заменять на редактирумый аутфит - те же недостатки. Можно каждый раз при срабатывании OnLoad() полностью раздевать NPC и надевать на него только те вещи, которые игрок выбрал для него - у этого варианта недостаток в том, что NPC может не успеть правильно переодеться, пока прогружается локация, и игрок на секунду или пол секунды увидит его в дефолтном аутфите.
Стандартный меняет потому что он teammate. Тиаммейтом можно любого сделать, но он тогда начинает доставать оружие одновременно с игроком, включать режим скрытности одновременно с игроком итп. Короче, этот режим только компаньонам и можно включать.
Но если речь идет о твоих собственных NPC из собственного мода, то действительно можно им поставить пустой аутфит, а потом надевать что-угодно с флагом prevent unequip. Это же даже лучше, чем если бы они сами выбирали вещи. Можно будет одевать во что-угодно. Если нужно будет, я расскажу подробнее, как это сделать. Но там никакой проблемы. Создать квест с алиасом. Перед открытием инвентаря совать NPC в алиас. А на алиасе скрипт с ивентом OnItemAdded.
Добавлено (15 Марта 2016, 20:20) --------------------------------------------- В своем моде я старался круче сделать. Для любого NPC можно было создать "профиль". В профиле можно было создать до 8 разных комплектов одежды. Каждый комплект открывался просто как сундук. И на каждом комплекте можно было поставить галочки, для каких случаев этот комплект предназначен: обычный, для сна, для текущей локации итп.
Но вот нормального идеального решения проблемы с экипировкой аутфита так и не нашел. Не хотел заменять его пустым, чтоб у людей не возникало проблем после отключения мода. В итоге, сделал переодевание в ивенте OnLoad(), но пара человек все-таки были не довольны тем, что иногда видели, как NPC переодевается при входе в локацию.
Да? Ну сам смотри. Если речь о спутниках, то можно и тиаммейтами делать: http://www.creationkit.com/SetPlayerTeammate_-_Actor Ванильная система спутников делает NPC тиаммейтом, когда приглашаешь его следовать за тобой, и отключает режим тиаммейта, когда отпускаешь спутника домой.
Lexo, хороших - нету. Только та же идея, что и тебе пришла, - с невидимой стеной. Это точно можно сделать. В перках есть возможность установить заклинание, которое будет каститься при взмахе оружием, с условиями. А само заклинание может перемещать и устанавливать перед игроком стену. Там понадобится несложная формула с синусами и косинусами. Вот только не на 100% уверен, что получится настроить коллизию так, чтоб стрелы и магия отбивались, а NPC проходили спокойно. Должно быть можно... Ну еще есть очень простой и тупой вариант без скриптов: добавить игроку перк, который будет понижать до нуля входящий урон от стрел и магии пока тот размахивает оружием. Только перку будет пофигу, летят ли стрелы тебе в лицо или в тыл.
valambar, вряд ли получится. Я в скриптах без SKSE не припоминаю никаких функций, которыми можно было бы получить или изменить степень улучшения предмета. Так что именно такой вариант, скорее всего, отпадает. Одной переменной тоже не отделаться - надо же сохранять уровень износа для каждого оружия, не зависимо от того, как часто игрок их меняет. Кроме того, там еще проблема в том, как получить Reference Id экипированного оружия, а не id базового объекта. В общем, фигово дело. Ну если придумать способ получения ид референса, то можно что-то такое (да, воще не круто): создать три FormList: оружие немного повреждено, оружие значительно повреждено, оружие критически повреждено. При каждом ударе оружие имеет шанс, скажем, 4% продвинуться в следующий лист. Ну а игроку добавить перк, который будет немножко понижать урон, если оружие в списке слабо поврежденных итп. Но это хрень... Как поразростаются эти списки до 100 орудий - будет хрень.
Добавлено (27 Марта 2016, 10:06) --------------------------------------------- Я себе похожим способом делал мод на магию. Мод позволял увеличить любому заклинанию силу в два или четыре раза, но затраты маны возрастают в 3 или 9 раз. И с длительностью эффекта так же. Вот там использовал 4 форм листа: два на силу и два на длительность.
Ну и вообще у меня магия другая. У игрока и NPC заклинания расходуют намного меньше маны, но регена почти никакого. В подземельях - вообще никакого, а в городах надо часов 8 спать, чтоб восстановиться. И у NPС так же. Против магов молнии офигенно эффективны. Ну да, кому это интетесно...
Ааа, понятно... Фигово... Ну максимум, что я придумал - это в Default Objects полностью отключить этот кейворд. А потом дать игроку перк, который устанавливает "Mod Soul Gem Enchanting" в ноль, если зачарование не находится в списке обычных и у игрока нету твоего адского перка. Тогда зачарование с артефактов снималось бы сразу и всегда, но использовать его потом можно было бы только имея твой перк. Ну и не круто, что пришлось бы создавать форм лист "обычных" зачарований. Ничего лучше что-то не приходит в голову. Ну еще вариант с SKSE и плагином к нему есть, если ОЧЕНЬ надо.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №924
| Тема: Вопросы по скриптам Papyrus
написано: 31 марта 2016, 21:22
| Отредактировано: Dsion - 31 марта 2016, 21:22
Ну если сможешь как-то пошаманить, чтоб пентаграмма их не видела, то это, конечно, будет лучше... Но если не выйдет, то отключить возможность _накладывать_ зачарование без перка точно можно.
В ванильном скайриме все, кто может быть напарником, изначально во фракции потенциальных напарников. Но, кроме этого, NPC должен быть еще другом. Вот это и изменяется после сдачи квеста. Улучшаются отношения с игроком с 0 - нейтральное до 1 - друг. Так что можно еще и так...
Скажу по секрету, что из консоли твой квест вообще сразу завершить можно. Или сразу убить любого противника. Или нарисовать игроку любые характеристики. Или телепортировать игрока сквозь любую преграду. В общем, много чего нарушить можно и ничего с этим особо не поделаешь.
Ну можно, конечно, повесить на дверь скрипт с BlockActivation, а потом чтоб в ивенте OnActivate проверялось наличие ключа и только тогда дверь активировалась. Или временно выдать игроку перк с FilterActivation - тогда, при заданных условиях, дверь будет вообще как стена без возможности с ней как-либо взаимодействовать. Но какой смысл этим заниматься, если ключ тоже можно добавить через консоль. Или просто телепортироваться сквозь неё.
Интересная-то интересная, но хрен определишь, сколько урона получил игрок. Есть ивент OnHit, но он годится только для отслеживания факта получения урона, а не его количества...