Цитата
Зачем? Нас интересует только кастер левел, а он будет подниматься независимо от пакаджа. Подойдет любой из стандартных, на крайняк - отдельный пустой.
Например, непись может взять тот же спелл пенетрейшн по стандартному пакаджу, так что как минимум отдельный пустой пакадж нужен.
Цитата
В чем принципиальное отличие ExecuteScript() от кастования спелла через экшн в этом случае?
В том, что запущенный через ExecuteScript на другом объекте - это уже не скрипт заклинания, поскольку параметры живут в соответствующих полях структуры кастующего существа. Со всеми вытекающими последствиями вроде идентификатора заклинания -1 и невалидными результатами использования остальных функций, работающих непосредственно с параметрами заклинания - GetCasterLevel(), GetSpellSaveDC(), GetMetamagicFeat(), ResistSpell(), etc. И да, метамагию, скорее всего, перебросить не выйдет никак, даже через ActionCastSpellAt*().
Цитата
Можно будет проверить после вызова заклинания и перенести, куда нужно.
Это был придуманный с ходу пример. Скорее всего, есть и другие эффекты, которые в этом случае отработают криво. И изрядной частью спеллхука станет огромный свич по идентификатору заклинания, который нарушает саму концепцию архитектуры системы спеллхук-заклинание

Цитата
Подводные камни есть, конечно, их все надо будет прорабатывать на этапе разработки. Я говорю к тому, что использованию спеллхука нет принципиальных препятствий и если проблему предстоит решать с нуля, то лучше все-таки прикинуть и посмотреть, что будет в конкретном случае целесообразнее - делать чисто скриптовое решение или вносить изменения в файл каждого заклинания, не забывая также обновлять любой новый.
Я пытаюсь сказать, что переписывание функции GetCasterLevel(), особенно с учётом того, что замена функции в скриптах заклинаний хорошо автоматизируется - куда меньшее зло, чем затыкание кучи дыр, образованных перекидыванием скрипта заклинания на другой объект.