mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-17 10:55:43 +00:00
refactor(Core/SpellInfo): Positive/Negative spells from SpellFamilyName into DB (#3149)
* Implement SPELL_ATTR0_CU_POSITIVE_EFF0 * Implement SPELL_ATTR0_CU_POSITIVE_EFF1 * Implement SPELL_ATTR0_CU_POSITIVE_EFF2 * Move SpellFamilyName spells into DB to define if they are POSITIVE or NEGATIVE spells * Rename column from entry to spell_id to make more sense
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1592753632765913300');
|
||||
|
||||
ALTER TABLE `spell_custom_attr`
|
||||
CHANGE `entry` `spell_id` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'spell id',
|
||||
CHANGE `attributes` `attributes` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'SpellCustomAttributes';
|
||||
|
||||
SET @SPELL_ATTR0_CU_NEGATIVE_EFF0 = 4096,
|
||||
@SPELL_ATTR0_CU_NEGATIVE_EFF1 = 8192,
|
||||
@SPELL_ATTR0_CU_NEGATIVE_EFF2 = 16384,
|
||||
@SPELL_ATTR0_CU_POSITIVE_EFF0 = 33554432,
|
||||
@SPELL_ATTR0_CU_POSITIVE_EFF1 = 67108864,
|
||||
@SPELL_ATTR0_CU_POSITIVE_EFF2 = 134217728;
|
||||
|
||||
DELETE FROM `spell_custom_attr` WHERE `spell_id` IN (50344, 71204, 72410, 64412, 24732, 40268, 42396, 8455, 47585, 64904, 604, 8450, 64844, 8451, 1008, 10173, 10174, 10169, 33944, 41478, 11103, 43015, 10170, 12357, 26044, 12358, 26143, 28310, 29407, 29570, 32417, 35507, 37276, 37330, 37621, 38243, 40842, 48396, 43512, 57941, 58381, 59367, 59974, 60472, 17165, 23953, 22919, 5171, 6774, 34074, 1725, 35202, 32645, 32684, 3411, 57993, 57992, 30708, 30877, 61716, 61734, 62344, 61819, 61834, 72998, 61988, 61987, 58867, 54836, 34709, 34700, 11196, 29214, 25771);
|
||||
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES
|
||||
-- Positive
|
||||
(50344, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(40268, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(64412, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(24732, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(1725, @SPELL_ATTR0_CU_POSITIVE_EFF0),
|
||||
(3411, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(30877, @SPELL_ATTR0_CU_POSITIVE_EFF0),
|
||||
(61716, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(61734, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(62344, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(61819, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(61834, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(32645, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(32684, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(57992, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(57993, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(34074, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(64844, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(64904, @SPELL_ATTR0_CU_POSITIVE_EFF1 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(47585, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF2),
|
||||
(5171, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(6774, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(11103, @SPELL_ATTR0_CU_POSITIVE_EFF0),
|
||||
(12357, @SPELL_ATTR0_CU_POSITIVE_EFF0),
|
||||
(12358, @SPELL_ATTR0_CU_POSITIVE_EFF0),
|
||||
(1008, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(8455, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(10169, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(10170, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(604, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(8450, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(8451, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(10173, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(10174, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(33944, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(41478, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
(43015, @SPELL_ATTR0_CU_POSITIVE_EFF0 | @SPELL_ATTR0_CU_POSITIVE_EFF1),
|
||||
|
||||
-- Negative
|
||||
(25771, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(30708, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(35202, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(72998, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(61988, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(61987, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(71204, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(58867, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(54836, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(72410, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(34709, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1 | @SPELL_ATTR0_CU_NEGATIVE_EFF2),
|
||||
(34700, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1 | @SPELL_ATTR0_CU_NEGATIVE_EFF2),
|
||||
(11196, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(29214, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(17165, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(22919, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(23953, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(26044, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1 | @SPELL_ATTR0_CU_NEGATIVE_EFF2),
|
||||
(26143, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(28310, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(29407, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(29570, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(32417, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(35507, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(37276, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(37330, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(37621, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(38243, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(40842, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(42396, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(43512, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(57941, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(58381, @SPELL_ATTR0_CU_NEGATIVE_EFF0),
|
||||
(59367, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(59974, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1),
|
||||
(60472, @SPELL_ATTR0_CU_NEGATIVE_EFF0 | @SPELL_ATTR0_CU_NEGATIVE_EFF1);
|
||||
@@ -1210,7 +1210,7 @@ bool SpellInfo::CanBeUsedInCombat() const
|
||||
|
||||
bool SpellInfo::IsPositive() const
|
||||
{
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE);
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE) || (AttributesCu & SPELL_ATTR0_CU_POSITIVE);
|
||||
}
|
||||
|
||||
bool SpellInfo::IsPositiveEffect(uint8 effIndex) const
|
||||
@@ -1219,11 +1219,11 @@ bool SpellInfo::IsPositiveEffect(uint8 effIndex) const
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF0);
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF0) || (AttributesCu & SPELL_ATTR0_CU_POSITIVE_EFF0);
|
||||
case 1:
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF1);
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF1) || (AttributesCu & SPELL_ATTR0_CU_POSITIVE_EFF1);
|
||||
case 2:
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF2);
|
||||
return !(AttributesCu & SPELL_ATTR0_CU_NEGATIVE_EFF2) || (AttributesCu & SPELL_ATTR0_CU_POSITIVE_EFF2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2548,91 +2548,6 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
|
||||
if (Attributes & SPELL_ATTR0_NEGATIVE_1)
|
||||
return false;
|
||||
|
||||
switch (SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_GENERIC:
|
||||
switch (Id)
|
||||
{
|
||||
case 11196: // Recently bandaged
|
||||
case 29214: // Wrath of the Plaguebringer
|
||||
case 34700: // Allergic Reaction
|
||||
case 34709: // Shadow Sight (arena stealth detection)
|
||||
case 54836: // Wrath of the Plaguebringer
|
||||
case 58867: // Shaman's Spirit Wolf leap
|
||||
case 61987: // Avenging Wrath Marker
|
||||
case 61988: // Divine Shield exclude aura
|
||||
case 72998: // Shadow Prison (Blood Prince Council, ICC Encounter)
|
||||
return false;
|
||||
case 30877: // Tag Murloc
|
||||
case 61716: // Rabbit Costume
|
||||
case 61734: // Noblegarden Bunny
|
||||
case 62344: // Fists of Stone
|
||||
case 61819: // Manabonked! (item)
|
||||
case 61834: // Manabonked! (minigob)
|
||||
case 19451: // Enrage (Magmadar)
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_MAGE:
|
||||
// Amplify Magic, Dampen Magic
|
||||
if (SpellFamilyFlags[0] == 0x00002000)
|
||||
return true;
|
||||
if (SpellIconID == 242)
|
||||
return true;
|
||||
// Ignite
|
||||
if (SpellIconID == 45)
|
||||
return true;
|
||||
break;
|
||||
case SPELLFAMILY_PRIEST:
|
||||
switch (Id)
|
||||
{
|
||||
case 64844: // Divine Hymn
|
||||
case 64904: // Hymn of Hope
|
||||
case 47585: // Dispersion
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// Mind Flay
|
||||
if (SpellFamilyFlags[0] & 0x800000)
|
||||
return false;
|
||||
break;
|
||||
case SPELLFAMILY_HUNTER:
|
||||
// Aspect of the Viper
|
||||
if (Id == 34074)
|
||||
return true;
|
||||
break;
|
||||
case SPELLFAMILY_ROGUE:
|
||||
// Envenom
|
||||
if (SpellIconID == 2237)
|
||||
return true;
|
||||
// Slice and Dice
|
||||
else if (SpellFamilyFlags[0] & 0x40000)
|
||||
return true;
|
||||
// Distract
|
||||
else if (Id == 1725)
|
||||
return true;
|
||||
break;
|
||||
case SPELLFAMILY_SHAMAN:
|
||||
if (Id == 30708)
|
||||
return false;
|
||||
break;
|
||||
case SPELLFAMILY_PALADIN:
|
||||
// Forberance
|
||||
if (Id == 25771)
|
||||
return false;
|
||||
break;
|
||||
case SPELLFAMILY_WARRIOR:
|
||||
// Intervene, Warrior, considered negative due to triggered spell with threat
|
||||
if (Id == 3411)
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (Mechanic)
|
||||
{
|
||||
case MECHANIC_IMMUNE_SHIELD:
|
||||
|
||||
@@ -186,8 +186,12 @@ enum SpellCustomAttributes
|
||||
SPELL_ATTR0_CU_SINGLE_AURA_STACK = 0x00400000, // pussywizard
|
||||
SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC = 0x00800000,
|
||||
SPELL_ATTR0_CU_ENCOUNTER_REWARD = 0x01000000, // pussywizard
|
||||
SPELL_ATTR0_CU_POSITIVE_EFF0 = 0x02000000,
|
||||
SPELL_ATTR0_CU_POSITIVE_EFF1 = 0x04000000,
|
||||
SPELL_ATTR0_CU_POSITIVE_EFF2 = 0x08000000,
|
||||
|
||||
SPELL_ATTR0_CU_NEGATIVE = SPELL_ATTR0_CU_NEGATIVE_EFF0 | SPELL_ATTR0_CU_NEGATIVE_EFF1 | SPELL_ATTR0_CU_NEGATIVE_EFF2,
|
||||
SPELL_ATTR0_CU_POSITIVE = SPELL_ATTR0_CU_POSITIVE_EFF0 | SPELL_ATTR0_CU_POSITIVE_EFF1 | SPELL_ATTR0_CU_POSITIVE_EFF2,
|
||||
};
|
||||
|
||||
uint32 GetTargetFlagMask(SpellTargetObjectTypes objType);
|
||||
|
||||
@@ -2713,7 +2713,7 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
uint32 customAttrTime = getMSTime();
|
||||
uint32 count;
|
||||
|
||||
QueryResult result = WorldDatabase.Query("SELECT entry, attributes FROM spell_custom_attr");
|
||||
QueryResult result = WorldDatabase.Query("SELECT spell_id, attributes FROM spell_custom_attr");
|
||||
|
||||
if (!result)
|
||||
sLog->outString(">> Loaded 0 spell custom attributes from DB. DB table `spell_custom_attr` is empty.");
|
||||
@@ -2729,7 +2729,7 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
SpellInfo * spellInfo = _GetSpellInfo(spellId);
|
||||
if (!spellInfo)
|
||||
{
|
||||
sLog->outString("Table `spell_custom_attr` has wrong spell (entry: %u), ignored.", spellId);
|
||||
sLog->outString("Table `spell_custom_attr` has wrong spell (spell_id: %u), ignored.", spellId);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2742,7 +2742,22 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
|
||||
if ((attributes & (SPELL_ATTR0_CU_NEGATIVE_EFF0 << i)) != 0)
|
||||
{
|
||||
sLog->outString("Table `spell_custom_attr` has attribute SPELL_ATTR0_CU_NEGATIVE_EFF%u for spell %u with no EFFECT_%u", uint32(i), spellId, uint32(i));
|
||||
sLog->outErrorDb("Table `spell_custom_attr` has attribute SPELL_ATTR0_CU_NEGATIVE_EFF%u for spell %u with no EFFECT_%u", uint32(i), spellId, uint32(i));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((attributes & SPELL_ATTR0_CU_POSITIVE) != 0)
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
if (spellInfo->Effects[i].IsEffect())
|
||||
continue;
|
||||
|
||||
if ((attributes & (SPELL_ATTR0_CU_POSITIVE_EFF0 << i)) != 0)
|
||||
{
|
||||
sLog->outErrorDb("Table `spell_custom_attr` has attribute SPELL_ATTR0_CU_POSITIVE_EFF%u for spell %u with no EFFECT_%u", uint32(i), spellId, uint32(i));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -2753,7 +2768,6 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
sLog->outString(">> Loaded %u spell custom attributes from DB in %u ms", count, GetMSTimeDiffToNow(customAttrTime));
|
||||
}
|
||||
|
||||
|
||||
// xinef: create talent spells set
|
||||
for (uint32 i = 0; i < sTalentStore.GetNumRows(); ++i)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user