Создание кастомной расы. Часть 1. Техническая часть.
Внимание, в этой части я не буду описывать создание моделей для расы. Для этого я возьму те расы, которые уже сделали Blizzard, но они не активны. Возьмем гоблинов и фел-орков.
Внимание! Я использую ядро Mangos! Если у вас что-то другое, то возможно, вам придется адаптировать серверную часть.
Напоминание:
Когда вы редактируете DBC файл, вы должны также скопировать его копию в сервер
Когда вы редактируете DBC файл, вы должны также скопировать его копию в сервер
Оглавление
Серверные измения
[MaNGOS] Core (ядро)
[MaNGOS] DB (база данных)
Модификации клиента
Изменение экрана создания персонажа
Создание стартовой экипировки
Отображение шлемов
Активация языка и скиллов
Активация репутации
Файлы для редактирования
DataBase Files Client (DBC)
ChrRaces.dbc
CharBaseInfo.dbc
CharStartOutfit.dbc
SkillLineAbility.dbc
SkillRaceClassInfo.dbc
Faction.dbc
Файлы интерфейса
GlueStrings.lua
CharacterCreate.lua
CharacterCreate.xml
Серверные файлы
[MaNGOS] SharedDefines.h
Изменение экрана создания персонажа
В этом шаге мы увидим только как изменить создание персонажа. Иконки и описания добавим позже.
Откройте ChrRaces.dbc и модифицируйте строки, относящиеся к гоблинам и фел-оркам.
Найдите :
9,1,1,0x0,6894,6895,"Go",7,7,15007,0x448,"Goblin",0,0x2,,,"Gobelin",,,,,,,,,,,,,,0xFF01FE,,,"Gobeline",,,,,,,,,,,,,,0xFF01CC,,,"Gobelin",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NONE","NORMAL",0,
12,5,1,0x0,16981,16980,"Fo",7,7,15007,0x448,"FelOrc",0,0x2,,,"Gangr'orc",,,,,,,,,,,,,,0xFF01FE,,,"Gangr'orque",,,,,,,,,,,,,,0xFF01CC,,,"Gangr'orc",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NORMAL","NORMAL",0,
Значение 2 колонки должно быть изменено на 12, чтобы сделать расу играбельной.
Значение 4 колонки зависит от фракции расы, подробности смотрите в Faction.dbc
Значение 8 колонки - 1 для Орды и 7 для Альянса
Значение 4 колонки зависит от фракции расы, подробности смотрите в Faction.dbc
Значение 8 колонки - 1 для Орды и 7 для Альянса
Пример: :
9,12,1,4140,6894,6895,"Go",1,7,15007,0x448,"Goblin",0,0x2,,,"Gobelin",,,,,,,,,,,,,,0xFF01FE,,,"Gobeline",,,,,,,,,,,,,,0xFF01CC,,,"Gobelin",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NONE","NORMAL",0,
9,12,1,4140,6894,6895,"Go",1,7,15007,0x448,"Goblin",0,0x2,,,"Gobelin",,,,,,,,,,,,,,0xFF01FE,,,"Gobeline",,,,,,,,,,,,,,0xFF01CC,,,"Gobelin",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NONE","NORMAL",0,
12,12,1,4141,16981,16980,"Fo",7,7,15007,0x448,"FelOrc",0,0x2,,,"Gangr'orc",,,,,,,,,,,,,,0xFF01FE,,,"Gangr'orque",,,,,,,,,,,,,,0xFF01CC,,,"Gangr'orc",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NORMAL","NORMAL",0,
Теперь откройте CharBaseInfo.dbc, этот файл определяет сочетания раса/класс.
Пока что добавьте только две линии в файл:
9,1,
12,1,
9 и 12 это IDsобоих рас и 1 - это ID воина. Только воины могут быть созданы, до тех пор пока вы не добавите другие сочетания.
Для работы патча на расу необходимо заменить wow.exe на пропатченный.
Когда сделаете, откройте эти файлы :
Interface\GlueXML\GlueStrings.lua
Interface\GlueXML\CharacterCreate.lua
Interface\GlueXML\CharacterCreate.xml
Interface\GlueXML\CharacterCreate.lua
Interface\GlueXML\CharacterCreate.xml
В GlueStrings.lua :
Найдите :
RACE_CHANGE_IN_PROGRESS = "Mise à jour de la race...";
RACE_CHANGE_IN_PROGRESS = "Mise à jour de la race...";
Добавьте :
RACE_INFO_GOBLIN = "Informations sur les Gobelins.";
RACE_INFO_GOBLIN = "Informations sur les Gobelins.";
RACE_INFO_GOBLIN_FEMALE = "Informations sur les Gobelines.";
RACE_INFO_FELORC = "Informations sur les Gangr'orcs.";
RACE_INFO_FELORC_FEMALE = "Informations sur les Gangr'orques.";
Найдите :
ABILITY_INFO_BLOODELF1 = "- Compétence Enchantement améliorée.";
ABILITY_INFO_BLOODELF1 = "- Compétence Enchantement améliorée.";
Перед этим добавьте :
ABILITY_INFO_GOBLIN1 = "- Compétence Gobelins, ligne 1";
ABILITY_INFO_GOBLIN1 = "- Compétence Gobelins, ligne 1";
ABILITY_INFO_GOBLIN2 = "- Compétence Gobelins, ligne 2";
ABILITY_INFO_GOBLIN3 = "- Compétence Gobelins, ligne 3";
ABILITY_INFO_GOBLIN4 = "- Compétence Gobelins, ligne 4";
ABILITY_INFO_FELORC1 = "- Compétence Gangr'Orcs, ligne 1";
ABILITY_INFO_FELORC2 = "- Compétence Gangr'Orcs, ligne 2";
ABILITY_INFO_FELORC3 = "- Compétence Gangr'Orcs, ligne 3";
ABILITY_INFO_FELORC4 = "- Compétence Gangr'Orcs, ligne 4";
Изменяйте эти строки как вам угодно, это информация, которая появляется при создании персонажа.
В CharacterCreate.lua :
Найдите:
MAX_RACES = 10;
MAX_RACES = 10;
Замените на:
MAX_RACES = 12;
MAX_RACES = 12;
Найдите:
["DRAENEI_MALE"] = {0.5, 0.625, 0, 0.25},
["DRAENEI_MALE"] = {0.5, 0.625, 0, 0.25},
["DRAENEI_FEMALE"] = {0.5, 0.625, 0.5, 0.75},
Добавьте после:
["GOBLIN_MALE"] = {0.5, 0.625, 0, 0.25},
["GOBLIN_MALE"] = {0.5, 0.625, 0, 0.25},
["GOBLIN_FEMALE"] = {0.5, 0.625, 0, 0.25},
["FELORC_MALE"] = {0.5, 0.625, 0, 0.25},
["FELORC_FEMALE"] = {0.5, 0.625, 0, 0.25},
В CharacterCreate.xml :
{{Найдите :
<CheckButton name="CharacterCreateRaceButton1" inherits="CharacterCreateRaceButtonTemplate" id="1">
<CheckButton name="CharacterCreateRaceButton1" inherits="CharacterCreateRaceButtonTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="-50" y="-61"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton2" inherits="CharacterCreateRaceButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton1" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton3" inherits="CharacterCreateRaceButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton2" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton4" inherits="CharacterCreateRaceButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton3" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton5" inherits="CharacterCreateRaceButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton4" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton6" inherits="CharacterCreateRaceButtonTemplate" id="6">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="50" y="-61"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton7" inherits="CharacterCreateRaceButtonTemplate" id="7">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton6" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton8" inherits="CharacterCreateRaceButtonTemplate" id="8">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton7" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton9" inherits="CharacterCreateRaceButtonTemplate" id="9">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton8" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton10" inherits="CharacterCreateRaceButtonTemplate" id="10">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton9" relativePoint="BOTTOMLEFT" x="0" y="-21"/>
</Anchors>
</CheckButton>
Замените на (вы можете редактировать этот код):
<CheckButton name="CharacterCreateRaceButton1" inherits="CharacterCreateRaceButtonTemplate" id="1">
<CheckButton name="CharacterCreateRaceButton1" inherits="CharacterCreateRaceButtonTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="-50" y="-50"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton2" inherits="CharacterCreateRaceButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton1" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton3" inherits="CharacterCreateRaceButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton2" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton4" inherits="CharacterCreateRaceButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton3" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton5" inherits="CharacterCreateRaceButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton4" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton7" inherits="CharacterCreateRaceButtonTemplate" id="7">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="50" y="-50"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton8" inherits="CharacterCreateRaceButtonTemplate" id="8">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton7" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton9" inherits="CharacterCreateRaceButtonTemplate" id="9">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton8" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton10" inherits="CharacterCreateRaceButtonTemplate" id="10">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton9" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton12" inherits="CharacterCreateRaceButtonTemplate" id="12">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton10" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton11" inherits="CharacterCreateRaceButtonTemplate" id="11">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton12" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>
<CheckButton name="CharacterCreateRaceButton6" inherits="CharacterCreateRaceButtonTemplate" id="6">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharacterCreateRaceButton5" relativePoint="BOTTOMLEFT" x="0" y="-10"/>
</Anchors>
</CheckButton>}}
После этого шага вы должны иметь две расы на экране создания персонажа.
Изменения в ядре [MaNGOS]
Откройте mangos\src\game\SharedDefines.h :
Найдите:
enum Races
enum Races
{{{
RACE_HUMAN = 1,
RACE_ORC = 2,
RACE_DWARF = 3,
RACE_NIGHTELF = 4,
RACE_UNDEAD_PLAYER = 5,
RACE_TAUREN = 6,
RACE_GNOME = 7,
RACE_TROLL = 8,
RACE_GOBLIN = 9,
RACE_BLOODELF = 10,
RACE_DRAENEI = 11,
RACE_FEL_ORC = 12,
RACE_NAGA = 13,
RACE_BROKEN = 14,
RACE_SKELETON = 15,
RACE_VRYKUL = 16,
RACE_TUSKARR = 17,
RACE_FOREST_TROLL = 18,
RACE_TAUNKA = 19,
RACE_NORTHREND_SKELETON = 20,
RACE_ICE_TROLL = 21
};
Замените на :
enum Races
enum Races
{
RACE_HUMAN = 1,
RACE_ORC = 2,
RACE_DWARF = 3,
RACE_NIGHTELF = 4,
RACE_UNDEAD_PLAYER = 5,
RACE_TAUREN = 6,
RACE_GNOME = 7,
RACE_TROLL = 8,
RACE_GOBLIN = 9,
RACE_BLOODELF = 10,
RACE_DRAENEI = 11,
RACE_FEL_ORC = 12,
RACE_NAGA = 13,
RACE_BROKEN = 14,
RACE_SKELETON = 15,
RACE_VRYKUL = 16,
RACE_TUSKARR = 17,
RACE_FOREST_TROLL = 18,
RACE_TAUNKA = 19,
RACE_NORTHREND_SKELETON = 20,
RACE_ICE_TROLL = 21
};
Это позволит создать персонажей за новые расы.
Найдите :
#define MAX_RACES 12
#define MAX_RACES 12
Замените на :
#define MAX_RACES 13
#define MAX_RACES 13
Это количества максимума рас + 1, 12 (felorc) + 1 = 13 в нашем случае. Если вы сделаете только гоблинов, менять не нужно.
Найдите :
#define RACEMASK_ALL_PLAYABLE \
#define RACEMASK_ALL_PLAYABLE \
((1<<(RACE_HUMAN-1)) |(1<<(RACE_ORC-1)) |(1<<(RACE_DWARF-1)) | \
(1<<(RACE_NIGHTELF-1))|(1<<(RACE_UNDEAD_PLAYER-1))|(1<<(RACE_TAUREN-1)) | \
(1<<(RACE_GNOME-1)) |(1<<(RACE_TROLL-1)) |(1<<(RACE_BLOODELF-1))| \
(1<<(RACE_DRAENEI-1)) )
Замените на :
#define RACEMASK_ALL_PLAYABLE \
#define RACEMASK_ALL_PLAYABLE \
((1<<(RACE_HUMAN-1)) |(1<<(RACE_ORC-1)) |(1<<(RACE_DWARF-1)) | \
(1<<(RACE_NIGHTELF-1))|(1<<(RACE_UNDEAD_PLAYER-1))|(1<<(RACE_TAUREN-1)) | \
(1<<(RACE_GNOME-1)) |(1<<(RACE_TROLL-1)) |(1<<(RACE_GOBLIN-1))| \
(1<<(RACE_BLOODELF-1))|(1<<(RACE_DRAENEI-1)) |(1<<(RACE_FEL_ORC-1)) )}}
Изменения в базе данных [MaNGOS]
Добавляем спеллы к Goblin Warrior (скопировано у Human Warrior) :
Добавляем спеллы Fel Ors Warrior (скопировано из Orc Warrior) :
Активируем кнопки для Goblin Warrior (скопировано из Human Warrior) :
Активируем кнопки Fel Orc Warrior (скопировано из Orc Warrior) :
Стартовая локация Goblin Warrior (= Humans) :
INSERT INTO playercreateinfo (race, class, map, zone, position_x, position_y, position_z) VALUES ('9','1','0','12','-8949.95','-132.493','83.5312');
Стартовая локация Fel Orc Warrior (= Orcs)
INSERT INTO playercreateinfo (race, class, map, zone, position_x, position_y, position_z) VALUES ('12','1','1','14','-618.518','-4251.67','38.718');
Уровни для Goblin Warrior скопировано от Human Warrior)
Уровни для Fel Orc Warrior (скопировано из Orc Warrior)
Создание стартовой экипировки
Откройте CharStartOutfit.dbc :
Например, в конце файла :
380,9,1,0,0,38,39,40,0,49778,-1,-1,6948,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9891,9892,10141,-1,2380,-1,-1,6418,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,17,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
380,9,1,0,0,38,39,40,0,49778,-1,-1,6948,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9891,9892,10141,-1,2380,-1,-1,6418,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,17,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
381,9,1,1,0,38,39,40,0,49778,-1,-1,6948,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9891,9892,10141,-1,2380,-1,-1,6418,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,17,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
382,12,1,0,0,6125,139,140,6948,12282,0,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9995,9988,9992,6418,22291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,0,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
383,12,1,1,0,6125,139,140,6948,12282,0,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9995,9988,9992,6418,22291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,0,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
1st column : уникальный ID.
2nd column : ID расы.
3th column : ID класса.
4th column : Пол персонажа.
2nd column : ID расы.
3th column : ID класса.
4th column : Пол персонажа.
Больше информации здесь: : CharStartOutfit.dbc
Настройка отображения шлемов
Откройте ChrRaces.dbc :
В 7 колонке у вас есть аббревиатуры рас, например Go для GOBLIN. Эти аббревиатуры используются только для отображения шлемов, Поставьте Hu для гоблина (Шлем как у людей).
В 7 колонке у вас есть аббревиатуры рас, например Go для GOBLIN. Эти аббревиатуры используются только для отображения шлемов, Поставьте Hu для гоблина (Шлем как у людей).
Проблема: Шлемы могут быть расположены криво по отношению к голове.. ...Чтобы пофиксить это подвигайте Attachment Point No. 11 (Эта точка отвечает за расположение шлема) на M2 моделях (GoblinMale.m2 и GoblinFemale.m2, например,Вы можете использовать Mod-It для этого.
Ред. Skarn
Ред. MegaBlax
Вам понадобиться программа для конвертирования из dbc в csv и обратно. Так же программа Navicat для заливки sql файлов и управлением сервера.