diff options
author | Duarte Duarte <dnpd.dd@gmail.com> | 2014-01-31 04:32:03 +0000 |
---|---|---|
committer | Duarte Duarte <dnpd.dd@gmail.com> | 2014-01-31 04:32:03 +0000 |
commit | d749b721930311601b09b14e4e627d0f94ce2e11 (patch) | |
tree | c79678eb47acd4529454275834537d37529a70f3 | |
parent | 9495194bf2c13d8e2ae097cf07b86240d3d8dc96 (diff) |
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)
-rw-r--r-- | sql/updates/world/2014_01_31_00_world_spell_custom_attr.sql | 167 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 198 |
2 files changed, 199 insertions, 166 deletions
diff --git a/sql/updates/world/2014_01_31_00_world_spell_custom_attr.sql b/sql/updates/world/2014_01_31_00_world_spell_custom_attr.sql new file mode 100644 index 00000000000..54c9d84c7a9 --- /dev/null +++ b/sql/updates/world/2014_01_31_00_world_spell_custom_attr.sql @@ -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); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 8b31e749c62..eccb7863460 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -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: |