Event OnSpellCast(Actor akActor, Form akSpell) ; 1) Лишний аргумент Actor akActor. ; 2) Событие никогда не сработает, т.к. посох сам по себе не творит заклинания (это делает его владелец). if akSpell == aaaEncBombarda akActor.damageav("Magica", 50) ; "Magicka" endif EndEvent
Как более правильно:
1) Создать простое Ability. 2) К нему прицепить скрипт:
ScriptName _TESTTEST9 Extends ActiveMagicEffect
Enchantment Property MyENCH Auto ; Заполнить это Property нужным зачарованием.
Event OnSpellCast(Form xF) IF xF == MyENCH GetTargetActor().DamageAV("Magicka", 50.0) ; После исчерпания магии актер сможет стрелять из посоха (так и задумано?). ENDIF ENDEVENT
3) К посоху прицепить скрипт:
ScriptName _TESTTEST8 Extends ObjectReference
Spell Property MySPEL Auto ; Заполнить это Property созданным Ability.
Сохранить исходник. Скомпилировать 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, имеешь в виду, через Entry -> Activate? Там же сообщение с выбором должно появляться? Не проще добавить деньги в инвентарь дракону через DeathItemDragon01? Еще можно использовать SKSE (RegisterForCrosshairRef() + RegisterForMenu("ContainerMenu")). В смысле, добавлять деньги трупу дракона, не трогая вообще ничего.
Myprism, можно скриптом (SKSE) на алиасе актера (на актере). Использовать OnObjectEquipped(Form akBaseObject, ObjectReference akReference), GetSlotMask().
1) На примере Лидии (HousecarlWhiterun): она имеет 2 сэндбокс-пакета с условиями. Если взять ее в спутники, а потом отпустить, она пойдет в точку, указанную в первом по списку пакете, условия которого будут удовлетворены (в Драконий предел - если дом не куплен, пакет HousecarlWhiterunSandboxDragonsreach; в противном случае - в дом, пакет DefaultSandboxEditorLocation512).
Holtof55, я не совсем понял, что тебе нужно сделать в МСМ. Но на всякий случай:
1) Если тебе нужно обновить мод до новой версии - ссылка (см. Script Versioning). 2) Вместо событий и функций версии 1 (см. SKI_ConfigBase.psc) я бы рекомендовал пользоваться версией 2. 3) В МСМ для отображения окна с сообщением используется ShowMessage().
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №680
| Тема: Вопросы по скриптам Papyrus
написано: 31 марта 2016, 13:17
| Отредактировано: Multigone - 31 марта 2016, 13:47
Holtof55, если новая версия мода не содержит измененных Property (или внутренних переменных) скриптов, то при замене ЕSP взаимодействия с МСМ не требуется. Если подобные вещи есть, все-таки советую внимательно изучить вышеуказанный материал (вообще все разделы), возможно, с переводчиком. В шапке темы есть базовая информация о скриптах. Здесь есть все что душе угодно, если пользоваться поиском. Здесь есть переведенная инфа об основах МСМ. Если после изучения этих материалов останутся вопросы, в этой теме на них наверняка ответят.
Сейчас же я лишь могу объяснить, как работает обновление:
int function GetVersion() ; Функция, сообщающая текущую версию скрипта МСМ. С каждой новой версией число нужно увеличивать. return 1 endFunction
; Событие, происходящее, когда МСМ обнаруживает, что текущая версия выше, чем та, которая хранится в сохранении (в памяти этого скрипта). Event OnVersionUpdate(Int iVersion) ;Обнаружена новая версия. Делаем, что хотим для обновления. ENDEVENT
; МСМ проверяет текущую версию каждого зарегистрированного мода после загрузки сохранения игры (я так думаю). Проверить ее можно и вручную, вызвав в МСМ-скрипте CheckVersion(). ; Как видно из этого, никакого участия пользователя в обновлении мода не требуется, все происходит автоматически.
Lexo, скриптом добавить базовой форме ключевое слово нельзя. Однако, его можно добавить в Reference Alias и заполнить скриптом (ForceRefTo()) конкретным Object Reference. В этом случае ключевое слово будет ассоциировано с этой копией формы (но, опять-таки, не с базовой).
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №681
| Тема: Вопросы по скриптам Papyrus
написано: 31 марта 2016, 14:07
| Отредактировано: Multigone - 31 марта 2016, 15:52
Lexo, в движке. Если формы заранее известны, можно создать их копии. В один форм-лист поместить артефакты, в другой - копии. При активации станка проверяется, есть ли перк и артефакты у игрока, и добавить нужные копии в инвентарь. Удаление из инвентаря копии означает, что игрок снял с нее зачарование. Удаляется такой же артефакт. После выхода с фурнитуры добавленное удаляется. Но это в теории.
А, забыл сказать, что копии артефактов должны быть без MagicDisallowEnchanting.
PPS: Чтобы просто удалить (или установить новое) зачарование у базовой формы оружия / брони, есть SKSE-функция SetEnchantment():
1) В алиас актера. 3) Указать конкретного актера:
Код
Actor Property MyActor Auto ; Объявление переменной типа Actor с произвольным именем MyActor. Faction Property MyFaction Auto ; После компиляции скрипта и его присоединения к расширяемой форме эти переменные нужно заполнить (ПКМ на скрипте -> Edit Properties -> Edit Value).
Я как-то раз пробовал сделать заклинание-плащ, которое вешается на врага и наносит урон всем вокруг... так вот, оно наносило урон только игроку (т.к. все остальные считались союзниками для этого врага
В маг. эффекте нужно указать флаг Detrimental и снять флаг Hostile.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №687
| Тема: "Саундтрек"
написано: 12 апреля 2016, 20:45
| Отредактировано: Multigone - 12 апреля 2016, 21:02