• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Dsion, я хочу чтобы актер изначально был мертв, но с помощью одного уникального предмета удалось вернуть его к жизни. Но скрипт воскрешения проходит только в случае, если актер был раньше жив. Пробовал тоже скрипт убийства написать, но что-то вечно не там указываю и он не проходит. Плохо в папирусе разбираюсь еще. Может подкините его?)
Я проверил скрипт, который сразу (во время старта игры) убивает NPC. Не очень хорошо. Когда приходишь к нему, он-то мертвый и воскрешается, но голый. Одежда не надета. И я даже знаю, почему, но это не интересно.
Лучшее, что пока пришло в голову, - это сделать два референса. На одном будет галочка "Starts Dead", а второй будет отключен. Экипировка кольца будет не воскрешать NPC, а отключать мертвого и включать на том же месте живого.
через Mod Spell Magnitude с определенными Conditions для Target
Если в маг. эффекте не будет указан флаг Power Affect: Magnitude, то для него перк не сработает.</зануда мод>
nepewka, с НПС вроде проблем нет никаких. Хочешь мага - возьми какого-нибудь мастера-пироманта EncWarlock07TemplateFire и создай своего актера с похожими настойками Stats, AI Data, SpellList и т.д. Ничто не мешает сделать свои CombatStyle и Class на основе нужных.
Multigone, чойто? А вообще, пути, как минимум два: 1. Уменьшить урон исходящих заклинаний, если цель - союзник. 2. Уменьшить входящий урон, если атака прилетела от союзника. Хоть что-то одно должно бы сработать.
SoraSt, может, как-то так... Не знаю. Это на референс вешается:
GlobalVariable Property Ara09testcote Auto ; глобальная переменная с параметрами Variable Type - Short , Value - 0 ObjectReference Property PlayerAra05Container Auto ;эт контейнер куда шмот ГГ уходит Armor Property MS02Armor Auto ; MS02/MS03/MS04 - наборы шмота выдаваемого ГГ взамен ушедшего в контейнер - 3 типа, в зависимости от тематичной матерости ГГ Armor Property MS02Gauntlets Auto Armor Property MS03Armor Auto Armor Property MS03Gauntlets Auto Armor Property MS04Armor Auto Armor Property MS04Gauntlets Auto ObjectReference Property Ara09MoveMarker Auto ;маркер к которому отправляется ГГ после получения шмота
----------------------------------------------------------------------------------------- есть определенное кол-во актёров по очереди стартующих со следующим скриптом :
Scriptname Ara09TESTboxsScript extends Actor
GlobalVariable Property Ara09testcote Auto ; это та самая глобальная переменная
Event OnDeath(Actor akKiller) Ara09testcote.value += 1 ; по задумке погибель актёра должна прибавить единицу к значению объявленной в предыдущем скрипте переменной EndEvent
ЗЫ: поначалу вместо Ara09testcote.value += 1 было Ara09testcote.Mod(1) - компилятор компилировал но в игре увеличения значения переменной никак не отражалось, так как ГГ продолжал получать первый набор шмоток -------------------------------------------------------------------------------------------
Event OnActivate(ObjectReference akActionRef) ; ГГ активирует активатора If Ara09testcote.GetValue()>= 0 && Ara09testcote.GetValue()< 3 ; а вот тут начинается непонятное, эта редакция строки не работает ------------------------------------------------------------------------------------------- если оставляю - If Ara09testcote.GetValue()>= 0 - то работает если же меняю условие например на <3, то работа прекращается, и ГГ тупо безрезультатно жмякает активатора ------------------------------------------------------------------------------------------- Game.GetPlayer().removeAllItems(PlayerAra05Container) Game.GetPlayer().AddItem(MS02Armor, 1) Game.GetPlayer().EquipItem(MS02Armor, 1) Game.GetPlayer().AddItem(MS02Gauntlets, 1) Game.GetPlayer().EquipItem(MS02Gauntlets, 1) Game.GetPlayer().Moveto(Ara09MoveMarker) ElseIf Ara09testcote.GetValue()>= 3 && Ara09testcote.GetValue()< 5 ;по задумке после ряда побед должен получать другой набор шмоток Game.GetPlayer().removeAllItems(PlayerAra05Container) Game.GetPlayer().AddItem(MS03Armor, 1) Game.GetPlayer().EquipItem(MS03Armor, 1) Game.GetPlayer().AddItem(MS03Gauntlets, 1) Game.GetPlayer().EquipItem(MS03Gauntlets, 1) Game.GetPlayer().Moveto(Ara09MoveMarker) ElseIf Ara09testcote.GetValue()>= 5 && Ara09testcote.GetValue()< 9 ; и новый набор шмоток Game.GetPlayer().removeAllItems(PlayerAra05Container) Game.GetPlayer().AddItem(MS04Armor, 1) Game.GetPlayer().EquipItem(MS04Armor, 1) Game.GetPlayer().AddItem(MS04Gauntlets, 1) Game.GetPlayer().EquipItem(MS04Gauntlets, 1) Game.GetPlayer().Moveto(Ara09MoveMarker) EndIf endEvent
как организовать увеличение значения переменной при цифровой смерти актёров ??? как организовать проверку условий текущего значения переменной для адекватной экипировки ГГ ???
Dsion, мне казалось, что флаги Power Affects вкл./откл. возможность изменять силу / продолж. эффекта с помощью перков. Сейчас проверил - похоже, они вообще ни на что не влияют.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №1661
написано: 18 июня 2015, 18:20
| Отредактировано: Multigone - 18 июня 2015, 18:38
Gvinpin, заполнил ли ты GlobalVariable Property Ara09testcote Auto во всех скриптах? Предположим, да.
Код
Ara09testcote.Mod(1)
Будет работать как с Int-глобальными, так и с Float. В обоих случаях можно писать Ara09testcote.Mod(1.0), это более лорно.
Код
If Ara09testcote.GetValue() >= 0 && Ara09testcote.GetValue() < 3
Проверка правильная. Но всегда лучше делать так:
Код
Int iGlobal = Ara09testcote.GetValueInt() IF iGlobal >= 0 && iGlobal < 3
... поскольку значение глобальной в начале исполняемого отрезка кода и в его конце может быть разным, если эта глобальная может меняться сразу из нескольких событий / скриптов.
у меня эта проверка почему-то хронически не работает, оставляю If Ara09testcote.GetValue() >= 0 - работает, ни в каких других вариантах - нет ... где-то в этой проверке ошибка порылась, поймать её не могу, пол дня на это убил - почему-то не считывает скрипт текущее значение переменной, и работает только с - 0 (когда Ara09testcote.GetValue() >= 0) во всех остальных случаях активатор просто не срабатывает - GlobalVariable Property Ara09testcote Auto во всех скриптах - заполнены , только что на всякий случай перепроверил
ЗЫ: уйду на обязательное вечернее мероприятия, вернусь буду пробовать - в любом случае спасибо!
Multigone, реально помогла проверка - Debug.Notification(Ara09testcote.GetValue() as string) ... почему-то стартовое значение переменной оказалось 100 при том что заданный параметр Value = 0 ... для проверки сделал ещё одну глобальную всё перекинул на неё, такая же засада стартовая - 100 ... перекинув значения IF iGlobal >= 100 && iGlobal < 103 ... получил рабочий скрипт, не будь этой проверки можно было бы ещё пару дней посидеть потупить ... ещё раз спасибо
Добавлено (19 Июня 2015, 00:18) ---------------------------------------------
Цитата Dsion
Видишь ...
это за тебя карма говорит на которой сказалось число сообщений - три шестёрки ... после написания следующего всё наладится и будет хорошо
Вот блин. Я уже было впал в праведный гнев и хотел спросить, чем тебя не устроила консольная команда GetGlobalValue, которой я тебе посоветовал проверять эту переменную. А потом заметил, что этого сообщения нету в исходящих. Неужели не отравилось? Я был уверен, что послал его тебе в приват. Даже точно помню, что писал.
nepewka, ты проверял? Работает? Тут Dsion подсказывал, что можно выполнить задачу, используя перк (я, кстати, об этом не подумал). В принципе, можно любым способом, но скрипты немного более динамичны (например, можно задать игнорирование хитов для тех актеров, Actor и ActorBase которых мы изначально не знаем - теоретически, для любых актеров, в т.ч. из др. модов).
Цитата nepewka
если оставлять пустые скобки в IgnoreFriendlyHits bool разве по умолчанию будет true?
Если оставлять пустые скобки, то аргументом функции будет значение, заданное изначально для нее. Смотрим:
Код
Function IgnoreFriendlyHits(bool abIgnore = true) native
Это верно для функций с флагом Native. Для функций с флагом Global при вызове функции все аргументы должны быть указаны. Function Flags.
Что-то я вообще не понял, как вы собираетесь сделать это скриптом... Установленный IgnoreFriendlyHits означает только то, что актор не будет становиться враждебным, если его пнут пару раз. Вам разве это нужно? Я подумал, что нужно вообще не наносить урона союзникам...
И на перки, конечно, можно любые условия вешать... Можно сделать, чтоб входящий урон снижался до нуля от любых не-враждебных NPC. Не зависимо, ясное дело, от их ActorBase и того, каким модом они добавлены.
Multigone, да вот проблема в том, что не дома пока и проверить толком не могу ((
кстати да, Dsion, то может прав IgnoreFriendlyHits вполне может означать только то, что актер не будет агриться при получении урона от союзника, но это также можно флаг hostile убрать в MGEF. проверки требует данный способ.. Как работает эта функция...
Dsion, разве про перк говорил? помоему что то про книгу или нет? Дайте айдишник или хотя бы название...
nepewka, нет, конечно, тот кейворд, который ты дашь атронахам (мне лень было загружать .esm).
Насчет урона от одних другим, я не уверен. Можно было бы воспользоваться комбо из следующих проверок, если бы они работали (перк для НПС):
Perk Owner: (S) (GetFactionRelation) ([TARGET]) (>) (1.0) (AND) ; Вот насчет этой не знаю, передается ли инфа о цели в перк. В маг. эффекты передается.
Target: (S) (GetIsID) (Player) (==) (1.0) (OR) (S) (HasKeyword) (KYWD) (==) (1.0) (AND)
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №1679
написано: 19 июня 2015, 13:33
| Отредактировано: Multigone - 19 июня 2015, 13:49
Кстати, снижение магнитуды до нуля перком вовсе не означает, что к НПС не будет применяться эффект вовсе. Если он имеет Hostile, то НПС может перестать быть другом и начать становиться недругом. Просто в битве, в которой участвуют 1) враги 2) игрок 3) НПС на стороне игрока, НПС игнорирует любые атаки игрока до момента, пока битва не закончится. Просто к сведению.
Еще поделюсь следующим наблюдением: у игрока есть FF заклинание с 2 эффектами. Первый лечит всех живых существ, второй наносит урон нежити (и является враждебным). Так вот, если это заклинание применяется к живому, он станет врагом. Казалось бы, раз негативный эффект не применяется, т.к. ему не дает его условие, то заклинание не должно являться враждебным. Однако, если в заклинании в любом эффекте есть Hostile, то все заклинание является Hostile, даже если остальные его эффекты не враждебные.