Haxop Опубликовано 20 февраля, 2019 Опубликовано 20 февраля, 2019 Ребят, кто сталкивался с подобной проблемой: создал пару скриптов, которые "раздувают" мое сохранение, вследствие чего это сказывается как на производительности, так и на других скриптах. В скриптах есть Event OnUpdate() и RegisterForSingleUpdate, но как бы грамотно не старался их написать, опираясь на схожие проблемы, всё равно создается очень много ивентов. Вот пример скрипта: Хотел сделать, чтобы НПС-Вервольфам добавлялись левельные повышения здоровья и урона, как и игроку Event OnEffectStart(Actor akTarget, Actor akCaster) akTarget.AddSpell(WerewolfImmunity) RegisterForSingleUpdate(1) Endevent Event OnUpdate() RegisterForSingleUpdate(1) If GetTargetActor().Getlevel() < 10 && GetTargetActor().HasSpell(AbWerwolf) && !GetTargetActor().HasSpell(WerewolfI) GetTargetActor().AddSpell(WerewolfI) endif If GetTargetActor().Getlevel() >= 10 && GetTargetActor().Getlevel() < 20 && GetTargetActor().HasSpell(AbWerwolf) && !GetTargetActor().HasSpell(WerewolfII) GetTargetActor().AddSpell(WerewolfII) endif If GetTargetActor().Getlevel() >= 20 && GetTargetActor().Getlevel() < 30 && GetTargetActor().HasSpell(AbWerwolf) && !GetTargetActor().HasSpell(WerewolfIII) GetTargetActor().AddSpell(WerewolfIII) endif If GetTargetActor().Getlevel() >= 30 && GetTargetActor().Getlevel() < 40 && GetTargetActor().HasSpell(AbWerwolf) && !GetTargetActor().HasSpell(WerewolfIV) GetTargetActor().AddSpell(WerewolfIV) endif If GetTargetActor().Getlevel() >= 40 && GetTargetActor().HasSpell(AbWerwolf) && !GetTargetActor().HasSpell(WerewolfV) GetTargetActor().AddSpell(WerewolfV) endif if !GetTargetActor().HasSpell(AbWerwolf) && GetTargetActor().HasSpell(WerewolfI) || WerewolfII || WerewolfIII || WerewolfIV || WerewolfV GetTargetActor().RemoveSpell(WerewolfI) GetTargetActor().RemoveSpell(WerewolfII) GetTargetActor().RemoveSpell(WerewolfIII) GetTargetActor().RemoveSpell(WerewolfIV) GetTargetActor().RemoveSpell(WerewolfV) endif Endevent
Azazellz Опубликовано 20 февраля, 2019 Опубликовано 20 февраля, 2019 (изменено) Ерунду какую-то сделал, как по мне. Есть же вполне стабильный способ добавлять абилки\скрипты неписям и без этих вот OnUpdate ивентов - через невидимый спелл-плащ. В инструкции, правда, немного лишнего есть, но общий принцип должен быть понятен. Создаешь спелл-плащ на игроке с большим рейнджем, к этому плащу создаешь спелл-эффект. В спелл-эффекте один единственный скрипт с addspell в нем. В этот addspell пихаешь свой спелл-абилити с повышением здоровья. Тонкость - спелл-эффект должен иметь галки на Ignore Resistance и Disallow Absorb\Reflect (иначе будут визуальные баги на некоторых НПС, которым прописано поглощение заклинаний), а эффект этого спелла должен иметь галку No Hit Event и не иметь галки Hostile (иначе НПС во время кулачных драк на тебя нападать станут). Раздается это все через кондишны в СК - в спелл-эффект ставишь проверку на смерть, проверка на расу вервольфа и проверку на то, имеется уже спелл-абилити на этом неписе, или нет. В спелл-абилити для вервольфов накидываешь все нужные эффекты, разбивая их кондишнами на нужные тебе уровни (типа уровень 0-10 эффект +20 здоровья, уровень 11-20 эффект на +40 здоровья, и т.д.). Итого - один простейший скрипт,который будет завершаться сразу после запуска, и 3 спелла с эффектами (плащ, эффект, статы вервольфов). Изменено 20 февраля, 2019 пользователем Azazellz
Haxop Опубликовано 20 февраля, 2019 Автор Опубликовано 20 февраля, 2019 Но опять-таки, центром плаща является игрок и пока он не контактирует с нужным неписем, нужного эффекта не произойдет. Уже работал с таким плащом, но там я не ставил чрезмерно большую территорию(в целую локацию). Есть какие-то ещё способы? Через Alias поставить так, чтобы любой перс, с абилкой вервольфа автоматом зачислялся в данную группу? Вопрос в том, в чем причина "раздувания"? Что я сделал не так, не считая того, что скрипт можно было уменьшить-урезать-написать красивее?
Azazellz Опубликовано 20 февраля, 2019 Опубликовано 20 февраля, 2019 20.02.2019 11:04:43, Haxop сказал(-а): Но опять-таки, центром плаща является игрок и пока он не контактирует с нужным неписем, нужного эффекта не произойдет. А иначе никак. Если ты не хочешь править что-то в СК и делать новый мод - это один из немногих доступных вариантов. И все остальные - тоже через "контакт" с неписями будут работать. Например, можно вместо плаща сделать квест, который будет перезапускаться раз в n секунд и искать ближайшего вервольфа в ячейке, добавляя ему этот спелл. 20.02.2019 11:04:43, Haxop сказал(-а): но там я не ставил чрезмерно большую территорию(в целую локацию) Ну вот и поставь. 20.02.2019 11:04:43, Haxop сказал(-а):Вопрос в том, в чем причина "раздувания"? Что я сделал не так, не считая того, что скрипт можно было уменьшить-урезать-написать красивее? Вопрос в том, как ты этот скрипт раздаешь. Если плащом и без кондишнов в СК - то у тебя на каждом НПСе будет висеть этот вот скрипт с бесконечным циклом OnUpdate ивентов. Потому что ты вызываешь апдейт один раз, в начале. И потом цикл продолжается раз за разом, так как ты вызываешь апдейт-ивент еще раз, уже в самом ивенте. А персонажи, которые имеют "работающие" скрипты, из памяти игры не выгружаются, и продолжают обрабатываться.
Haxop Опубликовано 20 февраля, 2019 Автор Опубликовано 20 февраля, 2019 У меня этот скрипт сейчас висит в эффектах в способности "Звериная кровь", там стоит кондишн, на проверку, что цель не игрок, но при этом сейв раздувается только в том случае, если сам игрок вервольф(какой-то парадокс). Просто пытался решить проблему командой Unregisterforupdate, но во-первых: она не помогает, а во-вторых: изюминка скрипта была в том, чтобы с изменением уровня вервольф-нпс становился сильнее, а для этого нужно постоянно мониторить его. А если ставить Alias, то как форсированно добавлять его(непися) в квест и можно ли в нем(квесте) делать какую-то проверку на уровень нпс?
Azazellz Опубликовано 20 февраля, 2019 Опубликовано 20 февраля, 2019 Т.е. ты уже вмешался в способность? Ну и нафига тогда тебе вообще скрипты? Кодируй всё кондишнами в СК. Если спелл активен, игра где-то раз в секунду перепроверяет кондишны на его эффектах. Т.е. у тебя есть спелл, в нем список эффектов - "эффект 1 +20 хп" - в нем кондишн уровня от 10 до 20. "эффект 2 +40 хп" - в нем кондишн уровня от 21 до 30. Всё, будет работать автоматически - как только нпс повысит уровень, один эффект отключится, включится другой.
Haxop Опубликовано 20 февраля, 2019 Автор Опубликовано 20 февраля, 2019 Фишка в том, что я не использую просто эффект повышения хп, а целый спел из оригинального ская(crWerewolf02, 04), то есть скрипт нужен, чтобы всё это дело вручную не прописывать. К тому же самой "звериной кровью", как не странно персонажи-вервольфы не обладают технически(даже соратники).
Azazellz Опубликовано 20 февраля, 2019 Опубликовано 20 февраля, 2019 Значит сделай кастомный спелл с теми же эффектами, разбей эффекты кондишнами по уровням, добавь кондишны "не для игрока" и пропиши его напрямую в расу вервольфов (и вереберов). То, что тыделаешь с onUpdate ивентами - это лютая ерунда и вообще не нужно.
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти