Core&DB/Spells: Move custom spell attributes from code to DB, spell_custom_attr table

`spell_custom_attr`
- `entry` uint PK
- `attributes` uint (enum SpellCustomAttributes of SpellInfo.h)
This commit is contained in:
Duarte Duarte
2014-01-31 04:32:03 +00:00
parent 9495194bf2
commit d749b72193
2 changed files with 199 additions and 166 deletions

View File

@@ -0,0 +1,167 @@
DROP TABLE IF EXISTS `spell_custom_attr`;
CREATE TABLE IF NOT EXISTS `spell_custom_attr` (
`entry` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'spell id',
`attributes` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellCustomAttributes',
PRIMARY KEY (`entry`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 COMMENT='SpellInfo custom attributes';
SET @SPELL_ATTR0_CU_ENCHANT_PROC = 0x00000001,
@SPELL_ATTR0_CU_CONE_BACK = 0x00000002,
@SPELL_ATTR0_CU_CONE_LINE = 0x00000004,
@SPELL_ATTR0_CU_SHARE_DAMAGE = 0x00000008,
@SPELL_ATTR0_CU_NO_INITIAL_THREAT = 0x00000010,
@SPELL_ATTR0_CU_AURA_CC = 0x00000040,
@SPELL_ATTR0_CU_DIRECT_DAMAGE = 0x00000100,
@SPELL_ATTR0_CU_CHARGE = 0x00000200,
@SPELL_ATTR0_CU_PICKPOCKET = 0x00000400,
@SPELL_ATTR0_CU_NEGATIVE_EFF0 = 0x00001000,
@SPELL_ATTR0_CU_NEGATIVE_EFF1 = 0x00002000,
@SPELL_ATTR0_CU_NEGATIVE_EFF2 = 0x00004000,
@SPELL_ATTR0_CU_IGNORE_ARMOR = 0x00008000,
@SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER = 0x00010000,
@SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET = 0x00020000;
INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES
(1776, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(1777, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(8629, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(11285, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(11286, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(12540, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(13579, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(24698, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(28456, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(29425, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(34940, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(36862, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(38764, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(38863, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(52743, @SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER),
(53, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(2589, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(2590, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(2591, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(7159, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8627, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8721, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11279, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11280, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11281, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(15582, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(15657, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(22416, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(25300, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26863, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(37685, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48656, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48657, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(703, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8631, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8632, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8633, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11289, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11290, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26839, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26884, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48675, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48676, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(5221, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(6800, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8992, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9829, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9830, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27001, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27002, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48571, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48572, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8676, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8724, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(8725, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11267, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11268, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(11269, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27441, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48689, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48690, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48691, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(6785, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(6787, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9866, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(9867, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(27005, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48578, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(48579, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(21987, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(23959, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(24825, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(58563, @SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET),
(26029, @SPELL_ATTR0_CU_CONE_LINE),
(37433, @SPELL_ATTR0_CU_CONE_LINE),
(43140, @SPELL_ATTR0_CU_CONE_LINE),
(43215, @SPELL_ATTR0_CU_CONE_LINE),
(70461, @SPELL_ATTR0_CU_CONE_LINE),
(72133, @SPELL_ATTR0_CU_CONE_LINE),
(73788, @SPELL_ATTR0_CU_CONE_LINE),
(73789, @SPELL_ATTR0_CU_CONE_LINE),
(73790, @SPELL_ATTR0_CU_CONE_LINE),
(24340, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(26558, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(28884, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(36837, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(38903, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(41276, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(57467, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(26789, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(31436, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(35181, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(40810, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(43267, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(43268, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(42384, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(45150, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(64688, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72373, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(71904, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(70492, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72505, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72624, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(72625, @SPELL_ATTR0_CU_SHARE_DAMAGE),
(18500, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(33086, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(49749, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(52890, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(53454, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(59446, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62383, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64777, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(65239, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(65919, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(67858, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(67859, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(67860, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(69293, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(74439, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(63278, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62544, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64588, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(66479, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68505, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62709, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62626, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64590, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64342, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64686, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(65147, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68504, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(62874, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68498, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64591, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(63003, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(63010, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(68321, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72255, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72444, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72445, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72446, @SPELL_ATTR0_CU_IGNORE_ARMOR),
(64422, @SPELL_ATTR0_CU_SHARE_DAMAGE | @SPELL_ATTR0_CU_IGNORE_ARMOR),
(72293, @SPELL_ATTR0_CU_NEGATIVE_EFF0);

View File

@@ -2714,8 +2714,39 @@ void SpellMgr::UnloadSpellInfoImplicitTargetConditionLists()
void SpellMgr::LoadSpellInfoCustomAttributes()
{
uint32 oldMSTime = getMSTime();
uint32 oldMSTime2 = oldMSTime;
SpellInfo* spellInfo = NULL;
QueryResult result = WorldDatabase.Query("SELECT entry, attributes FROM spell_custom_attr");
if (!result)
TC_LOG_INFO("server.loading", ">> Loaded 0 spell custom attributes from DB. DB table `spell_custom_attr` is empty.");
else
{
uint32 count = 0;
do
{
Field* fields = result->Fetch();
uint32 spellId = fields[0].GetUInt32();
uint32 attributes = fields[1].GetUInt32();
spellInfo = mSpellInfoMap[spellId];
if (!spellInfo)
{
TC_LOG_ERROR("sql.sql", "Table `spell_custom_attr` has wrong spell (entry: %u), ignored.", spellId);
continue;
}
// TODO: validate attributes
spellInfo->AttributesCu |= attributes;
++count;
} while (result->NextRow());
TC_LOG_INFO("server.loading", ">> Loaded %u spell custom attributes from DB in %u ms", count, GetMSTimeDiffToNow(oldMSTime2));
}
for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
{
spellInfo = mSpellInfoMap[i];
@@ -2826,171 +2857,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
if (spellInfo->SpellVisual[0] == 3879)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_BACK;
switch (spellInfo->Id)
{
case 1776: // Gouge
case 1777:
case 8629:
case 11285:
case 11286:
case 12540:
case 13579:
case 24698:
case 28456:
case 29425:
case 34940:
case 36862:
case 38764:
case 38863:
case 52743: // Head Smack
spellInfo->AttributesCu |= SPELL_ATTR0_CU_REQ_TARGET_FACING_CASTER;
break;
case 53: // Backstab
case 2589:
case 2590:
case 2591:
case 7159:
case 8627:
case 8721:
case 11279:
case 11280:
case 11281:
case 15582:
case 15657:
case 22416:
case 25300:
case 26863:
case 37685:
case 48656:
case 48657:
case 703: // Garrote
case 8631:
case 8632:
case 8633:
case 11289:
case 11290:
case 26839:
case 26884:
case 48675:
case 48676:
case 5221: // Shred
case 6800:
case 8992:
case 9829:
case 9830:
case 27001:
case 27002:
case 48571:
case 48572:
case 8676: // Ambush
case 8724:
case 8725:
case 11267:
case 11268:
case 11269:
case 27441:
case 48689:
case 48690:
case 48691:
case 6785: // Ravage
case 6787:
case 9866:
case 9867:
case 27005:
case 48578:
case 48579:
case 21987: // Lash of Pain
case 23959: // Test Stab R50
case 24825: // Test Backstab
case 58563: // Assassinate Restless Lookout
spellInfo->AttributesCu |= SPELL_ATTR0_CU_REQ_CASTER_BEHIND_TARGET;
break;
case 26029: // Dark Glare
case 37433: // Spout
case 43140: // Flame Breath
case 43215: // Flame Breath
case 70461: // Coldflame Trap
case 72133: // Pain and Suffering
case 73788: // Pain and Suffering
case 73789: // Pain and Suffering
case 73790: // Pain and Suffering
spellInfo->AttributesCu |= SPELL_ATTR0_CU_CONE_LINE;
break;
case 24340: // Meteor
case 26558: // Meteor
case 28884: // Meteor
case 36837: // Meteor
case 38903: // Meteor
case 41276: // Meteor
case 57467: // Meteor
case 26789: // Shard of the Fallen Star
case 31436: // Malevolent Cleave
case 35181: // Dive Bomb
case 40810: // Saber Lash
case 43267: // Saber Lash
case 43268: // Saber Lash
case 42384: // Brutal Swipe
case 45150: // Meteor Slash
case 64688: // Sonic Screech
case 72373: // Shared Suffering
case 71904: // Chaos Bane
case 70492: // Ooze Eruption
case 72505: // Ooze Eruption
case 72624: // Ooze Eruption
case 72625: // Ooze Eruption
// ONLY SPELLS WITH SPELLFAMILY_GENERIC and EFFECT_SCHOOL_DAMAGE
spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE;
break;
case 18500: // Wing Buffet
case 33086: // Wild Bite
case 49749: // Piercing Blow
case 52890: // Penetrating Strike
case 53454: // Impale
case 59446: // Impale
case 62383: // Shatter
case 64777: // Machine Gun
case 65239: // Machine Gun
case 65919: // Impale
case 67858: // Impale
case 67859: // Impale
case 67860: // Impale
case 69293: // Wing Buffet
case 74439: // Machine Gun
case 63278: // Mark of the Faceless (General Vezax)
case 62544: // Thrust (Argent Tournament)
case 64588: // Thrust (Argent Tournament)
case 66479: // Thrust (Argent Tournament)
case 68505: // Thrust (Argent Tournament)
case 62709: // Counterattack! (Argent Tournament)
case 62626: // Break-Shield (Argent Tournament, Player)
case 64590: // Break-Shield (Argent Tournament, Player)
case 64342: // Break-Shield (Argent Tournament, NPC)
case 64686: // Break-Shield (Argent Tournament, NPC)
case 65147: // Break-Shield (Argent Tournament, NPC)
case 68504: // Break-Shield (Argent Tournament, NPC)
case 62874: // Charge (Argent Tournament, Player)
case 68498: // Charge (Argent Tournament, Player)
case 64591: // Charge (Argent Tournament, Player)
case 63003: // Charge (Argent Tournament, NPC)
case 63010: // Charge (Argent Tournament, NPC)
case 68321: // Charge (Argent Tournament, NPC)
case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72444: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72445: // Mark of the Fallen Champion (Deathbringer Saurfang)
case 72446: // Mark of the Fallen Champion (Deathbringer Saurfang)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR;
break;
case 64422: // Sonic Screech (Auriaya)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_SHARE_DAMAGE;
spellInfo->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR;
break;
case 72293: // Mark of the Fallen Champion (Deathbringer Saurfang)
spellInfo->AttributesCu |= SPELL_ATTR0_CU_NEGATIVE_EFF0;
break;
default:
break;
}
switch (spellInfo->SpellFamilyName)
{
case SPELLFAMILY_WARRIOR: