Diablo 2: Основы редактирования навыков

Diablo 2 является игрой на основе взаимодействия клиент-сервер. Два потока работают в одно и то же время когда вы играете. Поток сервера занимается всеми расчетами в игре а потом Клиент выдает картинку или проигрывает звуки в зависимости от того что решает Сервер. Когда вы играете на Battle.net, Сервер находится на Battle.net а Клиент у вас на компьютере. В одиночной игре, оба потока работают с вашего компьютера.

Почему это важно? Для того чтобы получить связанный контроль над навыками, их эффекты разделены на сервер эффект и клиент эффект – каждый из которых выполняет абсолютно разную задачу и выдает разные результаты.

Более того, каждый тип эффекта разделенный на две части: Start function и Do function. Если открыть skills.txt и посмотреть на первую строку, мы видим четыре колонки, которые отвечают за эти функции.

*srvstfunc: Это индекс в таблицу функций на сервере, который контролирует, что делает навык когда вы впервые пытаетесь его применить, если у вас есть все необходимы для этого условия (достаточно маны, или одета вещь и тд.) Эта функция, в общем, проверяет, выполнены ли те или иные условия и для некоторых навыков она пре-установит некоторые значения.

*cltstfunc: Аналогично до srvstfunc но на клиенте. Поскольку это разные таблицы функций то и значение тоже будут разные.

*srvdofunc: как srvstfunc, но контролирует, что делает навык когда вы его кастуете. Эта функция использует следующие колонки в различных текстовых файлах : prgcalcX, srvmissileX, aurafilter, aurastate, auratargetstate, auralencalc, aurarangecalc, aurastat#, aurastatcalc#, auraevent#, auraeventfunc#, auratgtevent, auratgteventfunc, passivestate, passivestat#, passivecalc#, summon, pettype, petmax, summode, sumskill#, sumsk#calc, sumumod, sumoverlay, do sound a, do sound b, calc#. В общем, заполнение каких-либо выше перечисленных полей не будет иметь значения, если вы перед этим не выставили srvdofunc который их использует.

*cltdofunc: аналогично srvdofunc но на клиенте. Использует те же поля, что и srvdofunc, за исключением srvmissileX, вместо него будет использоваться cltmissileX.

Тот же самый принцип применяется к снарядам (missiles).

  • pCltDoFunc: откликается каждый кадр существования снаряда на клиенте.
  • pCltHitFunc: откликается на клиенте когда снаряд попадает во что-то.
  • pSrvDoFunc: откликается каждый кадр существования снаряда на сервере.
  • pSrvHitFunc: откликается на сервере когда снаряд попадает во что-то.
  • pSrvDmgFunc: откликается когда снаряд рассчитывает наносимый урон и когда урон наносится.

Мы можем разделить навыки на пять типов:

Пассивные навыки

Самый простой тип навыков. Они не используют никаких Клиент и Сервер функций. Когда персонаж или монстр имеет, по крайней мере, одно очко в пассивном навыке, игра автоматически добавляет пассивный бонус к характеристикам персонажа или монстра. Важные поля для пассивных навыков это passivestat/passivecalc которые хранят бонусы к статам. Важно знать, что поле passivecalc поддерживет формулы. Колонка passive это булев, которые убирает иконку навыка из быстрой панели навыков и говорит игре то этот навык пассивный. Про колонки passiveevent и passiveeventfunc позже.

Ауры, Энчанты (бафы) и Проклятия (дебафы)

Иногда аура похожа на пассивный навык. Но главное отличие в том, что аура обновляет свой бонус динамически, в то время как пассивный навык обновляет свой бонус, когда повышается уровень навыка. Энчанты и проклятия тоже выглядят как пассивки, только их надо кастовать. Ауры, Энчанты и проклятия используют action или init функции, чтобы применятся. Srvdofunc ауры или проклятия ищет подходящую цель в заданном диапазоне. Cltdofunc только показывает оверлей на пораженных юнитах. Бонус ауры находится в колонках aurastat/auracalc.

Есть еще несколько интересных колонок. Aurafilter немного сложно понять. Это битовое поле, которое контролирует, на какой тип юнита влияет аура (союзники, враги, саммоны или все). Aurastate и auratargetstate говорят игре какой state использовать владельцу ауры или его целям. Auralencalc и aurarangecalc это длина анимации ауры в кадрах и диапазон ауры или проклятия. Для аур, колонка perdelay говорит игре как часто игре обновлять бонус ауры (в кадрах).

Навыки призыва

Эти навыки призывают монстра. Этот монстр может или не может быть союзником юнита, который их призвал. Эти навыки использую следующие колонки: summon говорит игре, какого монстра призвать. Pettype даёт дополнительную информацию про отображение саммона (иконки, группа, микарта, внешность и тд). Petmax это поле формулы которая контролирует количество данных саммонов одновременно. Summode говорит игре какую анимацию проигрывать когда его призывают. Sumskill и sumskcalc это поля для формул, которые назначают скилы для саммонов. Sumumod это особенные эффекты которые саммон может иметь. Sumoverlay это графический оверлей когда юнит призывается. Некоторые навыки призыва используют специальные Server Initialisation функции, которые позволяют навыкам давать пассивные бонусы саммонам или позволять игроку вызывать юнит в особый способ (из трупа или вещи, например).

Снаряды и рукопашные навыки

Это сама основа навыков Диабло 2. Большинство этих навыков используют особые функции для сервера и клиента. Имейте ввиду что некоторые рукопашные и снарядные навыки можно миксовать с пассивками или призывами, имея несколько эффектов одновременно.

Базовый список файлов который нужен для редактирования навыков

skills.txt

Этот файл главная база данных навыков. Он хранит список навыков в игре и их параметры. Будьте осторожны: всегда проверяйте правильно ли вы сохранили его, иначе даже маленький промах тут или там может вызвать вылет. Этот файл отсылается на два других файла: skilldesc.txt и missiles.txt.

skilldesc.txt

Используется как база данных описания навыков. Здесь находится вся информация о навыках когда мы наводи на него мышкой: текст, числа урона, иконки и тд. Все поля со словом string, это коды-строки которые можно найти в одном из трех .tbl файлов.

missiles.txt

Содержит информацию о снарядах. Снаряд имеет свои сервер и клиент функции, графическое изображение, скорость, изображение взрыва и цвет радиуса освещения. Снаряд привязывается к навыку или к другому снаряду, таким образом, создавая снарядные цепи.

Другие файлы

Такие файлы как itemstatcost.txt, monstats.txt и states.txt тоже важны в некоторых случаях редактирования скиллов. Некоторые типы скиллов могут использовать стат или стэйт, что очень важно знать.

Советы и вещи, которые стоит помнить

  • Скорость в игре считается в кадрах. 25 кадров = 1 секунда
  • Все персонажи должны иметь одинаковое количество навыков иначе будет вылет в игре. Если хотите все же хотите сделать чтобы у кого ты было больше навыков, просто создайте навыки «пустышки» которые ничего не делают, но считаются игрой (навык засчитывается персу когда его код стоит в поле “charclass”).
  • Некоторые классические навыки закодированы, так что лучше их не перемещать и не заменять, и не вставлять ничего между ними.
  • Мастерства Варвара закодированы на обновление каждую секунду, и они единственные так работают.
  • Проклятия и ауры, которые используют монстры, закодированы и должны быть на своих местах.
  • Некоторые поля в skilldesc.txt закодированы считывать те или иные коды-строки из .tbl файлов.
  • Стейт freeze закодирован быть там, где он есть.
  • Не используйте те же самые снаряды для больше чем одного навыка. Просто скопируйте если нужно.
  • Не используйте закодированные навыки как основу для новых.
  • Вы можете вставлять новые колонки в свои текстовые файлы, если поставить перед названием звездочку *. Тогда эта колонка не будет читаться игрой, а будет служить вам как поле для комментариев или личных записей.
  • Всегда тестируйте свои навыки, перед тем как делать с ними что-то еще.
  • Если вы решили удалить навык, вы должны удалить все что с ним связано, во всех текстовых фалйлах. Если этот навык был между другими, не забудьте реорганизовать ваши Id числа.
  • Не забывайте что для того чтобы навык наносил урон, снаряды должны быть присоединены к навыку (колонка skill в файле missiles.txt)
  • Для проверки своих текстовых файлов на ошибки используйте D2txtanalyser

Вернуться к разделу: создание модов в Diablo 2


Автор: JetaMan




Комментарии

Tion Ra 2018-05-09 18:53:44
А как сделать чтобы Holy Bolt наносило урон не только нежити но и всем остальным? Как снять ограничение?

Ответить
? +3 ?
alkargames 2017-12-30 22:12:58
Alkar Games, сервер Diablo II, Ladder Reset 22.12.2017
ex-alkar.net

Ответить
? 0 ?
Jetaman 2016-10-18 19:50:00
Нет,посмотри на файл SkillCalc.txt. Это название формулы. ln - означает linear, то есть линейное возрастание, dm - означает diminishing returns.

Ответить
? +3 ?
konkere 2016-10-17 10:56:36
чо значит dm12 (любое число - не обязательно 12) и ln10 (любое число - не обязательно 10) в текстовике skills? куда идёт отсылка и как вести пересчёт? если я правильно понимаю это урон и продолжительность...

Ответить
? +4 ?
Страницы:

Ваше имя
Комментарий



Реклама:

Наша командаРазработка глобального обновления

При поддержке Сил Преисподней
2008-2024