День добрый граждане. За время своего отсутствия написал я сказку, которая конечно где-то ложь, но в ней...
Цитата Coss83
подскажите плиз.хочу сделать так чтобы силовую броню нельзя было бы пробить огнестрельным оружием,а энергетическим можно
Итак сказка: СОЗДАНИЕ "НЕПРОБИВАЕМОЙ" БРОНИ.
КАК СДЕЛАТЬ БРОНЮ ЗАЩИЩАЮЩУЮ ОТ ОПРЕДЕЛЕННОГО ОРУЖИЯ
Данное руководство не касается процесса создания моделей, текстур, анимации, оружия, брони и предметов. Оно о том, как в G.E.C.K. сделать конкретную уже готовую броню полностью или частично неуязвимой для конкретного уже готового оружия.
В Fallout 3 так же как и в Oblivion существует “магия”. “Магические” эффекты могут быть основаны как на модификаторах (Value Modifier), напрямую изменяющих указанные характеристики на указанную величину, так и на скриптах, которые могут проделать с целью практически что угодно. Существуют также эффекты типа “Свет” и “Паралич”, но здесь они рассматриваться не будут. В данном случае будут рассмотрены только эффекты, наносящие повреждения и эффекты им противодействующие. В Fallout 3 существует несколько типов урона. В отличие от Oblivion’а они изначально не привязаны к определенным визуальным эффектам и вообще весьма условны: “Физический” Electric EMP Energy Fire Frost Poison Radiation “Физический” – урон наносимый любым оружием, для которого тип урона специально не указан (в строке Resist стоит значение NONE), а также взрывами и голыми руками, но не эффектами навешанными на оружие и взрывы, и не UnarmedAttackEffect'ами. Radiation – не является уроном как таковым и нужен для навешивания на объект (NPC или Creature но в основном на ГГ) дополнительных эффектов. Каждому типу урона кроме “Физического” соответствует свое “личное” сопротивление, уменьшающее соответствующий урон на указанное число процентов: ElectricResist – изначально не используется EMPResist – используется для импульсных мин и гранат EnergyResist – используется для плазменного и лазерного оружия FireResist – используется для огнеметов FrostResist – изначально не используется PoisonResist – используется для дротикомета и яда скорпионов Эти типы сопротивления уменьшают повреждения, наносимые непосредственно самим оружием с совпадающим типом урона, а также воздействие эффектов с совпадающим типом урона. RadResist – исключение. Уменьшает только набор персонажем уровня радиационного заражения. Действие эффектов и повреждения наносимые оружием не уменьшает. DamageResist – исключение. Уменьшает повреждения наносимые непосредственно самим оружием с любым типом урона, взрывами, а также воздействие эффектов с совпадающим типом урона. Действие эффектов основанных на скриптах нельзя уменьшить, а можно только полностью заблокировать 100%-м сопротивлением, поскольку у них отсутствует понятие “сила”. Они либо срабатывают на 100% либо не срабатывают вообще. В любом из перечисленных случаев действие эффекта навешанного на оружие может быть уменьшено только его "собственным" либо "общим" (DamageResist) сопротивлением, при условии что в “базовой” части эффекта будет стоять флажок Hostile - [вредоносный]. Действие “направленных” эффектов кроме RadResist суммируется с DR [СУ] самой брони, а также с DamageResist если он применяется в эффекте брони. Например (Огненное СУ персонажа) = (СУ самой брони) + (DamageResist эффекта брони) + (FireResist эффекта брони)
СПОСОБ №1 Броня защищает только от указанного оружия. Для данного способа можно использовать любое “свободное” сопротивление кроме DamageResist и RadResist. В данном случае для примера взят ElectricResist, как изначально "свободный".
1). Идем в Gameplay / Settings, находим параметр fPlayerMaxResistance и устанавливаем его значение равным 100 или более. Для NPC и Creature максимальное значение сопротивления всегда равно 100.
2). Идем в Character / ActorValues, находим ElectricResist и очищаем поля In-Game Name и Abbreviation, чтобы в игре дополнительная характеристика брони глаза не мозолила.
3). Идем в GameEffects / BaseEffect и создаем новый базовый эффект для брони: ID – ElectricResistBE01 (взято для примера) Name – название эффекта (минимум 1 символ) EffectArchetype – Value Modifier Assoc.Item – ElectricResist ResistValue – NONE Устанавливаем флажки: Recover, FXPersist, NoDeathDispel, Self, Touch, Target. Остальные снимаем. Аналогично можно создать эффекты для всех остальных типов сопротивления (пригодится).
4). Идем в GameEffects / ObjectEffect и создаем новый объектовый эффект для брони: ID – ElectricResistOE01 (взято для примера) Name – название эффекта (можно не заполнять) Type – Apparel [одежда] Флажок AutoCalculate лучше снять В окошке Effects говорим NEW и устанавливаем: Effect – ElectricResistBE01 (наш базовый эффект) Range – Self [на себя] Magnitude – 100 (полная непробиваемость указанным оружием)
Можно установить значение равное X = 100 – (СУ самой брони), либо немного больше, чтобы указанная броня при ухудшении состояния все таки начала пробиваться указанным оружием. Можно установить значение X заведомо меньше, если требуется просто уменьшить воздействие на нашу броню указанного оружия по сравнению с остальными стволами/ножами. При установке значения X менее 100 даже полностью исправная броня может пробиваться, поскольку NPC не сразу воспринимают изменение DR [СУ] самой брони при ее надевании.
5). Идем в Items / Armor, находим нужную броню и устанавливаем: ObjectEffect – ElectricResistOE01 (наш объектовый эффект брони). Если у нужной брони уже есть эффект то вставляем наш базовый эффект в него.
6). Идем в Items / Weapon, находим оружие, которое заведомо не должно пробивать нашу броню и устанавливаем: Resist – ElectricResist
При таком способе учитывается как состояние указанного оружия, так и частично состояние указанной брони. Все оружие кроме указанного наносит свой стандартный урон. Указанное оружие наносит свой стандартный урон по всем целям, не защищенным указанной броней. Указанная броня защищает только от указанного оружия (любого типа), но не защищает от удара пустой безоружной рукой, поскольку руке невозможно принудительно назначить тип урона кроме “Физического”. UnarmedAttackEffect навешиваемый на рукопашную атаку непосредственно в NPC или Creature немного из другой области.
СПОСОБ №2 Броня защищает от всего, кроме указанного оружия и радиации. В данном случае используется DamageResist.
1). Идем в Gameplay / Settings, находим параметр fPlayerMaxResistance и устанавливаем его значения равными 100 или более.
2). Идем в Character / ActorValues, находим DamageResist и очищаем поля In-Game Name и Abbreviation, чтобы в игре дополнительная характеристика брони глаза не мозолила.
3). Идем в GameEffects / BaseEffect и создаем новый базовый эффект для брони: ID – DamageResistBE01 (взято для примера) Name – название эффекта (минимум 1 символ) EffectArchetype – Value Modifier Assoc.Item – DamageResistance ResistValue – NONE Устанавливаем флажки: Recover, FXPersist, NoDeathDispel, Self, Touch, Target. Остальные снимаем.
4). Идем в GameEffects / ObjectEffect и создаем новый объектовый эффект для брони: ID – DamageResistOE01 (взято для примера) Name – название эффекта (можно не заполнять) Type – Apparel [одежда] Флажок AutoCalculate лучше снять В окошке Effects говорим NEW и устанавливаем: Effect – DamageResistBE01 (наш базовый эффект для брони) Range – Self [на себя] Magnitude – 100 (или более) Несмотря на то, что значения эффекта DamageResist и DR [СУ] самой брони складываются, в данном случае не стоит устанавливать значение Magnitude менее 100, поскольку NPC не всегда сразу воспринимают изменения DR [СУ] брони в момент ее переодевания. Как следствие суммарное сопротивление урону может оказаться меньше 100 и броня будет пробиваться.
Вариант 1: 5). В GameEffects / BaseEffect создаем новый базовый эффект для оружия: ID – WeaponDamageBE01 (взято для примера) Name – название эффекта (минимум 1 символ) EffectArchetype – Value Modifier (либо Value And Parts) Assoc.Item – Health [Здоровье] ResistValue – NONE Устанавливаем флажки: Detrimental, FXPersist, NoDeathDispel, Self, Touch, Target. Остальные снимаем.
6). В GameEffects / ObjectEffect создаем новый объектовый эффект для оружия:* ID – WeaponDamageOE01 (взято для примера) Name – название эффекта (можно не заполнять) Type – Weapon [оружие] Флажок AutoCalculate лучше снять В окошке Effects говорим NEW и устанавливаем: Effect – WeaponDamageBE01 (наш базовый эффект) Range – Touch [касание] Area – 0 (можно установить любое значение) Duration – 1 (можно установить любое значение) Magnitude – 50 (лучше установить значение равное урону указанного оружия) В окошке Conditions [условия] говорим NEW и устанавливаем: ** ConditionFunction – GetEquipped FunctionParameters – ID нашей брони Comparison – == (равно-равно) Value – 1 OR – ставим флажок
Вариант 2: 5). Сначала пишем новый скрипт примерно такого содержания:*** SCN WeaponDamageBE01Script Begin ScriptEffectStart DamageAV Health 50 (лучше установить значение равное урону указанного оружия) End Устанавливаем тип скрипта Effect Для уникального оружия в скрипте можно выполнить привязку зависимости мощности эффекта от состояния оружия и навыка персонажа, но для "серийного" оружия лучше этого не делать.
В GameEffects / BaseEffect создаем новый базовый эффект для оружия: ID – WeaponDamageBE01 (взято для примера) Name – название эффекта (минимум 1 символ) EffectArchetype – Script Assoc.Item – WeaponDamageBE01Script (собственно наш скрипт) ResistValue – NONE Устанавливаем флажки: Detrimental, FXPersist, NoDeathDispel, Self, Touch, Target. Остальные снимаем.
6). В GameEffects / ObjectEffect создаем новый объектовый эффект для оружия:* ID – WeaponDamageOE01 (взято для примера) Name – название эффекта (можно не заполнять) Type – Weapon [оружие] Флажок AutoCalculate лучше снять В окошке Effects говорим NEW и устанавливаем: Effect – WeaponDamageBE01 (наш базовый эффект) Range – Touch [касание] Area – 0 (можно установить любое значение) Duration – 1 Magnitude – 1 В окошке Conditions [условия] говорим NEW и устанавливаем: ** ConditionFunction – GetEquipped FunctionParameters – ID нашей брони Comparison – == (равно-равно) Value – 1 OR – ставим флажок
* Поскольку разные виды оружия обладают разным по силе уроном, нужно создать объектовый эффект для каждого вида указанного оружия (для реализма). ** Если имеется несколько разных видов “непробиваемой” брони, то в разделе Conditions создаем несколько блоков и прописываем каждую такую броню. Если указанную броню не прописать в условиях действия объектового эффекта указанного оружия, то данный оружейный эффект будет срабатывать по всем целям и указанное оружие станет наносить дополнительные повреждения всегда, а не только когда нужно. *** Все виды указанной брони можно прописать непосредственно в скрипте, тогда не понадобится заполнять окно Conditions.
7). Идем в Items / Weapon, находим оружие, которое заведомо должно пробивать нашу броню и устанавливаем: ObjectEffect – WeaponDamageOE01 (наш объектовый эффект оружия). Если у нужного оружия уже есть эффект, то вставляем соответствующий базовый эффект в него.
8). Идем в Items / Armor, находим нужную броню и устанавливаем: ObjectEffect – DamageResistOE01 (наш объектовый эффект брони). Если у нужной брони уже есть эффект то вставляем соответствующий базовый эффект в него.
При таком способе состояние указанной брони не учитывается. Состояние указанного оружия учитывается только при работе по целям, не защищенным указанной броней. Все оружие наносит свой стандартный урон всем целям, не защищенным указанной броней. По всем целям, защищенным указанной броней, наносится только тот урон, который прописан в эффектах указанного оружия.
СПОСОБ №3 Броня защищает от “физического” урона наносимого непосредственно самим оружием взрывами или голой рукой. Броня не защищает от радиации и эффектов, навешанных на оружие, взрывы, а также от UnarmedAttackEffect'ов. В данном способе эффекты брони не используются.
1). Идем в Gameplay / Settings, находим параметр fMaxArmorRating и устанавливаем его значение равным 100 или более.
2). Идем в Items / Armor, находим нужную броню и устанавливаем: DR [СУ] – 100 (или более)
3). Создаем объектовые эффекты и навешиваем их на указанное оружие аналогично пунктам 5-6 СПОСОБА №2
При таком способе, если СУ указанной брони принимает значение менее 100, к примеру по причине изначально плохого состояния, то броня теряет свою “непробиваемость”. На NPC данный способ работает нестабильно. NPC осознает свой текущий ArmorRating только после переоценки, которая происходит при изначальном появлении NPC в игре, переходе в другую локацию (через дверь), Respawn'е, ну или при перезагрузке игры.
Очищать поля In-Game Name и Abbreviation, в Character / ActorValues имеет смысл не только для того, чтобы убрать из игры "ненужные" названия эффектов, такие как "вред здоровью" у огнемета, но и в том случае если требуется навесить на предмет много разных эффектов, поскольку игра в поле эффектов воспринимает очень ограниченное число символов.
Данное руководство написано для “чистого” Fallout 3 без модов и DLC. Если какой-либо мод или DLC уже используют ElectricResist или FrostResist,то для СПОСОБА №1 придется использовать то сопротивление, которое покажется наименее важным.
Изменение репутации для пользователя Veldion
VeldionOffline
Сообщение №92
| Тема: Помощь по G.E.C.K.
написано: 22 февраля 2014, 03:21
| Отредактировано: Veldion - 22 февраля 2014, 04:06
Немного уточню: При значениях SightFOV больше 50 происходит отдаление, а не приближение. При значениях меньше 10 может происходить зацикленное приближение или отдаление (когда как). Приближение происходит при значениях от 50 - нет приближения, до 10 - максимальное "корректное"
Galko-сан для начала проверь пожалуйста сама, в смысле на своей версии игры и Coss83 тоже проверит, а то как выясняется разные версии игры очень по разному относятся к одним и тем же вещам... Проверенное трижды в разных условиях уже можно считать работоспособным. Ну а после этого почту за честь... Если все срастется будет и продолжение - про "реально" светящийся меч (типа Шиш-Кебаб). В принципе он уже светится, но пока сильно мигает и часто гаснет, наверное надо другое горючее...
День добрый граждане. Подскажите по паре вопросов:
Как сделать чтобы ГГ использовал не такую анимацию атаки (допустим для двуручного melee оружия) как остальные персонажи?
Как сделать, чтобы параметры оружия (урон, скорострельность, прожектиль) можно было менять в самой игре так, как это делается в некоторых оружейных модах, но без подмены оружия?
Ipatow приветствую уважаемый. Вопрос конечно тупой и сто раз перетертый но все же:
Может ли перк быть у кого-то кроме ГГ и если может, то как заставить его работать? В диалоговых скриптах напарников я обнаружил два способа добавления перка: 1). перк типа "стандартный спутниковый пакет" добавляется непосредственно напарнику. 2). "наградной" перк той же Кэсс добавляется ГГ, с указанием Кэсс в качестве объекта воздействия. Я попытался проверить наличие перка сначала как ты когда-то говорил - прописал в нем очень большое увеличение урона, но Кэсс так и не начала убивать врагов с одного-двух выстрелов. Потом попытался сделать примерно так:
Begin GameMode if Player.GetEquipped Моя броня > 0 if Кэсс.HasPerk Стандартный спутниковый перк > 0 Кэсс.DamageAV Health много Endif Endif End
И обнаружил интересный момент: игра "пытается" добавить перк, но он "слетает" через доли секунды... Подскажи как это исправить если такое вообще возможно.
Можно в самой игре на лету поменять характеристики, например, китайского автомата калашникова - но каждое такое изменение подействует на все автоматы калашникова одновременно.
С этого места поподробнее и пожалуйста с конкретными примерами, и конкретно можно ли менять указание на ProjectileNode в строке EmbeddedWeapon? То, что изменятся все экземпляры вполне устроит...
Совсем нубские вопросы: а как эти функции вообще применять-то? IDОружия.SetWeaponAmmo XXX или как-то по другому? (пример строки пжалста) И почему SetAttackDamage без Weapon... очепятка или как? Как работает SetWeaponProjectile... надо указать ID нужного прожектиля?
Понятно, что вообще ничего не понятно... Если я правильно разобрал буржуйский диалект то перк добавленный ГГ автоматически должен срабатывать и на всех персонажах являющихся напарниками, а если конкретно указать "ref in the perk owner conditions" то на конкретном напарнике, однако.... "Наградной" перк Кэсс в оригинале сделан именно так, как написано у гражданина J.E.Sawyer'а, но не работает ни стабильно ни глючно и вообще ни как... И тогда вообще непонятно почему "стандартный спутниковый пакет" в оригинале присваивается непосредственно персонажу а не ГГ...
Помоги пожалуйста еще с одни моментом, даже не знаю как получше сказать... допустим в модели есть несколько потенциальных ProjectileNode'ов (названных по разному). Можно ли в процессе игры переключаться между ними (основной ствол / подствольник) допустим через строку EmbeddedWeapon, либо использовать одновременно (многоствольная система) опять же без подмены оружия?
Что именно ты проверял и как ты определил, что перк не работает?
1). В перке "Hand of Vengeance" очень сильно увеличивал множитель оружейного урона так что Кэсс по идее любого должна была валить с полпинка однако... Если в качестве адресата указать ГГ то все работает. 2). Перком можно добавить персонажу какой-нибудь ActorEffect. Я попытался добавить свечение от гуля. ГГ светится, а Кэсс нет. Пытался как напрямую добавить Кэсс перк, так и добавлял перк ГГ, а Кэсс указывал в качестве адресата результат тот же == 0
3). Если броню с примерно таким скриптом
Begin GameMode if Player.GetEquipped Моя броня > 0 if Кэсс.HasPerk Companion Suite > 0 Кэсс.DamageAV Health много Endif Endif End
надеть на ГГ заведомо до предполагаемого момента добавления перка Companion Suite, то Кэсс умирает. Если надеть после то нет. Получается игра все-таки пытается добавить персонажу перк только он сразу "слетает". Проверял и когда Кэсс числилась как напарник и когда не числилась.
Ну насколько я понимаю любое, даже не встроенное оружие, когда оно экипировано является частью моба. Кстати у Node'а, ну того который Projectile, слов "ProjectileNode" в названии может не быть вообще. А наличию ## в названии не удивляйся. ##ProjectileNode игра понимает как ProjectileNode. Сами ## игра не видит, вернее их понимают только файлы анимации, управляющие такими деталями.
Помоги еще с одной темой только не чур не смеяться:... Как-то я спрашивал как сделать "реально" светящийся меч. Таки вот я его сделал. Ну почти. Суть такая: в модель, в данном случае "уникального" "Шиш кебаба" вмонтирован ProjectileNode. Собственная анимация модели циклически двигает его вдоль режущей кромки. Сам этот "Шиш кебаб" описан как EmbeddedWeapon с указанием названия вмонтированного ProjectileNode'а. Так же сделано специальное оружие "Шиш кебаб X"для стрельбы из этого "Шиш кебаба". Скрипт самого "Шиш кебаба" стреляет из него при помощи функции FireWeapon когда оружие находится в руках.
Проблема вот в чем, если сделать так:
Ref WeaponOwner Begin OnAdd Set WeaponOwner to GetContainer End Begin GameMode If WeaponOwner.GetEquipped ШишКебаб >= 1 If WeaponOwner.IsWeaponOut >= 1 FireWeapon ШишКебабХ 1 Endif Endif End
то прожектили летят из Node'а "Bip01" ну в смысле того, с которого любой моб начинается.
А если сделать так
Ref WeaponOwner Begin OnAdd Set WeaponOwner to GetContainer End Begin GameMode If WeaponOwner.GetEquipped ШишКебаб >= 1 If WeaponOwner.IsWeaponOut >= 1 WeaponOwner.FireWeapon ШишКебабХ 1 Endif Endif End
то прожектили летят откуда надо но когда персонаж "бежит к противнику" во время боя то прожектили лететь прекращают. С ГГ работает обсолютно нормально. Так вот где я ошибся и как сделать, чтобы прожектили лететь не прекращали не только у ГГ, но и у мобов?
То ли без единички пытаешься добавить перк, то ли с единичкой, но при этом пытаешься повесить перк на Кэсс... Что именно у тебя неладно - понятия не имею.
Интересный момент: по технической необходимости поменял я Dll'ки в папке с игрой и все заработало. Нестабильно но таки заработало. Правда проверять какая именно Dll'ка была "виновна" как-то лень...
подозреваю, что модели, в которых узел назван с ##, делал сын директора
В случае с "нормальным" оружием ## используются в моделях с "подвижным" ProjectileNode'ом таких как Гатлинг лазер или автоматический гранатомет. Попробуй шутки ради поставь не ##, а ### или #### и если пропишешь их в .kf файлах то будет работать. Я пробовал у меня работает...
Огромное СПАСИБО за помощь.
Добавлено (04 Марта 2014, 10:26) --------------------------------------------- Вчера еще раз проверил и признаю ты прав уважаемый интересный факт обнаружился: версия игры 1.00 чего-то там (моя основная) не видит разницы в количестве решеток в названии ProjectileNode проверял до десяти решеток, а вот версия игры 1.7 и Вегас еще как видят разницу в названии правда в качестве Projectile начинают использовать разные Node'ы...
Gamemode должен срабатывать в каждом фрейме, если "скриптоноситель" находится в одной ячейке с игроком. Чем дальше от игрока, тем реже он срабатывает, а может и вообще остановиться
Чем дальше тем реже??? А конкретную цифру если объект находится в руках ГГ (оружие)? все таки 25 или 30? или что-то другое? а то FPS понятие относительное... Конкретная цифра нужна для расчета движения ProjectileNode'а по кромке клинка. Да такой вот бред
цифра нужна для расчета движения ProjectileNode'а по кромке клинка
Ну да, я сам дурак, неправильно выразился... Смысл такой: собственная анимация модели циклически двигает ProjectileNode по "контрольным точкам" клинка (с этим проблем нет). Нужно сделать чтобы "выстрелы" производились именно в этих точках. То есть в идеале синхронизировать время, которое прописано для появления ProjectileNode'а в "контрольной точке" в NifScope, со временем выстрела которое назначается игрой. Привязаться к таймеру я пробовал, но толи я где накосячил (не силен я в скриптах), толи игра не понимает 4-х знаков после запятой... короче все вообще работать перестало... Подскажи можно ли в реальном времени привязать активатор к конкретно указанному ноду непися? Это бы решило все проблемы...
можно ли к одному и тому же оружию прицепить несколько projectile? Например, как в "Ракетке" в Fallout 3.
В качестве ответа позволю себе процитировать мастера Ipatow'а:
---------------------------------------------------- Нельзя поменять эти параметры у экземпляра оружия, потому что это параметры не экземпляра, а эталона. Можно в самой игре на лету поменять характеристики, например, китайского автомата калашникова - но каждое такое изменение подействует на все автоматы калашникова одновременно.
Поскольку функции работают с базовыми объектами, не всегда может быть использован синтаксис с "референс-с-точкой" - если мы заранее знаем, какое оружие модифицируем, об экземплярах просто и речи нет, так что всё укпазывается в строке параметров. Примеры:
В результате все 10мм ПП начинают расходовать патроны от дробовика, бить с номинальной силой 12345, а вылетать из них станет пыщпыщ от бластера.
набор вообще доступных функций изменения оружия сводится к этому: SetWeaponType, SetWeaponSightUsage, SetWeaponLimbDamageMult, SetWeaponAimArc, SetWeaponNumProjectiles, SetWeaponAttackAnimation, SetWeaponBaseVATSChance, SetWeaponReloadAnim, SetWeaponHandGrip, SetWeaponIsAutomatic, SetWeaponReach, SetWeaponAnimMult, SetAttackDamage, SetWeaponProjectile, SetWeaponAmmo, SetWeaponCritEffect, SetWeaponCritChance, SetWeaponCritDamage, SetWeaponActionPoints, SetWeaponAmmoUse, SetWeaponMaxRange, SetWeaponMinRange, SetWeaponSightFOV, SetWeaponSpread, SetWeaponMinSpread и SetWeaponClipRounds. Ну, плюс функции, работающие с базовыми объектами вообще - изменение цены, веса и т.п. --------------------------------------------------------
Будет не совсем как "Ракетка" но зато параметры можно будет без проблем менять циклически присвоив к конкретной кнопке или экипированному предмету. Может тебе подойдет...
Joopeeter, приветствую уважаемый. "Стенобитное ружье" живет-поживает и счет убитых врагов наживает Огромное тебе СПАСИБО! Правда живет оно только в Вегасе, а свой Фолл 3 я решил не грейдить до нужной для ружья версии - слишком много геморроя повылазило. Кстати я таки заставил PIO наносить повреждения "самостоятельно" ничего из себя не выстреливая, а при помощи скрипта "ловушечного" типа. Сейчас делаю "реально светящийся" прожектильный меч типа "Шиш кебаб". У ГГ уже работает нормально и даже разносит повреждаемые объекты типа машин и вертибирдов. С неписями пока не все гладко: прожектили перестают вылетать когда непись бежит к своему CombatTarget'у, а меч соответственно перестает светиться, хотя перерывы в свечении да еще на расстоянии не сильно заметны. Как доведу до более-менее стабильного состояния расскажу что и как...
Изменение репутации для пользователя Veldion
VeldionOffline
Сообщение №114
| Тема: ВОПРОСЫ по моддингу
написано: 19 марта 2014, 06:17
| Отредактировано: Veldion - 20 марта 2014, 05:14
Joopeeter, приветствую. Настала моя очередь подробно отчитываться .
Скрипт может быть любым присвоенным к PIO (или любому другому объекту), поэтому я использовал твой, который отвечает за движение PIO по миру, из плага "для разбора на запчасти" просто добавил в него следующие строки:
Вариант 1:
Float fLevelledDamage (можно Short)
Begin OnLoad (можно GameMode) Set fLevelledDamage to 10 (урон в единицу времени ???) {выдержка из скрипта Обливионовских "потолочных шипов" но работает} END
В этом варианте повреждения наносятся постоянно пока коллизия PIO находится внутри коллизии непися или креатуры и зависят от времени контакта коллизий. PIO обязательно должен двигаться.
Вариант 2:
Float fTrapDamage (можно Short) Float fTrapPushBack (можно Short) Float fTrapMinVelocity (можно Short) {выдержка из скрипта Фолловской ловушки "удар шпалой"} Begin OnLoad (можно GameMode) set fTrapDamage to 100 (урон за один контакт) set fTrapPushBack to 0 (сила отталкивания цели "шпалой") set fTrapMinVelocity to 0 (скорость при превышении которой PIO начинает наносить урон) END
В этом варианте повреждения наносятся при каждом проникновении коллизии PIO в коллизию непися или креатуры по принципу один контакт - одно повреждение и не зависят от времени контакта коллизий. PIO обязательно должен двигаться со скоростью больше указанной в скрипте.
В обоих вариантах чтобы урон наносился, нужно в NifScope подправить коллизию модели PIO
Интересный момент: когда PIO двигаясь по миру при помощи скрипта, встречается с преградой в виде коллизии, под углом отличающимся от нормали, он пытается "обойти" эту преграду и изменяет траекторию (хорошо видно при медленном движении PIO и большой коллизии преграды). Сам PIO (если не стреляет) наносит повреждения только "живым" объектам.
Самый корректный способ (для Вегаса) который бы тебя устроил я вижу так: 1). Сделать изначальное оружие EmbeddedWeapon'ом, указать в строке какое-нибудь "особенное" название ProjectileNode'а и в модели этого оружия назвать ProjectileNode соответственно. 2). Сделать модель PIO без коллизии (чтобы предотвратить отклонение от нужной траектории), но с ProjectileNode'ом названным как у "изначального"оружия и выдвинутым в перед единиц на 5-10 по NifScope с таким расчетом, чтобы при появлении PIO в мире ProjectileNode оказался по другую сторону стенки коллизии преграды. Примечание: блоки из которых состоит коллизия любых объектов не "монолитные" а "пустотелые" поэтому каждый блок приходится пробивать 2 раза и соответственно каждую преграду придется пробивать (число блоков на линии атаки умноженное на 2) раз. 3). При выстреле блок OnFire прописывает в квестовый скрипт координаты стрелка. Первый прожектиль летит до преграды (не взрывается у ствола и злит непися при попадании) оставляет PIO, ProjectileNode которого оказывается по другую сторону стенки блока коллизии преграды. 4). PIO при появлении никуда не летит, а просто ориентируется в пространстве по координатам стрелка записанным в квестовом скрипте и выстреливает "первый" прожектиль (который уже никого не злит) с использованием "изначального" оружия и исчезает. При следующих попаданиях процесс повторяется "до конечной бесконечности". Каждый последующий PIO является копией первого и выстреливает "первый" прожектиль из "изначального" оружия. Ограничивать процесс принудительно, определенным количеством циклов по моему смысла нет, поскольку "последний" прожектиль "уйдет в бесконечность" не встретив преграды которых "в бесконечности" просто нет, и процесс прекратится сам собой.
Для Фолла3 где нет блока OnFire и нет возможности попасть в непися "первым" прожектилем можно попробовать присвоить ко "второму" (и только ко второму) прожектилю эффект, который будет оценивать DetectionLevel стрелка в момент выстрела и злить цель при превышении определенного порога видмости. Правда есть такой нюанс: DetectionLevel стрелка параметр общий, в смысле стрелка в момент выстрела может видеть абсолютно сторонний персонаж, а применяться он будет относительно цели, так что этот метод требует доработки. "Третий и далее" прожектиль по определению может попасть в непися только после пробития преграды так что к нему эффекта присваивать не нужно.
Изменение репутации для пользователя Veldion
VeldionOffline
Сообщение №115
| Тема: ВОПРОСЫ по моддингу
написано: 22 марта 2014, 05:03
| Отредактировано: Veldion - 22 марта 2014, 05:03
Joopeeter, приветствую. Fallout'ы и интернет у меня географически в разных местах (бывает и такое), так что прости за неоперативность и некоторые неточности в ответах.
Цитата Joopeeter
дополнительный вертикальный прожектиль становился "перманентным"
Ну совсем уж "перманентным" он все таки не становится, а исчезает при респавне локации. Проверь наличие в прожектиле флажка "...Pins Limbs..." (как-то так называется). Это флажок для прожектилей которые должны втыкаться: дротиков, "римских" копий, железнодорожных костылей и т.д. Если он есть - убери.
Прожектиль был сделан из простой пули от простого ружья из третьего Фоллаута, там такой флажок не стоит.
Ну если флажок точно-точно не стоит, тогда на вскидку другой вариант: возможно не исчезает сам первоисточник, в смысле PIO не дисаблится и не делетится, а садит под себя пулю за пулей..... Чего-то третьего здесь как-то не дано...
Вот еще вопрос я как-то раньше его мимо пропустил, а тут ты еще раз упомянул: как ты выпускаешь из PIO прожектили в разных направлениях, в смысле первый дальше по курсу, а второй вниз под ноги цели? Я еще раз пересмотрел твой "Для разбора на запчасти" и не могу понять: PIO ты вниз и обратно при выстрелах не поворачиваешь, разные ProjectileNode'ы не используешь...
И снова здравствуйте граждане. Пара возможно нубских вопросов, но просмотрев несколько обучалок я не нашел вразумительных ответов...
1). Что конкретно делает параметр оружия Sight Usage ?
2). Что конкретно делает параметр оружия Crit Dmg ? увеличивает урон на указанное число единиц (Урон = Damage + CritDmg) увеличивает урон на указанное число процентов (Урон = Damage + Damage x CritDmg / 100) увеличивает урон в указанное число раз (Урон = Damage x CritDmg) нужное подчеркнуть
И ещё вопрос - на что влияют анимации типа pa2haaim/pa2haattack*.kf?
Все анимации с предлогом "PA" предназначены для использования с PowerArmor - силовой броней.
В "обычном" режиме стрельбы прожектили стремятся лететь в игровой прицел. В режиме "оптики" игровой прицел отключается со всеми вытекающими. Отклонения траектории прожектиля при стрельбе в "оптическом" режиме существуют всегда и зависят только от типа используемой анимации и ни от чего более. Отклонения могут быть как вверх/вниз так и в стороны, так у анимации 2HAAttackLoop.kf (штурмовая винтовка) отклонение влево, а у анимации 2HAAttackLeft.kf (стандартная снайперка) отклонение вниз-влево, у анимации которую использует "Самый американский" отклонение вообще переменное и зависит от скорострельности. Так что выход один: долгая и нудная пристрелка прицела вручную.
как сделать чтобы магазин считался заполненным после 6-го патрона, а не после 1-го?
Магазин любого оружия считается заполненным после нажатия кнопки перезарядки, а число заряжаемых патронов и используемая анимация перезарядки здесь вообще ни при чем. Принудительно "прерывая" перезарядку мы прерываем только анимацию, но не саму перезарядку. Можно только методом "научного тыка" поменять скорость самого *.kf файла анимации, чтобы перезарядка более-менее соотносилась с игрой визуально.
Анимации типа CYCLE_LOOP имеет смысл применять только для стрельбы в заведомо автоматическом режиме.
подброс траектории полёта пули, при стрельбе из оружия с анимацией атаки от крупнокалиберной снайперки, компенсируется его "гравитационностью"? ХитрО!
При скорости прожектиля 10000 (или типа более) и относительно небольших дистанциях стрельбы в игре, что-либо "компенсировать" может разве что гравитация более 10. Так что не льсти разрабам - они гораздо прямолобее, чем иногда кажется. Зачастую разработчики "не ведали, что творили" (другие разработчики) отсюда столько косяков. Просто многие моменты такие как например лампочка в прожектиле так и не довели до ума, а удалить тоже поленились...
Ну а теперь про пристрелку:
Способ 1). Открываем в NifScope модель прицела. Добавляем новый NiNode и как-нибудь его называем. Переносим на него без каких-либо изменений все содержимое (планки с "крестиками" и внешние рамки). Элементы прицела не должны быть смещены друг относительно друга это может привести к "невидимости" элементов в игре. Поэтому мы будем двигать именно наш новый спец-Node с находящимися на нем элементами. Двигать "базовый" NiBSFadeNode бессмысленно - в игре изменений видно не будет. Присваиваем (на время пристрелки) нашей винтовке прожектиль со скоростью примерно 2500-5000, с ImpactForce 25 или более, без гравитации и обязательно с трассером (его должно быть хорошо видно). Делаем несколько выстрелов через прицел из положения сидя (чтобы устранить болтанку ствола) и смотрим в какую сторону отклоняется прожектиль. Затем соответственно сдвигаем наш Node в модели прицела в нужную сторону. Для более точной настройки стреляем по мелким целям типа коробки шариков для мелкашки с максимальных дистанций соответственно корректируя координаты нашего спец-Node в модели прицела.
Способ 2). Открываем в NifScope нужный файл анимации. Находим блок NiTextKeyExtraData (как-то так) вторая снизу строчка. В нем находим строчку со значением "Hit" и уменьшаем прописанное в нем время, приближая его ко времени прописанному в строке "Start" того же блока NiTextKeyExtraData для того чтобы выстрел произошел раньше чем оружие дернется. При этом строчку со значением "Hit" скорее всего придется поменять местами с другими строчками - значения времени в строчках должны идти сверху вниз по нарастающей.