World of Warcraft Modmaking: Создание кастомной расы. Часть 1. Техническая часть

» Модмейкинг: Раздел 1

Создание кастомной расы. Часть 1. Техническая часть.

Внимание, в этой части я не буду описывать создание моделей для расы. Для этого я возьму те расы, которые уже сделали Blizzard, но они не активны. Возьмем гоблинов и фел-орков.
Внимание! Я использую ядро Mangos! Если у вас что-то другое, то возможно, вам придется адаптировать серверную часть.
Напоминание:
Когда вы редактируете 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&quo​t;,,,,,,,,,,,,,,0xFF01FE,,,"Gangr'orque",,,,,,,,,,,,,,0xFF01CC,,,"Gangr'orc",,,,​,,,,,,,,,,0xFF01CC,"NORMAL","NORMAL","NORMAL",0,
Значение 2 колонки должно быть изменено на 12, чтобы сделать расу играбельной.
Значение 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,
12,12,1,4141,16981,16980,"Fo",7,7,15007,0x448,"FelOrc",0,0x2,,,"Gangr'orc&q​uot;,,,,,,,,,,,,,,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
» В GlueStrings.lua :
Найдите :
RACE_CHANGE_IN_PROGRESS = "Mise à jour de la race...";
Добавьте :
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_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 = 12;
Найдите:
["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_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">
<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">
<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
{{{
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
{
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 13
Это количества максимума рас + 1, 12 (felorc) + 1 = 13 в нашем случае. Если вы сделаете только гоблинов, менять не нужно.
Найдите :
#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 \
((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) :
SET @NEW_RACE = 9; -- ID расы.
SET @NEW_CLASS = 1; -- ID класса.
SET @COPY_RACE = 1; -- ID расы, откуда копируем данные.
DELETE FROM `playercreateinfo_spell` WHERE race = @NEW_RACE AND class = @NEW_CLASS ;
INSERT INTO `playercreateinfo_spell` (`race`, `class`, `Spell`, `Note`)
SELECT @NEW_RACE, @NEW_CLASS, `Spell`, `Note` FROM `playercreateinfo_spell` WHERE race = @COPY_RACE AND class = @NEW_CLASS;
» Добавляем спеллы Fel Ors Warrior (скопировано из Orc Warrior) :
SET @NEW_RACE = 12; -- ID of adding race.
SET @NEW_CLASS = 1; -- ID of class of the new race.
SET @COPY_RACE = 2; -- ID of the race where we copy datas.
DELETE FROM `playercreateinfo_spell` WHERE race = @NEW_RACE AND class = @NEW_CLASS ;
INSERT INTO `playercreateinfo_spell` (`race`, `class`, `Spell`, `Note`)
SELECT @NEW_RACE, @NEW_CLASS, `Spell`, `Note` FROM `playercreateinfo_spell` WHERE race = @COPY_RACE AND class = @NEW_CLASS;
» Активируем кнопки для Goblin Warrior (скопировано из Human Warrior) :
SET @NEW_RACE = 9; -- ID расы
SET @NEW_CLASS = 1; -- ID класса.
SET @COPY_RACE = 1; -- ID расы, откуда копируем данные.
DELETE FROM `playercreateinfo_action` WHERE race = @NEW_RACE AND class = @NEW_CLASS ;
INSERT INTO `playercreateinfo_action` (`race`, `class`, `button`, `action`, `type`)
SELECT @NEW_RACE, @NEW_CLASS, `button`, `action`, `type` FROM `playercreateinfo_action` WHERE race = @COPY_RACE AND class = @NEW_CLASS;
» Активируем кнопки Fel Orc Warrior (скопировано из Orc Warrior) :
SET @NEW_RACE = 12; -- ID расы.
SET @NEW_CLASS = 1; -- ID класса.
SET @COPY_RACE = 2; -- ID расы, откуда копируем данные.
DELETE FROM `playercreateinfo_action` WHERE race = @NEW_RACE AND class = @NEW_CLASS ;
INSERT INTO `playercreateinfo_action` (`race`, `class`, `button`, `action`, `type`)
SELECT @NEW_RACE, @NEW_CLASS, `button`, `action`, `type` FROM `playercreateinfo_action` WHERE race = @COPY_RACE AND class = @NEW_CLASS;
» Стартовая локация 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)
SET @NEW_RACE = 9; -- ID расы.
SET @NEW_CLASS = 1; -- ID класса.
SET @COPY_RACE = 1; -- ID расы, откуда копируем данные.
DELETE FROM `player_levelstats` WHERE race = @NEW_RACE AND class = @NEW_CLASS ;
INSERT INTO `player_levelstats` (`race`, `class`, `level`, `str`, `agi`, `sta`, `inte`, `spi`)
SELECT @NEW_RACE, @NEW_CLASS, `level`, `str`, `agi`, `sta`, `inte`, `spi` FROM `player_levelstats` WHERE race = @COPY_RACE AND class = @NEW_CLASS;
» Уровни для Fel Orc Warrior (скопировано из Orc Warrior)
SET @NEW_RACE = 12; -- ID расы.
SET @NEW_CLASS = 1; -- ID класса.
SET @COPY_RACE = 2; -- ID расы, откуда копируем данные.
DELETE FROM `player_levelstats` WHERE race = @NEW_RACE AND class = @NEW_CLASS ;
INSERT INTO `player_levelstats` (`race`, `class`, `level`, `str`, `agi`, `sta`, `inte`, `spi`)
SELECT @NEW_RACE, @NEW_CLASS, `level`, `str`, `agi`, `sta`, `inte`, `spi` FROM `player_levelstats` WHERE race = @COPY_RACE AND class = @NEW_CLASS;

Создание стартовой экипировки

Откройте 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,10​141,-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,10​141,-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,998​8,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,998​8,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 : Пол персонажа.
Больше информации здесь: : CharStartOutfit.dbc

Настройка отображения шлемов

Откройте ChrRaces.dbc :
В 7 колонке у вас есть аббревиатуры рас, например Go для GOBLIN. Эти аббревиатуры используются только для отображения шлемов, Поставьте Hu для гоблина (Шлем как у людей).
Проблема: Шлемы могут быть расположены криво по отношению к голове.. ...Чтобы пофиксить это подвигайте Attachment Point No. 11 (Эта точка отвечает за расположение шлема) на M2 моделях (GoblinMale.m2 и GoblinFemale.m2, например,Вы можете использовать Mod-It для этого.

Просмотров: 4 878

Skarn #1 - 6 лет назад (отредактировано ) 1
Не закончено!
MegaBlax #2 - 6 лет назад 0
Гайд старый! Он вроде даже не на 3.3.5
Skarn #3 - 6 лет назад 0
Да, он старый, на 332. Но суть таже. По крайней мере в дбц ничего не менялось. Так что он вполне актуален.
MegaBlax #4 - 6 лет назад (отредактировано ) 0
SwordOfTruth, не вполне актуален! Часть того что здесь написано, просто не нужно!
Вам понадобиться программа для конвертирования из dbc в csv и обратно. Так же программа Navicat для заливки sql файлов и управлением сервера.
p.s. можно добавить в гайд
ReVVeR #5 - 5 лет назад 0
А можно гайд на 1.12.1?