TrinityCore
Loading...
Searching...
No Matches
DBCStructure.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITY_DBCSTRUCTURE_H
19#define TRINITY_DBCSTRUCTURE_H
20
21#include "Define.h"
22#include "DBCEnums.h"
23#include "SharedDefines.h"
24#include "Util.h"
25#include <set>
26#include <map>
27
28// Structures used to access raw DBC data require packing for portability
29#pragma pack(push, 1)
30
32{
33 uint32 ID; // 0
34 int32 Faction; // 1 -1=all, 0=horde, 1=alliance
35 int32 InstanceID; // 2 -1=none
36 //uint32 Supercedes; // 3 its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin)
37 std::array<char const*, 16> Title; // 4-19
38 //uint32 Title_lang_mask; // 20
39 //char const* Description[16]; // 21-36
40 //uint32 Description_lang_mask; // 37
42 uint32 Points; // 39 reward points
43 //uint32 UiOrder; // 40 icon (from SpellIcon.dbc)
45 //uint32 IconID; // 42
46 //char const* Reward[16]; // 43-58
47 //uint32 Reward_lang_mask; // 59
48 uint32 MinimumCriteria; // 60 - need this count of completed criterias (own or referenced achievement criterias)
49 uint32 SharesCriteria; // 61 - referenced achievement (counting of all completed criterias)
50};
51
53{
54 uint32 ID; // 0
57 union
58 {
59 uint32 ID;
60 // ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE = 0
61 // ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE = 20
63
64 // ACHIEVEMENT_CRITERIA_TYPE_WIN_BG = 1
65 // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15
66 // ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP = 16
67 // ACHIEVEMENT_CRITERIA_TYPE_WIN_ARENA = 32
68 // ACHIEVEMENT_CRITERIA_TYPE_PLAY_ARENA = 33
70
71 // ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL = 7
72 // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40
73 // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75
74 // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LINE = 112
76
77 // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8
79
80 // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11
82
83 // ACHIEVEMENT_CRITERIA_TYPE_CURRENCY = 12
85
86 // ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON = 18
87 // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_RAID = 19
89
90 // ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM = 26
92
93 // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST = 27
95
96 // ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET = 28
97 // ACHIEVEMENT_CRITERIA_TYPE_GAIN_AURA = 69
98 // ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL = 29
99 // ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2 = 110
100 // ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL = 34
102
103 // ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE
105
106 // ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31
108
109 // ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM = 36
110 // ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM = 41
111 // ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM = 42
112 // ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM = 57
114
115 // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38
116 // ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING = 39
117 // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39
119
120 // ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA = 43
122
123 // ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION = 46
125
126 // ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49
128
129 // ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50
130 // ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51
132
133 // ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52
135
136 // ACHIEVEMENT_CRITERIA_TYPE_HK_RACE = 53
138
139 // ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE = 54
141
142 // ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT = 68
143 // ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72
145
146 // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_POWER = 96
148
149 // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_STAT = 97
151
152 // ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98
154
155 // ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE = 109
157 } Asset; // 3
158
160
161 struct
162 {
163 uint32 Type;
166
167 //char const* Description[16]; // 9-24
168 //uint32 Description_lang_mask; // 25
170 uint32 StartEvent; // 27 AchievementCriteriaTimedTypes
171 uint32 StartAsset; // 28 Always appears with timed events, used internally to start the achievement, store
172 uint32 StartTimer; // 29 time limit in seconds
173 //uint32 UiOrder; // 30
174};
175
177{
178 uint32 ID; // 0
180 uint32 ParentAreaID; // 2 if 0 then it's zone, else it's zone id of this area
183 //uint32 SoundProviderPref; // 5
184 //uint32 SoundProviderPrefUnderwater; // 6
185 //uint32 AmbienceID; // 7
186 //uint32 ZoneMusic; // 8
187 //uint32 IntroSound; // 9
189 char const* AreaName[16]; // 11-26
190 //uint32 AreaName_lang_mask; // 27
192 uint32 LiquidTypeID[4]; // 29-32 liquid override by type
193 //float MinElevation; // 33
194 //float AmbientMultiplier; // 34
195 //uint32 LightID; // 35
196
197 // helpers
198 bool IsSanctuary() const
199 {
200 if (ContinentID == 609)
201 return true;
202 return (Flags & AREA_FLAG_SANCTUARY) != 0;
203 }
204
205 bool IsFlyable() const
206 {
208 {
210 return true;
211 }
212
213 return false;
214 }
215};
216
217#define MAX_GROUP_AREA_IDS 6
218
220{
221 uint32 ID; // 0
223 uint32 NextAreaID; // 7 index of next group
224};
225
227{
228 uint32 ID; // 0
231 float Radius; // 5
232 float BoxLength; // 6
233 float BoxWidth; // 7
234 float BoxHeight; // 8
235 float BoxYaw; // 9
236};
237
239{
240 uint32 ID; // 0
241 uint32 FactionID; // 1 id of faction.dbc for player factions associated with city
242 uint32 DepositRate; // 2 1/3 from real
244 //char const* Name[16]; // 4-19
245 //uint32 Name_lang_mask; // 20
246};
247
249{
250 uint32 ID; // 0
252};
253
255{
256 uint32 ID; // 0
257 //uint32 NameMD5[4]; // 1-4
258 //uint32 VersionMD5[4]; // 5-8
259 //uint32 LastModified; // 9
260 //uint32 Flags; // 10
261};
262
264{
265 uint32 ID; // 0
266 uint32 Type; // 1 value 0 -> hair, value 2 -> facialhair
267 //char const* DisplayName[16]; // 2-17
268 //uint32 DisplayName_lang_mask; // 18
269 //uint32 Description[16]; // 19-34, all empty
270 //uint32 Description_lang_mask; // 35
271 //float CostModifier; // 36
273 uint32 Sex; // 38
274 uint32 Data; // 39 real ID to hair/facial hair
275};
276
278{
279 uint32 ID; // 0
280 int32 MapID[8]; // 1-8
281 uint32 InstanceType; // 9 map type (3 - BG, 4 - arena)
282 //uint32 GroupsAllowed; // 10
283 char const* Name[16]; // 11-26
284 //uint32 Name_lang_mask; // 27
285 uint32 MaxGroupSize; // 28 used for checking if queue as group
287 //uint32 MinLevel; // 30
288 //uint32 MaxLevel; // 31
289};
290
292{
296 //uint32 Geoset[5]; // 3-7
297};
298
304
313
315{
316 //uint32 ID; // 0
320 //char const* TextureName[3]; // 4-6
324
325 inline bool HasFlag(CharSectionFlags flag) const { return (Flags & flag) != 0; }
326};
327
328#define MAX_OUTFIT_ITEMS 24
329
331{
332 //uint32 ID; // 0
336 //uint8 OutfitID; // 4
338 //int32 DisplayItemID[MAX_OUTFIT_ITEMS]; // 29-52 not required at server side
339 //int32 InventoryType[MAX_OUTFIT_ITEMS]; // 53-76 not required at server side
340};
341
343{
344 uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId()
345 //uint32 ConditionID; // 1
346 char const* Name[16]; // 2-17 male
347 //uint32 Name_lang_mask; // 18
348 char const* Name1[16]; // 19-34 female
349 //uint32 Name1_lang_mask; // 35
350 uint32 MaskID; // 36 used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES
351};
352
354{
355 uint32 ID; // 0
357 //uint32 FactionGroup; // 2
358 char const* Name[16]; // 3-18
359 //uint32 Name_lang_mask; // 19
360 //char const* Shortcut[16]; // 20-35
361 //uint32 Shortcut_lang_mask; // 36
362};
363
365{
366 uint32 ID; // 0
367 //uint32 DamageBonusStat; // 1
369 //char const* PetNameToken; // 3
370 char const* Name[16]; // 4-19
371 //uint32 Name_lang_mask; // 20
372 //char const* NameFemale[16]; // 21-36
373 //uint32 NameFemale_lang_mask; // 37
374 //char const* NameMale[16]; // 38-53
375 //uint32 NameMale_lang_mask; // 54
376 //char const* Filename; // 55
378 //uint32 Flags; // 57
379 uint32 CinematicSequenceID; // 58 ID from CinematicSequences.dbc
381};
382
389
396
398{
399 uint32 ID; // 0
402 //uint32 ExplorationSoundID; // 3
405 //char const* ClientPrefix; // 6
406 uint32 BaseLanguage; // 7 (7-Alliance 1-Horde)
409 //uint32 SplashSoundID; // 10
410 //char const* ClientFileString; // 11
411 uint32 CinematicSequenceID; // 12 ID from CinematicSequences.dbc
413 char const* Name[16]; // 14-29
414 //uint32 Name_lang_mask; // 30
415 //char const* NameFemale[16]; // 31-46
416 //uint32 NameFemale_lang_mask; // 47
417 //char const* NameMale[16]; // 48-63
418 //uint32 NameMale_lang_mask; // 64
419 //char const* FacialHairCustomization[2]; // 65-66
420 //char const* HairCustomization; // 67
422
423 inline bool HasFlag(ChrRacesFlags flag) const { return (Flags & flag) != 0; }
424};
425
427{
428 uint32 ID; // 0
429 char const* Model; // 1 Model filename (translate .mdx to .m2)
430 uint32 SoundID; // 2 Sound ID (voiceover for cinematic)
431 DBCPosition3D Origin; // 3-5 Position in map used for basis for M2 co-ordinates
432 float OriginFacing; // 6 Orientation in map used for basis for M2 co-ordinates
433};
434
436{
437 uint32 ID; // 0
438 //uint32 SoundID; // 1
439 uint32 Camera[8]; // 2-9 ID in CinematicCamera.dbc
440};
441
443{
444 uint32 ID; // 0
446 //uint32 SoundID; // 2
449 //uint32 CreatureModelAlpha; // 5
450 //char const* TextureVariation[3]; // 6-8
451 //char const* PortraitTextureName; // 9
452 //uint32 SizeClass; // 10
453 //uint32 BloodID; // 11
454 //uint32 NPCSoundID; // 12
455 //uint32 ParticleColorID; // 13
456 //uint32 CreatureGeosetData; // 14
457 //uint32 ObjectEffectPackageID; // 15
458};
459
461{
462 //uint32 ID; // 0
465 //uint32 SkinID; // 3
466 //uint32 FaceID; // 4
467 //uint32 HairStyleID; // 5
468 //uint32 HairColorID; // 6
469 //uint32 FacialHairID; // 7
470 //uint32 NPCItemDisplay[11]; // 8-18
471 //uint32 Flags; // 19
472 //char const* BakeName; // 20
473};
474
476{
477 uint32 ID; // 0
478 float MinScale; // 1
480 float MaxScale; // 3
482 uint32 SkillLine[2]; // 5-6
485 //int32 CategoryEnumID; // 9
486 char const* Name[16]; // 10-25
487 //uint32 Name_lang_mask; // 26
488 //char const* IconFile; // 27
489};
490
495
497{
498 uint32 ID; // 0
500 char const* ModelName; // 2
501 //uint32 SizeClass; // 3
502 float ModelScale; // 4 Used in calculation of unit collision data
503 //int32 BloodID; // 5
504 //int32 FootprintTextureID; // 6
505 //uint32 FootprintTextureLength; // 7
506 //uint32 FootprintTextureWidth; // 8
507 //float FootprintParticleScale; // 9
508 //uint32 FoleyMaterialID; // 10
509 //float FootstepShakeSize; // 11
510 //uint32 DeathThudShakeSize; // 12
511 //uint32 SoundID; // 13
512 //float CollisionWidth; // 14
513 float CollisionHeight; // 15
514 float MountHeight; // 16 Used in calculation of unit collision data when mounted
515 //float GeoBoxMin[3]; // 17-19
516 //float GeoBoxMax[3]; // 20-22
517 //float WorldEffectScale; // 23
518 //float AttachedEffectScale; // 24
519 //float MissileCollisionRadius; // 25
520 //float MissileCollisionPush; // 26
521 //float MissileCollisionRaise; // 27
522
523 inline bool HasFlag(CreatureModelDataFlags flag) const { return (Flags & flag) != 0; }
524};
525
527{
528 uint32 ID; // 0
530 //uint32 Availability[MAX_CREATURE_SPELL_DATA_SLOT]; // 4-7
531};
532
534{
535 CREATURE_TYPE_ENTRY_FLAGS_IGNORED_TAB_TARGETING = 0x01 // Means do not include in tab targeting.
537
539{
540 uint32 ID; // 0
541 //char const* Name[16]; // 1-16
542 //uint32 Name_lang_mask; // 17
543 //uint32 Flags; // 18
544};
545
546/* not used
547struct CurrencyCategoryEntry
548{
549 uint32 ID; // 0
550 uint32 Flags; // 1
551 char const* Name[16]; // 2-17
552 uint32 Name_lang_mask; // 18
553};
554*/
555
557{
558 //uint32 ID; // 0
560 //uint32 CategoryID; // 2
561 uint32 BitIndex; // 3 bit index in PLAYER_FIELD_KNOWN_CURRENCIES (1 << (index-1))
562};
563
565{
566 uint32 ID; // 0
567 //uint32 State0ImpactEffectDoodadSet; // 1
568 //uint32 State0AmbientDoodadSet; // 2
570 //uint32 State1DestructionDoodadSet; // 4
571 //uint32 State1ImpactEffectDoodadSet; // 5
572 //uint32 State1AmbientDoodadSet; // 6
574 //uint32 State2DestructionDoodadSet; // 8
575 //uint32 State2ImpactEffectDoodadSet; // 9
576 //uint32 State2AmbientDoodadSet; // 10
578 //uint32 State3InitDoodadSet; // 12
579 //uint32 State3AmbientDoodadSet; // 13
580 //uint32 EjectDirection; // 14
582 //uint32 DoNotHighlight; // 16
583 //uint32 HealEffect; // 17
584 //uint32 HealEffectSpeed; // 18
585};
586
588{
589 uint32 ID; // 0
592 //uint32 OrderIndex; // 3
593 uint32 Bit; // 4 encounter index for creating completed mask
594 char const* Name[16]; // 5-20
595 //uint32 Name_lang_mask; // 21
596 //uint32 SpellIconID; // 22
597};
598
605
607{
608 uint32 ID; // 0
609 float Data; // 1
610};
611
613{
614 uint32 ID; // 0
615 //char const* EmoteSlashCommand; // 1 internal name
616 //uint32 AnimID; // 2 ref to animationData
617 uint32 EmoteFlags; // 3 bitmask, may be unit_flags
618 uint32 EmoteSpecProc; // 4 Can be 0, 1 or 2 (determine how emote are shown)
619 uint32 EmoteSpecProcParam; // 5 unconfirmed, may be enum UnitStandStateType
620 //uint32 EventSoundID; // 6
621};
622
624{
625 uint32 ID; // 0
626 //char const* Name; // 1
628 //uint32 EmoteText[16]; // 3-18
629};
630
632{
633 uint32 ID; // 0
636 uint32 SexID; // 3 0 male / 1 female
638};
639
641{
642 uint32 ID; // 0
649 float ParentFactionMod[2]; // 19-20 [0] Faction gains incoming rep * spilloverRateIn
650 // [1] Faction outputs rep * spilloverRateOut as spillover reputation
651 uint32 ParentFactionCap[2]; // 21-22 [0] The highest rank the faction will profit from incoming spillover
652 // [1] It does not seem to be the max standing at which a faction outputs spillover ...so no idea
653 char const* Name[16]; // 23-38
654 //uint32 Name_lang_mask; // 39
655 //char const* Description[16]; // 40-55
656 //uint32 Description_lang_mask; // 56
657
658 // helpers
659 bool CanHaveReputation() const
660 {
661 return ReputationIndex >= 0;
662 }
663};
664
665#define MAX_FACTION_RELATIONS 4
666
668{
669 uint32 ID; // 0
677
678 // helpers
679 bool IsFriendlyTo(FactionTemplateEntry const& entry) const
680 {
681 if (entry.Faction)
682 {
683 for (int i = 0; i < MAX_FACTION_RELATIONS; ++i)
684 if (Enemies[i] == entry.Faction)
685 return false;
686 for (int i = 0; i < MAX_FACTION_RELATIONS; ++i)
687 if (Friend[i] == entry.Faction)
688 return true;
689 }
690 return (FriendGroup & entry.FactionGroup) || (FactionGroup & entry.FriendGroup);
691 }
692 bool IsHostileTo(FactionTemplateEntry const& entry) const
693 {
694 if (entry.Faction)
695 {
696 for (int i = 0; i < MAX_FACTION_RELATIONS; ++i)
697 if (Enemies[i] == entry.Faction)
698 return true;
699 for (int i = 0; i < MAX_FACTION_RELATIONS; ++i)
700 if (Friend[i] == entry.Faction)
701 return false;
702 }
703 return (EnemyGroup & entry.FactionGroup) != 0;
704 }
705 bool IsHostileToPlayers() const { return (EnemyGroup & FACTION_MASK_PLAYER) !=0; }
706 bool IsNeutralToAll() const
707 {
708 for (int i = 0; i < MAX_FACTION_RELATIONS; ++i)
709 if (Enemies[i] != 0)
710 return false;
711 return EnemyGroup == 0 && FriendGroup == 0;
712 }
714};
715
717{
718 uint32 ID; // 0
719 //char const* TextureVariation[3] // 1-3 m_textureVariations[3]
720 //char const* AttachModel[4] // 4-8 m_attachModels[4]
721};
722
724{
725 uint32 ID; // 0
726 char const* ModelName; // 1
727 //uint32 Sound[10]; // 2-11
730 //uint32 ObjectEffectPackageID; // 18
731};
732
734{
735 uint32 ID; // 0
737 //uint32 MaxCountInv; // 2
738 //uint32 MaxCountItem; // 3
740};
741
749
751{
752 uint32 ID; // 0
755};
756
757// All Gt* DBC store data for 100 levels, some by 100 per class/race
758#define GT_MAX_LEVEL 100
759// gtOCTClassCombatRatingScalar.dbc stores data for 32 ratings, look at MAX_COMBAT_RATING for real used amount
760#define GT_MAX_RATING 32
761
763{
764 float Data; // 0
765};
766
768{
769 float Data; // 0
770};
771
773{
774 float Data; // 0
775};
776
778{
779 float Data; // 0
780};
781
783{
784 float Data; // 0
785};
786
788{
789 float Data; // 0
790};
791
793{
794 float Data; // 0
795};
796
798{
799 float Data; // 0
800};
801
803{
804 float Data; // 0
805};
806
807/*
808struct GtOCTRegenMPEntry
809{
810 float Data; // 0
811};
812*/
813
815{
816 float Data; // 0
817};
818
820{
821 float Data; // 0
822};
823
824/*
825struct HolidayDescriptionsEntry
826{
827 uint32 ID; // 0
828 char const* Description[16]; // 1-16
829 uint32 Description_lang_mask; // 17
830};
831*/
832
833/*
834struct HolidayNamesEntry
835{
836 uint32 ID; // 0
837 char const* Name[16]; // 1-16
838 uint32 Name_lang_mask; // 17
839};
840*/
841
842#define MAX_HOLIDAY_DURATIONS 10
843#define MAX_HOLIDAY_DATES 26
844#define MAX_HOLIDAY_FLAGS 10
845
847{
848 uint32 ID; // 0
850 uint32 Date[MAX_HOLIDAY_DATES]; // 11-36 dates in unix time starting at January, 1, 2000
851 uint32 Region; // 37 WoW region
854 //uint32 HolidayNameID; // 49 HolidayNames.dbc
855 //uint32 HolidayDescriptionID; // 50 HolidayDescriptions.dbc
856 char const* TextureFilename; // 51
859 //uint32 Flags; // 54 0 = Darkmoon Faire, Fishing Contest and Wotlk Launch, rest is 1
860};
861
873
875{
876 uint32 ID; // 0
877 //char const* Name[16]; // 1-16
878 //uint32 Name_lang_mask; // 17
879};
880
881/*
882struct ItemDisplayInfoEntry
883{
884 uint32 ID; // 0
885 char const* ModelName[2]; // 1-2
886 char const* ModelTexture[2]; // 3-4
887 char const* InventoryIcon[2]; // 5-6
888 uint32 GeosetGroup[3]; // 7-9
889 uint32 Flags; // 10
890 uint32 SpellVisualID; // 11
891 uint32 GroupSoundIndex; // 12
892 uint32 HelmetGeosetVisID[2]; // 13-14
893 char const* Texture[8]; // 15-22
894 int32 ItemVisual; // 23
895 uint32 ParticleColorID; // 24
896};
897*/
898
899/*
900struct ItemCondExtCostsEntry
901{
902 uint32 ID; // 0
903 uint32 CondExtendedCost; // 1 ItemTemplate::CondExtendedCost
904 uint32 ItemExtendedCostEntry; // 2 ItemTemplate::ExtendedCost
905 uint32 ArenaSeason; // 3 arena season number (1-4)
906};
907*/
908
909#define MAX_ITEM_EXTENDED_COST_REQUIREMENTS 5
910
912{
913 uint32 ID; // 0
914 uint32 HonorPoints; // 1 required honor points
915 uint32 ArenaPoints; // 2 required arena points
916 uint32 ArenaBracket; // 3 arena slot restrictions (min slot value)
918 uint32 ItemCount[MAX_ITEM_EXTENDED_COST_REQUIREMENTS]; // 9-13 required count of item
919 uint32 RequiredArenaRating; // 14 required personal arena rating
920 //uint32 ItemPurchaseGroup; // 15
921};
922
924{
925 uint32 ID; // 0
926 //char const* Name[16] // 1-16
927 //uint32 Name_lang_mask; // 17
928 uint32 Quantity; // 18 max allowed equipped as item or in gem slot
929 uint32 Flags; // 19 enum ItemLimitCategoryMode
930};
931
932#define MAX_ITEM_ENCHANTMENT_EFFECTS 3
933
935{
936 uint32 ID; // 0
937 //char const* InternalName; // 1
938 std::array<uint32, MAX_ITEM_ENCHANTMENT_EFFECTS> Enchantment; // 2-4
939 //std::array<uint32, 2> UnusedEnchantment; // 5-6
940 std::array<char const*, 16> Name; // 7-22
941 //uint32 Name_lang_mask; // 23
942};
943
945{
946 uint32 ID; // 0
947 std::array<char const*, 16> Name; // 1-16
948 //uint32 Name_lang_mask; // 17
949 //char const* InternalName; // 18
950 std::array<uint32, MAX_ITEM_ENCHANTMENT_EFFECTS> Enchantment; // 19-21
951 //std::array<uint32, 2> UnusedEnchantment; // 22-23
952 std::array<uint32, MAX_ITEM_ENCHANTMENT_EFFECTS> AllocationPct; // 24-26
953 //std::array<uint32, 2> UnusedAllocationPct; // 27-28
954};
955
956#define MAX_ITEM_SET_ITEMS 10
957#define MAX_ITEM_SET_SPELLS 8
958
960{
961 //uint32 ID; // 0
962 char const* Name[16]; // 1-16
963 //uint32 Name_lang_mask; // 17
965 //uint32 UnusedItemID[7]; // 28-34
970};
971
973{
974 uint32 ID; // 0
975 char const* Name[16]; // 1-16
976 //uint32 Name_lang_mask; // 17
986 //int32 Faction; // 27
987 //char const* TextureFilename; // 28
989 //uint32 OrderIndex; // 30
991 //char const* Description[16]; // 32-47
992 //uint32 Description_lang_mask; // 48
993
994 // Helpers
995 uint32 Entry() const { return ID + (TypeID << 24); }
996};
997
999{
1000 //uint32 ID; // 0
1003 //uint32 RandomID; // 3
1006 //uint32 TargetLevelMin; // 6
1007 //uint32 TargetLevelMax; // 7
1008};
1009
1011{
1015 //float GameFalloffStart; // 5
1016 //float GameFalloffEnd; // 6
1017 //uint32 LightParamsID[8]; // 7-14
1018};
1019
1021{
1023 //char const* Name; // 1
1024 //uint32 Flags; // 2
1026 //uint32 SoundID; // 4
1028 //float MaxDarkenDepth; // 6
1029 //float FogDarkenIntensity; // 7
1030 //float AmbDarkenIntensity; // 8
1031 //float DirDarkenIntensity; // 9
1032 //uint32 LightID; // 10
1033 //float ParticleScale; // 11
1034 //uint32 ParticleMovement; // 12
1035 //uint32 ParticleTexSlots; // 13
1036 //uint32 MaterialID; // 14
1037 //char const* Texture[6]; // 15-20
1038 //uint32 Color[2]; // 21-22
1039 //float Unk1[18]; // 23-40
1040 //uint32 Unk2[4]; // 41-44
1041};
1042
1043#define MAX_LOCK_CASE 8
1044
1046{
1051 //uint32 Action[MAX_LOCK_CASE]; // 25-32
1052};
1053
1055{
1057 //char const* Subject[16]; // 1-16
1058 //uint32 Subject_lang_mask; // 17
1059 char const* Body[16]; // 18-33
1060 //uint32 Body_lang_mask; // 34
1061};
1062
1064{
1066 //char const* Directory; // 1
1069 //uint32 MapType; // 4 0 or 1 for battlegrounds (not arenas)
1070 char const* MapName[16]; // 5-20
1071 //uint32 MapName_lang_mask; // 21
1072 uint32 AreaTableID; // 22 common zone for instance and continent map
1073 //char const* MapDescription0[16]; // 23-38 text for PvP Zones (Horde)
1074 //uint32 MapDescription0_lang_mask; // 39
1075 //char const* MapDescription1[16]; // 40-55 text for PvP Zones (Alliance)
1076 //uint32 MapDescription1_lang_mask; // 56
1078 //float MinimapIconScale; // 58
1079 int32 CorpseMapID; // 59 MapID of entrance map
1080 DBCPosition2D Corpse; // 60-61 entrance coordinate (if exist single entry)
1081 //uint32 TimeOfDayOverride; // 62 -1, 0 and 720
1084 uint32 MaxPlayers; // 65 max players, fallback if not present in MapDifficulty.dbc
1085
1086 // Helpers
1087 uint32 Expansion() const { return ExpansionID; }
1088
1089 bool IsDungeon() const { return InstanceType == MAP_INSTANCE || InstanceType == MAP_RAID; }
1090 bool IsNonRaidDungeon() const { return InstanceType == MAP_INSTANCE; }
1092 bool IsRaid() const { return InstanceType == MAP_RAID; }
1094 bool IsBattleArena() const { return InstanceType == MAP_ARENA; }
1096 bool IsWorldMap() const { return InstanceType == MAP_COMMON; }
1097
1098 bool GetEntrancePos(int32 &mapid, float &x, float &y) const
1099 {
1100 if (CorpseMapID < 0)
1101 return false;
1102 mapid = CorpseMapID;
1103 x = Corpse.X;
1104 y = Corpse.Y;
1105 return true;
1106 }
1107
1108 bool IsContinent() const
1109 {
1110 return ID == 0 || ID == 1 || ID == 530 || ID == 571;
1111 }
1112
1114};
1115
1117{
1118 //uint32 ID; // 0
1120 uint32 Difficulty; // 2 (for arenas: arena slot)
1121 char const* Message; // 3-18 text showed when transfer to map failed (missing requirements)
1122 //uint32 Message_lang_mask; // 19
1125 //char const* Difficultystring; // 22
1126};
1127
1129{
1131 //char const* Filename; // 1
1132 //uint32 Volume; // 2 always 100
1133};
1134
1136{
1137 //uint32 ID; // 0
1138 char const* Name; // 1
1140};
1141
1143{
1144 //uint32 ID; // 0
1145 char const* Name; // 1
1147};
1148
1149#define MAX_OVERRIDE_SPELL 10
1150
1152{
1155 //uint32 Flags; // 11
1156};
1157
1159{
1162 //char const* GlobalStringBaseTag; // 2
1163 //uint8 Red; // 3
1164 //uint8 Green; // 4
1165 //uint8 Blue; // 5
1166};
1167
1169{
1170 //uint32 ID; // 0
1176
1177 // helpers
1179};
1180
1182{
1184 //char const* SortName[16]; // 1-16
1185 //uint32 SortName_lang; // 17
1186};
1187
1189{
1191 uint32 Difficulty[10]; // 1-10
1192};
1193
1195{
1198};
1199
1201{
1202 uint32 ID; // 0 item level
1203 uint32 Epic[5]; // 1-5
1204 uint32 Superior[5]; // 6-10
1205 uint32 Good[5]; // 11-15
1206};
1207
1209{
1211 int32 StatID[10]; // 1-10
1212 uint32 Bonus[10]; // 11-20
1214};
1215
1217{
1242
1244 {
1245 if (mask & 0x4001F)
1246 {
1247 if (mask & 0x00000001) return ShoulderBudget;
1248 if (mask & 0x00000002) return TrinketBudget;
1249 if (mask & 0x00000004) return WeaponBudget1H;
1250 if (mask & 0x00000008) return PrimaryBudget;
1251 if (mask & 0x00000010) return RangedBudget;
1252 if (mask & 0x00040000) return TertiaryBudget;
1253 }
1254 return 0;
1255 }
1256
1258 {
1259 if (mask & 0x00F001E0)
1260 {
1261 if (mask & 0x00000020) return ClothShoulderArmor;
1262 if (mask & 0x00000040) return LeatherShoulderArmor;
1263 if (mask & 0x00000080) return MailShoulderArmor;
1264 if (mask & 0x00000100) return PlateShoulderArmor;
1265
1266 if (mask & 0x00080000) return ClothCloakArmor;
1267 if (mask & 0x00100000) return ClothChestArmor;
1268 if (mask & 0x00200000) return LeatherChestArmor;
1269 if (mask & 0x00400000) return MailChestArmor;
1270 if (mask & 0x00800000) return PlateChestArmor;
1271 }
1272 return 0;
1273 }
1274
1276 {
1277 if (mask & 0x7E00)
1278 {
1279 if (mask & 0x00000200) return WeaponDPS1H;
1280 if (mask & 0x00000400) return WeaponDPS2H;
1281 if (mask & 0x00000800) return SpellcasterDPS1H;
1282 if (mask & 0x00001000) return SpellcasterDPS2H;
1283 if (mask & 0x00002000) return RangedDPS;
1284 if (mask & 0x00004000) return WandDPS;
1285 }
1286 return 0;
1287 }
1288
1289 bool isTwoHand(uint32 mask) const
1290 {
1291 if (mask & 0x7E00)
1292 {
1293 if (mask & 0x00000400) return true;
1294 if (mask & 0x00001000) return true;
1295 }
1296 return false;
1297 }
1298
1300 {
1301 if (mask & 0x00008000) return SpellPower;
1302 return 0;
1303 }
1304
1305 uint32 getFeralBonus(uint32 /*mask*/) const // removed in 3.2.x?
1306 {
1307 //if (mask & 0x00010000) return 0; // not used?
1308 return 0;
1309 }
1310};
1311
1313{
1316 //uint32 SkillCostsID; // 2
1317 char const* DisplayName[16]; // 3-18
1318 //uint32 DisplayName_lang_mask; // 19
1319 //char const* Description[16]; // 20-35
1320 //uint32 Description_lang_mask; // 36
1322 //char const* AlternateVerb[16]; // 38-53
1323 //uint32 AlternateVerb_lang_mask; // 54
1325};
1326
1328{
1334 //uint32 ExcludeRace; // 5
1335 //uint32 ExcludeClass; // 6
1341 //uint32 CharacterPoints[2]; // 12-13
1342};
1343
1344/*
1345struct SkillLineCategoryEntry
1346{
1347 uint32 ID; // 0
1348 char const* Name[16]; // 1-17
1349 uint32 Name_lang_mask; // 18
1350 uint32 SortIndex; // 19
1351};
1352*/
1353
1355{
1356 //uint32 ID; // 0
1361 //uint32 MinLevel; // 5
1363 //uint32 SkillCostIndex; // 7
1364};
1365
1366#define MAX_SKILL_STEP 16
1367
1369{
1371 //uint32 Cost[MAX_SKILL_STEP]; // 1-16
1373};
1374
1376{
1378 //uint32 SoundType; // 1
1379 //char const* Name; // 2
1380 //char const* File[10]; // 3-12
1381 //uint32 Freq[10]; // 13-22
1382 //char const* DirectoryBase; // 23
1383 //float VolumeFloat; // 24
1384 //uint32 Flags; // 25
1385 //float MinDistance; // 26
1386 //float DistanceCutoff; // 27
1387 //uint32 EAXDef; // 28
1388 //uint32 SoundEntriesAdvancedID; // 29
1389};
1390
1392{
1405 std::array<uint32, 2> ShapeshiftMask; // 12-13
1406 std::array<uint32, 2> ShapeshiftExclude; // 14-15
1438 float Speed; // 47
1439 //uint32 ModalNextSpell; // 48
1441 std::array<uint32, 2> Totem; // 50-51
1442 std::array<int32, MAX_SPELL_REAGENTS> Reagent; // 52-59
1443 std::array<uint32, MAX_SPELL_REAGENTS> ReagentCount; // 60-67
1447 std::array<uint32, MAX_SPELL_EFFECTS> Effect; // 71-73
1448 std::array<int32, MAX_SPELL_EFFECTS> EffectDieSides; // 74-76
1449 std::array<float, MAX_SPELL_EFFECTS> EffectRealPointsPerLevel; // 77-79
1450 std::array<int32, MAX_SPELL_EFFECTS> EffectBasePoints; // 80-82
1451 std::array<uint32, MAX_SPELL_EFFECTS> EffectMechanic; // 83-85
1452 std::array<uint32, MAX_SPELL_EFFECTS> EffectImplicitTargetA; // 86-88
1453 std::array<uint32, MAX_SPELL_EFFECTS> EffectImplicitTargetB; // 89-91
1454 std::array<uint32, MAX_SPELL_EFFECTS> EffectRadiusIndex; // 92-94
1455 std::array<uint32, MAX_SPELL_EFFECTS> EffectAura; // 95-97
1456 std::array<uint32, MAX_SPELL_EFFECTS> EffectAuraPeriod; // 98-100
1457 std::array<float, MAX_SPELL_EFFECTS> EffectAmplitude; // 101-103
1458 std::array<uint32, MAX_SPELL_EFFECTS> EffectChainTargets; // 104-106
1459 std::array<uint32, MAX_SPELL_EFFECTS> EffectItemType; // 107-109
1460 std::array<int32, MAX_SPELL_EFFECTS> EffectMiscValue; // 110-112
1461 std::array<int32, MAX_SPELL_EFFECTS> EffectMiscValueB; // 113-115
1462 std::array<uint32, MAX_SPELL_EFFECTS> EffectTriggerSpell; // 116-118
1463 std::array<float, MAX_SPELL_EFFECTS> EffectPointsPerCombo; // 119-121
1464 std::array<flag96, MAX_SPELL_EFFECTS> EffectSpellClassMask; // 122-130
1465 std::array<uint32, 2> SpellVisualID; // 131-132
1469 std::array<char const*, 16> Name; // 136-151
1470 //uint32 Name_lang_mask; // 152
1471 std::array<char const*, 16> NameSubtext; // 153-168
1472 //uint32 NameSubtext_lang_mask; // 169
1473 //std::array<char const*, 16> Description; // 170-185
1474 //uint32 Description_lang_mask; // 186
1475 //std::array<char const*, 16> AuraDescription; // 187-202
1476 //uint32 AuraDescription_lang_mask; // 203
1486 //uint32 StanceBarOrder; // 215
1487 std::array<float, MAX_SPELL_EFFECTS> EffectChainAmplitude; // 216-218
1488 //uint32 MinFactionID; // 219
1489 //uint32 MinReputation; // 220
1490 //uint32 RequiredAuraVision; // 221
1491 std::array<uint32, 2> RequiredTotemCategoryID; // 222-223
1495 //uint32 SpellMissileID; // 227
1496 //uint32 PowerDisplayID; // 228
1497 std::array<float, MAX_SPELL_EFFECTS> EffectBonusCoefficient; // 229-231
1498 //uint32 DescriptionVariablesID; // 232
1499 //uint32 Difficulty; // 233
1500};
1501
1502typedef std::set<uint32> PetFamilySpellsSet;
1503typedef std::map<uint32, PetFamilySpellsSet> PetFamilySpellsStore;
1504
1506{
1509 //int32 PerLevel; // 2
1510 //int32 Minimum; // 3
1511};
1512
1514{
1517};
1518
1520{
1522 int32 DifficultySpellID[MAX_DIFFICULTY]; // 1-4 instance modes: 10N, 25N, 10H, 25H or Normal/Heroic if only 1-2 is set, if 3-4 is 0 then Mode-2
1523};
1524
1532
1534{
1536 //char const* Name[16]; // 1-15
1537 //uint32 Name_lang_mask; // 16
1538};
1539
1541{
1543 //uint32 Charges; // 1
1546 //uint32 EffectPointsMax[MAX_ITEM_ENCHANTMENT_EFFECTS] // 8-10
1548 char const* Name[16]; // 14-29
1549 //uint32 Name_lang_mask; // 30
1557};
1558
1560{
1563 //uint32 LtOperand[5]; // 6-10
1564 uint8 Operator[5]; // 11-15
1566 uint32 RtOperand[5]; // 21-25
1567 //uint8 Logic[5]; // 25-30
1568};
1569
1571{
1573 float Radius; // 1
1574 float RadiusPerLevel; // 2
1575 float RadiusMax; // 3
1576};
1577
1579{
1581 float RangeMin[2]; // 1-2 [0] Hostile [1] Friendly
1582 float RangeMax[2]; // 3-4 [0] Hostile [1] Friendly
1584 //char const* DisplayName[16]; // 6-21
1585 //uint32 DisplayName_lang_mask; // 22
1586 //char const* DisplayNameShort[16]; // 23-38
1587 //uint32 DisplayNameShort_lang_mask; // 39
1588};
1589
1591{
1593 uint32 RuneCost[3]; // 1-3 [0] Blood [1] Unholy [2] Frost
1595
1596 bool NoRuneCost() const { return RuneCost[0] == 0 && RuneCost[1] == 0 && RuneCost[2] == 0; }
1597 bool NoRunicPowerGain() const { return RunicPower == 0; }
1598};
1599
1600#define MAX_SHAPESHIFT_SPELLS 8
1601
1603{
1605 //uint32 BonusActionBar; // 1
1606 //char const* Name[16]; // 2-17
1607 //uint32 Name_lang_mask; // 18
1609 int32 CreatureType; // 20 <= 0 humanoid, other normal creature types
1610 //uint32 AttackIconID; // 21
1612 uint32 CreatureDisplayID[4]; // 23-26 [0] Alliance [1] Horde [2] Unk [3] Unk
1614};
1615
1617{
1618 //uint32 ID; // 0
1619 //uint32 PrecastKit; // 1
1620 //uint32 CastKit; // 2
1621 //uint32 ImpactKit; // 3
1622 //uint32 StateKit; // 4
1623 //uint32 StateDoneKit; // 5
1624 //uint32 ChannelKit; // 6
1627 //uint32 MissilePathType; // 9
1628 //uint32 MissileDestinationAttachment; // 10
1629 //uint32 MissileSound; // 11
1630 //uint32 AnimEventSoundID; // 12
1631 //uint32 Flags; // 13
1632 //uint32 CasterImpactKit; // 14
1633 //uint32 TargetImpactKit; // 15
1634 //int32 MissileAttachment; // 16
1635 //uint32 MissileFollowGroundHeight; // 17
1636 //uint32 MissileFollowGroundDropSpeed; // 18
1637 //uint32 MissileFollowGroundApproach; // 19
1638 //uint32 MissileFollowGroundFlags; // 20
1639 //uint32 MissileMotion; // 21
1640 //uint32 MissileTargetingKit; // 22
1641 //uint32 InstantAreaKit; // 23
1642 //uint32 ImpactAreaKit; // 24
1643 //uint32 PersistentAreaKit; // 25
1644 //DBCPosition3D MissileCastOffset; // 26-28
1645 //DBCPosition3D MissileImpactOffset; // 29-31
1646};
1647
1649{
1652};
1653
1663
1665{
1667 uint32 TabID; // 1 index in TalentTab.dbc (TalentTabEntry)
1670 std::array<uint32, MAX_TALENT_RANK> SpellRank; // 4-8
1671 //std::array<uint32, 4> SpellRankUnused; // 9-12
1672 uint32 PrereqTalent; // 13 index in Talent.dbc (TalentEntry)
1673 //std::array<uint32, 2> PrereqTalentUnused; // 14-15
1675 //std::array<uint32, 2> PrereqRankUnused; // 17-18
1676 //uint32 Flags; // 19
1677 //uint32 RequiredSpellID; // 20 all 0
1678 //std::array<uint32, 2> CategoryMask; // 21 its a 64 bit mask for pet 1<<CategoryEnumID in CreatureFamily.dbc
1679};
1680
1682{
1684 //char const* Name[16]; // 1-16
1685 //uint32 Name_lang_mask; // 17
1686 //unit32 SpellIconID; // 18
1687 //uint32 RaceMask; // 19
1691 //char const* BackgroundFile; // 23
1692};
1693
1695{
1699 char const* Name[16]; // 5-21
1700 //uint32 Name_lang_mask; // 22
1702};
1703
1711
1724
1726{
1727 //uint32 ID; // 0
1728 float Data; // 1
1729};
1730
1732{
1734 //char const* Name[16]; // 1-16
1735 //uint32 Name_lang_mask; // 17
1736 uint32 TotemCategoryType; // 18 (one for specialization)
1737 uint32 TotemCategoryMask; // 19 (compatibility mask for same type: different for totems, compatible from high to low for rods)
1738};
1739
1741{
1742 //uint32 ID; // 0
1746 //uint32 SequenceID; // 4
1747};
1748
1750{
1751 //uint32 ID; // 0
1754 float X; // 3
1755 float Y; // 4
1756 float Z; // 5
1757 float W; // 6
1758};
1759
1760#define MAX_VEHICLE_SEATS 8
1761
1763{
1766 float TurnSpeed; // 2
1767 float PitchSpeed; // 3
1768 float PitchMin; // 4
1769 float PitchMax; // 5
1775 float FacingLimitRight; // 18
1776 float FacingLimitLeft; // 19
1781 float MsslTrgtArcSpeed; // 24
1783 float MsslTrgtArcWidth; // 26
1784 float MsslTrgtImpactRadius[2]; // 27-28
1785 char const* MsslTrgtArcTexture; // 29
1786 char const* MsslTrgtImpactTexture; // 30
1787 char const* MsslTrgtImpactModel[2]; // 31-32
1788 float CameraYawOffset; // 33
1793 //uint32 PowerDisplayIDUnused[2]; // 38-39
1794};
1795
1797{
1802 float EnterPreDelay; // 6
1803 float EnterSpeed; // 7
1804 float EnterGravity; // 8
1806 float EnterMaxDuration; // 10
1815 float ExitPreDelay; // 19
1816 float ExitSpeed; // 20
1817 float ExitGravity; // 21
1818 float ExitMinDuration; // 22
1819 float ExitMaxDuration; // 23
1820 float ExitMinArcHeight; // 24
1821 float ExitMaxArcHeight; // 25
1825 float PassengerYaw; // 29
1826 float PassengerPitch; // 30
1827 float PassengerRoll; // 31
1842 //float CameraEnteringDelay; // 46
1843 //float CameraEnteringDuration; // 47
1844 //float CameraExitingDelay; // 48
1845 //float CameraExitingDuration; // 49
1846 //DBCPosition3D CameraOffset; // 50-52
1847 //float CameraPosChaseRate; // 53
1848 //float CameraFacingChaseRate; // 54
1849 //float CameraEnteringZoom; // 55
1850 //float CameraSeatZoomMin; // 56
1851 //float CameraSeatZoomMax; // 57
1852
1853 inline bool HasFlag(VehicleSeatFlags flag) const { return (Flags & flag) != 0; }
1854 inline bool HasFlag(VehicleSeatFlagsB flag) const { return (FlagsB & flag) != 0; }
1855
1861 inline bool IsEjectable() const { return HasFlag(VEHICLE_SEAT_FLAG_B_EJECTABLE); }
1862};
1863
1865{
1866 uint32 ID; // 0 index
1867 int32 WMOID; // 1 used in root WMO
1868 int32 NameSetID; // 2 used in adt file
1869 int32 WMOGroupID; // 3 used in group WMO
1870 //uint32 SoundProviderPref; // 4
1871 //uint32 SoundProviderPrefUnderwater; // 5
1872 //uint32 AmbienceID; // 6
1873 //uint32 ZoneMusic; // 7
1874 //uint32 IntroSound; // 8
1875 uint32 Flags; // 9 used for indoor/outdoor determination
1876 uint32 AreaTableID; // 10 link to AreaTableEntry.ID
1877 //char const* AreaName[16]; // 11
1878 //uint32 AreaName_lang_mask; // 12
1879};
1880
1882{
1883 //uint32 ID; // 0
1886 //char const* AreaName // 3
1887 float LocLeft; // 4
1888 float LocRight; // 5
1889 float LocTop; // 6
1890 float LocBottom; // 7
1891 int32 DisplayMapID; // 8 -1 (map_id have correct map) other: virtual map where zone show (map_id - where zone in fact internally)
1892 //int32 DefaultDungeonFloor; // 9 pointer to DungeonMap.dbc (override x1, x2, y1, y2 coordinates)
1893 //uint32 ParentWorldMapID; // 10
1894};
1895
1896#define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4
1897
1899{
1901 //uint32 MapAreaID; // 1 ID in WorldMapArea.dbc
1903 //uint32 MapPointX; // 6
1904 //uint32 MapPointY; // 7
1905 //char const* TextureName // 8
1906 //uint32 TextureWidth; // 9
1907 //uint32 TextureHeight; // 10
1908 //uint32 OffsetX; // 11
1909 //uint32 OffsetY; // 12
1910 //uint32 HitRectTop; // 13
1911 //uint32 HitRectLeft; // 14
1912 //uint32 HitRectBottom; // 15
1913 //uint32 HitRectRight; // 16
1914};
1915
1917{
1921 //char const* AreaName[16] // 5-20
1922 //uint32 AreaName_lang_mask; // 21
1923};
1924
1925/*
1926struct WorldStateUI
1927{
1928 uint32 ID; // 0
1929 uint32 MapID; // 1 Can be -1 to show up everywhere.
1930 uint32 AreaID; // 2 Can be zero for "everywhere".
1931 uint32 PhaseShift; // 3 Phase this WorldState is avaliable in
1932 char const* Icon; // 4 The icon that is used in the interface.
1933 char const* String; // 5-20
1934 uint32 String_lang_mask; // 21
1935 char const* Tooltip; // 22-37
1936 uint32 Tooltip_lang_mask; // 38
1937 uint32 StateVariable; // 39
1938 uint32 Type; // 40 0 = unknown, 1 = unknown, 2 = not shown in ui, 3 = wintergrasp
1939 char const* DynamicIcon; // 41
1940 char const* DynamicTooltip[16]; // 42-57
1941 uint32 DynamicTooltip_lang_mask; // 58
1942 char const* ExtendedUI; // 59
1943 uint32 ExtendedUIStateVariable[3]; // 60-62
1944};
1945*/
1946
1947/*
1948struct WorldStateZoneSounds
1949{
1950 uint32 WorldStateID; // 0
1951 uint32 WorldStateValue; // 1
1952 uint32 AreaID; // 2
1953 uint32 WMOAreaID; // 3
1954 uint32 ZoneIntroMusicID; // 4
1955 uint32 ZoneMusicID; // 5
1956 uint32 SoundAmbienceID; // 6
1957 uint32 SoundProviderPreferencesID; // 7
1958};
1959*/
1960
1961#pragma pack(pop)
1962
1963// Structures not used for casting to loaded DBC data and not required then packing
1965{
1967 MapDifficulty(uint32 _resetTime, uint32 _maxPlayers, bool _hasErrorMessage) : resetTime(_resetTime), maxPlayers(_maxPlayers), hasErrorMessage(_hasErrorMessage) { }
1968
1972};
1973
1975{
1977 TalentSpellPos(uint16 _talent_id, uint8 _rank) : talent_id(_talent_id), rank(_rank) { }
1978
1981};
1982
1983typedef std::map<uint32, TalentSpellPos> TalentSpellPosMap;
1984
1993typedef std::map<uint32, TaxiPathBySourceAndDestination> TaxiPathSetForSource;
1994typedef std::map<uint32, TaxiPathSetForSource> TaxiPathSetBySource;
1995
1996typedef std::vector<TaxiPathNodeEntry const*> TaxiPathNodeList;
1997typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath;
1998
1999#endif
CalendarFlags
Definition CalendarMgr.h:41
VehicleSeatFlags
Definition DBCEnums.h:468
@ VEHICLE_SEAT_FLAG_SHOULD_USE_VEH_SEAT_EXIT_ANIM_ON_VOLUNTARY_EXIT
Definition DBCEnums.h:472
@ VEHICLE_SEAT_FLAG_CAN_SWITCH
Definition DBCEnums.h:495
@ VEHICLE_SEAT_FLAG_CAN_ENTER_OR_EXIT
Definition DBCEnums.h:494
@ VEHICLE_SEAT_FLAG_CAN_CONTROL
Definition DBCEnums.h:480
@ VEHICLE_SEAT_FLAG_UNCONTROLLED
Definition DBCEnums.h:482
@ VEHICLE_SEAT_FLAG_UNK18
Definition DBCEnums.h:486
@ MAP_COMMON
Definition DBCEnums.h:335
@ MAP_BATTLEGROUND
Definition DBCEnums.h:338
@ MAP_ARENA
Definition DBCEnums.h:339
@ MAP_INSTANCE
Definition DBCEnums.h:336
@ MAP_RAID
Definition DBCEnums.h:337
Difficulty
Definition DBCEnums.h:279
@ FACTION_MASK_PLAYER
Definition DBCEnums.h:326
VehicleSeatFlagsB
Definition DBCEnums.h:504
@ VEHICLE_SEAT_FLAG_B_EJECTABLE
Definition DBCEnums.h:508
@ VEHICLE_SEAT_FLAG_B_USABLE_FORCED
Definition DBCEnums.h:506
@ VEHICLE_SEAT_FLAG_B_USABLE_FORCED_3
Definition DBCEnums.h:510
@ VEHICLE_SEAT_FLAG_B_USABLE_FORCED_2
Definition DBCEnums.h:509
@ VEHICLE_SEAT_FLAG_B_USABLE_FORCED_4
Definition DBCEnums.h:512
#define MAX_DIFFICULTY
Definition DBCEnums.h:296
#define MAX_CRITERIA_REQUIREMENTS
Definition DBCEnums.h:94
@ AREA_FLAG_SANCTUARY
Definition DBCEnums.h:258
@ AREA_FLAG_OUTLAND
Definition DBCEnums.h:257
@ AREA_FLAG_NO_FLY_ZONE
Definition DBCEnums.h:275
BattlegroundBracketId
Definition DBCEnums.h:57
@ MAP_FLAG_DYNAMIC_DIFFICULTY
Definition DBCEnums.h:344
@ FACTION_TEMPLATE_FLAG_CONTESTED_GUARD
Definition DBCEnums.h:320
CharSectionType
@ SECTION_TYPE_FACIAL_HAIR
@ SECTION_TYPE_HAIR
@ SECTION_TYPE_UNDERWEAR
@ SECTION_TYPE_FACE
@ SECTION_TYPE_SKIN
std::vector< TaxiPathNodeList > TaxiPathNodesByPath
#define MAX_ITEM_SET_SPELLS
#define MAX_LOCK_CASE
std::map< uint32, TaxiPathBySourceAndDestination > TaxiPathSetForSource
#define MAX_ITEM_EXTENDED_COST_REQUIREMENTS
#define MAX_VEHICLE_SEATS
CreatureTypeEntryFlags
@ CREATURE_TYPE_ENTRY_FLAGS_IGNORED_TAB_TARGETING
std::vector< TaxiPathNodeEntry const * > TaxiPathNodeList
CharSectionFlags
@ SECTION_FLAG_PLAYER
@ SECTION_FLAG_DEATH_KNIGHT
#define MAX_ITEM_SET_ITEMS
ChrRacesFlags
@ CHRRACES_FLAGS_NOT_PLAYABLE
@ CHRRACES_FLAGS_CAN_MOUNT
@ CHRRACES_FLAGS_BARE_FEET
#define MAX_SHAPESHIFT_SPELLS
std::map< uint32, TaxiPathSetForSource > TaxiPathSetBySource
CreatureModelDataFlags
@ CREATURE_MODEL_DATA_FLAGS_CAN_MOUNT
#define MAX_WORLD_MAP_OVERLAY_AREA_IDX
#define MAX_GROUP_AREA_IDS
#define MAX_FACTION_RELATIONS
#define MAX_HOLIDAY_FLAGS
ChrRacesAllianceType
@ CHRRACES_ALLIANCE_TYPE_HORDE
@ CHRRACES_ALLIANCE_TYPE_NOT_PLAYABLE
@ CHRRACES_ALLIANCE_TYPE_ALLIANCE
std::set< uint32 > PetFamilySpellsSet
#define MAX_OUTFIT_ITEMS
#define MAX_SKILL_STEP
#define MAX_HOLIDAY_DURATIONS
std::map< uint32, PetFamilySpellsSet > PetFamilySpellsStore
#define MAX_HOLIDAY_DATES
std::map< uint32, TalentSpellPos > TalentSpellPosMap
#define MAX_ITEM_ENCHANTMENT_EFFECTS
#define MAX_OVERRIDE_SPELL
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint16_t uint16
Definition Define.h:134
uint32_t uint32
Definition Define.h:133
TypeID
Definition ObjectGuid.h:34
Spells
Definition PlayerAI.cpp:32
ReputationFlags
#define MAX_CREATURE_SPELL_DATA_SLOT
Definition Util.h:412
union AchievementCriteriaEntry::@279 Asset
struct AchievementCriteriaEntry::@280 AdditionalRequirements[MAX_CRITERIA_REQUIREMENTS]
std::array< char const *, 16 > Title
uint32 AreaID[MAX_GROUP_AREA_IDS]
bool IsFlyable() const
uint32 FactionGroupMask
uint32 LiquidTypeID[4]
bool IsSanctuary() const
char const * AreaName[16]
DBCPosition3D Pos
char const * Name[16]
bool HasFlag(CharSectionFlags flag) const
int32 ItemID[MAX_OUTFIT_ITEMS]
char const * Name[16]
char const * Name1[16]
char const * Name[16]
uint32 RequiredExpansion
char const * Name[16]
uint32 CinematicSequenceID
uint32 FemaleDisplayID
uint32 ResSicknessSpellID
bool HasFlag(ChrRacesFlags flag) const
uint32 MaleDisplayID
uint32 CreatureType
uint32 BaseLanguage
char const * Name[16]
uint32 CinematicSequenceID
uint32 RequiredExpansion
DBCPosition3D Origin
char const * Name[16]
bool HasFlag(CreatureModelDataFlags flag) const
char const * Name[16]
uint32 ArmorSubClassCost[8]
uint32 WeaponSubClassCost[21]
uint32 EmoteFlags
uint32 EmoteSpecProcParam
uint32 EmoteSpecProc
int32 ReputationBase[4]
char const * Name[16]
uint32 ReputationClassMask[4]
uint32 ParentFactionCap[2]
int32 ReputationIndex
uint32 ParentFactionID
uint32 ReputationRaceMask[4]
bool CanHaveReputation() const
float ParentFactionMod[2]
bool IsHostileTo(FactionTemplateEntry const &entry) const
bool IsHostileToPlayers() const
bool IsContestedGuardFaction() const
uint32 Enemies[MAX_FACTION_RELATIONS]
bool IsNeutralToAll() const
bool IsFriendlyTo(FactionTemplateEntry const &entry) const
uint32 Friend[MAX_FACTION_RELATIONS]
int32 CalendarFilterType
uint32 Duration[MAX_HOLIDAY_DURATIONS]
char const * TextureFilename
uint32 Date[MAX_HOLIDAY_DATES]
int32 SoundOverrideSubclassID
uint32 SheatheType
uint32 InventoryType
uint32 DisplayInfoID
uint32 ClassID
int32 Material
uint32 SubclassID
uint32 ItemID[MAX_ITEM_EXTENDED_COST_REQUIREMENTS]
uint32 ItemCount[MAX_ITEM_EXTENDED_COST_REQUIREMENTS]
std::array< char const *, 16 > Name
std::array< uint32, MAX_ITEM_ENCHANTMENT_EFFECTS > Enchantment
std::array< char const *, 16 > Name
std::array< uint32, MAX_ITEM_ENCHANTMENT_EFFECTS > AllocationPct
std::array< uint32, MAX_ITEM_ENCHANTMENT_EFFECTS > Enchantment
char const * Name[16]
uint32 RequiredSkill
uint32 RequiredSkillRank
uint32 SetThreshold[MAX_ITEM_SET_SPELLS]
uint32 ItemID[MAX_ITEM_SET_ITEMS]
uint32 SetSpellID[MAX_ITEM_SET_SPELLS]
uint32 Entry() const
char const * Name[16]
uint32 ContinentID
DBCPosition3D GameCoords
uint32 Type[MAX_LOCK_CASE]
uint32 Index[MAX_LOCK_CASE]
uint32 Skill[MAX_LOCK_CASE]
char const * Body[16]
char const * Message
MapDifficulty(uint32 _resetTime, uint32 _maxPlayers, bool _hasErrorMessage)
int32 CorpseMapID
DBCPosition2D Corpse
bool IsBattleground() const
bool GetEntrancePos(int32 &mapid, float &x, float &y) const
uint32 MaxPlayers
uint32 RaidOffset
bool IsNonRaidDungeon() const
uint32 InstanceType
uint32 Flags
uint32 Expansion() const
char const * MapName[16]
bool IsContinent() const
bool IsWorldMap() const
uint32 LoadingScreenID
bool IsBattlegroundOrArena() const
uint32 ExpansionID
bool IsDungeon() const
bool IsRaid() const
bool IsBattleArena() const
bool IsDynamicDifficultyMap() const
bool Instanceable() const
uint32 AreaTableID
BattlegroundBracketId GetBracketId() const
uint32 getFeralBonus(uint32) const
uint32 getArmorMod(uint32 mask) const
bool isTwoHand(uint32 mask) const
uint32 getDPSMod(uint32 mask) const
uint32 getssdMultiplier(uint32 mask) const
uint32 getSpellBonus(uint32 mask) const
char const * DisplayName[16]
uint32 Value[MAX_SKILL_STEP]
int32 DifficultySpellID[MAX_DIFFICULTY]
uint32 Mechanic
uint32 AuraInterruptFlags
std::array< float, MAX_SPELL_EFFECTS > EffectBonusCoefficient
std::array< int32, MAX_SPELL_EFFECTS > EffectMiscValue
uint32 DispelType
std::array< uint32, 2 > ShapeshiftExclude
std::array< flag96, MAX_SPELL_EFFECTS > EffectSpellClassMask
uint32 CumulativeAura
uint32 SpellPriority
uint32 DurationIndex
std::array< uint32, MAX_SPELL_EFFECTS > EffectChainTargets
uint32 AttributesExB
flag96 SpellClassMask
uint32 ManaPerSecond
std::array< uint32, 2 > SpellVisualID
uint32 ManaCost
uint32 CategoryRecoveryTime
int32 EquippedItemClass
std::array< uint32, MAX_SPELL_EFFECTS > EffectTriggerSpell
uint32 SpellClassSet
std::array< uint32, MAX_SPELL_EFFECTS > EffectMechanic
uint32 TargetCreatureType
uint32 SchoolMask
uint32 CasterAuraSpell
std::array< uint32, MAX_SPELL_EFFECTS > EffectAuraPeriod
uint32 CasterAuraState
uint32 AttributesEx
uint32 ManaCostPerLevel
std::array< uint32, 2 > RequiredTotemCategoryID
std::array< uint32, MAX_SPELL_EFFECTS > EffectImplicitTargetA
std::array< uint32, MAX_SPELL_EFFECTS > EffectRadiusIndex
std::array< uint32, MAX_SPELL_EFFECTS > EffectItemType
uint32 InterruptFlags
uint32 AttributesExE
uint32 ActiveIconID
uint32 TargetAuraState
uint32 TargetAuraSpell
std::array< char const *, 16 > Name
uint32 CastingTimeIndex
uint32 ProcTypeMask
uint32 RuneCostID
uint32 StartRecoveryCategory
uint32 RecoveryTime
std::array< uint32, MAX_SPELL_EFFECTS > EffectAura
int32 EquippedItemSubclass
uint32 Attributes
std::array< int32, MAX_SPELL_EFFECTS > EffectBasePoints
std::array< float, MAX_SPELL_EFFECTS > EffectPointsPerCombo
uint32 MaxLevel
uint32 StartRecoveryTime
std::array< uint32, MAX_SPELL_EFFECTS > EffectImplicitTargetB
uint32 PowerType
uint32 ExcludeTargetAuraSpell
int32 RequiredAreasID
uint32 ExcludeCasterAuraState
uint32 AttributesExC
uint32 ChannelInterruptFlags
uint32 ProcChance
std::array< uint32, MAX_SPELL_EFFECTS > Effect
std::array< float, MAX_SPELL_EFFECTS > EffectChainAmplitude
uint32 SpellLevel
uint32 RequiresSpellFocus
std::array< char const *, 16 > NameSubtext
uint32 ProcCharges
uint32 AttributesExF
uint32 SpellIconID
uint32 BaseLevel
uint32 RangeIndex
uint32 FacingCasterFlags
uint32 MaxTargetLevel
std::array< float, MAX_SPELL_EFFECTS > EffectAmplitude
uint32 PreventionType
uint32 Category
std::array< float, MAX_SPELL_EFFECTS > EffectRealPointsPerLevel
uint32 ExcludeCasterAuraSpell
int32 EquippedItemInvTypes
std::array< int32, MAX_SPELL_EFFECTS > EffectMiscValueB
std::array< uint32, 2 > Totem
std::array< uint32, 2 > ShapeshiftMask
uint32 DefenseType
std::array< uint32, MAX_SPELL_REAGENTS > ReagentCount
uint32 ManaPerSecondPerLevel
uint32 AttributesExD
uint32 AttributesExG
uint32 MaxTargets
std::array< int32, MAX_SPELL_REAGENTS > Reagent
std::array< int32, MAX_SPELL_EFFECTS > EffectDieSides
uint32 ManaCostPct
uint32 ExcludeTargetAuraState
uint32 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]
uint32 Effect[MAX_ITEM_ENCHANTMENT_EFFECTS]
uint32 EffectArg[MAX_ITEM_ENCHANTMENT_EFFECTS]
bool NoRuneCost() const
bool NoRunicPowerGain() const
uint32 PresetSpellID[MAX_SHAPESHIFT_SPELLS]
uint32 ColumnIndex
std::array< uint32, MAX_TALENT_RANK > SpellRank
uint32 PrereqTalent
uint32 PrereqRank
TalentSpellPos(uint16 _talent_id, uint8 _rank)
DBCPosition3D Pos
uint32 MountCreatureID[2]
char const * Name[16]
TaxiPathBySourceAndDestination(uint32 _id, uint32 _price)
DBCPosition3D Loc
float MouseLookOffsetPitch
float MsslTrgtArcSpeed
float CameraYawOffset
uint32 PowerDisplayID
float CameraFadeDistScalarMin
uint32 VehicleUIIndicatorID
char const * MsslTrgtArcTexture
float FacingLimitRight
float MsslTrgtArcRepeat
uint32 UiLocomotionType
char const * MsslTrgtImpactModel[2]
float MsslTrgtEndOpacity
float MsslTrgtTurnLingering
float MsslTrgtPitchLingering
float MsslTrgtMouseLingering
float CameraFadeDistScalarMax
float MsslTrgtImpactTexRadius
float CameraPitchOffset
uint32 SeatID[MAX_VEHICLE_SEATS]
float MsslTrgtImpactRadius[2]
char const * MsslTrgtImpactTexture
float MsslTrgtArcWidth
float FacingLimitLeft
bool HasFlag(VehicleSeatFlags flag) const
bool IsEjectable() const
bool CanEnterOrExit() const
bool HasFlag(VehicleSeatFlagsB flag) const
bool IsUsableByOverride() const
bool CanSwitchFromSeat() const
uint32 VehicleAbilityDisplay
int32 VehicleRideAnimLoopBone
DBCPosition3D AttachmentOffset
uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]
DBCPosition3D Loc