aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_07_24_00_world_spell_script_names.sql11
-rw-r--r--sql/updates/world/2013_07_24_01_world_spell_ranks.sql682
-rw-r--r--sql/updates/world/2013_07_24_02_world_trinity_strings.sql3
-rw-r--r--sql/updates/world/2013_07_24_03_world_spell_proc_event.sql876
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp55
-rw-r--r--src/server/game/Spells/SpellMgr.cpp171
-rw-r--r--src/server/game/Spells/SpellMgr.h2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp10
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp52
-rw-r--r--src/server/scripts/Spells/spell_item.cpp90
-rw-r--r--src/server/scripts/Spells/spell_paladin.cpp38
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp50
-rw-r--r--src/server/scripts/Spells/spell_shaman.cpp142
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp55
-rw-r--r--src/server/scripts/Spells/spell_warrior.cpp15
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.cpp2
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);