Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с 2da таблицами
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset > Custom Content
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
RedBird
Не дошел до последней страницы, однако, увлекательно, задумал переписать возможности стандартных классов под себя, в частности скрестить монка с AA, так сказать, под себя, а то нехочется создавать монка\визарда\AA, имхо, извращение wacko.gif
Выдернул я cls_feat_monk.2da и вписал туда фиты арчера:

Код
28 FEAT_PRESTIGE_ENCHANT_ARROW_1 445       3    -1             0      
29 FEAT_PRESTIGE_ENCHANT_ARROW_2 446       3    2              0      
30 FEAT_PRESTIGE_ENCHANT_ARROW_3 447       3    7              0      
31 FEAT_PRESTIGE_ENCHANT_ARROW_4 448       3    12             0      
32 FEAT_PRESTIGE_ENCHANT_ARROW_5 449       3    19             0      
33 FEAT_PRESTIGE_EMBUE_ARROW     450       3    7              0

Запихнул файлик в оверайд, воуля, никаких изменений в игре wacko.gif
В чем может быть проблема? В этом случае нужно убирать нулевое значение в ALLCLASSESCANUSE что бы фиты были доступны всем?
И еще вопрос. EMBUE ARROW, ну тобиш, пропитать стрелу, после появления у монка появится где в радиальном меню? Там появится иконка арчера или нужно будет править сам фит (тк фит чисто арчеровский)?
Ilerien
Правильнее будет так:
Код
28 FEAT_PRESTIGE_ENCHANT_ARROW_1 445       3    1              0      
29 FEAT_PRESTIGE_ENCHANT_ARROW_2 446       3    2              0      
30 FEAT_PRESTIGE_ENCHANT_ARROW_3 447       3    7              0      
31 FEAT_PRESTIGE_ENCHANT_ARROW_4 448       3    12             0      
32 FEAT_PRESTIGE_ENCHANT_ARROW_5 449       3    19             0      
33 FEAT_PRESTIGE_EMBUE_ARROW     450       3    7              1
В cls_feat_*.2da колонки обозначают следующее:
FeatIndex - номер фита (из feat.2da);
List - тип фита (0 - можно взять только на общих фитах (каждые 3 уровня), 1 - можно взять на любых фитах, 2 - можно взять только на бонусных (как метамагия у мага или избранный враг у рейнджера), 3 - выдаётся нахаляву);
GrantedOnLevel - уровень, на котором выдаётся фит (только для типа 3, для остальных это значение игнорируется);
OnMenu - является ли фит активируемым (1 - активируемый, 0 - пассивный), если выставлено 1 - фит появляется в радиальном меню класса (в примере выше в радиальном меню для абилок монка).
Цитата
Запихнул файлик в оверайд, воуля, никаких изменений в игре
Нужно как минимум убрать и взять заново уровни монка у конкретного чара.
RedBird
Благодарю за ответ, и правда, я немного напутал с цифрами. Все работает как надо smile.gif (пишу с телефона - прошу прошение за возможное неудобство при чтении)

правда я столкнулся с небольшой проблемой. Решил попробовать дать монаху возможность вызывать кого нибудь. Что бы долго не думать взял и приписал в фиты вызов тени от танцора тени. Однако сама тень исчезает сразу после вызова.

Стал смотреть что приписанно в spells.2da по этому поводу - там заметил ссылку на скрипт x0_s2_shadsum. Изменил там номер класса, который учитывается при повышении уровня тени и бросил скрипт в оверайд. Толку 0. Может кто знает что тут нужно сделать?
Ilerien
Цитата
Стал смотреть что приписанно в spells.2da по этому поводу - там заметил ссылку на скрипт x0_s2_shadsum. Изменил там номер класса, который учитывается при повышении уровня тени и бросил скрипт в оверайд. Толку 0. Может кто знает что тут нужно сделать?
Да, бросать в оверрайд надо не исходник (*.nss), а скомпилённый скрипт (*.ncs).
RedBird
Скачал для этих целей nwnnsscomp.Exe - названия оригинального не знаю, в архиве кроме экзешника, увы, ничего не было. Как использовать не разобрался - после запуска программы черное окно пропадает мгновенно.

И еще вопрос. Можно ли сделать фит основаный на спеле, такой, что бы персонаж сам по себе получал вампирскую регенерацию, а не через оружие? Или это скрипты?
Ilerien
Цитата
Скачал для этих целей nwnnsscomp.Exe - названия оригинального не знаю, в архиве кроме экзешника, увы, ничего не было. Как использовать не разобрался - после запуска программы черное окно пропадает мгновенно.
Там используются определённые аргументы командной строки, какие - точно не скажу, что-то вроде -c file.nss file.ncs. Хелп там встроен в экзешник, достаточно запустить в терминале nwnnsscomp.exe без аргументов. Есть вполне стабильный standalone компилятор от биоварей, /utils/clcompile.exe. Если не нравится интерфейс командной строки, можно скомпилить в своём модуле в тулсете и после этого (пока модуль открыт) взять нужный файл из директории /modules/temp0/.
Цитата
И еще вопрос. Можно ли сделать фит основаный на спеле, такой, что бы персонаж сам по себе получал вампирскую регенерацию, а не через оружие? Или это скрипты?
Можно. Скрипты. Более того, кастомизация (или создание нового) спелла (вне зависимости от того, спелл это, активируемый фит, абилка моба или итема) подразумевает скриптинг. Более того, вампирская регенерация как эффект бывает (насколько я понимаю, итемпроперты с точки зрения движка - это интерфейсы для эффектов, поэтому для каждого итемпроперта существует свой эффект), но стандартными скриптовыми конструкторами эффектов не создаётся -> нужен NWNX, поэтому игра не стоит свеч smile.gif
RedBird
Спасибо, со скриптами разобрался - отредактировал скрипт в новом модуле и сохранил с компиляцией, потом вытащил из соответствующей директории с помощью нвнэксплолера smile.gif

насчет регенерации очень жаль. И правда, это не стоит такой мороки. Спасибо большое за помощь smile.gif
seven
Вопрос такой. Нужно было переписать описания скиллов. Дабы не марать диалог.тлк, сделал кастомный. Написал нужную инфо, заменил в скилл.2да ссылки на нужные (начиная с 16777216), подключил в модуле. Итог. В игре все отображается как положено (т.е. когда заходим в описания чара и смотрим скиллы). При заходе на сервер и при первом лвлапе(дальше не проверял еще) вместо инфо пишет всякую хню (монах, паладин, воин и т.д.), т.е. как я понял, считывается инфо не с 16777216+ строки, как нужно, а с 2,3 и т.д.

Возможно ли как-то это исправить?

Заранее спасибо за помощь rolleyes.gif
rdx
Цитата(seven @ Jul 1 2010, 21:25) *
При заходе на сервер и при первом лвлапе(дальше не проверял еще) вместо инфо пишет всякую хню (монах, паладин, воин и т.д.), т.е. как я понял, считывается инфо не с 16777216+ строки, как нужно, а с 2,3 и т.д.

к модулю на сервере тлк разумеется присоединен?
seven
Цитата(rdx @ Jul 2 2010, 00:51) *
к модулю на сервере тлк разумеется присоединен?


Разумеется. Писал же. "подключил в модуле". Насколько я понял нвн хаки и тлк грузит после захода, поэтому и вылазит такая байда, что при заходе и создании чара выдает не нужную инфо, а уже при загруженном модуле все норм. Как это обойти можно? Стандартный диалог.тлк править не хочется, чтобы игроку не пришлось перетыкивать потом его, если захочет на другом серве поиграть. А если добавить нужные строки в стандартный диалог.тлк и давать его игроку вместе с хаками будет результат?
rdx
Цитата(seven @ Jul 2 2010, 08:52) *
А если добавить нужные строки в стандартный диалог.тлк и давать его игроку вместе с хаками будет результат?

так значит речь про создание чара до захода в первую локацию? тогда только стандартный править, или тщательно подбирать строки из него crazy.gif
nepejke
можно ли редактировать фиты? (бонусы, которые они дают)
если да, то где?

в feat.2da и cls_feat.2da ничего такого нет (нету самих характеристик фита)
denis0k
Фиты вшиты в движок. Для изменения делаются новые, а бонусы даются посредством разных скриптовых костылей.
nepejke
к примеру есть фита:
FEAT_SPELL_POWER фита красного волшебника из второй части, увеличивающая nCasterLevel мага на 1,2,3,4,5 за каждые 2 лвла. (+5 на 10ом лвле красного волшебника)

Какого типа должен быть скрипт, чтобы создать что то наподобие этого. Интересует реализации nCasterLevel как левельной структуры, чтобы кастерлвл(другими словами, число влияющее на дамаг кастера) рос с левельностью.
Хотелось бы просто копию этого фита, только своими числами немного rolleyes.gif
Laajin
1.Обычно делается инклюд, с необходимой функцией, который потом подрубается к необходимому скрипту
Тебе придется добавить инклюд и изменение в каждый скрипт спелла, в котором будет это использоваться

2. Может быть, можно сделать как-то через NWNX написав свой плагин.
Talarasha
Цитата
1.Обычно делается инклюд, с необходимой функцией, который потом подрубается к необходимому скрипту
Тебе придется добавить инклюд и изменение в каждый скрипт спелла, в котором будет это использоваться

К каждому скрипту? Это же до старости ковыряться можно. Есть же спеллхук.
Ilerien
Только спеллхук проблему не решает - как минимум нужна кастомная функция расчета кастерлевела, которую нужно пихнуть в скрипт каждого заклинания. А ещё есть скрипты на АОЕ, с которыми тоже нужно возиться. Собственно, таким образом в текущем модуле Гема сделана заплатка на кастерлевел ПМа.
Talarasha
Ilerien, если мне память не изменяет, спеллы в основном считают кастер левел по HD от OBJECT_SELF - зависят от него, во всяком случае. Не пробовали перехватывать спелл и вызывать его от имени невидимого NPC-заглушки с нужными бонусами? Просто менять каждый спелл вручную это как-то... слишком.
UPD: вспомнил про GetCasterLevel(), но принцип тот же.

Цитата
А ещё есть скрипты на АОЕ, с которыми тоже нужно возиться.

А там какие тонкости?
Ilerien
Проблема в том, что скрипт заклинания неявно принимает на вход не только собственно уровень заклинателя (а не хитдайс, к слову), но ещё и кучу других параметров, таких, как класс сложности, метамагия, наличие у кастера всяческих спелл пенетрейшенов и т. д.

На самом деле, правка делается несложно - простенькой программой, которая в каждом файле заменяет вхождения функции GetCasterLevel() на вхождения кастомной и добавляет директиву #include, если нужно.

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

Хитдайс тоже берется, просто не везде. Я же не с потолка про него вспомнил, а открыв наугад спелл. rolleyes.gif

А все эти параметры также можно в спеллхуке проверить и добавить заглушке через ItemProperty, какие проблемы?
Ilerien
Цитата
А там какие тонкости?
Если в скрипте мгновенного действия, скажем, для поднятия кастерлевела ПМу по 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;
}

, то в скриптах на АОЕ этот код будет работать правильно только до тех пор, пока валиден объект-кастер, создавший эту АОЕ. Решается установкой на АОЕ локалки при создании.
Цитата
Хитдайс тоже берется, просто не везде. Я же не с потолка про него вспомнил, а открыв наугад спелл.
Хитдайс кастера? Возможно, я с ходу не могу назвать ни одного дефолтного заклинания, в котором он используется. sad.gif Впрочем, не суть, у меня в кастомных заклинаниях кое-где и другие параметры кастера используются, вроде элайнмента.
Цитата
А все эти параметры также можно в спеллхуке проверить и добавить заглушке через ItemProperty, какие проблемы?
Хм, как именно? И как в таком случае предлагается вообще скрипт перехватывать? Если запускать его от имени другого объекта через ExecuteScript(), функции, которые определяют параметры заклинания, вернут всякую чушь. Если через ActionCastSpellAt*(), подставной непись должен быть как минимум в той же локе, что и кастер, и предвижу проблему с летящими из ниоткуда фаерболами.
Talarasha
Цитата
Хм, как именно? И как в таком случае предлагается вообще скрипт перехватывать?

1)Игрок кастует спелл, спеллхук перехватывает.
2)Скрипт делает проверку кастер-левела, ДЦ, фитов и всего такого прочего.
3)Создаем невидимую НПС-заглушку из шаблона по координатам того же PC со шкуркой, в которую записываем проверенные данные через итем-проперти.
4)В случае, если у игрока бонус к кастер левелу, добавляем левелов заглушке.
5)Вызываем спелл через ActionCastSpellAt* от имени созданной заглушки (с ExecuteScript() я не смог сходу придумать, как получать имя скрипта спелла)
6)Убиваем заглушку.
Ilerien
Цитата
2)Скрипт делает проверку кастер-левела, ДЦ, фитов и всего такого прочего.
3)Создаем невидимую НПС-заглушку из шаблона по координатам того же PC со шкуркой, в которую записываем проверенные данные через итем-проперти.4)В случае, если у игрока бонус к кастер левелу, добавляем левелов заглушке.
Допустим, добавить на шкурку фиты можно, если их предварительно прописать в iprp_feats.2da. А как добавлять уровней подставному неписю?
В любом случае, это а) куча неписей разного уровня и разных классов в палитре; б) создание/удаление объекта-непися при касте каждого спелла игроком, что плохо с точки зрения производительности.
Всякие projectile-заклинания вроде фаерболов будут визуально летать от кастера дважды. Соответственно, в 2 раза увеличится время достижения цели.
Цитата
с ExecuteScript() я не смог сходу придумать, как получать имя скрипта спелла
Neverwinter Script
Get2DAString("spells", "impactscript", GetSpellId())
Talarasha
Цитата
А как добавлять уровней подставному неписю?

Хенчам в XP2 же как-то добавляли.
Цитата
В любом случае, это а) куча неписей разного уровня и разных классов в палитре;

Это еще почему? Мы создаем заглушку по шаблону, а фиты и левелы ей даем динамически скриптом. В палитре будет один-единственный объект (крич).
Цитата
б) создание/удаление объекта-непися при касте каждого спелла игроком, что плохо с точки зрения производительности.

Это будет зависеть от того, как способ будет действовать на практике. Производительность дело такое, вполне может быть так, что никакого заметного снижения не будет.

За Get2DAString спасибо.

Цитата
Всякие projectile-заклинания вроде фаерболов будут визуально летать от кастера дважды.

Тогда ExecuteScript() от имени заглушки.
Ilerien
Цитата
Хенчам в XP2 же как-то добавляли.
Там есть функция LevelUpHenchman, которая не обладает достаточной гибкостью - непись апается согласно прописанному пакаджу, а это означает, что придётся ещё и свой пакадж для каждого кастерского класса делать. И опять же - производительность, кроме создания/удаления имеем энное число левелапов.
Цитата
Тогда ExecuteScript() от имени заглушки.
И возвращающие параметры заклинания функции скорее всего вернут чушь.
Использование другого объекта в качестве кастера порождает кучу подводных камней. Например, заклинания Dominate Person/Monster/Animal внезапно будут добавлять контролируемое существо во фракцию подставного объекта, всякие вызывающие существ заклинания - тоже. Как себя поведет ResistSpell() - непонятно. Я уже не говорю о том, что придётся переписывать функцию, которая определяет, действует ли заклинание на конкретный объект (всякие там no-pvp локации).
Talarasha
Цитата
Там есть функция LevelUpHenchman, которая не обладает достаточной гибкостью - непись апается согласно прописанному пакаджу, а это означает, что придётся ещё и свой пакадж для каждого кастерского класса делать.

Зачем? Нас интересует только кастер левел, а он будет подниматься независимо от пакаджа. Подойдет любой из стандартных, на крайняк - отдельный пустой.

Цитата
И возвращающие параметры заклинания функции скорее всего вернут чушь.

В чем принципиальное отличие ExecuteScript() от кастования спелла через экшн в этом случае? Обе функции вызывают скрипт от имени того объекта, который им указан. Скрипт, вызванный через ES и будет использовать в качестве OBJECT_SELF то, что ему передадут - заглушку, в данном случае, в которую все параметры мы записали. Возвращающие параметры функции вернут то, что надо.
Цитата
Например, заклинания Dominate Person/Monster/Animal внезапно будут добавлять контролируемое существо во фракцию подставного объекта, всякие вызывающие существ заклинания - тоже.

Можно будет проверить после вызова заклинания и перенести, куда нужно.

Подводные камни есть, конечно, их все надо будет прорабатывать на этапе разработки. Я говорю к тому, что использованию спеллхука нет принципиальных препятствий и если проблему предстоит решать с нуля, то лучше все-таки прикинуть и посмотреть, что будет в конкретном случае целесообразнее - делать чисто скриптовое решение или вносить изменения в файл каждого заклинания, не забывая также обновлять любой новый. Посмотреть, проверить, как это все будет работать, будут ли потери производительности в сингле/на шарде, какие. И решить.
Laajin
Анимация заклинания происходит до взаимодействия со спелхуком и вообще скриптом спелла.
Любое изменение уже смотрится коряво, даже при использовании спелхука для компонентной магии, но люди идут на это, как на малое зло)
Talarasha
Цитата
Анимация заклинания происходит до взаимодействия со спелхуком и вообще скриптом спелла.

Это к чему? Спеллхук и не будет влиять на анимацию, если он вызывается через ExecuteScript(). Если строка была по поводу слов Ilerien'а, то он имел ввиду повторный вызов заклинания через экшн, тогда анимация действительно проигрывалась бы дважды.
Laajin
Цитата
1)Игрок кастует спелл, спеллхук перехватывает.


Это все произойдет после анимации заклинания (огненный шар, например, сначала пролетит в точку куда направлен, с другими так же)
Talarasha
Хм. И что?
Laajin
Кривожопновыглядит, особенно если после этого будет еще одна анимация со стороны "НПС заглушки".
Через NWNX надо писать свой плагин на С иначе только через костыль со скриптами
Talarasha
В чем кривожопность-то? Со стороны НПС заглушки еще одной анимации не будет.
Ilerien
Цитата
Зачем? Нас интересует только кастер левел, а он будет подниматься независимо от пакаджа. Подойдет любой из стандартных, на крайняк - отдельный пустой.
Например, непись может взять тот же спелл пенетрейшн по стандартному пакаджу, так что как минимум отдельный пустой пакадж нужен.
Цитата
В чем принципиальное отличие ExecuteScript() от кастования спелла через экшн в этом случае?
В том, что запущенный через ExecuteScript на другом объекте - это уже не скрипт заклинания, поскольку параметры живут в соответствующих полях структуры кастующего существа. Со всеми вытекающими последствиями вроде идентификатора заклинания -1 и невалидными результатами использования остальных функций, работающих непосредственно с параметрами заклинания - GetCasterLevel(), GetSpellSaveDC(), GetMetamagicFeat(), ResistSpell(), etc. И да, метамагию, скорее всего, перебросить не выйдет никак, даже через ActionCastSpellAt*().
Цитата
Можно будет проверить после вызова заклинания и перенести, куда нужно.
Это был придуманный с ходу пример. Скорее всего, есть и другие эффекты, которые в этом случае отработают криво. И изрядной частью спеллхука станет огромный свич по идентификатору заклинания, который нарушает саму концепцию архитектуры системы спеллхук-заклинание smile.gif
Цитата
Подводные камни есть, конечно, их все надо будет прорабатывать на этапе разработки. Я говорю к тому, что использованию спеллхука нет принципиальных препятствий и если проблему предстоит решать с нуля, то лучше все-таки прикинуть и посмотреть, что будет в конкретном случае целесообразнее - делать чисто скриптовое решение или вносить изменения в файл каждого заклинания, не забывая также обновлять любой новый.
Я пытаюсь сказать, что переписывание функции GetCasterLevel(), особенно с учётом того, что замена функции в скриптах заклинаний хорошо автоматизируется - куда меньшее зло, чем затыкание кучи дыр, образованных перекидыванием скрипта заклинания на другой объект.
Laajin
Задумка понятна: ты хочешь через левого НПС просто запускать скрипт, уже после анимации.
Куча всяких есть НО:
-абилки требуется разные для разных классов
-всякие фишки типа фитов спеллпенетратион
-и еще куча всякой фигни
-ты задолбишься делать НПС чаров заглушек на все случаи
(кажется Ilerien уже все это объяснил =_=)
Кроме того предвижу тормоза, во время боя и интересную реакцию мобов на НПС заглушку.
Легче как мне кажется скрипты отредактировать, их всего там около 50...мне один раз пришлось переименовывать 1200 файлов
NWNX вот, кстати, не знаю есть ли там перехват каста спелла (эвент), но через это было бы реально много чего сделать.
Talarasha
Цитата
ты задолбишься делать НПС чаров заглушек на все случаи
(кажется Ilerien уже все это объяснил =_=)

Кажется, ты невнимательно прочитал мои сообщения. Я уже говорил, что шаблон в палитре требуется один единственный. В предыдущих постах написано, как именно это реализовывается вместе со всеми бонусными фитами.
Цитата
Кроме того представь предвижу тормоза, во время боя и интересную реакцию мобов на НПС заглушку.

Чтобы говорить о тормозах - надо посмотреть работу на практике. Теоретически даже запись локалки может тормоза вызвать. На практике, однако ж, так не происходит.
Цитата
Легче как мне кажется скрипты отредактировать, их всего там около 50...

Хм. Откуда цифра? Так-то по скрипту на спелл, а их несколько сотен.

Ilerien
Цитата
Это был придуманный с ходу пример.

И придуманное с ходу решение. Наверняка и на другие найдется.

Цитата
В том, что запущенный через ExecuteScript на другом объекте - это уже не скрипт заклинания, поскольку параметры живут в соответствующих полях структуры кастующего существа.

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

Может быть - я, когда говорил про спеллхук, не учитывал автоматическую прогонку файлов. Меня-то конкретно в таком способе неустраивает негибкость - ворох скриптов, которые надо таскать с собой, необходимость подправлять любые добавляемые/нестандартные скрипты, несовместимость с авторскими реализациями заклинаний в пользовательских модулях и так далее. От приоритетов зависит.
nepejke
ого ребят, ну вы и развели rolleyes.gif

чувствую, щас опять всё работу за меня Talarasha сделает biggrin.gif
Ilerien
Цитата
Понял, о чем ты. ActionCastSpell + ClearAllActions на заглушке должны с этим разобраться.
Не уверен - предполагаю, что идентификатор заклинания задается перед запуском скрипта после фазы cast. Но точно не знаю, если сработает - то решение элегантно smile.gif Но проблемы с метамагией все равно не решает.
Цитата
Меня-то конкретно в таком способе неустраивает негибкость - ворох скриптов, которые надо таскать с собой, необходимость подправлять любые добавляемые/нестандартные скрипты, несовместимость с авторскими реализациями заклинаний в пользовательских модулях и так далее. От приоритетов зависит.
Я просто опираюсь на собственный опыт. Одного прогона автозаменялки хватило, чтобы больше с этим не париться. Новое заклинание? Сразу пишем вместо дефолтной функции кастомную. Если нужно в новом существующем скрипте заменить - опять же никаких проблем с правкой, 1 файл - тут и говорить не о чем.
wirTUS
Цитата
Но проблемы с метамагией все равно не решает.

Малооптимальное решение, но сделать ускоренную, тихую и бездвижную, мне кажется, можно: через 3 заглушки при помощи эпической "автоматической" метамагии (если мне не изменяет память, то неписям можно ставить фиты, требованиям которых они не удовлетворяют, соотв. с кастер левелом проблемы быть не должно) и switch на выбор заглушки. Конечно не решает проблемы с максимизацией, умощнением и удлинением, но хотя бы часть проблем решает. Подходит только для модулей, не рассчитанных на эпик, т.к. в случае с эпиком понадобятся еще 16 вариантов заглушки (4 варианта сочетаний автоматической и 3 варианта прочей метамагии). Не прокатит в случае, если автоматическая имеет свои значения (ускоренная - 8 (0х08), автоускоренная1 - 64 (0х30)), хотя вроде бы это не так.
denis0k
Постоянно пересоздавать объекты - и сервер у вас утечёт далеко и надолго, будете рестартить раз в 4-6 часов smile.gif Особенно пересоздавать раз в 6 секунд на каждого кастера, а учитывая, что 3/4 онлайна всякие маги и клеры с хастом, то будет создаваться омг сколько неписей раз в 3 секунды - так думаю можно и сервер валить для откатов. Плюс есть ещё и мобы-кастеры, их новые правила тоже не должны стороной обходить.

Вариант с переписыванием всех заклинаний выглядит самым оптимальным. Я тоже так делал. Да, это убого в принципе, но это единственный рабочий на практике вариант. Ваш спеллхук работает так же - в каждом скрипте заботливо добавлен инклуд и функция проверки разной фигни.
Laajin
Щас я буду К.О:
надо просто попробовать вот и все, придумать можно кучу всего, а при проверке движек покажет фигу.
virusman
Цитата(Laajin @ Aug 28 2011, 23:47) *
NWNX вот, кстати, не знаю есть ли там перехват каста спелла (эвент), но через это было бы реально много чего сделать.
Есть, конечно. Отрабатывает в момент нажатия на кнопку спелла, т.е. до действия, анимации и отработки impact-скрипта.
По поводу производительности denis0k прав. В условиях шарда создавать существ при каждом спеллкасте - это безумие.
DNAlchemist
Можно ли сделать специальное свойство предмета (которое вызывает функцию OnItemActivated) доступным предметам, для которого оно заблокировано?
Не могу никак подружиться с 2da таблицами. Открыл ItemPropDef.2da, даже тупо не нашел там такой пункт -_-
Ilerien
Можно, если сделать доступным свойство Cast Spell в itemprops.2da для определённой категории итемов.
MpakOfChaos
Доброго времени суток. Буду благодарен за любую помощь.

Меня интересуют следующие вопросы:
1. Можно ли отключить автоатаку (которая работает при клике на врага), т.е. чтобы атаковать можно было только скилами/спелами. Если да то как.
2. Подскажите где хранятся и как изменить штрафы к ношению двух оружий.
3. Каким образом можно реализовать ношение в одной руке стрелкового в другой мили оружия (анимация этого бреда моя проблемма, вопрос в том как сделать чтобы оно одевалось вместе).

Рабочие примеры очень сильно помогут но буду благодарен и за любую другую информацию по этим вопросам. Если есть темы где эти проблеммы описаны прошу дать ссылки ибо я не смог нагуглить ответов (^_^'').
Ilerien
Цитата(MpakOfChaos @ May 4 2012, 07:03) *
Меня интересуют следующие вопросы:
1. Можно ли отключить автоатаку (которая работает при клике на врага), т.е. чтобы атаковать можно было только скилами/спелами. Если да то как.
2. Подскажите где хранятся и как изменить штрафы к ношению двух оружий.
3. Каким образом можно реализовать ношение в одной руке стрелкового в другой мили оружия (анимация этого бреда моя проблемма, вопрос в том как сделать чтобы оно одевалось вместе).
1. Можно через NWNX Events, событие атаки.
2. Зашиты в коде движка. Если очень хочется поменять - можно попробовать изменить С-шный код одного файла из плагина NWNX Weapons, который отвечает за хук бонуса к атаке.
3. Не уверен, что это вообще можно сделать за разумное время.
denis0k
Скорее нет, чем да. Можно извратиться, но будет убого.
Цитата
Можно ли отключить автоатаку
Только выставить всем 0% попадания (или 100% промаха, не помню), автоатаки будут в молоко.
Цитата
Подскажите где хранятся и как изменить штрафы к ношению двух оружий.
В движке. Никак. Можно давать баф на атаку при одевании, как бы компенсируя штрафы.
Цитата
Каким образом можно реализовать ношение в одной руке стрелкового в другой мили оружия
Никогда об этом не думал, и думаю такое невозможно в принципе. Хотя бы потому, что логика движка неспособна будет решить, какую автоатаку проводить при клике - ближнюю или дальнюю.
Цитата
ибо я не смог нагуглить ответов
Потому что самый разумный ответ тут - написать свою игру smile.gif
wirTUS
Здравствуйте. Такое дело:
Цель: добавить скиллы знаний (по ПХБ).
Реализация:
Код
51  Knowledge_arca 16777217  16777218     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_ARCA           0
52  Knowledge_arch 16777219  16777220     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_ARCH           0
53  Knowledge_dung 16777221  16777222     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_DUNG           0
54  Knowledge_geog 16777223  16777224     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_GEOG           0
55  Knowledge_hist 16777225  16777226     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_HIST           0
56  Knowledge_natu 16777227  16777228     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_NATU           0
57  Knowledge_nobi 16777229  16777230     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_NOBI           0
58  Knowledge_plan 16777231  16777232     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_PLAN           0
59  Knowledge_reli 16777233  16777234     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_RELI           0
60  Knowledge_loRS 16777235  16777236     isk_lore        0          INT         0                  1                 ****      ****   SKILL_KN_L_SR           0

дописка к skills.2da, приведенная выше, плюс кастомный .tlk, плюс таблицы с классовыми скиллами.
Проблема: не работает (не отображается в игре) скилл Knowledge_loRS (все остальные отображаются прямо, тлк правильный).
denis0k
В конце новую строку сделал? Многие программы требуют, чтобы файл завершался пустой строкой (достаточно энтер нажать).
wirTUS
Пробовал и пустую, и не пустую (дублировал Knowledge_loRS на 61, дописывал в классовые, добавлял с новым лэйблом) - не помогало.

Еще внезапно обнаружил такую же проблему с Knowledge_dung и Knowledge_arca. В skills.2da прописывал пустые строчки до сэйфстринга - 50, они отображаются. Попробую снести, вдруг на кол-во скиллов ограничение есть.

Сделал. Из добавленных остались только _plan, _reli, _loRS и _natu. Из чего делаю вывод, что только некоторые строки из skills.2da отображаются и начинаю их искать smile.gif

Нашел. Отображаются данные строки и ID (при условии ID, пронумерованных подряд, и 1.69 HotU, то бишь с райдом; искал только по мере необходимости, т.е. не перевыполнял план)
Строка | ID
37 | 33
39 | 35
40 | 36
41 | 37
42 | 38
43 | 39
44 | 40
50 | 46
Magus
Здравствуйте!
Такой вопрос: какая таблица отвечает за доступные классу заклинания. Я поковырялся в теме и нашел сообщение про создание классов, но нужной информации не обнаружил. Помогите, пожалуйста.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.