• This is a read only backup of the old Emudevs forum. If you want to have anything removed, please message me on Discord: KittyKaev

How to: Custom Races!

Mathex

Respected Member
1. Introduction

Okay so now I've been trying to make custom races for a week or so because the only guide made was for an earlier patch and the people who knew what to do wouldn't respond to my questions or just simply ignored me. So now I'm sharing what I've found out on how to create your own custom race.

So what you have to understand for a start is that you can't have all custom races such as pigs or something else, it has to be a race that's actually defined, now you'll probably ask me: "which is defined?", well let's take a look:

(From SharedDefines.h)
Code:
enum Races
{
    RACE_NONE               = 0,
    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
};

That is the current races that is playable. What I'm going to teach you today is how to add two of them: The Goblin and the Fel Orc.

Before we start I'd like to say a couple of things:
  • This is not and easy guide, don't expect me to hand out information if you don't know what you're doing
  • I will provide information that I found worked for me
  • I don't care if anything I do is "hacky".

2. Getting The Files

Okay, we'll start editing the DBC files, the ones you need are:
Code:
ChrRaces.dbc

CharBaseInfo.dbc

CharStartOutfit.dbc

SkillLineAbility.dbc

SkillRaceClassInfo.dbc

Faction.dbc

You can extract them from the core/dbc, it's the same as in the client. You'll also have to get some Lua and XML files from the blizzard patches so that you can edit the character creation screen. Those files are:
Code:
patch-enXX-3.mpq\Interface\GlueXML\GlueStrings.lua
patch-enXX-3.mpq\Interface\GlueXML\GlueParent.lua

patch-enXX-2.mpq\Interface\GlueXML\CharacterCreate.lua
patch-enXX-2.mpq\Interface\GlueXML\CharacterCreate.xml
[/code

Okay, great so some of you will maybe ask how to extract those, what you do is get your favorite MPQ Editor, you can use whichever you like (google it if you don't have one) and open the patches with it, go to the path the I wrote above in the MPQ file and drag it somewhere in a folder for this project of yours.

Now that we got all our files we need to arrange them, make a new folder called "RacePatch" on your desktop which should look like this:
[code]
RacePatch\Interface\GlueXML\GlueStrings.lua
RacePatch\Interface\GlueXML\GlueParent.lua
RacePatch\Interface\GlueXML\CharacterCreate.lua
RacePatch\Interface\GlueXML\CharacterCreate.xml

RacePatch\DBFilesClient\ChrRaces.dbc
RacePatch\DBFilesClient\CharBaseInfo.dbc
RacePatch\DBFilesClient\CharStartOutfit.dbc
RacePatch\DBFilesClient\SkillLineAbility.dbc
RacePatch\DBFilesClient\SkillRaceClassInfo.dbc
RacePatch\DBFilesClient\Faction.dbc

Now that we got our desired files smoothly lined up we can go on to the editing of them.

3. Editing The DBC Files

For this, unless stated otherwise, use your favorite DBC editor.

Firstly open up your ChrRaces.dbc, you'll see all the races I listed above shows up, now what you want to do is fine these 2 lines:
Code:
9,1,1,0x0,6894,6895,"Go",7,7,15007,0x448,"Goblin",0,0x2,,,"Goblin",,,,,,,,,,,,,,0xFF01FE,,,"Goblin",,,,,,,,,,,,,,0xFF01CC,,,"Gobelin",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NONE","NORMAL",0,

12,5,1,0x0,16981,16980,"Fo",7,7,15007,0x448,"FelOrc",0,0x2,,,"Fel Orc",,,,,,,,,,,,,,0xFF01FE,,,"Fel Orc",,,,,,,,,,,,,,0xFF01CC,,,"Fel Orc",,,,,,,,,,,,,,0xFF01CC,"NORMAL","NORMAL","NORMAL",0,

Or something along the lines of that..

Now you want to edit is as follows:
2nd column, it must change by 12 for the race is playable.
4th column defines the faction of the race, see Faction.dbc
8th column, 1 for horde and 7 for alliance. -Taken from Modcraft, see credits


Now you want to save and close that. And you want to open up CharBaseInfo.dbc, this file determines the class/race combos for your races. So what you want to do is for now only add 2 lines:
9, 1
12, 1
This makes it so that Goblin (9) can be warrior and so can Fel Orc (12). --NOTE: If you're having trouble opening this DBC file Taliis does the job ;)

Now that we're done with that we'll move on to the Lua/XML files, and this is where the fun begins :p

4. Editing the Interface Files

Okay so the first thing you want to do is get open the GlueStrings file, in there you'll find many values that you can edit and such, but let's keep it simple and add what we need:

Find
Code:
ABILITY_INFO_BLOODELF1 = "- Enchanting skill increased.";
And on top of that add this:
Code:
ABILITY_INFO_GOBLIN1 = "- Goblin Racial 1";
ABILITY_INFO_GOBLIN2 = "- Goblin Racial 2";
ABILITY_INFO_GOBLIN3 = "- Goblin Racial 3";
ABILITY_INFO_GOBLIN4 = "- Goblin Racial 4";
ABILITY_INFO_FELORC1 = "- Fel Orc Racial 1";
ABILITY_INFO_FELORC2 = "- Fel Orc Racial 2";
ABILITY_INFO_FELORC3 = "- Fel Orc Racial 3";
ABILITY_INFO_FELORC4 = "- Fel Orc Racial 4";

Next find:
Code:
RACE_CHANGE_IN_PROGRESS = "Updating Race...";

after that line insert these:
Code:
RACE_INFO_GOBLIN = "Information about Goblin males.";
RACE_INFO_GOBLIN_FEMALE = "Information about Goblin females.";
RACE_INFO_FELORC = "Information about Fel Orc males.";
RACE_INFO_FELORC_FEMALE = "Information about Fel Orc females.";

And you're done with GlueStrings.lua, close it down (remember to save ofc) and we'll move on to GlueParent.lua

So as you now see this is what the ModCraft tutorial didn't cover, and it's here that many people fail, so therefore I'll complete this part :)

Firstly you want to open up GlueParent.lua (of course) and then search for
Code:
GlueAmbienceTracks["CHARACTERSELECT"] = "GlueScreenIntro";
After this line add these 2:
Code:
GlueAmbienceTracks["GOBLIN"] = "GlueScreenIntro";
GlueAmbienceTracks["FELORC"] = "GlueScreenIntro";

Now you want to go to around:
Code:
CHARACTERSELECT =  {
        {1,     0,  0.00000,        0.00000,        -1.00000,   1.0,    0.15000,    0.15000,    0.15000,    1.0,    0.00000,    0.00000,    0.00000},
        {1,     0,  -0.74919,       0.35208,        -0.56103,   1.0,    0.00000,    0.00000,    0.00000,    1.0,    0.44706,    0.54510,    0.73725},
        {1,     0,  0.53162,        -0.84340,       0.07780,    1.0,    0.00000,    0.00000,    0.00000,    2.0,    0.55,       0.338625,   0.148825},
    },

and after that you should add:
Code:
	GOBLIN = {         
        {1,     0,  0.00000,        0.00000,        -1.00000,   1.0,    0.15000,    0.15000,    0.15000,    1.0,    0.00000,    0.00000,    0.00000},
        {1,     0,  -0.74919,       0.35208,        -0.56103,   1.0,    0.00000,    0.00000,    0.00000,    1.0,    0.44706,    0.54510,    0.73725},
        {1,     0,  0.53162,        -0.84340,       0.07780,    1.0,    0.00000,    0.00000,    0.00000,    2.0,    0.55,       0.338625,   0.148825},
    },
	FELORC = {         
        {1,     0,  0.00000,        0.00000,        -1.00000,   1.0,    0.15000,    0.15000,    0.15000,    1.0,    0.00000,    0.00000,    0.00000},
        {1,     0,  -0.74919,       0.35208,        -0.56103,   1.0,    0.00000,    0.00000,    0.00000,    1.0,    0.44706,    0.54510,    0.73725},
        {1,     0,  0.53162,        -0.84340,       0.07780,    1.0,    0.00000,    0.00000,    0.00000,    2.0,    0.55,       0.338625,   0.148825},
    },

This will add the light so the models are lightened up and nice :)

After this you want to go to:
Code:
function SetBackgroundModel(model, name)
and replace that whole function with:
Code:
function SetBackgroundModel(model, name)
    local nameupper = strupper(name);
	
	if (name == "Goblin" or name == "GOBLIN") then
		name = "Orc";
	end
	
	if (name == "FelOrc" or name == "FELORC") then
		name = "Orc";
	end
	
    local path = "Interface\\Glues\\Models\\UI_"..name.."\\UI_"..name..".m2";
	if ( model == CharacterCreate ) then
		SetCharCustomizeBackground(path);
	else
		SetCharSelectBackground(path);
	end
	PlayGlueAmbience(GlueAmbienceTracks[nameupper], 4.0);
	SetLighting(model, nameupper)
end

This will make the goblin and the Fel Orc appear as if they had the orc character creation background.

You're now done with the GlueParent.lua and can move on to the CharacterCreate.lua, firstly open it and go to
Code:
MAX_RACES = 10;
and edit that to
Code:
MAX_RACES = 12;

Find
Code:
	["DRAENEI_MALE"]	= {0.5, 0.625, 0, 0.25}, 
	["DRAENEI_FEMALE"]	= {0.5, 0.625, 0.5, 0.75},

After that add:
Code:
	["GOBLIN_MALE"]        = {0.625, 0.625, 0, 0.25}, 
    ["GOBLIN_FEMALE"]    = {0.625, 0.625, 0, 0.25}, 

    ["FELORC_MALE"]        = {0.5, 0.625, 0, 0.25}, 
    ["FELORC_FEMALE"]    = {0.5, 0.625, 0, 0.25},
-This will add the Draenei icons to the character creation screen since I haven't quite figured out the icon placement coord system.

Continues below
 

Mathex

Respected Member
Next you'll close down Charactercreate.lua and open up CharacterCreate.xml, you'll want to find:
Code:
<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>

and replace it with
Code:
<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>

Now if you did it right all your files should be correctly edited, you now want to copy those file into a patch, I assume you already know how to make a custom patch so I'll skip over that.. What you want to do now is add your files to a patch (all the files in the directory RacePatch or whatever you called it)

Now you could basically go into the game but it would say your files are corrupt, you need this:

and then copy the DBC files only to your core, you should now have this: http://modcraft.superparanoid.de/viewtopic.php?f=59&t=883 download and run as the instructions says.

Now you should have something like this if you did it right:
27966a4a76ee4d6db776d6c.png


Done with client side modifications :)

5. Server-Side Modifications

Now in this last part we want to edit the server side so you can actually play these races :)

Go to SharedDefines.h in your core and open it up

Find:
Code:
enum Races
{
    RACE_NONE               = 0,
    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
};

Replace by:
Code:
enum Races
{
    RACE_NONE               = 0,
    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
};

Now find:
Code:
#define MAX_RACES         12

and replace with
Code:
#define MAX_RACES         13

The max_races variable is basically just the race number + 1 so if you had let's say Tuskarr for you highest number race it would be 17+1=18, pretty simple, ah?

Now find
Code:
#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)))

and replace it with:
Code:
#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)) )

Now you're done with the core mods.. Moving on to..
 

Mathex

Respected Member
Continuation:

6. SQL Modifications:




Some querys you'd have to run (copy pasted from modcraft):
Adding spells to the Goblin Warrior (copied from the Human Warrior) :*
Code:
SET @NEW_RACE = 9; -- ID of adding race.
SET @NEW_CLASS = 1; -- ID of class of the new race.
SET @COPY_RACE = 1; -- 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;

Adding spells to the Fel Orcs Warrior (copied from the Orc Warrior) :
Code:
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;

Buttons Action Goblin Warrior (copied on Human Warrior) :
Code:
SET @NEW_RACE = 9; -- ID of adding race.
SET @NEW_CLASS = 1; -- ID of class of the new race.
SET @COPY_RACE = 1; -- ID of the race where we copy datas.
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;

Buttons Action Fel Orcs Warrior (copied on Orc Warrior) :
Code:
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_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;

Starting location of Goblin Warrior (= Humans) :
Code:
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES ('9','1','0','12','-8949.95','-132.493','83.5312');

Starting location of Fel Orc Warrior (= Orcs)
Code:
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES ('12','1','1','14','-618.518','-4251.67','38.718');

Levels for the Goblin Warrior (copied on Human Warrior)
Code:
SET @NEW_RACE = 9; -- ID of adding race.
SET @NEW_CLASS = 1; -- ID of class of the new race.
SET @COPY_RACE = 1; -- ID of the race where we copy datas.
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;

Levels for the Fel Orc Warrior (copied on Orc Warrior)
Code:
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 `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;

7. Misc

Now you're nearly done, your character can be setup and it'll be actually playable :) Now I'm just gonna copy some stuff from the modcraft guide that might be useful here at this last post:

Display helmets
Open ChrRaces.dbc :
At the 7th column, you have the abbreviation of the race, eg Go for GOBLIN. This abbreviation is actually only used for display helmet. You can modify an abbreviation of existing race for the helmets appear, for example by replacing Hu.

Problem: The helmets are misplaced, such as too forward, too high, etc. ... To fix this, simply move the Attachment Point No. 11 (which corresponds to the placement of the helmet) on two M2 model race (GoblinMale.m2 and GoblinFemale.m2 for example). You can use Mod-It for this.

There are other more "clean" way to fix helmets but longer.

Languages and skills
Basically, you can not learn language or skills. Indeed, the game uses a verification which is configured for each Skills. We will have to modify all the skills you'll want that the race will be use.

We'll take the example of the Common Language (Skill n°98).
Open SkillLineAbility.dbc :
Find :
Quote:590,98,668,1101,0,,,1,0,0x2,0,0,,,

We must consider the 4th column, the 1101 value. Transform this number into binary (eg with http://www.michelcarrare.com/demos/converter.php) You will find in our case:
10001001101
Every "1" allows the Skill for the race with ID equal to the position :
IDRace : 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1

1 0 0 0 1 0 0 1 1 0 1


It is necessary to put 1 for the ID of your race. For the goblin, its ID 9, so we have:
IDRace : 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1

1 0 1 0 1 0 0 1 1 0 1

Then just reprocess this new value in decimal :
(bin)10101001101 = (dec)1357
So, we have this :
590,98,668,1357,0,,,1,0,0x2,0,0,,,


Hey! And if my ID is 14 to the race? How can I do?

Well it is the same way, by adding 0:
IDRace : 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1

1 0 0 1 0 0 0 1 0 0 1 1 0 1


Open SkillRaceClassInfo.dbc :
Find :
Quote:40,98,1101,1535,0x80,0x0,0,0x0,

You see the 1101 in the 3rd column? Do as above.

Reminder
You must do this for all Skills that you want to allow.

Information
This technique can be used on your existing races, particularly for languages.

Allowing Reputations
Open Faction.dbc :
For example, suppose we want allow reputation Stormwind for Goblin, find :
Code:
72,19,1100,690,0x1,0x0,0,0,0x0,0x0,3100,-42000,4000,0,0x111,6,0x11,0x0,469,1.0,0.25,7,5,,,"Hurlevent",,,,,,,,,,,,,,0xFF01FE,,,"Cette capitale de l’Alliance est l’un des derniers bastions de la puissance des humains. Elle est gouvernée par le roi Varian Wrynn, revenu après une disparition mystérieuse.",,,,,,,,,,,,,,0xFF01FE,

Well take this part of the line :
1100, 690, 0x1, 0x0,[...] 3100, -42000, 4000,0,

Races 1 | Races 2 | Races 3 | Races 4 | Rep for races 1 | Rep for races 2 | Rep for races 3 ...
You understand? 1100 corresponds to all races of the alliance except humans who begin the game with 3,100 reputation. 690 races is the hord, they begin with -42,000 and finally 1 for humans starting with 4000.
So if we want Goblins (ID 9) can start with 3100 (and that reputation is allowed to be used for this race and saved by the server), you must edit 1100 by 1356 (detailed explanations in the activation of languages and skills).
We must do this for all Reputations. No worries, using "Replace All" with your favorite text editor, it will save time.
For example: 1791 means all races of the alliance. So if the goblin is in the alliance, we must add to all the "1791" be replaced 1791 by 2047. Then do manual handling to the capitals (as Stormwind).


Now you should be pretty much done, thank you for reading my guide hope you found it useful :)

Credits:
Me
http://modcraft.superparanoid.de/viewtopic.php?f=26&t=165
 

HellHoundFTW

Enthusiast
Help?

i cant find Interface in any of the MPQ files, i have checked in all of the patches, with an MPQ editor, NOTHING! No Interface, everything else was there, like Spell, but no interface
help?
 

Tommy

Founder
i cant find Interface in any of the MPQ files, i have checked in all of the patches, with an MPQ editor, NOTHING! No Interface, everything else was there, like Spell, but no interface
help?

Interface should be located in locale-enXX.MPQ, patch-enXX.MPQ, etc. Hmm, I don't see any information on where they are located in the tutorial. :3
 

HellHoundFTW

Enthusiast
error:This applicatio has encountered a critical error:

ERROR #121 (0x85100079) Version Mismatch
Program: C:\Users\pommy_angel\Desktop\My Private Sever\Wow.exe

DBFilesClient\BattlemasterList.dbc has wrong number of columns
(found 31, expected 32)

Press OK to terminate the application

- - - Updated - - -

Interface should be located in locale-enXX.MPQ, patch-enXX.MPQ, etc. Hmm, I don't see any information on where they are located in the tutorial. :3

can you help with le error:This application has encountered a critical error:

ERROR #121 (0x85100079) Version Mismatch
Program: C:\Users\pommy_angel\Desktop\My Private Sever\Wow.exe

DBFilesClient\BattlemasterList.dbc has wrong number of columns
(found 31, expected 32)

Press OK to terminate the application

- - - Updated - - -

halp?

- - - Updated - - -

can you help me with this error:This application has encountered a critical error:

ERROR #121 (0x85100079) Version Mismatch
Program: C:\Users\pommy_angel\Desktop\My Private Sever\Wow.exe

DBFilesClient\BattlemasterList.dbc has wrong number of columns
(found 31, expected 32)

Press OK to terminate the application

- - - Updated - - -

help?
 

HellHoundFTW

Enthusiast
nvm, i am doing Felorc and Goblin, the one on the tutorial and i get this:Interface\GlueXML\GlueDialog.lua:102:bad argument #1 to 'format' (string expected, got nil)
help?
i followed EVERYTHING!!
i`ll retry this, if i can get this done and working, i`ll make a video tutorial on how to make a custom race ^_^
 

shadowloud

Enthusiast
hello,

I followed everything in this tutorial, even tried twice. But additionnals buttons are not appearing on the character creation screen? They have moved though. However, I am able to play a goblin or a felorc if I change race id of my character throught database. Only issue is with character creation screen. Can anyone help?

http://i.imgur.com/Ohsdmdi.jpg
 

shadowloud

Enthusiast
Hello again,

I figured out my issue alone. It was because I didn't package DBC files along with Interface files. I thought DBC only needed to be core side and not client side.

nvm, i am doing Felorc and Goblin, the one on the tutorial and i get this:Interface\GlueXML\GlueDialog.lua:102:bad argument #1 to 'format' (string expected, got nil)
help?
i followed EVERYTHING!!
i`ll retry this, if i can get this done and working, i`ll make a video tutorial on how to make a custom race ^_^

I encountered this error too, if it happens I believe it is because you didn't package your MPQ files properly. Your character screen is trying to query the new race you probably modified manually through database, but it doesn't show because MPQ needs to be modified as the tutorial explains in order to display this new race.
 

frost

Banned
must not be a complete tutorial is all i got to say. tried doing it 13 times. still always has same issues.
 
Last edited:

PrestonParsons

BETA Tester
been trying to be this. i check everything all correct by following that tuts. but now i didnt get any like those. i patched it and its did come up with errors on wow.exe then i crack it then its not showing other options.?
 

tommyruin

Enthusiast
get: ERROR:player have incorrect race/class pair. Can't be loaded.

Done it all, can see the characters in the create menu but get an error when creating and cannot create them, this error appears in the Mangosd
ERROR:player have incorrect race/class pair. Can't be loaded.
Any help would be gratefully appreciated.
 

srvory

Emulation Addict
I can't see the names of races

I created 2 races and i have a few problems.

I can't see the names of races.. Someone?




Someone can help me? i need a big help and i dont have any idea what is the problem :|
Thanks all.
 
Top