diff options
-rw-r--r-- | sql/updates/world/2013_07_24_00_world_spell_script_names.sql | 11 | ||||
-rw-r--r-- | sql/updates/world/2013_07_24_01_world_spell_ranks.sql | 682 | ||||
-rw-r--r-- | sql/updates/world/2013_07_24_02_world_trinity_strings.sql | 3 | ||||
-rw-r--r-- | sql/updates/world/2013_07_24_03_world_spell_proc_event.sql | 876 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 55 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 171 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.h | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 52 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 90 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 38 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 50 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 142 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 55 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 15 | ||||
-rw-r--r-- | src/server/shared/Database/Implementation/CharacterDatabase.cpp | 2 |
16 files changed, 2119 insertions, 135 deletions
diff --git a/sql/updates/world/2013_07_24_00_world_spell_script_names.sql b/sql/updates/world/2013_07_24_00_world_spell_script_names.sql new file mode 100644 index 00000000000..8c156fb2e57 --- /dev/null +++ b/sql/updates/world/2013_07_24_00_world_spell_script_names.sql @@ -0,0 +1,11 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (63310,50421,23780,33896,37594,37705,23551,23552,23572); +INSERT INTO `spell_script_names`(`spell_id`, `ScriptName`) VALUES +(63310,'spell_warl_glyph_of_shadowflame'), +(50421,'spell_dk_scent_of_blood'), +(23780,'spell_item_aegis_of_preservation'), +(33896,'spell_item_desperate_defense'), +(37594,'spell_pri_item_greater_heal_refund'), +(37705,'spell_pal_item_healing_discount'), +(23551,'spell_sha_item_lightning_shield'), +(23552,'spell_sha_item_lightning_shield_trigger'), +(23572,'spell_sha_item_mana_surge'); diff --git a/sql/updates/world/2013_07_24_01_world_spell_ranks.sql b/sql/updates/world/2013_07_24_01_world_spell_ranks.sql new file mode 100644 index 00000000000..db1d9803596 --- /dev/null +++ b/sql/updates/world/2013_07_24_01_world_spell_ranks.sql @@ -0,0 +1,682 @@ +DELETE FROM `spell_ranks` WHERE `first_spell_id` IN ( +5923, +5952, +9452, +9453, +9799, +11069, +11070, +11071, +11078, +11083, +11094, +11095, +11100, +11103, +11108, +11115, +11119, +11124, +11151, +11160, +11170, +11175, +11180, +11185, +11189, +11190, +11207, +11210, +11213, +11222, +11232, +11237, +11242, +11247, +11252, +11255, +12163, +12281, +12282, +12284, +12285, +12286, +12287, +12289, +12290, +12295, +12297, +12298, +12299, +12300, +12301, +12308, +12311, +12312, +12313, +12317, +12318, +12319, +12320, +12321, +12322, +12324, +12329, +12700, +12797, +12834, +12862, +13705, +13706, +13709, +13712, +13713, +13715, +13732, +13733, +13741, +13742, +13743, +13754, +13958, +13960, +13975, +13976, +13981, +13983, +14057, +14076, +14079, +14082, +14113, +14128, +14138, +14144, +14156, +14158, +14162, +14165, +14168, +14171, +14174, +14179, +14186, +14520, +14521, +14522, +14523, +14531, +14747, +14748, +14749, +14750, +14889, +14892, +14898, +14901, +14908, +14909, +14910, +14911, +14912, +14913, +15058, +15257, +15259, +15260, +15270, +15273, +15274, +15275, +15318, +15337, +15392, +16035, +16038, +16039, +16040, +16043, +16086, +16089, +16173, +16176, +16178, +16179, +16180, +16181, +16182, +16184, +16187, +16194, +16252, +16254, +16255, +16256, +16258, +16259, +16261, +16262, +16266, +16462, +16487, +16493, +16513, +16538, +16578, +16757, +16814, +16819, +16821, +16833, +16836, +16845, +16850, +16858, +16880, +16896, +16909, +16929, +16934, +16940, +16942, +16947, +16966, +16972, +16998, +17002, +17003, +17050, +17056, +17063, +17069, +17074, +17104, +17106, +17111, +17118, +17123, +17322, +17485, +17778, +17783, +17788, +17793, +17804, +17810, +17815, +17917, +17927, +17954, +17959, +18094, +18096, +18119, +18126, +18135, +18174, +18179, +18182, +18213, +18218, +18271, +18427, +18459, +18462, +18530, +18551, +18692, +18694, +18697, +18703, +18705, +18709, +18731, +18754, +18767, +18769, +18827, +19159, +19168, +19184, +19255, +19286, +19290, +19295, +19370, +19376, +19407, +19416, +19421, +19426, +19454, +19461, +19464, +19485, +19498, +19507, +19549, +19552, +19559, +19572, +19578, +19583, +19590, +19598, +19609, +19616, +19621, +20042, +20049, +20060, +20096, +20101, +20111, +20117, +20127, +20138, +20143, +20174, +20177, +20196, +20205, +20210, +20224, +20234, +20237, +20244, +20254, +20257, +20262, +20335, +20359, +20468, +20487, +20500, +20502, +20504, +23584, +23785, +24443, +24968, +25956, +26022, +27789, +27811, +27839, +27900, +28574, +28996, +28999, +29062, +29074, +29082, +29140, +29187, +29192, +29206, +29438, +29441, +29447, +29590, +29593, +29598, +29721, +29723, +29759, +29787, +29834, +29836, +29888, +30054, +30060, +30143, +30160, +30242, +30288, +30293, +30299, +30319, +30664, +30672, +30675, +30802, +30812, +30816, +30864, +30867, +30872, +30881, +30892, +30894, +30902, +30919, +31122, +31124, +31130, +31208, +31211, +31216, +31221, +31226, +31228, +31234, +31244, +31380, +31569, +31571, +31574, +31579, +31584, +31638, +31641, +31656, +31667, +31670, +31674, +31679, +31682, +31785, +31822, +31825, +31828, +31833, +31837, +31844, +31848, +31850, +31858, +31866, +31871, +31876, +31879, +32043, +32381, +32385, +32477, +33142, +33150, +33158, +33167, +33186, +33191, +33201, +33213, +33221, +33589, +33592, +33597, +33600, +33603, +33851, +33853, +33859, +33872, +33879, +33881, +33886, +34151, +34293, +34297, +34453, +34455, +34462, +34466, +34475, +34482, +34485, +34491, +34494, +34497, +34500, +34506, +34753, +34908, +34935, +34948, +34950, +35029, +35100, +35104, +35363, +35446, +35541, +35578, +35691, +37116, +44378, +44394, +44397, +44400, +44404, +44442, +44445, +44449, +44543, +44546, +44557, +44566, +44745, +45234, +46854, +46859, +46865, +46867, +46908, +46910, +46913, +46945, +46951, +47195, +47198, +47201, +47220, +47230, +47236, +47245, +47258, +47266, +47294, +47507, +47509, +47516, +47535, +47558, +47562, +47569, +47573, +47580, +47586, +48384, +48389, +48409, +48411, +48432, +48483, +48488, +48492, +48496, +48506, +48516, +48532, +48535, +48539, +48962, +48963, +48965, +48977, +48978, +48979, +48985, +48987, +48988, +48997, +49004, +49006, +49013, +49015, +49018, +49023, +49024, +49027, +49032, +49036, +49042, +49137, +49140, +49145, +49146, +49149, +49175, +49182, +49186, +49188, +49189, +49200, +49202, +49208, +49217, +49219, +49220, +49223, +49224, +49226, +49455, +49467, +49471, +49588, +50040, +50117, +50187, +50365, +50384, +50391, +50685, +50880, +51099, +51123, +51179, +51459, +51466, +51468, +51474, +51480, +51483, +51521, +51523, +51525, +51528, +51554, +51556, +51560, +51562, +51625, +51627, +51632, +51634, +51664, +51672, +51682, +51685, +51692, +51698, +51708, +51745, +51883, +52234, +52783, +52795, +53137, +53175, +53178, +53180, +53182, +53186, +53203, +53215, +53221, +53228, +53234, +53241, +53252, +53256, +53262, +53290, +53295, +53298, +53302, +53375, +53379, +53380, +53409, +53427, +53450, +53481, +53483, +53486, +53501, +53511, +53514, +53527, +53551, +53554, +53556, +53569, +53583, +53590, +53620, +53660, +53671, +53695, +53709, +53754, +54037, +54117, +54347, +54639, +54747, +55061, +55091, +55107, +55129, +55620, +55666, +56314, +56333, +56339, +56342, +56636, +56927, +57470, +57810, +57849, +57873, +57878, +58414, +58872, +59088, +61154, +61216, +61680, +61682, +61686, +61689, +62097, +62758, +62759, +62764, +62905, +63117, +63156, +63349, +63370, +63373, +63410, +63504, +63534, +63625, +63646, +63730, +64127, +64353, +65661, +66799); diff --git a/sql/updates/world/2013_07_24_02_world_trinity_strings.sql b/sql/updates/world/2013_07_24_02_world_trinity_strings.sql new file mode 100644 index 00000000000..b14e60c2c9d --- /dev/null +++ b/sql/updates/world/2013_07_24_02_world_trinity_strings.sql @@ -0,0 +1,3 @@ +DELETE FROM `trinity_string` WHERE entry = 850; +INSERT INTO `trinity_string` (entry, content_default, content_loc1, content_loc2, content_loc3, content_loc4, content_loc5, content_loc6, content_loc7, content_loc8) VALUES +(850, '├─ Rank: %s (ID: %u)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/sql/updates/world/2013_07_24_03_world_spell_proc_event.sql b/sql/updates/world/2013_07_24_03_world_spell_proc_event.sql new file mode 100644 index 00000000000..0e179e54ec8 --- /dev/null +++ b/sql/updates/world/2013_07_24_03_world_spell_proc_event.sql @@ -0,0 +1,876 @@ +ALTER TABLE `spell_proc_event` + CHANGE `entry` `entry` MEDIUMINT(8) DEFAULT 0 NOT NULL; + +DELETE FROM `spell_proc_event` WHERE `entry` IN ( +325, +905, +945, +8134, +8494, +8495, +10191, +10192, +10193, +10431, +10432, +11120, +12487, +12488, +12574, +12575, +12576, +12577, +12598, +12668, +12724, +12725, +12726, +12727, +12799, +12812, +12813, +12814, +12815, +12846, +12847, +12848, +12849, +12867, +12872, +12873, +12958, +12967, +12968, +12969, +12970, +12971, +12972, +12973, +12974, +13867, +14070, +14071, +14160, +14161, +14190, +14193, +14194, +14195, +14318, +14319, +14320, +14321, +14322, +14774, +15338, +15362, +15363, +16196, +16198, +16235, +16240, +16277, +16278, +16279, +16280, +16281, +16282, +16283, +16284, +16489, +16492, +16544, +16923, +16924, +16954, +16961, +17107, +17108, +17796, +17801, +17802, +17803, +18073, +18095, +18120, +19387, +19388, +19573, +20056, +20057, +20179, +20180, +20181, +20182, +20212, +20213, +20214, +20215, +20235, +20336, +20337, +20501, +20927, +20928, +23695, +24398, +25296, +25469, +25472, +25988, +27044, +27131, +27179, +27815, +27816, +28592, +28593, +29075, +29076, +29179, +29180, +29444, +29594, +29838, +30295, +30296, +30301, +30302, +30678, +30679, +30705, +30883, +30884, +30885, +30886, +31126, +31245, +31570, +31572, +31657, +31658, +31835, +31836, +31872, +31877, +31878, +32387, +32392, +32393, +32394, +32593, +32594, +33145, +33146, +33154, +33192, +33193, +33736, +33882, +33883, +34498, +34499, +34502, +34503, +34859, +34860, +34916, +34917, +34938, +34939, +34954, +35102, +35550, +35551, +35552, +35553, +43019, +43020, +44443, +44446, +44448, +44469, +44470, +44471, +44472, +44560, +44561, +45243, +45244, +46855, +46914, +46915, +46949, +47196, +47197, +47202, +47203, +47204, +47205, +47246, +47247, +47259, +47260, +47264, +47265, +47511, +47515, +47517, +47570, +47581, +47582, +48110, +48111, +48112, +48113, +48159, +48160, +48484, +48485, +48499, +48500, +48510, +48511, +48521, +48525, +48544, +48545, +48951, +48952, +49280, +49281, +49283, +49284, +49503, +49504, +49508, +49509, +49529, +49530, +49599, +49627, +49628, +49654, +49655, +50033, +50034, +50115, +50884, +50885, +50886, +50887, +51462, +51463, +51464, +51465, +51478, +51479, +51522, +51524, +51557, +51558, +51563, +51564, +51565, +51566, +51626, +51628, +51629, +51635, +51636, +51665, +51667, +51668, +51669, +51674, +51679, +51696, +51989, +52004, +52005, +52007, +52008, +52129, +52131, +52134, +52136, +52138, +52797, +52798, +52799, +52800, +53179, +53216, +53217, +53222, +53224, +53232, +53237, +53238, +53259, +53260, +53291, +53292, +53376, +53381, +53382, +53488, +53502, +53503, +53530, +53552, +53553, +53576, +53673, +53696, +53710, +53711, +54151, +54154, +54155, +54637, +54638, +54749, +55667, +56343, +56344, +56611, +56612, +56613, +56614, +56637, +56638, +56822, +56834, +56835, +57472, +57880, +57881, +57960, +58874, +59057, +59089, +61345, +61346, +61847, +62765, +63158, +63245, +63374, +63733, +63737, +64129, +66191, +66192, +66814, +66815, +66816, +66817); + +DELETE FROM `spell_proc_event` WHERE `entry` IN ( +324, +974, +1463, +5952, +9799, +11095, +11119, +11180, +11185, +11213, +11255, +12281, +12289, +12298, +12311, +12319, +12797, +12834, +12966, +13165, +13754, +13983, +14156, +14186, +14531, +14892, +15337, +16086, +16176, +16180, +16256, +16257, +16487, +16850, +16880, +16952, +16958, +17106, +17793, +18094, +18096, +18119, +19184, +19572, +20049, +20177, +20210, +20234, +20335, +20500, +20925, +27811, +29074, +29441, +29593, +29834, +30160, +30293, +30299, +30675, +30701, +30881, +31124, +31244, +31569, +31571, +31656, +31833, +31871, +31876, +32385, +33076, +33142, +33150, +33191, +33881, +34497, +34500, +34753, +34914, +34935, +34950, +35100, +35541, +41635, +44442, +44445, +44449, +44557, +45234, +46854, +46867, +46913, +46945, +47195, +47201, +47245, +47258, +47263, +47509, +47516, +47569, +47580, +48483, +48496, +48506, +48516, +48539, +48988, +49004, +49018, +49149, +49188, +49208, +49217, +49219, +49223, +49467, +50880, +51459, +51474, +51521, +51523, +51556, +51562, +51625, +51627, +51634, +51664, +51672, +51692, +51940, +52127, +52795, +53178, +53215, +53221, +53228, +53234, +53256, +53290, +53375, +53380, +53486, +53501, +53527, +53551, +53569, +53671, +53695, +53709, +54639, +54747, +55666, +56342, +56636, +57470, +57878, +58872, +59088, +61846, +62764, +63156, +63373, +63730, +64127, +65661, +66799, +-324, +-974, +-1463, +-5952, +-9799, +-11095, +-11119, +-11180, +-11185, +-11213, +-11255, +-12281, +-12289, +-12298, +-12311, +-12319, +-12797, +-12834, +-12966, +-13165, +-13754, +-13983, +-14156, +-14186, +-14531, +-14892, +-15337, +-16086, +-16176, +-16180, +-16256, +-16257, +-16487, +-16850, +-16880, +-16952, +-16958, +-17106, +-17793, +-18094, +-18096, +-18119, +-19184, +-19572, +-20049, +-20177, +-20210, +-20234, +-20335, +-20500, +-20925, +-27811, +-29074, +-29441, +-29593, +-29834, +-30160, +-30293, +-30299, +-30675, +-30701, +-30881, +-31124, +-31244, +-31569, +-31571, +-31656, +-31833, +-31871, +-31876, +-32385, +-33076, +-33142, +-33150, +-33191, +-33881, +-34497, +-34500, +-34753, +-34914, +-34935, +-34950, +-35100, +-35541, +-41635, +-44442, +-44445, +-44449, +-44557, +-45234, +-46854, +-46867, +-46913, +-46945, +-47195, +-47201, +-47245, +-47258, +-47263, +-47509, +-47516, +-47569, +-47580, +-48483, +-48496, +-48506, +-48516, +-48539, +-48988, +-49004, +-49018, +-49149, +-49188, +-49208, +-49217, +-49219, +-49223, +-49467, +-50880, +-51459, +-51474, +-51521, +-51523, +-51556, +-51562, +-51625, +-51627, +-51634, +-51664, +-51672, +-51692, +-51940, +-52127, +-52795, +-53178, +-53215, +-53221, +-53228, +-53234, +-53256, +-53290, +-53375, +-53380, +-53486, +-53501, +-53527, +-53551, +-53569, +-53671, +-53695, +-53709, +-54639, +-54747, +-55666, +-56342, +-56636, +-57470, +-57878, +-58872, +-59088, +-61846, +-62764, +-63156, +-63373, +-63730, +-64127, +-65661, +-66799); + +INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES +(-324,0,0,0,0,0,0,0,0,0,3), +(-974,0,0,0,0,0,139944,0,0,0,3), +(-1463,0,0,0,0,0,0,1024,0,0,0), +(-5952,0,8,0,1,0,0,0,0,0,0), +(-9799,0,0,0,0,0,0,2,0,0,0), +(-11095,0,3,16,0,0,0,0,0,0,0), +(-11119,4,3,0,0,0,0,2,0,0,0), +(-11180,16,3,0,0,0,0,0,0,0,0), +(-11185,0,3,128,0,0,327680,0,0,0,0), +(-11213,0,3,0,0,0,0,0,0,0,0), +(-11255,0,3,16384,0,0,0,0,0,0,0), +(-12281,0,4,2858419268,4194565,0,0,0,0,0,6), +(-12289,0,4,2,0,0,0,0,0,0,0), +(-12298,0,0,0,0,0,0,112,0,0,0), +(-12311,0,4,2048,1,0,0,0,0,0,0), +(-12319,0,0,0,0,0,0,2,0,0,0), +(-12797,0,4,1024,0,0,0,0,0,0,0), +(-12834,0,0,0,0,0,0,2,0,0,0), +(-12966,0,0,0,0,0,0,65536,0,0,0), +(-13165,0,0,0,0,0,64,0,0,0,0), +(-13754,0,8,16,0,0,0,0,0,0,0), +(-13983,0,0,0,0,0,0,24,0,0,0), +(-14156,0,8,4063232,8,0,0,0,0,0,0), +(-14186,0,8,1082131720,6,0,0,2,0,0,1), +(-14531,0,0,0,0,0,0,2,0,0,0), +(-14892,0,6,268443136,65540,0,0,2,0,0,0), +(-15337,0,6,8396800,2,0,0,2,0,0,0), +(-16086,4,11,0,262144,0,196608,0,0,0,0), +(-16176,0,11,448,0,16,0,2,0,0,0), +(-16180,0,11,448,0,16,0,2,0,100,0), +(-16256,0,0,0,0,0,0,2,0,0,0), +(-16257,0,0,0,0,0,0,65536,0,0,0), +(-16487,0,0,0,0,0,0,2,0,0,0), +(-16850,0,7,4,0,0,0,0,0,0,0), +(-16880,72,7,103,58720258,0,0,2,0,0,0), +(-16952,0,7,233472,1024,262144,0,2,0,0,0), +(-16958,0,0,0,0,0,0,2,0,0,0), +(-17106,0,7,524288,0,0,0,0,0,0,0), +(-17793,0,5,1,0,0,0,0,0,0,0), +(-18094,0,5,10,0,0,0,0,0,0,0), +(-18096,0,5,256,8388608,0,0,2,0,0,0), +(-18119,0,5,0,8388608,0,0,0,0,0,0), +(-19184,0,9,16,8192,0,0,0,0,0,0), +(-19572,0,9,8388608,0,0,16384,0,0,0,0), +(-20049,0,0,0,0,0,0,2,0,0,0), +(-20177,0,0,0,0,0,0,67,0,0,0), +(-20210,0,10,3221225472,65536,0,0,2,0,0,0), +(-20234,0,10,32768,0,0,0,0,0,0,0), +(-20335,0,10,8388608,0,8,16,0,0,100,0), +(-20500,0,4,268435456,0,0,0,0,0,0,0), +(-20925,0,0,0,0,0,0,64,0,0,0), +(-27811,0,0,0,0,0,0,2,0,0,0), +(-29074,20,3,0,0,0,0,2,0,0,0), +(-29441,0,0,0,0,0,0,8,0,0,1), +(-29593,0,0,0,0,0,0,112,0,0,0), +(-29834,0,0,0,0,0,0,65536,0,0,0), +(-30160,0,0,0,0,0,0,2,0,0,0), +(-30293,0,5,897,8519872,0,0,0,0,0,0), +(-30299,126,0,0,0,0,0,0,0,0,0), +(-30675,0,11,3,0,0,0,0,0,0,0), +(-30701,28,0,0,0,0,664232,0,0,100,0), +(-30881,0,0,0,0,0,0,0,0,0,30), +(-31124,0,8,16777222,0,0,0,0,0,0,0), +(-31244,0,8,4063232,9,0,0,52,0,0,0), +(-31569,0,3,65536,0,0,0,0,0,0,0), +(-31571,0,3,0,34,0,16384,0,0,0,0), +(-31656,4,3,134217728,0,0,0,0,0,0,0), +(-31833,0,10,2147483648,0,0,0,0,0,0,0), +(-31871,0,10,16,0,0,16384,0,0,0,0), +(-31876,0,10,8388608,0,0,0,262144,0,0,0), +(-32385,0,5,1,262144,0,0,0,0,0,0), +(-33076,0,0,0,0,0,664232,0,0,0,0), +(-33142,0,0,0,0,0,0,2,0,0,0), +(-33150,0,0,0,0,0,0,2,0,0,0), +(-33191,0,6,32768,1024,64,0,0,0,0,0), +(-33881,0,0,0,0,0,0,2,0,0,0), +(-34497,0,0,0,0,0,0,2,0,0,0), +(-34500,0,0,0,0,0,0,2,0,0,0), +(-34753,0,6,6144,4,4096,0,2,0,0,0), +(-34914,0,6,8192,0,0,0,0,0,0,0), +(-34935,0,0,0,0,0,0,0,0,0,8), +(-34950,0,0,0,0,0,0,2,0,0,0), +(-35100,0,9,4096,0,1,0,0,0,0,0), +(-35541,0,0,0,0,0,8388608,0,0,0,0), +(-41635,0,0,0,0,0,664232,0,0,0,0), +(-44442,0,3,8388608,64,0,0,65536,0,0,1), +(-44445,0,3,19,69632,0,0,0,0,0,0), +(-44449,0,3,551686775,102472,0,0,2,0,0,0), +(-44557,0,3,32,0,0,0,0,0,0,0), +(-45234,0,0,0,0,0,0,2,0,0,0), +(-46854,0,0,0,0,0,0,2,0,0,0), +(-46867,0,0,0,0,0,0,2,0,0,0), +(-46913,0,4,64,1028,0,0,262144,0,0,0), +(-46945,0,4,0,65536,0,0,0,0,0,0), +(-47195,0,5,2,0,0,0,0,0,0,0), +(-47201,0,5,16393,262144,0,0,0,0,0,0), +(-47245,0,5,2,0,0,0,1,0,0,0), +(-47258,0,5,0,8388608,0,0,65536,0,0,0), +(-47263,32,5,0,0,0,0,2,0,0,20), +(-47509,0,0,0,0,0,0,2,0,0,0), +(-47516,0,6,6144,65536,0,0,0,0,0,0), +(-47569,0,6,16384,0,0,16384,0,0,0,0), +(-47580,0,6,0,0,64,0,65536,0,0,0), +(-48483,0,7,34816,1088,0,0,0,0,0,0), +(-48496,0,7,96,33554434,0,0,2,0,0,0), +(-48506,0,7,5,0,0,0,0,0,0,0), +(-48516,0,7,5,0,0,0,2,0,0,30), +(-48539,0,7,16,67108864,0,262144,0,0,0,0), +(-48988,0,0,0,0,0,0,2,0,0,0), +(-49004,0,0,0,0,0,0,51,0,0,0), +(-49018,0,15,20971520,0,0,0,0,0,0,0), +(-49149,0,15,6,131074,0,0,0,0,0,0), +(-49188,0,15,0,131072,0,0,0,0,0,0), +(-49208,0,15,4194304,65536,0,0,0,0,0,0), +(-49217,0,15,0,0,2,0,0,0,0,1), +(-49219,0,0,0,0,0,4,0,0,0,0), +(-49223,0,15,17,134348800,0,0,0,0,0,0), +(-49467,0,15,16,131072,0,0,0,0,0,0), +(-50880,0,15,0,67108864,0,0,0,0,0,0), +(-51459,0,0,0,0,0,4,0,0,0,0), +(-51474,0,0,0,0,0,0,65536,0,0,0), +(-51521,0,11,0,16777216,0,0,0,0,0,0), +(-51523,0,11,0,1,0,65536,0,0,50,0), +(-51556,0,11,192,0,16,0,2,0,0,0), +(-51562,0,11,256,0,16,0,0,0,0,0), +(-51625,0,8,268476416,0,0,0,0,0,0,0), +(-51627,0,0,0,0,0,0,112,0,0,0), +(-51634,0,0,0,0,0,0,2,0,0,0), +(-51664,0,8,131072,8,0,0,0,0,0,0), +(-51672,0,0,0,0,0,0,16,0,0,1), +(-51692,0,8,516,0,0,0,0,0,0,0), +(-51940,0,0,0,0,0,0,0,0,20,0), +(-52127,0,0,0,0,0,0,0,0,0,3), +(-52795,0,6,1,0,0,0,0,0,0,0), +(-53178,0,9,0,268435456,0,65536,0,0,100,0), +(-53215,0,9,1,0,0,0,0,0,0,0), +(-53221,0,9,0,1,0,0,0,0,0,0), +(-53228,0,9,32,16777216,0,0,0,0,0,0), +(-53234,0,9,131072,1,1,0,2,0,0,0), +(-53256,0,9,2048,8388609,0,0,2,0,0,0), +(-53290,0,9,2048,1,512,0,2,0,0,0), +(-53375,0,10,0,8192,0,1024,0,0,0,6), +(-53380,0,10,8388608,163840,0,0,262146,0,0,0), +(-53486,0,10,8388608,163840,0,0,262146,0,0,0), +(-53501,0,0,0,0,0,0,2,0,0,0), +(-53527,1,10,0,0,4,1024,1,0,100,0), +(-53551,0,10,4096,0,0,0,0,0,0,0), +(-53569,0,10,1075838976,65536,0,0,0,0,0,0), +(-53671,0,10,8388608,0,0,0,0,0,0,0), +(-53695,0,10,8388608,0,8,16,0,0,0,0), +(-53709,2,10,16384,0,0,0,0,0,0,0), +(-54639,0,15,4194304,65536,0,0,0,0,0,0), +(-54747,0,0,0,0,0,0,65536,0,0,0), +(-55666,0,15,1,134217728,0,0,0,0,0,0), +(-56342,0,9,24,134217728,147456,0,0,0,0,22), +(-56636,0,4,32,0,0,0,262144,0,0,6), +(-57470,0,6,1,0,0,0,0,0,0,0), +(-57878,0,0,0,0,0,0,16,0,0,0), +(-58872,0,0,0,0,0,0,270403,0,0,0), +(-59088,0,4,0,2,0,1024,0,0,0,0), +(-61846,0,0,0,0,0,64,0,0,0,0), +(-62764,0,9,0,268435456,0,65536,0,0,100,0), +(-63156,0,5,1,192,0,0,0,0,0,0), +(-63373,0,11,2147483648,0,0,65536,0,0,0,0), +(-63730,0,6,2048,4,0,0,0,0,0,0), +(-64127,0,6,1,1,0,0,0,0,0,0), +(-65661,0,15,4194321,537001988,0,16,0,0,100,0), +(-66799,0,15,4194304,0,0,0,0,0,0,0); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 37a2b7db215..0b660c1bb9a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5733,12 +5733,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } switch (dummySpell->Id) { - // Glyph of Shadowflame - case 63310: - { - triggered_spell_id = 63311; - break; - } // Nightfall case 18094: case 18095: @@ -7712,12 +7706,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg case SPELLFAMILY_GENERIC: switch (auraSpellInfo->Id) { - case 23780: // Aegis of Preservation (Aegis of Preservation trinket) - trigger_spell_id = 23781; - break; - case 33896: // Desperate Defense (Stonescythe Whelp, Stonescythe Alpha, Stonescythe Ambusher) - trigger_spell_id = 33898; - break; case 43820: // Charm of the Witch Doctor (Amani Charm of the Witch Doctor trinket) // Pct value stored in dummy basepoints0 = victim->GetCreateHealth() * auraSpellInfo->Effects[1].CalcValue() / 100; @@ -7800,14 +7788,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg } } break; - case SPELLFAMILY_WARRIOR: - if (auraSpellInfo->Id == 50421) // Scent of Blood - { - CastSpell(this, 50422, true); - RemoveAuraFromStack(auraSpellInfo->Id); - return false; - } - break; case SPELLFAMILY_WARLOCK: { // Drain Soul @@ -7853,11 +7833,8 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg } case SPELLFAMILY_PRIEST: { - // Greater Heal Refund - if (auraSpellInfo->Id == 37594) - trigger_spell_id = 37595; // Blessed Recovery - else if (auraSpellInfo->SpellIconID == 1875) + if (auraSpellInfo->SpellIconID == 1875) { switch (auraSpellInfo->Id) { @@ -7949,13 +7926,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg { switch (auraSpellInfo->Id) { - // Healing Discount - case 37705: - { - trigger_spell_id = 37706; - target = this; - break; - } // Soul Preserver case 60510: { @@ -8062,29 +8032,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg { switch (auraSpellInfo->Id) { - // Lightning Shield (The Ten Storms set) - case 23551: - { - trigger_spell_id = 23552; - target = victim; - break; - } - // Damage from Lightning Shield (The Ten Storms set) - case 23552: - { - trigger_spell_id = 27635; - break; - } - // Mana Surge (The Earthfury set) - case 23572: - { - if (!procSpell) - return false; - basepoints0 = int32(CalculatePct(procSpell->ManaCost, 35)); - trigger_spell_id = 23571; - target = this; - break; - } case 30881: // Nature's Guardian Rank 1 case 30883: // Nature's Guardian Rank 2 case 30884: // Nature's Guardian Rank 3 diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 8e8dee97d1b..dde8624b2c5 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1187,23 +1187,88 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 return true; } -void SpellMgr::LoadSpellRanks() +void SpellMgr::UnloadSpellInfoChains() { - uint32 oldMSTime = getMSTime(); + for (SpellChainMap::iterator itr = mSpellChains.begin(); itr != mSpellChains.end(); ++itr) + mSpellInfoMap[itr->first]->ChainEntry = NULL; + + mSpellChains.clear(); +} +void SpellMgr::LoadSpellTalentRanks() +{ // cleanup core data before reload - remove reference to ChainNode from SpellInfo - for (SpellChainMap::iterator itr = mSpellChains.begin(); itr != mSpellChains.end(); ++itr) + UnloadSpellInfoChains(); + + for (uint32 i = 0; i < sTalentStore.GetNumRows(); ++i) { - mSpellInfoMap[itr->first]->ChainEntry = NULL; + TalentEntry const* talentInfo = sTalentStore.LookupEntry(i); + if (!talentInfo) + continue; + + SpellInfo const* lastSpell = NULL; + for (uint8 rank = MAX_TALENT_RANK - 1; rank > 0; --rank) + { + if (talentInfo->RankID[rank]) + { + lastSpell = GetSpellInfo(talentInfo->RankID[rank]); + break; + } + } + + if (!lastSpell) + continue; + + SpellInfo const* firstSpell = GetSpellInfo(talentInfo->RankID[0]); + if (!firstSpell) + { + TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "SpellMgr::LoadSpellTalentRanks: First Rank Spell %u for TalentEntry %u does not exist.", talentInfo->RankID[0], i); + continue; + } + + SpellInfo const* prevSpell = NULL; + for (uint8 rank = 0; rank < MAX_TALENT_RANK; ++rank) + { + uint32 spellId = talentInfo->RankID[rank]; + if (!spellId) + break; + + SpellInfo const* currentSpell = GetSpellInfo(spellId); + if (!currentSpell) + { + TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "SpellMgr::LoadSpellTalentRanks: Spell %u (Rank: %u) for TalentEntry %u does not exist.", spellId, rank + 1, i); + break; + } + + SpellChainNode node; + node.first = firstSpell; + node.last = lastSpell; + node.rank = rank + 1; + + node.prev = prevSpell; + node.next = node.rank < MAX_TALENT_RANK ? GetSpellInfo(talentInfo->RankID[rank + 1]) : NULL; + + mSpellChains[spellId] = node; + mSpellInfoMap[spellId]->ChainEntry = &mSpellChains[spellId]; + + prevSpell = currentSpell; + } } - mSpellChains.clear(); +} + +void SpellMgr::LoadSpellRanks() +{ + // cleanup data and load spell ranks for talents from dbc + LoadSpellTalentRanks(); + + uint32 oldMSTime = getMSTime(); + // 0 1 2 QueryResult result = WorldDatabase.Query("SELECT first_spell_id, spell_id, rank from spell_ranks ORDER BY first_spell_id, rank"); if (!result) { TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 spell rank records. DB table `spell_ranks` is empty."); - return; } @@ -1280,6 +1345,10 @@ void SpellMgr::LoadSpellRanks() { ++count; int32 addedSpell = itr->first; + + if (mSpellInfoMap[addedSpell]->ChainEntry) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u (rank: %u, first: %u) listed in `spell_ranks` has already ChainEntry from dbc.", addedSpell, itr->second, lastSpell); + mSpellChains[addedSpell].first = GetSpellInfo(lastSpell); mSpellChains[addedSpell].last = GetSpellInfo(rankChain.back().first); mSpellChains[addedSpell].rank = itr->second; @@ -1296,10 +1365,10 @@ void SpellMgr::LoadSpellRanks() mSpellChains[addedSpell].next = GetSpellInfo(itr->first); } while (true); - } while (!finished); + } + while (!finished); TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u spell rank records in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); - } void SpellMgr::LoadSpellRequired() @@ -1741,52 +1810,76 @@ void SpellMgr::LoadSpellProcEvents() } uint32 count = 0; - uint32 customProc = 0; + do { Field* fields = result->Fetch(); - uint32 entry = fields[0].GetUInt32(); + int32 spellId = fields[0].GetInt32(); - SpellInfo const* spell = GetSpellInfo(entry); - if (!spell) + bool allRanks = false; + if (spellId < 0) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` does not exist", entry); + allRanks = true; + spellId = -spellId; + } + + SpellInfo const* spellInfo = GetSpellInfo(spellId); + if (!spellInfo) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` does not exist", spellId); continue; } - SpellProcEventEntry spe; + if (allRanks) + { + if (!spellInfo->IsRanked()) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` with all ranks, but spell has no ranks.", spellId); + + if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId)) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` is not first rank of spell.", spellId); + continue; + } + } - spe.schoolMask = fields[1].GetInt8(); - spe.spellFamilyName = fields[2].GetUInt16(); - spe.spellFamilyMask[0] = fields[3].GetUInt32(); - spe.spellFamilyMask[1] = fields[4].GetUInt32(); - spe.spellFamilyMask[2] = fields[5].GetUInt32(); - spe.procFlags = fields[6].GetUInt32(); - spe.procEx = fields[7].GetUInt32(); - spe.ppmRate = fields[8].GetFloat(); - spe.customChance = fields[9].GetFloat(); - spe.cooldown = fields[10].GetUInt32(); + SpellProcEventEntry spellProcEvent; - mSpellProcEventMap[entry] = spe; + spellProcEvent.schoolMask = fields[1].GetInt8(); + spellProcEvent.spellFamilyName = fields[2].GetUInt16(); + spellProcEvent.spellFamilyMask[0] = fields[3].GetUInt32(); + spellProcEvent.spellFamilyMask[1] = fields[4].GetUInt32(); + spellProcEvent.spellFamilyMask[2] = fields[5].GetUInt32(); + spellProcEvent.procFlags = fields[6].GetUInt32(); + spellProcEvent.procEx = fields[7].GetUInt32(); + spellProcEvent.ppmRate = fields[8].GetFloat(); + spellProcEvent.customChance = fields[9].GetFloat(); + spellProcEvent.cooldown = fields[10].GetUInt32(); - if (spell->ProcFlags == 0) + while (spellInfo) { - if (spe.procFlags == 0) + if (mSpellProcEventMap.find(spellInfo->Id) != mSpellProcEventMap.end()) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` probally not triggered spell", entry); - continue; + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` already has its first rank in table.", spellInfo->Id); + break; } - customProc++; + + if (!spellInfo->ProcFlags && !spellProcEvent.procFlags) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` probally not triggered spell", spellInfo->Id); + + mSpellProcEventMap[spellInfo->Id] = spellProcEvent; + + if (allRanks) + spellInfo = spellInfo->GetNextRankSpell(); + else + break; } - ++count; - } while (result->NextRow()); - if (customProc) - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u extra and %u custom spell proc event conditions in %u ms", count, customProc, GetMSTimeDiffToNow(oldMSTime)); - else - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u extra spell proc event conditions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + ++count; + } + while (result->NextRow()); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u extra spell proc event conditions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } void SpellMgr::LoadSpellProcs() @@ -1826,6 +1919,9 @@ void SpellMgr::LoadSpellProcs() if (allRanks) { + if (!spellInfo->IsRanked()) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` with all ranks, but spell has no ranks.", spellId); + if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId)) { TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` is not first rank of spell.", spellId); @@ -1855,9 +1951,10 @@ void SpellMgr::LoadSpellProcs() { if (mSpellProcMap.find(spellInfo->Id) != mSpellProcMap.end()) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` has duplicate entry in the table", spellInfo->Id); + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` already has its first rank in table.", spellInfo->Id); break; } + SpellProcEntry procEntry = SpellProcEntry(baseProcEntry); // take defaults from dbcs diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 54eb45d1660..677a6e2f758 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -699,6 +699,8 @@ class SpellMgr public: // Loading data at server startup + void UnloadSpellInfoChains(); + void LoadSpellTalentRanks(); void LoadSpellRanks(); void LoadSpellRequired(); void LoadSpellLearnSkills(); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index fd7bcaab1d3..6c7e8386bdf 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1587,6 +1587,7 @@ public: // Guild data print variables defined so that they exist, but are not necessarily used uint32 guildId = 0; + uint8 guildRankId = 0; std::string guildName; std::string guildRank; std::string note; @@ -1753,8 +1754,9 @@ public: guildId = fields[0].GetUInt32(); guildName = fields[1].GetString(); guildRank = fields[2].GetString(); - note = fields[3].GetString(); - officeNote = fields[4].GetString(); + guildRankId = fields[3].GetUInt8(); + note = fields[4].GetString(); + officeNote = fields[5].GetString(); } } } @@ -1763,7 +1765,7 @@ public: // Output I. LANG_PINFO_PLAYER handler->PSendSysMessage(LANG_PINFO_PLAYER, target ? "" : handler->GetTrinityString(LANG_OFFLINE), nameLink.c_str(), lowguid); - // Output II. LANG_PINFO_GM_ACTIVE + // Output II. LANG_PINFO_GM_ACTIVE if character is gamemaster if (target && target->IsGameMaster()) handler->PSendSysMessage(LANG_PINFO_GM_ACTIVE); @@ -1830,7 +1832,7 @@ public: if (!guildName.empty()) { handler->PSendSysMessage(LANG_PINFO_CHR_GUILD, guildName.c_str(), guildId); - handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank.c_str()); + handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank.c_str(), uint32(guildRankId)); if (!note.empty()) handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_NOTE, note.c_str()); if (!officeNote.empty()) diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 04880e211de..1ab3961a662 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -32,6 +32,7 @@ enum DeathKnightSpells SPELL_DK_BLACK_ICE_R1 = 49140, SPELL_DK_BLOOD_BOIL_TRIGGERED = 65658, SPELL_DK_BLOOD_GORGED_HEAL = 50454, + SPELL_DK_BLOOD_PRESENCE = 48266, SPELL_DK_CORPSE_EXPLOSION_TRIGGERED = 43999, SPELL_DK_CORPSE_EXPLOSION_VISUAL = 51270, SPELL_DK_DEATH_COIL_DAMAGE = 47632, @@ -39,21 +40,21 @@ enum DeathKnightSpells SPELL_DK_DEATH_STRIKE_HEAL = 45470, SPELL_DK_GHOUL_EXPLODE = 47496, SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE = 58625, - SPELL_DK_RUNIC_POWER_ENERGIZE = 49088, - SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890, - SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1 = 49189, - SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284, - SPELL_DK_BLOOD_PRESENCE = 48266, SPELL_DK_IMPROVED_BLOOD_PRESENCE_TRIGGERED = 63611, - SPELL_DK_UNHOLY_PRESENCE = 48265, SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED = 63622, SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962, SPELL_DK_ITEM_T8_MELEE_4P_BONUS = 64736, + SPELL_DK_RUNIC_POWER_ENERGIZE = 49088, + SPELL_DK_SCENT_OF_BLOOD = 50422, + SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890, + SPELL_DK_UNHOLY_PRESENCE = 48265, + SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1 = 49189, + SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284 }; enum DeathKnightSpellIcons { - DK_ICON_ID_IMPROVED_DEATH_STRIKE = 2751, + DK_ICON_ID_IMPROVED_DEATH_STRIKE = 2751 }; // 50462 - Anti-Magic Shell (on raid member) @@ -807,6 +808,42 @@ class spell_dk_rune_tap_party : public SpellScriptLoader } }; +// 50421 - Scent of Blood +class spell_dk_scent_of_blood : public SpellScriptLoader +{ + public: + spell_dk_scent_of_blood() : SpellScriptLoader("spell_dk_scent_of_blood") { } + + class spell_dk_scent_of_blood_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dk_scent_of_blood_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_SCENT_OF_BLOOD)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_DK_SCENT_OF_BLOOD, true, NULL, aurEff); + GetTarget()->RemoveAuraFromStack(GetSpellInfo()->Id); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_dk_scent_of_blood_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_dk_scent_of_blood_AuraScript(); + } +}; + // 55090 - Scourge Strike (55265, 55270, 55271) class spell_dk_scourge_strike : public SpellScriptLoader { @@ -1027,6 +1064,7 @@ void AddSC_deathknight_spell_scripts() new spell_dk_improved_blood_presence(); new spell_dk_improved_unholy_presence(); new spell_dk_rune_tap_party(); + new spell_dk_scent_of_blood(); new spell_dk_scourge_strike(); new spell_dk_spell_deflection(); new spell_dk_vampiric_blood(); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 9b8e7d489ce..64fc835bff9 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -73,6 +73,46 @@ class spell_item_trigger_spell : public SpellScriptLoader } }; +enum AegisOfPreservation +{ + SPELL_AEGIS_HEAL = 23781 +}; + +// 23780 - Aegis of Preservation +class spell_item_aegis_of_preservation : public SpellScriptLoader +{ + public: + spell_item_aegis_of_preservation() : SpellScriptLoader("spell_item_aegis_of_preservation") { } + + class spell_item_aegis_of_preservation_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_aegis_of_preservation_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_AEGIS_HEAL)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_item_aegis_of_preservation_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_item_aegis_of_preservation_AuraScript(); + } +}; + // 26400 - Arcane Shroud class spell_item_arcane_shroud : public SpellScriptLoader { @@ -217,6 +257,46 @@ class spell_item_defibrillate : public SpellScriptLoader uint32 _failSpell; }; +enum DesperateDefense +{ + SPELL_DESPERATE_RAGE = 33898 +}; + +// 33896 - Desperate Defense +class spell_item_desperate_defense : public SpellScriptLoader +{ + public: + spell_item_desperate_defense() : SpellScriptLoader("spell_item_desperate_defense") { } + + class spell_item_desperate_defense_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_desperate_defense_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_DESPERATE_RAGE)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_item_desperate_defense_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_item_desperate_defense_AuraScript(); + } +}; + // http://www.wowhead.com/item=6522 Deviate Fish // 8063 Deviate Fish enum DeviateFishSpells @@ -523,15 +603,21 @@ class spell_item_necrotic_touch : public SpellScriptLoader return true; } + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetProcTarget() && eventInfo.GetProcTarget()->IsAlive(); + } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { PreventDefaultAction(); int32 bp = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, NULL, aurEff); + GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff); } void Register() OVERRIDE { + DoCheckProc += AuraCheckProcFn(spell_item_necrotic_touch_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_item_necrotic_touch_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; @@ -2477,11 +2563,13 @@ void AddSC_item_spell_scripts() // 23075 Mithril Mechanical Dragonling new spell_item_trigger_spell("spell_item_mithril_mechanical_dragonling", SPELL_MITHRIL_MECHANICAL_DRAGONLING); + new spell_item_aegis_of_preservation(); new spell_item_arcane_shroud(); new spell_item_blessing_of_ancient_kings(); new spell_item_defibrillate("spell_item_goblin_jumper_cables", 67, SPELL_GOBLIN_JUMPER_CABLES_FAIL); new spell_item_defibrillate("spell_item_goblin_jumper_cables_xl", 50, SPELL_GOBLIN_JUMPER_CABLES_XL_FAIL); new spell_item_defibrillate("spell_item_gnomish_army_knife", 33); + new spell_item_desperate_defense(); new spell_item_deviate_fish(); new spell_item_flask_of_the_north(); new spell_item_gnomish_death_ray(); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index d424915c368..9f50fc3abdf 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -55,6 +55,8 @@ enum PaladinSpells SPELL_PALADIN_HAND_OF_SACRIFICE = 6940, SPELL_PALADIN_DIVINE_SACRIFICE = 64205, + SPELL_PALADIN_ITEM_HEALING_TRANCE = 37706, + SPELL_PALADIN_GLYPH_OF_SALVATION = 63225, SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT = 31790, @@ -587,6 +589,41 @@ class spell_pal_hand_of_salvation : public SpellScriptLoader } }; +// 37705 - Healing Discount +class spell_pal_item_healing_discount : public SpellScriptLoader +{ + public: + spell_pal_item_healing_discount() : SpellScriptLoader("spell_pal_item_healing_discount") { } + + class spell_pal_item_healing_discount_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pal_item_healing_discount_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_ITEM_HEALING_TRANCE)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_ITEM_HEALING_TRANCE, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_pal_item_healing_discount_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_pal_item_healing_discount_AuraScript(); + } +}; + // -20473 - Holy Shock class spell_pal_holy_shock : public SpellScriptLoader { @@ -911,6 +948,7 @@ void AddSC_paladin_spell_scripts() new spell_pal_guarded_by_the_light(); new spell_pal_hand_of_sacrifice(); new spell_pal_hand_of_salvation(); + new spell_pal_item_healing_discount(); new spell_pal_holy_shock(); new spell_pal_judgement_of_command(); new spell_pal_lay_on_hands(); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 0b4c85ca802..4d11f0a2d72 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -34,6 +34,7 @@ enum PriestSpells SPELL_PRIEST_GLYPH_OF_LIGHTWELL = 55673, SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL = 56161, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, + SPELL_PRIEST_ITEM_EFFICIENCY = 37595, SPELL_PRIEST_MANA_LEECH_PROC = 34650, SPELL_PRIEST_PENANCE_R1 = 47540, SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758, @@ -197,6 +198,41 @@ class spell_pri_guardian_spirit : public SpellScriptLoader } }; +// 37594 - Greater Heal Refund +class spell_pri_item_greater_heal_refund : public SpellScriptLoader +{ + public: + spell_pri_item_greater_heal_refund() : SpellScriptLoader("spell_pri_item_greater_heal_refund") { } + + class spell_pri_item_greater_heal_refund_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pri_item_greater_heal_refund_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_ITEM_EFFICIENCY)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_pri_item_greater_heal_refund_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_pri_item_greater_heal_refund_AuraScript(); + } +}; + // -7001 - Lightwell Renew class spell_pri_lightwell_renew : public SpellScriptLoader { @@ -493,12 +529,11 @@ class spell_pri_power_word_shield : public SpellScriptLoader if (dmgInfo.GetAttacker() == target) return; - if (Unit* caster = GetCaster()) - if (AuraEffect* talentAurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0)) - { - int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); - target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); - } + if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0)) + { + int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); + target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); + } } void Register() OVERRIDE @@ -635,7 +670,7 @@ class spell_pri_vampiric_touch : public SpellScriptLoader { PrepareAuraScript(spell_pri_vampiric_touch_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL)) return false; @@ -671,6 +706,7 @@ void AddSC_priest_spell_scripts() new spell_pri_divine_aegis(); new spell_pri_glyph_of_prayer_of_healing(); new spell_pri_guardian_spirit(); + new spell_pri_item_greater_heal_refund(); new spell_pri_lightwell_renew(); new spell_pri_mana_burn(); new spell_pri_mana_leech(); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index f686f2f30bd..3a02a8b8c09 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -41,6 +41,9 @@ enum ShamanSpells SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM = 55456, SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441, SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM = 62132, + SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD = 23552, + SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE = 27635, + SPELL_SHAMAN_ITEM_MANA_SURGE = 23571, SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480, SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 64694, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE = 52032, @@ -55,8 +58,8 @@ enum ShamanSpells enum ShamanSpellIcons { - SHAMAN_ICON_ID_RESTORATIVE_TOTEMS = 338, - SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW = 3087 + SHAMAN_ICON_ID_RESTORATIVE_TOTEMS = 338, + SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW = 3087 }; // 52759 - Ancestral Awakening (Proc) @@ -128,8 +131,8 @@ class spell_sha_astral_shift : public SpellScriptLoader void Register() OVERRIDE { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_astral_shift_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); - OnEffectAbsorb += AuraEffectAbsorbFn(spell_sha_astral_shift_AuraScript::Absorb, EFFECT_0); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_astral_shift_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + OnEffectAbsorb += AuraEffectAbsorbFn(spell_sha_astral_shift_AuraScript::Absorb, EFFECT_0); } }; @@ -302,17 +305,22 @@ class spell_sha_earth_shield : public SpellScriptLoader } } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + bool CheckProc(ProcEventInfo& /*eventInfo*/) { - PreventDefaultAction(); - //! HACK due to currenct proc system implementation if (Player* player = GetTarget()->ToPlayer()) if (player->HasSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) - return; + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); GetTarget()->CastCustomSpell(SPELL_SHAMAN_EARTH_SHIELD_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff, GetCasterGUID()); + /// @hack: due to currenct proc system implementation if (Player* player = GetTarget()->ToPlayer()) player->AddSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, time(NULL) + 3); } @@ -320,6 +328,7 @@ class spell_sha_earth_shield : public SpellScriptLoader void Register() OVERRIDE { DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_earth_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_DUMMY); + DoCheckProc += AuraCheckProcFn(spell_sha_earth_shield_AuraScript::CheckProc); OnEffectProc += AuraEffectProcFn(spell_sha_earth_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; @@ -631,6 +640,120 @@ class spell_sha_heroism : public SpellScriptLoader } }; +// 23551 - Lightning Shield +class spell_sha_item_lightning_shield : public SpellScriptLoader +{ + public: + spell_sha_item_lightning_shield() : SpellScriptLoader("spell_sha_item_lightning_shield") { } + + class spell_sha_item_lightning_shield_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_item_lightning_shield_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_sha_item_lightning_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_sha_item_lightning_shield_AuraScript(); + } +}; + +// 23552 - Lightning Shield +class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader +{ + public: + spell_sha_item_lightning_shield_trigger() : SpellScriptLoader("spell_sha_item_lightning_shield_trigger") { } + + class spell_sha_item_lightning_shield_trigger_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_item_lightning_shield_trigger_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_MANA_SURGE)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_sha_item_lightning_shield_trigger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_sha_item_lightning_shield_trigger_AuraScript(); + } +}; + +// 23572 - Mana Surge +class spell_sha_item_mana_surge : public SpellScriptLoader +{ + public: + spell_sha_item_mana_surge() : SpellScriptLoader("spell_sha_item_mana_surge") { } + + class spell_sha_item_mana_surge_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_item_mana_surge_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetDamageInfo()->GetSpellInfo(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 mana = eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetSchoolMask()); + int32 damage = CalculatePct(mana, 35); + + GetTarget()->CastCustomSpell(SPELL_SHAMAN_ITEM_MANA_SURGE, SPELLVALUE_BASE_POINT0, damage, GetTarget(), true, NULL, aurEff); + } + + void Register() OVERRIDE + { + DoCheckProc += AuraCheckProcFn(spell_sha_item_mana_surge_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_sha_item_mana_surge_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_sha_item_mana_surge_AuraScript(); + } +}; + // 60103 - Lava Lash class spell_sha_lava_lash : public SpellScriptLoader { @@ -850,6 +973,9 @@ void AddSC_shaman_spell_scripts() new spell_sha_flame_shock(); new spell_sha_healing_stream_totem(); new spell_sha_heroism(); + new spell_sha_item_lightning_shield(); + new spell_sha_item_lightning_shield_trigger(); + new spell_sha_item_mana_surge(); new spell_sha_lava_lash(); new spell_sha_mana_spring_totem(); new spell_sha_mana_tide_totem(); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index f5c5018590c..e6bfe3472cb 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -38,15 +38,16 @@ enum WarlockSpells SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444, SPELL_WARLOCK_FEL_SYNERGY_HEAL = 54181, + SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME = 63311, SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE = 63106, + SPELL_WARLOCK_HAUNT = 48181, + SPELL_WARLOCK_HAUNT_HEAL = 48210, SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692, SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1 = 18703, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R2 = 18704, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R1 = 60955, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_BUFF_R2 = 60956, - SPELL_WARLOCK_HAUNT = 48181, - SPELL_WARLOCK_HAUNT_HEAL = 48210, SPELL_WARLOCK_LIFE_TAP_ENERGIZE = 31818, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553, SPELL_WARLOCK_SOULSHATTER = 32835, @@ -205,7 +206,7 @@ class spell_warl_curse_of_doom : public SpellScriptLoader { PrepareAuraScript(spell_warl_curse_of_doom_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT)) return false; @@ -242,7 +243,7 @@ class spell_warl_curse_of_doom : public SpellScriptLoader } }; -// 48018 - Demonic Circle Summon +// 48018 - Demonic Circle: Summon class spell_warl_demonic_circle_summon : public SpellScriptLoader { public: @@ -294,7 +295,7 @@ class spell_warl_demonic_circle_summon : public SpellScriptLoader } }; -// 48020 - Demonic Circle Teleport +// 48020 - Demonic Circle: Teleport class spell_warl_demonic_circle_teleport : public SpellScriptLoader { public: @@ -464,6 +465,41 @@ class spell_warl_fel_synergy : public SpellScriptLoader } }; +// 63310 - Glyph of Shadowflame +class spell_warl_glyph_of_shadowflame : public SpellScriptLoader +{ + public: + spell_warl_glyph_of_shadowflame() : SpellScriptLoader("spell_warl_glyph_of_shadowflame") { } + + class spell_warl_glyph_of_shadowflame_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_glyph_of_shadowflame_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_GLYPH_OF_SHADOWFLAME, true, NULL, aurEff); + } + + void Register() OVERRIDE + { + OnEffectProc += AuraEffectProcFn(spell_warl_glyph_of_shadowflame_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_warl_glyph_of_shadowflame_AuraScript(); + } +}; + // -48181 - Haunt class spell_warl_haunt : public SpellScriptLoader { @@ -491,7 +527,7 @@ class spell_warl_haunt : public SpellScriptLoader { PrepareAuraScript(spell_warl_haunt_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_HAUNT_HEAL)) return false; @@ -753,7 +789,7 @@ class spell_warl_siphon_life : public SpellScriptLoader bool CheckProc(ProcEventInfo& eventInfo) { - return eventInfo.GetDamageInfo()->GetDamage(); + return eventInfo.GetDamageInfo()->GetDamage() && GetTarget()->IsAlive(); } void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) @@ -791,7 +827,7 @@ class spell_warl_soulshatter : public SpellScriptLoader { PrepareSpellScript(spell_warl_soulshatter_SpellScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SOULSHATTER)) return false; @@ -830,7 +866,7 @@ class spell_warl_unstable_affliction : public SpellScriptLoader { PrepareAuraScript(spell_warl_unstable_affliction_AuraScript); - bool Validate(SpellInfo const* /*spell*/) OVERRIDE + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL)) return false; @@ -870,6 +906,7 @@ void AddSC_warlock_spell_scripts() new spell_warl_demonic_empowerment(); new spell_warl_everlasting_affliction(); new spell_warl_fel_synergy(); + new spell_warl_glyph_of_shadowflame(); new spell_warl_haunt(); new spell_warl_health_funnel(); new spell_warl_life_tap(); diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index fcb62a4a651..78dcaaa669c 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -50,8 +50,11 @@ enum WarriorSpells SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850, SPELL_WARRIOR_VIGILANCE_PROC = 50725, - SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT = 59665, + SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT = 59665 +}; +enum MiscSpells +{ SPELL_PALADIN_BLESSING_OF_SANCTUARY = 20911, SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY = 25899, SPELL_PRIEST_RENEWED_HOPE = 63944, @@ -60,7 +63,7 @@ enum WarriorSpells enum WarriorSpellIcons { - WARRIOR_ICON_ID_SUDDEN_DEATH = 1989, + WARRIOR_ICON_ID_SUDDEN_DEATH = 1989 }; // 23881 - Bloodthirst @@ -424,11 +427,9 @@ class spell_warr_last_stand : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - if (Unit* caster = GetCaster()) - { - int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(30)); - caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL); - } + Unit* caster = GetCaster(); + int32 healthModSpellBasePoints0 = int32(caster->CountPctFromMaxHealth(GetEffectValue())); + caster->CastCustomSpell(caster, SPELL_WARRIOR_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL); } void Register() OVERRIDE diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 427ccfd5ebf..7e237614f62 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -105,7 +105,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_BOTH); - PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gm.pnote, gm.offnote " + PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gr.rid, gm.pnote, gm.offnote " "FROM guild g JOIN guild_member gm ON g.guildid = gm.guildid " "JOIN guild_rank gr ON g.guildid = gr.guildid AND gm.rank = gr.rid WHERE gm.guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_CHARACTER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC); |