How to Change Starting Equipment

Published

There are a few things that you'll need before editing a DBC file. I've seen many different programs, and even more people recommending each program over every other program, but the vast majority either didn't work or corrupted the DBC files. I'll only be recommending the programs that work for me. So, before you continue reading, please download this; it contains everything that I use. These programs will only work on Windows.

Just in case anyone wants to know what Iā€™m running:

Assuming that you've followed my instructions to download the tools that we'll be using in this tutorial, lets begin!

If you already know how to edit DBC files, which I'm going to assume that most of the people reading this don't, then you can skip to the end of this post and check out my notes on the DBC files. Although I would recommend doing a quick read-through of the tutorial.

The rest of this will be a simple explanation of how to alter the Male Human Warrior's starting gear. Although this example is fairly specific, it does cover everything you'll need to edit any race, class, and gender combination.


Now that you've downloaded the tools and have a folder of clean, unedited, DBC files to work with and revert to in-case of any unforeseen errors, lets begin!

Go to the folder containing your DBC files, copy the CharStartOutfit.dbc file into the /Tools/DBCUtil/ folder, and then double-click on DBCUtil.exe. Now go to the /Tools/CSVed/ folder, double-click on CSVed.exe, select Filethen Open...and select /Tools/DBCUtil/CharStartOutfit.dbc.csv. To edit a record in CSVed you simply need to double-click on the row and then click the Apply Changesbutton in the bottom-left corner of the edit form window. Before we go any further I must mention that the CharStartOutfit.dbc file is an utter mess and because of this I will be writing the rest of this tutorial in the belief that you are changing all of the starting outfits for all of the races and their class/gender combinations. The first thing that you should do in CSVed is to select all of the records, then right-click on a record, and delete all of them. This will allow you to create a simple, easy to read, and easy to edit file to replace the mess that Blizzard has left us with.

I will be using some customized gear for this tutorial, as it was written while I was editing the starting gear on my server. To avoid any confusion and to allow you to easily follow this tutorial, here are the queries for the items we will be using:

    
        INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (80001, 0, 0, -1, 'Pesant\'s Vest', 52958, 1, 0, 0, 0, 1, 1, 4, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, '', 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
        INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (80002, 0, 0, -1, 'Pesant\'s Boots', 9929, 1, 0, 0, 0, 1, 1, 8, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, '', 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
        INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (80003, 0, 0, -1, 'Pesant\'s Pants', 14450, 1, 0, 0, 0, 1, 1, 7, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, '', 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
    

I haven't tested this query as it's a direct export from the database on my server, but it should work and if it doesn't just tell me.

Now that you've got the three items we'll be using imported into your database and you have an empty CharStartOutfit.dbc file open in CSVed we can begin inputting our data. The first things we need to enter is a unique row ID in the first column, race ID in the second column, class ID in the third, gender ID in the fourth, and to leave the fifth column as zero. If you're looking for the race and class IDs you can find them near the end of this post. In this case we will be entering 1, 1, 1, 0, and 0in each of the first five columns. These numbers mean that this record is the first record which represents a Human Warrior who is Male.

For the next three columns we will input 800001, 800003, and 800002. These are the entry IDs of the chestpiece, pants, and boots of the set our Male Human Warrior will start with. These IDs can be in any order, just write down which order you put them in for future reference. Columns nine to twenty-nine will all have -1as their value as we aren't going to allow the Male Human Warrior to start with anything other than a chestpiece, pants, and boots.

Columns thirtyto thirty-twowill define which pieces of gear will show up on the character creation screen. Because of this you do not need to list the display ID of every single item the character starts with. Because the Male Human Warrior will start with a chestpiece, pants, and boots we will be listing all three display IDs. I've prepared four different queries for you to use with your database to find the display IDs of whichever items you're using. Pick one of them and where it says to put numbers just input the correct numbers and run the query.

    
        /* With the item name: */
        SELECT id, name, displayid FROM item_template WHERE entry = putItemEntryIDHere;
        SELECT id, name, displayid FROM item_template WHERE entry BETWEEN putLowerItemEntryIDHere AND putHigherItemEntryIDHere;
        /* Without the item name: */
        SELECT id, displayid FROM item_template WHERE entry = putItemEntryIDHere;
        SELECT id, displayid FROM item_template WHERE entry BETWEEN putLowerItemEntryIDHere AND putHigherItemEntryIDHere;
    

Because we're using the custom items I've supplied we will enter 52958, 14450, and 9929 in each of the columns from thirty to thirty-two. The rest of the display ID columns from thirty-three to fifty-three will contain -1 as we have no other display IDs to enter. The final numbers to enter are 4, 7, and 8 in columns fifty-four to fifty-six. These three numbers say that the items in columns six to eight and the display IDs in columns thirty to thirty-two represent a chestpiece, pants, and boots. You can find more information on these values near the end of this post.

Now that you've finished setting up the Male Human Warrior you can click File and then Save. Now go into /Tools/DBCUtil/, delete CharStartOutfit.dbc if it still exists, and then drag CharStartOutfit.dbc.csv onto DBCUtil.exe to create the new CharStartOutfit.dbc. This file needs to be copied into your /Server/bin/data/dbc/ folder as well as added to a .MPQ file that all of your users should be given. If you require instruction on how to create a new MPQ file you can refer to this tutorial.

Your server doesn't need to be restarted after adding the CharStartOutfit.dbc to the /Server/bin/data/dbc/ folder, but your client will need to be restarted after placing the MPQ file into your /WoW/Data/ folder as far as I know.

Below are a few images to show the finished product of all this work:


CharStartOutfit.dbc Column Information:

When entering in the display IDs and InventoryTypes of each item you must write them in the exact same order as the items appear in columns 6 to 29.

InventoryTypes:

Class IDs:

Race IDs: