aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp14
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h23
-rw-r--r--src/server/game/DataStores/DB2Metadata.h49
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp14
-rw-r--r--src/server/game/DataStores/DB2Structure.h8
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h37
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp129
-rw-r--r--src/server/game/Spells/SpellInfo.cpp1
-rw-r--r--src/server/game/Spells/SpellInfo.h2
9 files changed, 233 insertions, 44 deletions
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index 30febfb2746..735d11d7574 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -293,7 +293,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" AND locale = ?", CONNECTION_SYNCH);
// BroadcastTextDuration.db2
- PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT_DURATION, "SELECT ID, BroadcastTextID, Locale, Duration FROM broadcast_text_duration"
+ PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT_DURATION, "SELECT ID, Locale, Duration, BroadcastTextID FROM broadcast_text_duration"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_BROADCAST_TEXT_DURATION, "SELECT MAX(ID) + 1 FROM broadcast_text_duration", CONNECTION_SYNCH);
@@ -385,9 +385,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT MAX(ID) + 1 FROM chr_customization_element", CONNECTION_SYNCH);
// ChrCustomizationOption.db2
- PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_OPTION, "SELECT Name, ID, SecondaryID, Flags, ChrRacesID, Sex, ChrModelID, SortIndex, "
- "ChrCustomizationCategoryID, OptionType, BarberShopCostModifier, ChrCustomizationID, ChrCustomizationReqID, UiOrderIndex, AddedInPatch"
- " FROM chr_customization_option WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_OPTION, "SELECT Name, ID, SecondaryID, Flags, ChrModelID, SortIndex, ChrCustomizationCategoryID, "
+ "OptionType, BarberShopCostModifier, ChrCustomizationID, ChrCustomizationReqID, UiOrderIndex, AddedInPatch FROM chr_customization_option"
+ " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_OPTION, "SELECT MAX(ID) + 1 FROM chr_customization_option", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_OPTION, "SELECT ID, Name_lang FROM chr_customization_option_locale"
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
@@ -568,7 +568,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// Difficulty.db2
PrepareStatement(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name, InstanceType, OrderIndex, OldEnumValue, FallbackDifficultyID, MinPlayers, MaxPlayers, "
- "Flags, ItemContext, ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID FROM difficulty"
+ "Flags, ItemContext, ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID, Unknown1105 FROM difficulty"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT MAX(ID) + 1 FROM difficulty", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name_lang FROM difficulty_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
@@ -1108,7 +1108,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name, Description, TypeID, Subtype, Faction, IconTextureFileID, RewardsBgTextureFileID, "
"PopupBgTextureFileID, ExpansionLevel, MapID, DifficultyID, MinGear, GroupID, OrderIndex, RequiredPlayerConditionId, RandomID, ScenarioID, "
"FinalEncounterID, CountTank, CountHealer, CountDamage, MinCountTank, MinCountHealer, MinCountDamage, BonusReputationAmount, MentorItemLevel, "
- "MentorCharLevel, ContentTuningID, Flags1, Flags2 FROM lfg_dungeons WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ "MentorCharLevel, MaxPremadeGroupSize, ContentTuningID, Flags1, Flags2 FROM lfg_dungeons WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT MAX(ID) + 1 FROM lfg_dungeons", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name_lang, Description_lang FROM lfg_dungeons_locale WHERE (`VerifiedBuild` > 0) = ?"
" AND locale = ?", CONNECTION_SYNCH);
@@ -1605,7 +1605,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// SpellMisc.db2
PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, "
- "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, DifficultyID, "
+ "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, DifficultyID, "
"CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, "
"ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
index 02bb483aa5e..4fe9d5a6f51 100644
--- a/src/server/game/DataStores/DB2LoadInfo.h
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -792,9 +792,9 @@ struct BroadcastTextDurationLoadInfo
static constexpr DB2FieldMeta Fields[4] =
{
{ false, FT_INT, "ID" },
- { false, FT_INT, "BroadcastTextID" },
{ true, FT_INT, "Locale" },
{ true, FT_INT, "Duration" },
+ { false, FT_INT, "BroadcastTextID" },
};
static constexpr DB2LoadInfo Instance{ Fields, 4, &BroadcastTextDurationMeta::Instance, HOTFIX_SEL_BROADCAST_TEXT_DURATION };
@@ -1048,14 +1048,12 @@ struct ChrCustomizationElementLoadInfo
struct ChrCustomizationOptionLoadInfo
{
- static constexpr DB2FieldMeta Fields[15] =
+ static constexpr DB2FieldMeta Fields[13] =
{
{ false, FT_STRING, "Name" },
{ false, FT_INT, "ID" },
{ false, FT_SHORT, "SecondaryID" },
{ true, FT_INT, "Flags" },
- { true, FT_INT, "ChrRacesID" },
- { true, FT_INT, "Sex" },
{ false, FT_INT, "ChrModelID" },
{ true, FT_INT, "SortIndex" },
{ true, FT_INT, "ChrCustomizationCategoryID" },
@@ -1067,7 +1065,7 @@ struct ChrCustomizationOptionLoadInfo
{ true, FT_INT, "AddedInPatch" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 15, &ChrCustomizationOptionMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_OPTION };
+ static constexpr DB2LoadInfo Instance{ Fields, 13, &ChrCustomizationOptionMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_OPTION };
};
struct ChrCustomizationReqLoadInfo
@@ -1672,7 +1670,7 @@ struct DestructibleModelDataLoadInfo
struct DifficultyLoadInfo
{
- static constexpr DB2FieldMeta Fields[14] =
+ static constexpr DB2FieldMeta Fields[15] =
{
{ false, FT_INT, "ID" },
{ false, FT_STRING, "Name" },
@@ -1688,9 +1686,10 @@ struct DifficultyLoadInfo
{ false, FT_INT, "GroupSizeHealthCurveID" },
{ false, FT_INT, "GroupSizeDmgCurveID" },
{ false, FT_INT, "GroupSizeSpellPointsCurveID" },
+ { true, FT_INT, "Unknown1105" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 14, &DifficultyMeta::Instance, HOTFIX_SEL_DIFFICULTY };
+ static constexpr DB2LoadInfo Instance{ Fields, 15, &DifficultyMeta::Instance, HOTFIX_SEL_DIFFICULTY };
};
struct DungeonEncounterLoadInfo
@@ -3526,7 +3525,7 @@ struct LanguagesLoadInfo
struct LfgDungeonsLoadInfo
{
- static constexpr DB2FieldMeta Fields[31] =
+ static constexpr DB2FieldMeta Fields[32] =
{
{ false, FT_INT, "ID" },
{ false, FT_STRING, "Name" },
@@ -3556,12 +3555,13 @@ struct LfgDungeonsLoadInfo
{ false, FT_SHORT, "BonusReputationAmount" },
{ false, FT_SHORT, "MentorItemLevel" },
{ false, FT_BYTE, "MentorCharLevel" },
+ { false, FT_BYTE, "MaxPremadeGroupSize" },
{ true, FT_INT, "ContentTuningID" },
{ true, FT_INT, "Flags1" },
{ true, FT_INT, "Flags2" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 31, &LFGDungeonsMeta::Instance, HOTFIX_SEL_LFG_DUNGEONS };
+ static constexpr DB2LoadInfo Instance{ Fields, 32, &LFGDungeonsMeta::Instance, HOTFIX_SEL_LFG_DUNGEONS };
};
struct LightLoadInfo
@@ -5294,7 +5294,7 @@ struct SpellLevelsLoadInfo
struct SpellMiscLoadInfo
{
- static constexpr DB2FieldMeta Fields[32] =
+ static constexpr DB2FieldMeta Fields[33] =
{
{ false, FT_INT, "ID" },
{ true, FT_INT, "Attributes1" },
@@ -5312,6 +5312,7 @@ struct SpellMiscLoadInfo
{ true, FT_INT, "Attributes13" },
{ true, FT_INT, "Attributes14" },
{ true, FT_INT, "Attributes15" },
+ { true, FT_INT, "Attributes16" },
{ false, FT_BYTE, "DifficultyID" },
{ false, FT_SHORT, "CastingTimeIndex" },
{ false, FT_SHORT, "DurationIndex" },
@@ -5330,7 +5331,7 @@ struct SpellMiscLoadInfo
{ false, FT_INT, "SpellID" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 32, &SpellMiscMeta::Instance, HOTFIX_SEL_SPELL_MISC };
+ static constexpr DB2LoadInfo Instance{ Fields, 33, &SpellMiscMeta::Instance, HOTFIX_SEL_SPELL_MISC };
};
struct SpellNameLoadInfo
diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h
index a512851c56f..b047b37deb5 100644
--- a/src/server/game/DataStores/DB2Metadata.h
+++ b/src/server/game/DataStores/DB2Metadata.h
@@ -1487,7 +1487,7 @@ struct BroadcastTextDurationMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 2166900, -1, 3, 3, 0xE60CAC24, Fields, 0 };
+ static constexpr DB2Meta Instance{ 2166900, -1, 3, 2, 0x9CBEE39C, Fields, 2 };
};
struct CameraEffectMeta
@@ -2302,7 +2302,7 @@ struct ChrCustomizationMaterialMeta
struct ChrCustomizationOptionMeta
{
- static constexpr DB2MetaField Fields[15] =
+ static constexpr DB2MetaField Fields[13] =
{
{ FT_STRING, 1, true },
{ FT_INT, 1, false },
@@ -2312,8 +2312,6 @@ struct ChrCustomizationOptionMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
- { FT_INT, 1, true },
- { FT_INT, 1, true },
{ FT_FLOAT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
@@ -2321,7 +2319,7 @@ struct ChrCustomizationOptionMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 3384247, 1, 15, 15, 0x3F9B06FB, Fields, 6 };
+ static constexpr DB2Meta Instance{ 3384247, 1, 13, 13, 0x1EB3451E, Fields, 4 };
};
struct ChrCustomizationReqMeta
@@ -2983,7 +2981,7 @@ struct ContentPushMeta
struct ContentRestrictionRuleMeta
{
- static constexpr DB2MetaField Fields[8] =
+ static constexpr DB2MetaField Fields[9] =
{
{ FT_INT, 1, true },
{ FT_INT, 1, true },
@@ -2993,9 +2991,10 @@ struct ContentRestrictionRuleMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 4668112, -1, 8, 7, 0xB9C0B42E, Fields, 7 };
+ static constexpr DB2Meta Instance{ 4668112, -1, 9, 8, 0xC10A8C25, Fields, 8 };
};
struct ContentRestrictionRuleSetMeta
@@ -3999,7 +3998,7 @@ struct DeviceBlacklistMeta
struct DifficultyMeta
{
- static constexpr DB2MetaField Fields[13] =
+ static constexpr DB2MetaField Fields[14] =
{
{ FT_STRING, 1, true },
{ FT_BYTE, 1, false },
@@ -4014,9 +4013,10 @@ struct DifficultyMeta
{ FT_INT, 1, false },
{ FT_INT, 1, false },
{ FT_INT, 1, false },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 1352127, -1, 13, 13, 0xDDC70D8E, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1352127, -1, 14, 14, 0x017A4F91, Fields, -1 };
};
struct DisplaySeasonMeta
@@ -7449,7 +7449,7 @@ struct LFGDungeonGroupMeta
struct LFGDungeonsMeta
{
- static constexpr DB2MetaField Fields[29] =
+ static constexpr DB2MetaField Fields[30] =
{
{ FT_STRING, 1, true },
{ FT_STRING, 1, true },
@@ -7478,11 +7478,12 @@ struct LFGDungeonsMeta
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
{ FT_BYTE, 1, false },
+ { FT_BYTE, 1, false },
{ FT_INT, 1, true },
{ FT_INT, 2, true },
};
- static constexpr DB2Meta Instance{ 1361033, -1, 29, 29, 0xBA9CE7CB, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1361033, -1, 30, 30, 0x9274FE74, Fields, -1 };
};
struct LFGRoleRequirementMeta
@@ -10816,12 +10817,13 @@ struct ScreenEffectTypeMeta
struct ScreenLocationMeta
{
- static constexpr DB2MetaField Fields[1] =
+ static constexpr DB2MetaField Fields[2] =
{
{ FT_STRING_NOT_LOCALIZED, 1, true },
+ { FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 1279416, -1, 1, 1, 0x4E07A6EC, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1279416, -1, 2, 2, 0xB5DB4956, Fields, -1 };
};
struct SeamlessSiteMeta
@@ -12114,7 +12116,7 @@ struct SpellMiscMeta
{
static constexpr DB2MetaField Fields[17] =
{
- { FT_INT, 15, true },
+ { FT_INT, 16, true },
{ FT_BYTE, 1, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
@@ -12133,7 +12135,7 @@ struct SpellMiscMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 1003144, -1, 17, 16, 0x4823459D, Fields, 16 };
+ static constexpr DB2Meta Instance{ 1003144, -1, 17, 16, 0xB2E0F1E4, Fields, 16 };
};
struct SpellMissileMeta
@@ -13566,6 +13568,23 @@ struct UIChromieTimeExpansionInfoMeta
static constexpr DB2Meta Instance{ 3488582, -1, 13, 13, 0x3425F0FF, Fields, -1 };
};
+struct UICinematicIntroInfoMeta
+{
+ static constexpr DB2MetaField Fields[8] =
+ {
+ { FT_STRING, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 6155772, -1, 8, 8, 0x44820FD5, Fields, -1 };
+};
+
struct UICovenantAbilityMeta
{
static constexpr DB2MetaField Fields[4] =
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index c3ae95f2bed..d149ba0fce4 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -1013,14 +1013,14 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
}
// Check loaded DB2 files proper version
- if (!sAreaTableStore.LookupEntry(15786) || // last area added in 11.0.2 (56647)
- !sCharTitlesStore.LookupEntry(854) || // last char title added in 11.0.2 (56647)
+ if (!sAreaTableStore.LookupEntry(15913) || // last area added in 11.0.5 (57171)
+ !sCharTitlesStore.LookupEntry(871) || // last char title added in 11.0.5 (57171)
!sFlightCapabilityStore.LookupEntry(1) || // default flight capability (required)
- !sGemPropertiesStore.LookupEntry(4251) || // last gem property added in 11.0.2 (56647)
- !sItemStore.LookupEntry(232498) || // last item added in 11.0.2 (56647)
- !sItemExtendedCostStore.LookupEntry(9369) || // last item extended cost added in 11.0.2 (56647)
- !sMapStore.LookupEntry(2786) || // last map added in 11.0.2 (56647)
- !sSpellNameStore.LookupEntry(471174)) // last spell added in 11.0.2 (56647)
+ !sGemPropertiesStore.LookupEntry(4251) || // last gem property added in 11.0.5 (57171)
+ !sItemStore.LookupEntry(233014) || // last item added in 11.0.5 (57171)
+ !sItemExtendedCostStore.LookupEntry(9647) || // last item extended cost added in 11.0.5 (57171)
+ !sMapStore.LookupEntry(2792) || // last map added in 11.0.5 (57171)
+ !sSpellNameStore.LookupEntry(474722)) // last spell added in 11.0.5 (57171)
{
TC_LOG_FATAL("misc", "You have _outdated_ DB2 files. Please extract correct versions from current using client.");
return 0;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index c06178d58a0..1e3b3d6e277 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -556,9 +556,9 @@ struct BroadcastTextEntry
struct BroadcastTextDurationEntry
{
uint32 ID;
- uint32 BroadcastTextID;
int32 Locale;
int32 Duration;
+ uint32 BroadcastTextID;
};
struct Cfg_CategoriesEntry
@@ -751,8 +751,6 @@ struct ChrCustomizationOptionEntry
uint32 ID;
uint16 SecondaryID;
int32 Flags;
- int32 ChrRacesID;
- int32 Sex;
uint32 ChrModelID;
int32 SortIndex;
int32 ChrCustomizationCategoryID;
@@ -1504,6 +1502,7 @@ struct DifficultyEntry
uint32 GroupSizeHealthCurveID;
uint32 GroupSizeDmgCurveID;
uint32 GroupSizeSpellPointsCurveID;
+ int32 Unknown1105;
};
struct DungeonEncounterEntry
@@ -2690,6 +2689,7 @@ struct LFGDungeonsEntry
uint16 BonusReputationAmount;
uint16 MentorItemLevel;
uint8 MentorCharLevel;
+ uint8 MaxPremadeGroupSize;
int32 ContentTuningID;
std::array<int32, 2> Flags;
@@ -3833,7 +3833,7 @@ struct SpellLevelsEntry
struct SpellMiscEntry
{
uint32 ID;
- std::array<int32, 15> Attributes;
+ std::array<int32, 16> Attributes;
uint8 DifficultyID;
uint16 CastingTimeIndex;
uint16 DurationIndex;
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 0e29df80e57..3809d2962fe 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -981,6 +981,43 @@ enum SpellAttr14 : uint32
SPELL_ATTR14_UNK31 = 0x80000000 // TITLE Unknown attribute 31@Attr14
};
+// EnumUtils: DESCRIBE THIS
+enum SpellAttr15 : uint32
+{
+ SPELL_ATTR15_UNK0 = 0x00000001, // TITLE Unknown attribute 0@Attr15
+ SPELL_ATTR15_UNK1 = 0x00000002, // TITLE Unknown attribute 1@Attr15
+ SPELL_ATTR15_UNK2 = 0x00000004, // TITLE Unknown attribute 2@Attr15
+ SPELL_ATTR15_UNK3 = 0x00000008, // TITLE Unknown attribute 3@Attr15
+ SPELL_ATTR15_UNK4 = 0x00000010, // TITLE Unknown attribute 4@Attr15
+ SPELL_ATTR15_UNK5 = 0x00000020, // TITLE Unknown attribute 5@Attr15
+ SPELL_ATTR15_UNK6 = 0x00000040, // TITLE Unknown attribute 6@Attr15
+ SPELL_ATTR15_UNK7 = 0x00000080, // TITLE Unknown attribute 7@Attr15
+ SPELL_ATTR15_UNK8 = 0x00000100, // TITLE Unknown attribute 8@Attr15
+ SPELL_ATTR15_UNK9 = 0x00000200, // TITLE Unknown attribute 9@Attr15
+ SPELL_ATTR15_UNK10 = 0x00000400, // TITLE Unknown attribute 10@Attr15
+ SPELL_ATTR15_UNK11 = 0x00000800, // TITLE Unknown attribute 11@Attr15
+ SPELL_ATTR15_UNK12 = 0x00001000, // TITLE Unknown attribute 12@Attr15
+ SPELL_ATTR15_UNK13 = 0x00002000, // TITLE Unknown attribute 13@Attr15
+ SPELL_ATTR15_UNK14 = 0x00004000, // TITLE Unknown attribute 14@Attr15
+ SPELL_ATTR15_UNK15 = 0x00008000, // TITLE Unknown attribute 15@Attr15
+ SPELL_ATTR15_UNK16 = 0x00010000, // TITLE Unknown attribute 16@Attr15
+ SPELL_ATTR15_UNK17 = 0x00020000, // TITLE Unknown attribute 17@Attr15
+ SPELL_ATTR15_UNK18 = 0x00040000, // TITLE Unknown attribute 18@Attr15
+ SPELL_ATTR15_UNK19 = 0x00080000, // TITLE Unknown attribute 19@Attr15
+ SPELL_ATTR15_UNK20 = 0x00100000, // TITLE Unknown attribute 20@Attr15
+ SPELL_ATTR15_UNK21 = 0x00200000, // TITLE Unknown attribute 21@Attr15
+ SPELL_ATTR15_UNK22 = 0x00400000, // TITLE Unknown attribute 22@Attr15
+ SPELL_ATTR15_UNK23 = 0x00800000, // TITLE Unknown attribute 23@Attr15
+ SPELL_ATTR15_UNK24 = 0x01000000, // TITLE Unknown attribute 24@Attr15
+ SPELL_ATTR15_UNK25 = 0x02000000, // TITLE Unknown attribute 25@Attr15
+ SPELL_ATTR15_UNK26 = 0x04000000, // TITLE Unknown attribute 26@Attr15
+ SPELL_ATTR15_UNK27 = 0x08000000, // TITLE Unknown attribute 27@Attr15
+ SPELL_ATTR15_UNK28 = 0x10000000, // TITLE Unknown attribute 28@Attr15
+ SPELL_ATTR15_UNK29 = 0x20000000, // TITLE Unknown attribute 29@Attr15
+ SPELL_ATTR15_UNK30 = 0x40000000, // TITLE Unknown attribute 30@Attr15
+ SPELL_ATTR15_UNK31 = 0x80000000 // TITLE Unknown attribute 31@Attr15
+};
+
#define MIN_SPECIALIZATION_LEVEL 10
#define MAX_SPECIALIZATIONS 5
#define PET_SPEC_OVERRIDE_CLASS_INDEX MAX_CLASSES
diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
index 76dfd8d84ea..303f4505582 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -2201,6 +2201,135 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr14>::ToIndex(SpellAttr14 value)
}
}
+/*******************************************************************\
+|* data for enum 'SpellAttr15' in 'SharedDefines.h' auto-generated *|
+\*******************************************************************/
+template <>
+TC_API_EXPORT EnumText EnumUtils<SpellAttr15>::ToString(SpellAttr15 value)
+{
+ switch (value)
+ {
+ case SPELL_ATTR15_UNK0: return { "SPELL_ATTR15_UNK0", "Unknown attribute 0@Attr15", "" };
+ case SPELL_ATTR15_UNK1: return { "SPELL_ATTR15_UNK1", "Unknown attribute 1@Attr15", "" };
+ case SPELL_ATTR15_UNK2: return { "SPELL_ATTR15_UNK2", "Unknown attribute 2@Attr15", "" };
+ case SPELL_ATTR15_UNK3: return { "SPELL_ATTR15_UNK3", "Unknown attribute 3@Attr15", "" };
+ case SPELL_ATTR15_UNK4: return { "SPELL_ATTR15_UNK4", "Unknown attribute 4@Attr15", "" };
+ case SPELL_ATTR15_UNK5: return { "SPELL_ATTR15_UNK5", "Unknown attribute 5@Attr15", "" };
+ case SPELL_ATTR15_UNK6: return { "SPELL_ATTR15_UNK6", "Unknown attribute 6@Attr15", "" };
+ case SPELL_ATTR15_UNK7: return { "SPELL_ATTR15_UNK7", "Unknown attribute 7@Attr15", "" };
+ case SPELL_ATTR15_UNK8: return { "SPELL_ATTR15_UNK8", "Unknown attribute 8@Attr15", "" };
+ case SPELL_ATTR15_UNK9: return { "SPELL_ATTR15_UNK9", "Unknown attribute 9@Attr15", "" };
+ case SPELL_ATTR15_UNK10: return { "SPELL_ATTR15_UNK10", "Unknown attribute 10@Attr15", "" };
+ case SPELL_ATTR15_UNK11: return { "SPELL_ATTR15_UNK11", "Unknown attribute 11@Attr15", "" };
+ case SPELL_ATTR15_UNK12: return { "SPELL_ATTR15_UNK12", "Unknown attribute 12@Attr15", "" };
+ case SPELL_ATTR15_UNK13: return { "SPELL_ATTR15_UNK13", "Unknown attribute 13@Attr15", "" };
+ case SPELL_ATTR15_UNK14: return { "SPELL_ATTR15_UNK14", "Unknown attribute 14@Attr15", "" };
+ case SPELL_ATTR15_UNK15: return { "SPELL_ATTR15_UNK15", "Unknown attribute 15@Attr15", "" };
+ case SPELL_ATTR15_UNK16: return { "SPELL_ATTR15_UNK16", "Unknown attribute 16@Attr15", "" };
+ case SPELL_ATTR15_UNK17: return { "SPELL_ATTR15_UNK17", "Unknown attribute 17@Attr15", "" };
+ case SPELL_ATTR15_UNK18: return { "SPELL_ATTR15_UNK18", "Unknown attribute 18@Attr15", "" };
+ case SPELL_ATTR15_UNK19: return { "SPELL_ATTR15_UNK19", "Unknown attribute 19@Attr15", "" };
+ case SPELL_ATTR15_UNK20: return { "SPELL_ATTR15_UNK20", "Unknown attribute 20@Attr15", "" };
+ case SPELL_ATTR15_UNK21: return { "SPELL_ATTR15_UNK21", "Unknown attribute 21@Attr15", "" };
+ case SPELL_ATTR15_UNK22: return { "SPELL_ATTR15_UNK22", "Unknown attribute 22@Attr15", "" };
+ case SPELL_ATTR15_UNK23: return { "SPELL_ATTR15_UNK23", "Unknown attribute 23@Attr15", "" };
+ case SPELL_ATTR15_UNK24: return { "SPELL_ATTR15_UNK24", "Unknown attribute 24@Attr15", "" };
+ case SPELL_ATTR15_UNK25: return { "SPELL_ATTR15_UNK25", "Unknown attribute 25@Attr15", "" };
+ case SPELL_ATTR15_UNK26: return { "SPELL_ATTR15_UNK26", "Unknown attribute 26@Attr15", "" };
+ case SPELL_ATTR15_UNK27: return { "SPELL_ATTR15_UNK27", "Unknown attribute 27@Attr15", "" };
+ case SPELL_ATTR15_UNK28: return { "SPELL_ATTR15_UNK28", "Unknown attribute 28@Attr15", "" };
+ case SPELL_ATTR15_UNK29: return { "SPELL_ATTR15_UNK29", "Unknown attribute 29@Attr15", "" };
+ case SPELL_ATTR15_UNK30: return { "SPELL_ATTR15_UNK30", "Unknown attribute 30@Attr15", "" };
+ case SPELL_ATTR15_UNK31: return { "SPELL_ATTR15_UNK31", "Unknown attribute 31@Attr15", "" };
+ default: throw std::out_of_range("value");
+ }
+}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<SpellAttr15>::Count() { return 32; }
+
+template <>
+TC_API_EXPORT SpellAttr15 EnumUtils<SpellAttr15>::FromIndex(size_t index)
+{
+ switch (index)
+ {
+ case 0: return SPELL_ATTR15_UNK0;
+ case 1: return SPELL_ATTR15_UNK1;
+ case 2: return SPELL_ATTR15_UNK2;
+ case 3: return SPELL_ATTR15_UNK3;
+ case 4: return SPELL_ATTR15_UNK4;
+ case 5: return SPELL_ATTR15_UNK5;
+ case 6: return SPELL_ATTR15_UNK6;
+ case 7: return SPELL_ATTR15_UNK7;
+ case 8: return SPELL_ATTR15_UNK8;
+ case 9: return SPELL_ATTR15_UNK9;
+ case 10: return SPELL_ATTR15_UNK10;
+ case 11: return SPELL_ATTR15_UNK11;
+ case 12: return SPELL_ATTR15_UNK12;
+ case 13: return SPELL_ATTR15_UNK13;
+ case 14: return SPELL_ATTR15_UNK14;
+ case 15: return SPELL_ATTR15_UNK15;
+ case 16: return SPELL_ATTR15_UNK16;
+ case 17: return SPELL_ATTR15_UNK17;
+ case 18: return SPELL_ATTR15_UNK18;
+ case 19: return SPELL_ATTR15_UNK19;
+ case 20: return SPELL_ATTR15_UNK20;
+ case 21: return SPELL_ATTR15_UNK21;
+ case 22: return SPELL_ATTR15_UNK22;
+ case 23: return SPELL_ATTR15_UNK23;
+ case 24: return SPELL_ATTR15_UNK24;
+ case 25: return SPELL_ATTR15_UNK25;
+ case 26: return SPELL_ATTR15_UNK26;
+ case 27: return SPELL_ATTR15_UNK27;
+ case 28: return SPELL_ATTR15_UNK28;
+ case 29: return SPELL_ATTR15_UNK29;
+ case 30: return SPELL_ATTR15_UNK30;
+ case 31: return SPELL_ATTR15_UNK31;
+ default: throw std::out_of_range("index");
+ }
+}
+
+template <>
+TC_API_EXPORT size_t EnumUtils<SpellAttr15>::ToIndex(SpellAttr15 value)
+{
+ switch (value)
+ {
+ case SPELL_ATTR15_UNK0: return 0;
+ case SPELL_ATTR15_UNK1: return 1;
+ case SPELL_ATTR15_UNK2: return 2;
+ case SPELL_ATTR15_UNK3: return 3;
+ case SPELL_ATTR15_UNK4: return 4;
+ case SPELL_ATTR15_UNK5: return 5;
+ case SPELL_ATTR15_UNK6: return 6;
+ case SPELL_ATTR15_UNK7: return 7;
+ case SPELL_ATTR15_UNK8: return 8;
+ case SPELL_ATTR15_UNK9: return 9;
+ case SPELL_ATTR15_UNK10: return 10;
+ case SPELL_ATTR15_UNK11: return 11;
+ case SPELL_ATTR15_UNK12: return 12;
+ case SPELL_ATTR15_UNK13: return 13;
+ case SPELL_ATTR15_UNK14: return 14;
+ case SPELL_ATTR15_UNK15: return 15;
+ case SPELL_ATTR15_UNK16: return 16;
+ case SPELL_ATTR15_UNK17: return 17;
+ case SPELL_ATTR15_UNK18: return 18;
+ case SPELL_ATTR15_UNK19: return 19;
+ case SPELL_ATTR15_UNK20: return 20;
+ case SPELL_ATTR15_UNK21: return 21;
+ case SPELL_ATTR15_UNK22: return 22;
+ case SPELL_ATTR15_UNK23: return 23;
+ case SPELL_ATTR15_UNK24: return 24;
+ case SPELL_ATTR15_UNK25: return 25;
+ case SPELL_ATTR15_UNK26: return 26;
+ case SPELL_ATTR15_UNK27: return 27;
+ case SPELL_ATTR15_UNK28: return 28;
+ case SPELL_ATTR15_UNK29: return 29;
+ case SPELL_ATTR15_UNK30: return 30;
+ case SPELL_ATTR15_UNK31: return 31;
+ default: throw std::out_of_range("value");
+ }
+}
+
/***********************************************************************\
|* data for enum 'SpellCastResult' in 'SharedDefines.h' auto-generated *|
\***********************************************************************/
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index d85b5825de1..3d56fec4acb 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1224,6 +1224,7 @@ SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, S
AttributesEx12 = _misc->Attributes[12];
AttributesEx13 = _misc->Attributes[13];
AttributesEx14 = _misc->Attributes[14];
+ AttributesEx15 = _misc->Attributes[15];
CastTimeEntry = sSpellCastTimesStore.LookupEntry(_misc->CastingTimeIndex);
DurationEntry = sSpellDurationStore.LookupEntry(_misc->DurationIndex);
RangeEntry = sSpellRangeStore.LookupEntry(_misc->RangeIndex);
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index faf01836171..d327683dc28 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -339,6 +339,7 @@ class TC_GAME_API SpellInfo
uint32 AttributesEx12 = 0;
uint32 AttributesEx13 = 0;
uint32 AttributesEx14 = 0;
+ uint32 AttributesEx15 = 0;
uint32 AttributesCu = 0;
std::bitset<MAX_SPELL_EFFECTS> NegativeEffects;
uint64 Stances = 0;
@@ -459,6 +460,7 @@ class TC_GAME_API SpellInfo
bool HasAttribute(SpellAttr12 attribute) const { return !!(AttributesEx12 & attribute); }
bool HasAttribute(SpellAttr13 attribute) const { return !!(AttributesEx13 & attribute); }
bool HasAttribute(SpellAttr14 attribute) const { return !!(AttributesEx14 & attribute); }
+ bool HasAttribute(SpellAttr15 attribute) const { return !!(AttributesEx15 & attribute); }
bool HasAttribute(SpellCustomAttributes customAttribute) const { return !!(AttributesCu & customAttribute); }
bool CanBeInterrupted(WorldObject const* interruptCaster, Unit const* interruptTarget, bool ignoreImmunity = false) const;