Моддинг World of Warcraft. Создание собственного класса на TSWoW.

Nyll

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

Класс, который мы будем создавать это класс под названием Бард.

Определение класса

Примечание. Если вы создаете класс, а затем удаляете его (или меняете modid:entityid), вам необходимо удалить config/ids.txt файл, так как текущий алгоритм генерации не работает с дырами в идентификаторах классов (ваш клиент выйдет из строя) .

Нашим первым шагом будет создание определения для нашего нового собственного класса. Создайте новый файл с именем Bard.ts в datascripts папке вашего мода. Добавьте следующий код:
Код:
import { std } from "wow/wotlk"

export const BARD_CLASS = std.Classes
    .create('mymod','bard','MAGE')
    .Races.add(['HUMAN','ORC','BLOODELF'])
    .Name.enGB.set('Bard')

Данный код создает новый класс с именем «Bard», основанный на классе Мага. Он будет доступен следующим расам: Люди, орки и кровавые эльфы. Запустите команду build data и войдите в меню создания персонажа. Вы должны увидеть, что ваш новый класс добавлен.

ukJD31O.png

Примечание о краше WoW при создании/удалении классов.

В World of Warcraft числовые идентификаторы классов должны строго возрастать без пропусков (начиная с 10, 11, 12 и т. д.), иначе клиент вылетит при запуске игры. TSWoW автоматически генерирует числовые идентификаторы при создании классов и сохраняет результат в файле config/ids.txt. Это вызовет проблемы, если вы создадите класс с одной парой модификатор/идентификатор, а затем либо измените мод/идентификатор, либо удалите класс и создадите другой с другой парой идентификаторов.

Чтобы решить эту проблему в процессе разработки, вы можете просто удалять файл config/ids.txt каждый раз, когда удаляете старый класс в своем коде перед перестройкой. Однако в продакшене вы должны сами решить, как справиться с эффектом полного удаления класса из игры, поскольку у многих игроков, скорее всего, будут персонажи этого класса. Поэтому вы можете вручную отредактировать файл ids.txt.

Настройки пользовательского интерфейса

Давайте изменим цвет пользовательского интерфейса класса и добавим описание. Добавьте следующее в файл Bard.ts.

Код:
// Изменяем цвет класса (тот что в списке игроков онлайн и т.д)
BARD_CLASS.UI.Color.set(0xcc0077)

// Добавить описание создания персонажа
BARD_CLASS.UI.Info.add('- Role: Damage, Heal')
BARD_CLASS.UI.Info.add('- Light Armor (Cloth)')
BARD_CLASS.UI.Info.add('- Controls multiple undead servants')
BARD_CLASS.UI.Info.add('- Uses mana as a resource')
BARD_CLASS.UI.Description.set("Bards raise and control the undead.")

Снова запускаем команду build data и заходим в меню создания персонажа и видим следующее:

AliuN9T.png


mDgNMRR.png

Характеристики

Изменить характеристики нашего нового класса также очень просто в TSWoW. Приведенный ниже код изменяет крит заклинаний/ближнего боя нашего нового класса.
Код:
// Критический удар заклинанием = 0.1*level
BARD_CLASS.Stats.SpellCrit.set((x,level)=>1337*level)
// Критический удар в ближнем бою = 0.1*level
BARD_CLASS.Stats.MeleeCrit.set((x,level)=>1337*level)

SkillLines

Классы обычно имеют некоторые типы заклинаний, связанные с ними, такие как Огонь для магов и Ликвидация для разбойников. SkillLines — это не то же самое, что ветка талантов, вместо этого они используются для классификации и классификации заклинаний. SkillLines — довольно сложная тема, но, к счастью, их использование для классовых навыков не требует ничего большего, чем просто их создание. Мы создадим два для нашего Барда, чтобы мы могли использовать их в следующем уроке о заклинаниях.

Добавьте следующее в конец файла Bard.ts, чтобы создать две линии навыков для класса Bard:
Код:
export const INSPIRATION_SKILL = std.SkillLines
    .create('tswow-introduction','inspiration-skill')
    .Category.CLASS.set()
    .RaceClassInfos.add([BARD_CLASS.Mask])
    .Name.enGB.set('Inspiration')

export const DEATH_SKILL = std.SkillLines
    .create('tswow-introduction','death-skill')
    .Category.CLASS.set()
    .RaceClassInfos.add([BARD_CLASS.Mask])
    .Name.enGB.set('Death')

Мы не будем использовать их до следующего урока, так что вы можете пока оставить их такими. Обратите внимание, как мы можем продолжать изменять свойства в длинной цепочке методов, просто переходя на новую строку и продолжая с . после того, как мы установим или добавим свойство? Это может помочь сделать код намного чище, чем постоянное повторное объявление переменной, которую мы хотим изменить, и приведенный выше код эквивалентен следующему:

Код:
export const INSPIRATION_SKILL = std.SkillLines
    .create('tswow-introduction','inspiration-skill')

INSPIRATION_SKILL.Category.CLASS.set()
INSPIRATION_SKILL.RaceClassInfos.add([BARD_CLASS.Mask])
INSPIRATION_SKILL.Name.enGB.set('Inspiration')

export const DEATH_SKILL = std.SkillLines
    .create('tswow-introduction','death-skill')

DEATH_SKILL.Category.CLASS.set()
DEATH_SKILL.RaceClassInfos.add([BARD_CLASS.Mask])
DEATH_SKILL.Name.enGB.set('Death')

Результат
  • Создали свой собственный класс "Bard"
  • Добавили его в меню создания персонажа
  • Изменили характеристики нашего класса
  • Созданы SkillLines, которые будут использоваться для определения того, какие заклинания принадлежат нашему классу.
Наш финальный код для Bard.ts выглядит следующим образом:
Код:
import { std } from "wow/wotlk"

export const BARD_CLASS = std.Classes
    .create('mymod','bard','MAGE')
    .Races.add(['HUMAN','ORC','BLOODELF'])
    .Name.enGB.set('Bard')


// Изменяем цвет дисплея

BARD_CLASS.UI.Color.set(0xcc0077)

// Добавить описание создания персонажа

BARD_CLASS.UI.Info.add('- Role: Damage, Heal')
BARD_CLASS.UI.Info.add('- Light Armor (Cloth)')
BARD_CLASS.UI.Info.add('- Controls multiple undead servants')
BARD_CLASS.UI.Info.add('- Uses mana as a resource')
BARD_CLASS.UI.Description.set("Bards raise and control the undead.")


// Критический удар заклинанием = 0.1*level
BARD_CLASS.Stats.SpellCrit.set((x,level)=>1337*level)
// Критический удар в ближнем бою = 0.1*level
BARD_CLASS.Stats.MeleeCrit.set((x,level)=>1337*level)

export const INSPIRATION_SKILL = std.SkillLines
    .create('tswow-introduction','inspiration-skill')
    .Category.CLASS.set()
    .RaceClassInfos.add([BARD_CLASS.Mask])
    .Name.enGB.set('Inspiration')

export const DEATH_SKILL = std.SkillLines
    .create('tswow-introduction','death-skill')
    .Category.CLASS.set()
    .RaceClassInfos.add([BARD_CLASS.Mask])
    .Name.enGB.set('Death')
 
Верх Низ