root/trunk/src/shared/Database/DBCStructure.h @ 37

Revision 37, 44.5 kB (checked in by yumileroy, 17 years ago)

[svn] * svn:eol-style native set on all files that need it

Original author: Neo2003
Date: 2008-10-11 14:16:25-05:00

Line 
1/*
2 * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 */
18
19#ifndef DBCSTRUCTURE_H
20#define DBCSTRUCTURE_H
21
22#include "Platform/Define.h"
23
24#include <map>
25#include <set>
26#include <vector>
27
28// Structures using to access raw DBC data and required packing to portability
29
30// 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
31#if defined( __GNUC__ )
32#pragma pack(1)
33#else
34#pragma pack(push,1)
35#endif
36
37enum AreaTeams
38{
39    AREATEAM_NONE  = 0,
40    AREATEAM_ALLY  = 2,
41    AREATEAM_HORDE = 4
42};
43
44enum AreaFlags
45{
46    AREA_FLAG_SNOW             = 0x00000001,                // snow (only Dun Morogh, Naxxramas, Razorfen Downs and Winterspring)
47    AREA_FLAG_UNK1             = 0x00000002,                // unknown, (only Naxxramas and Razorfen Downs)
48    AREA_FLAG_UNK2             = 0x00000004,                // Only used on development map
49    AREA_FLAG_SLAVE_CAPITAL    = 0x00000008,                // slave capital city flag?
50    AREA_FLAG_UNK3             = 0x00000010,                // unknown
51    AREA_FLAG_SLAVE_CAPITAL2   = 0x00000020,                // slave capital city flag?
52    AREA_FLAG_UNK4             = 0x00000040,                // many zones have this flag
53    AREA_FLAG_ARENA            = 0x00000080,                // arena, both instanced and world arenas
54    AREA_FLAG_CAPITAL          = 0x00000100,                // main capital city flag
55    AREA_FLAG_CITY             = 0x00000200,                // only for one zone named "City" (where it located?)
56    AREA_FLAG_OUTLAND          = 0x00000400,                // outland zones? (only Eye of the Storm not have this flag, but have 0x00004000 flag)
57    AREA_FLAG_SANCTUARY        = 0x00000800,                // sanctuary area (PvP disabled)
58    AREA_FLAG_NEED_FLY         = 0x00001000,                // only Netherwing Ledge, Socrethar's Seat, Tempest Keep, The Arcatraz, The Botanica, The Mechanar, Sorrow Wing Point, Dragonspine Ridge, Netherwing Mines, Dragonmaw Base Camp, Dragonmaw Skyway
59    AREA_FLAG_UNUSED1          = 0x00002000,                // not used now (no area/zones with this flag set in 2.4.2)
60    AREA_FLAG_OUTLAND2         = 0x00004000,                // outland zones? (only Circle of Blood Arena not have this flag, but have 0x00000400 flag)
61    AREA_FLAG_PVP              = 0x00008000,                // pvp objective area? (Death's Door also has this flag although it's no pvp object area)
62    AREA_FLAG_ARENA_INSTANCE   = 0x00010000,                // used by instanced arenas only
63    AREA_FLAG_UNUSED2          = 0x00020000,                // not used now (no area/zones with this flag set in 2.4.2)
64    AREA_FLAG_UNK5             = 0x00040000,                // just used for Amani Pass, Hatchet Hills
65    AREA_FLAG_LOWLEVEL         = 0x00100000                 // used for some starting areas with area_level <=15
66};
67
68enum FactionTemplateFlags
69{
70    FACTION_TEMPLATE_FLAG_CONTESTED_GUARD   =   0x00001000, // faction will attack players that were involved in PvP combats
71};
72
73struct AreaTableEntry
74{
75    uint32    ID;                                           // 0
76    uint32    mapid;                                        // 1
77    uint32    zone;                                         // 2 if 0 then it's zone, else it's zone id of this area
78    uint32    exploreFlag;                                  // 3, main index
79    uint32    flags;                                        // 4, unknown value but 312 for all cities
80                                                            // 5-9 unused
81    int32     area_level;                                   // 10
82    char*     area_name[16];                                // 11-26
83                                                            // 27, string flags, unused
84    uint32    team;                                         // 28
85};
86
87struct AreaTriggerEntry
88{
89    uint32    id;                                           // 0
90    uint32    mapid;                                        // 1
91    float     x;                                            // 2
92    float     y;                                            // 3
93    float     z;                                            // 4
94    float     radius;                                       // 5
95    float     box_x;                                        // 6 extent x edge
96    float     box_y;                                        // 7 extent y edge
97    float     box_z;                                        // 8 extent z edge
98    float     box_orientation;                              // 9 extent rotation by about z axis
99};
100
101struct BankBagSlotPricesEntry
102{
103    uint32      ID;
104    uint32      price;
105};
106
107struct BattlemasterListEntry
108{
109    uint32      id;                                         // 0
110    uint32      mapid[3];                                   // 1-3 mapid
111                                                            // 4-8 unused
112    uint32      type;                                       // 9 (3 - BG, 4 - arena)
113    uint32      minlvl;                                     // 10
114    uint32      maxlvl;                                     // 11
115    uint32      maxplayersperteam;                          // 12
116                                                            // 13-14 unused
117    char*       name[16];                                   // 15-30
118                                                            // 31 string flag, unused
119                                                            // 32 unused
120};
121
122struct CharTitlesEntry
123{
124    uint32      ID;                                         // 0, title ids, for example in Quest::GetCharTitleId()
125    //uint32      unk1;                                     // 1 flags?
126    //char*       name[16];                                 // 2-17, unused
127                                                            // 18 string flag, unused
128    //char*       name2[16];                                // 19-34, unused
129                                                            // 35 string flag, unused
130    uint32      bit_index;                                  // 36 used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES
131};
132
133struct ChatChannelsEntry
134{
135    uint32      ChannelID;                                  // 0
136    uint32      flags;                                      // 1
137    char*       pattern[16];                                // 3-18
138                                                            // 19 string flags, unused
139    //char*       name[16];                                 // 20-35 unused
140                                                            // 36 string flag, unused
141};
142
143struct ChrClassesEntry
144{
145    uint32      ClassID;                                    // 0
146                                                            // 1-2, unused
147    uint32      powerType;                                  // 3
148                                                            // 4, unused
149    //char*       name[16];                                 // 5-20 unused
150                                                            // 21 string flag, unused
151    //char*       string1[16];                              // 21-36 unused
152                                                            // 37 string flag, unused
153    //char*       string2[16];                              // 38-53 unused
154                                                            // 54 string flag, unused
155                                                            // 55, unused
156    uint32      spellfamily;                                // 56
157                                                            // 57, unused
158};
159
160struct ChrRacesEntry
161{
162    uint32      RaceID;                                     // 0
163                                                            // 1 unused
164    uint32      FactionID;                                  // 2 facton template id
165                                                            // 3 unused
166    uint32      model_m;                                    // 4
167    uint32      model_f;                                    // 5
168                                                            // 6-7 unused
169    uint32      TeamID;                                     // 8 (7-Alliance 1-Horde)
170                                                            // 9-12 unused
171    uint32      startmovie;                                 // 13 id from CinematicCamera.dbc
172    char*       name[16];                                   // 14-29 used for DBC language detection/selection
173                                                            // 30 string flags, unused
174    //char*       string1[16];                              // 31-46 used for DBC language detection/selection
175                                                            // 47 string flags, unused
176    //char*       string2[16];                              // 48-63 used for DBC language detection/selection
177                                                            // 64 string flags, unused
178                                                            // 65-67 unused
179    //uint32    addon                                       // 68 (0 - original race, 1 - tbc addon, ...) unused
180};
181
182struct CreatureDisplayInfoEntry
183{
184    uint32      Displayid;                                  // 0
185                                                            // 1-3,unused
186    float       scale;                                      // 4
187                                                            // 5-13,unused
188};
189
190struct CreatureFamilyEntry
191{
192    uint32    ID;                                           // 0
193    float     minScale;                                     // 1 
194    uint32    minScaleLevel;                                // 2 0/1     
195    float     maxScale;                                     // 3
196    uint32    maxScaleLevel;                                // 4 0/60
197    uint32    skillLine;                                    // 5
198    uint32    skillLine2;                                   // 6
199    uint32    petFoodMask;                                  // 7
200    char*     Name[16];                                     // 8-23
201                                                            // 24 string flags, unused
202                                                            // 25 icon, unused
203};
204
205struct CreatureSpellDataEntry
206{
207    uint32    ID;                                           // 0
208    //uint32    spellId[4];                                 // 1-4 hunter pet learned spell (for later use)
209};
210
211struct DurabilityCostsEntry
212{
213    uint32    Itemlvl;                                      // 0
214    uint32    multiplier[29];                               // 1-29
215};
216
217struct DurabilityQualityEntry
218{
219    uint32    Id;                                           // 0
220    float     quality_mod;                                  // 1
221};
222
223struct EmotesTextEntry
224{
225    uint32    Id;
226    uint32    textid;
227};
228
229struct FactionEntry
230{
231    uint32      ID;                                         // 0
232    int32       reputationListID;                           // 1
233    uint32      BaseRepRaceMask[4];                         // 2-5 Base reputation race masks (see enum Races)
234    uint32      BaseRepClassMask[4];                        // 6-9 Base reputation class masks (see enum Classes)
235    int32       BaseRepValue[4];                            // 10-13 Base reputation values
236    uint32      ReputationFlags[4];                         // 14-17 Default flags to apply
237    uint32      team;                                       // 18 enum Team
238    char*       name[16];                                   // 19-34
239                                                            // 35 string flags, unused
240    //char*     description[16];                            // 36-51 unused
241                                                            // 52 string flags, unused
242};
243
244enum FactionMasks
245{
246    FACTION_MASK_PLAYER   = 1,                              // any player
247    FACTION_MASK_ALLIANCE = 2,                              // player or creature from alliance team
248    FACTION_MASK_HORDE    = 4,                              // player or creature from horde team
249    FACTION_MASK_MONSTER  = 8                               // aggressive creature from monster team
250                                                            // if none flags set then non-aggressive creature
251};
252
253struct FactionTemplateEntry
254{
255    uint32      ID;                                         // 0
256    uint32      faction;                                    // 1
257    uint32      factionFlags;                               // 2 specific flags for that faction
258    uint32      ourMask;                                    // 3 if mask set (see FactionMasks) then faction included in masked team
259    uint32      friendlyMask;                               // 4 if mask set (see FactionMasks) then faction friendly to masked team
260    uint32      hostileMask;                                // 5 if mask set (see FactionMasks) then faction hostile to masked team
261    uint32      enemyFaction1;                              // 6
262    uint32      enemyFaction2;                              // 7
263    uint32      enemyFaction3;                              // 8
264    uint32      enemyFaction4;                              // 9
265    uint32      friendFaction1;                             // 10
266    uint32      friendFaction2;                             // 11
267    uint32      friendFaction3;                             // 12
268    uint32      friendFaction4;                             // 13
269    //-------------------------------------------------------  end structure
270
271    // helpers
272    bool IsFriendlyTo(FactionTemplateEntry const& entry) const
273    {
274        if(enemyFaction1  == entry.faction || enemyFaction2  == entry.faction || enemyFaction3 == entry.faction || enemyFaction4 == entry.faction )
275            return false;
276        if(friendFaction1 == entry.faction || friendFaction2 == entry.faction || friendFaction3 == entry.faction || friendFaction4 == entry.faction )
277            return true;
278        return (friendlyMask & entry.ourMask) || (ourMask & entry.friendlyMask);
279    }
280    bool IsHostileTo(FactionTemplateEntry const& entry) const
281    {
282        if(enemyFaction1  == entry.faction || enemyFaction2  == entry.faction || enemyFaction3 == entry.faction || enemyFaction4 == entry.faction )
283            return true;
284        if(friendFaction1 == entry.faction || friendFaction2 == entry.faction || friendFaction3 == entry.faction || friendFaction4 == entry.faction )
285            return false;
286        return (hostileMask & entry.ourMask) != 0;
287    }
288    bool IsHostileToPlayers() const { return (hostileMask & FACTION_MASK_PLAYER) !=0; }
289    bool IsNeutralToAll() const { return hostileMask == 0 && friendlyMask == 0 && enemyFaction1==0 && enemyFaction2==0 && enemyFaction3==0 && enemyFaction4==0; }
290    bool IsContestedGuardFaction() const { return (factionFlags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD)!=0; }
291};
292
293struct GemPropertiesEntry
294{
295    uint32      ID;
296    uint32      spellitemenchantement;
297    uint32      color;
298};
299
300#define GT_MAX_LEVEL    100
301struct GtCombatRatingsEntry
302{
303    float    ratio;
304};
305
306struct GtChanceToMeleeCritBaseEntry
307{
308    float    base;
309};
310
311struct GtChanceToMeleeCritEntry
312{
313    float    ratio;
314};
315
316struct GtChanceToSpellCritBaseEntry
317{
318    float    base;
319};
320
321struct GtChanceToSpellCritEntry
322{
323    float    ratio;
324};
325
326struct GtOCTRegenHPEntry
327{
328    float    ratio;
329};
330
331//struct GtOCTRegenMPEntry
332//{
333//    float    ratio;
334//};
335
336struct GtRegenHPPerSptEntry
337{
338    float    ratio;
339};
340
341struct GtRegenMPPerSptEntry
342{
343    float    ratio;
344};
345
346struct ItemEntry
347{
348   uint32 ID;
349   uint32 DisplayId;
350   uint32 InventoryType;
351   uint32 Sheath;
352};
353
354struct ItemDisplayInfoEntry
355{
356    uint32      ID;
357    uint32      randomPropertyChance;
358};
359
360//struct ItemCondExtCostsEntry
361//{
362//    uint32      ID;
363//    uint32      condExtendedCost;                           // ItemPrototype::CondExtendedCost
364//    uint32      itemextendedcostentry;                      // ItemPrototype::ExtendedCost
365//    uint32      arenaseason;                                // arena season number(1-4)
366//};
367
368struct ItemExtendedCostEntry
369{
370    uint32      ID;                                         // 0 extended-cost entry id
371    uint32      reqhonorpoints;                             // 1 required honor points
372    uint32      reqarenapoints;                             // 2 required arena points
373    uint32      reqitem[5];                                 // 3-7 required item id
374    uint32      reqitemcount[5];                            // 8-12 required count of 1st item
375    uint32      reqpersonalarenarating;                     // 13 required personal arena rating
376};
377
378struct ItemRandomPropertiesEntry
379{
380    uint32    ID;                                           // 0
381    //char*     internalName                                // 1   unused
382    uint32    enchant_id[3];                                // 2-4
383                                                            // 5-6 unused, 0 only values, reserved for additional enchantments?
384    //char*     nameSuffix[16]                              // 7-22, unused
385                                                            // 23 nameSufix flags, unused
386};
387
388struct ItemRandomSuffixEntry
389{
390    uint32    ID;                                           // 0
391    //char*     name[16]                                    // 1-16 unused
392                                                            // 17, name flags, unused
393                                                            // 18  unused
394    uint32    enchant_id[3];                                // 19-21
395    uint32    prefix[3];                                    // 22-24
396};
397
398struct ItemSetEntry
399{
400    //uint32    id                                          // 0 item set ID
401    char*     name[16];                                     // 1-16
402                                                            // 17 string flags, unused
403                                                            // 18-28 items from set, but not have all items listed, use ItemPrototype::ItemSet instead
404                                                            // 29-34 unused
405    uint32    spells[8];                                    // 35-42
406    uint32    items_to_triggerspell[8];                     // 43-50
407    uint32    required_skill_id;                            // 51
408    uint32    required_skill_value;                         // 52
409};
410
411struct LockEntry
412{
413    uint32      ID;                                         // 0
414    uint32      keytype[5];                                 // 1-5
415                                                            // 6-8, not used
416    uint32      key[5];                                     // 9-13
417                                                            // 14-16, not used
418    uint32      requiredminingskill;                        // 17
419    uint32      requiredlockskill;                          // 18
420                                                            // 19-32, not used
421};
422
423struct MailTemplateEntry
424{
425    uint32      ID;                                         // 0
426    //char*       subject[16];                              // 1-16
427                                                            // 17 name flags, unused
428    //char*       content[16];                              // 18-33
429};
430
431enum MapTypes
432{
433    MAP_COMMON          = 0,
434    MAP_INSTANCE        = 1,
435    MAP_RAID            = 2,
436    MAP_BATTLEGROUND    = 3,
437    MAP_ARENA           = 4
438};
439
440struct MapEntry
441{
442    uint32      MapID;                                      // 0
443    //char*       internalname;                             // 1 unused
444    uint32      map_type;                                   // 2
445                                                            // 3 unused
446    char*       name[16];                                   // 4-19
447                                                            // 20 name flags, unused
448                                                            // 21-23 unused (something PvPZone related - levels?)
449                                                            // 24-26
450    uint32      linked_zone;                                // 27 common zone for instance and continent map
451    //char*     hordeIntro                                  // 28-43 text for PvP Zones
452                                                            // 44 intro text flags
453    //char*     allianceIntro                               // 45-60 text for PvP Zones
454                                                            // 46 intro text flags
455                                                            // 47-61 not used
456    uint32      multimap_id;                                // 62
457                                                            // 63-65 not used
458    //chat*     unknownText1                                // 66-81 unknown empty text fields, possible normal Intro text.
459                                                            // 82 text flags
460    //chat*     heroicIntroText                             // 83-98 heroic mode requirement text
461                                                            // 99 text flags
462    //chat*     unknownText2                                // 100-115 unknown empty text fields
463                                                            // 116 text flags
464    int32       parent_map;                                 // 117 map_id of parent map
465    //float start_x                                         // 118 enter x coordinate (if exist single entry)
466    //float start_y                                         // 119 enter y coordinate (if exist single entry)
467    uint32 resetTimeRaid;                                   // 120
468    uint32 resetTimeHeroic;                                 // 121
469                                                            // 122-123
470    uint32      addon;                                      // 124 (0-original maps,1-tbc addon)
471
472    // Helpers
473    bool IsExpansionMap() const { return addon != 0; }
474
475
476    bool IsDungeon() const { return map_type == MAP_INSTANCE || map_type == MAP_RAID; }
477    bool Instanceable() const { return map_type == MAP_INSTANCE || map_type == MAP_RAID || map_type == MAP_BATTLEGROUND || map_type == MAP_ARENA; }
478    bool IsRaid() const { return map_type == MAP_RAID; }
479    bool IsBattleGround() const { return map_type == MAP_BATTLEGROUND; }
480    bool IsBattleArena() const { return map_type == MAP_ARENA; }
481    bool IsBattleGroundOrArena() const { return map_type == MAP_BATTLEGROUND || map_type == MAP_ARENA; }
482    bool SupportsHeroicMode() const { return resetTimeHeroic && !resetTimeRaid; }
483    bool HasResetTime() const { return resetTimeHeroic || resetTimeRaid; }
484
485    bool IsMountAllowed() const
486    {
487        return !IsDungeon() || 
488            MapID==568 || MapID==309 || MapID==209 || MapID==534 ||
489            MapID==560 || MapID==509 || MapID==269;
490    }
491};
492
493struct QuestSortEntry
494{
495    uint32      id;                                         // 0, sort id
496    //char*       name[16];                                 // 1-16, unused
497                                                            // 17 name flags, unused
498};
499
500struct RandomPropertiesPointsEntry
501{
502    //uint32  Id;                                           // 0 hidden key
503    uint32    itemLevel;                                    // 1
504    uint32    EpicPropertiesPoints[5];                      // 2-6
505    uint32    RarePropertiesPoints[5];                      // 7-11
506    uint32    UncommonPropertiesPoints[5];                  // 12-16
507};
508
509//struct SkillLineCategoryEntry{
510//    uint32    id;                                           // 0 hidden key
511//    char*     name[16];                                     // 1 - 17 Category name
512//                                                                  // 18 string flag
513//    uint32    displayOrder;                                 // Display order in character tab
514//};
515
516//struct SkillRaceClassInfoEntry{
517//    uint32    id;                                           // 0
518//    uint32    skillId;                                      // 1 present some refrences to unknown skill
519//    uint32    raceMask;                                     // 2
520//    uint32    classMask;                                    // 3
521//    uint32    flags;                                        // 4 mask for some thing
522//    uint32    reqLevel;                                     // 5
523//    uint32    skillTierId;                                  // 6
524//    uint32    skillCostID;                                  // 7
525//};
526
527//struct SkillTiersEntry{
528//    uint32    id;                                           // 0
529//    uint32    skillValue[16];                               // 1-17 unknown possibly add value on learn?
530//    uint32    maxSkillValue[16];                            // Max value for rank
531//};
532
533struct SkillLineEntry
534{
535    uint32    id;                                           // 0
536    uint32    categoryId;                                   // 1 (index from SkillLineCategory.dbc)
537    //uint32    skillCostID;                                // 2 not used
538    char*     name[16];                                     // 3-18
539                                                            // 19 string flags, not used
540    //char*     description[16];                            // 20-35, not used
541                                                            // 36 string flags, not used
542    uint32    spellIcon;                                    // 37
543};
544
545enum AbilytyLearnType
546{
547    ABILITY_LEARNED_ON_GET_PROFESSION_SKILL     = 1,
548    ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL  = 2
549};
550
551struct SkillLineAbilityEntry
552{
553    uint32    id;                                           // 0, INDEX
554    uint32    skillId;                                      // 1
555    uint32    spellId;                                      // 2
556    uint32    racemask;                                     // 3
557    uint32    classmask;                                    // 4
558    //uint32    racemaskNot;                                // 5 always 0 in 2.4.2
559    //uint32    classmaskNot;                               // 6 always 0 in 2.4.2
560    uint32    req_skill_value;                              // 7 for trade skill.not for training.
561    uint32    forward_spellid;                              // 8
562    uint32    learnOnGetSkill;                              // 9 can be 1 or 2 for spells learned on get skill
563    uint32    max_value;                                    // 10
564    uint32    min_value;                                    // 11
565                                                            // 12-13, unknown, always 0
566    uint32    reqtrainpoints;                               // 14
567};
568
569struct SoundEntriesEntry
570{
571    uint32    Id;                                           // 0, sound id
572    //uint32    Type;                                       // 1, sound type (10 generally for creature, etc)
573    //char*     InternalName;                               // 2, internal name, for use in lookup command for example
574    //char*     FileName[10];                               // 3-12, file names
575    //uint32    Unk13[10];                                  // 13-22, linked with file names?
576    //char*     Path;                                       // 23
577                                                            // 24-28, unknown
578};
579
580struct SpellEntry
581{
582    uint32    Id;                                           // 0 normally counted from 0 field (but some tools start counting from 1, check this before tool use for data view!)
583    uint32    Category;                                     // 1
584    //uint32     castUI                                     // 2 not used
585    uint32    Dispel;                                       // 3
586    uint32    Mechanic;                                     // 4
587    uint32    Attributes;                                   // 5
588    uint32    AttributesEx;                                 // 6
589    uint32    AttributesEx2;                                // 7
590    uint32    AttributesEx3;                                // 8
591    uint32    AttributesEx4;                                // 9
592    uint32    AttributesEx5;                                // 10
593    //uint32    AttributesEx6;                              // 11 not used
594    uint32    Stances;                                      // 12
595    uint32    StancesNot;                                   // 13
596    uint32    Targets;                                      // 14
597    uint32    TargetCreatureType;                           // 15
598    uint32    RequiresSpellFocus;                           // 16
599    uint32    FacingCasterFlags;                            // 17
600    uint32    CasterAuraState;                              // 18
601    uint32    TargetAuraState;                              // 19
602    uint32    CasterAuraStateNot;                           // 20
603    uint32    TargetAuraStateNot;                           // 21
604    uint32    CastingTimeIndex;                             // 22
605    uint32    RecoveryTime;                                 // 23
606    uint32    CategoryRecoveryTime;                         // 24
607    uint32    InterruptFlags;                               // 25
608    uint32    AuraInterruptFlags;                           // 26
609    uint32    ChannelInterruptFlags;                        // 27
610    uint32    procFlags;                                    // 28
611    uint32    procChance;                                   // 29
612    uint32    procCharges;                                  // 30
613    uint32    maxLevel;                                     // 31
614    uint32    baseLevel;                                    // 32
615    uint32    spellLevel;                                   // 33
616    uint32    DurationIndex;                                // 34
617    uint32    powerType;                                    // 35
618    uint32    manaCost;                                     // 36
619    uint32    manaCostPerlevel;                             // 37
620    uint32    manaPerSecond;                                // 38
621    uint32    manaPerSecondPerLevel;                        // 39
622    uint32    rangeIndex;                                   // 40
623    float     speed;                                        // 41
624    //uint32    modalNextSpell;                             // 42
625    uint32    StackAmount;                                  // 43
626    uint32    Totem[2];                                     // 44-45
627    int32     Reagent[8];                                   // 46-53
628    uint32    ReagentCount[8];                              // 54-61
629    int32     EquippedItemClass;                            // 62 (value)
630    int32     EquippedItemSubClassMask;                     // 63 (mask)
631    int32     EquippedItemInventoryTypeMask;                // 64 (mask)
632    uint32    Effect[3];                                    // 65-67
633    int32     EffectDieSides[3];                            // 68-70
634    uint32    EffectBaseDice[3];                            // 71-73
635    float     EffectDicePerLevel[3];                        // 74-76
636    float     EffectRealPointsPerLevel[3];                  // 77-79
637    int32     EffectBasePoints[3];                          // 80-82 (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints)
638    uint32    EffectMechanic[3];                            // 83-85
639    uint32    EffectImplicitTargetA[3];                     // 86-88
640    uint32    EffectImplicitTargetB[3];                     // 89-91
641    uint32    EffectRadiusIndex[3];                         // 92-94 - spellradius.dbc
642    uint32    EffectApplyAuraName[3];                       // 95-97
643    uint32    EffectAmplitude[3];                           // 98-100
644    float     EffectMultipleValue[3];                       // 101-103
645    uint32    EffectChainTarget[3];                         // 104-106
646    uint32    EffectItemType[3];                            // 107-109
647    int32     EffectMiscValue[3];                           // 110-112
648    int32     EffectMiscValueB[3];                          // 113-115
649    uint32    EffectTriggerSpell[3];                        // 116-118
650    float     EffectPointsPerComboPoint[3];                 // 119-121
651    uint32    SpellVisual;                                  // 122
652                                                            // 123 not used
653    uint32    SpellIconID;                                  // 124
654    uint32    activeIconID;                                 // 125
655    //uint32    spellPriority;                              // 126
656    char*     SpellName[16];                                // 127-142
657    //uint32    SpellNameFlag;                              // 143
658    char*     Rank[16];                                     // 144-159
659    //uint32    RankFlags;                                  // 160
660    //char*     Description[16];                            // 161-176 not used
661    //uint32    DescriptionFlags;                           // 177     not used
662    //char*     ToolTip[16];                                // 178-193 not used
663    //uint32    ToolTipFlags;                               // 194     not used
664    uint32    ManaCostPercentage;                           // 195
665    uint32    StartRecoveryCategory;                        // 196
666    uint32    StartRecoveryTime;                            // 197
667    uint32    MaxTargetLevel;                               // 198
668    uint32    SpellFamilyName;                              // 199
669    uint64    SpellFamilyFlags;                             // 200+201
670    uint32    MaxAffectedTargets;                           // 202
671    uint32    DmgClass;                                     // 203 defenseType
672    uint32    PreventionType;                               // 204
673    //uint32    StanceBarOrder;                             // 205 not used
674    float     DmgMultiplier[3];                             // 206-208
675    //uint32    MinFactionId;                               // 209 not used, and 0 in 2.4.2
676    //uint32    MinReputation;                              // 210 not used, and 0 in 2.4.2
677    //uint32    RequiredAuraVision;                         // 211 not used
678    uint32    TotemCategory[2];                             // 212-213
679    uint32    AreaId;                                       // 214
680    uint32    SchoolMask;                                   // 215 school mask
681
682    private:
683        // prevent creating custom entries (copy data from original in fact)
684        SpellEntry(SpellEntry const&);                      // DON'T must have implementation
685};
686
687typedef std::set<uint32> SpellCategorySet;
688typedef std::map<uint32,SpellCategorySet > SpellCategoryStore;
689typedef std::set<uint32> PetFamilySpellsSet;
690typedef std::map<uint32,PetFamilySpellsSet > PetFamilySpellsStore;
691
692struct SpellCastTimesEntry
693{
694    uint32    ID;                                           // 0
695    int32     CastTime;                                     // 1
696    //float     CastTimePerLevel;                           // 2 unsure / per skill?
697    //int32     MinCastTime;                                // 3 unsure
698};
699
700struct SpellFocusObjectEntry
701{
702    uint32    ID;                                           // 0
703    //char*     Name[16];                                   // 1-15 unused
704                                                            // 16 string flags, unused
705};
706
707// stored in SQL table
708struct SpellThreatEntry
709{
710    uint32      spellId;
711    int32       threat;
712};
713
714struct SpellRadiusEntry
715{
716    uint32    ID;
717    float     Radius;
718    float     Radius2;
719};
720
721struct SpellRangeEntry
722{
723    uint32    ID;
724    float     minRange;
725    float     maxRange;
726};
727
728struct SpellShapeshiftEntry
729{
730    uint32 ID;                                              // 0
731    //uint32 buttonPosition;                                // 1 unused
732    //char*  Name[16];                                      // 2-17 unused
733    //uint32 NameFlags;                                     // 18 unused
734    uint32 flags1;                                          // 19
735    int32  creatureType;                                    // 20 <=0 humanoid, other normal creature types
736    //uint32 unk1;                                          // 21 unused
737    uint32 attackSpeed;                                     // 22
738    //uint32 modelID;                                       // 23 unused, alliance modelid (where horde case?)
739    //uint32 unk2;                                          // 24 unused
740    //uint32 unk3;                                          // 25 unused
741    //uint32 unk4;                                          // 26 unused
742    //uint32 unk5;                                          // 27 unused
743    //uint32 unk6;                                          // 28 unused
744    //uint32 unk7;                                          // 29 unused
745    //uint32 unk8;                                          // 30 unused
746    //uint32 unk9;                                          // 31 unused
747    //uint32 unk10;                                         // 32 unused
748    //uint32 unk11;                                         // 33 unused
749    //uint32 unk12;                                         // 34 unused
750};
751
752struct SpellDurationEntry
753{
754    uint32    ID;
755    int32     Duration[3];
756};
757
758enum ItemEnchantmentType
759{
760    ITEM_ENCHANTMENT_TYPE_NONE         = 0,
761    ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL = 1,
762    ITEM_ENCHANTMENT_TYPE_DAMAGE       = 2,
763    ITEM_ENCHANTMENT_TYPE_EQUIP_SPELL  = 3,
764    ITEM_ENCHANTMENT_TYPE_RESISTANCE   = 4,
765    ITEM_ENCHANTMENT_TYPE_STAT         = 5,
766    ITEM_ENCHANTMENT_TYPE_TOTEM        = 6
767};
768
769struct SpellItemEnchantmentEntry
770{
771    uint32      ID;                                         // 0
772    uint32      type[3];                                    // 1-3
773    uint32      amount[3];                                  // 4-6
774    //uint32    amount2[3]                                  // 7-9 always same as similar `amount` value
775    uint32      spellid[3];                                 // 10-12
776    char*       description[16];                            // 13-29
777                                                            // 30 description flags
778    uint32      aura_id;                                    // 31
779    uint32      slot;                                       // 32
780    uint32      GemID;                                      // 33
781    uint32      EnchantmentCondition;                       // 34
782};
783
784struct SpellItemEnchantmentConditionEntry
785{
786    uint32  ID;
787    uint8   Color[5];
788    uint8   Comparator[5];
789    uint8   CompareColor[5];
790    uint32  Value[5];
791};
792
793struct StableSlotPricesEntry
794{
795    uint32 Slot;
796    uint32 Price;
797};
798
799struct TalentEntry
800{
801    uint32    TalentID;                                     // 0
802    uint32    TalentTab;                                    // 1 index in TalentTab.dbc (TalentTabEntry)
803    uint32    Row;                                          // 2
804    uint32    Col;                                          // 3
805    uint32    RankID[5];                                    // 4-8
806                                                            // 9-12 not used, always 0, maybe not used high ranks
807    uint32    DependsOn;                                    // 13 index in Talent.dbc (TalentEntry)
808                                                            // 14-15 not used
809    uint32    DependsOnRank;                                // 16
810                                                            // 17-19 not used
811    uint32    DependsOnSpell;                               // 20 req.spell
812};
813
814struct TalentTabEntry
815{
816    uint32    TalentTabID;                                  // 0
817    //char*   name[16];                                     // 1-16, unused
818    //uint32  nameFlags;                                    // 17, unused
819    //unit32  spellicon;                                    // 18
820                                                            // 19 not used
821    uint32    ClassMask;                                    // 20
822    uint32    tabpage;                                      // 21
823    //char*   internalname;                                 // 22
824};
825
826struct TaxiPathEntry
827{
828    uint32    ID;
829    uint32    from;
830    uint32    to;
831    uint32    price;
832};
833
834struct TaxiNodesEntry
835{
836    uint32    ID;                                           // 0
837    uint32    map_id;                                       // 1
838    float     x;                                            // 2
839    float     y;                                            // 3
840    float     z;                                            // 4
841    //char*     name[16];                                   // 5-21
842                                                            // 22 string flags, unused
843    uint32    horde_mount_type;                             // 23
844    uint32    alliance_mount_type;                          // 24
845};
846
847enum TotemCategoryType
848{
849    TOTEM_CATEGORY_TYPE_KNIFE   = 1,
850    TOTEM_CATEGORY_TYPE_TOTEM   = 2,
851    TOTEM_CATEGORY_TYPE_ROD     = 3,
852    TOTEM_CATEGORY_TYPE_PICK    = 21,
853    TOTEM_CATEGORY_TYPE_STONE   = 22,
854    TOTEM_CATEGORY_TYPE_HAMMER  = 23,
855    TOTEM_CATEGORY_TYPE_SPANNER = 24
856};
857
858struct TotemCategoryEntry
859{
860    uint32    ID;                                           // 0
861    //char*   name[16];                                     // 1-16
862                                                            // 17 string flags, unused
863    uint32    categoryType;                                 // 18 (one for specialization)
864    uint32    categoryMask;                                 // 19 (compatibility mask for same type: different for totems, compatible from high to low for rods)
865};
866
867struct WorldMapAreaEntry
868{
869    //uint32    ID;                                         // 0
870    uint32    map_id;                                       // 1
871    uint32    area_id;                                      // 2 index (continent 0 areas ignored)
872    //char*   internal_name                                 // 3
873    float     y1;                                           // 4
874    float     y2;                                           // 5
875    float     x1;                                           // 6
876    float     x2;                                           // 7
877    int32   virtual_map_id;                                 // 8 -1 (map_id have correct map) other: virtual map where zone show (map_id - where zone in fact internally)
878};
879
880struct WorldSafeLocsEntry
881{
882    uint32    ID;                                           // 0
883    uint32    map_id;                                       // 1
884    float     x;                                            // 2
885    float     y;                                            // 3
886    float     z;                                            // 4
887    //char*   name[16]                                      // 5-20 name, unused
888                                                            // 21 name flags, unused
889};
890
891// GCC have alternative #pragma pack() syntax and old gcc version not support pack(pop), also any gcc version not support it at some platform
892#if defined( __GNUC__ )
893#pragma pack()
894#else
895#pragma pack(pop)
896#endif
897
898// Structures not used for casting to loaded DBC data and not required then packing
899struct TalentSpellPos
900{
901    TalentSpellPos() : talent_id(0), rank(0) {}
902    TalentSpellPos(uint16 _talent_id, uint8 _rank) : talent_id(_talent_id), rank(_rank) {}
903
904    uint16 talent_id;
905    uint8  rank;
906};
907
908typedef std::map<uint32,TalentSpellPos> TalentSpellPosMap;
909
910struct TaxiPathBySourceAndDestination
911{
912    TaxiPathBySourceAndDestination() : ID(0),price(0) {}
913    TaxiPathBySourceAndDestination(uint32 _id,uint32 _price) : ID(_id),price(_price) {}
914
915    uint32    ID;
916    uint32    price;
917};
918typedef std::map<uint32,TaxiPathBySourceAndDestination> TaxiPathSetForSource;
919typedef std::map<uint32,TaxiPathSetForSource> TaxiPathSetBySource;
920
921struct TaxiPathNode
922{
923    TaxiPathNode() : mapid(0), x(0),y(0),z(0),actionFlag(0),delay(0) {}
924    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) {}
925
926    uint32    mapid;
927    float     x;
928    float     y;
929    float     z;
930    uint32    actionFlag;
931    uint32    delay;
932};
933typedef std::vector<TaxiPathNode> TaxiPathNodeList;
934typedef std::vector<TaxiPathNodeList> TaxiPathNodesByPath;
935
936#define TaxiMaskSize 16
937typedef uint32 TaxiMask[TaxiMaskSize];
938#endif
Note: See TracBrowser for help on using the browser.