RanJin, я просто прошел по ссылке, которую тебе дали, и посмотрел, что там было изменено. В общем, тебе нужен этот мод: Skyrim -Community- Uncapper by Elys
Dsion, ну да. Для чего нужно: делаю возможность изгонять мертвых существ из мира, как если бы на них использовали Banish. Вместе со всем содержимым инвентаря. Если есть квестовый предмет, он должен остаться, а существо вместо изгнания испепеляется.
Kepper, да, все верно). Я тоже пошел этим путем, просто хотел узнать, есть ли способ сделать проще. Моя версия такая:
Код
xT.UnequipItem(xT.GetEquippedObject(0), false, true) xT.UnequipItem(xT.GetEquippedObject(1), false, true) xT.RemoveAllItems() ; Экипированное после смерти актера оружие не удаляется (?). ; Предметы Outfit, не имеющие флага Playable, не удаляются в некоторых (или во всех?) случаях. ; Квестовые предметы в этом случае не удаляются. iC = xT.GetNumItems() WHILE iC iC -= 1 Armor xA = xT.GetNthForm(iC) AS Armor IF !xA || xA.IsPlayable() iC = -1 ENDIF ENDWHILE IF iC < 0 ; Есть квестовые вещи - испепелить. ELSE ; Нет - изгнать. ENDIF
Ищу мод, который был на МГ в разделе магии. Там был видос с таким моментом: в Вайтране (у входа в город) НПС поднят вихрем и летает вокруг одной точки. Позарез нужен этот мод, точнее, исходники скриптов, которые я там (возможно) обнаружу. Уже полтора часа смотрю разные видео , что-то пока безрезультатно.
Kepper, RemoveAllItems(), примененный к НПС, удаляет все без разбора, невзирая на значение abRemoveQuestItems. Тестировал на драугре-боссе, выпрыгивающем из саркофага в Ветреном Пике, с которого падает скрижаль с картой. Есть еще идеи?
как сделать, что бы при взломе замков повышался навык карманных краж
При активации перком узнаем референс закрытого объекта. Ждем мгновение (Wait()). Проверяем, закрыт ли объект. Если нет, повышаем навык. Думаю, это можно реализовать.
MagicalDagger, минутку. Все изменения базового объекта в СК после того, как нужный референс был инициализирован и записан в сохранение, не возымеют никакого эффекта. Т. о., скрипт нужно вешать на алиас актера, не на ActorBase.
Чтобы проверить, работает ли скрипт, можно добавить уведомление куда-нибудь.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №730
| Тема: Вопросы по скриптам Papyrus
написано: 27 июня 2016, 21:32
| Отредактировано: Multigone - 24 апреля 2020, 10:30
Lexo, я пытался сделать, чтобы молнии били из актера в стоящих рядом и в пространство под произвольными углами. Если поместить внутри актера маркер и использовать его как источник заклинания, то молнии будут ударять в самого актера. Надо смещать источник от центра в направлении заклинания на некоторое расстояние. Но тогда будет видно, что снаряд вылетает из пустого места. Короче, я к тому, что "кидает куда попало" еще и достаточно проблемно сделать.
1) НПС (не игрок) могут иметь только перки, унаследованные от ActorBase. Т.е. ни скриптом, ни с помощью ApplyPerk нельзя их добавить / удалить. 2) Значит, он не может проверить, есть ли в направлении его взгляда актер или нет.
EVENT OnEffectStart(Actor xT, Actor xC) S2.Cast(xT, xC) ENDEVENT
ScriptName _TESTTEST12 Extends ActiveMagicEffect ; Основной скрипт.
Actor Property pA Auto ; Актер-источник, которому необходима проверка. Spell Property pS1 Auto ; Заклинание 1. Spell Property pS2 Auto ; Заклинание 2. MagicEffect Property pM2 Auto ; Эффект заклинания 2.
EVENT OnEffectStart(Actor xT, Actor xC) pA = xT OnUpdate() ; Старт. ENDEVENT
EVENT OnUpdate() IF F() Debug.Notification("ХА!") ; Делаем что хотим - отжигаем заклинаниями. ENDIF RegisterForSingleUpdate(1.0) ; ENDEVENT
Bool FUNCTION F() ; Основная функция-проверка. pS1.Cast(pA) ; Бьем заклинанием и ждем ответа. Int iC = 50 ; Даем 0.5с на возврат. WHILE iC && !pA.HasMagicEffect(pM2) ; Ждем, пока эффект ответа не будет на источнике или не истечет время. Utility.Wait(0.01) iC -= 1 ENDWHILE IF iC ; Если время не истекло. pA.DispelSpell(pS2) ; Снимаем. RETURN true ENDIF ; По умолчанию возвр. false. ENDFUNCTION
Принцип: третье заклинание основное. Когда накладывается на актера, запускается вся байда. Первое заклинание ударяет в направлении взгляда источника. Цель (если есть) возвращает второе заклинание обратно. Производится проверка и, если удачно, делаются необходимые действия.
Lexo, эту тему поднимали уже давно. У нескольких человек не работало. У меня не работает. Я сейчас еще раз проверил. Проверь, поставь эффекту Ability, который указываешь в перке, какой-нибудь шейдер, например, LifeDetected. У меня он не отображался на НПС.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №737
| Тема: Вопросы по скриптам Papyrus
написано: 30 июня 2016, 19:38
| Отредактировано: Multigone - 30 июня 2016, 19:56
EVENT OnUpdate() IF !FollowersDrago.IsInCombat() ; Боя нет - проверяем редко. RegisterForSingleUpdate(5.0) ELSEIF !CheckEffect() ; Бой есть, цели под носом нет - проверяем часто. RegisterForSingleUpdate(1.0) ELSE ; Сработало - следующая проверка по заказу. FollowersDrago.PlayIdle(DragonTuumIdle) DragonTorShul.play(FollowersDrago) DragonTuumSpell.Cast(FollowersDrago) RegisterForSingleUpdate(10.0) ENDIF ENDEVENT
Bool FUNCTION CheckEffect() ; CheckActorSpell.Cast(FollowersDrago) ; Int iC = 3 ; Даем 0.35с на возврат. Снизил число неэффективных проверок. Utility.Wait(0.05) WHILE iC && !FollowersDrago.HasMagicEffect(pM2) ; Utility.Wait(0.1) iC -= 1 ENDWHILE IF iC ; FollowersDrago.DispelSpell(ActorYesSpell) ; RETURN true ENDIF ENDFUNCTION
***
А, разобрался. Первое заклинание не работало. Если не указывать цель заклинания, то оно будет ударять по линии взгляда актера, за исключением, когда имеет TargetActor и актер - НПС. Тогда просто ничего происходить не будет. Поэтому, нужно изменить первое заклинание на Aimed, его эффекту указать невидимый снаряд (луч?). У меня заработало на НПС.
Bolgarec75, информация об основах есть в этом разделе форума. Все есть на СК.com. А лучше попробуй просто добавить в заклинание больше маг. эффектов с призывом разных атронахов, и посмотри результат.
Изменить тип благословений на Ability, отредактировать все затронутые маг. эффекты - вместо FF указать Constant (нужно сделать копии, т. к. те эффекты используются и в др. заклинаниях). Использовать этот скрипт в активаторах (заполнить переменные). Можно просто поменять текст ванильного (его заголовок не трогать) и скомпилировать (не рекомендую):
Scriptname _temp extends ObjectReference
Spell Property TempleBlessing Auto Message Property BlessingMessage Auto Message Property AltarRemoveMsg Auto
Event OnActivate(ObjectReference akActionRef) Actor xActor = akActionRef AS Actor IF !xActor ELSEIF !xActor.HasSpell(TempleBlessing) xActor.AddSpell(TempleBlessing, false) if xActor == Game.GetPlayer() BlessingMessage.Show() endif ELSE xActor.RemoveSpell(TempleBlessing) if xActor == Game.GetPlayer() AltarRemoveMsg.Show() endif ENDIF EndEvent
За снятие одних благословений при наложении других отвечает флаг Dispel Effects в их маг. эффектах. Сомневаюсь , что флаг сработает (???), когда эффекты станут Сonstant, но лучше его убрать (во всех).
PS: Скрипты, добавленные модами на базовые объекты (в данном случае это активаторы), не будут работать на конкретных референсах, если референсы уже записаны в сохранение, с которого стартует мод. Это означает, что все уже встреченные алтари не будут изменены. Проверь, может, я не прав.
Даешь ему в шапке свое название (вместо _tеmp); файл .psc должен называться так же. Компилируешь. Открываешь активатор, удаляешь старый, добавляешь новый. Указываешь все Property, как они были. Не укажешь, работать не будет. Сохраняешь. Повторяешь для других активаторов. Как я уже говорил, можно тупо заменить текст в ванильном. Для этого делаешь бекап .psc, в ванильном пишешь свой текст (шапку не трогать), сохраняешь и компилируешь, возвращаешь бекап на место ванильного .psc. В результате у тебя будет модифицированный .pex и ванильный исходник. Это не лучший путь, но он позволяет не трогать активаторы.
Event onupdate() if (Player.HasMagicEffect_WisplHealerLightFFSelf)) ; Это маг. эффект со скриптом? Если да, эта проверка не нужна. Обновление авто-отменяется после завершения эффекта. if (Player.GetActorValuePercentage("health") < Health50) GrandHealing.Cast(Player, Player) ; Сильно Лечим elseif (Player.GetActorValuePercentage("health") < Health95) HealOther.Cast(Player, Player) ; Лечим EndIf EndIf RegisterForSingleUpdate(2.0) EndEvent
Я бы добавил заклинанию еще один эффект со слабым постепенным лечением (и условием в заклинании "здоровье < 95%"), тогда HealOther вообще не нужен. А проверку привязал бы не только к обновлению, но и к получению урона, чтобы после удара лечение срабатывало мгновенно, затем следовала перезарядка 2с. Но хозяин - барин. К тому же, может, так и задумано.
nepewka, идеи есть, только не понял, зачем это тебе вообще. Куда стреляет пушка? Похоже, маркер цели задается на основе того, куда смотрит актер с этим маг. эффектом.
Чтобы один скрипт создал сразу 5 пушек, нужно, во-первых, избавиться от обновления, т.к. оно задает новую точку стрельбы (в одной форме может быть только одно обновление onupdate()). Вместо него использовать While. Оформить все в виде функции, которая будет вызвана при старте эффекта 5 раз.
Или: в основное заклинание добавить еще 4 доп. эффекта. Каждый доп. эффект должен являться копией основного, и у него должен быть этот скрипт. Как-то так, в общем.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №748
| Тема: Вопросы по скриптам Papyrus
написано: 27 июля 2016, 19:35
| Отредактировано: Multigone - 27 июля 2016, 19:40
Activator Property FXEmptyActivator Auto Activator Property ORD_Smh_DwarvenAutocannon_Activator Auto Float Property ORD_ShootZ Auto Float Property ORD_DistanceInFront Auto Float Property ORD_UpdateRate Auto Float Property ORD_DistanceZ Auto Spell Property ORD_Smh_DwarvenAutocannon_Spell_Proc Auto Sound Property ORD_Smh_DwarvenAutocannon_Marker_Deploy Auto Sound Property ORD_Smh_DwarvenAutocannon_Marker_Destroyed Auto
Perk Property ORD_Smh30_RemoteControl_Perk_30 Auto Activator Property ORD_Smh_DwarvenAutocannon_Activator_RemoteControl Auto Float Property ORD_RemoteControlDist Auto
Int Property ORD_Electrobolt Auto Spell Property ORD_Smh_DwarvenAutocannon_Spell_Proc_Electrobolt Auto Explosion Property ORD_Smh_DwarvenAutocannon_Explosion_Electrobolt Auto Perk Property ORD_Smh50_Electrobolt_Perk_50 Auto
Perk Property ORD_Smh80_SpinUp_Perk_80 Auto Float Property ORD_SpeedUpDelta Auto
Perk Property ORD_Smh70_FiringLine_Perk_70 Auto Float Property ORD_AngleDelta Auto Float Property ORD_Min Auto
MiscObject Property ORD_Smh_DwarvenAutocannon_Misc Auto
Actor TargetActor Int iC = 5 ; Количество пушек. Bool bF
Event OnEffectStart(Actor akTarget, Actor akCaster) TargetActor = akTarget RegisterForSingleUpdate(0.0) EndEvent
Event OnEffectFinish(Actor akTarget, Actor akCaster) bF = true EndEvent