diff options
Diffstat (limited to 'src/game/DBCStructure.h')
-rw-r--r-- | src/game/DBCStructure.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index 98f4dfd3744..7e459c61e8b 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -17,21 +17,27 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #ifndef MANGOS_DBCSTRUCTURE_H #define MANGOS_DBCSTRUCTURE_H + #include "DBCEnums.h" #include "Platform/Define.h" #include "Util.h" + #include <map> #include <set> #include <vector> + // Structures using to access raw DBC data and required packing to portability + // GCC have alternative #pragma pack(N) syntax and old gcc version not support pack(push,N), also any gcc version not support it at some platform #if defined( __GNUC__ ) #pragma pack(1) #else #pragma pack(push,1) #endif + struct AchievementEntry { uint32 ID; // 0 @@ -52,6 +58,7 @@ struct AchievementEntry uint32 count; // 60 - need this count of completed criterias (own or referenced achievement criterias) uint32 refAchievement; // 61 - referenced achievement (counting of all completed criterias) }; + struct AchievementCategoryEntry { uint32 ID; // 0 @@ -60,6 +67,7 @@ struct AchievementCategoryEntry //uint32 name_flags; // 18 //uint32 sortOrder; // 19 }; + struct AchievementCriteriaEntry { uint32 ID; // 0 @@ -74,6 +82,7 @@ struct AchievementCriteriaEntry uint32 creatureID; // 3 uint32 creatureCount; // 4 } kill_creature; + // ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1 struct { @@ -84,89 +93,105 @@ struct AchievementCriteriaEntry uint32 additionalRequirement2_type; // 7 additional requirement 2 type uint32 additionalRequirement2_value; // 8 additional requirement 1 value } win_bg; + // ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL = 5 struct { uint32 unused; // 3 uint32 level; // 4 } reach_level; + // ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7 struct { uint32 skillID; // 3 uint32 skillLevel; // 4 } reach_skill_level; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8 struct { uint32 linkedAchievement; // 3 } complete_achievement; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT = 9 struct { uint32 unused; // 3 uint32 totalQuestCount; // 4 } complete_quest_count; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10 struct { uint32 unused; // 3 uint32 numberOfDays; // 4 } complete_daily_quest_daily; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11 struct { uint32 zoneID; // 3 uint32 questCount; // 4 } complete_quests_in_zone; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14 struct { uint32 unused; // 3 uint32 questCount; // 4 } complete_daily_quest; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15 struct { uint32 mapID; // 3 } complete_battleground; + // ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP = 16 struct { uint32 mapID; // 3 } death_at_map; + // ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON = 18 struct { uint32 manLimit; // 3 } death_in_dungeon; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19 struct { uint32 groupSize; // 3 can be 5, 10 or 25 } complete_raid; + // ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE = 20 struct { uint32 creatureEntry; // 3 } killed_by_creature; + // ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING = 24 struct { uint32 unused; // 3 uint32 fallHeight; // 4 } fall_without_dying; + // ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM = 26 struct { uint32 type; // 3, see enum EnviromentalDamage } death_from; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST = 27 struct { uint32 questID; // 3 uint32 questCount; // 4 } complete_quest; + // ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET = 28 // ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2 = 69 struct @@ -174,6 +199,7 @@ struct AchievementCriteriaEntry uint32 spellID; // 3 uint32 spellCount; // 4 } be_spell_target; + // ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL = 29 // ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110 struct @@ -181,33 +207,39 @@ struct AchievementCriteriaEntry uint32 spellID; // 3 uint32 castCount; // 4 } cast_spell; + // ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 struct { uint32 areaID; // 3 Reference to AreaTable.dbc uint32 killCount; // 4 } honorable_kill_at_area; + // ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA = 32 struct { uint32 mapID; // 3 Reference to Map.dbc } win_arena; + // ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA = 33 struct { uint32 mapID; // 3 Reference to Map.dbc } play_arena; + // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL = 34 struct { uint32 spellID; // 3 Reference to Map.dbc } learn_spell; + // ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36 struct { uint32 itemID; // 3 uint32 itemCount; // 4 } own_item; + // ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA = 37 struct { @@ -215,77 +247,90 @@ struct AchievementCriteriaEntry uint32 count; // 4 uint32 flag; // 5 4=in a row } win_rated_arena; + // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 struct { uint32 teamtype; // 3 {2,3,5} } highest_team_rating; + // ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING = 39 struct { uint32 teamtype; // 3 {2,3,5} uint32 teamrating; // 4 } reach_team_rating; + // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40 struct { uint32 skillID; // 3 uint32 skillLevel; // 4 apprentice=1, journeyman=2, expert=3, artisan=4, master=5, grand master=6 } learn_skill_level; + // ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41 struct { uint32 itemID; // 3 uint32 itemCount; // 4 } use_item; + // ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM = 42 struct { uint32 itemID; // 3 uint32 itemCount; // 4 } loot_item; + // ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43 struct { // TODO: This rank is _NOT_ the index from AreaTable.dbc uint32 areaReference; // 3 } explore_area; + // ACHIEVEMENT_CRITERIA_TYPE_OWN_RANK = 44 struct { // TODO: This rank is _NOT_ the index from CharTitles.dbc uint32 rank; // 3 } own_rank; + // ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT = 45 struct { uint32 unused; // 3 uint32 numberOfSlots; // 4 } buy_bank_slot; + // ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION = 46 struct { uint32 factionID; // 3 uint32 reputationAmount; // 4 Total reputation amount, so 42000 = exalted } gain_reputation; + // ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION= 47 struct { uint32 unused; // 3 uint32 numberOfExaltedFactions; // 4 } gain_exalted_reputation; + // ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP = 48 struct { uint32 unused; // 3 uint32 numberOfVisits; // 4 } visit_barber; + // ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49 // TODO: where is the required itemlevel stored? struct { uint32 itemSlot; // 3 } equip_epic_item; + // ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50 struct { @@ -298,18 +343,21 @@ struct AchievementCriteriaEntry uint32 rollValue; // 3 uint32 count; // 4 } roll_greed_on_loot; + // ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52 struct { uint32 classID; // 3 uint32 count; // 4 } hk_class; + // ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53 struct { uint32 raceID; // 3 uint32 count; // 4 } hk_race; + // ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54 // TODO: where is the information about the target stored? struct @@ -327,12 +375,14 @@ struct AchievementCriteriaEntry uint32 flag; // 5 =3 for battleground healing uint32 mapid; // 6 } healing_done; + // ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57 struct { uint32 itemID; // 3 uint32 count; // 4 } equip_item; + // ACHIEVEMENT_CRITERIA_TYPE_MONEY_FROM_QUEST_REWARD= 62 struct { @@ -340,18 +390,21 @@ struct AchievementCriteriaEntry uint32 goldInCopper; // 4 } quest_reward_money; + // ACHIEVEMENT_CRITERIA_TYPE_LOOT_MONEY = 67 struct { uint32 unused; // 3 uint32 goldInCopper; // 4 } loot_money; + // ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT = 68 struct { uint32 goEntry; // 3 uint32 useCount; // 4 } use_gameobject; + // ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL = 70 // TODO: are those special criteria stored in the dbc or do we have to add another sql table? struct @@ -359,62 +412,73 @@ struct AchievementCriteriaEntry uint32 unused; // 3 uint32 killCount; // 4 } special_pvp_kill; + // ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72 struct { uint32 goEntry; // 3 uint32 lootCount; // 4 } fish_in_gameobject; + // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75 struct { uint32 skillLine; // 3 uint32 spellCount; // 4 } learn_skillline_spell; + // ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL = 76 struct { uint32 unused; // 3 uint32 duelCount; // 4 } win_duel; + // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER = 96 struct { uint32 powerType; // 3 mana=0, 1=rage, 3=energy, 6=runic power } highest_power; + // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT = 97 struct { uint32 statType; // 3 4=spirit, 3=int, 2=stamina, 1=agi, 0=strength } highest_stat; + // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98 struct { uint32 spellSchool; // 3 } highest_spellpower; + // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_RATING = 100 struct { uint32 ratingType; // 3 } highest_rating; + // ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109 struct { uint32 lootType; // 3 3=fishing, 2=pickpocket, 4=disentchant uint32 lootTypeCount; // 4 } loot_type; + // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE = 112 struct { uint32 skillLine; // 3 uint32 spellCount; // 4 } learn_skill_line; + // ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL = 113 struct { uint32 unused; // 3 uint32 killCount; // 4 } honorable_kill; + struct { uint32 field3; // 3 main requirement @@ -435,6 +499,7 @@ struct AchievementCriteriaEntry uint32 timeLimit; // 29 time limit in seconds //uint32 showOrder; // 30 show order }; + struct AreaTableEntry { uint32 ID; // 0 @@ -447,6 +512,7 @@ struct AreaTableEntry char* area_name[16]; // 11-26 // 27, string flags, unused uint32 team; // 28 + // helpers bool IsSanctuary() const { @@ -455,12 +521,14 @@ struct AreaTableEntry return (flags & AREA_FLAG_SANCTUARY); } }; + struct AreaGroupEntry { uint32 AreaGroupId; // 0 uint32 AreaId[6]; // 1-6 uint32 nextGroup; // 7 index of next group }; + struct AreaPOIEntry { uint32 id; //0 @@ -478,6 +546,7 @@ struct AreaPOIEntry uint32 worldState; //52 //uint32 val2; //53 }; + struct AreaTriggerEntry { uint32 id; // 0 m_ID @@ -491,6 +560,7 @@ struct AreaTriggerEntry float box_z; // 8 m_box_heigh float box_orientation; // 9 m_box_yaw }; + struct AuctionHouseEntry { uint32 houseId; // 0 index @@ -500,11 +570,13 @@ struct AuctionHouseEntry //char* name[16]; // 4-19 // 20 string flag, unused }; + struct BankBagSlotPricesEntry { uint32 ID; uint32 price; }; + struct BarberShopStyleEntry { uint32 Id; // 0 @@ -518,6 +590,7 @@ struct BarberShopStyleEntry uint32 gender; // 38 0 -> male, 1 -> female uint32 hair_id; // 39 real ID to hair/facial hair }; + struct BattlemasterListEntry { uint32 id; // 0 @@ -534,7 +607,9 @@ struct BattlemasterListEntry // 33 unused //uint32 unk; // 34 new 3.1 }; + #define MAX_OUTFIT_ITEMS 24 + struct CharStartOutfitEntry { //uint32 Id; // 0 @@ -546,6 +621,7 @@ struct CharStartOutfitEntry //uint32 Unknown2; // 39 //uint32 Unknown3; // 40 }; + struct CharTitlesEntry { uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId() @@ -556,6 +632,7 @@ struct CharTitlesEntry // 35 string flag, unused uint32 bit_index; // 36 used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES }; + struct ChatChannelsEntry { uint32 ChannelID; // 0 @@ -565,6 +642,7 @@ struct ChatChannelsEntry //char* name[16]; // 20-35 unused // 36 string flag, unused }; + struct ChrClassesEntry { uint32 ClassID; // 0 @@ -583,6 +661,7 @@ struct ChrClassesEntry uint32 CinematicSequence; // 58 id from CinematicSequences.dbc uint32 addon; // 59 (0 - original race, 1 - tbc addon, ...) }; + struct ChrRacesEntry { uint32 RaceID; // 0 @@ -604,6 +683,7 @@ struct ChrRacesEntry // 65-67 unused uint32 addon; // 68 (0 - original race, 1 - tbc addon, ...) }; + /* not used struct CinematicCameraEntry { @@ -616,6 +696,7 @@ struct CinematicCameraEntry float unk6; // 6 speed? }; */ + struct CinematicSequencesEntry { uint32 Id; // 0 index @@ -623,6 +704,7 @@ struct CinematicSequencesEntry //uint32 cinematicCamera; // 2 id in CinematicCamera.dbc // 3-9 always 0 }; + struct CreatureDisplayInfoEntry { uint32 Displayid; // 0 m_ID @@ -640,6 +722,7 @@ struct CreatureDisplayInfoEntry // 14 m_creatureGeosetData // 15 m_objectEffectPackageID }; + struct CreatureFamilyEntry { uint32 ID; // 0 m_ID @@ -655,13 +738,16 @@ struct CreatureFamilyEntry // 26 string flags // 27 m_iconFile }; + #define MAX_CREATURE_SPELL_DATA_SLOT 4 + struct CreatureSpellDataEntry { uint32 ID; // 0 m_ID uint32 spellId[MAX_CREATURE_SPELL_DATA_SLOT]; // 1-4 m_spells[4] //uint32 availability[MAX_CREATURE_SPELL_DATA_SLOT]; // 4-7 m_availability[4] }; + struct CreatureTypeEntry { uint32 ID; // 0 m_ID @@ -669,6 +755,7 @@ struct CreatureTypeEntry // 17 string flags //uint32 no_expirience; // 18 no exp? critters, non-combat pets, gas cloud. }; + /* not used struct CurrencyCategoryEntry { @@ -678,6 +765,7 @@ struct CurrencyCategoryEntry // // 18 string flags }; */ + struct CurrencyTypesEntry { //uint32 ID; // 0 not used @@ -685,16 +773,19 @@ struct CurrencyTypesEntry //uint32 Category; // 2 may be category uint32 BitIndex; // 3 bit index in PLAYER_FIELD_KNOWN_CURRENCIES (1 << (index-1)) }; + struct DurabilityCostsEntry { uint32 Itemlvl; // 0 uint32 multiplier[29]; // 1-29 }; + struct DurabilityQualityEntry { uint32 Id; // 0 float quality_mod; // 1 }; + struct EmotesEntry { uint32 Id; // 0 @@ -705,11 +796,13 @@ struct EmotesEntry uint32 UnitStandState; // 5, uncomfirmed, may be enum UnitStandStateType //uint32 SoundId; // 6, ref to soundEntries }; + struct EmotesTextEntry { uint32 Id; uint32 textid; }; + struct FactionEntry { uint32 ID; // 0 m_ID @@ -724,6 +817,7 @@ struct FactionEntry //char* description[16]; // 36-51 m_description_lang // 52 string flags }; + struct FactionTemplateEntry { uint32 ID; // 0 m_ID @@ -735,6 +829,7 @@ struct FactionTemplateEntry uint32 enemyFaction[4]; // 6 m_enemies[4] uint32 friendFaction[4]; // 10 m_friend[4] //------------------------------------------------------- end structure + // helpers bool IsFriendlyTo(FactionTemplateEntry const& entry) const { @@ -776,6 +871,7 @@ struct FactionTemplateEntry } bool IsContestedGuardFaction() const { return (factionFlags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD)!=0; } }; + struct GameObjectDisplayInfoEntry { uint32 Displayid; // 0 m_ID @@ -789,12 +885,14 @@ struct GameObjectDisplayInfoEntry float maxZ; //uint32 transport; //18 }; + struct GemPropertiesEntry { uint32 ID; uint32 spellitemenchantement; uint32 color; }; + struct GlyphPropertiesEntry { uint32 Id; @@ -802,54 +900,67 @@ struct GlyphPropertiesEntry uint32 TypeFlags; uint32 Unk1; // GlyphIconId (SpellIcon.dbc) }; + struct GlyphSlotEntry { uint32 Id; uint32 TypeFlags; uint32 Order; }; + // All Gt* DBC store data for 100 levels, some by 100 per class/race #define GT_MAX_LEVEL 100 + struct GtBarberShopCostBaseEntry { float cost; }; + struct GtCombatRatingsEntry { float ratio; }; + struct GtChanceToMeleeCritBaseEntry { float base; }; + struct GtChanceToMeleeCritEntry { float ratio; }; + struct GtChanceToSpellCritBaseEntry { float base; }; + struct GtChanceToSpellCritEntry { float ratio; }; + struct GtOCTRegenHPEntry { float ratio; }; + //struct GtOCTRegenMPEntry //{ // float ratio; //}; + struct GtRegenHPPerSptEntry { float ratio; }; + struct GtRegenMPPerSptEntry { float ratio; }; + /* no used struct HolidayDescriptionsEntry { @@ -858,6 +969,7 @@ struct HolidayDescriptionsEntry // 17 name flags }; */ + /* no used struct HolidayNamesEntry { @@ -866,6 +978,7 @@ struct HolidayNamesEntry // 17 name flags }; */ + struct HolidaysEntry { uint32 ID; // 0, holiday id @@ -882,6 +995,7 @@ struct HolidaysEntry //uint32 unk53; // 53 //uint32 unk54; // 54 }; + struct ItemEntry { uint32 ID; // 0 @@ -893,12 +1007,14 @@ struct ItemEntry uint32 InventoryType; // 6 uint32 Sheath; // 7 }; + struct ItemBagFamilyEntry { uint32 ID; // 0 //char* name[16] // 1-16 m_name_lang // // 17 name flags }; + struct ItemDisplayInfoEntry { uint32 ID; // 0 m_ID @@ -914,6 +1030,7 @@ struct ItemDisplayInfoEntry // 10 m_itemVisual[8] // 11 m_particleColorID }; + //struct ItemCondExtCostsEntry //{ // uint32 ID; @@ -921,6 +1038,7 @@ struct ItemDisplayInfoEntry // uint32 itemextendedcostentry; // ItemPrototype::ExtendedCost // uint32 arenaseason; // arena season number(1-4) //}; + struct ItemExtendedCostEntry { uint32 ID; // 0 extended-cost entry id @@ -930,6 +1048,7 @@ struct ItemExtendedCostEntry uint32 reqitemcount[5]; // 8-12 required count of 1st item uint32 reqpersonalarenarating; // 13 required personal arena rating }; + struct ItemLimitCategoryEntry { uint32 ID; // 0 Id @@ -938,6 +1057,7 @@ struct ItemLimitCategoryEntry uint32 maxCount; // 18, max allowed equipped as item or in gem slot //uint32 unk; // 19, 1 for gems only... }; + struct ItemRandomPropertiesEntry { uint32 ID; // 0 m_ID @@ -946,6 +1066,7 @@ struct ItemRandomPropertiesEntry //char* nameSuffix[16] // 7-22 m_name_lang // 23 name flags }; + struct ItemRandomSuffixEntry { uint32 ID; // 0 m_ID @@ -955,6 +1076,7 @@ struct ItemRandomSuffixEntry uint32 enchant_id[5]; // 19-21 m_enchantment uint32 prefix[5]; // 22-24 m_allocationPct }; + struct ItemSetEntry { //uint32 id // 0 m_ID @@ -966,7 +1088,9 @@ struct ItemSetEntry uint32 required_skill_id; // 51 m_requiredSkill uint32 required_skill_value; // 52 m_requiredSkillRank }; + #define MAX_LOCK_CASE 8 + struct LockEntry { uint32 ID; // 0 m_ID @@ -975,6 +1099,7 @@ struct LockEntry uint32 Skill[MAX_LOCK_CASE]; // 17-24 m_Skill //uint32 Action[MAX_LOCK_CASE]; // 25-32 m_Action }; + struct MailTemplateEntry { uint32 ID; // 0 @@ -982,6 +1107,7 @@ struct MailTemplateEntry // 17 name flags, unused //char* content[16]; // 18-33 }; + struct MapEntry { uint32 MapID; // 0 @@ -1012,8 +1138,10 @@ struct MapEntry // 115 -1, 0 and 720 uint32 addon; // 116 (0-original maps,1-tbc addon) // 117 some kind of time? + // Helpers uint32 Expansion() const { return addon; } + bool IsDungeon() const { return map_type == MAP_INSTANCE || map_type == MAP_RAID; } bool IsNonRaidDungeon() const { return map_type == MAP_INSTANCE; } bool Instanceable() const { return map_type == MAP_INSTANCE || map_type == MAP_RAID || map_type == MAP_BATTLEGROUND || map_type == MAP_ARENA; } @@ -1023,6 +1151,7 @@ struct MapEntry 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 { return !IsDungeon() || @@ -1031,23 +1160,27 @@ struct MapEntry MapID==568 || MapID==580 || MapID==615 || // ZulAman, Sunwell Plateau, Obsidian Sanctrum MapID==616; // Eye Of Eternity } + bool IsContinent() const { return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571; } }; + struct MovieEntry { uint32 Id; // 0 index //char* filename; // 1 //uint32 unk2; // 2 always 100 }; + struct QuestSortEntry { uint32 id; // 0 m_ID //char* name[16]; // 1-16 m_SortName_lang // 17 name flags }; + struct RandomPropertiesPointsEntry { //uint32 Id; // 0 hidden key @@ -1056,6 +1189,7 @@ struct RandomPropertiesPointsEntry uint32 RarePropertiesPoints[5]; // 7-11 uint32 UncommonPropertiesPoints[5]; // 12-16 }; + struct ScalingStatDistributionEntry { uint32 Id; @@ -1063,6 +1197,7 @@ struct ScalingStatDistributionEntry uint32 Modifier[10]; uint32 MaxLevel; }; + struct ScalingStatValuesEntry { uint32 Id; @@ -1072,6 +1207,7 @@ struct ScalingStatValuesEntry uint32 dpsMod[6]; // DPS mod for level uint32 spellBonus; // not sure.. TODO: need more info about uint32 feralBonus; // Feral AP bonus + uint32 getssdMultiplier(uint32 mask) const { if (mask&0x001F) @@ -1119,12 +1255,14 @@ struct ScalingStatValuesEntry return 0; } }; + //struct SkillLineCategoryEntry{ // uint32 id; // 0 m_ID // char* name[16]; // 1-17 m_name_lang // // 18 string flag // uint32 displayOrder; // 19 m_sortIndex //}; + //struct SkillRaceClassInfoEntry{ // uint32 id; // 0 m_ID // uint32 skillId; // 1 m_skillID @@ -1135,11 +1273,13 @@ struct ScalingStatValuesEntry // uint32 skillTierId; // 6 m_skillTierID // uint32 skillCostID; // 7 m_skillCostIndex //}; + //struct SkillTiersEntry{ // uint32 id; // 0 m_ID // uint32 skillValue[16]; // 1-17 m_cost // uint32 maxSkillValue[16]; // 18-32 m_valueMax //}; + struct SkillLineEntry { uint32 id; // 0 m_ID @@ -1154,6 +1294,7 @@ struct SkillLineEntry // 54 string flags uint32 canLink; // 55 m_canLink (prof. with recipes }; + struct SkillLineAbilityEntry { uint32 id; // 0 m_ID @@ -1170,6 +1311,7 @@ struct SkillLineAbilityEntry uint32 min_value; // 11 m_trivialSkillLineRankLow //uint32 characterPoints[2]; // 12-13 m_characterPoints[2] }; + struct SoundEntriesEntry { uint32 Id; // 0 m_ID @@ -1185,7 +1327,9 @@ struct SoundEntriesEntry // 28 m_EAXDef // 29 new in 3.1 }; + #define MAX_SPELL_EFFECTS 3 + struct SpellEntry { uint32 Id; // 0 m_ID @@ -1293,16 +1437,20 @@ struct SpellEntry uint32 runeCostID; // 229 m_runeCostID //uint32 spellMissileID; // 230 m_spellMissileID not used //uint32 PowerDisplayId; // 231 PowerDisplay.dbc, new in 3.1 + // helpers int32 CalculateSimpleValue(uint8 eff) const { return EffectBasePoints[eff]+int32(EffectBaseDice[eff]); } + private: // prevent creating custom entries (copy data from original in fact) SpellEntry(SpellEntry const&); // DON'T must have implementation }; + typedef std::set<uint32> SpellCategorySet; typedef std::map<uint32,SpellCategorySet > SpellCategoryStore; typedef std::set<uint32> PetFamilySpellsSet; typedef std::map<uint32,PetFamilySpellsSet > PetFamilySpellsStore; + struct SpellCastTimesEntry { uint32 ID; // 0 @@ -1310,12 +1458,14 @@ struct SpellCastTimesEntry //float CastTimePerLevel; // 2 unsure / per skill? //int32 MinCastTime; // 3 unsure }; + struct SpellFocusObjectEntry { uint32 ID; // 0 //char* Name[16]; // 1-15 unused // 16 string flags, unused }; + struct SpellRadiusEntry { uint32 ID; @@ -1323,6 +1473,7 @@ struct SpellRadiusEntry //uint32 Unk //always 0 float radiusFriend; }; + struct SpellRangeEntry { uint32 ID; @@ -1336,15 +1487,19 @@ struct SpellRangeEntry //char* Name2[16]; // 25-40 unused // 41 string flags, unused }; + struct SpellRuneCostEntry { uint32 ID; // 0 uint32 RuneCost[3]; // 1-3 (0=blood, 1=frost, 2=unholy) uint32 runePowerGain; // 4 + bool NoRuneCost() const { return RuneCost[0] == 0 && RuneCost[1] == 0 && RuneCost[2] == 0; } bool NoRunicPowerGain() const { return runePowerGain == 0; } }; + #define MAX_SHAPESHIFT_SPELLS 8 + struct SpellShapeshiftEntry { uint32 ID; // 0 @@ -1361,11 +1516,13 @@ struct SpellShapeshiftEntry //uint32 unk4; // 26 unused uint32 stanceSpell[MAX_SHAPESHIFT_SPELLS]; // 27 - 34 unused }; + struct SpellDurationEntry { uint32 ID; int32 Duration[3]; }; + struct SpellItemEnchantmentEntry { uint32 ID; // 0 m_ID @@ -1384,6 +1541,7 @@ struct SpellItemEnchantmentEntry //uint32 requiredSkillValue; // 36 m_requiredSkillRank // 37 new in 3.1 }; + struct SpellItemEnchantmentConditionEntry { uint32 ID; // 0 m_ID @@ -1394,11 +1552,13 @@ struct SpellItemEnchantmentConditionEntry uint32 Value[5]; // 21-25 m_rt_operand[5] //uint8 Logic[5] // 25-30 m_logic[5] }; + struct StableSlotPricesEntry { uint32 Slot; uint32 Price; }; + struct SummonPropertiesEntry { uint32 Id; // 0 @@ -1408,8 +1568,10 @@ struct SummonPropertiesEntry uint32 Slot; // 4, 0-6 uint32 Flags; // 5 }; + #define MAX_TALENT_RANK 5 #define MAX_PET_TALENT_RANK 3 // use in calculations, expected <= MAX_TALENT_RANK + struct TalentEntry { uint32 TalentID; // 0 @@ -1426,6 +1588,7 @@ struct TalentEntry //uint32 unk2; // 20, all 0 //uint64 allowForPet; // 21 its a 64 bit mask for pet 1<<m_categoryEnumID in CreatureFamily.dbc }; + struct TalentTabEntry { uint32 TalentTabID; // 0 @@ -1438,6 +1601,7 @@ struct TalentTabEntry uint32 tabpage; // 22 //char* internalname; // 23 }; + struct TaxiNodesEntry { uint32 ID; // 0 m_ID @@ -1449,6 +1613,7 @@ struct TaxiNodesEntry // 22 string flags uint32 MountCreatureID[2]; // 23-24 m_MountCreatureID[2] }; + struct TaxiPathEntry { uint32 ID; // 0 m_ID @@ -1456,6 +1621,7 @@ struct TaxiPathEntry uint32 to; // 2 m_ToTaxiNode uint32 price; // 3 m_Cost }; + struct TaxiPathNodeEntry { // 0 m_ID @@ -1470,6 +1636,7 @@ struct TaxiPathNodeEntry // 9 m_arrivalEventID // 10 m_departureEventID }; + struct TotemCategoryEntry { uint32 ID; // 0 @@ -1478,6 +1645,7 @@ struct TotemCategoryEntry uint32 categoryType; // 18 (one for specialization) uint32 categoryMask; // 19 (compatibility mask for same type: different for totems, compatible from high to low for rods) }; + struct VehicleEntry { uint32 m_ID; // 0 @@ -1514,6 +1682,7 @@ struct VehicleEntry // 38, new in 3.1 // 39, new in 3.1 }; + struct VehicleSeatEntry { uint32 m_ID; // 0 @@ -1563,8 +1732,10 @@ struct VehicleSeatEntry int32 m_uiSkin; // 44 uint32 m_flagsB; // 45 // 46-57 added in 3.1, floats mostly + bool IsUsable() const { return m_flags & 0x2000000; } }; + struct WorldMapAreaEntry { //uint32 ID; // 0 @@ -1578,7 +1749,9 @@ struct WorldMapAreaEntry 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) }; + #define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4 + struct WorldMapOverlayEntry { uint32 ID; // 0 @@ -1588,6 +1761,7 @@ struct WorldMapOverlayEntry //char* internal_name // 8 // 9-16 some ints }; + struct WorldSafeLocsEntry { uint32 ID; // 0 @@ -1598,34 +1772,42 @@ struct WorldSafeLocsEntry //char* name[16] // 5-20 name, unused // 21 name flags, unused }; + // GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform #if defined( __GNUC__ ) #pragma pack() #else #pragma pack(pop) #endif + // Structures not used for casting to loaded DBC data and not required then packing struct TalentSpellPos { TalentSpellPos() : talent_id(0), rank(0) {} TalentSpellPos(uint16 _talent_id, uint8 _rank) : talent_id(_talent_id), rank(_rank) {} + uint16 talent_id; uint8 rank; }; + typedef std::map<uint32,TalentSpellPos> TalentSpellPosMap; + struct TaxiPathBySourceAndDestination { TaxiPathBySourceAndDestination() : ID(0),price(0) {} TaxiPathBySourceAndDestination(uint32 _id,uint32 _price) : ID(_id),price(_price) {} + uint32 ID; uint32 price; }; typedef std::map<uint32,TaxiPathBySourceAndDestination> TaxiPathSetForSource; typedef std::map<uint32,TaxiPathSetForSource> TaxiPathSetBySource; + struct TaxiPathNode { TaxiPathNode() : mapid(0), x(0),y(0),z(0),actionFlag(0),delay(0) {} TaxiPathNode(uint32 _mapid, float _x, float _y, float _z, uint32 _actionFlag, uint32 _delay) : mapid(_mapid), x(_x),y(_y),z(_z),actionFlag(_actionFlag),delay(_delay) {} + uint32 mapid; float x; float y; @@ -1635,6 +1817,7 @@ struct TaxiPathNode }; typedef std::vector<TaxiPathNode> TaxiPathNodeList; typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath; + #define TaxiMaskSize 12 typedef uint32 TaxiMask[TaxiMaskSize]; #endif |