Update DBC Structure for 322a

--HG--
branch : trunk
This commit is contained in:
n0n4m3
2009-12-17 10:27:53 +01:00
parent 9f672dbffe
commit 1aaa872dd0
5 changed files with 225 additions and 136 deletions
+36 -1
View File
@@ -232,6 +232,42 @@ enum AreaFlags
AREA_FLAG_OUTDOOR_PVP2 = 0x08000000 // Wintergrasp and it's subzones AREA_FLAG_OUTDOOR_PVP2 = 0x08000000 // Wintergrasp and it's subzones
}; };
enum Difficulty
{
REGULAR_DIFFICULTY = 0,
DUNGEON_DIFFICULTY_NORMAL = 0,
DUNGEON_DIFFICULTY_HEROIC = 1,
RAID_DIFFICULTY_10MAN_NORMAL = 0,
RAID_DIFFICULTY_25MAN_NORMAL = 1,
RAID_DIFFICULTY_10MAN_HEROIC = 2,
RAID_DIFFICULTY_25MAN_HEROIC = 3,
};
#define MAX_DUNGEON_DIFFICULTY 2
#define MAX_RAID_DIFFICULTY 4
#define MAX_DIFFICULTY 4
enum SpawnMask
{
SPAWNMASK_CONTINENT = (1 << REGULAR_DIFFICULTY),// any any maps without spawn modes
SPAWNMASK_DUNGEON_NORMAL = (1 << DUNGEON_DIFFICULTY_NORMAL),
SPAWNMASK_DUNGEON_HEROIC = (1 << DUNGEON_DIFFICULTY_HEROIC),
SPAWNMASK_DUNGEON_ALL = (SPAWNMASK_DUNGEON_NORMAL | SPAWNMASK_DUNGEON_HEROIC),
SPAWNMASK_RAID_10MAN_NORMAL = (1 << RAID_DIFFICULTY_10MAN_NORMAL),
SPAWNMASK_RAID_25MAN_NORMAL = (1 << RAID_DIFFICULTY_25MAN_NORMAL),
SPAWNMASK_RAID_NORMAL_ALL = (SPAWNMASK_RAID_10MAN_NORMAL | SPAWNMASK_RAID_25MAN_NORMAL),
SPAWNMASK_RAID_10MAN_HEROIC = (1 << RAID_DIFFICULTY_10MAN_HEROIC),
SPAWNMASK_RAID_25MAN_HEROIC = (1 << RAID_DIFFICULTY_25MAN_HEROIC),
SPAWNMASK_RAID_HEROIC_ALL = (SPAWNMASK_RAID_10MAN_HEROIC | SPAWNMASK_RAID_25MAN_HEROIC),
SPAWNMASK_RAID_ALL = (SPAWNMASK_RAID_NORMAL_ALL | SPAWNMASK_RAID_HEROIC_ALL),
};
enum FactionTemplateFlags enum FactionTemplateFlags
{ {
FACTION_TEMPLATE_FLAG_CONTESTED_GUARD = 0x00001000, // faction will attack players that were involved in PvP combats FACTION_TEMPLATE_FLAG_CONTESTED_GUARD = 0x00001000, // faction will attack players that were involved in PvP combats
@@ -333,4 +369,3 @@ enum SummonPropFlags
}; };
#endif #endif
+30 -13
View File
@@ -100,6 +100,11 @@ DBCStorage <LockEntry> sLockStore(LockEntryfmt);
DBCStorage <MailTemplateEntry> sMailTemplateStore(MailTemplateEntryfmt); DBCStorage <MailTemplateEntry> sMailTemplateStore(MailTemplateEntryfmt);
DBCStorage <MapEntry> sMapStore(MapEntryfmt); DBCStorage <MapEntry> sMapStore(MapEntryfmt);
// DBC used only for initialization sMapDifficultyMap at startup.
DBCStorage <MapDifficultyEntry> sMapDifficultyStore(MapDifficultyEntryfmt); // only for loading
MapDifficultyMap sMapDifficultyMap;
DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt); DBCStorage <MovieEntry> sMovieStore(MovieEntryfmt);
DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt); DBCStorage <QuestSortEntry> sQuestSortStore(QuestSortEntryfmt);
@@ -133,7 +138,7 @@ TalentSpellPosMap sTalentSpellPosMap;
DBCStorage <TalentTabEntry> sTalentTabStore(TalentTabEntryfmt); DBCStorage <TalentTabEntry> sTalentTabStore(TalentTabEntryfmt);
// store absolute bit position for first rank for talent inspect // store absolute bit position for first rank for talent inspect
static uint32 sTalentTabPages[12/*MAX_CLASSES*/][3]; static uint32 sTalentTabPages[MAX_CLASSES][3];
DBCStorage <TaxiNodesEntry> sTaxiNodesStore(TaxiNodesEntryfmt); DBCStorage <TaxiNodesEntry> sTaxiNodesStore(TaxiNodesEntryfmt);
TaxiMask sTaxiNodesMask; TaxiMask sTaxiNodesMask;
@@ -143,10 +148,10 @@ TaxiMask sOldContinentsNodesMask;
TaxiPathSetBySource sTaxiPathSetBySource; TaxiPathSetBySource sTaxiPathSetBySource;
DBCStorage <TaxiPathEntry> sTaxiPathStore(TaxiPathEntryfmt); DBCStorage <TaxiPathEntry> sTaxiPathStore(TaxiPathEntryfmt);
// DBC used only for initialization sTaxiPathSetBySource at startup. // DBC used only for initialization sTaxiPathNodeStore at startup.
TaxiPathNodesByPath sTaxiPathNodesByPath; TaxiPathNodesByPath sTaxiPathNodesByPath;
static DBCStorage <TaxiPathNodeEntry> sTaxiPathNodeStore(TaxiPathNodeEntryfmt); static DBCStorage <TaxiPathNodeEntry> sTaxiPathNodeStore(TaxiPathNodeEntryfmt);
DBCStorage <TotemCategoryEntry> sTotemCategoryStore(TotemCategoryEntryfmt); DBCStorage <TotemCategoryEntry> sTotemCategoryStore(TotemCategoryEntryfmt);
DBCStorage <VehicleEntry> sVehicleStore(VehicleEntryfmt); DBCStorage <VehicleEntry> sVehicleStore(VehicleEntryfmt);
DBCStorage <VehicleSeatEntry> sVehicleSeatStore(VehicleSeatEntryfmt); DBCStorage <VehicleSeatEntry> sVehicleSeatStore(VehicleSeatEntryfmt);
@@ -210,7 +215,7 @@ void LoadDBCStores(const std::string& dataPath)
{ {
std::string dbcPath = dataPath+"dbc/"; std::string dbcPath = dataPath+"dbc/";
const uint32 DBCFilesCount = 79; const uint32 DBCFilesCount = 80;
barGoLink bar( DBCFilesCount ); barGoLink bar( DBCFilesCount );
@@ -243,7 +248,6 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBarberShopStyleStore, dbcPath,"BarberShopStyle.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBarberShopStyleStore, dbcPath,"BarberShopStyle.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCharStartOutfitStore, dbcPath,"CharStartOutfit.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCharStartOutfitStore, dbcPath,"CharStartOutfit.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCharTitlesStore, dbcPath,"CharTitles.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCharTitlesStore, dbcPath,"CharTitles.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChatChannelsStore, dbcPath,"ChatChannels.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChatChannelsStore, dbcPath,"ChatChannels.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChrClassesStore, dbcPath,"ChrClasses.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sChrClassesStore, dbcPath,"ChrClasses.dbc");
@@ -314,6 +318,14 @@ void LoadDBCStores(const std::string& dataPath)
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sLockStore, dbcPath,"Lock.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sLockStore, dbcPath,"Lock.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMailTemplateStore, dbcPath,"MailTemplate.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMailTemplateStore, dbcPath,"MailTemplate.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMapStore, dbcPath,"Map.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMapStore, dbcPath,"Map.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMapDifficultyStore, dbcPath,"MapDifficulty.dbc");
// fill data
for(uint32 i = 1; i < sMapDifficultyStore.GetNumRows(); ++i)
if(MapDifficultyEntry const* entry = sMapDifficultyStore.LookupEntry(i))
sMapDifficultyMap[MAKE_PAIR32(entry->MapId,entry->Difficulty)] = MapDifficulty(entry->resetTime,entry->maxPlayers);
sMapDifficultyStore.Clear();
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMovieStore, dbcPath,"Movie.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sMovieStore, dbcPath,"Movie.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sQuestSortStore, dbcPath,"QuestSort.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sQuestSortStore, dbcPath,"QuestSort.dbc");
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sRandomPropertiesPointsStore, dbcPath,"RandPropPoints.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sRandomPropertiesPointsStore, dbcPath,"RandPropPoints.dbc");
@@ -506,18 +518,17 @@ void LoadDBCStores(const std::string& dataPath)
} }
// Check loaded DBC files proper version // Check loaded DBC files proper version
if( !sSpellStore.LookupEntry(66530) || // last added spell in 3.1.3 if( !sSpellStore.LookupEntry(69599) || // last added spell in 3.2.2
!sMapStore.LookupEntry(624) || // last map added in 3.1.3 !sMapStore.LookupEntry(650) || // last map added in 3.2.2
!sGemPropertiesStore.LookupEntry(1609) || // last gem property added in 3.1.3 !sGemPropertiesStore.LookupEntry(1629) || // last gem property added in 3.2.2
!sItemExtendedCostStore.LookupEntry(2671) || // last item extended cost added in 3.1.3 !sItemExtendedCostStore.LookupEntry(2723) || // last item extended cost added in 3.2.2
!sCharTitlesStore.LookupEntry(166) || // last char title added in 3.1.3 !sCharTitlesStore.LookupEntry(171) || // last char title added in 3.2.2
!sAreaStore.LookupEntry(2905) || // last area (areaflag) added in 3.1.3 !sAreaStore.LookupEntry(3091) || // last area (areaflag) added in 3.2.2
!sItemStore.LookupEntry(46894) ) // last client known item added in 3.1.3 !sItemStore.LookupEntry(49667) ) // last client known item added in 3.2.2
{ {
sLog.outError("\nYou have _outdated_ DBC files. Please extract correct versions from current using client."); sLog.outError("\nYou have _outdated_ DBC files. Please extract correct versions from current using client.");
exit(1); exit(1);
} }
sLog.outString(); sLog.outString();
sLog.outString( ">> Initialized %d data stores", DBCFilesCount ); sLog.outString( ">> Initialized %d data stores", DBCFilesCount );
} }
@@ -695,6 +706,12 @@ void Map2ZoneCoordinates(float& x,float& y,uint32 zone)
std::swap(x,y); // client have map coords swapped std::swap(x,y); // client have map coords swapped
} }
MapDifficulty const* GetMapDifficultyData(uint32 mapId, Difficulty difficulty)
{
MapDifficultyMap::const_iterator itr = sMapDifficultyMap.find(MAKE_PAIR32(mapId,difficulty));
return itr != sMapDifficultyMap.end() ? &itr->second : NULL;
}
uint32 const* GetTalentTabPages(uint8 cls) uint32 const* GetTalentTabPages(uint8 cls)
{ {
return sTalentTabPages[cls]; return sTalentTabPages[cls];
+5
View File
@@ -54,6 +54,9 @@ bool IsTotemCategoryCompatiableWith(uint32 itemTotemCategoryId, uint32 requiredT
void Zone2MapCoordinates(float &x, float &y, uint32 zone); void Zone2MapCoordinates(float &x, float &y, uint32 zone);
void Map2ZoneCoordinates(float &x, float &y, uint32 zone); void Map2ZoneCoordinates(float &x, float &y, uint32 zone);
typedef std::map<uint32/*pair32(map,diff)*/,MapDifficulty> MapDifficultyMap;
MapDifficulty const* GetMapDifficultyData(uint32 mapId, Difficulty difficulty);
uint32 const* /*[3]*/ GetTalentTabPages(uint8 cls); uint32 const* /*[3]*/ GetTalentTabPages(uint8 cls);
extern DBCStorage <AchievementEntry> sAchievementStore; extern DBCStorage <AchievementEntry> sAchievementStore;
@@ -110,6 +113,8 @@ extern DBCStorage <ItemSetEntry> sItemSetStore;
extern DBCStorage <LockEntry> sLockStore; extern DBCStorage <LockEntry> sLockStore;
extern DBCStorage <MailTemplateEntry> sMailTemplateStore; extern DBCStorage <MailTemplateEntry> sMailTemplateStore;
extern DBCStorage <MapEntry> sMapStore; extern DBCStorage <MapEntry> sMapStore;
//extern DBCStorage <MapDifficultyEntry> sMapDifficultyStore; -- use GetMapDifficultyData insteed
extern MapDifficultyMap sMapDifficultyMap;
extern DBCStorage <MovieEntry> sMovieStore; extern DBCStorage <MovieEntry> sMovieStore;
extern DBCStorage <QuestSortEntry> sQuestSortStore; extern DBCStorage <QuestSortEntry> sQuestSortStore;
extern DBCStorage <RandomPropertiesPointsEntry> sRandomPropertiesPointsStore; extern DBCStorage <RandomPropertiesPointsEntry> sRandomPropertiesPointsStore;
+140 -109
View File
@@ -658,7 +658,7 @@ struct ChrClassesEntry
uint32 spellfamily; // 56 uint32 spellfamily; // 56
// 57, unused // 57, unused
uint32 CinematicSequence; // 58 id from CinematicSequences.dbc uint32 CinematicSequence; // 58 id from CinematicSequences.dbc
uint32 addon; // 59 (0 - original race, 1 - tbc addon, ...) uint32 expansion; // 59 (0 - original race, 1 - tbc addon, ...)
}; };
struct ChrRacesEntry struct ChrRacesEntry
@@ -669,10 +669,11 @@ struct ChrRacesEntry
// 3 unused // 3 unused
uint32 model_m; // 4 uint32 model_m; // 4
uint32 model_f; // 5 uint32 model_f; // 5
// 6-7 unused // 6 unused
uint32 TeamID; // 8 (7-Alliance 1-Horde) uint32 TeamID; // 7 (7-Alliance 1-Horde)
// 9-12 unused // 8-11 unused
uint32 CinematicSequence; // 13 id from CinematicSequences.dbc uint32 CinematicSequence; // 12 id from CinematicSequences.dbc
//uint32 unk_322; // 13 faction (0 alliance, 1 horde, 2 not available?)
char* name[16]; // 14-29 used for DBC language detection/selection char* name[16]; // 14-29 used for DBC language detection/selection
// 30 string flags, unused // 30 string flags, unused
//char* nameFemale[16]; // 31-46, if different from base (male) case //char* nameFemale[16]; // 31-46, if different from base (male) case
@@ -680,7 +681,7 @@ struct ChrRacesEntry
//char* nameNeutralGender[16]; // 48-63, if different from base (male) case //char* nameNeutralGender[16]; // 48-63, if different from base (male) case
// 64 string flags, unused // 64 string flags, unused
// 65-67 unused // 65-67 unused
uint32 addon; // 68 (0 - original race, 1 - tbc addon, ...) uint32 expansion; // 68 (0 - original race, 1 - tbc addon, ...)
}; };
/* not used /* not used
@@ -1043,9 +1044,10 @@ struct ItemExtendedCostEntry
uint32 ID; // 0 extended-cost entry id uint32 ID; // 0 extended-cost entry id
uint32 reqhonorpoints; // 1 required honor points uint32 reqhonorpoints; // 1 required honor points
uint32 reqarenapoints; // 2 required arena points uint32 reqarenapoints; // 2 required arena points
uint32 reqitem[5]; // 3-7 required item id //uint32 unk1; // 4 probably indicates new 2v2 bracket restrictions
uint32 reqitemcount[5]; // 8-12 required count of 1st item uint32 reqitem[5]; // 5-8 required item id
uint32 reqpersonalarenarating; // 13 required personal arena rating uint32 reqitemcount[5]; // 9-13 required count of 1st item
uint32 reqpersonalarenarating; // 14 required personal arena rating};
}; };
struct ItemLimitCategoryEntry struct ItemLimitCategoryEntry
@@ -1062,14 +1064,14 @@ struct ItemRandomPropertiesEntry
uint32 ID; // 0 m_ID uint32 ID; // 0 m_ID
//char* internalName // 1 m_Name //char* internalName // 1 m_Name
uint32 enchant_id[5]; // 2-6 m_Enchantment uint32 enchant_id[5]; // 2-6 m_Enchantment
//char* nameSuffix[16] // 7-22 m_name_lang char* nameSuffix[16]; // 7-22 m_name_lang
// 23 name flags // 23 name flags
}; };
struct ItemRandomSuffixEntry struct ItemRandomSuffixEntry
{ {
uint32 ID; // 0 m_ID uint32 ID; // 0 m_ID
//char* name[16] // 1-16 m_name_lang char* nameSuffix[16]; // 1-16 m_name_lang
// 17, name flags // 17, name flags
// 18 m_internalName // 18 m_internalName
uint32 enchant_id[5]; // 19-21 m_enchantment uint32 enchant_id[5]; // 19-21 m_enchantment
@@ -1122,21 +1124,13 @@ struct MapEntry
// 55 intro text flags // 55 intro text flags
uint32 multimap_id; // 56 uint32 multimap_id; // 56
// 57 // 57
//chat* unknownText1[16]; // 58-73 unknown empty text fields, possible normal Intro text. int32 entrance_map; // 58 map_id of entrance map
// 74 text flags float entrance_x; // 59 entrance x coordinate (if exist single entry)
//chat* heroicIntroText[16]; // 75-90 heroic mode requirement text float entrance_y; // 60 entrance y coordinate (if exist single entry)
// 91 text flags // 61 -1, 0 and 720
//chat* unknownText2[16]; // 92-107 unknown empty text fields uint32 addon; // 62 (0-original maps,1-tbc addon)
// 108 text flags // 63 some kind of time?
int32 entrance_map; // 109 map_id of entrance map //uint32 maxPlayers; // 64 max players
float entrance_x; // 110 entrance x coordinate (if exist single entry)
float entrance_y; // 111 entrance y coordinate (if exist single entry)
uint32 resetTimeRaid; // 112
uint32 resetTimeHeroic; // 113
// 114 all 0
// 115 -1, 0 and 720
uint32 addon; // 116 (0-original maps,1-tbc addon)
// 117 some kind of time?
// Helpers // Helpers
uint32 Expansion() const { return addon; } uint32 Expansion() const { return addon; }
@@ -1148,8 +1142,6 @@ struct MapEntry
bool IsBattleGround() const { return map_type == MAP_BATTLEGROUND; } bool IsBattleGround() const { return map_type == MAP_BATTLEGROUND; }
bool IsBattleArena() const { return map_type == MAP_ARENA; } bool IsBattleArena() const { return map_type == MAP_ARENA; }
bool IsBattleGroundOrArena() const { return map_type == MAP_BATTLEGROUND || map_type == MAP_ARENA; } bool IsBattleGroundOrArena() const { return map_type == MAP_BATTLEGROUND || map_type == MAP_ARENA; }
bool SupportsHeroicMode() const { return resetTimeHeroic != 0; }
bool HasResetTime() const { return resetTimeHeroic || resetTimeRaid; }
bool IsMountAllowed() const bool IsMountAllowed() const
{ {
@@ -1157,7 +1149,7 @@ struct MapEntry
MapID==209 || MapID==269 || MapID==309 || // TanarisInstance, CavernsOfTime, Zul'gurub MapID==209 || MapID==269 || MapID==309 || // TanarisInstance, CavernsOfTime, Zul'gurub
MapID==509 || MapID==534 || MapID==560 || // AhnQiraj, HyjalPast, HillsbradPast MapID==509 || MapID==534 || MapID==560 || // AhnQiraj, HyjalPast, HillsbradPast
MapID==568 || MapID==580 || MapID==615 || // ZulAman, Sunwell Plateau, Obsidian Sanctrum MapID==568 || MapID==580 || MapID==615 || // ZulAman, Sunwell Plateau, Obsidian Sanctrum
MapID==616; // Eye Of Eternity MapID==616 || MapID==595; // Eye Of Eternity, The Culling of Stratholme
} }
bool IsContinent() const bool IsContinent() const
@@ -1166,6 +1158,19 @@ struct MapEntry
} }
}; };
struct MapDifficultyEntry
{
//uint32 Id; // 0
uint32 MapId; // 1
uint32 Difficulty; // 2 (for arenas: arena slot)
//char* areaTriggerText[16]; // 3-18 text showed when transfer to map failed (missing requirements)
//uint32 textFlags; // 19
uint32 resetTime; // 20
uint32 maxPlayers; // 21
//char* difficultyString; // 22
};
struct MovieEntry struct MovieEntry
{ {
uint32 Id; // 0 index uint32 Id; // 0 index
@@ -1191,21 +1196,24 @@ struct RandomPropertiesPointsEntry
struct ScalingStatDistributionEntry struct ScalingStatDistributionEntry
{ {
uint32 Id; uint32 Id; // 0
int32 StatMod[10]; int32 StatMod[10]; // 1-10
uint32 Modifier[10]; uint32 Modifier[10]; // 11-20
uint32 MaxLevel; uint32 MaxLevel; // 21
}; };
struct ScalingStatValuesEntry struct ScalingStatValuesEntry
{ {
uint32 Id; uint32 Id; // 0
uint32 Level; uint32 Level; // 1
uint32 ssdMultiplier[5]; // Multiplier for ScalingStatDistribution uint32 ssdMultiplier[4]; // 2-5 Multiplier for ScalingStatDistribution
uint32 armorMod[4]; // Armor for level uint32 armorMod[4]; // 6-9 Armor for level
uint32 dpsMod[6]; // DPS mod for level uint32 dpsMod[6]; // 10-15 DPS mod for level
uint32 spellBonus; // not sure.. TODO: need more info about uint32 spellBonus; // 16 spell power for level
uint32 feralBonus; // Feral AP bonus uint32 ssdMultiplier2; // 17 there's data from 3.1 dbc ssdMultiplier[3]
//uint32 unk1; // 18 all fields equal to 0
//uint32 unk2; // 19 unk, probably also Armor for level
uint32 armorMod2[4]; // 20-23 Armor for level
uint32 getssdMultiplier(uint32 mask) const uint32 getssdMultiplier(uint32 mask) const
{ {
@@ -1214,19 +1222,25 @@ struct ScalingStatValuesEntry
if(mask & 0x00000001) return ssdMultiplier[0]; if(mask & 0x00000001) return ssdMultiplier[0];
if(mask & 0x00000002) return ssdMultiplier[1]; if(mask & 0x00000002) return ssdMultiplier[1];
if(mask & 0x00000004) return ssdMultiplier[2]; if(mask & 0x00000004) return ssdMultiplier[2];
if(mask & 0x00000008) return ssdMultiplier[3]; if(mask & 0x00000008) return ssdMultiplier2;
if(mask & 0x00000010) return ssdMultiplier[4]; if(mask & 0x00000010) return ssdMultiplier[3];
} }
return 0; return 0;
} }
uint32 getArmorMod(uint32 mask) const uint32 getArmorMod(uint32 mask) const
{ {
if (mask&0x01E0) if (mask & 0x00F001E0)
{ {
if(mask & 0x00000020) return armorMod[0]; if(mask & 0x00000020) return armorMod[0];
if(mask & 0x00000040) return armorMod[1]; if(mask & 0x00000040) return armorMod[1];
if(mask & 0x00000080) return armorMod[2]; if(mask & 0x00000080) return armorMod[2];
if(mask & 0x00000100) return armorMod[3]; if(mask & 0x00000100) return armorMod[3];
if(mask & 0x00100000) return armorMod2[0]; // cloth
if(mask & 0x00200000) return armorMod2[1]; // leather
if(mask & 0x00400000) return armorMod2[2]; // mail
if(mask & 0x00800000) return armorMod2[3]; // plate
} }
return 0; return 0;
} }
@@ -1239,7 +1253,7 @@ struct ScalingStatValuesEntry
if(mask & 0x00000800) return dpsMod[2]; if(mask & 0x00000800) return dpsMod[2];
if(mask & 0x00001000) return dpsMod[3]; if(mask & 0x00001000) return dpsMod[3];
if(mask & 0x00002000) return dpsMod[4]; if(mask & 0x00002000) return dpsMod[4];
if(mask & 0x00004000) return dpsMod[5]; if(mask & 0x00004000) return dpsMod[5]; // not used?
} }
return 0; return 0;
} }
@@ -1248,9 +1262,9 @@ struct ScalingStatValuesEntry
if (mask & 0x00008000) return spellBonus; if (mask & 0x00008000) return spellBonus;
return 0; return 0;
} }
uint32 getFeralBonus(uint32 mask) const uint32 getFeralBonus(uint32 mask) const // removed in 3.2.x?
{ {
if (mask & 0x00010000) return feralBonus; if (mask & 0x00010000) return 0; // not used?
return 0; return 0;
} }
}; };
@@ -1342,68 +1356,71 @@ struct SpellEntry
uint32 AttributesEx4; // 8 m_attributesExD uint32 AttributesEx4; // 8 m_attributesExD
uint32 AttributesEx5; // 9 m_attributesExE uint32 AttributesEx5; // 9 m_attributesExE
uint32 AttributesEx6; // 10 m_attributesExF uint32 AttributesEx6; // 10 m_attributesExF
uint32 Stances; // 11 m_shapeshiftMask // uint32 unk_320_1; // 11 3.2.0 (0x20 - totems, 0x4 - paladin auras, etc...)
uint32 StancesNot; // 12 m_shapeshiftExclude uint32 Stances; // 12 m_shapeshiftMask
uint32 Targets; // 13 m_targets // uint32 unk_320_2; // 13 3.2.0
uint32 TargetCreatureType; // 14 m_targetCreatureType uint32 StancesNot; // 14 m_shapeshiftExclude
uint32 RequiresSpellFocus; // 15 m_requiresSpellFocus // uint32 unk_320_3; // 15 3.2.0
uint32 FacingCasterFlags; // 16 m_facingCasterFlags uint32 Targets; // 16 m_targets
uint32 CasterAuraState; // 17 m_casterAuraState uint32 TargetCreatureType; // 17 m_targetCreatureType
uint32 TargetAuraState; // 18 m_targetAuraState uint32 RequiresSpellFocus; // 18 m_requiresSpellFocus
uint32 CasterAuraStateNot; // 19 m_excludeCasterAuraState uint32 FacingCasterFlags; // 19 m_facingCasterFlags
uint32 TargetAuraStateNot; // 20 m_excludeTargetAuraState uint32 CasterAuraState; // 20 m_casterAuraState
uint32 casterAuraSpell; // 21 m_casterAuraSpell uint32 TargetAuraState; // 21 m_targetAuraState
uint32 targetAuraSpell; // 22 m_targetAuraSpell uint32 CasterAuraStateNot; // 22 m_excludeCasterAuraState
uint32 excludeCasterAuraSpell; // 23 m_excludeCasterAuraSpell uint32 TargetAuraStateNot; // 23 m_excludeTargetAuraState
uint32 excludeTargetAuraSpell; // 24 m_excludeTargetAuraSpell uint32 casterAuraSpell; // 24 m_casterAuraSpell
uint32 CastingTimeIndex; // 25 m_castingTimeIndex uint32 targetAuraSpell; // 25 m_targetAuraSpell
uint32 RecoveryTime; // 26 m_recoveryTime uint32 excludeCasterAuraSpell; // 26 m_excludeCasterAuraSpell
uint32 CategoryRecoveryTime; // 27 m_categoryRecoveryTime uint32 excludeTargetAuraSpell; // 27 m_excludeTargetAuraSpell
uint32 InterruptFlags; // 28 m_interruptFlags uint32 CastingTimeIndex; // 28 m_castingTimeIndex
uint32 AuraInterruptFlags; // 29 m_auraInterruptFlags uint32 RecoveryTime; // 29 m_recoveryTime
uint32 ChannelInterruptFlags; // 30 m_channelInterruptFlags uint32 CategoryRecoveryTime; // 30 m_categoryRecoveryTime
uint32 procFlags; // 31 m_procTypeMask uint32 InterruptFlags; // 31 m_interruptFlags
uint32 procChance; // 32 m_procChance uint32 AuraInterruptFlags; // 32 m_auraInterruptFlags
uint32 procCharges; // 33 m_procCharges uint32 ChannelInterruptFlags; // 33 m_channelInterruptFlags
uint32 maxLevel; // 34 m_maxLevel uint32 procFlags; // 34 m_procTypeMask
uint32 baseLevel; // 35 m_baseLevel uint32 procChance; // 35 m_procChance
uint32 spellLevel; // 36 m_spellLevel uint32 procCharges; // 36 m_procCharges
uint32 DurationIndex; // 37 m_durationIndex uint32 maxLevel; // 37 m_maxLevel
uint32 powerType; // 38 m_powerType uint32 baseLevel; // 38 m_baseLevel
uint32 manaCost; // 39 m_manaCost uint32 spellLevel; // 39 m_spellLevel
uint32 manaCostPerlevel; // 40 m_manaCostPerLevel uint32 DurationIndex; // 40 m_durationIndex
uint32 manaPerSecond; // 41 m_manaPerSecond uint32 powerType; // 41 m_powerType
uint32 manaPerSecondPerLevel; // 42 m_manaPerSecondPerLeve uint32 manaCost; // 42 m_manaCost
uint32 rangeIndex; // 43 m_rangeIndex uint32 manaCostPerlevel; // 43 m_manaCostPerLevel
float speed; // 44 m_speed uint32 manaPerSecond; // 44 m_manaPerSecond
//uint32 modalNextSpell; // 45 m_modalNextSpell not used uint32 manaPerSecondPerLevel; // 45 m_manaPerSecondPerLeve
uint32 StackAmount; // 46 m_cumulativeAura uint32 rangeIndex; // 46 m_rangeIndex
uint32 Totem[2]; // 47-48 m_totem float speed; // 47 m_speed
int32 Reagent[8]; // 49-56 m_reagent //uint32 modalNextSpell; // 48 m_modalNextSpell not used
uint32 ReagentCount[8]; // 57-64 m_reagentCount uint32 StackAmount; // 49 m_cumulativeAura
int32 EquippedItemClass; // 65 m_equippedItemClass (value) uint32 Totem[2]; // 50-51 m_totem
int32 EquippedItemSubClassMask; // 66 m_equippedItemSubclass (mask) int32 Reagent[8]; // 50-59 m_reagent
int32 EquippedItemInventoryTypeMask; // 67 m_equippedItemInvTypes (mask) uint32 ReagentCount[8]; // 60-67 m_reagentCount
uint32 Effect[MAX_SPELL_EFFECTS]; // 68-70 m_effect int32 EquippedItemClass; // 68 m_equippedItemClass (value)
int32 EffectDieSides[MAX_SPELL_EFFECTS]; // 71-73 m_effectDieSides int32 EquippedItemSubClassMask; // 69 m_equippedItemSubclass (mask)
int32 EffectBaseDice[MAX_SPELL_EFFECTS]; // 74-76 m_effectBaseDice int32 EquippedItemInventoryTypeMask; // 70 m_equippedItemInvTypes (mask)
float EffectDicePerLevel[MAX_SPELL_EFFECTS]; // 77-79 m_effectDicePerLevel uint32 Effect[MAX_SPELL_EFFECTS]; // 71-73 m_effect
float EffectRealPointsPerLevel[MAX_SPELL_EFFECTS]; // 80-82 m_effectRealPointsPerLevel int32 EffectDieSides[MAX_SPELL_EFFECTS]; // 74-76 m_effectDieSides
int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 83-85 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) int32 EffectBaseDice[MAX_SPELL_EFFECTS]; // 77-79 m_effectBaseDice
uint32 EffectMechanic[MAX_SPELL_EFFECTS]; // 86-88 m_effectMechanic float EffectDicePerLevel[MAX_SPELL_EFFECTS]; // 80-82 m_effectDicePerLevel
uint32 EffectImplicitTargetA[MAX_SPELL_EFFECTS]; // 89-91 m_implicitTargetA float EffectRealPointsPerLevel[MAX_SPELL_EFFECTS]; // 83-85 m_effectRealPointsPerLevel
uint32 EffectImplicitTargetB[MAX_SPELL_EFFECTS]; // 92-94 m_implicitTargetB int32 EffectBasePoints[MAX_SPELL_EFFECTS]; // 86-88 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints)
uint32 EffectRadiusIndex[MAX_SPELL_EFFECTS]; // 95-97 m_effectRadiusIndex - spellradius.dbc uint32 EffectMechanic[MAX_SPELL_EFFECTS]; // 89-91 m_effectMechanic
uint32 EffectApplyAuraName[MAX_SPELL_EFFECTS]; // 98-100 m_effectAura uint32 EffectImplicitTargetA[MAX_SPELL_EFFECTS]; // 92-94 m_implicitTargetA
uint32 EffectAmplitude[MAX_SPELL_EFFECTS]; // 101-103 m_effectAuraPeriod uint32 EffectImplicitTargetB[MAX_SPELL_EFFECTS]; // 95-97 m_implicitTargetB
float EffectMultipleValue[MAX_SPELL_EFFECTS]; // 104-106 m_effectAmplitude uint32 EffectRadiusIndex[MAX_SPELL_EFFECTS]; // 98-100 m_effectRadiusIndex - spellradius.dbc
uint32 EffectChainTarget[MAX_SPELL_EFFECTS]; // 107-109 m_effectChainTargets uint32 EffectApplyAuraName[MAX_SPELL_EFFECTS]; // 101-103 m_effectAura
uint32 EffectItemType[MAX_SPELL_EFFECTS]; // 110-112 m_effectItemType uint32 EffectAmplitude[MAX_SPELL_EFFECTS]; // 104-106 m_effectAuraPeriod
int32 EffectMiscValue[MAX_SPELL_EFFECTS]; // 113-115 m_effectMiscValue float EffectMultipleValue[MAX_SPELL_EFFECTS]; // 107-109 m_effectAmplitude
int32 EffectMiscValueB[MAX_SPELL_EFFECTS]; // 116-118 m_effectMiscValueB uint32 EffectChainTarget[MAX_SPELL_EFFECTS]; // 110-112 m_effectChainTargets
uint32 EffectTriggerSpell[MAX_SPELL_EFFECTS]; // 119-121 m_effectTriggerSpell uint32 EffectItemType[MAX_SPELL_EFFECTS]; // 113-115 m_effectItemType
float EffectPointsPerComboPoint[MAX_SPELL_EFFECTS]; // 122-124 m_effectPointsPerCombo int32 EffectMiscValue[MAX_SPELL_EFFECTS]; // 116-118 m_effectMiscValue
flag96 EffectSpellClassMask[MAX_SPELL_EFFECTS]; // int32 EffectMiscValueB[MAX_SPELL_EFFECTS]; // 119-121 m_effectMiscValueB
uint32 EffectTriggerSpell[MAX_SPELL_EFFECTS]; // 122-124 m_effectTriggerSpell
float EffectPointsPerComboPoint[MAX_SPELL_EFFECTS]; // 125-127 m_effectPointsPerCombo
flag96 EffectSpellClassMask[MAX_SPELL_EFFECTS]; // 127-133
uint32 SpellVisual[2]; // 134-135 m_spellVisualID uint32 SpellVisual[2]; // 134-135 m_spellVisualID
uint32 SpellIconID; // 136 m_spellIconID uint32 SpellIconID; // 136 m_spellIconID
uint32 activeIconID; // 137 m_activeIconID uint32 activeIconID; // 137 m_activeIconID
@@ -1436,6 +1453,8 @@ struct SpellEntry
uint32 runeCostID; // 229 m_runeCostID uint32 runeCostID; // 229 m_runeCostID
//uint32 spellMissileID; // 230 m_spellMissileID not used //uint32 spellMissileID; // 230 m_spellMissileID not used
//uint32 PowerDisplayId; // 231 PowerDisplay.dbc, new in 3.1 //uint32 PowerDisplayId; // 231 PowerDisplay.dbc, new in 3.1
//float unk_320_4[3]; // 232-234 3.2.0
//uint32 spellDescriptionVariableID; // 235 3.2.0
// helpers // helpers
int32 CalculateSimpleValue(uint8 eff) const { return EffectBasePoints[eff]+int32(EffectBaseDice[eff]); } int32 CalculateSimpleValue(uint8 eff) const { return EffectBasePoints[eff]+int32(EffectBaseDice[eff]); }
@@ -1538,7 +1557,7 @@ struct SpellItemEnchantmentEntry
uint32 EnchantmentCondition; // 34 m_condition_id uint32 EnchantmentCondition; // 34 m_condition_id
uint32 requiredSkill; // 35 m_requiredSkillID uint32 requiredSkill; // 35 m_requiredSkillID
uint32 requiredSkillValue; // 36 m_requiredSkillRank uint32 requiredSkillValue; // 36 m_requiredSkillRank
uint32 RequiredLevel; // 37 m_requiredLevel - new in 3.1 uint32 requiredLevel; // 37 m_requiredLevel
}; };
struct SpellItemEnchantmentConditionEntry struct SpellItemEnchantmentConditionEntry
@@ -1558,6 +1577,7 @@ struct StableSlotPricesEntry
uint32 Price; uint32 Price;
}; };
struct SummonPropertiesEntry struct SummonPropertiesEntry
{ {
uint32 Id; // 0 uint32 Id; // 0
@@ -1568,6 +1588,7 @@ struct SummonPropertiesEntry
uint32 Flags; // 5 uint32 Flags; // 5
}; };
#define MAX_TALENT_RANK 5 #define MAX_TALENT_RANK 5
#define MAX_PET_TALENT_RANK 3 // use in calculations, expected <= MAX_TALENT_RANK #define MAX_PET_TALENT_RANK 3 // use in calculations, expected <= MAX_TALENT_RANK
@@ -1747,6 +1768,7 @@ struct WorldMapAreaEntry
float x2; // 7 float x2; // 7
int32 virtual_map_id; // 8 -1 (map_id have correct map) other: virtual map where zone show (map_id - where zone in fact internally) int32 virtual_map_id; // 8 -1 (map_id have correct map) other: virtual map where zone show (map_id - where zone in fact internally)
// int32 dungeonMap_id; // 9 pointer to DungeonMap.dbc (owerride x1,x2,y1,y2 coordinates) // int32 dungeonMap_id; // 9 pointer to DungeonMap.dbc (owerride x1,x2,y1,y2 coordinates)
// uint32 someMapID; // 10
}; };
#define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4 #define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4
@@ -1780,6 +1802,15 @@ struct WorldSafeLocsEntry
#endif #endif
// Structures not used for casting to loaded DBC data and not required then packing // Structures not used for casting to loaded DBC data and not required then packing
struct MapDifficulty
{
MapDifficulty() : resetTime(0), maxPlayers(0) {}
MapDifficulty(uint32 _resetTime, uint32 _maxPlayers) : resetTime(_resetTime), maxPlayers(_maxPlayers) {}
uint32 resetTime;
uint32 maxPlayers;
};
struct TalentSpellPos struct TalentSpellPos
{ {
TalentSpellPos() : talent_id(0), rank(0) {} TalentSpellPos() : talent_id(0), rank(0) {}
+10 -9
View File
@@ -36,7 +36,7 @@ const char CharTitlesEntryfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
const char ChatChannelsEntryfmt[]="iixssssssssssssssssxxxxxxxxxxxxxxxxxx"; const char ChatChannelsEntryfmt[]="iixssssssssssssssssxxxxxxxxxxxxxxxxxx";
// ChatChannelsEntryfmt, index not used (more compact store) // ChatChannelsEntryfmt, index not used (more compact store)
const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii"; const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii";
const char ChrRacesEntryfmt[]="nxixiixxixxxxissssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi"; const char ChrRacesEntryfmt[]="nxixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
const char CinematicSequencesEntryfmt[]="nxxxxxxxxx"; const char CinematicSequencesEntryfmt[]="nxxxxxxxxx";
const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx"; const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx";
const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx"; const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx";
@@ -68,26 +68,27 @@ const char Itemfmt[]="niiiiiii";
const char ItemBagFamilyfmt[]="nxxxxxxxxxxxxxxxxx"; const char ItemBagFamilyfmt[]="nxxxxxxxxxxxxxxxxx";
//const char ItemDisplayTemplateEntryfmt[]="nxxxxxxxxxxixxxxxxxxxxx"; //const char ItemDisplayTemplateEntryfmt[]="nxxxxxxxxxxixxxxxxxxxxx";
//const char ItemCondExtCostsEntryfmt[]="xiii"; //const char ItemCondExtCostsEntryfmt[]="xiii";
const char ItemExtendedCostEntryfmt[]="niiiiiiiiiiiiix"; const char ItemExtendedCostEntryfmt[]="niixiiiiiiiiiiix";
const char ItemLimitCategoryEntryfmt[]="nxxxxxxxxxxxxxxxxxix"; const char ItemLimitCategoryEntryfmt[]="nxxxxxxxxxxxxxxxxxix";
const char ItemRandomPropertiesfmt[]="nxiiiiixxxxxxxxxxxxxxxxx"; const char ItemRandomPropertiesfmt[]="nxiiiiissssssssssssssssx";
const char ItemRandomSuffixfmt[]="nxxxxxxxxxxxxxxxxxxiiiiiiiiii"; const char ItemRandomSuffixfmt[]="nssssssssssssssssxxiiiiiiiiii";
const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii"; const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii";
const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx"; const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx";
const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxssssssssssssssssx"; const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxssssssssssssssssx";
const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiffiixxix"; const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx";
const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix";
const char MovieEntryfmt[]="nxx"; const char MovieEntryfmt[]="nxx";
const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx"; const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx";
const char RandomPropertiesPointsfmt[]="niiiiiiiiiiiiiii"; const char RandomPropertiesPointsfmt[]="niiiiiiiiiiiiiii";
const char ScalingStatDistributionfmt[]="niiiiiiiiiiiiiiiiiiiii"; const char ScalingStatDistributionfmt[]="niiiiiiiiiiiiiiiiiiiii";
const char ScalingStatValuesfmt[]="iniiiiiiiiiiiiiiiii"; const char ScalingStatValuesfmt[]="iniiiiiiiiiiiiiiiixxiiii";
const char SkillLinefmt[]="nixssssssssssssssssxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxxxxxxi"; const char SkillLinefmt[]="nixssssssssssssssssxxxxxxxxxxxxxxxxxxixxxxxxxxxxxxxxxxxi";
const char SkillLineAbilityfmt[]="niiiixxiiiiixx"; const char SkillLineAbilityfmt[]="niiiixxiiiiixx";
const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const char SpellCastTimefmt[]="nixx"; const char SpellCastTimefmt[]="nixx";
const char SpellDurationfmt[]="niii"; const char SpellDurationfmt[]="niii";
const char SpellEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixx"; const char SpellEntryfmt[]="niiiiiiiiiixixixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiixxxxxx";
const std::string CustomSpellEntryfmt="pappppppppaaapaaaaaaaaaaapaaapapppppppaaaaapaapaaaaaaaaaaaaaaaaaappppppppppppppppppppppppppppppppppppppppppaaaaaapppppppppaaapppppppppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappppppppapppaaaaappaaa"; const std::string CustomSpellEntryfmt="pappppppppaaaaaapaaaaaaaaaaapaaapapppppppaaaaapaapaaaaaaaaaaaaaaaaaappppppppppppppppppppppppppppppppppppppppppaaaaaapppppppppaaapppppppppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaappppppppapppaaaaappaaaaaaa";
const std::string CustomSpellEntryIndex = "Id"; const std::string CustomSpellEntryIndex = "Id";
const char SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx"; const char SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx";
const char SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiiiii"; const char SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiiiii";
@@ -106,7 +107,7 @@ const char TaxiPathNodeEntryfmt[]="diiifffiixx";
const char TotemCategoryEntryfmt[]="nxxxxxxxxxxxxxxxxxii"; const char TotemCategoryEntryfmt[]="nxxxxxxxxxxxxxxxxxii";
const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifiixx"; const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifiixx";
const char VehicleSeatEntryfmt[]="niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiiixxxxxxxxxxxx"; const char VehicleSeatEntryfmt[]="niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiiixxxxxxxxxxxx";
const char WorldMapAreaEntryfmt[]="xinxffffix"; const char WorldMapAreaEntryfmt[]="xinxffffixx";
const char WorldMapOverlayEntryfmt[]="nxiiiixxxxxxxxxxx"; const char WorldMapOverlayEntryfmt[]="nxiiiixxxxxxxxxxx";
const char WorldSafeLocsEntryfmt[]="nifffxxxxxxxxxxxxxxxxx"; const char WorldSafeLocsEntryfmt[]="nifffxxxxxxxxxxxxxxxxx";