![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#571
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата А там какие тонкости? Если в скрипте мгновенного действия, скажем, для поднятия кастерлевела ПМу по 3.5 достаточно заменить функцию на такую:Neverwinter Script int FR_GetCasterLevel(object oCreature) { int nPMLevel = GetLevelByClass(CLASS_TYPE_PALE_MASTER, oCreature); int nCL = GetCasterLevel(oCreature); int nCasterClass = GetLastSpellCastClass(); if( !GetIsObjectValid(GetSpellCastItem()) && nPMLevel > 1 && (nCasterClass == CLASS_TYPE_WIZARD || nCasterClass == CLASS_TYPE_SORCERER || nCasterClass == CLASS_TYPE_BARD) ) nCL += nPMLevel - 1; return nCL; } , то в скриптах на АОЕ этот код будет работать правильно только до тех пор, пока валиден объект-кастер, создавший эту АОЕ. Решается установкой на АОЕ локалки при создании. Цитата Хитдайс тоже берется, просто не везде. Я же не с потолка про него вспомнил, а открыв наугад спелл. Хитдайс кастера? Возможно, я с ходу не могу назвать ни одного дефолтного заклинания, в котором он используется. (IMG:style_emoticons/kolobok_light/sad.gif) Впрочем, не суть, у меня в кастомных заклинаниях кое-где и другие параметры кастера используются, вроде элайнмента.Цитата А все эти параметры также можно в спеллхуке проверить и добавить заглушке через ItemProperty, какие проблемы? Хм, как именно? И как в таком случае предлагается вообще скрипт перехватывать? Если запускать его от имени другого объекта через ExecuteScript(), функции, которые определяют параметры заклинания, вернут всякую чушь. Если через ActionCastSpellAt*(), подставной непись должен быть как минимум в той же локе, что и кастер, и предвижу проблему с летящими из ниоткуда фаерболами.
|
![]()
Сообщение
#572
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата Хм, как именно? И как в таком случае предлагается вообще скрипт перехватывать? 1)Игрок кастует спелл, спеллхук перехватывает. 2)Скрипт делает проверку кастер-левела, ДЦ, фитов и всего такого прочего. 3)Создаем невидимую НПС-заглушку из шаблона по координатам того же PC со шкуркой, в которую записываем проверенные данные через итем-проперти. 4)В случае, если у игрока бонус к кастер левелу, добавляем левелов заглушке. 5)Вызываем спелл через ActionCastSpellAt* от имени созданной заглушки (с ExecuteScript() я не смог сходу придумать, как получать имя скрипта спелла) 6)Убиваем заглушку. |
![]()
Сообщение
#573
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата 2)Скрипт делает проверку кастер-левела, ДЦ, фитов и всего такого прочего. Допустим, добавить на шкурку фиты можно, если их предварительно прописать в iprp_feats.2da. А как добавлять уровней подставному неписю?3)Создаем невидимую НПС-заглушку из шаблона по координатам того же PC со шкуркой, в которую записываем проверенные данные через итем-проперти.4)В случае, если у игрока бонус к кастер левелу, добавляем левелов заглушке. В любом случае, это а) куча неписей разного уровня и разных классов в палитре; б) создание/удаление объекта-непися при касте каждого спелла игроком, что плохо с точки зрения производительности. Всякие projectile-заклинания вроде фаерболов будут визуально летать от кастера дважды. Соответственно, в 2 раза увеличится время достижения цели. Цитата с ExecuteScript() я не смог сходу придумать, как получать имя скрипта спелла Neverwinter Script Get2DAString("spells", "impactscript", GetSpellId())
Сообщение отредактировал Ilerien - Aug 28 2011, 22:28 |
![]()
Сообщение
#574
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата А как добавлять уровней подставному неписю? Хенчам в XP2 же как-то добавляли. Цитата В любом случае, это а) куча неписей разного уровня и разных классов в палитре; Это еще почему? Мы создаем заглушку по шаблону, а фиты и левелы ей даем динамически скриптом. В палитре будет один-единственный объект (крич). Цитата б) создание/удаление объекта-непися при касте каждого спелла игроком, что плохо с точки зрения производительности. Это будет зависеть от того, как способ будет действовать на практике. Производительность дело такое, вполне может быть так, что никакого заметного снижения не будет. За Get2DAString спасибо. Цитата Всякие projectile-заклинания вроде фаерболов будут визуально летать от кастера дважды. Тогда ExecuteScript() от имени заглушки. Сообщение отредактировал Talarasha - Aug 28 2011, 22:32 |
![]()
Сообщение
#575
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Хенчам в XP2 же как-то добавляли. Там есть функция LevelUpHenchman, которая не обладает достаточной гибкостью - непись апается согласно прописанному пакаджу, а это означает, что придётся ещё и свой пакадж для каждого кастерского класса делать. И опять же - производительность, кроме создания/удаления имеем энное число левелапов.Цитата Тогда ExecuteScript() от имени заглушки. И возвращающие параметры заклинания функции скорее всего вернут чушь.Использование другого объекта в качестве кастера порождает кучу подводных камней. Например, заклинания Dominate Person/Monster/Animal внезапно будут добавлять контролируемое существо во фракцию подставного объекта, всякие вызывающие существ заклинания - тоже. Как себя поведет ResistSpell() - непонятно. Я уже не говорю о том, что придётся переписывать функцию, которая определяет, действует ли заклинание на конкретный объект (всякие там no-pvp локации). |
![]()
Сообщение
#576
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата Там есть функция LevelUpHenchman, которая не обладает достаточной гибкостью - непись апается согласно прописанному пакаджу, а это означает, что придётся ещё и свой пакадж для каждого кастерского класса делать. Зачем? Нас интересует только кастер левел, а он будет подниматься независимо от пакаджа. Подойдет любой из стандартных, на крайняк - отдельный пустой. Цитата И возвращающие параметры заклинания функции скорее всего вернут чушь. В чем принципиальное отличие ExecuteScript() от кастования спелла через экшн в этом случае? Обе функции вызывают скрипт от имени того объекта, который им указан. Скрипт, вызванный через ES и будет использовать в качестве OBJECT_SELF то, что ему передадут - заглушку, в данном случае, в которую все параметры мы записали. Возвращающие параметры функции вернут то, что надо. Цитата Например, заклинания Dominate Person/Monster/Animal внезапно будут добавлять контролируемое существо во фракцию подставного объекта, всякие вызывающие существ заклинания - тоже. Можно будет проверить после вызова заклинания и перенести, куда нужно. Подводные камни есть, конечно, их все надо будет прорабатывать на этапе разработки. Я говорю к тому, что использованию спеллхука нет принципиальных препятствий и если проблему предстоит решать с нуля, то лучше все-таки прикинуть и посмотреть, что будет в конкретном случае целесообразнее - делать чисто скриптовое решение или вносить изменения в файл каждого заклинания, не забывая также обновлять любой новый. Посмотреть, проверить, как это все будет работать, будут ли потери производительности в сингле/на шарде, какие. И решить. Сообщение отредактировал Talarasha - Aug 28 2011, 23:07 |
![]()
Сообщение
#577
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Анимация заклинания происходит до взаимодействия со спелхуком и вообще скриптом спелла.
Любое изменение уже смотрится коряво, даже при использовании спелхука для компонентной магии, но люди идут на это, как на малое зло) |
![]()
Сообщение
#578
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата Анимация заклинания происходит до взаимодействия со спелхуком и вообще скриптом спелла. Это к чему? Спеллхук и не будет влиять на анимацию, если он вызывается через ExecuteScript(). Если строка была по поводу слов Ilerien'а, то он имел ввиду повторный вызов заклинания через экшн, тогда анимация действительно проигрывалась бы дважды. |
![]()
Сообщение
#579
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Цитата 1)Игрок кастует спелл, спеллхук перехватывает. Это все произойдет после анимации заклинания (огненный шар, например, сначала пролетит в точку куда направлен, с другими так же) |
![]()
Сообщение
#580
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Хм. И что?
|
![]()
Сообщение
#581
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Кривожопновыглядит, особенно если после этого будет еще одна анимация со стороны "НПС заглушки".
Через NWNX надо писать свой плагин на С иначе только через костыль со скриптами Сообщение отредактировал Laajin - Aug 28 2011, 23:35 |
![]()
Сообщение
#582
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
В чем кривожопность-то? Со стороны НПС заглушки еще одной анимации не будет.
|
![]()
Сообщение
#583
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Зачем? Нас интересует только кастер левел, а он будет подниматься независимо от пакаджа. Подойдет любой из стандартных, на крайняк - отдельный пустой. Например, непись может взять тот же спелл пенетрейшн по стандартному пакаджу, так что как минимум отдельный пустой пакадж нужен.Цитата В чем принципиальное отличие ExecuteScript() от кастования спелла через экшн в этом случае? В том, что запущенный через ExecuteScript на другом объекте - это уже не скрипт заклинания, поскольку параметры живут в соответствующих полях структуры кастующего существа. Со всеми вытекающими последствиями вроде идентификатора заклинания -1 и невалидными результатами использования остальных функций, работающих непосредственно с параметрами заклинания - GetCasterLevel(), GetSpellSaveDC(), GetMetamagicFeat(), ResistSpell(), etc. И да, метамагию, скорее всего, перебросить не выйдет никак, даже через ActionCastSpellAt*().Цитата Можно будет проверить после вызова заклинания и перенести, куда нужно. Это был придуманный с ходу пример. Скорее всего, есть и другие эффекты, которые в этом случае отработают криво. И изрядной частью спеллхука станет огромный свич по идентификатору заклинания, который нарушает саму концепцию архитектуры системы спеллхук-заклинание (IMG:style_emoticons/kolobok_light/smile.gif) Цитата Подводные камни есть, конечно, их все надо будет прорабатывать на этапе разработки. Я говорю к тому, что использованию спеллхука нет принципиальных препятствий и если проблему предстоит решать с нуля, то лучше все-таки прикинуть и посмотреть, что будет в конкретном случае целесообразнее - делать чисто скриптовое решение или вносить изменения в файл каждого заклинания, не забывая также обновлять любой новый. Я пытаюсь сказать, что переписывание функции GetCasterLevel(), особенно с учётом того, что замена функции в скриптах заклинаний хорошо автоматизируется - куда меньшее зло, чем затыкание кучи дыр, образованных перекидыванием скрипта заклинания на другой объект.
Сообщение отредактировал Ilerien - Aug 28 2011, 23:47 |
![]()
Сообщение
#584
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Задумка понятна: ты хочешь через левого НПС просто запускать скрипт, уже после анимации.
Куча всяких есть НО: -абилки требуется разные для разных классов -всякие фишки типа фитов спеллпенетратион -и еще куча всякой фигни -ты задолбишься делать НПС чаров заглушек на все случаи (кажется Ilerien уже все это объяснил =_=) Кроме того предвижу тормоза, во время боя и интересную реакцию мобов на НПС заглушку. Легче как мне кажется скрипты отредактировать, их всего там около 50...мне один раз пришлось переименовывать 1200 файлов NWNX вот, кстати, не знаю есть ли там перехват каста спелла (эвент), но через это было бы реально много чего сделать. Сообщение отредактировал Laajin - Aug 28 2011, 23:51 |
![]()
Сообщение
#585
|
|
Level 6 ![]() ![]() Класс: Маг Характер: Lawful Evil Раса: Нежить ![]() |
Цитата ты задолбишься делать НПС чаров заглушек на все случаи (кажется Ilerien уже все это объяснил =_=) Кажется, ты невнимательно прочитал мои сообщения. Я уже говорил, что шаблон в палитре требуется один единственный. В предыдущих постах написано, как именно это реализовывается вместе со всеми бонусными фитами. Цитата Кроме того представь предвижу тормоза, во время боя и интересную реакцию мобов на НПС заглушку. Чтобы говорить о тормозах - надо посмотреть работу на практике. Теоретически даже запись локалки может тормоза вызвать. На практике, однако ж, так не происходит. Цитата Легче как мне кажется скрипты отредактировать, их всего там около 50... Хм. Откуда цифра? Так-то по скрипту на спелл, а их несколько сотен. Ilerien Цитата Это был придуманный с ходу пример. И придуманное с ходу решение. Наверняка и на другие найдется. Цитата В том, что запущенный через ExecuteScript на другом объекте - это уже не скрипт заклинания, поскольку параметры живут в соответствующих полях структуры кастующего существа. Понял, о чем ты. ActionCastSpell + ClearAllActions на заглушке должны с этим разобраться. Цитата Я пытаюсь сказать, что переписывание функции GetCasterLevel(), особенно с учётом того, что замена функции в скриптах заклинаний хорошо автоматизируется - куда меньшее зло, чем затыкание кучи дыр, образованных перекидыванием скрипта заклинания на другой объект. Может быть - я, когда говорил про спеллхук, не учитывал автоматическую прогонку файлов. Меня-то конкретно в таком способе неустраивает негибкость - ворох скриптов, которые надо таскать с собой, необходимость подправлять любые добавляемые/нестандартные скрипты, несовместимость с авторскими реализациями заклинаний в пользовательских модулях и так далее. От приоритетов зависит. Сообщение отредактировал Talarasha - Aug 29 2011, 00:01 |
![]()
Сообщение
#586
|
|
Level 3 ![]() Класс: Монах Характер: Lawful Neutral Раса: Человек ![]() |
ого ребят, ну вы и развели (IMG:style_emoticons/kolobok_light/rolleyes.gif)
чувствую, щас опять всё работу за меня Talarasha сделает (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#587
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Понял, о чем ты. ActionCastSpell + ClearAllActions на заглушке должны с этим разобраться. Не уверен - предполагаю, что идентификатор заклинания задается перед запуском скрипта после фазы cast. Но точно не знаю, если сработает - то решение элегантно (IMG:style_emoticons/kolobok_light/smile.gif) Но проблемы с метамагией все равно не решает.Цитата Меня-то конкретно в таком способе неустраивает негибкость - ворох скриптов, которые надо таскать с собой, необходимость подправлять любые добавляемые/нестандартные скрипты, несовместимость с авторскими реализациями заклинаний в пользовательских модулях и так далее. От приоритетов зависит. Я просто опираюсь на собственный опыт. Одного прогона автозаменялки хватило, чтобы больше с этим не париться. Новое заклинание? Сразу пишем вместо дефолтной функции кастомную. Если нужно в новом существующем скрипте заменить - опять же никаких проблем с правкой, 1 файл - тут и говорить не о чем.
Сообщение отредактировал Ilerien - Aug 29 2011, 01:32 |
![]()
Сообщение
#588
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Lawful Evil Раса: Человек ![]() |
Цитата Но проблемы с метамагией все равно не решает. Малооптимальное решение, но сделать ускоренную, тихую и бездвижную, мне кажется, можно: через 3 заглушки при помощи эпической "автоматической" метамагии (если мне не изменяет память, то неписям можно ставить фиты, требованиям которых они не удовлетворяют, соотв. с кастер левелом проблемы быть не должно) и switch на выбор заглушки. Конечно не решает проблемы с максимизацией, умощнением и удлинением, но хотя бы часть проблем решает. Подходит только для модулей, не рассчитанных на эпик, т.к. в случае с эпиком понадобятся еще 16 вариантов заглушки (4 варианта сочетаний автоматической и 3 варианта прочей метамагии). Не прокатит в случае, если автоматическая имеет свои значения (ускоренная - 8 (0х08), автоускоренная1 - 64 (0х30)), хотя вроде бы это не так. Сообщение отредактировал wirTUS - Aug 29 2011, 02:57 |
![]()
Сообщение
#589
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
Постоянно пересоздавать объекты - и сервер у вас утечёт далеко и надолго, будете рестартить раз в 4-6 часов (IMG:style_emoticons/kolobok_light/smile.gif) Особенно пересоздавать раз в 6 секунд на каждого кастера, а учитывая, что 3/4 онлайна всякие маги и клеры с хастом, то будет создаваться омг сколько неписей раз в 3 секунды - так думаю можно и сервер валить для откатов. Плюс есть ещё и мобы-кастеры, их новые правила тоже не должны стороной обходить.
Вариант с переписыванием всех заклинаний выглядит самым оптимальным. Я тоже так делал. Да, это убого в принципе, но это единственный рабочий на практике вариант. Ваш спеллхук работает так же - в каждом скрипте заботливо добавлен инклуд и функция проверки разной фигни. |
![]()
Сообщение
#590
|
|
Level 5 ![]() ![]() Класс: Пьяный Мастер Характер: Chaotic Good Раса: Человек ![]() |
Щас я буду К.О:
надо просто попробовать вот и все, придумать можно кучу всего, а при проверке движек покажет фигу. |
![]()
Сообщение
#591
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
NWNX вот, кстати, не знаю есть ли там перехват каста спелла (эвент), но через это было бы реально много чего сделать. Есть, конечно. Отрабатывает в момент нажатия на кнопку спелла, т.е. до действия, анимации и отработки impact-скрипта.По поводу производительности denis0k прав. В условиях шарда создавать существ при каждом спеллкасте - это безумие. |
![]()
Сообщение
#592
|
|
Level 2 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Можно ли сделать специальное свойство предмета (которое вызывает функцию OnItemActivated) доступным предметам, для которого оно заблокировано?
Не могу никак подружиться с 2da таблицами. Открыл ItemPropDef.2da, даже тупо не нашел там такой пункт -_- |
![]()
Сообщение
#593
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Можно, если сделать доступным свойство Cast Spell в itemprops.2da для определённой категории итемов.
|
![]()
Сообщение
#594
|
|
Level 2 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
Доброго времени суток. Буду благодарен за любую помощь.
Меня интересуют следующие вопросы: 1. Можно ли отключить автоатаку (которая работает при клике на врага), т.е. чтобы атаковать можно было только скилами/спелами. Если да то как. 2. Подскажите где хранятся и как изменить штрафы к ношению двух оружий. 3. Каким образом можно реализовать ношение в одной руке стрелкового в другой мили оружия (анимация этого бреда моя проблемма, вопрос в том как сделать чтобы оно одевалось вместе). Рабочие примеры очень сильно помогут но буду благодарен и за любую другую информацию по этим вопросам. Если есть темы где эти проблеммы описаны прошу дать ссылки ибо я не смог нагуглить ответов (^_^''). |
![]()
Сообщение
#595
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Меня интересуют следующие вопросы: 1. Можно через NWNX Events, событие атаки.1. Можно ли отключить автоатаку (которая работает при клике на врага), т.е. чтобы атаковать можно было только скилами/спелами. Если да то как. 2. Подскажите где хранятся и как изменить штрафы к ношению двух оружий. 3. Каким образом можно реализовать ношение в одной руке стрелкового в другой мили оружия (анимация этого бреда моя проблемма, вопрос в том как сделать чтобы оно одевалось вместе). 2. Зашиты в коде движка. Если очень хочется поменять - можно попробовать изменить С-шный код одного файла из плагина NWNX Weapons, который отвечает за хук бонуса к атаке. 3. Не уверен, что это вообще можно сделать за разумное время. Сообщение отредактировал Ilerien - May 4 2012, 18:41 |
![]() ![]() |
Текстовая версия | Сейчас: 27th July 2025 - 01:29 |