Моддинг World of Warcraft. Создание заклинаний на TSWoW.

Nyll

New member
Продвинутый пользователь
Регистрация
19.06.2020
Сообщения
55
Реакции
76
Баллы
0
Возраст
32
Местоположение
USA
В предыдущей статье мы создали свой собственный класс. Заклинания, пожалуй, самая широкая тема в моддинге WoW. Почти каждый эффект в игре так или иначе связан с программированием заклинаний, и хотя простые модификации не слишком сложны для понимания, за ними может скрываться удивительная глубина.. Заклинания являются настолько важным аспектом, что необходимо, чтобы вы рассмотрели их, пока вы еще новичок: если вы овладеете заклинаниями, вас мало что еще может напугать в моддинге WoW. В TSWoW пытаются упростить создание достаточно стандартных заклинаний, а также предоставить более совершенные инструменты для исследования того, как можно добиться более сложных эффектов заклинаний. В этом уроке мы рассмотрим основные компоненты заклинаний и создадим несколько основных (но не тривиальных) примеров, Мы также рассмотрим некоторые методы, которые мы можем использовать для устранения неполадок и понимания более сложных функций заклинаний. Ну что же, приступим!

Базовая теория заклинаний

В этом разделе объясняются основные компоненты заклинания в World of Warcraft. Примеры заклинаний подробно иллюстрируют каждую концепцию.

Заклинание

Первым строительным блоком всех заклинаний является само заклинание. Заклинание — это «вещь», которую персонажи и существа могут выучить и которая хранится в их книгах заклинаний (но иногда они невидимы!). У заклинаний есть имя и числовой идентификатор, как вы можете видеть на скриншоте ниже.

1.png


Заклинания в книге заклинаний. Даже авто-атака является заклинанием и имеет идентификатор заклинания 6603.
Не все заклинания видны в книге заклинаний, и не все заклинания можно использовать. Различные уровни заклинания на самом деле являются просто отдельными заклинаниями с «Рангом x» в качестве имени их ранга и отношением на стороне сервера, в котором говорится, что они являются рангами другого заклинания.

Заклинания имеют очень много свойств, связанных с ними, и изучение всех из них займет некоторое время даже с TSWoW. Вот несколько примеров:
  • Тип ресурса/маны и стоимость
  • Имя, описание, название уровня
  • Стоимость реагентов
  • Специальные флаги, определяющие, является ли заклинание активным/пассивным и т. д.
  • Иконки
  • Основной тип цели (нет, земля, юнит, предмет и т. д.)
Эффект заклинания

Чтобы действительно что-то сделать, заклинание может иметь до трех эффектов заклинания . Каждый эффект имеет дополнительные индивидуальные свойства, такие как тип эффекта , нанесенный урон/очки и тип цели, которую он имеет. Несмотря на то, что заклинание может иметь только один тип цели, его эффекты заклинания могут иметь совершенно разные имплицитные цели. Например, заклинание с целью AoE может иметь эффект, направленный вместо этого на заклинателя .

2.png

Визуальное заклинание

Чтобы решить, как выглядит заклинание, у них есть один «визуальный» компонент. Этот компонент сам по себе разделен на так называемые «наборы заклинаний». Набор заклинаний определяет, какие типы моделей, звуков или эффектов должны создаваться в различных частях заклинания, таких как заклинатель, цель, целевая земля или ракета заклинания. Всего существует 12 различных наборов заклинаний, но не ко всем заклинаниям прикреплены все наборы. Например, заклинание, не поддерживающее канал, не будет иметь никакой пользы для Channel визуального комплекта


3.png

Ауры/Баффы

Техническое/общее название баффов, дебаффов и аур в World of Warcraft — «аура». Это имя используется вне зависимости от того, является ли эффект видимым или невидимым, временным или применяется на неопределенный срок, как аура паладина. Все эффекты заклинаний, которые могут быть прикреплены к юниту, являются аурой .

Все типы аур запрограммированы заранее и могут быть прикреплены к юнитам с помощью эффектов заклинаний. Одна аура обычно делает что-то очень простое, например, «уменьшает броню на x » или « наносит x урона каждые y секунд». Если заклинание настроено на видимость, все ауры, связанные с его эффектами, будут отображаться в виде одной иконки усиления или ослабления там же где и обычно баффы/дебаффы.

4.png

Демоническая кожа накладывает две ауры (увеличение брони, увеличение эффективности лечения) и отображается как одна иконка ауры. Заклинание настроено так, чтобы быть положительным (бафф), видимым и иметь продолжительность 30 минут.
Стрела смерти

Теперь, когда мы понимаем основы программирования заклинаний, мы создадим наше первое заклинание: версию Стрелы Тьмы, которая также наносит урон ДоТ. Чтобы соответствовать теме, мы назовем его «Стрела смерти».

Создание заклинания

Прежде чем мы сможем сделать что-либо еще, нам нужно выяснить идентификатор заклинания Shadow Bolt. Для этого мы просто создадим нового Чернокнижника и проверим его ID. TSWoW поставляется в комплекте с аддоном, который отображает для нас идентификаторы заклинаний.

5.png
Shadow bolt имеет идентификатор заклинания 686, и мы будем использовать его в качестве «родительского» заклинания аналогично тому, как мы использовали класс мага в качестве родителя для нашего барда. Создайте новый файл с именем «DeathBolt.ts» и введите следующий код:
Код:
import { std } from 'wow/wotlk';
import { DEATH_SKILL, BARD_CLASS } from './Bard';

export const DEATH_BOLT =
    std.Spells.create('tswow-introduction','death-bolt',686)

DEATH_BOLT.Name.enGB.set('Death Bolt')
DEATH_BOLT.Description.enGB.set('A bolt of death!');
DEATH_BOLT.SkillLines.add(DEATH_SKILL.ID,[BARD_CLASS.Mask])

Далее запускаем команду build data и войдите в игру за Барда. Чтобы выучить это заклинание, нам нужно знать его идентификатор заклинания. Чтобы найти его, мы будем использовать внутриигровую команду .lookup spell death bolt.

6.png

ID нового заклинания — 200000. Чтобы выучть это заклинание, мы можем просто набрать .learn 2000000. Death Bolt теперь должна отображаться в вашей книге заклинаний на вкладке «Смерть», и если вы наложите ее на моба, вы увидите, что она ведет себя так же, как и Shadolw Bolt.

7.png

Изменение изображения (иконки) заклинания

Давайте попробуем сделать его похожим на заклинание Лик смерти.

Во-первых, нам нужно выяснить идентификатор заклинания Лика смерти. Самый простой способ — создать персонажа Рыцаря Смерти и проверить его так же, как мы сделали с Shadow Bolt.

8.png
Идентификатор заклинания 47541, и это все, что нам нужно, чтобы украсть его модели и спецэффекты. Добавьте в DeathBolt.ts следующее:
Код:
const DEATH_BOLT_VISUAL = DEATH_BOLT.Visual.getRefCopy()
const DEATH_COIL_VISUAL = std.Spells.load(47541).Visual.getRef()

// Скопируйте модель ракеты
DEATH_BOLT_VISUAL.Missile.Model.set(
    DEATH_COIL_VISUAL.Missile.Model.get()
)

// Скопируйте визуальный комплект воздействия
DEATH_BOLT_VISUAL.ImpactKit.set(DEATH_COIL_VISUAL.ImpactKit.get())

Поскольку мы изменили только визуальную информацию, мы можем перестроить с помощью build data client и должны увидеть, что мы действительно заменили модель ракеты и ударный комплект на модель Лик смерти. Мы также можем видеть, что анимация и эффект применения по-прежнему остались от Shadow Bolt. Это потому, что мы не заменяли и не модифицировали комплект Cast.

9.png

Применение DoT эффекта

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

Это заклинание недоступно изначально, когда мы создаем персонажа чернокнижника, поэтому, чтобы легко получить к нему доступ, мы можем повысить уровень нашего персонажа до 5 и выучить все заклинания тренера с помощью команд .levelup 5 и .learn my trainer. Узнаём, что ID заклинания порчи 172.

10.png

Теперь мы можем попробовать добавить следующий код DeathBolt.ts и пересобрать его с помощью build data.

Код:
const CORRUPTION = std.Spells.load(172)

// Копируем первый эффект в порче в новый слот эффекта
DEATH_BOLT.Effects.addGet().copyFrom(CORRUPTION.Effects.get(0))

Однако, когда мы заюзаем это новое заклинание, мы обнаружим, что оно не применяет DoT к цели. Что же нам теперь делать?

Для подобных ситуаций у всех сущностей TSWoW есть функция под названием «объективация», которую мы можем распечатать, чтобы увидеть, как выглядят ее атрибуты. Objectify попытается преобразовать сложную базовую структуру, которую вы изменяете, в один объект JavaScript, удобный для печати.

Добавьте следующую строку в конец своей программы и запустите check команду, чтобы увидеть, как атрибуты выглядят на наличие повреждений:

Код:
console.log(CORRUPTION.objectify());

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

Код:
  Effects: [
    {
      Radius: [Object],
      ItemType: 0,
      Aura: 'PERIODIC_DAMAGE', // <-- Looks promising
      Type: 'APPLY_AURA',
      Mechanic: 'None',
      Radius: [Object],
      ItemType: 0,
      Aura: 'NONE',
      Type: 'DUMMY',
      Mechanic: 'None',

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

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

Код:
  Attributes: [ 'NOT_SHAPESHIFTED', 'UNK82' ],

Кажется, что у порчи установлен странный флаг под названием «UNK82», так что, может быть, мы можем просто установить этот атрибут, и DoT будет работать в нашем заклинании? Добавьте следующий код в свой скрипт DeathBolt. Обратите внимание, мы можем легко обнаружить, что «unk82» является допустимым атрибутом с помощью автозаполнения в VSCode.

Код:
DEATH_BOLT.Attributes.UNK82.set(true)

После очередной сборки снова ничего не работает. Здесь мы можем просто захотеть сдаться или попросить кого-нибудь о помощи. Мы могли бы также начать думать о том, что на самом деле необходимо для работы DoT. Мы можем прийти к пониманию того, что заклинания могут иметь несколько примененных аур, но значок баффа имеет только одну продолжительность, поэтому это должно означать, что «длительность» — это свойство не эффектов заклинания, а самого заклинания! Если мы ищем в выводе objectify слово «длительность», мы действительно находим эту строку:

Код:
  Duration: { Duration: 12000, DurationPerLevel: 0, MaxDuration: 12000 },

Используя автозаполнение, мы теперь можем легко обнаружить, что мы также можем установить это свойство для стрелы смерти, добавив следующий код в конец нашего скрипта заклинания:

Код:
DEATH_BOLT.Duration.setSimple(12000,0,12000)

Пересобираем командой build data и все! Теперь, когда мы используем стрелу смерти, мы видим значок дебаффа, появляющийся на нашей цели, и мы видим, что он также наносит периодический урон!

4rqvAsC.png

Чтобы добавить описание к значку баффа, мы можем (с помощью автозаполнения) обнаружить, что у заклинания существует свойство под названием AuraDescription, которое работает так же, как обычное описание. Так что добавляем снова в наш DeathBolt.ts следующий код:
Код:
DEATH_BOLT.AuraDescription.enGB.set('Deals periodic damage.');

Призыв Шитого ужаса


Наша следующая задача - сделать заклинание для вызова Шитый ужас. Как мы уже узнали, первый шаг в создании почти любого типа заклинания — это найти наиболее похожее заклинание и просто клонировать его. Давайте воспользуемся заклинанием чернокнижника Призыв беса, которое имеет ID 688.

KN2ofAj.png

Создайте новый файл с именем SummonAbomination.ts и введите следующий код:
Код:
import { std } from 'wow/wotlk';
import { BARD_CLASS, NECROMANCY_SKILL } from "./Bard";

export const SUMMON_ABOMINATION = std.Spells.create('tswow-introduction','summon-abomination', 688)

SUMMON_ABOMINATION.Name.enGB.set('Summon Abomination');
SUMMON_ABOMINATION.SkillLines.add(INSPIRATION_SKILL.ID,[BARD_CLASS.Mask])

Если снова же сделаем ребилд, выучим новое заклинание и найдём его (.lookup spell summon abomination , затем .learn найденный ID), мы должны увидеть, что мы успешно призвали беса, несмотря на то, что мы не чернокнижник. Но мы хотели призвать не беса, поэтому нам нужно выяснить, как изменить призванное существо. Пока наш бес вызван, мы можем нацелиться на него и использовать внутриигровую команду .id, чтобы узнать ID его существа (416):

HgJfMlJ.png
Теперь мы снова сделаем то же, что и с Стрелой Смерти, когда не знали, что делать: мы сделаем objectify() )ее и посмотрим, что мы можем найти. Если есть какая-либо ссылка на 416, вероятно, это то, что мы хотим попробовать найти. Действительно, наш первый и единственный эффект заклинания имеет следующий вид:​
Код:
  Effects: [
    {
      Radius: [Object],
      ItemType: 0,
      AuraType: 'None',
      EffectType: 'SUMMON_PET',
      Mechanic: 'None',
      BasePoints: -1,
      DieSides: 1,
      PointsPerLevel: 0,
      PointsPerCombo: 0,
      ImplicitTargetA: 32,
      ImplicitTargetB: 0,
      AuraPeriod: 0,
      MultipleValue: 0,
      ChainTarget: 0,
      SummonedCreature: 416 // <-- то что нам нужно
      MiscValueB: 0,
      TriggerSpell: 0,
      ChainAmplitude: 1,
      ClassMask: [Object]
    }
  ],

Теперь нам понадобится другой идентификатор существа, чтобы попытаться заменить его. Поскольку вы уже научились использовать команду .id, я избавлю вас от необходимости искать Шитый ужас для проверки и дам вам, что существо с идентификатором 8543 является Шитым ужасм. Добавьте следующий код в файл Abomination.ts.

Код:
SUMMON_ABOMINATION.Effects.get(0)
    .Type.SUMMON_PET.set()
    .SummonedCreature.set(8543)

Если мы сделаем ребилд с помощью build data и снова попробуем наше заклинание, мы увидим, что мы успешно вызвали Шитый ужас:

1FDjktz.png

Костяной щит
Я думаю, нам нужно закончить с чем-то простым., Давайте дадим барду костяной щит, который есть у рыцарей смерти. Поскольку рыцари смерти используют силу рун, нам нужно будет изменить тип ресурса, чтобы он вместо этого использовал ману.

Как обычно, мы создаем персонажа рыцаря смерти, чтобы найти это заклинание. Костяной щит — это талант в дереве нечестивости, но, к счастью, наш аддон SpellID может идентифицировать идентификатор заклинания прямо на вкладке талантов. В следующем туториале мы объясним, почему это так, а пока нам достаточно получить ID.

qWxnNyx.png

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

Оказывается, что «ресурсы заклинаний» в World of Warcraft называются «Сила» (не путать с Силой заклинаний ), и следующий код успешно изменит тип ресурса костяных щитов на использование маны:

Код:
import { std } from "wow/wotlk";
import { BARD_CLASS, INSPIRATION_SKILL } from "./Bard";

export const BONE_SHIELD =
    std.Spells.create('tswow-introduction','boneshield',49222)
BONE_SHIELD.Power.setMana(1337);

BONE_SHIELD.SkillLines.add(INSPIRATION_SKILL.ID,[BARD_CLASS.Mask])

aUJ7gTi.png

Некоторые вещи, которые вы можете попробовать сами:

  • 3 удара - это не очень много для защитного заклинания класса заклинателя, попробуйте увеличить количество стаков до чего-то большего.
  • Бонус 20% — это очень большое снижение урона, если у вас много стаков. Попробуйте уменьшить это количество до чего-то меньшего.
  • Костяной щит очень похож на заклинание жреца Inner Fire. Попробуйте скопировать функциональность Внутреннего огня на этот Костяной щит и посмотрите, сможете ли вы заставить его также увеличивать вашу броню во время действия.

Результат

В этом руководстве мы узнали:
  • Как создать заклинание на основе другого заклинания
  • Как мы можем заимствовать визуальные эффекты из других заклинаний.
  • Как мы можем заимствовать эффекты заклинаний из других заклинаний
  • Что мы можем использовать автозаполнение VSCode, чтобы узнать, какие поля мы можем изменить.
  • Что, если мы застряли, мы можем попытаться использовать objectify() распечатать наши объекты данных, чтобы увидеть, есть ли что-то, что вдруг мы могли пропустить.

Эти методы имеют большое значение для создания многих стандартных эффектов заклинаний в WoW. Однако иногда даже этого недостаточно. Некоторые заклинания имеют настолько причудливые настройки, что их почти невозможно понять, некоторые эффекты заклинаний просто невозможно комбинировать, и, как мы упоминали ранее, даже некоторые невозможно реализовать без сервера live scripting. К счастью для нас, в TSWoW реализованы live scripting, но это выходит за рамки этого базового руководства.

Некоторые дополнительные предложения о том, что вы можете попытаться изменить с нашему новому заклинанию Стрела Тьмы самостоятельно, используя автозаполнение для навигации по структуре данных:
  • Изменить значок
  • Изменить количество прямого урона от болта
  • Изменить количество урона, наносимого DoT
  • Вместо этого добавьте еще один эффект DoT, нацеленный на заклинателя (Дополнительно)

На этой прекрасной ноте мы закончим. В следующей части мы создадим собственные таланты для нашего класса.
 

Den4ik12

New member
Пользователь
Регистрация
20.01.2018
Сообщения
73
Реакции
4
Баллы
0
Эта инструкция работает с 7.3.5?
 

Den4ik12

New member
Пользователь
Регистрация
20.01.2018
Сообщения
73
Реакции
4
Баллы
0
Нет. TSWoW только для 3.3.5а WoTLK.
ага, понял, тогда другой вопрос - Вы разбираетесь хоть немного в базах данных серверов? у меня тут проблема возникла. в общем когда у паладина испепелитель улучшаешь, там при атаке противника лютый автоспам божественной бурей) кто то знает как это устранить?
 
Верх Низ