Всем привет! Я решил временно не дописывать 3 часть по созданию кастомного логин скрина, а решил написать что-то интересное. В данной статье мы научимся создавать собственный класс и добавлять его в клиент и на сервер. Ну что же, приступим!
Шаг 1. Редактирование ChrClasses.dbc
Первый файл, который необходимо изменить, является ChrClasses.dbc. В нём хранится информация о всех существующих классах, которые доступны персонажу. Если на данном этапе Вы уже не понимаете откуда его взять, то вам необходимо ознакомиться с данными 2-мя статьями: статья 1 и статья 2. Данный dbc файл извлекаем из patch-ruRU-3.MPQ. (где ruRU - это код локали, языка который вы используете).
Открываем MyDBCEditor или WDBX Editor и добавляем в него patch-ruRU-3.MPQ
Дополнительная информация доступна здесь: DB/ChrClasses - wowdev
Теперь же давайте добавим строку со своим классом. Я назову свой класс "Бард". Я решил, что у него будет энергия как у разбойников и друидов в форме кошки. Так же добавил склонение, у женских персонажей отныне будет "Бардка"
Обратите внимание, что Filename обязательно через CAPSLOCK! В верхней таблице об этом упомянуто.
Шаг 2. Редактирование CharBaseInfo.dbc
Данный файл определяет доступность классов для разных рас. Данный файл извлекаем из locale-ruRU.MPQ.
Я хочу сделать, чтобы за новый класс могли играть только люди. Чтобы это сделать необходимо указать RaceID = 1, ClassID = 12 (равняется номеру строки из первого шага).
Вы сразу задаёте вопрос, а как узнать ID? К счастью, WinWoolF опубликовал для вас на данном форуме информацию об этом.
Список ID всех классов в World of Warcraft (информация по поводу классов относится к более новым аддонам, мы делаем на базе WoTLK, и тут нет само собой Охотника на демонов)
Список ID всех рас в World of Warcraft
Дополнительная информация доступна здесь: DB/CharBaseInfo - wowdev
Шаг 3. Добавление изменённых DBC на сервер
Мы внесли изменения в DBC, нам нужно сообщить об этих изменениях не только клиенту, но и серверу! Так что копируем наши изменённые CharBaseInfo.dbc и ChrClasses.dbc и с заменой закидываем в dbc нашего сервера TrinityCore.
Загружаем именно в ruRU или другой язык, который вы редактировали.
Далее запускаем локальный сервер, заходим в игру и пробуем создать персонажа
На данном этапе вы можете столкнуться со следующей ошибкой "To many classes! Update MAX_CLASSES_PER_RACE"
Исправим эту ошибку в шаге ниже, чтобы всё было более структурированно.
Шаг 4. Добавление иконки с новым классом в меню создания персонажа
Чтобы решить эту проблему, нам нужно добавить новую кнопку для нового класса в
Также необходимо изменить
Извлекаем Interface из patch-ruRU-2.MPQ + patch-ruRU-3.MPQ и начинаем редактировать вышеупомянутые файлы
Особых знаний Lua или ещё чего-либо здесь не нужно, достаточно базового английского и повторения за мной. Открываем первым делом
И добавим сюда
Так же нам необходимо увеличить значение константы
MAX_CLASSES_PER_RACE, по умолчанию значение равняется 10. Меняем на 11 на 3-й строке
Теперь нам необходимо добавить саму иконку с нашим новым классом в меню. Открываем
И сразу перед этой строкой добавим следующий код:
Если вы всё сделали правильно, то у вас получится вот так:
Далее нам необходимо добавить информацию о новом классе в файл
Сразу после данной строки добавляем следующий код:
То есть я по сути скопировал весь код связанный с варами и изменил под себя. Выглядит это следующим образом:
Это ещё не всё. Необходимо так же выводить ошибку, в случае если та или иная раса не может играть за Барда.
Снова выполняем поиск по файлу и находим строку
Ну и для наглядности как обычно прикреплю скриншот:
Я предоставлю ссылки на файлы в самом конце статьи, но по сути здесь всё сводится к добавлению информации о новом классе.
Теперь мы можем видеть наш класс на экране создания персонажа.
Шаг 5. Стартовая локация нового класса и базовые характеристики.
Теперь необходимо добавить основные данные базы данных на стороне сервера. Сделаем это мы с помощью простого SQL-запроса, который содержит в себе базовые характеристики класса и координаты в данном случае Элвиннского леса.
После выполнения этих 3 простейших SQL-запросов наш персонаж с классом Бард появится в Элвиннском лесу.
НО! Даже если сейчас попробовать создать персонажа с нашим новым классом мы получим ошибку "Account {здесь ID аккаунта} tried to create a character named '{здесь имя персонажа}' with an invalid race/classes pair"
Шаг 6. Добавление нового класса в ядро TrinityCore.
Дело в том, что наш TrinityCore не знает о таком классе и нам нужно добавить код для обработки нового класса. К счастью, это довольно просто. Для начала нужно открыть файл SharedDefines.h, который лежит в директории src/server/shared. Добавим сразу на 140 строке запятую и после неё добавим следующую строчку:
Так же на 145-й строке нужно изменить значение константы MAX_CLASSES с 11 до 12.
Далее чуть ниже необходимо заменить код:
На следующий код:
Должно получиться вот так:
Не забудьте перекомпилировать ядро TrinityCore, чтобы изменения вступили в силу!
Теперь мы можем войти в игру новым классом, но когда вы откроете ветку талантов или окно персонажа, то у вас крашнется (вылетит) клиент. Это потому, что нам не хватает данных gt DBC для нового класса.
Шаг 7. Автоматические добавление данных о новом классе в DBC сервера.
Stoneharry написал небольшую программу для автоматического добавления этих данных в файлы DBC. Выполнение этого вручную было бы медленной утомительной задачей и большой шанс допустить ошибку. Сама программа будет прикреплена в архиве в самом низу.
Открываем PlayerClassStatDBCUtil, а в ней открываем файл Program.cs через Microsoft Visual Studio, в моём случае Microsoft Visual Studio 2019 и видим следующую картину:
Необходимо заменить
Так же не забудьте в переменной указать свой путь и путь для экспорта:
Теперь нам необходимо запустить программу следующим образом:
Если у вас не запускается программа с ошибкой, которая связана с версией .NET Framework, откройте файл PlayerClassStatDBCUtil.csproj и Microsoft Visual Studio предложит вам скачать необходимую версию.
SkillLineAbilityDBCUtil по сути всё тоже самое.
После того как мы перекомпилировали ядро нашего сервера, можем заходить в игру и убедиться в том, что теперь клиент не вылетает и всё хорошо.
Скачать иконку для меню создания персонажа и софт от stoneharry: Яндекс
На такой прекрасной ноте мы закончим, продолжение следует...
Шаг 1. Редактирование ChrClasses.dbc
Первый файл, который необходимо изменить, является ChrClasses.dbc. В нём хранится информация о всех существующих классах, которые доступны персонажу. Если на данном этапе Вы уже не понимаете откуда его взять, то вам необходимо ознакомиться с данными 2-мя статьями: статья 1 и статья 2. Данный dbc файл извлекаем из patch-ruRU-3.MPQ. (где ruRU - это код локали, языка который вы используете).
Открываем MyDBCEditor или WDBX Editor и добавляем в него patch-ruRU-3.MPQ
Колонка | поле | Тип | Описание |
---|---|---|---|
0 | ID | Integer | |
1 | Unknown | Integer | Охотник, Шаман и Разбойник получили 1, Рыцарь Смерти 9; другие 0 |
2 | PowerType | Integer | 0 = Мана, 1 = Ярость, 2 = Фокус, 3 = Энергия, 4 = Счастье, 6 = Руны |
3 | m_petNameToken | String | Тип питомца. Чернокнижник - 101 (ДЕМОН), а все остальные классы - 1 (ПЭТ). |
4-20 | Name | Loc | |
21-37 | Name_female | Loc | |
38-54 | Name_male | Loc | |
55 | fileName | String | КАПС, английский |
56 | spellClassSet | Integer | See below. |
57 | Flags | Integer | See below. |
58 | Camera | iRefID | Используется для вступительного ролика. Только у рыцаря смерти 165, у остальных 0 |
59 | required_expansion | Integer | 0=WoW, 1=TBC, 2=Wotlk |
Дополнительная информация доступна здесь: DB/ChrClasses - wowdev
Теперь же давайте добавим строку со своим классом. Я назову свой класс "Бард". Я решил, что у него будет энергия как у разбойников и друидов в форме кошки. Так же добавил склонение, у женских персонажей отныне будет "Бардка"
Обратите внимание, что Filename обязательно через CAPSLOCK! В верхней таблице об этом упомянуто.
Шаг 2. Редактирование CharBaseInfo.dbc
Данный файл определяет доступность классов для разных рас. Данный файл извлекаем из locale-ruRU.MPQ.
Я хочу сделать, чтобы за новый класс могли играть только люди. Чтобы это сделать необходимо указать RaceID = 1, ClassID = 12 (равняется номеру строки из первого шага).
Вы сразу задаёте вопрос, а как узнать ID? К счастью, WinWoolF опубликовал для вас на данном форуме информацию об этом.
Список ID всех классов в World of Warcraft (информация по поводу классов относится к более новым аддонам, мы делаем на базе WoTLK, и тут нет само собой Охотника на демонов)
Список ID всех рас в World of Warcraft
Дополнительная информация доступна здесь: DB/CharBaseInfo - wowdev
Шаг 3. Добавление изменённых DBC на сервер
Мы внесли изменения в DBC, нам нужно сообщить об этих изменениях не только клиенту, но и серверу! Так что копируем наши изменённые CharBaseInfo.dbc и ChrClasses.dbc и с заменой закидываем в dbc нашего сервера TrinityCore.
Загружаем именно в ruRU или другой язык, который вы редактировали.
Далее запускаем локальный сервер, заходим в игру и пробуем создать персонажа
На данном этапе вы можете столкнуться со следующей ошибкой "To many classes! Update MAX_CLASSES_PER_RACE"
Исправим эту ошибку в шаге ниже, чтобы всё было более структурированно.
Шаг 4. Добавление иконки с новым классом в меню создания персонажа
Чтобы решить эту проблему, нам нужно добавить новую кнопку для нового класса в
Interface\GlueXML\CharacterCreate.xml
. Нам также нужно изменить файл CharacterCreate.lua
в том же каталоге, чтобы добавить texcoord смещение для «BARD» и увеличить переменную MAX_CLASSES_PER_RACE
. Также добавьте все строки, необходимые барду, в GlueStrings.lua
, также в каталоге GlueXML
. Вы можете найти «WARRIOR» и скопировать все эти строки, переименовав их.Также необходимо изменить
Interface\GLUES\CHARACTERCREATE\UI-CHARACTERCREATE-CLASSES.blp
, чтобы добавить новый значок. Это то, на что направлено смещение texcoord.Извлекаем Interface из patch-ruRU-2.MPQ + patch-ruRU-3.MPQ и начинаем редактировать вышеупомянутые файлы
Особых знаний Lua или ещё чего-либо здесь не нужно, достаточно базового английского и повторения за мной. Открываем первым делом
Interface\GlueXML\CharacterCreate.lua
и видим здесь следующую картину:
Код:
CLASS_ICON_TCOORDS = {
["WARRIOR"] = {0, 0.25, 0, 0.25},
["MAGE"] = {0.25, 0.49609375, 0, 0.25},
["ROGUE"] = {0.49609375, 0.7421875, 0, 0.25},
["DRUID"] = {0.7421875, 0.98828125, 0, 0.25},
["HUNTER"] = {0, 0.25, 0.25, 0.5},
["SHAMAN"] = {0.25, 0.49609375, 0.25, 0.5},
["PRIEST"] = {0.49609375, 0.7421875, 0.25, 0.5},
["WARLOCK"] = {0.7421875, 0.98828125, 0.25, 0.5},
["PALADIN"] = {0, 0.25, 0.5, 0.75},
["DEATHKNIGHT"] = {0.25, 0.49609375, 0.5, 0.75},
};
И добавим сюда
["BARD"] = {0.25, 0.49609375, 0.5, 0.75},
, чтобы получилось вот так:Так же нам необходимо увеличить значение константы
MAX_CLASSES_PER_RACE, по умолчанию значение равняется 10. Меняем на 11 на 3-й строке
Теперь нам необходимо добавить саму иконку с нашим новым классом в меню. Открываем
Interface\GlueXML\CharacterCreate.xml
. В данном файле находим на 587 строке следующую строчку:
<Button name="CharCreateRandomizeButton" inherits="GlueButtonSmallTemplate" text="RANDOMIZE">
И сразу перед этой строкой добавим следующий код:
Код:
<CheckButton name="CharacterCreateClassButton11" inherits="CharacterCreateClassButtonTemplate" id="11">
<Anchors>
<Anchor point="RIGHT" relativeTo="CharacterCreateClassButton10" relativePoint="RIGHT" x="45" y="0"/>
</Anchors>
</CheckButton>
Если вы всё сделали правильно, то у вас получится вот так:
Далее нам необходимо добавить информацию о новом классе в файл
Interface\GlueXML\GlueStrings.lua
. В данном файле на 311 строке находимCLASS_INFO_WARRIOR4 = "- Пользуется яростью как ресурсом.";
Сразу после данной строки добавляем следующий код:
Код:
CLASS_INFO_BARD0 = "- Роль: Бард";
CLASS_INFO_BARD1 = "- Легкая броня (ткань)";
CLASS_INFO_BARD2 = "- Наносит магический уровень с помощью посоха.";
CLASS_INFO_BARD3 = "- Акцент на проклятиях, вытягивании сил и эффектах, наносящих периодический урон.";
CLASS_INFO_BARD4 = "- Использует энергию в качестве ресурса.";
CLASS_BARD = "Барды - описание класса";
CLASS_BARD_FEMALE = "Барды - описание класса";
То есть я по сути скопировал весь код связанный с варами и изменил под себя. Выглядит это следующим образом:
Это ещё не всё. Необходимо так же выводить ошибку, в случае если та или иная раса не может играть за Барда.
Снова выполняем поиск по файлу и находим строку
WARRIOR_DISABLED
на 861-й строке файла. Сразу после добавим следующий код:
Код:
BARD_DISABLED = "Бард\nЭтот класс доступен другим расам.";
Я предоставлю ссылки на файлы в самом конце статьи, но по сути здесь всё сводится к добавлению информации о новом классе.
Теперь мы можем видеть наш класс на экране создания персонажа.
Шаг 5. Стартовая локация нового класса и базовые характеристики.
Теперь необходимо добавить основные данные базы данных на стороне сервера. Сделаем это мы с помощью простого SQL-запроса, который содержит в себе базовые характеристики класса и координаты в данном случае Элвиннского леса.
SQL:
INSERT INTO playercreateinfo (race, class, map, zone, position_x, position_y, position_z, orientation) VALUES (1, 12, 0, 12, -8949.95, -132.493, 83.5312, 0);
INSERT INTO player_levelstats (race, class, LEVEL, str, agi, sta, inte, spi) VALUES (1, 12, 1, 17, 20, 21, 23, 25);
INSERT INTO player_classlevelstats (class, LEVEL, basehp, basemana) VALUES (12, 1, 20, 0);
После выполнения этих 3 простейших SQL-запросов наш персонаж с классом Бард появится в Элвиннском лесу.
НО! Даже если сейчас попробовать создать персонажа с нашим новым классом мы получим ошибку "Account {здесь ID аккаунта} tried to create a character named '{здесь имя персонажа}' with an invalid race/classes pair"
Шаг 6. Добавление нового класса в ядро TrinityCore.
Дело в том, что наш TrinityCore не знает о таком классе и нам нужно добавить код для обработки нового класса. К счастью, это довольно просто. Для начала нужно открыть файл SharedDefines.h, который лежит в директории src/server/shared. Добавим сразу на 140 строке запятую и после неё добавим следующую строчку:
CLASS_BARD = 12, // TITLE Bard
, чтобы получилось вот так:Так же на 145-й строке нужно изменить значение константы MAX_CLASSES с 11 до 12.
Далее чуть ниже необходимо заменить код:
C++:
#define CLASSMASK_ALL_PLAYABLE \
((1<<(CLASS_WARRIOR-1))|(1<<(CLASS_PALADIN-1))|(1<<(CLASS_HUNTER-1))| \
(1<<(CLASS_ROGUE-1)) |(1<<(CLASS_PRIEST-1)) |(1<<(CLASS_SHAMAN-1))| \
(1<<(CLASS_MAGE-1)) |(1<<(CLASS_WARLOCK-1))|(1<<(CLASS_DRUID-1)) | \
(1<<(CLASS_DEATH_KNIGHT-1)))
На следующий код:
C++:
#define CLASSMASK_ALL_PLAYABLE \
((1<<(CLASS_WARRIOR-1))|(1<<(CLASS_PALADIN-1))|(1<<(CLASS_HUNTER-1))| \
(1<<(CLASS_ROGUE-1)) |(1<<(CLASS_PRIEST-1)) |(1<<(CLASS_SHAMAN-1))| \
(1<<(CLASS_MAGE-1)) |(1<<(CLASS_WARLOCK-1))|(1<<(CLASS_DRUID-1)) | \
(1<<(CLASS_DEATH_KNIGHT-1))|(1<<(CLASS_BARD-1)))
Должно получиться вот так:
Не забудьте перекомпилировать ядро TrinityCore, чтобы изменения вступили в силу!
Теперь мы можем войти в игру новым классом, но когда вы откроете ветку талантов или окно персонажа, то у вас крашнется (вылетит) клиент. Это потому, что нам не хватает данных gt DBC для нового класса.
Шаг 7. Автоматические добавление данных о новом классе в DBC сервера.
Stoneharry написал небольшую программу для автоматического добавления этих данных в файлы DBC. Выполнение этого вручную было бы медленной утомительной задачей и большой шанс допустить ошибку. Сама программа будет прикреплена в архиве в самом низу.
Открываем PlayerClassStatDBCUtil, а в ней открываем файл Program.cs через Microsoft Visual Studio, в моём случае Microsoft Visual Studio 2019 и видим следующую картину:
Необходимо заменить
D:/WoW Resources/2019_TrinityCore/DBC Temp/
на наш путь. В моём случае это C:\WoWMod\Server\Core\bin\Release\Data\dbc
. Только обратите внимание, что здесь нужно использовать обычные слэши в пути, а не обратные. То есть должно быть так: C:/WoWMod/Server/Core/bin/Release/Data/dbc
. В правой части находится путь до экспорта. Я буду использовать C:/WoWMod/Server/Core/bin/Release/Data/dbc/Export
Так же не забудьте в переменной указать свой путь и путь для экспорта:
Теперь нам необходимо запустить программу следующим образом:
Если у вас не запускается программа с ошибкой, которая связана с версией .NET Framework, откройте файл PlayerClassStatDBCUtil.csproj и Microsoft Visual Studio предложит вам скачать необходимую версию.
SkillLineAbilityDBCUtil по сути всё тоже самое.
После того как мы перекомпилировали ядро нашего сервера, можем заходить в игру и убедиться в том, что теперь клиент не вылетает и всё хорошо.
Скачать иконку для меню создания персонажа и софт от stoneharry: Яндекс
На такой прекрасной ноте мы закончим, продолжение следует...
Вложения
Последнее редактирование: