• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
andrelo-1, спасибо большое! GetLeveledActorBase() решило мою проблему. С RaceMenu буду разбираться позже, а пока у меня есть всё, что нужно, чтобы выложить первую версию нового мода.
Если HH переводить на новую систему прийдеться всю обувь исправлять под нее. Если речь идет о NiOverride High Heels.
Изменение репутации для пользователя Myprism
MyprismOffline
Сообщение №2012
написано: 23 февраля 2016, 18:35
| Отредактировано: Myprism - 23 февраля 2016, 18:37
evTau, а зачем переделывать? Я не вижу недостатков в существующей системе. Использование скриптов это не недостаток. На этом игра построена и они входят внутрь мода. У меня обязательное условие - мод не должен требовать ничего, кроме SKSE. У меня моды не требуют даже дополнений к Скайриму. Да и существующая система столь проста, что там и делать ничего не надо. Нужен высокий каблук - просто пристёгивается к сапогам скрипт в два клика. Не нужен каблук - скрипт удаляется в один клик.
Изменение репутации для пользователя evTau
evTauOffline
Сообщение №2013
написано: 23 февраля 2016, 19:12
| Отредактировано: evTau - 23 февраля 2016, 19:14
evTau, а зачем переделывать? Я не вижу недостатков в существующей системе. Использование скриптов это не недостаток. На этом игра построена и они входят внутрь мода. У меня обязательное условие - мод не должен требовать ничего, кроме SKSE. У меня моды не требуют даже дополнений к Скайриму.Да и существующая система столь проста, что там и делать ничего не надо. Нужен высокий каблук - просто пристёгивается к сапогам скрипт в два клика. Не нужен каблук - скрипт удаляется в один клик.
Я о том что если отказыватся от HH и переходить на NiOverride High Heels. Если оставатся на нем то и обувь тогда не надо трогать :)
PS: Ваш мод как магнит собрал всех детей мг в комментах
Доброго всем времени суток. На этот раз я сдался раньше, чем через неделю. Нужна помощь в составлении скрипта, цель, получить 10 золотых автоматом при убийстве дракона (любого) или при получении души дракона, моего скудного мышления хватило только на:
Event OnDeath(Actor akKiller) if Actor.IsInFaction(DragonFaction) Game.GetPlayer().AddItem(Gold001, 10) endIf EndEvent
естественно не работает. Как можно привязать событие к либо убийству кого-то из фракции драконов, либо к получению души дракона?
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №2015
написано: 29 февраля 2016, 03:16
| Отредактировано: Multigone - 29 февраля 2016, 09:27
Сохранить исходник. Скомпилировать MQKillDragonScript средствами СК. Заменить оригинал бэкапом (чтобы MQKillDragonScript.psc не содержал никаких изменений). Теперь, пока MQKillDragonScript.pex находится в Data \ Scripts, убийство драконов будет приносить прибыль.
2) Медленный, нормальный и, возможно, неработоспособный:
Создать квест, на вкладке Quest Data в строке Event указать Kill Actor Event. Добавить во вкладку Scripts скрипт:
Код
ScriptName _MyName Extends Quest
Faction Property DragonFaction Auto MiscObject Property Gold001 Auto
Event OnStoryKillActor(ObjectReference akVictim, ObjectReference akKiller, Location akLocation, int aiCrimeStatus, int aiRelationshipRank) if akKiller == Game.GetPlayer() && (akVictim as actor).IsInFaction(DragonFaction) akKiller.AddItem(Gold001, 10) stop() ; Dsion endif endevent
Заполнить DragonFaction и Gold001. В СК в разделе Character -> SM Event Node найти Kill Actor Event и добавить туда созданный квест. Сохранить .esp. Теперь, когда игрок убивает актера, находящегося в указанной фракции, он мгновенно получает прибыль. Чтобы ее получение совпадало с поглощением души, скрипт нужно усложнять.
PS: Может, кто-нибудь знает, как отследить смерть дракона др. способом.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2016
написано: 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) --------------------------------------------- О, а еще можно с помощью перка сделать так, чтоб всем мертвым драконам в инвентарь добавлялось любое количество золота или других предметов. Или чтоб игрок мгновенно получал золото при активации драконьего трупа.
Изменение репутации для пользователя erlick
erlickOffline
Сообщение №2017
написано: 29 февраля 2016, 18:46
| Отредактировано: erlick - 29 февраля 2016, 19:09
Multigone, оба способа не сработали, в первом случае даже душа даваться не стала, во втором вообще ничего не произошло.
Dsion, а можно по поводу перков поподробнее? Как я понимаю, после драконов остается труп, но с разных драконов остаются разные трупы...или труп один и можно на него повесить событие активации?
Multigone, а нет, второй способ работает!!! Изначально забыл внести его в SM Event Node. После исправления ошибки все заработало! Огромное спасибо!
С перками там никакой проблемы. Даже два варианта есть: 1) перехватить активацию, если это труп именно дракона 2) добавить деньги в инвентарь, опять же, если это труп дракона
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №2019
написано: 1 марта 2016, 09:31
| Отредактировано: Multigone - 1 марта 2016, 09:33
Dsion, имеешь в виду, через Entry -> Activate? Там же сообщение с выбором должно появляться? Не проще добавить деньги в инвентарь дракону через DeathItemDragon01? Еще можно использовать SKSE (RegisterForCrosshairRef() + RegisterForMenu("ContainerMenu")). В смысле, добавлять деньги трупу дракона, не трогая вообще ничего.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2020
написано: 1 марта 2016, 10:07
| Отредактировано: Dsion - 1 марта 2016, 10:16
Сообщение с выбором - опциональное... И еще там есть что-то типа add leveled list on death - если дать игроку такой перк без условий, то всем убитым NPC будут заданные предметы добавляться в инвентарь.
Есть ли возможность у игры сделать магический эффект для зелья, который будет добавлять игроку определеную фракцию пока эффект активен. Вернее реализация скрипта который прикрутить к магическому эффекту.
Это то понятно... я что то дико туплю и у меня не фига не получается заставить зелье работать. То есть выпил зелье на 1 игровой час игрок в какой то фракции, а через час удаляется из нее, как только эффект от зелья закончился.
Уважаемые знатоки, не могли ли вы ответить мне на следующий вопрос. Взаимодействует ли маркер XMarkerHeading с Актером, когда тот подходит к нему в режиме пакета Travel. Я пробовал определить событием OnPackageChange(Package akOldPackage) Но ничего не получилось. Можно, правда, поставить Триггер, но может быть есть како-нибудь событие на данное действо? Для чего это надо? Чтобы при достижения Актера маркета поменять ему пакет.
Я сам не пробовал, но у пакетов, вроде, есть три типа ветки: stacked, когда выбирается первая процедура, удовлетворяющая условия, sequence, когда (как я думаю) процедуры выполняются по порядку и simu-что-то там, когда они выполняются одновременно.
Задача: сделать сундук, который открывался бы каждый раз после определенной фразы в диалоге с определенным НПС (спутником), причем из любого места в игровом мире. Сделал и спрятал сундук, сделал квест, сделал алиас на сундук, прописал диалог, указал на диалоге целью НПС. Добавил в окончание диалога скрипт:
GetOwningQuest().SetStage(5)
В стадии 05 квеста поставил галочку на окончание квеста, прописал скрипт:
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())
Изменение репутации для пользователя erlick
erlickOffline
Сообщение №2031
написано: 14 марта 2016, 01:22
| Отредактировано: erlick - 14 марта 2016, 01:28
Dsion, спасибо за совет. Изначально я так и собирался, одним скриптом, без алиасов и стадий, но, без прописанных свойств ,в диалоге, скрипт не хотел компелится, а при неправильной комппиляции скрипт не создавался в диалогах, а как следствиена него нельзя было повесить свойства. Выход был таким, сначала создать скрипт:
GetOwningQuest().SetStage(5)
А потом, после удачной компиляции, удалить вышенаписанный скрипт, пятую стадию квеста, навесить на скрипт свойство ObjectReference с ссылкой на сундук и прописать скрипт:
ChestRef.Activate(Game.GetPlayer())
Все заработало. За что я премного благодарен)) В том, что я неправильно сделал с алиасом и стадиями, я не разбирался. И есть подозрение, что постоянное завершение квеста постепенно раздувало бы сохранение и скрипты, прописанные в сохранении, что со временем повлияло бы на качестве игры. Так что вариант без алиаса и стадии я считаю оптимальным. Спасибо за помощь!)
Уважаемые знатоки, Для определения смерти Актера имеется событие Event OnDeath(Actor killer). Скрипт с этим событием, как я понимаю, вешается на самого Актера или его Алиас. Нет ли функции с помощью которой можно было бы определить, что все враги погибли без того чтобы вешать на каждого скрипт с OnDeath?
У меня еще вопрос: пытаюсь добавлять Outfit Prisoner.SetOutfit(RagsOutfit) Но, одежда в инвентаре появляется и даже как-бы активна. Вот только ГГ в нигляже, то есть в одних подштанниках. Не подскажите как исправить сие безобразие?
Изменение репутации для пользователя andrelo-1
andrelo-1Offline
Сообщение №2035
написано: 15 марта 2016, 13:26
| Отредактировано: andrelo-1 - 15 марта 2016, 13:27
Dsion, ох блин! А пользовался этим только для удаления вещей, даже и помыслить не мог, что оно еще и переносить. Мои мысли блуждали куда-то в сторону фромлистов и глобальных переменных. Большое спасибо!
Добавлено (25 Марта 2016, 13:11) --------------------------------------------- NPC.RemoveAllItems(Chest) - не работает (( Свойства и сундука и нпс прописаны, причем нпс прописывал и как ObjectReference и как Actor. Строчка написана в теле скрипта квеста (Extends Quest Hidden), полный фрагмент выглядит так:
;BEGIN FRAGMENT Fragment_3 Function Fragment_3() ;BEGIN CODE _00IoHuman1.RemoveAllItems(_00IoItemChest) SetObjectiveCompleted(20) SetObjectiveCompleted(30) SetObjectiveDisplayed(40) _00IoHuman.RemoveFromFaction(PotentialFollowerFaction) ;END CODE EndFunction ;END FRAGMENT
Фракция удаляется, цели квеста меняются, вещи с НПС удаляются, а в сундуке не появляются. Где у меня лыжи не едут?
Добавлено (25 Марта 2016, 13:41) --------------------------------------------- Разобрался. Скрипт не срабатывал из другой локации. Перенес активатор скрипта в локацию с сундуком - все заработало.
Народ, у меня такой вопрос... возможно кто-то уже писал что-нибудь подобное, но поиск по форуму ничего не дал...
Короче, хочу сделать, чтобы стрелы можно было отбивать не только щитом, но и размахиванием оружием (типа мастер одноручного может даже магию и стрелы сбивать). Но не знаю как сделать, поскольку талант на отбивание стрел щитом работает только на щиты. Может, кто-нибудь знает хороший способ, как сделать это? У меня в скриптовании малый опыт, по-этому не знаю, есть ли подобная функция... ещё был вариант с созданием коллизионной стены во время атаки, но пока что она не получается... Помогите, кто чем может, пожалуйста. Заранее благодарен.