Hello guys! Hope you are all having a good day.
Ever since I played Mists of Pandaria I always wanted to see other races, this particular expansion had so much (or still has) potential for other races, The Hozen for the Horde and the Jinyu for the Alliance not to mention that we saw more involvement of the High Elves with the Alliance in the Isle of Thunder.
There was a recent surge of Custom servers with Custom races or custom skins but they are all always for 3.3.5 or below, nothing for 4.3.4 or 5.4.8 sadly... So I decided to take matters in my own hands and go down the rabbit hole of creating custom races to Mists of Pandaria.
This tutorial MIGHT seem hacky at times or not very in depth, the focus of the tutorial will be to allow you to enable the races and toy with them, customizing them to be 100% (some of them are missing animations or have messed up interfaces) playable and almost Blizzlike takes time and cannot be explained in a single tutorial
FIRST STEP: CORE:
As a first step you should have your preferred core ready and if possible tested and compiled already for your 5.4.8 Server, at this moment the one that works pretty okay and the one I'm gonna be using for this tutorial is Project Skyfire.
You need to go to your core files and find: src/server/game/Miscellaneous/SharedDefines.h and scroll down until you find this:
This is where we need to add or enable, for simplicity I will enable the Forest and Ice trolls, just delete the // and make sure they are enabled.
After that we scroll down and we will find this:
Since we haven't add anything after Pandaren horde 26 we can leave the max races as 27 and change the define racemask_all_playable like this:
Keep the structure of the code in mind, every three races we separate them with | \ and the very last one ends with )))
Next up we have this:
We change it like this:
If we don't declare a race in Racemask alliance they will default to the Horde faction, keep that in mind.
We are done with SharedDefines.h remember to save and let's continue with src\server\game\Handlers\CharacterHandler.cpp and find the following lines:
Change them to:
Then the last file in the core will be located in: C:\Skyfire\SkyFire_548\src\server\game\Handlers\AuthHandler.cpp and find these lines:
Change it to:
That would be all for the core files, save them all and continue to recompile your server.
SECOND STEP: DBCs :
For now I will only show you the 2 most important DBC files, there's a ton more of them but those have to be customized as your prefer, for the functionality of the races to appear as enabled we can work with ChrRaces.DBC and CharBaseInfo.DBC. You can use any DBC editor that works for 5.4.8, I personally use WBDX Editor 1.1.9.a
For ChrRaces.DBC I STRONGLY suggest you check this wiki first for: Wiki ChrRaces.DBC
For ChrRaces.DBC Find the line 18 and line 21:
And change them to this:
Save and close this DBC.
Next up is CharBaseInfo.DBC
For this one is easy, you just need to add 2 new entries at the end:
18, 1
21, 1
This will enable the Warrior class for both the forest troll and ice trolls.
FOURTH STEP:
By now the races will be enabled and visible on your client, but we need to show them in the interface to be able to select them for that we will modify these files:
CharacterCreate.lua
CharacterCreate.XML
For CharacterCreate.lua open it and you will need to find this:
MAX_RACES = 13;
Change it to:
MAX_RACES = 15;
Then scroll down and find:
Add the following lines below that:
Next will be CharacterCreate.XML
Find the following lines:
<Frames>
<CheckButton name="CharCreateRaceButton1" inherits="CharCreateRaceButtonTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="-43" y="-136"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton2" inherits="CharCreateRaceButtonTemplate" id="2">
It should be somewhere around line 1119
Change everything inside frames up until /frames with this code:
<CheckButton name="CharCreateRaceButton1" inherits="CharCreateRaceButtonTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="-43" y="-136"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton2" inherits="CharCreateRaceButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton1" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton3" inherits="CharCreateRaceButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton2" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton4" inherits="CharCreateRaceButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton3" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton5" inherits="CharCreateRaceButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton4" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--wargen
<CheckButton name="CharCreateRaceButton6" inherits="CharCreateRaceButtonTemplate" id="6">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton5" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--icetroll
<CheckButton name="CharCreateRaceButton7" inherits="CharCreateRaceButtonTemplate" id="7">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton6" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--orc
<CheckButton name="CharCreateRaceButton8" inherits="CharCreateRaceButtonTemplate" id="8">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="43" y="-136"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton9" inherits="CharCreateRaceButtonTemplate" id="9">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton8" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton10" inherits="CharCreateRaceButtonTemplate" id="10">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton9" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--trll
<CheckButton name="CharCreateRaceButton11" inherits="CharCreateRaceButtonTemplate" id="11">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton10" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton13" inherits="CharCreateRaceButtonTemplate" id="13">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton11" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton12" inherits="CharCreateRaceButtonTemplate" id="12">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton13" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton14" inherits="CharCreateRaceButtonTemplate" id="14">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton12" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--panda
<CheckButton name="CharCreateRaceButton15" inherits="CharCreateRaceButtonTemplate" id="15">
<Anchors>
<Anchor point="BOTTOM" x="-2" y="-574"/>
</Anchors>
</CheckButton>
After that save and let's continue with the last part of the tutorial.
FIFTH STEP: MPQs and SQL
We are almost done! What comes next should be relatively easy:
First grab your favorite MPQ file editor, I just use MPQEditor.
Create a new MPQ and name it wow-update-enUS-20000.MPQ.
Create 2 folders inside that one, Interface and DBFilesClient. create a third one inside Interface called GlueXML.
Put CharacterCreator.LUA and CharacterCreator.XML inside GlueXML
Put ChrRaces.DBC and CharBaseInfo.DBC inside DBFilesClient.
Now put that MPQ file inside Pandaria/Data/Locale (locale is the language of your client, for me it would be EnUS) drag and drop it there.
You will need a patched WoW.exe I will put the one I use here: WoW.Exe
Now launch your server and game, log in and... ta da! You will see this:
FINAL STEP: SQL:
I had some issues uploading the guide here,For reference please see the same guide here: https://www.wowmodding.net/topic/1615-tutorial-custom-races-for-548-mop-client-and-server/
That's all! By now your custom races will work! You will need to make your research to enable them to speak, to add sounds, clothes and what not! But that is a more in depth research that has to be done individually! Good luck!
Thank you! I hope this works, if you want to re write this tutorial and make it better PLEASE do! If you have any helpful advice to do something better and easier PLEASE do! I'm fully open to feedback and I will try as much as I can to troubleshoot any issues you might encounter, I'm still a noob at wow modding but I will try my best!
Cheers!
Credits: ragestriker on Discord, HUGE help, he helped me found that we also need to edit AuthHandler and CharacterHandler for the races to be enabled. He also helped a LOT with the interface! Cheers to them
This guide in: http://web.archive.org/web/20200203...ums/showthread.php?181048-How-to-Custom-Races!
This guide in: https://wowcreador.com/threads/tutorial-creacion-razas-custom-3-3-5a-tc-parte-1-4-core.987/
EmuCoach Discord Server
WoW Modding Discord Server
Ever since I played Mists of Pandaria I always wanted to see other races, this particular expansion had so much (or still has) potential for other races, The Hozen for the Horde and the Jinyu for the Alliance not to mention that we saw more involvement of the High Elves with the Alliance in the Isle of Thunder.
There was a recent surge of Custom servers with Custom races or custom skins but they are all always for 3.3.5 or below, nothing for 4.3.4 or 5.4.8 sadly... So I decided to take matters in my own hands and go down the rabbit hole of creating custom races to Mists of Pandaria.
This tutorial MIGHT seem hacky at times or not very in depth, the focus of the tutorial will be to allow you to enable the races and toy with them, customizing them to be 100% (some of them are missing animations or have messed up interfaces) playable and almost Blizzlike takes time and cannot be explained in a single tutorial
FIRST STEP: CORE:
As a first step you should have your preferred core ready and if possible tested and compiled already for your 5.4.8 Server, at this moment the one that works pretty okay and the one I'm gonna be using for this tutorial is Project Skyfire.
You need to go to your core files and find: src/server/game/Miscellaneous/SharedDefines.h and scroll down until you find this:

This is where we need to add or enable, for simplicity I will enable the Forest and Ice trolls, just delete the // and make sure they are enabled.

After that we scroll down and we will find this:

Since we haven't add anything after Pandaren horde 26 we can leave the max races as 27 and change the define racemask_all_playable like this:

Keep the structure of the code in mind, every three races we separate them with | \ and the very last one ends with )))
Next up we have this:

We change it like this:

If we don't declare a race in Racemask alliance they will default to the Horde faction, keep that in mind.
We are done with SharedDefines.h remember to save and let's continue with src\server\game\Handlers\CharacterHandler.cpp and find the following lines:

Change them to:

Then the last file in the core will be located in: C:\Skyfire\SkyFire_548\src\server\game\Handlers\AuthHandler.cpp and find these lines:

Change it to:

That would be all for the core files, save them all and continue to recompile your server.
SECOND STEP: DBCs :
For now I will only show you the 2 most important DBC files, there's a ton more of them but those have to be customized as your prefer, for the functionality of the races to appear as enabled we can work with ChrRaces.DBC and CharBaseInfo.DBC. You can use any DBC editor that works for 5.4.8, I personally use WBDX Editor 1.1.9.a
For ChrRaces.DBC I STRONGLY suggest you check this wiki first for: Wiki ChrRaces.DBC
For ChrRaces.DBC Find the line 18 and line 21:
View attachment 3593Quote
18 15 1 0 21963 21964 Ft 7 7 15007 1096 ForestTroll 0 2 Forest Troll 0 0 TUSKS TUSKS Normal 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
View attachment 3592Quote
21 5 1 0 26873 26874 It 7 7 15007 1096 IceTroll 0 2 Ice Troll 0 0 Normal Normal Normal 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
And change them to this:
View attachment 3594Quote
18 14 2 4141 21963 21964 Ft 1 7 15007 1096 ForestTroll 0 1 Forest Troll 0 0 TUSKS TUSKS Normal 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
View attachment 3595Quote
21 14 1 4140 26873 26874 It 7 7 15007 1096 IceTroll 0 0 Ice Troll 0 0 Normal Normal Normal 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
Save and close this DBC.
Next up is CharBaseInfo.DBC
For this one is easy, you just need to add 2 new entries at the end:
18, 1
21, 1
This will enable the Warrior class for both the forest troll and ice trolls.
FOURTH STEP:
By now the races will be enabled and visible on your client, but we need to show them in the interface to be able to select them for that we will modify these files:
CharacterCreate.lua
CharacterCreate.XML
For CharacterCreate.lua open it and you will need to find this:
MAX_RACES = 13;
Change it to:
MAX_RACES = 15;
Then scroll down and find:
Add the following lines below that:
Next will be CharacterCreate.XML
Find the following lines:
<Frames>
<CheckButton name="CharCreateRaceButton1" inherits="CharCreateRaceButtonTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="-43" y="-136"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton2" inherits="CharCreateRaceButtonTemplate" id="2">
It should be somewhere around line 1119
Change everything inside frames up until /frames with this code:
<CheckButton name="CharCreateRaceButton1" inherits="CharCreateRaceButtonTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="-43" y="-136"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton2" inherits="CharCreateRaceButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton1" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton3" inherits="CharCreateRaceButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton2" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton4" inherits="CharCreateRaceButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton3" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton5" inherits="CharCreateRaceButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton4" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--wargen
<CheckButton name="CharCreateRaceButton6" inherits="CharCreateRaceButtonTemplate" id="6">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton5" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--icetroll
<CheckButton name="CharCreateRaceButton7" inherits="CharCreateRaceButtonTemplate" id="7">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton6" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--orc
<CheckButton name="CharCreateRaceButton8" inherits="CharCreateRaceButtonTemplate" id="8">
<Anchors>
<Anchor point="TOP" relativePoint="TOP" x="43" y="-136"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton9" inherits="CharCreateRaceButtonTemplate" id="9">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton8" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton10" inherits="CharCreateRaceButtonTemplate" id="10">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton9" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--trll
<CheckButton name="CharCreateRaceButton11" inherits="CharCreateRaceButtonTemplate" id="11">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton10" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton13" inherits="CharCreateRaceButtonTemplate" id="13">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton11" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton12" inherits="CharCreateRaceButtonTemplate" id="12">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton13" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
<CheckButton name="CharCreateRaceButton14" inherits="CharCreateRaceButtonTemplate" id="14">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="CharCreateRaceButton12" relativePoint="BOTTOMLEFT" x="0" y="-20"/>
</Anchors>
</CheckButton>
--panda
<CheckButton name="CharCreateRaceButton15" inherits="CharCreateRaceButtonTemplate" id="15">
<Anchors>
<Anchor point="BOTTOM" x="-2" y="-574"/>
</Anchors>
</CheckButton>
After that save and let's continue with the last part of the tutorial.
FIFTH STEP: MPQs and SQL
We are almost done! What comes next should be relatively easy:
First grab your favorite MPQ file editor, I just use MPQEditor.
Create a new MPQ and name it wow-update-enUS-20000.MPQ.
Create 2 folders inside that one, Interface and DBFilesClient. create a third one inside Interface called GlueXML.
Put CharacterCreator.LUA and CharacterCreator.XML inside GlueXML
Put ChrRaces.DBC and CharBaseInfo.DBC inside DBFilesClient.
Now put that MPQ file inside Pandaria/Data/Locale (locale is the language of your client, for me it would be EnUS) drag and drop it there.
You will need a patched WoW.exe I will put the one I use here: WoW.Exe
Now launch your server and game, log in and... ta da! You will see this:
FINAL STEP: SQL:
This last part is difficult to read, the forum wasn't allowing me to submit it like so in plain text.
Run this:
insert into `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`, `orientation`) values('18','1','1','14','-618.518','-4251.67','38.718','1');
insert into `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`, `orientation`) values('21','1','0','12','-8949.95','-132.493','83.5312','0');
Run that and then run:
SET @NEW_RACE = 18;
SET @NEW_CLASS = 1;
SET @COPY_RACE = 2;
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;
Run that and then run:
SET @NEW_RACE = 21;
SET @NEW_CLASS = 1;
SET @COPY_RACE = 1;
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;
Run that and then run:
SET @NEW_RACE = 18;
SET @NEW_CLASS = 1;
SET @COPY_RACE = 2;
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;
Run that and then run:
SET @NEW_RACE = 12;
SET @NEW_CLASS = 1;
SET @COPY_RACE = 1;
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;
I had some issues uploading the guide here,For reference please see the same guide here: https://www.wowmodding.net/topic/1615-tutorial-custom-races-for-548-mop-client-and-server/
That's all! By now your custom races will work! You will need to make your research to enable them to speak, to add sounds, clothes and what not! But that is a more in depth research that has to be done individually! Good luck!
Thank you! I hope this works, if you want to re write this tutorial and make it better PLEASE do! If you have any helpful advice to do something better and easier PLEASE do! I'm fully open to feedback and I will try as much as I can to troubleshoot any issues you might encounter, I'm still a noob at wow modding but I will try my best!
Cheers!
Credits: ragestriker on Discord, HUGE help, he helped me found that we also need to edit AuthHandler and CharacterHandler for the races to be enabled. He also helped a LOT with the interface! Cheers to them
This guide in: http://web.archive.org/web/20200203...ums/showthread.php?181048-How-to-Custom-Races!
This guide in: https://wowcreador.com/threads/tutorial-creacion-razas-custom-3-3-5a-tc-parte-1-4-core.987/
EmuCoach Discord Server
WoW Modding Discord Server
Attachments
Last edited: