Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/sql/updates/woe/2012_02_15_update.sql b/sql/updates/woe/2012_02_15_update.sql
- new file mode 100644
- index 0000000..c3518b7
- --- /dev/null
- +++ b/sql/updates/woe/2012_02_15_update.sql
- @@ -0,0 +1,942 @@
- +-- Night of the deads
- +DELETE FROM spell_script_names WHERE spell_id = 62137;
- +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
- +(62137, 'spell_dk_avoidance_passive');
- +-- Death Knight
- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (51996, 54566, 61697, 51906);
- +INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
- +(54566, 'spell_dk_pet_scaling_01'),
- +(51996, 'spell_dk_pet_scaling_02'),
- +(61697, 'spell_dk_pet_scaling_03'),
- +(51906, 'spell_dk_rune_weapon_scaling_02');
- +-- Warlock
- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (34947, 34956, 34957, 34958, 35695, 61013, 18735, 18730, 18729, 18728, 18727, 30147);
- +INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
- +(34947, 'spell_warl_pet_scaling_01'),
- +(34956, 'spell_warl_pet_scaling_02'),
- +(34957, 'spell_warl_pet_scaling_03'),
- +(34958, 'spell_warl_pet_scaling_04'),
- +(61013, 'spell_warl_pet_scaling_05'),
- +(35695, 'spell_warl_pet_passive'),
- +(18735, 'spell_warl_pet_passive_voidwalker'),
- +(30147, 'spell_warl_pet_passive_damage_done'),
- +(18730, 'spell_warl_pet_passive_damage_done'),
- +(18729, 'spell_warl_pet_passive_damage_done'),
- +(18728, 'spell_warl_pet_passive_damage_done'),
- +(18727, 'spell_warl_pet_passive_damage_done');
- +-- Shaman
- +DELETE FROM `spell_script_names` WHERE `spell_id` = 61783;
- +INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
- +(61783, 'spell_sha_pet_scaling_04');
- +-- Hunter
- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (34902, 34903, 34904, 61017, 19591, 34027, 68361, 8875);
- +INSERT INTO `spell_script_names` (`spell_id` ,`ScriptName`) VALUES
- +(34902, 'spell_hun_pet_scaling_01'),
- +(34903, 'spell_hun_pet_scaling_02'),
- +(34904, 'spell_hun_pet_scaling_03'),
- +(61017, 'spell_hun_pet_scaling_04'),
- +(19591, 'spell_hun_pet_passive_crit'),
- +(68361, 'spell_hun_animal_handler'),
- +(8875, 'spell_hun_pet_passive_damage_done'),
- +(34027, 'spell_hun_kill_command');
- +DELETE FROM spell_pet_auras WHERE spell IN(34453, 34454);
- +INSERT INTO `spell_pet_auras` (`spell`, `effectId`, `pet`, `aura`) VALUES
- +(34453, 1, 0, 68361),
- +(34454, 1, 0, 68361);
- +-- Bloodworms
- +UPDATE creature_template SET AIName = "" WHERE entry = 28017;
- +DELETE FROM creature_template_addon WHERE entry = 28017;
- +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
- +(28017, 0, 0, 0, 0, 0, '50453');
- +-- Succubus
- +DELETE FROM spell_bonus_data WHERE entry = 17767;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(17767, 0.429, -1, -1, -1, 'Succubus - Lash of Pain');
- +-- Voidwalker
- +DELETE FROM spell_bonus_data WHERE entry = 17767;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(17767, 0, 0, -1, -1, 'Voidwalker - Consume Shadows');
- +-- Felhunter
- +DELETE FROM spell_bonus_data WHERE entry = 54049;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(54049, 0.429, -1, -1, -1, 'Felhunter - Shadow Bite');
- +-- Imp
- +DELETE FROM spell_bonus_data WHERE entry = 3110;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(3110, 0.7142, -1, -1, -1, 'Imp - Firebolt');
- +DELETE FROM spell_bonus_data WHERE entry = 2947;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(2947, 0, -1, -1, -1, 'Imp - Fire Shield');
- +-- Felguard
- +DELETE FROM spell_bonus_data WHERE entry = 30213;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(30213, 0, -1, 0.1429, -1, 'Felguard - Cleave');
- +DELETE FROM spell_bonus_data WHERE entry = 30153;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(30153, 0, -1, 0.028, -1, 'Felguard - Intercept');
- +-- Inferno
- +DELETE FROM creature_template_addon WHERE entry = 89;
- +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
- +(89, 0, 0, 0, 0, 0, '32233 19483');
- +DELETE FROM spell_bonus_data WHERE entry = 20153;
- +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES
- +(20153, 1.35, -1, -1, -1, 'Infernal - Immolation');
- +-- pets levelstats from wowwiki
- +-- pets rewrite
- +ALTER TABLE `pet_levelstats` ADD `mindmg` MEDIUMINT( 11 ) NOT NULL DEFAULT '0' COMMENT 'Min base damage' AFTER `armor` ,
- +ADD `maxdmg` MEDIUMINT( 11 ) NOT NULL DEFAULT '0' COMMENT 'Max base damage' AFTER `mindmg`,
- +ADD `attackpower` MEDIUMINT( 11 ) NOT NULL DEFAULT '0' COMMENT 'Attack power' AFTER `maxdmg`;
- +-- default pet
- +SET @ENTRY := 1;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 1, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 2, 55, 1, 21, 3, 4, 11, 23, 21, 23, 20, 20),
- +(@ENTRY, 3, 71, 1, 46, 3, 6, 12, 24, 21, 24, 20, 21),
- +(@ENTRY, 4, 86, 1, 82, 5, 7, 13, 25, 22, 25, 21, 21),
- +(@ENTRY, 5, 102, 1, 126, 6, 9, 13, 26, 23, 25, 21, 21),
- +(@ENTRY, 6, 120, 1, 180, 7, 11, 14, 27, 24, 26, 21, 22),
- +(@ENTRY, 7, 137, 1, 245, 9, 14, 15, 28, 24, 27, 21, 22),
- +(@ENTRY, 8, 156, 1, 322, 10, 15, 16, 29, 25, 28, 22, 22),
- +(@ENTRY, 9, 176, 1, 412, 11, 16, 17, 30, 26, 29, 22, 23),
- +(@ENTRY, 10, 198, 1, 518, 11, 17, 17, 31, 26, 30, 22, 23),
- +(@ENTRY, 11, 222, 1, 545, 12, 18, 18, 32, 27, 34, 22, 24),
- +(@ENTRY, 12, 247, 1, 580, 13, 19, 19, 33, 28, 38, 23, 25),
- +(@ENTRY, 13, 273, 1, 615, 13, 20, 20, 34, 30, 42, 23, 25),
- +(@ENTRY, 14, 300, 1, 650, 14, 21, 21, 35, 31, 46, 23, 27),
- +(@ENTRY, 15, 328, 1, 685, 15, 23, 22, 37, 32, 51, 24, 28),
- +(@ENTRY, 16, 356, 1, 721, 16, 24, 24, 38, 33, 55, 25, 29),
- +(@ENTRY, 17, 386, 1, 756, 17, 25, 26, 40, 34, 59, 25, 30),
- +(@ENTRY, 18, 417, 1, 791, 18, 27, 27, 42, 36, 63, 25, 30),
- +(@ENTRY, 19, 449, 1, 826, 19, 28, 28, 44, 37, 67, 26, 32),
- +(@ENTRY, 20, 484, 1, 861, 20, 30, 30, 45, 39, 72, 27, 33),
- +(@ENTRY, 21, 521, 1, 897, 21, 31, 32, 47, 39, 76, 27, 34),
- +(@ENTRY, 22, 562, 1, 932, 22, 32, 34, 49, 40, 80, 27, 35),
- +(@ENTRY, 23, 605, 1, 967, 23, 33, 35, 50, 42, 84, 28, 36),
- +(@ENTRY, 24, 651, 1, 1002, 24, 35, 36, 52, 43, 88, 28, 37),
- +(@ENTRY, 25, 699, 1, 1037, 25, 36, 37, 53, 45, 94, 29, 39),
- +(@ENTRY, 26, 750, 1, 1072, 26, 37, 39, 55, 46, 98, 30, 39),
- +(@ENTRY, 27, 800, 1, 1108, 27, 39, 40, 56, 47, 102, 30, 40),
- +(@ENTRY, 28, 853, 1, 1142, 28, 40, 42, 58, 49, 106, 30, 41),
- +(@ENTRY, 29, 905, 1, 1177, 29, 41, 44, 60, 50, 110, 31, 42),
- +(@ENTRY, 30, 955, 1, 1212, 30, 43, 44, 61, 52, 115, 32, 44),
- +(@ENTRY, 31, 1006, 1, 1247, 30, 44, 46, 63, 53, 120, 32, 44),
- +(@ENTRY, 32, 1057, 1, 1283, 31, 45, 47, 64, 54, 124, 33, 46),
- +(@ENTRY, 33, 1110, 1, 1317, 32, 46, 49, 66, 56, 128, 33, 46),
- +(@ENTRY, 34, 1163, 1, 1353, 33, 47, 50, 67, 57, 132, 33, 48),
- +(@ENTRY, 35, 1220, 1, 1387, 34, 48, 52, 69, 59, 138, 35, 49),
- +(@ENTRY, 36, 1277, 1, 1494, 36, 50, 54, 70, 60, 142, 35, 50),
- +(@ENTRY, 37, 1336, 1, 1607, 37, 51, 55, 72, 61, 146, 35, 52),
- +(@ENTRY, 38, 1395, 1, 1724, 38, 53, 57, 74, 63, 151, 36, 52),
- +(@ENTRY, 39, 1459, 1, 1849, 40, 55, 60, 76, 64, 155, 36, 54),
- +(@ENTRY, 40, 1524, 1, 1980, 41, 57, 62, 78, 66, 160, 37, 55),
- +(@ENTRY, 41, 1585, 1, 2117, 43, 59, 64, 81, 68, 165, 38, 56),
- +(@ENTRY, 42, 1651, 1, 2262, 44, 61, 67, 86, 69, 169, 38, 57),
- +(@ENTRY, 43, 1716, 1, 2414, 45, 64, 71, 91, 71, 174, 39, 58),
- +(@ENTRY, 44, 1782, 1, 2574, 47, 67, 74, 97, 72, 178, 39, 59),
- +(@ENTRY, 45, 1848, 1, 2742, 48, 70, 77, 102, 74, 184, 40, 61),
- +(@ENTRY, 46, 1919, 1, 2798, 50, 73, 83, 104, 75, 188, 41, 62),
- +(@ENTRY, 47, 1990, 1, 2853, 52, 76, 85, 106, 77, 193, 41, 63),
- +(@ENTRY, 48, 2062, 1, 2907, 55, 79, 87, 108, 79, 197, 42, 64),
- +(@ENTRY, 49, 2138, 1, 2963, 59, 82, 89, 110, 80, 202, 42, 66),
- +(@ENTRY, 50, 2215, 1, 3018, 60, 87, 91, 113, 82, 207, 43, 67),
- +(@ENTRY, 51, 2292, 1, 3072, 62, 88, 93, 115, 84, 212, 44, 68),
- +(@ENTRY, 52, 2371, 1, 3128, 63, 90, 95, 117, 85, 216, 44, 69),
- +(@ENTRY, 53, 2453, 1, 3183, 65, 91, 97, 119, 87, 221, 45, 70),
- +(@ENTRY, 54, 2533, 1, 3237, 66, 93, 99, 122, 89, 226, 45, 72),
- +(@ENTRY, 55, 2614, 1, 3292, 67, 94, 101, 124, 91, 231, 47, 73),
- +(@ENTRY, 56, 2699, 1, 3348, 69, 96, 104, 127, 92, 236, 47, 74),
- +(@ENTRY, 57, 2784, 1, 3402, 72, 101, 108, 129, 94, 241, 48, 76),
- +(@ENTRY, 58, 2871, 1, 3457, 76, 106, 112, 131, 96, 245, 48, 77),
- +(@ENTRY, 59, 2961, 1, 3512, 80, 112, 116, 134, 98, 250, 49, 78),
- +(@ENTRY, 60, 3052, 1, 3814, 88, 123, 122, 136, 100, 256, 50, 80),
- +(@ENTRY, 61, 3144, 1, 4113, 92, 133, 128, 139, 102, 161, 51, 81),
- +(@ENTRY, 62, 3237, 1, 4410, 98, 162, 136, 141, 105, 266, 52, 83),
- +(@ENTRY, 63, 3331, 1, 4708, 102, 164, 138, 144, 107, 271, 53, 85),
- +(@ENTRY, 64, 3425, 1, 5006, 106, 166, 142, 146, 110, 276, 54, 87),
- +(@ENTRY, 65, 3524, 1, 5303, 108, 168, 144, 149, 113, 281, 55, 89),
- +(@ENTRY, 66, 3624, 1, 5601, 111, 169, 146, 151, 116, 287, 56, 91),
- +(@ENTRY, 67, 3728, 1, 5900, 115, 170, 148, 154, 119, 292, 57, 93),
- +(@ENTRY, 68, 3834, 1, 6197, 118, 171, 150, 156, 122, 297, 58, 95),
- +(@ENTRY, 69, 3941, 1, 6495, 123, 173, 153, 159, 125, 302, 59, 97),
- +(@ENTRY, 70, 4051, 1, 6794, 138, 174, 155, 162, 128, 307, 60, 99),
- +(@ENTRY, 71, 4162, 1, 7093, 152, 205, 167, 165, 131, 311, 61, 97),
- +(@ENTRY, 72, 4273, 1, 7392, 175, 228, 179, 168, 134, 316, 62, 99),
- +(@ENTRY, 73, 4384, 1, 7691, 189, 246, 192, 171, 137, 321, 63, 101),
- +(@ENTRY, 74, 4495, 1, 7990, 205, 267, 205, 174, 140, 326, 64, 103),
- +(@ENTRY, 75, 4606, 1, 8289, 221, 289, 217, 177, 143, 331, 65, 105),
- +(@ENTRY, 76, 4717, 1, 8588, 237, 308, 229, 180, 146, 336, 66, 107),
- +(@ENTRY, 77, 4828, 1, 8887, 252, 331, 242, 183, 149, 341, 67, 109),
- +(@ENTRY, 78, 4939, 1, 9186, 262, 353, 257, 186, 152, 346, 68, 111),
- +(@ENTRY, 79, 5050, 1, 9485, 280, 375, 270, 189, 155, 351, 69, 113),
- +(@ENTRY, 80, 5161, 1, 9784, 346, 499, 287, 192, 158, 356, 70, 115);
- +-- Imp Minion
- +SET @ENTRY := 12922;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 140, 48, 20, 2, 3, 10, 20, 20, 20, 24, 23),
- +(@ENTRY, 2, 149, 59, 20, 3, 4, 11, 21, 20, 20, 25, 24),
- +(@ENTRY, 3, 158, 70, 20, 3, 6, 12, 22, 20, 21, 26, 25),
- +(@ENTRY, 4, 168, 81, 33, 5, 7, 13, 23, 21, 21, 27, 26),
- +(@ENTRY, 5, 177, 92, 49, 6, 9, 13, 23, 21, 22, 28, 27),
- +(@ENTRY, 6, 186, 103, 68, 7, 11, 14, 24, 21, 22, 29, 27),
- +(@ENTRY, 7, 195, 114, 92, 9, 14, 15, 25, 21, 23, 30, 28),
- +(@ENTRY, 8, 204, 125, 117, 10, 15, 16, 26, 21, 23, 31, 29),
- +(@ENTRY, 9, 213, 136, 147, 11, 16, 17, 27, 21, 23, 32, 30),
- +(@ENTRY, 10, 223, 147, 180, 11, 17, 17, 27, 22, 24, 33, 31),
- +(@ENTRY, 11, 232, 158, 190, 12, 18, 18, 28, 22, 24, 37, 35),
- +(@ENTRY, 12, 250, 180, 203, 13, 19, 19, 29, 22, 26, 41, 39),
- +(@ENTRY, 13, 289, 203, 215, 13, 20, 20, 30, 22, 26, 44, 43),
- +(@ENTRY, 14, 299, 227, 228, 14, 21, 21, 31, 22, 28, 50, 47),
- +(@ENTRY, 15, 309, 251, 240, 15, 23, 22, 32, 23, 29, 54, 52),
- +(@ENTRY, 16, 329, 275, 253, 16, 24, 24, 34, 23, 30, 57, 56),
- +(@ENTRY, 17, 350, 300, 265, 17, 25, 26, 36, 23, 31, 61, 60),
- +(@ENTRY, 18, 362, 314, 278, 18, 27, 27, 37, 23, 32, 65, 65),
- +(@ENTRY, 19, 393, 351, 291, 19, 28, 28, 38, 23, 33, 70, 69),
- +(@ENTRY, 20, 403, 377, 303, 20, 30, 30, 40, 24, 35, 74, 74),
- +(@ENTRY, 21, 425, 393, 320, 21, 31, 32, 42, 24, 44, 87, 64),
- +(@ENTRY, 22, 449, 420, 346, 22, 32, 34, 44, 24, 46, 91, 67),
- +(@ENTRY, 23, 473, 447, 360, 23, 33, 35, 45, 24, 47, 95, 69),
- +(@ENTRY, 24, 520, 476, 373, 24, 35, 36, 46, 25, 49, 99, 73),
- +(@ENTRY, 25, 540, 504, 386, 25, 36, 37, 47, 25, 50, 104, 75),
- +(@ENTRY, 26, 569, 534, 399, 26, 37, 39, 49, 25, 51, 107, 78),
- +(@ENTRY, 27, 571, 564, 411, 27, 39, 40, 50, 25, 53, 111, 81),
- +(@ENTRY, 28, 574, 592, 424, 28, 40, 42, 52, 25, 54, 118, 86),
- +(@ENTRY, 29, 576, 620, 436, 29, 41, 44, 54, 26, 56, 122, 89),
- +(@ENTRY, 30, 579, 648, 449, 30, 43, 44, 54, 26, 57, 128, 92),
- +(@ENTRY, 31, 581, 676, 462, 30, 44, 46, 56, 26, 59, 131, 95),
- +(@ENTRY, 32, 590, 720, 476, 31, 45, 47, 57, 26, 61, 136, 98),
- +(@ENTRY, 33, 598, 742, 488, 32, 46, 49, 59, 27, 61, 139, 101),
- +(@ENTRY, 34, 601, 793, 501, 33, 47, 50, 60, 27, 63, 143, 104),
- +(@ENTRY, 35, 609, 845, 513, 34, 48, 52, 64, 19, 62, 66, 107),
- +(@ENTRY, 36, 617, 879, 525, 35, 50, 54, 67, 19, 62, 66, 110),
- +(@ENTRY, 37, 626, 916, 537, 37, 51, 56, 69, 19, 63, 68, 112),
- +(@ENTRY, 38, 634, 952, 549, 38, 53, 58, 70, 19, 63, 68, 115),
- +(@ENTRY, 39, 642, 988, 561, 40, 55, 60, 72, 19, 64, 69, 118),
- +(@ENTRY, 40, 650, 1026, 639, 41, 57, 62, 74, 20, 64, 156, 142),
- +(@ENTRY, 41, 668, 1063, 694, 43, 59, 64, 77, 20, 65, 160, 143),
- +(@ENTRY, 42, 676, 1103, 756, 44, 61, 67, 77, 20, 65, 163, 144),
- +(@ENTRY, 43, 685, 1187, 808, 46, 64, 71, 87, 20, 66, 167, 145),
- +(@ENTRY, 44, 693, 1214, 853, 48, 69, 75, 91, 21, 66, 170, 146),
- +(@ENTRY, 45, 701, 1240, 884, 50, 73, 79, 96, 21, 67, 174, 148),
- +(@ENTRY, 46, 709, 1267, 910, 52, 77, 83, 93, 30, 66, 175, 144),
- +(@ENTRY, 47, 718, 1294, 928, 54, 80, 85, 95, 31, 68, 180, 148),
- +(@ENTRY, 48, 726, 1320, 946, 57, 83, 87, 97, 31, 68, 184, 151),
- +(@ENTRY, 49, 734, 1347, 964, 60, 86, 89, 99, 31, 70, 188, 155),
- +(@ENTRY, 50, 747, 1391, 983, 63, 87, 91, 101, 32, 72, 192, 158),
- +(@ENTRY, 51, 750, 1435, 996, 64, 88, 93, 109, 22, 74, 202, 161),
- +(@ENTRY, 52, 764, 1481, 1013, 65, 89, 95, 112, 24, 76, 208, 165),
- +(@ENTRY, 53, 787, 1527, 1039, 66, 91, 97, 114, 25, 78, 215, 168),
- +(@ENTRY, 54, 820, 1573, 1055, 66, 93, 99, 109, 33, 77, 209, 172),
- +(@ENTRY, 55, 836, 1620, 1078, 67, 94, 102, 119, 26, 81, 229, 177),
- +(@ENTRY, 56, 846, 1666, 1091, 69, 96, 104, 114, 34, 80, 221, 181),
- +(@ENTRY, 57, 850, 1714, 1101, 74, 102, 108, 123, 27, 83, 243, 185),
- +(@ENTRY, 58, 862, 1763, 1125, 78, 109, 113, 125, 27, 84, 250, 189),
- +(@ENTRY, 59, 878, 1824, 1150, 84, 116, 118, 127, 27, 85, 258, 192),
- +(@ENTRY, 60, 920, 1898, 1163, 88, 123, 122, 122, 35, 86, 264, 260),
- +(@ENTRY, 61, 973, 1925, 1608, 92, 127, 126, 132, 29, 88, 271, 239),
- +(@ENTRY, 62, 1050, 1977, 2807, 96, 130, 129, 126, 35, 102, 328, 212),
- +(@ENTRY, 63, 1188, 2030, 1732, 100, 136, 131, 137, 32, 92, 285, 244),
- +(@ENTRY, 64, 1292, 2084, 1809, 105, 142, 133, 139, 33, 95, 292, 247),
- +(@ENTRY, 65, 1335, 2137, 1844, 110, 148, 135, 140, 33, 97, 299, 250),
- +(@ENTRY, 66, 1357, 2191, 1872, 115, 154, 137, 141, 33, 97, 306, 255),
- +(@ENTRY, 67, 1401, 2244, 1900, 120, 160, 139, 142, 33, 98, 313, 258),
- +(@ENTRY, 68, 1429, 2298, 1987, 125, 166, 141, 143, 34, 98, 320, 260),
- +(@ENTRY, 69, 1464, 2351, 2008, 130, 170, 143, 144, 36, 100, 327, 262),
- +(@ENTRY, 70, 1528, 2568, 2207, 138, 174, 146, 145, 39, 101, 327, 263),
- +(@ENTRY, 71, 1580, 2632, 2319, 150, 195, 155, 148, 40, 102, 342, 269),
- +(@ENTRY, 72, 1639, 2695, 2431, 160, 210, 165, 150, 41, 104, 351, 274),
- +(@ENTRY, 73, 1699, 2763, 2544, 180, 240, 180, 153, 44, 104, 358, 280),
- +(@ENTRY, 74, 1761, 2830, 2660, 200, 270, 195, 156, 45, 108, 365, 283),
- +(@ENTRY, 75, 1821, 2896, 2760, 220, 310, 210, 159, 46, 109, 373, 288),
- +(@ENTRY, 76, 1882, 2964, 2890, 240, 350, 225, 164, 48, 110, 381, 295),
- +(@ENTRY, 77, 1949, 3033, 2999, 270, 390, 240, 166, 49, 113, 390, 300),
- +(@ENTRY, 78, 2011, 3100, 3110, 290, 420, 255, 168, 50, 114, 397, 308),
- +(@ENTRY, 79, 2073, 3167, 3150, 310, 450, 270, 171, 51, 115, 392, 313),
- +(@ENTRY, 80, 2129, 3228, 6273, 346, 499, 287, 297, 79, 118, 369, 367);
- +-- warlock imp
- +SET @ENTRY := 416;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 140, 48, 20, 2, 3, 10, 20, 20, 20, 24, 23),
- +(@ENTRY, 2, 149, 59, 20, 3, 4, 11, 21, 20, 20, 25, 24),
- +(@ENTRY, 3, 158, 70, 20, 3, 6, 12, 22, 20, 21, 26, 25),
- +(@ENTRY, 4, 168, 81, 33, 5, 7, 13, 23, 21, 21, 27, 26),
- +(@ENTRY, 5, 177, 92, 49, 6, 9, 13, 23, 21, 22, 28, 27),
- +(@ENTRY, 6, 186, 103, 68, 7, 11, 14, 24, 21, 22, 29, 27),
- +(@ENTRY, 7, 195, 114, 92, 9, 14, 15, 25, 21, 23, 30, 28),
- +(@ENTRY, 8, 204, 125, 117, 10, 15, 16, 26, 21, 23, 31, 29),
- +(@ENTRY, 9, 213, 136, 147, 11, 16, 17, 27, 21, 23, 32, 30),
- +(@ENTRY, 10, 223, 147, 180, 11, 17, 17, 27, 22, 24, 33, 31),
- +(@ENTRY, 11, 232, 158, 190, 12, 18, 18, 28, 22, 24, 37, 35),
- +(@ENTRY, 12, 250, 180, 203, 13, 19, 19, 29, 22, 26, 41, 39),
- +(@ENTRY, 13, 289, 203, 215, 13, 20, 20, 30, 22, 26, 44, 43),
- +(@ENTRY, 14, 299, 227, 228, 14, 21, 21, 31, 22, 28, 50, 47),
- +(@ENTRY, 15, 309, 251, 240, 15, 23, 22, 32, 23, 29, 54, 52),
- +(@ENTRY, 16, 329, 275, 253, 16, 24, 24, 34, 23, 30, 57, 56),
- +(@ENTRY, 17, 350, 300, 265, 17, 25, 26, 36, 23, 31, 61, 60),
- +(@ENTRY, 18, 362, 314, 278, 18, 27, 27, 37, 23, 32, 65, 65),
- +(@ENTRY, 19, 393, 351, 291, 19, 28, 28, 38, 23, 33, 70, 69),
- +(@ENTRY, 20, 403, 377, 303, 20, 30, 30, 40, 24, 35, 74, 74),
- +(@ENTRY, 21, 425, 393, 320, 21, 31, 32, 42, 24, 44, 87, 64),
- +(@ENTRY, 22, 449, 420, 346, 22, 32, 34, 44, 24, 46, 91, 67),
- +(@ENTRY, 23, 473, 447, 360, 23, 33, 35, 45, 24, 47, 95, 69),
- +(@ENTRY, 24, 520, 476, 373, 24, 35, 36, 46, 25, 49, 99, 73),
- +(@ENTRY, 25, 540, 504, 386, 25, 36, 37, 47, 25, 50, 104, 75),
- +(@ENTRY, 26, 569, 534, 399, 26, 37, 39, 49, 25, 51, 107, 78),
- +(@ENTRY, 27, 571, 564, 411, 27, 39, 40, 50, 25, 53, 111, 81),
- +(@ENTRY, 28, 574, 592, 424, 28, 40, 42, 52, 25, 54, 118, 86),
- +(@ENTRY, 29, 576, 620, 436, 29, 41, 44, 54, 26, 56, 122, 89),
- +(@ENTRY, 30, 579, 648, 449, 30, 43, 44, 54, 26, 57, 128, 92),
- +(@ENTRY, 31, 581, 676, 462, 30, 44, 46, 56, 26, 59, 131, 95),
- +(@ENTRY, 32, 590, 720, 476, 31, 45, 47, 57, 26, 61, 136, 98),
- +(@ENTRY, 33, 598, 742, 488, 32, 46, 49, 59, 27, 61, 139, 101),
- +(@ENTRY, 34, 601, 793, 501, 33, 47, 50, 60, 27, 63, 143, 104),
- +(@ENTRY, 35, 609, 845, 513, 34, 48, 52, 64, 19, 62, 66, 107),
- +(@ENTRY, 36, 617, 879, 525, 35, 50, 54, 67, 19, 62, 66, 110),
- +(@ENTRY, 37, 626, 916, 537, 37, 51, 56, 69, 19, 63, 68, 112),
- +(@ENTRY, 38, 634, 952, 549, 38, 53, 58, 70, 19, 63, 68, 115),
- +(@ENTRY, 39, 642, 988, 561, 40, 55, 60, 72, 19, 64, 69, 118),
- +(@ENTRY, 40, 650, 1026, 639, 41, 57, 62, 74, 20, 64, 156, 142),
- +(@ENTRY, 41, 668, 1063, 694, 43, 59, 64, 77, 20, 65, 160, 143),
- +(@ENTRY, 42, 676, 1103, 756, 44, 61, 67, 77, 20, 65, 163, 144),
- +(@ENTRY, 43, 685, 1187, 808, 46, 64, 71, 87, 20, 66, 167, 145),
- +(@ENTRY, 44, 693, 1214, 853, 48, 69, 75, 91, 21, 66, 170, 146),
- +(@ENTRY, 45, 701, 1240, 884, 50, 73, 79, 96, 21, 67, 174, 148),
- +(@ENTRY, 46, 709, 1267, 910, 52, 77, 83, 93, 30, 66, 175, 144),
- +(@ENTRY, 47, 718, 1294, 928, 54, 80, 85, 95, 31, 68, 180, 148),
- +(@ENTRY, 48, 726, 1320, 946, 57, 83, 87, 97, 31, 68, 184, 151),
- +(@ENTRY, 49, 734, 1347, 964, 60, 86, 89, 99, 31, 70, 188, 155),
- +(@ENTRY, 50, 747, 1391, 983, 63, 87, 91, 101, 32, 72, 192, 158),
- +(@ENTRY, 51, 750, 1435, 996, 64, 88, 93, 109, 22, 74, 202, 161),
- +(@ENTRY, 52, 764, 1481, 1013, 65, 89, 95, 112, 24, 76, 208, 165),
- +(@ENTRY, 53, 787, 1527, 1039, 66, 91, 97, 114, 25, 78, 215, 168),
- +(@ENTRY, 54, 820, 1573, 1055, 66, 93, 99, 109, 33, 77, 209, 172),
- +(@ENTRY, 55, 836, 1620, 1078, 67, 94, 102, 119, 26, 81, 229, 177),
- +(@ENTRY, 56, 846, 1666, 1091, 69, 96, 104, 114, 34, 80, 221, 181),
- +(@ENTRY, 57, 850, 1714, 1101, 74, 102, 108, 123, 27, 83, 243, 185),
- +(@ENTRY, 58, 862, 1763, 1125, 78, 109, 113, 125, 27, 84, 250, 189),
- +(@ENTRY, 59, 878, 1824, 1150, 84, 116, 118, 127, 27, 85, 258, 192),
- +(@ENTRY, 60, 920, 1898, 1163, 88, 123, 122, 122, 35, 86, 264, 260),
- +(@ENTRY, 61, 973, 1925, 1608, 92, 127, 126, 132, 29, 88, 271, 239),
- +(@ENTRY, 62, 1050, 1977, 2807, 96, 130, 129, 126, 35, 102, 328, 212),
- +(@ENTRY, 63, 1188, 2030, 1732, 100, 136, 131, 137, 32, 92, 285, 244),
- +(@ENTRY, 64, 1292, 2084, 1809, 105, 142, 133, 139, 33, 95, 292, 247),
- +(@ENTRY, 65, 1335, 2137, 1844, 110, 148, 135, 140, 33, 97, 299, 250),
- +(@ENTRY, 66, 1357, 2191, 1872, 115, 154, 137, 141, 33, 97, 306, 255),
- +(@ENTRY, 67, 1401, 2244, 1900, 120, 160, 139, 142, 33, 98, 313, 258),
- +(@ENTRY, 68, 1429, 2298, 1987, 125, 166, 141, 143, 34, 98, 320, 260),
- +(@ENTRY, 69, 1464, 2351, 2008, 130, 170, 143, 144, 36, 100, 327, 262),
- +(@ENTRY, 70, 1528, 2568, 2207, 138, 174, 146, 145, 39, 101, 327, 263),
- +(@ENTRY, 71, 1580, 2632, 2319, 150, 195, 155, 148, 40, 102, 342, 269),
- +(@ENTRY, 72, 1639, 2695, 2431, 160, 210, 165, 150, 41, 104, 351, 274),
- +(@ENTRY, 73, 1699, 2763, 2544, 180, 240, 180, 153, 44, 104, 358, 280),
- +(@ENTRY, 74, 1761, 2830, 2660, 200, 270, 195, 156, 45, 108, 365, 283),
- +(@ENTRY, 75, 1821, 2896, 2760, 220, 310, 210, 159, 46, 109, 373, 288),
- +(@ENTRY, 76, 1882, 2964, 2890, 240, 350, 225, 164, 48, 110, 381, 295),
- +(@ENTRY, 77, 1949, 3033, 2999, 270, 390, 240, 166, 49, 113, 390, 300),
- +(@ENTRY, 78, 2011, 3100, 3110, 290, 420, 255, 168, 50, 114, 397, 308),
- +(@ENTRY, 79, 2073, 3167, 3150, 310, 450, 270, 171, 51, 115, 392, 313),
- +(@ENTRY, 80, 2129, 3228, 6273, 346, 499, 287, 297, 79, 118, 369, 367);
- +-- warlock voidwalker
- +SET @ENTRY := 1860;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 40, 48, 831, 13, 19, 38, 29, 10, 29, 25, 27),
- +(@ENTRY, 2, 49, 59, 40, 13, 19, 38, 14, 15, 2, 1, 27),
- +(@ENTRY, 3, 58, 70, 60, 13, 19, 38, 15, 16, 4, 1, 27),
- +(@ENTRY, 4, 68, 81, 80, 13, 19, 38, 17, 17, 8, 2, 27),
- +(@ENTRY, 5, 77, 92, 100, 13, 19, 38, 18, 18, 12, 2, 27),
- +(@ENTRY, 6, 86, 103, 120, 13, 19, 38, 20, 19, 16, 3, 27),
- +(@ENTRY, 7, 95, 114, 140, 13, 19, 38, 22, 20, 21, 3, 27),
- +(@ENTRY, 8, 104, 125, 160, 13, 19, 38, 23, 21, 25, 4, 27),
- +(@ENTRY, 9, 113, 136, 180, 13, 19, 38, 25, 22, 27, 4, 27),
- +(@ENTRY, 10, 260, 147, 831, 13, 19, 38, 29, 10, 29, 25, 27),
- +(@ENTRY, 11, 291, 158, 875, 14, 20, 40, 30, 10, 32, 26, 28),
- +(@ENTRY, 12, 322, 180, 782, 7, 10, 42, 31, 26, 36, 24, 31),
- +(@ENTRY, 13, 354, 203, 827, 7, 11, 44, 32, 28, 43, 26, 32),
- +(@ENTRY, 14, 368, 227, 878, 7, 11, 46, 33, 28, 44, 25, 35),
- +(@ENTRY, 15, 421, 251, 925, 8, 12, 48, 34, 30, 48, 26, 37),
- +(@ENTRY, 16, 455, 275, 975, 9, 13, 52, 36, 30, 52, 27, 39),
- +(@ENTRY, 17, 490, 300, 1022, 9, 13, 56, 38, 31, 55, 28, 42),
- +(@ENTRY, 18, 528, 314, 1068, 10, 14, 58, 39, 33, 59, 28, 44),
- +(@ENTRY, 19, 566, 351, 1120, 10, 15, 60, 40, 33, 63, 30, 46),
- +(@ENTRY, 20, 606, 377, 1165, 11, 16, 64, 42, 35, 67, 31, 49),
- +(@ENTRY, 21, 653, 393, 1232, 19, 27, 68, 44, 36, 80, 53, 39),
- +(@ENTRY, 22, 699, 420, 1282, 20, 28, 72, 46, 36, 84, 54, 41),
- +(@ENTRY, 23, 746, 447, 1330, 21, 29, 74, 47, 38, 89, 56, 42),
- +(@ENTRY, 24, 823, 476, 1378, 22, 30, 78, 49, 39, 93, 57, 43),
- +(@ENTRY, 25, 854, 504, 1427, 23, 31, 80, 50, 40, 97, 60, 44),
- +(@ENTRY, 26, 911, 534, 1474, 24, 32, 84, 52, 41, 101, 62, 46),
- +(@ENTRY, 27, 968, 564, 1524, 24, 34, 86, 53, 42, 105, 63, 47),
- +(@ENTRY, 28, 1035, 592, 1572, 25, 35, 90, 55, 43, 110, 65, 48),
- +(@ENTRY, 29, 1127, 620, 1619, 26, 36, 94, 57, 44, 114, 67, 49),
- +(@ENTRY, 30, 1215, 648, 1667, 27, 37, 94, 57, 46, 118, 69, 51),
- +(@ENTRY, 31, 1292, 676, 1715, 28, 38, 98, 59, 47, 123, 71, 52),
- +(@ENTRY, 32, 1386, 720, 1766, 29, 39, 100, 60, 47, 127, 73, 53),
- +(@ENTRY, 33, 1457, 742, 1812, 29, 40, 104, 62, 49, 131, 74, 54),
- +(@ENTRY, 34, 1574, 793, 1861, 30, 41, 106, 63, 50, 135, 76, 56),
- +(@ENTRY, 35, 1690, 845, 2238, 49, 65, 110, 65, 21, 146, 62, 57),
- +(@ENTRY, 36, 1760, 879, 2415, 50, 67, 112, 66, 21, 150, 63, 59),
- +(@ENTRY, 37, 1830, 916, 2602, 51, 70, 116, 68, 21, 155, 64, 60),
- +(@ENTRY, 38, 1924, 952, 2795, 53, 71, 120, 70, 22, 159, 66, 62),
- +(@ENTRY, 39, 1974, 988, 3002, 54, 74, 124, 72, 22, 164, 67, 63),
- +(@ENTRY, 40, 2052, 1026, 3219, 56, 76, 128, 74, 23, 170, 70, 65),
- +(@ENTRY, 41, 2135, 1063, 2826, 57, 60, 135, 77, 58, 152, 51, 66),
- +(@ENTRY, 42, 2215, 1103, 3034, 40, 54, 142, 81, 59, 156, 70, 67),
- +(@ENTRY, 43, 2260, 1187, 3228, 43, 57, 152, 86, 61, 169, 72, 69),
- +(@ENTRY, 44, 2290, 1214, 3463, 44, 58, 160, 91, 61, 164, 54, 71),
- +(@ENTRY, 45, 2303, 1240, 3620, 45, 59, 168, 96, 64, 169, 55, 72),
- +(@ENTRY, 46, 2349, 1267, 3722, 46, 60, 176, 98, 65, 173, 77, 73),
- +(@ENTRY, 47, 2358, 1294, 3796, 48, 65, 180, 100, 66, 177, 78, 75),
- +(@ENTRY, 48, 2436, 1320, 3868, 52, 70, 184, 102, 68, 181, 80, 76),
- +(@ENTRY, 49, 2474, 1347, 3943, 56, 75, 188, 104, 69, 186, 82, 78),
- +(@ENTRY, 50, 2527, 1391, 4013, 60, 79, 193, 107, 71, 190, 84, 80),
- +(@ENTRY, 51, 2560, 1435, 4068, 60, 80, 196, 109, 72, 194, 60, 127),
- +(@ENTRY, 52, 2661, 1481, 4136, 60, 80, 200, 112, 74, 198, 62, 128),
- +(@ENTRY, 53, 2757, 1527, 4207, 61, 81, 205, 114, 75, 203, 63, 131),
- +(@ENTRY, 54, 2840, 1573, 4307, 61, 81, 210, 115, 76, 207, 90, 85),
- +(@ENTRY, 55, 2876, 1620, 4362, 80, 85, 216, 119, 79, 211, 65, 135),
- +(@ENTRY, 56, 3006, 1666, 4428, 100, 90, 225, 121, 80, 215, 66, 139),
- +(@ENTRY, 57, 3110, 1714, 4500, 120, 95, 230, 123, 81, 220, 67, 142),
- +(@ENTRY, 58, 3222, 1763, 4579, 140, 110, 232, 125, 82, 224, 68, 144),
- +(@ENTRY, 59, 3318, 1824, 4673, 160, 140, 234, 127, 83, 230, 69, 147),
- +(@ENTRY, 60, 3419, 1874, 4745, 170, 170, 238, 129, 85, 249, 70, 150),
- +(@ENTRY, 61, 3522, 1925, 5196, 180, 200, 242, 132, 89, 251, 78, 153),
- +(@ENTRY, 62, 3627, 1977, 7223, 190, 263, 246, 133, 36, 279, 124, 102),
- +(@ENTRY, 63, 3726, 2030, 6104, 200, 280, 251, 137, 93, 255, 93, 160),
- +(@ENTRY, 64, 3830, 2184, 6561, 205, 295, 256, 139, 95, 259, 102, 164),
- +(@ENTRY, 65, 3934, 2237, 7020, 210, 310, 261, 142, 97, 264, 119, 167),
- +(@ENTRY, 66, 4145, 2391, 7481, 215, 325, 266, 144, 99, 268, 122, 168),
- +(@ENTRY, 67, 4321, 2444, 7944, 220, 340, 271, 146, 101, 272, 124, 170),
- +(@ENTRY, 68, 4529, 2598, 8409, 225, 355, 276, 148, 104, 276, 127, 175),
- +(@ENTRY, 69, 4764, 2751, 8876, 230, 370, 281, 151, 106, 278, 130, 185),
- +(@ENTRY, 70, 4860, 2885, 9070, 240, 380, 286, 153, 109, 280, 133, 122),
- +(@ENTRY, 71, 5010, 2992, 9484, 250, 390, 300, 155, 112, 283, 137, 194),
- +(@ENTRY, 72, 5161, 3100, 9861, 260, 400, 320, 157, 114, 286, 141, 197),
- +(@ENTRY, 73, 5313, 3208, 10231, 270, 410, 340, 159, 116, 289, 145, 201),
- +(@ENTRY, 74, 5466, 3317, 10603, 280, 415, 370, 163, 120, 293, 151, 205),
- +(@ENTRY, 75, 5620, 3426, 10983, 290, 420, 390, 165, 123, 296, 156, 214),
- +(@ENTRY, 76, 5775, 3535, 14155, 303, 430, 408, 214, 67, 309, 143, 196),
- +(@ENTRY, 77, 5930, 3645, 14652, 315, 446, 452, 236, 72, 314, 144, 200),
- +(@ENTRY, 78, 6086, 3758, 12125, 325, 460, 500, 172, 129, 306, 172, 226),
- +(@ENTRY, 79, 6243, 3874, 12508, 340, 480, 550, 174, 131, 310, 178, 231),
- +(@ENTRY, 80, 6401, 3997, 16148, 358, 501, 608, 314, 140, 328, 185, 239);
- +-- warlock succubus
- +SET @ENTRY := 1863;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 40, 48, 563, 29, 39, 64, 42, 35, 67, 31, 49),
- +(@ENTRY, 2, 49, 59, 40, 29, 39, 64, 14, 15, 2, 1, 26),
- +(@ENTRY, 3, 58, 70, 60, 29, 39, 64, 15, 16, 4, 1, 27),
- +(@ENTRY, 4, 68, 81, 80, 29, 39, 64, 17, 17, 8, 2, 27),
- +(@ENTRY, 5, 77, 92, 100, 29, 39, 64, 18, 18, 12, 2, 28),
- +(@ENTRY, 6, 86, 103, 120, 29, 39, 64, 20, 19, 16, 3, 29),
- +(@ENTRY, 7, 95, 114, 140, 29, 39, 64, 22, 20, 21, 3, 29),
- +(@ENTRY, 8, 104, 125, 160, 29, 39, 64, 23, 21, 25, 4, 30),
- +(@ENTRY, 9, 113, 136, 180, 29, 39, 64, 25, 22, 29, 4, 31),
- +(@ENTRY, 10, 123, 147, 200, 29, 39, 64, 26, 23, 33, 5, 31),
- +(@ENTRY, 11, 132, 158, 220, 29, 39, 64, 28, 25, 38, 6, 32),
- +(@ENTRY, 12, 150, 180, 240, 29, 39, 64, 29, 26, 42, 8, 33),
- +(@ENTRY, 13, 169, 203, 280, 29, 39, 64, 31, 27, 46, 9, 34),
- +(@ENTRY, 14, 189, 227, 320, 29, 39, 64, 33, 28, 50, 11, 35),
- +(@ENTRY, 15, 209, 251, 360, 29, 39, 64, 34, 29, 55, 14, 35),
- +(@ENTRY, 16, 229, 275, 400, 29, 39, 64, 36, 30, 59, 16, 36),
- +(@ENTRY, 17, 250, 300, 460, 29, 39, 64, 37, 31, 63, 20, 37),
- +(@ENTRY, 18, 262, 314, 510, 29, 39, 64, 39, 32, 67, 24, 38),
- +(@ENTRY, 19, 293, 351, 550, 29, 39, 64, 40, 33, 72, 29, 39),
- +(@ENTRY, 20, 303, 377, 563, 29, 39, 64, 42, 35, 67, 31, 49),
- +(@ENTRY, 21, 325, 393, 604, 29, 40, 68, 44, 36, 80, 53, 39),
- +(@ENTRY, 22, 349, 420, 628, 31, 42, 72, 46, 36, 84, 54, 41),
- +(@ENTRY, 23, 373, 447, 652, 32, 43, 74, 47, 38, 89, 56, 42),
- +(@ENTRY, 24, 400, 476, 675, 33, 45, 78, 49, 39, 93, 57, 43),
- +(@ENTRY, 25, 440, 504, 699, 34, 47, 80, 50, 40, 97, 60, 44),
- +(@ENTRY, 26, 469, 534, 721, 36, 48, 84, 52, 41, 101, 62, 46),
- +(@ENTRY, 27, 501, 564, 745, 37, 50, 86, 53, 42, 105, 63, 47),
- +(@ENTRY, 28, 534, 592, 768, 38, 52, 90, 55, 43, 110, 65, 48),
- +(@ENTRY, 29, 566, 620, 791, 40, 54, 94, 57, 44, 114, 67, 49),
- +(@ENTRY, 30, 599, 648, 815, 41, 56, 94, 57, 46, 118, 69, 51),
- +(@ENTRY, 31, 631, 676, 838, 42, 57, 98, 59, 47, 123, 71, 52),
- +(@ENTRY, 32, 680, 720, 862, 43, 59, 100, 60, 47, 127, 73, 53),
- +(@ENTRY, 33, 728, 742, 884, 44, 60, 104, 62, 49, 131, 74, 54),
- +(@ENTRY, 34, 661, 793, 908, 46, 62, 106, 63, 50, 135, 76, 56),
- +(@ENTRY, 35, 699, 845, 950, 45, 66, 110, 63, 51, 136, 73, 57),
- +(@ENTRY, 36, 737, 879, 990, 47, 70, 113, 67, 52, 137, 72, 58),
- +(@ENTRY, 37, 776, 916, 1038, 50, 74, 117, 69, 53, 138, 70, 59),
- +(@ENTRY, 38, 814, 952, 1095, 53, 78, 120, 70, 55, 139, 0, 91),
- +(@ENTRY, 39, 852, 988, 1163, 56, 81, 125, 72, 56, 142, 68, 62),
- +(@ENTRY, 40, 890, 1026, 1244, 59, 84, 130, 74, 57, 147, 67, 64),
- +(@ENTRY, 41, 928, 1063, 1338, 63, 86, 135, 77, 58, 152, 68, 66),
- +(@ENTRY, 42, 976, 1103, 1448, 66, 89, 142, 81, 59, 156, 70, 67),
- +(@ENTRY, 43, 1005, 1187, 1560, 69, 93, 0, 87, 60, 160, 72, 69),
- +(@ENTRY, 44, 1043, 1214, 1670, 72, 98, 0, 91, 61, 164, 74, 71),
- +(@ENTRY, 45, 1081, 1240, 1738, 76, 104, 0, 96, 64, 169, 75, 72),
- +(@ENTRY, 46, 1119, 1267, 1773, 79, 110, 176, 98, 65, 173, 77, 73),
- +(@ENTRY, 47, 1158, 1294, 1808, 82, 114, 180, 100, 66, 177, 78, 75),
- +(@ENTRY, 48, 1196, 1320, 1843, 84, 118, 184, 102, 68, 181, 80, 76),
- +(@ENTRY, 49, 1234, 1347, 1878, 88, 120, 188, 104, 69, 186, 82, 78),
- +(@ENTRY, 50, 1277, 1391, 1912, 94, 124, 194, 107, 71, 190, 84, 80),
- +(@ENTRY, 51, 1320, 1435, 1945, 97, 144, 200, 109, 72, 194, 86, 81),
- +(@ENTRY, 52, 1364, 1481, 1984, 107, 158, 204, 112, 74, 198, 88, 83),
- +(@ENTRY, 53, 1407, 1527, 2020, 117, 164, 210, 114, 75, 203, 90, 85),
- +(@ENTRY, 54, 1450, 1573, 2056, 127, 172, 216, 116, 77, 207, 92, 87),
- +(@ENTRY, 55, 1493, 1620, 2089, 137, 180, 220, 119, 79, 211, 94, 88),
- +(@ENTRY, 56, 1536, 1666, 2113, 147, 190, 224, 121, 80, 215, 96, 90),
- +(@ENTRY, 57, 1580, 1714, 2156, 157, 210, 228, 123, 82, 220, 99, 92),
- +(@ENTRY, 58, 1623, 1763, 2189, 167, 230, 232, 125, 84, 224, 101, 94),
- +(@ENTRY, 59, 1666, 1824, 2230, 177, 250, 236, 128, 86, 228, 103, 96),
- +(@ENTRY, 60, 1709, 1874, 2261, 187, 270, 240, 130, 87, 232, 106, 98),
- +(@ENTRY, 61, 1754, 1925, 2300, 207, 290, 243, 132, 89, 237, 108, 101),
- +(@ENTRY, 62, 1800, 1977, 4340, 229, 319, 246, 133, 36, 279, 124, 102),
- +(@ENTRY, 63, 1845, 2030, 2440, 239, 329, 266, 137, 93, 245, 113, 105),
- +(@ENTRY, 64, 1891, 2084, 2550, 249, 344, 286, 139, 95, 249, 116, 107),
- +(@ENTRY, 65, 1936, 2137, 2700, 259, 360, 306, 142, 97, 254, 119, 109),
- +(@ENTRY, 66, 1982, 2191, 2910, 269, 375, 336, 144, 99, 258, 122, 112),
- +(@ENTRY, 67, 2027, 2244, 3150, 279, 390, 366, 146, 101, 262, 124, 114),
- +(@ENTRY, 68, 2073, 2298, 3450, 289, 405, 396, 148, 104, 266, 127, 117),
- +(@ENTRY, 69, 2118, 2351, 3800, 299, 430, 436, 151, 106, 271, 130, 119),
- +(@ENTRY, 70, 2164, 2405, 4293, 321, 462, 486, 153, 108, 280, 133, 122),
- +(@ENTRY, 71, 2211, 2460, 4479, 333, 475, 506, 155, 110, 284, 136, 124),
- +(@ENTRY, 72, 2259, 2516, 4666, 343, 490, 516, 157, 111, 288, 139, 125),
- +(@ENTRY, 73, 2308, 2573, 4854, 353, 510, 526, 159, 113, 293, 143, 127),
- +(@ENTRY, 74, 2358, 2631, 5042, 363, 525, 536, 161, 115, 298, 147, 131),
- +(@ENTRY, 75, 2409, 2660, 5231, 373, 540, 546, 164, 118, 303, 150, 134),
- +(@ENTRY, 76, 2461, 2735, 5421, 385, 550, 556, 167, 120, 309, 154, 137),
- +(@ENTRY, 77, 2512, 2793, 5612, 400, 570, 566, 170, 122, 314, 156, 141),
- +(@ENTRY, 78, 2562, 2852, 5804, 420, 590, 576, 172, 124, 319, 158, 143),
- +(@ENTRY, 79, 2612, 2911, 5997, 440, 610, 586, 175, 127, 324, 160, 147),
- +(@ENTRY, 80, 2665, 2989, 9706, 461, 635, 608, 314, 129, 328, 170, 209);
- +-- warlock felhunter
- +SET @ENTRY := 417;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 60, 48, 834, 31, 42, 94, 57, 46, 118, 69, 51),
- +(@ENTRY, 2, 73, 59, 168, 31, 42, 94, 12, 18, 14, 13, 23),
- +(@ENTRY, 3, 87, 70, 191, 31, 42, 94, 14, 19, 17, 15, 24),
- +(@ENTRY, 4, 101, 81, 215, 31, 42, 94, 15, 20, 19, 17, 25),
- +(@ENTRY, 5, 115, 92, 239, 31, 42, 94, 17, 21, 22, 19, 26),
- +(@ENTRY, 6, 129, 103, 263, 31, 42, 94, 19, 22, 24, 21, 27),
- +(@ENTRY, 7, 152, 114, 287, 31, 42, 94, 20, 23, 27, 23, 28),
- +(@ENTRY, 8, 156, 125, 310, 31, 42, 94, 22, 24, 29, 25, 29),
- +(@ENTRY, 9, 170, 136, 334, 31, 42, 94, 23, 25, 32, 27, 30),
- +(@ENTRY, 10, 184, 147, 358, 31, 42, 94, 25, 26, 34, 29, 31),
- +(@ENTRY, 11, 198, 158, 382, 31, 42, 94, 27, 27, 37, 31, 32),
- +(@ENTRY, 12, 225, 180, 406, 31, 42, 94, 28, 28, 41, 33, 33),
- +(@ENTRY, 13, 254, 203, 429, 31, 42, 94, 30, 29, 45, 35, 34),
- +(@ENTRY, 14, 284, 227, 453, 31, 42, 94, 31, 30, 50, 37, 35),
- +(@ENTRY, 15, 313, 251, 477, 31, 42, 94, 33, 31, 54, 39, 36),
- +(@ENTRY, 16, 343, 275, 501, 31, 42, 94, 35, 32, 58, 41, 37),
- +(@ENTRY, 17, 375, 300, 525, 31, 42, 94, 36, 33, 62, 43, 38),
- +(@ENTRY, 18, 392, 314, 548, 31, 42, 94, 38, 34, 67, 45, 39),
- +(@ENTRY, 19, 438, 351, 572, 31, 42, 94, 39, 35, 71, 47, 40),
- +(@ENTRY, 20, 471, 377, 596, 31, 42, 94, 41, 36, 75, 49, 41),
- +(@ENTRY, 21, 500, 400, 620, 31, 42, 94, 43, 37, 80, 51, 42),
- +(@ENTRY, 22, 528, 423, 644, 31, 42, 94, 44, 38, 84, 53, 43),
- +(@ENTRY, 23, 558, 447, 667, 31, 42, 94, 46, 39, 88, 55, 44),
- +(@ENTRY, 24, 595, 476, 691, 31, 42, 94, 47, 40, 93, 57, 45),
- +(@ENTRY, 25, 630, 504, 715, 31, 42, 94, 49, 41, 97, 59, 46),
- +(@ENTRY, 26, 678, 543, 739, 31, 42, 94, 51, 42, 101, 61, 47),
- +(@ENTRY, 27, 705, 564, 763, 31, 42, 94, 52, 43, 105, 63, 48),
- +(@ENTRY, 28, 740, 592, 786, 31, 42, 94, 54, 44, 110, 65, 49),
- +(@ENTRY, 29, 775, 620, 810, 31, 42, 94, 55, 45, 114, 67, 50),
- +(@ENTRY, 30, 800, 648, 834, 31, 42, 94, 57, 46, 118, 69, 51),
- +(@ENTRY, 31, 856, 676, 857, 32, 43, 98, 59, 47, 123, 71, 52),
- +(@ENTRY, 32, 921, 720, 882, 33, 45, 100, 60, 47, 127, 73, 53),
- +(@ENTRY, 33, 987, 742, 905, 34, 46, 104, 62, 49, 131, 74, 54),
- +(@ENTRY, 34, 1047, 793, 929, 35, 47, 106, 63, 50, 135, 76, 56),
- +(@ENTRY, 35, 1107, 845, 953, , 0, 0, 65, 52, 137, 73, 57),
- +(@ENTRY, 36, 1167, 879, 977, 0, 0, 0, 67, 53, 138, 72, 58),
- +(@ENTRY, 37, 1227, 916, 1001, 0, 0, 0, 68, 54, 138, 70, 60),
- +(@ENTRY, 38, 1288, 952, 1024, 0, 0, 0, 70, 55, 139, 69, 61),
- +(@ENTRY, 39, 1348, 988, 1048, 0, 0, 0, 71, 56, 142, 68, 62),
- +(@ENTRY, 40, 1408, 1026, 1250, 0, 0, 0, 73, 57, 146, 67, 64),
- +(@ENTRY, 41, 1468, 1063, 1390, 0, 0, 0, 76, 58, 151, 68, 65),
- +(@ENTRY, 42, 1408, 1026, 1484, 48, 64, 142, 81, 59, 156, 70, 67),
- +(@ENTRY, 43, 1588, 1187, 1550, 0, 0, 0, 87, 60, 160, 71, 68),
- +(@ENTRY, 44, 1648, 1214, 1650, 0, 0, 0, 91, 61, 164, 73, 70),
- +(@ENTRY, 45, 1708, 1240, 2159, 66, 87, 172, 96, 25, 169, 67, 72),
- +(@ENTRY, 46, 1768, 1267, 1817, 0, 0, 176, 98, 65, 173, 77, 73),
- +(@ENTRY, 47, 1928, 1294, 1853, 0, 0, 180, 100, 66, 177, 78, 75),
- +(@ENTRY, 48, 1889, 1320, 1888, 0, 0, 184, 102, 68, 181, 80, 76),
- +(@ENTRY, 49, 1950, 1347, 1925, 0, 0, 188, 104, 69, 186, 82, 78),
- +(@ENTRY, 50, 2638, 1977, 1959, 65, 86, 194, 107, 71, 190, 84, 80),
- +(@ENTRY, 51, 2055, 1435, 2041, 0, 0, 0, 109, 72, 195, 86, 82),
- +(@ENTRY, 52, 2108, 1481, 2125, 0, 0, 0, 111, 74, 199, 88, 84),
- +(@ENTRY, 53, 2161, 1527, 2213, 0, 0, 0, 113, 75, 204, 90, 86),
- +(@ENTRY, 54, 2213, 1573, 2305, 0, 0, 0, 116, 77, 208, 92, 88),
- +(@ENTRY, 55, 2266, 1620, 2400, 0, 0, 0, 118, 78, 213, 94, 90),
- +(@ENTRY, 56, 2318, 1666, 2499, 0, 0, 0, 120, 80, 217, 96, 92),
- +(@ENTRY, 57, 2371, 1714, 2602, 0, 0, 0, 123, 82, 222, 99, 94),
- +(@ENTRY, 58, 2424, 1763, 2709, 0, 0, 0, 125, 83, 226, 101, 97),
- +(@ENTRY, 59, 2476, 1824, 2821, 0, 0, 0, 127, 85, 231, 103, 99),
- +(@ENTRY, 60, 2529, 1874, 2938, 0, 0, 0, 130, 87, 235, 106, 101),
- +(@ENTRY, 61, 2583, 1925, 3059, 0, 0, 0, 132, 89, 240, 108, 103),
- +(@ENTRY, 62, 3518, 2833, 3479, 175, 243, 246, 133, 36, 279, 124, 102),
- +(@ENTRY, 63, 2693, 2030, 3317, 0, 0, 0, 137, 93, 249, 113, 107),
- +(@ENTRY, 64, 2758, 2084, 3454, 0, 0, 0, 139, 95, 253, 116, 109),
- +(@ENTRY, 65, 2823, 2139, 3597, 0, 0, 0, 141, 97, 258, 119, 111),
- +(@ENTRY, 66, 2888, 2195, 3745, 0, 0, 0, 143, 99, 262, 121, 113),
- +(@ENTRY, 67, 2944, 2252, 3900, 0, 0, 0, 146, 101, 267, 124, 115),
- +(@ENTRY, 68, 3000, 2300, 4061, 0, 0, 0, 148, 103, 271, 127, 117),
- +(@ENTRY, 69, 3056, 2360, 4229, 0, 0, 0, 150, 105, 276, 130, 120),
- +(@ENTRY, 70, 3112, 2420, 4400, 92, 123, 286, 153, 108, 280, 133, 122),
- +(@ENTRY, 71, 3169, 2478, 4561, 0, 0, 0, 156, 111, 285, 136, 124),
- +(@ENTRY, 72, 3227, 2535, 4721, 0, 0, 0, 159, 113, 290, 139, 126),
- +(@ENTRY, 73, 3283, 2594, 4882, 0, 0, 0, 162, 116, 294, 143, 128),
- +(@ENTRY, 74, 3342, 2653, 5041, 0, 0, 0, 165, 118, 298, 146, 129),
- +(@ENTRY, 75, 3403, 2711, 5199, 0, 0, 0, 167, 121, 304, 150, 131),
- +(@ENTRY, 76, 3459, 2772, 5363, 0, 0, 0, 170, 124, 309, 153, 132),
- +(@ENTRY, 77, 3518, 2833, 7056, 293, 415, 452, 236, 172, 314, 144, 200),
- +(@ENTRY, 78, 3576, 2894, 5688, 0, 0, 0, 175, 129, 319, 157, 137),
- +(@ENTRY, 79, 3645, 2954, 5868, 0, 0, 0, 177, 130, 324, 158, 140),
- +(@ENTRY, 80, 3733, 3025, 7782, 333, 466, 608, 314, 190, 328, 150, 209);
- +-- warlock felguard
- +SET @ENTRY := 17252;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 40, 48, 3494, 113, 149, 194, 107, 71, 190, 84, 80),
- +(@ENTRY, 2, 49, 59, 40, 0, 0, 0, 14, 15, 2, 1, 26),
- +(@ENTRY, 3, 58, 70, 60, 0, 0, 0, 15, 16, 4, 1, 27),
- +(@ENTRY, 4, 68, 81, 80, 0, 0, 0, 17, 17, 8, 2, 27),
- +(@ENTRY, 5, 77, 92, 100, 0, 0, 0, 18, 18, 12, 2, 28),
- +(@ENTRY, 6, 86, 103, 120, 0, 0, 0, 20, 19, 16, 3, 29),
- +(@ENTRY, 7, 95, 114, 140, 0, 0, 0, 22, 20, 21, 3, 29),
- +(@ENTRY, 8, 104, 125, 160, 0, 0, 0, 23, 21, 25, 4, 30),
- +(@ENTRY, 9, 113, 136, 180, 0, 0, 0, 25, 22, 29, 4, 31),
- +(@ENTRY, 10, 123, 147, 200, 0, 0, 0, 26, 23, 33, 5, 31),
- +(@ENTRY, 11, 132, 158, 220, 0, 0, 0, 28, 25, 38, 6, 32),
- +(@ENTRY, 12, 150, 180, 240, 0, 0, 0, 29, 26, 42, 8, 33),
- +(@ENTRY, 13, 169, 203, 280, 0, 0, 0, 31, 27, 46, 9, 34),
- +(@ENTRY, 14, 189, 227, 320, 0, 0, 0, 33, 28, 50, 11, 35),
- +(@ENTRY, 15, 209, 251, 360, 0, 0, 0, 34, 29, 55, 14, 35),
- +(@ENTRY, 16, 229, 275, 400, 0, 0, 0, 36, 30, 59, 16, 36),
- +(@ENTRY, 17, 250, 300, 460, 0, 0, 0, 37, 31, 63, 20, 37),
- +(@ENTRY, 18, 262, 314, 510, 0, 0, 0, 39, 32, 67, 24, 38),
- +(@ENTRY, 19, 293, 351, 550, 0, 0, 0, 40, 33, 72, 29, 39),
- +(@ENTRY, 20, 303, 377, 563, 0, 0, 0, 42, 35, 67, 31, 49),
- +(@ENTRY, 21, 325, 393, 604, 0, 0, 0, 44, 36, 80, 53, 39),
- +(@ENTRY, 22, 349, 420, 628, 0, 0, 0, 46, 36, 84, 54, 41),
- +(@ENTRY, 23, 373, 447, 652, 0, 0, 0, 47, 38, 89, 56, 42),
- +(@ENTRY, 24, 400, 476, 675, 0, 0, 0, 49, 39, 93, 57, 43),
- +(@ENTRY, 25, 440, 504, 699, 0, 0, 0, 50, 40, 97, 60, 44),
- +(@ENTRY, 26, 469, 534, 721, 0, 0, 0, 52, 41, 101, 62, 46),
- +(@ENTRY, 27, 501, 564, 745, 0, 0, 0, 53, 42, 105, 63, 47),
- +(@ENTRY, 28, 534, 592, 768, 0, 0, 0, 55, 43, 110, 65, 48),
- +(@ENTRY, 29, 566, 620, 791, 0, 0, 0, 57, 44, 114, 67, 49),
- +(@ENTRY, 30, 599, 648, 815, 0, 0, 0, 57, 46, 118, 69, 51),
- +(@ENTRY, 31, 631, 676, 838, 0, 0, 0, 59, 47, 123, 71, 52),
- +(@ENTRY, 32, 680, 720, 862, 0, 0, 0, 60, 47, 127, 73, 53),
- +(@ENTRY, 33, 728, 742, 884, 0, 0, 0, 62, 49, 131, 74, 54),
- +(@ENTRY, 34, 661, 793, 908, 0, 0, 0, 64, 50, 135, 76, 56),
- +(@ENTRY, 35, 699, 845, 950, 0, 0, 0, 63, 51, 136, 73, 57),
- +(@ENTRY, 36, 737, 879, 990, 0, 0, 0, 67, 52, 137, 72, 58),
- +(@ENTRY, 37, 776, 916, 1038, 0, 0, 0, 69, 53, 138, 70, 59),
- +(@ENTRY, 38, 814, 952, 1095, 0, 0, 0, 70, 55, 139, 69, 61),
- +(@ENTRY, 39, 852, 988, 1163, 0, 0, 0, 72, 56, 142, 68, 62),
- +(@ENTRY, 40, 890, 1026, 1244, 0, 0, 0, 74, 57, 147, 67, 64),
- +(@ENTRY, 41, 928, 1063, 1338, 0, 0, 0, 77, 58, 152, 68, 66),
- +(@ENTRY, 42, 976, 1103, 1448, 0, 0, 0, 81, 59, 156, 70, 67),
- +(@ENTRY, 43, 1005, 1187, 1560, 0, 0, 0, 87, 60, 160, 72, 69),
- +(@ENTRY, 44, 1043, 1214, 1670, 0, 0, 0, 91, 61, 164, 74, 71),
- +(@ENTRY, 45, 1081, 1240, 1738, 0, 0, 0, 96, 64, 169, 75, 72),
- +(@ENTRY, 46, 1119, 1267, 1773, 0, 0, 0, 98, 65, 173, 77, 73),
- +(@ENTRY, 47, 1158, 1294, 1808, 0, 0, 0, 100, 66, 177, 78, 75),
- +(@ENTRY, 48, 1196, 1320, 1843, 0, 0, 0, 102, 68, 181, 80, 76),
- +(@ENTRY, 49, 1234, 1347, 1878, 0, 0, 0, 105, 69, 186, 82, 78),
- +(@ENTRY, 50, 2877, 2391, 3494, 113, 149, 194, 107, 71, 190, 84, 80),
- +(@ENTRY, 51, 2920, 2435, 3559, 122, 160, 198, 109, 72, 223, 97, 81),
- +(@ENTRY, 52, 3164, 2481, 3624, 127, 167, 202, 111, 73, 228, 100, 82),
- +(@ENTRY, 53, 3207, 2527, 3686, 127, 167, 206, 113, 75, 233, 102, 84),
- +(@ENTRY, 54, 3350, 2573, 3752, 0, 0, 0, 116, 77, 238, 104, 87),
- +(@ENTRY, 55, 3493, 2620, 3814, 0, 0, 0, 119, 78, 243, 106, 88),
- +(@ENTRY, 56, 3536, 2766, 3878, 135, 176, 220, 120, 79, 248, 108, 89),
- +(@ENTRY, 57, 3680, 2814, 3941, 0, 0, 0, 123, 82, 251, 111, 92),
- +(@ENTRY, 58, 3723, 2913, 4006, 0, 0, 0, 125, 84, 255, 113, 94),
- +(@ENTRY, 59, 3866, 2924, 4067, 0, 0, 0, 128, 86, 258, 115, 96),
- +(@ENTRY, 60, 3909, 3174, 4635, 0, 0, 0, 130, 87, 270, 118, 98),
- +(@ENTRY, 61, 4054, 3225, 6300, 0, 0, 0, 132, 90, 274, 121, 101),
- +(@ENTRY, 62, 4300, 3377, 6276, 240, 329, 246, 133, 36, 279, 124, 102),
- +(@ENTRY, 63, 4545, 3430, 6440, 0, 0, 0, 137, 93, 286, 123, 105),
- +(@ENTRY, 64, 4691, 3584, 6550, 0, 0, 0, 139, 95, 295, 128, 107),
- +(@ENTRY, 65, 4749, 3646, 6612, 0, 0, 0, 142, 98, 300, 129, 110),
- +(@ENTRY, 66, 4876, 3778, 6910, 0, 0, 0, 144, 99, 306, 130, 112),
- +(@ENTRY, 67, 4984, 3863, 7150, 0, 0, 0, 146, 101, 310, 131, 114),
- +(@ENTRY, 68, 5197, 3949, 7450, 0, 0, 0, 148, 105, 325, 132, 117),
- +(@ENTRY, 69, 5208, 4035, 7800, 0, 0, 0, 151, 107, 335, 133, 119),
- +(@ENTRY, 70, 5320, 4170, 7927, 176, 232, 323, 153, 108, 351, 196, 122),
- +(@ENTRY, 71, 5471, 4277, 8267, 0, 0, 0, 155, 109, 359, 204, 124),
- +(@ENTRY, 72, 5623, 4384, 8607, 0, 0, 0, 158, 111, 367, 211, 125),
- +(@ENTRY, 73, 5776, 4492, 8952, 0, 0, 0, 161, 113, 375, 219, 128),
- +(@ENTRY, 74, 5930, 4600, 9297, 0, 0, 0, 164, 115, 382, 227, 130),
- +(@ENTRY, 75, 6085, 4709, 9647, 0, 0, 0, 166, 118, 390, 235, 132),
- +(@ENTRY, 76, 6241, 4818, 9997, 0, 0, 0, 170, 121, 399, 242, 135),
- +(@ENTRY, 77, 6398, 4927, 10352, 0, 0, 0, 172, 124, 407, 250, 138),
- +(@ENTRY, 78, 6556, 5036, 10712, 0, 0, 0, 174, 125, 414, 257, 141),
- +(@ENTRY, 79, 6711, 5144, 11067, 0, 0, 0, 176, 127, 423, 266, 145),
- +(@ENTRY, 80, 6872, 5266, 14033, 329, 495, 608, 314, 129, 428, 280, 209);
- +-- DK Ghoul
- +SET @ENTRY := 26125;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 48, 80, 10, 1, 3, 10, 20, 16, 13, 20, 8),
- +(@ENTRY, 2, 105, 106, 67, 2, 3, 30, 22, 17, 14, 21, 9),
- +(@ENTRY, 3, 162, 132, 124, 3, 4, 45, 24, 18, 15, 22, 10),
- +(@ENTRY, 4, 219, 158, 181, 3, 6, 60, 26, 19, 16, 23, 11),
- +(@ENTRY, 5, 276, 184, 238, 5, 7, 70, 28, 20, 17, 24, 12),
- +(@ENTRY, 6, 333, 210, 295, 6, 9, 75, 30, 21, 18, 25, 13),
- +(@ENTRY, 7, 390, 236, 352, 7, 11, 80, 32, 22, 19, 26, 14),
- +(@ENTRY, 8, 447, 262, 409, 9, 14, 85, 34, 23, 20, 27, 15),
- +(@ENTRY, 9, 504, 288, 466, 10, 15, 90, 36, 24, 21, 28, 16),
- +(@ENTRY, 10, 561, 314, 523, 11, 16, 95, 38, 25, 22, 29, 17),
- +(@ENTRY, 11, 618, 340, 580, 11, 17, 100, 40, 26, 23, 30, 18),
- +(@ENTRY, 12, 675, 366, 637, 12, 18, 105, 42, 27, 24, 31, 19),
- +(@ENTRY, 13, 732, 392, 694, 13, 19, 110, 44, 28, 25, 32, 20),
- +(@ENTRY, 14, 789, 418, 751, 13, 20, 115, 46, 29, 26, 33, 21),
- +(@ENTRY, 15, 846, 444, 808, 14, 21, 120, 48, 30, 27, 34, 22),
- +(@ENTRY, 16, 903, 470, 865, 15, 23, 125, 50, 31, 28, 35, 23),
- +(@ENTRY, 17, 960, 496, 922, 16, 24, 130, 52, 32, 29, 36, 24),
- +(@ENTRY, 18, 1017, 522, 979, 17, 25, 135, 54, 33, 30, 37, 25),
- +(@ENTRY, 19, 1074, 548, 1036, 18, 27, 140, 56, 34, 31, 38, 26),
- +(@ENTRY, 20, 1131, 574, 1093, 19, 28, 145, 58, 35, 32, 39, 27),
- +(@ENTRY, 21, 1188, 600, 1150, 20, 30, 150, 60, 36, 33, 40, 28),
- +(@ENTRY, 22, 1245, 626, 1207, 21, 31, 155, 62, 37, 34, 41, 29),
- +(@ENTRY, 23, 1302, 652, 1264, 22, 32, 160, 64, 38, 35, 42, 30),
- +(@ENTRY, 24, 1359, 678, 1321, 23, 33, 165, 66, 39, 36, 43, 31),
- +(@ENTRY, 25, 1416, 704, 1378, 24, 35, 170, 68, 40, 37, 44, 32),
- +(@ENTRY, 26, 1473, 730, 1435, 25, 36, 175, 70, 41, 38, 45, 33),
- +(@ENTRY, 27, 1530, 756, 1492, 26, 37, 180, 72, 42, 39, 46, 34),
- +(@ENTRY, 28, 1587, 782, 1549, 27, 39, 185, 74, 43, 40, 47, 35),
- +(@ENTRY, 29, 1644, 808, 1606, 28, 40, 190, 76, 44, 41, 48, 36),
- +(@ENTRY, 30, 1701, 834, 1663, 29, 41, 195, 78, 45, 42, 49, 37),
- +(@ENTRY, 31, 1758, 860, 1720, 30, 43, 200, 80, 46, 43, 50, 38),
- +(@ENTRY, 32, 1815, 886, 1777, 30, 44, 205, 82, 47, 44, 51, 39),
- +(@ENTRY, 33, 1872, 912, 1834, 31, 45, 210, 84, 48, 45, 52, 40),
- +(@ENTRY, 34, 1929, 938, 1891, 32, 46, 215, 86, 49, 46, 53, 41),
- +(@ENTRY, 35, 1986, 964, 1948, 33, 47, 220, 88, 50, 47, 54, 42),
- +(@ENTRY, 36, 2043, 990, 2005, 34, 48, 225, 90, 51, 48, 55, 43),
- +(@ENTRY, 37, 2100, 1016, 2062, 35, 50, 230, 92, 52, 49, 56, 44),
- +(@ENTRY, 38, 2157, 1042, 2119, 37, 51, 235, 94, 53, 50, 57, 45),
- +(@ENTRY, 39, 2214, 1068, 2176, 38, 53, 240, 96, 54, 51, 58, 46),
- +(@ENTRY, 40, 2271, 1094, 2233, 40, 55, 245, 98, 55, 52, 59, 47),
- +(@ENTRY, 41, 2328, 1120, 2290, 41, 57, 250, 100, 56, 53, 60, 48),
- +(@ENTRY, 42, 2385, 1146, 2347, 43, 59, 255, 102, 57, 54, 61, 49),
- +(@ENTRY, 43, 2442, 1172, 2404, 44, 61, 260, 104, 58, 55, 62, 50),
- +(@ENTRY, 44, 2499, 1198, 2461, 46, 64, 265, 106, 59, 56, 63, 51),
- +(@ENTRY, 45, 2556, 1224, 2518, 48, 69, 270, 108, 60, 57, 64, 52),
- +(@ENTRY, 46, 2613, 1250, 2575, 50, 73, 275, 110, 61, 58, 65, 53),
- +(@ENTRY, 47, 2670, 1276, 2632, 52, 77, 280, 112, 62, 59, 66, 54),
- +(@ENTRY, 48, 2727, 1302, 2689, 54, 80, 285, 114, 63, 60, 67, 55),
- +(@ENTRY, 49, 2784, 1328, 2746, 57, 83, 290, 116, 64, 61, 68, 56),
- +(@ENTRY, 50, 2841, 1354, 2803, 60, 86, 295, 118, 65, 62, 69, 57),
- +(@ENTRY, 51, 2898, 1380, 2860, 63, 87, 300, 120, 66, 63, 70, 58),
- +(@ENTRY, 52, 2955, 1406, 2917, 64, 88, 305, 122, 67, 64, 71, 59),
- +(@ENTRY, 53, 3012, 1432, 2974, 65, 89, 310, 124, 68, 65, 72, 60),
- +(@ENTRY, 54, 3069, 1458, 3031, 66, 91, 315, 126, 69, 66, 73, 61),
- +(@ENTRY, 55, 3126, 1484, 3088, 66, 93, 320, 128, 70, 67, 74, 62),
- +(@ENTRY, 56, 3183, 1510, 3145, 67, 94, 325, 130, 71, 68, 75, 63),
- +(@ENTRY, 57, 3240, 1536, 3202, 69, 96, 330, 132, 72, 69, 76, 64),
- +(@ENTRY, 58, 3297, 1562, 3259, 74, 102, 335, 134, 73, 70, 77, 65),
- +(@ENTRY, 59, 3354, 1588, 3316, 78, 109, 340, 136, 74, 71, 78, 66),
- +(@ENTRY, 60, 3411, 1614, 3373, 84, 116, 345, 138, 75, 72, 79, 67),
- +(@ENTRY, 61, 3468, 1640, 3430, 88, 123, 350, 140, 76, 73, 80, 68),
- +(@ENTRY, 62, 3525, 1666, 3487, 92, 127, 365, 142, 77, 74, 81, 69),
- +(@ENTRY, 63, 3582, 1692, 3544, 96, 130, 380, 144, 78, 75, 82, 70),
- +(@ENTRY, 64, 3639, 1718, 3601, 100, 136, 395, 146, 79, 76, 83, 71),
- +(@ENTRY, 65, 3696, 1744, 3658, 105, 142, 410, 148, 80, 77, 84, 72),
- +(@ENTRY, 66, 3753, 1770, 3715, 110, 148, 425, 150, 81, 78, 85, 73),
- +(@ENTRY, 67, 3810, 1796, 3772, 115, 154, 440, 152, 82, 79, 86, 74),
- +(@ENTRY, 68, 3867, 1822, 3829, 120, 160, 455, 154, 83, 80, 87, 75),
- +(@ENTRY, 69, 3924, 1848, 3886, 125, 166, 470, 156, 84, 81, 88, 76),
- +(@ENTRY, 70, 3981, 1874, 3943, 130, 170, 485, 158, 85, 82, 89, 77),
- +(@ENTRY, 71, 4038, 1900, 4000, 138, 174, 500, 160, 86, 83, 90, 78),
- +(@ENTRY, 72, 4095, 1926, 4057, 150, 195, 515, 162, 87, 84, 91, 79),
- +(@ENTRY, 73, 4152, 1952, 4114, 160, 210, 530, 164, 88, 85, 92, 80),
- +(@ENTRY, 74, 4209, 1978, 4171, 180, 240, 545, 166, 89, 86, 93, 81),
- +(@ENTRY, 75, 4266, 2004, 4228, 200, 270, 550, 168, 90, 87, 94, 82),
- +(@ENTRY, 76, 4323, 2030, 4285, 220, 310, 565, 170, 91, 88, 95, 83),
- +(@ENTRY, 77, 4380, 2056, 4342, 240, 350, 580, 172, 92, 89, 96, 84),
- +(@ENTRY, 78, 4437, 2082, 4399, 270, 390, 595, 174, 93, 90, 97, 85),
- +(@ENTRY, 79, 4494, 2108, 4456, 290, 420, 610, 176, 94, 91, 98, 86),
- +(@ENTRY, 80, 4551, 2134, 4513, 310, 504, 622, 178, 95, 92, 99, 87);
- +-- Water elemental
- +SET @ENTRY := 37994;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 50, 1234, 1000, 108, 63, 87, 91, 13, 19, 50, 43, 53),
- +(@ENTRY, 51, 1250, 1115, 112, 64, 88, 94, 15, 20, 51, 44, 54),
- +(@ENTRY, 52, 1271, 1135, 128, 65, 90, 96, 17, 21, 52, 44, 55),
- +(@ENTRY, 53, 1280, 1152, 183, 66, 92, 98, 19, 22, 53, 45, 56),
- +(@ENTRY, 54, 1304, 1161, 237, 67, 93, 99, 22, 23, 54, 45, 57),
- +(@ENTRY, 55, 1329, 1182, 292, 68, 95, 102, 24, 24, 55, 47, 58),
- +(@ENTRY, 56, 1341, 1200, 348, 69, 96, 104, 27, 25, 57, 47, 59),
- +(@ENTRY, 57, 1355, 1234, 402, 86, 100, 105, 29, 26, 58, 48, 60),
- +(@ENTRY, 58, 1364, 1242, 457, 104, 109, 106, 31, 27, 59, 48, 61),
- +(@ENTRY, 59, 1372, 1259, 512, 110, 115, 109, 34, 28, 60, 49, 62),
- +(@ENTRY, 60, 1381, 1262, 814, 134, 123, 112, 35, 29, 61, 50, 63),
- +(@ENTRY, 61, 1390, 1274, 1113, 157, 145, 114, 36, 30, 62, 51, 64),
- +(@ENTRY, 62, 1400, 1282, 1410, 179, 162, 116, 37, 31, 63, 52, 65),
- +(@ENTRY, 63, 1411, 1291, 1708, 190, 166, 126, 38, 32, 64, 53, 66),
- +(@ENTRY, 64, 1419, 1300, 1006, 182, 170, 142, 39, 33, 65, 54, 67),
- +(@ENTRY, 65, 1429, 1304, 1303, 186, 178, 153, 40, 34, 66, 55, 68),
- +(@ENTRY, 66, 1435, 1321, 1601, 189, 187, 163, 41, 35, 67, 56, 69),
- +(@ENTRY, 67, 1450, 1330, 1900, 192, 198, 172, 42, 36, 68, 57, 70),
- +(@ENTRY, 68, 1458, 1341, 1197, 199, 210, 181, 43, 37, 69, 58, 71),
- +(@ENTRY, 69, 1464, 1351, 2008, 122, 144, 127, 44, 36, 70, 77, 72),
- +(@ENTRY, 70, 1528, 1568, 2207, 138, 174, 135, 45, 39, 71, 78, 73),
- +(@ENTRY, 71, 1580, 1632, 2319, 142, 224, 182, 48, 40, 72, 82, 75),
- +(@ENTRY, 72, 1639, 1695, 2431, 146, 312, 204, 50, 41, 74, 83, 77),
- +(@ENTRY, 73, 1699, 1763, 2544, 154, 368, 255, 53, 44, 76, 85, 80),
- +(@ENTRY, 74, 1761, 1830, 2660, 162, 424, 301, 54, 45, 78, 87, 82),
- +(@ENTRY, 75, 1821, 1896, 2760, 168, 482, 390, 56, 46, 79, 89, 84),
- +(@ENTRY, 76, 1882, 1964, 2890, 184, 520, 470, 57, 48, 80, 90, 85),
- +(@ENTRY, 77, 1949, 2033, 2999, 212, 59, 550, 58, 50, 83, 92, 90),
- +(@ENTRY, 78, 2011, 2100, 3110, 263, 640, 622, 59, 54, 85, 94, 91),
- +(@ENTRY, 79, 2073, 2167, 3150, 322, 720, 710, 60, 61, 88, 96, 92),
- +(@ENTRY, 80, 3200, 2800, 4000, 410, 850, 820, 62, 86, 92, 101, 94);
- +-- Mirror image
- +SET @ENTRY := 31216;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 80, 2680, 2400, 8600, 182, 216, 110, 72, 86, 152, 191, 94);
- +-- Priest Shadowfiend
- +SET @ENTRY := 19668;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 66, 6888, 3195, 2745, 125, 480, 770, 48, 71, 78, 87, 87),
- +(@ENTRY, 67, 6944, 3252, 2900, 130, 520, 780, 49, 72, 79, 88, 88),
- +(@ENTRY, 68, 6000, 3300, 3061, 135, 550, 790, 50, 73, 80, 89, 89),
- +(@ENTRY, 69, 6056, 3360, 3229, 140, 590, 800, 51, 75, 81, 90, 90),
- +(@ENTRY, 70, 6112, 3420, 3400, 145, 610, 810, 52, 76, 82, 89, 91),
- +(@ENTRY, 71, 6169, 3478, 3561, 150, 635, 820, 53, 77, 83, 92, 92),
- +(@ENTRY, 72, 6227, 3535, 3721, 155, 655, 830, 54, 78, 84, 93, 93),
- +(@ENTRY, 73, 6283, 3594, 3882, 160, 680, 840, 55, 79, 85, 94, 94),
- +(@ENTRY, 74, 6342, 3653, 4041, 165, 700, 850, 56, 80, 86, 95, 95),
- +(@ENTRY, 75, 6403, 3711, 4199, 170, 720, 860, 57, 81, 87, 96, 96),
- +(@ENTRY, 76, 6459, 3772, 4363, 175, 750, 870, 58, 82, 88, 97 ,97),
- +(@ENTRY, 77, 6518, 3833, 4400, 180, 780, 880, 59, 83, 89, 96, 98),
- +(@ENTRY, 78, 6576, 3894, 4420, 185, 600, 890, 60, 84, 90, 98, 99),
- +(@ENTRY, 79, 6645, 3954, 4400, 188, 615, 900, 61, 85, 91, 100, 100),
- +(@ENTRY, 80, 7266, 4759, 4500, 190, 620, 910, 62, 86, 92, 101, 102);
- +-- Spirit wolf
- +SET @ENTRY := 29264;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 40, 5271, 1094, 2233, 73, 100, 190, 98, 55, 52, 59, 47),
- +(@ENTRY, 41, 5328, 1120, 2290, 75, 110, 220, 100, 56, 53, 60, 48),
- +(@ENTRY, 42, 5385, 1146, 2347, 76, 130, 240, 102, 57, 54, 61, 49),
- +(@ENTRY, 43, 5442, 1172, 2404, 78, 160, 260, 104, 58, 55, 62, 50),
- +(@ENTRY, 44, 5499, 1198, 2461, 80, 180, 280, 106, 59, 56, 63, 51),
- +(@ENTRY, 45, 5556, 1224, 2518, 85, 200, 300, 108, 60, 57, 64, 52),
- +(@ENTRY, 46, 5613, 1250, 2575, 90, 220, 320, 110, 61, 58, 65, 53),
- +(@ENTRY, 47, 5670, 1276, 2632, 95, 240, 340, 112, 62, 59, 66, 54),
- +(@ENTRY, 48, 5727, 1302, 2689, 100, 260, 360, 114, 63, 60, 67, 55),
- +(@ENTRY, 49, 5784, 1328, 2746, 110, 280, 380, 116, 64, 61, 68, 56),
- +(@ENTRY, 50, 5841, 1354, 2803, 120, 300, 400, 118, 65, 62, 69, 57),
- +(@ENTRY, 51, 5898, 1380, 2860, 130, 350, 440, 120, 66, 63, 70, 58),
- +(@ENTRY, 52, 5955, 1406, 2917, 140, 400, 470, 122, 67, 64, 71, 59),
- +(@ENTRY, 53, 5012, 1432, 2974, 150, 450, 500, 124, 68, 65, 72, 60),
- +(@ENTRY, 54, 6069, 1458, 3031, 160, 480, 520, 126, 69, 66, 73, 61),
- +(@ENTRY, 55, 6126, 1484, 3088, 170, 500, 550, 128, 70, 67, 74, 62),
- +(@ENTRY, 56, 6183, 1510, 3145, 180, 520, 600, 130, 71, 68, 75, 63),
- +(@ENTRY, 57, 6240, 1536, 3202, 190, 545, 620, 132, 72, 69, 76, 64),
- +(@ENTRY, 58, 6297, 1562, 3259, 200, 560, 640, 134, 73, 70, 77, 65),
- +(@ENTRY, 59, 6354, 1588, 3316, 210, 575, 660, 136, 74, 71, 78, 66),
- +(@ENTRY, 60, 6411, 1614, 3373, 220, 600, 680, 138, 75, 72, 79, 67),
- +(@ENTRY, 61, 6468, 1640, 3430, 230, 620, 700, 140, 76, 73, 80, 68),
- +(@ENTRY, 62, 6525, 1666, 3487, 240, 630, 720, 142, 77, 74, 81, 69),
- +(@ENTRY, 63, 6582, 1692, 3544, 250, 655, 740, 144, 78, 75, 82, 70),
- +(@ENTRY, 64, 6639, 1718, 3601, 260, 670, 760, 146, 79, 76, 83, 71),
- +(@ENTRY, 65, 6696, 1744, 3658, 270, 685, 790, 148, 80, 77, 84, 72),
- +(@ENTRY, 66, 6753, 1770, 3715, 280, 705, 810, 150, 81, 78, 85, 73),
- +(@ENTRY, 67, 6810, 1796, 3772, 290, 720, 820, 152, 82, 79, 86, 74),
- +(@ENTRY, 68, 6867, 1822, 3829, 300, 730, 840, 154, 83, 80, 87, 75),
- +(@ENTRY, 69, 6924, 1848, 3886, 310, 740, 860, 156, 84, 81, 88, 76),
- +(@ENTRY, 70, 7200, 1890, 3800, 320, 750, 900, 158, 82, 79, 92, 88),
- +(@ENTRY, 71, 8038, 1900, 4000, 325, 760, 930, 160, 86, 83, 90, 78),
- +(@ENTRY, 72, 8095, 1926, 4057, 330, 770, 940, 162, 87, 84, 91, 79),
- +(@ENTRY, 73, 8152, 1952, 4114, 340, 780, 950, 164, 88, 85, 92, 80),
- +(@ENTRY, 74, 8209, 1978, 4171, 350, 790, 960, 166, 89, 86, 93, 81),
- +(@ENTRY, 75, 8266, 2004, 4228, 360, 800, 970, 168, 90, 87, 94, 82),
- +(@ENTRY, 76, 8323, 2030, 4285, 370, 810, 980, 170, 91, 88, 95, 83),
- +(@ENTRY, 77, 8380, 2056, 4342, 380, 820, 990, 172, 92, 89, 96, 84),
- +(@ENTRY, 78, 8437, 2082, 4399, 390, 830, 1000,174, 93, 90, 97, 85),
- +(@ENTRY, 79, 8494, 2108, 4456, 400, 840, 1090,176, 94, 91, 98, 86),
- +(@ENTRY, 80, 8600, 3800, 4800, 410, 850, 1100,180, 122,92, 101, 94);
- +-- Greater Earth Elemental
- +SET @ENTRY := 15352;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 66, 7100, 1840, 7000, 50, 83, 672, 132, 62, 96, 132, 320),
- +(@ENTRY, 67, 7464, 1860, 7521, 50, 84, 682, 141, 64, 100, 134, 330),
- +(@ENTRY, 68, 7828, 1880, 8042, 51, 85, 692, 150, 66, 105, 136, 340),
- +(@ENTRY, 69, 8192, 1900, 8564, 52, 86, 702, 159, 68, 110, 139, 350),
- +(@ENTRY, 70, 8557, 1920, 9085, 52, 87, 712, 168, 70, 114, 141, 360),
- +(@ENTRY, 71, 8921, 1940, 9607, 53, 89, 722, 178, 72, 119, 143, 370),
- +(@ENTRY, 72, 9285, 1960, 10128, 54, 90, 732, 187, 74, 124, 146, 380),
- +(@ENTRY, 73, 9650, 1980, 10650, 55, 91, 742, 196, 76, 129, 148, 390),
- +(@ENTRY, 74, 10014, 2000, 11171, 55, 92, 752, 205, 78, 133, 150, 400),
- +(@ENTRY, 75, 10378, 2020, 11692, 56, 93, 762, 214, 80, 138, 153, 410),
- +(@ENTRY, 76, 10742, 2040, 12214, 57, 95, 772, 224, 82, 143, 155, 420),
- +(@ENTRY, 77, 11107, 2060, 12735, 57, 96, 782, 233, 84, 147, 157, 430),
- +(@ENTRY, 78, 11471, 2080, 13257, 58, 97, 792, 242, 86, 152, 160, 440),
- +(@ENTRY, 79, 11835, 2100, 13778, 59, 98, 802, 251, 88, 157, 162, 450),
- +(@ENTRY, 80, 12200, 2120, 14300, 60,100, 812, 261, 90, 162, 165, 460);
- +-- Greater Fire Elemental
- +SET @ENTRY := 15438;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 68, 6800, 2052, 980, 123, 164, 1100, 230, 138, 99, 320, 340),
- +(@ENTRY, 69, 6900, 2071, 990, 126, 167, 1130, 241, 139, 101, 327, 350),
- +(@ENTRY, 70, 7000, 2090, 1000, 129, 171, 1160, 252, 141, 103, 334, 360),
- +(@ENTRY, 71, 7100, 2109, 1010, 132, 175, 1190, 264, 143, 105, 341, 370),
- +(@ENTRY, 72, 7200, 2128, 1020, 135, 179, 1220, 275, 145, 107, 348, 380),
- +(@ENTRY, 73, 7300, 2147, 1030, 138, 183, 1250, 286, 147, 109, 355, 390),
- +(@ENTRY, 74, 7400, 2166, 1040, 141, 187, 1280, 298, 149, 112, 362, 400),
- +(@ENTRY, 75, 7500, 2185, 1050, 144, 190, 1310, 309, 150, 114, 369, 410),
- +(@ENTRY, 76, 7600, 2204, 1060, 147, 194, 1340, 320, 152, 116, 376, 420),
- +(@ENTRY, 77, 7700, 2223, 1070, 150, 198, 1370, 332, 154, 118, 383, 430),
- +(@ENTRY, 78, 7800, 2242, 1080, 153, 202, 1400, 343, 156, 120, 390, 440),
- +(@ENTRY, 79, 7900, 2261, 1090, 156, 206, 1430, 354, 158, 122, 397, 450),
- +(@ENTRY, 80, 8000, 2280, 1100, 160, 210, 1480, 366, 160, 125, 405, 460);
- +-- Mage Water elemental (old guardian)
- +SET @ENTRY := 510;
- +DELETE FROM `pet_levelstats` WHERE `creature_entry` = @ENTRY;
- +INSERT INTO `pet_levelstats` (`creature_entry`, `level`, `hp`, `mana`, `armor`, `mindmg`, `maxdmg`, `attackpower`, `str`, `agi`, `sta`, `inte`, `spi`) VALUES
- +(@ENTRY, 1, 42, 22, 20, 2, 3, 10, 22, 20, 22, 20, 20),
- +(@ENTRY, 50, 1234, 1000, 108, 63, 87, 91, 13, 19, 50, 43, 53),
- +(@ENTRY, 51, 1250, 1115, 112, 64, 88, 94, 15, 20, 51, 44, 54),
- +(@ENTRY, 52, 1271, 1135, 128, 65, 90, 96, 17, 21, 52, 44, 55),
- +(@ENTRY, 53, 1280, 1152, 183, 66, 92, 98, 19, 22, 53, 45, 56),
- +(@ENTRY, 54, 1304, 1161, 237, 67, 93, 99, 22, 23, 54, 45, 57),
- +(@ENTRY, 55, 1329, 1182, 292, 68, 95, 102, 24, 24, 55, 47, 58),
- +(@ENTRY, 56, 1341, 1200, 348, 69, 96, 104, 27, 25, 57, 47, 59),
- +(@ENTRY, 57, 1355, 1234, 402, 86, 100, 105, 29, 26, 58, 48, 60),
- +(@ENTRY, 58, 1364, 1242, 457, 104, 109, 106, 31, 27, 59, 48, 61),
- +(@ENTRY, 59, 1372, 1259, 512, 110, 115, 109, 34, 28, 60, 49, 62),
- +(@ENTRY, 60, 1381, 1262, 814, 134, 123, 112, 35, 29, 61, 50, 63),
- +(@ENTRY, 61, 1390, 1274, 1113, 157, 145, 114, 36, 30, 62, 51, 64),
- +(@ENTRY, 62, 1400, 1282, 1410, 179, 162, 116, 37, 31, 63, 52, 65),
- +(@ENTRY, 63, 1411, 1291, 1708, 190, 166, 126, 38, 32, 64, 53, 66),
- +(@ENTRY, 64, 1419, 1300, 1006, 182, 170, 142, 39, 33, 65, 54, 67),
- +(@ENTRY, 65, 1429, 1304, 1303, 186, 178, 153, 40, 34, 66, 55, 68),
- +(@ENTRY, 66, 1435, 1321, 1601, 189, 187, 163, 41, 35, 67, 56, 69),
- +(@ENTRY, 67, 1450, 1330, 1900, 192, 198, 172, 42, 36, 68, 57, 70),
- +(@ENTRY, 68, 1458, 1341, 1197, 199, 210, 181, 43, 37, 69, 58, 71),
- +(@ENTRY, 69, 1464, 1351, 2008, 122, 144, 127, 44, 36, 70, 77, 72),
- +(@ENTRY, 70, 1528, 1568, 2207, 138, 174, 135, 45, 39, 71, 78, 73),
- +(@ENTRY, 71, 1580, 1632, 2319, 142, 224, 182, 48, 40, 72, 82, 75),
- +(@ENTRY, 72, 1639, 1695, 2431, 146, 312, 204, 50, 41, 74, 83, 77),
- +(@ENTRY, 73, 1699, 1763, 2544, 154, 368, 255, 53, 44, 76, 85, 80),
- +(@ENTRY, 74, 1761, 1830, 2660, 162, 424, 301, 54, 45, 78, 87, 82),
- +(@ENTRY, 75, 1821, 1896, 2760, 168, 482, 390, 56, 46, 79, 89, 84),
- +(@ENTRY, 76, 1882, 1964, 2890, 184, 520, 470, 57, 48, 80, 90, 85),
- +(@ENTRY, 77, 1949, 2033, 2999, 212, 590, 550, 58, 50, 83, 92, 90),
- +(@ENTRY, 78, 2011, 2100, 3110, 263, 640, 622, 59, 54, 85, 94, 91),
- +(@ENTRY, 79, 2073, 2167, 3150, 322, 720, 710, 60, 61, 88, 96, 92),
- +(@ENTRY, 80, 2300, 2200, 3250, 360, 780, 740, 62, 86, 92, 99, 93);
- \ No newline at end of file
- diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
- index 9eca786..9e5ce79 100755
- --- a/src/server/game/AI/CoreAI/PetAI.cpp
- +++ b/src/server/game/AI/CoreAI/PetAI.cpp
- @@ -470,3 +470,19 @@ bool PetAI::CanAttack(Unit* target)
- // default, though we shouldn't ever get here
- return false;
- }
- +
- +void PetAI::ReceiveEmote(Player* player, uint32 emote)
- +{
- + sLog->outError("recieved emote : %d", emote);
- + switch (emote)
- + {
- + case TEXT_EMOTE_COWER:
- + if (me->isPet() && me->ToPet()->IsPetGhoul())
- + me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
- + break;
- + case TEXT_EMOTE_ANGRY:
- + if (me->isPet() && me->ToPet()->IsPetGhoul())
- + me->HandleEmoteCommand(EMOTE_ONESHOT_COWER);
- + break;
- + }
- +}
- \ No newline at end of file
- diff --git a/src/server/game/AI/CoreAI/PetAI.h b/src/server/game/AI/CoreAI/PetAI.h
- index 730ab12..ff392d8 100755
- --- a/src/server/game/AI/CoreAI/PetAI.h
- +++ b/src/server/game/AI/CoreAI/PetAI.h
- @@ -40,6 +40,7 @@ class PetAI : public CreatureAI
- void KilledUnit(Unit* /*victim*/);
- void AttackStart(Unit* target);
- void MovementInform(uint32 moveType, uint32 data);
- + void ReceiveEmote(Player* player, uint32 textEmote);
- private:
- bool _isVisible(Unit*) const;
- diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h
- index 4ffcdb3..3ce5bdb 100755
- --- a/src/server/game/AI/CreatureAIImpl.h
- +++ b/src/server/game/AI/CreatureAIImpl.h
- @@ -582,7 +582,10 @@ inline bool CreatureAI::_EnterEvadeMode()
- return false;
- // dont remove vehicle auras, passengers arent supposed to drop off the vehicle
- - me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE);
- + if (me->isGuardian())
- + me->RemoveAllNonPassiveAurasExceptType(SPELL_AURA_CONTROL_VEHICLE);
- + else
- + me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE);
- // sometimes bosses stuck in combat?
- me->DeleteThreatList();
- diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
- index 9cb77ac..51b1cde 100755
- --- a/src/server/game/Entities/Creature/Creature.cpp
- +++ b/src/server/game/Entities/Creature/Creature.cpp
- @@ -612,7 +612,6 @@ void Creature::RegenerateMana()
- {
- float ManaIncreaseRate = sWorld->getRate(RATE_POWER_MANA);
- float Spirit = GetStat(STAT_SPIRIT);
- -
- addvalue = uint32((Spirit / 5.0f + 17.0f) * ManaIncreaseRate);
- }
- }
- @@ -647,12 +646,19 @@ void Creature::RegenerateHealth()
- if (GetCharmerOrOwnerGUID())
- {
- float HealthIncreaseRate = sWorld->getRate(RATE_HEALTH);
- - float Spirit = GetStat(STAT_SPIRIT);
- + if (isGuardian())
- + {
- + addvalue = ((Guardian*)this)->OCTRegenHPPerSpirit() * HealthIncreaseRate;
- + }
- + if (!addvalue)
- + {
- + float Spirit = GetStat(STAT_SPIRIT);
- - if (GetPower(POWER_MANA) > 0)
- - addvalue = uint32(Spirit * 0.25 * HealthIncreaseRate);
- - else
- - addvalue = uint32(Spirit * 0.80 * HealthIncreaseRate);
- + if (GetPower(POWER_MANA) > 0)
- + addvalue = uint32(Spirit * 0.25 * HealthIncreaseRate);
- + else
- + addvalue = uint32(Spirit * 0.80 * HealthIncreaseRate);
- + }
- }
- else
- addvalue = maxValue/3;
- diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
- index aae450a..72d76f6 100755
- --- a/src/server/game/Entities/Creature/TemporarySummon.cpp
- +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
- @@ -24,7 +24,7 @@
- TempSummon::TempSummon(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) :
- Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
- -m_timer(0), m_lifetime(0)
- +m_timer(0), m_lifetime(0), m_bonusSpellDamage(0)
- {
- m_summonerGUID = owner ? owner->GetGUID() : 0;
- m_unitTypeMask |= UNIT_MASK_SUMMON;
- @@ -307,7 +307,7 @@ bool Minion::IsGuardianPet() const
- }
- Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) : Minion(properties, owner, isWorldObject)
- -, m_bonusSpellDamage(0)
- +, m_meleeCrit(0), m_spellCrit(0)
- {
- memset(m_statFromOwner, 0, sizeof(float)*MAX_STATS);
- m_unitTypeMask |= UNIT_MASK_GUARDIAN;
- diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
- index 6b9e6b6..4caf606 100755
- --- a/src/server/game/Entities/Creature/TemporarySummon.h
- +++ b/src/server/game/Entities/Creature/TemporarySummon.h
- @@ -36,6 +36,8 @@ class TempSummon : public Creature
- Unit* GetSummoner() const;
- uint64 GetSummonerGUID() { return m_summonerGUID; }
- TempSummonType const& GetSummonType() { return m_type; }
- + int32 GetBonusDamage() { return m_bonusSpellDamage; }
- + void SetBonusDamage(int32 damage);
- const SummonPropertiesEntry* const m_Properties;
- private:
- @@ -43,6 +45,7 @@ class TempSummon : public Creature
- uint32 m_timer;
- uint32 m_lifetime;
- uint64 m_summonerGUID;
- + int32 m_bonusSpellDamage;
- };
- class Minion : public TempSummon
- @@ -77,11 +80,28 @@ class Guardian : public Minion
- void UpdateMaxPower(Powers power);
- void UpdateAttackPowerAndDamage(bool ranged = false);
- void UpdateDamagePhysical(WeaponAttackType attType);
- + void UpdateSpellCritChance();
- + void UpdateMeleeCritChance();
- - int32 GetBonusDamage() { return m_bonusSpellDamage; }
- - void SetBonusDamage(int32 damage);
- + float GetSpellCritFromIntellect();
- + float GetMeleeCritFromAgility();
- + float OCTRegenHPPerSpirit();
- + float OCTRegenMPPerSpirit();
- +
- + void RecalculatePetScalingResistance(uint32 school);
- + void RecalculatePetScalingStats(Stats stat);
- + void RecalculatePetScalingAttackPower();
- + void RecalculatePetScalingDamageDone();
- + void RecalculatePetScalingAttackSpeed(WeaponAttackType att);
- + void RecalculatePetScalingHitRating();
- + void RecalculatePetScalingCritRating();
- + void RecalculateHappinessEffect();
- +
- + int32 GetSpellCrit() { return m_spellCrit; }
- + int32 GetMeleeCrit() { return m_meleeCrit; }
- protected:
- - int32 m_bonusSpellDamage;
- + float m_spellCrit;
- + float m_meleeCrit;
- float m_statFromOwner[MAX_STATS];
- };
- diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
- index 40e59bc..2d0e1ee 100755
- --- a/src/server/game/Entities/Pet/Pet.cpp
- +++ b/src/server/game/Entities/Pet/Pet.cpp
- @@ -210,6 +210,8 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
- SetByteFlag(UNIT_FIELD_BYTES_2, 2, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED);
- SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
- + SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 0.372f);
- + SetFloatValue(UNIT_FIELD_COMBATREACH, DEFAULT_COMBAT_REACH);
- // this enables popup window (pet abandon, cancel)
- SetMaxPower(POWER_HAPPINESS, GetCreatePowers(POWER_HAPPINESS));
- SetPower(POWER_HAPPINESS, fields[12].GetUInt32());
- @@ -232,21 +234,6 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
- SetReactState(ReactStates(fields[6].GetUInt8()));
- SetCanModifyStats(true);
- - if (getPetType() == SUMMON_PET && !current) //all (?) summon pets come with full health when called, but not when they are current
- - SetPower(POWER_MANA, GetMaxPower(POWER_MANA));
- - else
- - {
- - uint32 savedhealth = fields[10].GetUInt32();
- - uint32 savedmana = fields[11].GetUInt32();
- - if (!savedhealth && getPetType() == HUNTER_PET)
- - setDeathState(JUST_DIED);
- - else
- - {
- - SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth);
- - SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana);
- - }
- - }
- -
- // set current pet as current
- // 0=current
- // 1..MAX_PET_STABLES in stable slot
- @@ -297,6 +284,24 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petentry, uint32 petnumber, bool c
- CastPetAuras(current);
- }
- + if (getPetType() == SUMMON_PET && !current) //all (?) summon pets come with full health when called, but not when they are current
- + {
- + SetPower(POWER_MANA, GetMaxPower(POWER_MANA));
- + SetHealth(GetMaxHealth());
- + }
- + else
- + {
- + uint32 savedhealth = fields[10].GetUInt32();
- + uint32 savedmana = fields[11].GetUInt32();
- + if (!savedhealth && getPetType() == HUNTER_PET)
- + setDeathState(JUST_DIED);
- + else
- + {
- + SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth);
- + SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana);
- + }
- + }
- +
- CleanupActionBar(); // remove unknown spells from action bar after load
- sLog->outDebug(LOG_FILTER_PETS, "New Pet has guid %u", GetGUIDLow());
- @@ -760,6 +765,297 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phas
- return true;
- }
- +void Guardian::RecalculatePetScalingResistance(uint32 school)
- +{
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + switch (school)
- + {
- + case SPELL_SCHOOL_NORMAL:
- + if (isHunterPet())
- + {
- + auraId = 34904;
- + effIndex = EFFECT_2;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34956;
- + effIndex = EFFECT_1;
- + }
- + break;
- + case SPELL_SCHOOL_FIRE:
- + if (isHunterPet())
- + {
- + auraId = 34903;
- + effIndex = EFFECT_0;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34956;
- + effIndex = EFFECT_2;
- + }
- + break;
- + case SPELL_SCHOOL_NATURE:
- + if (isHunterPet())
- + {
- + auraId = 34903;
- + effIndex = EFFECT_2;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34957;
- + effIndex = EFFECT_2;
- + }
- + break;
- + case SPELL_SCHOOL_FROST:
- + if (isHunterPet())
- + {
- + auraId = 34903;
- + effIndex = EFFECT_1;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34957;
- + effIndex = EFFECT_0;
- + }
- + break;
- + case SPELL_SCHOOL_SHADOW:
- + if (isHunterPet())
- + {
- + auraId = 34904;
- + effIndex = EFFECT_0;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34958;
- + effIndex = EFFECT_0;
- + }
- + break;
- + case SPELL_SCHOOL_ARCANE:
- + if (isHunterPet())
- + {
- + auraId = 34904;
- + effIndex = EFFECT_1;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34957;
- + effIndex = EFFECT_1;
- + }
- + break;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (AuraEffect* aurEffect = GetAuraEffect(auraId, effIndex))
- + aurEffect->RecalculateAmount();
- +}
- +
- +void Guardian::RecalculatePetScalingStats(Stats stat)
- +{
- + if (stat >= MAX_STATS)
- + return;
- +
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + switch (stat)
- + {
- + case STAT_STAMINA:
- + if (IsPetGhoul())
- + {
- + auraId = 54566;
- + effIndex = EFFECT_0;
- + }
- + else if (isHunterPet())
- + {
- + auraId = 34902;
- + effIndex = EFFECT_0;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34947;
- + effIndex = EFFECT_0;
- + }
- + break;
- + case STAT_STRENGTH:
- + if (IsPetGhoul())
- + {
- + auraId = 54566;
- + effIndex = EFFECT_1;
- + }
- + break;
- + case STAT_INTELLECT:
- + if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34956;
- + effIndex = EFFECT_0;
- + }
- + break;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (AuraEffect* aurEffect = GetAuraEffect(auraId, effIndex))
- + aurEffect->RecalculateAmount();
- +}
- +
- +void Guardian::RecalculatePetScalingAttackPower()
- +{
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + if (isHunterPet())
- + {
- + auraId = 34902;
- + effIndex = EFFECT_1;
- + }
- + else if (IsPetGhoul())
- + {
- + auraId = 0;
- + effIndex = EFFECT_0;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34947;
- + effIndex = EFFECT_1;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (AuraEffect* aurEffect = GetAuraEffect(auraId, effIndex))
- + aurEffect->RecalculateAmount();
- +}
- +
- +void Guardian::RecalculatePetScalingDamageDone()
- +{
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + if (isHunterPet())
- + {
- + auraId = 34902;
- + effIndex = EFFECT_2;
- + }
- + else if (IsPetGhoul())
- + {
- + auraId = 54566;
- + effIndex = EFFECT_2;
- + }
- + else if (GetEntry() == 27893)
- + {
- + auraId = 51906;
- + effIndex = EFFECT_0;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 34947;
- + effIndex = EFFECT_2;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (AuraEffect* aurEffect = GetAuraEffect(auraId, effIndex))
- + aurEffect->RecalculateAmount();
- +}
- +
- +void Guardian::RecalculatePetScalingAttackSpeed(WeaponAttackType att)
- +{
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + if (IsPetGhoul())
- + {
- + auraId = 51996;
- + effIndex = EFFECT_1;
- + }
- + else if (GetEntry() == 27893)
- + {
- + auraId = 51906;
- + effIndex = EFFECT_1;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (AuraEffect* aurEffect = GetAuraEffect(auraId, effIndex))
- + aurEffect->RecalculateAmount();
- +}
- +
- +void Guardian::RecalculatePetScalingHitRating()
- +{
- + uint32 auraId = 0;
- +
- + if (isHunterPet())
- + {
- + auraId = 61017;
- + }
- + else if (IsPetGhoul() || GetEntry() == 27829)
- + {
- + auraId = 61697;
- + }
- + else if (GetEntry() == 29264)
- + {
- + auraId = 61783;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 61013;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (Aura* aura = GetAura(auraId))
- + aura->RecalculateAmountOfEffects();
- +}
- +
- +void Guardian::RecalculatePetScalingCritRating()
- +{
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + if (isHunterPet())
- + {
- + auraId = 0;
- + effIndex = EFFECT_0;
- + }
- + else if (m_owner && m_owner->getClass() == CLASS_WARLOCK)
- + {
- + auraId = 35695;
- + effIndex = EFFECT_1;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (Aura* aura = GetAura(auraId))
- + aura->RecalculateAmountOfEffects();
- +}
- +
- +void Guardian::RecalculateHappinessEffect()
- +{
- + uint32 auraId = 0;
- + uint8 effIndex = EFFECT_0;
- +
- + if (isHunterPet())
- + {
- + auraId = 8875;
- + effIndex = EFFECT_0;
- + }
- +
- + if (!auraId)
- + return;
- +
- + if (AuraEffect* aurEffect = GetAuraEffect(auraId, effIndex))
- + aurEffect->RecalculateAmount();
- +}
- +
- // TODO: Move stat mods code to pet passive auras
- bool Guardian::InitStatsForLevel(uint8 petlevel)
- {
- @@ -829,6 +1125,9 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- for (uint8 stat = 0; stat < MAX_STATS; ++stat)
- SetCreateStat(Stats(stat), float(pInfo->stats[stat]));
- +
- + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, pInfo->mindmg);
- + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, pInfo->maxdmg);
- }
- else // not exist in DB, use some default fake data
- {
- @@ -842,6 +1141,9 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- SetCreateStat(STAT_STAMINA, 25);
- SetCreateStat(STAT_INTELLECT, 28);
- SetCreateStat(STAT_SPIRIT, 27);
- +
- + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
- + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
- }
- SetBonusDamage(0);
- @@ -849,43 +1151,17 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- {
- case SUMMON_PET:
- {
- - //bonusAP += val * 0.57;
- - float minDamage = 0.0f;
- - float maxDamage = 0.0f;
- - float attackPower = 0.0f;
- - float multiplier = exp((float)petlevel/41);
- - switch (GetEntry())
- - {
- - case 417: // Felhunter
- - minDamage = (petlevel - (petlevel / 4)) * multiplier * 1.6f;
- - maxDamage = (petlevel + (petlevel / 4)) * multiplier * 1.6f;
- - attackPower = ((minDamage + maxDamage) /4)*7;
- - break;
- - case 1863: // Succubus
- - minDamage = (petlevel - (petlevel / 4)) * multiplier * 1.7f;
- - maxDamage = (petlevel + (petlevel / 4)) * multiplier * 1.7f;
- - attackPower = ((minDamage + maxDamage) /4)*7;
- - break;
- - case 17252: // Felguard
- - minDamage = (petlevel - (petlevel / 4)) * multiplier * 2.5f;
- - maxDamage = (petlevel + (petlevel / 4)) * multiplier * 2.5f;
- - attackPower = ((minDamage + maxDamage) /4)*7;
- - break;
- - case 11859: // Doomguard
- - minDamage = (petlevel - (petlevel / 4)) * multiplier * 2.5f;
- - maxDamage = (petlevel + (petlevel / 4)) * multiplier * 2.5f;
- - attackPower = ((minDamage + maxDamage) /4)*7;
- - break;
- - default:
- - minDamage = (petlevel - (petlevel / 4)) * multiplier;
- - maxDamage = (petlevel + (petlevel / 4)) * multiplier;
- - attackPower = ((minDamage + maxDamage) /4)*7;
- - break;
- - }
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, minDamage);
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxDamage);
- - SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackPower);
- - SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, GetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE) + float(m_owner->GetArmor()) * 0.35f); // Bonus Armor (35% of player armor)
- + /*float mod = 1;
- + if (petlevel < 60)
- + mod = 1;
- + else if (petlevel < 70)
- + mod = 2 + (petlevel-70)/10;
- + else
- + mod = 5 + (petlevel-80)/4;
- + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel - (petlevel / 4))*mod));
- + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel + (petlevel / 4))*mod));
- +
- + //SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, float(cinfo->attackpower));*/
- break;
- }
- case HUNTER_PET:
- @@ -893,9 +1169,9 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR));
- //these formula may not be correct; however, it is designed to be close to what it should be
- //this makes dps 0.5 of pets level
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
- //damage range is then petlevel / 2
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
- //damage is increased afterwards as strength and pet scaling modify attack power
- break;
- }
- @@ -913,8 +1189,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- if (!pInfo)
- SetCreateHealth(30 + 30*petlevel);
- float bonusDmg = m_owner->SpellBaseDamageBonus(SPELL_SCHOOL_MASK_NATURE) * 0.15f;
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 2.5f - (petlevel / 2) + bonusDmg));
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 2.5f + (petlevel / 2) + bonusDmg));
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 2.5f - (petlevel / 2) + bonusDmg));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 2.5f + (petlevel / 2) + bonusDmg));
- break;
- }
- case 15352: //earth elemental 36213
- @@ -922,8 +1198,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- if (!pInfo)
- SetCreateHealth(100 + 120*petlevel);
- SetBonusDamage(m_owner->SpellBaseDamageBonus(SPELL_SCHOOL_MASK_NATURE) * 0.15f);
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (float(petlevel - (petlevel / 4)) * exp((float)petlevel/41))*0.9f);
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (float(petlevel + (petlevel / 4)) * exp((float)petlevel/41))*0.9f);
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
- break;
- }
- case 15438: //fire elemental
- @@ -934,8 +1210,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- SetCreateMana(28 + 10*petlevel);
- }
- SetBonusDamage(m_owner->SpellBaseDamageBonus(SPELL_SCHOOL_MASK_FIRE) * 0.5f);
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)) * exp((float)petlevel/41));
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)) * exp((float)petlevel/41));
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 4 - petlevel));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 4 + petlevel));
- break;
- }
- case 19668: // Shadowfiend
- @@ -946,8 +1222,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- SetCreateHealth(28 + 30*petlevel);
- }
- int32 bonus_dmg = (int32(m_owner->SpellBaseDamageBonus(SPELL_SCHOOL_MASK_SHADOW)* 0.3f));
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel) + bonus_dmg));
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel) + bonus_dmg));
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel) + bonus_dmg));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel) + bonus_dmg));
- break;
- }
- @@ -975,13 +1251,15 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier));
- // 14AP == 1dps, wolf's strike speed == 2s so dmg = basedmg + AP / 14 * 2
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel) + (m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier * 2 / 14)));
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel) + (m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier * 2 / 14)));
- -
- - SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, GetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE) + float(m_owner->GetArmor()) * 0.35f); // Bonus Armor (35% of player armor)
- - SetModifierValue(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(m_owner->GetStat(STAT_STAMINA)) * 0.3f); // Bonus Stamina (30% of player stamina)
- - if (!HasAura(58877))//prevent apply twice for the 2 wolves
- - AddAura(58877, this);//Spirit Hunt, passive, Spirit Wolves' attacks heal them and their master for 150% of damage done.
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float((petlevel * 4 - petlevel) + (m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier * 2 / 14)));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float((petlevel * 4 + petlevel) + (m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * dmg_multiplier * 2 / 14)));
- +
- + SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(m_owner->GetArmor()) * 0.35f); // Bonus Armor (35% of player armor)
- + SetModifierValue(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(m_owner->GetStat(STAT_STAMINA)) * 0.3f); // Bonus Stamina (30% of player stamina)
- + if (!HasAura(58877)) //prevent apply twice for the 2 wolves
- + AddAura(58877, this); //Spirit Hunt, passive, Spirit Wolves' attacks heal them and their master for 150% of damage done.
- + if (!HasAura(61783)) // prevent apply twice for the 2 wolves
- + AddAura(61783, this); // Feral Pet Scaling
- break;
- }
- case 31216: // Mirror Image
- @@ -1002,51 +1280,128 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
- SetCreateMana(28 + 10*petlevel);
- SetCreateHealth(28 + 30*petlevel);
- }
- - SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.4f));
- + SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.5f));
- SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
- SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
- + ApplyCastTimePercentMod((1-m_owner->m_modAttackSpeedPct[BASE_ATTACK])*100, true);
- + RemoveAurasDueToSpell(61697);
- + CastSpell(this, 61697, true);
- + RemoveAurasDueToSpell(62137);
- + CastSpell(this, 62137, true);
- break;
- }
- - case 12922: // Imp Minion
- case 8996: // Voidwalker Minion
- case 2676: // Compact Harvest Repair
- + case 24476: // Minor Voidwalker
- {
- - SetLevel(m_owner->getLevel());
- SetCreateMana(28 + 10 * petlevel);
- SetCreateHealth(28 + 30 * petlevel);
- - SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.5f));
- - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)) * exp((float)petlevel/41));
- - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)) * exp((float)petlevel/41));
- + //SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4)));
- + //SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4)));
- break;
- }
- - case 11859: // Doomguard
- + case 28017: // Bloodworm
- {
- - float attackPower = 0;
- - float minDamage = (petlevel - (petlevel / 4)) * exp((float)petlevel/41) * 3.0f;
- - float maxDamage = (petlevel + (petlevel / 4)) * exp((float)petlevel/41) * 3.0f;
- - attackPower = ((minDamage + maxDamage) /4) * 7;
- + float minDamage = (petlevel - (petlevel / 4)) * 0.30f;
- + float maxDamage = (petlevel + (petlevel / 4)) * 0.30f;
- + SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.006f));
- SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, minDamage);
- SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxDamage);
- - SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackPower);
- - SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, GetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE) + float(m_owner->GetArmor()) * 0.35f); // Bonus Armor (35% of player armor)
- - SetModifierValue(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(m_owner->GetStat(STAT_STAMINA)) * 0.3f); // Bonus Stamina (30% of player stamina)
- - SetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE, GetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE) + float(m_owner->GetResistance(SPELL_SCHOOL_HOLY)) * 0.4f);
- - SetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, GetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE) + float(m_owner->GetResistance(SPELL_SCHOOL_FIRE)) * 0.4f);
- - SetModifierValue(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE, GetModifierValue(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE) + float(m_owner->GetResistance(SPELL_SCHOOL_NATURE)) * 0.4f);
- - SetModifierValue(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE, GetModifierValue(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE) + float(m_owner->GetResistance(SPELL_SCHOOL_FROST)) * 0.4f);
- - SetModifierValue(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE, GetModifierValue(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE) + float(m_owner->GetResistance(SPELL_SCHOOL_SHADOW)) * 0.4f);
- - SetModifierValue(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, GetModifierValue(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE) + float(m_owner->GetResistance(SPELL_SCHOOL_ARCANE)) * 0.4f);
- - SetModifierValue(UNIT_MOD_STAT_INTELLECT, BASE_VALUE, float(m_owner->GetStat(STAT_INTELLECT)) * 0.3f);
- break;
- }
- - case 28017: // Bloodworm
- + case 27893: // Dancing Rune Weapon
- {
- - float attackPower = 0;
- - float minDamage = (petlevel - (petlevel / 4)) * exp((float)petlevel/41) * 0.25f;
- - float maxDamage = (petlevel + (petlevel / 4)) * exp((float)petlevel/41) * 0.25f;
- - SetBonusDamage(int32(m_owner->GetTotalAttackPowerValue(BASE_ATTACK) * 0.006f));
- + SetReducedThreatPercent(100, m_owner->GetGUID());
- + RemoveAurasDueToSpell(61697);
- + CastSpell(this, 61697, true);
- + RemoveAurasDueToSpell(51906);
- + CastSpell(this, 51906, true);
- + RemoveAurasDueToSpell(62137);
- + CastSpell(this, 62137, true);
- + break;
- + }
- + case 26125: // Risen Ghoul
- + {
- + RemoveAurasDueToSpell(61697);
- + CastSpell(this, 61697, true);
- + RemoveAurasDueToSpell(54566);
- + CastSpell(this, 54566, true);
- + RemoveAurasDueToSpell(51996);
- + CastSpell(this, 51996, true);
- + RemoveAurasDueToSpell(62137);
- + CastSpell(this, 62137, true);
- + break;
- + }
- + case 89: // Infernal
- + {
- + if (m_owner->GetTypeId() == TYPEID_PLAYER)
- + {
- + int32 fire = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- + int32 shadow = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
- + int32 maximum = (fire > shadow) ? fire : shadow;
- + if (maximum < 0)
- + maximum = 0;
- + SetBonusDamage(int32(maximum * 0.15f));
- + }
- + float mod = 1;
- + if (petlevel < 60)
- + mod = 5 + (petlevel-50)/4;
- + if (petlevel < 70)
- + mod = 10 + (petlevel-70)/4;
- + else
- + mod = 15 + (petlevel-80)/2;
- + if (mod < 0)
- + mod = 0;
- + float minDamage = (petlevel - (petlevel / 4))*mod;
- + float maxDamage = (petlevel + (petlevel / 4))*mod;
- + float attackPower = ((minDamage + maxDamage) /4)*7;
- SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, minDamage);
- SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxDamage);
- + SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackPower);
- + break;
- + }
- + case 11859: // Doomguard
- + {
- + if (m_owner->GetTypeId() == TYPEID_PLAYER)
- + {
- + int32 fire = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- + int32 shadow = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
- + int32 maximum = (fire > shadow) ? fire : shadow;
- + if (maximum < 0)
- + maximum = 0;
- + SetBonusDamage(int32(maximum * 0.15f));
- + }
- + if (!pInfo) // not exist in DB
- + {
- + // remove elite bonuses included in DB values
- + CreatureTemplate const *cinfo = GetCreatureInfo();
- + CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class);
- + SetCreateHealth(stats->BaseHealth[cinfo->expansion]);
- + SetCreateMana(stats->BaseMana);
- +
- + SetStat(STAT_STRENGTH, 22);
- + SetStat(STAT_AGILITY, 22);
- + SetStat(STAT_STAMINA, 25);
- + SetStat(STAT_INTELLECT, 28);
- + SetStat(STAT_SPIRIT, 27);
- + }
- + float mod = 1;
- + if (petlevel < 70)
- + mod = 10 + (petlevel-70)/2;
- + else
- + mod = 20 + (petlevel-80);
- + if (mod < 0)
- + mod = 0;
- + float minDamage = (petlevel - (petlevel / 4))*mod;
- + float maxDamage = (petlevel + (petlevel / 4))*mod;
- + float attackPower = ((minDamage + maxDamage) /4)*7;
- + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, minDamage);
- + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxDamage);
- + SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackPower);
- + RemoveAurasDueToSpell(32233);
- + CastSpell(this, 32233, true);
- + RemoveAurasDueToSpell(35695);
- + CastSpell(this, 35695, true);
- break;
- }
- }
- @@ -1986,6 +2341,14 @@ void Pet::CastPetAuras(bool current)
- else
- CastPetAura(pa);
- }
- +
- + if (IsPetGhoul())
- + {
- + RemoveAurasDueToSpell(61697);
- + CastSpell(this, 61697, true);
- + RemoveAurasDueToSpell(62137);
- + CastSpell(this, 62137, true);
- + }
- }
- void Pet::CastPetAura(PetAura const* aura)
- diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
- index 68b6aa3..56e72a2 100755
- --- a/src/server/game/Entities/Unit/StatSystem.cpp
- +++ b/src/server/game/Entities/Unit/StatSystem.cpp
- @@ -64,9 +64,7 @@ bool Player::UpdateStats(Stats stat)
- if (stat == STAT_STAMINA || stat == STAT_INTELLECT || stat == STAT_STRENGTH)
- {
- - Pet* pet = GetPet();
- - if (pet)
- - pet->UpdateStats(stat);
- + RecalculatePetsScalingStats(stat);
- }
- switch (stat)
- @@ -150,6 +148,8 @@ void Player::UpdateSpellDamageAndHealingBonus()
- // Get damage bonus for all schools
- for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i)
- SetStatInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS+i, SpellBaseDamageBonus(SpellSchoolMask(1 << i)));
- + RecalculatePetsScalingAttackPower();
- + RecalculatePetsScalingDamageDone();
- }
- bool Player::UpdateAllStats()
- @@ -191,9 +191,7 @@ void Player::UpdateResistances(uint32 school)
- float value = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school));
- SetResistance(SpellSchools(school), int32(value));
- - Pet* pet = GetPet();
- - if (pet)
- - pet->UpdateResistances(school);
- + RecalculatePetsScalingResistance(school);
- }
- else
- UpdateArmor();
- @@ -221,9 +219,7 @@ void Player::UpdateArmor()
- SetArmor(int32(value));
- - Pet* pet = GetPet();
- - if (pet)
- - pet->UpdateArmor();
- + RecalculatePetsScalingResistance(SPELL_SCHOOL_NORMAL);
- UpdateAttackPowerAndDamage(); // armor dependent auras update for SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR
- }
- @@ -448,8 +444,6 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
- if (ranged)
- {
- UpdateDamagePhysical(RANGED_ATTACK);
- - if (pet && pet->isHunterPet()) // At ranged attack change for hunter pet
- - pet->UpdateAttackPowerAndDamage();
- }
- else
- {
- @@ -458,10 +452,10 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)
- UpdateDamagePhysical(OFF_ATTACK);
- if (getClass() == CLASS_SHAMAN || getClass() == CLASS_PALADIN) // mental quickness
- UpdateSpellDamageAndHealingBonus();
- -
- - if (pet && pet->IsPetGhoul()) // At ranged attack change for hunter pet
- - pet->UpdateAttackPowerAndDamage();
- }
- +
- + RecalculatePetsScalingAttackPower();
- + RecalculatePetsScalingDamageDone();
- }
- void Player::UpdateShieldBlockValue()
- @@ -785,12 +779,14 @@ void Player::UpdateSpellHitChances()
- {
- m_modSpellHitChance = (float)GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- m_modSpellHitChance += GetRatingBonusValue(CR_HIT_SPELL);
- + RecalculatePetsScalingHitRating();
- }
- void Player::UpdateAllSpellCritChances()
- {
- for (int i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
- UpdateSpellCritChance(i);
- + RecalculatePetsScalingCritRating();
- }
- void Player::UpdateExpertise(WeaponAttackType attack)
- @@ -1077,8 +1073,8 @@ bool Guardian::UpdateStats(Stats stat)
- return false;
- // value = ((base_value * base_pct) + total_value) * total_pct
- - float value = GetTotalStatValue(stat);
- - ApplyStatBuffMod(stat, m_statFromOwner[stat], false);
- + float value = GetTotalStatValue(stat);
- + /*ApplyStatBuffMod(stat, m_statFromOwner[stat], false);
- float ownersBonus = 0.0f;
- Unit* owner = GetOwner();
- @@ -1088,8 +1084,8 @@ bool Guardian::UpdateStats(Stats stat)
- {
- switch (stat)
- {
- - case STAT_STAMINA: mod = 0.3f; break; // Default Owner's Stamina scale
- - case STAT_STRENGTH: mod = 0.7f; break; // Default Owner's Strength scale
- + case STAT_STAMINA: mod = 0.3f; break; // Default Owner's Stamina scale
- + case STAT_STRENGTH: mod = 0.7f; break; // Default Owner's Strength scale
- default: break;
- }
- // Ravenous Dead
- @@ -1098,13 +1094,13 @@ bool Guardian::UpdateStats(Stats stat)
- aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
- if (aurEff)
- {
- - SpellInfo const* spellInfo = aurEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value
- - AddPctN(mod, spellInfo->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale
- + SpellInfo const* spellInfo = aurEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value
- + AddPctN(mod, spellInfo->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale
- }
- // Glyph of the Ghoul
- aurEff = owner->GetAuraEffect(58686, 0);
- if (aurEff)
- - mod += CalculatePctN(1.0f, aurEff->GetAmount()); // Glyph of the Ghoul adds a flat value to the scale mod
- + mod += CalculatePctN(1.0f, aurEff->GetAmount()); // Glyph of the Ghoul adds a flat value to the scale mod
- ownersBonus = float(owner->GetStat(stat)) * mod;
- value += ownersBonus;
- }
- @@ -1122,9 +1118,9 @@ bool Guardian::UpdateStats(Stats stat)
- {
- PetSpellMap::const_iterator itr = (ToPet()->m_spells.find(62758)); // Wild Hunt rank 1
- if (itr == ToPet()->m_spells.end())
- - itr = ToPet()->m_spells.find(62762); // Wild Hunt rank 2
- + itr = ToPet()->m_spells.find(62762); // Wild Hunt rank 2
- - if (itr != ToPet()->m_spells.end()) // If pet has Wild Hunt
- + if (itr != ToPet()->m_spells.end()) // If pet has Wild Hunt
- {
- SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value
- AddPctN(mod, spellInfo->Effects[EFFECT_0].CalcValue());
- @@ -1144,23 +1140,31 @@ bool Guardian::UpdateStats(Stats stat)
- }
- }
- /*
- - else if (stat == STAT_STRENGTH)
- - {
- - if (IsPetGhoul())
- - value += float(owner->GetStat(stat)) * 0.3f;
- - }
- +else if (stat == STAT_STRENGTH)
- +{
- +if (IsPetGhoul())
- +value += float(owner->GetStat(stat)) * 0.3f;
- +}
- */
- SetStat(stat, int32(value));
- - m_statFromOwner[stat] = ownersBonus;
- - ApplyStatBuffMod(stat, m_statFromOwner[stat], true);
- + //m_statFromOwner[stat] = ownersBonus;
- + //ApplyStatBuffMod(stat, m_statFromOwner[stat], true);
- switch (stat)
- {
- - case STAT_STRENGTH: UpdateAttackPowerAndDamage(); break;
- - case STAT_AGILITY: UpdateArmor(); break;
- - case STAT_STAMINA: UpdateMaxHealth(); break;
- - case STAT_INTELLECT: UpdateMaxPower(POWER_MANA); break;
- + case STAT_STRENGTH:
- + UpdateAttackPowerAndDamage();
- + break;
- + case STAT_AGILITY:
- + UpdateArmor();
- + UpdateMeleeCritChance();
- + break;
- + case STAT_STAMINA: UpdateMaxHealth(); break;
- + case STAT_INTELLECT:
- + UpdateMaxPower(POWER_MANA);
- + UpdateSpellCritChance();
- + break;
- case STAT_SPIRIT:
- default:
- break;
- @@ -1193,8 +1197,8 @@ void Guardian::UpdateResistances(uint32 school)
- float value = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school));
- // hunter and warlock pets gain 40% of owner's resistance
- - if (isPet())
- - value += float(CalculatePctN(m_owner->GetResistance(SpellSchools(school)), 40));
- + //if (isPet() && !IsPetGhoul())
- + // value += float(CalculatePctN(m_owner->GetResistance(SpellSchools(school)), 40));
- SetResistance(SpellSchools(school), int32(value));
- }
- @@ -1209,13 +1213,14 @@ void Guardian::UpdateArmor()
- UnitMods unitMod = UNIT_MOD_ARMOR;
- // hunter and warlock pets gain 35% of owner's armor value
- - if (isPet())
- - bonus_armor = float(CalculatePctN(m_owner->GetArmor(), 35));
- + //if (isPet() && !IsPetGhoul())
- + // bonus_armor = float(CalculatePctN(m_owner->GetArmor(), 35));
- value = GetModifierValue(unitMod, BASE_VALUE);
- value *= GetModifierValue(unitMod, BASE_PCT);
- value += GetStat(STAT_AGILITY) * 2.0f;
- - value += GetModifierValue(unitMod, TOTAL_VALUE) + bonus_armor;
- + value += GetModifierValue(unitMod, TOTAL_VALUE);
- + //value += GetModifierValue(unitMod, TOTAL_VALUE) + bonus_armor;
- value *= GetModifierValue(unitMod, TOTAL_PCT);
- SetArmor(int32(value));
- @@ -1231,22 +1236,19 @@ void Guardian::UpdateMaxHealth()
- {
- case ENTRY_IMP: multiplicator = 8.4f; break;
- case ENTRY_VOIDWALKER: multiplicator = 11.0f; break;
- - case ENTRY_SUCCUBUS: multiplicator = 9.1f; break;
- + case ENTRY_SUCCUBUS: multiplicator = 9.0f; break;
- case ENTRY_FELHUNTER: multiplicator = 9.5f; break;
- case ENTRY_FELGUARD: multiplicator = 11.0f; break;
- default: multiplicator = 10.0f; break;
- }
- + if (m_owner->GetTypeId() != TYPEID_PLAYER && !m_owner->isTotem())
- + multiplicator = 0.0f;
- +
- float value = GetModifierValue(unitMod, BASE_VALUE) + GetCreateHealth();
- value *= GetModifierValue(unitMod, BASE_PCT);
- value += GetModifierValue(unitMod, TOTAL_VALUE) + stamina * multiplicator;
- value *= GetModifierValue(unitMod, TOTAL_PCT);
- -
- - if (GetEntry() == ENTRY_GHOUL || GetEntry() == ENTRY_RISEN_ALLY)
- - {
- - stamina = GetStat(STAT_STAMINA);
- - value = stamina * multiplicator;
- - }
- SetMaxHealth((uint32)value);
- }
- @@ -1284,12 +1286,19 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
- float bonusAP = 0.0f;
- UnitMods unitMod = UNIT_MOD_ATTACK_POWER;
- + val = GetStat(STAT_STRENGTH) - 20.0f;
- +
- + /*
- + float val = 0.0f;
- + float bonusAP = 0.0f;
- + UnitMods unitMod = UNIT_MOD_ATTACK_POWER;
- +
- if (GetEntry() == ENTRY_IMP) // imp's attack power
- val = GetStat(STAT_STRENGTH) - 10.0f;
- else if (GetEntry() == ENTRY_GHOUL)
- - val = GetStat(STAT_STRENGTH) + 138.0f; // ghoul attack power
- + val = 2 * (GetStat(STAT_STRENGTH) - 10); // ghoul attack power
- else
- - val = 2 * GetStat(STAT_STRENGTH) - 20.0f;
- + val = 2 * (GetStat(STAT_STRENGTH) - 20.0f);
- Unit* owner = GetOwner();
- if (owner && owner->GetTypeId() == TYPEID_PLAYER)
- @@ -1336,25 +1345,19 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged)
- frost = 0;
- SetBonusDamage(int32(frost * 0.4f));
- }
- - }
- + }*/
- + uint32 entry = isHunterPet() ? 1 : GetEntry();
- + PetLevelInfo const* pInfo = sObjectMgr->GetPetLevelInfo(entry, getLevel());
- + if (pInfo) // exist in DB
- + val += pInfo->attackpower;
- - SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, val + bonusAP);
- + SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, val);
- //in BASE_VALUE of UNIT_MOD_ATTACK_POWER for creatures we store data of meleeattackpower field in DB
- float base_attPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT);
- float attPowerMod = GetModifierValue(unitMod, TOTAL_VALUE);
- float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f;
- - // Glyph of Felguard
- - if (GetEntry() == 17252)
- - {
- - if (owner->HasAura(56246))
- - {
- - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(56246); // Then get the SpellProto and add the dummy effect value
- - attPowerMultiplier += CalculatePctN(1.0f, spellInfo->Effects[1].MiscValue);
- - }
- - }
- -
- //UNIT_FIELD_(RANGED)_ATTACK_POWER field
- SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower);
- //UNIT_FIELD_(RANGED)_ATTACK_POWER_MODS field
- @@ -1374,19 +1377,24 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
- float bonusDamage = 0.0f;
- if (m_owner->GetTypeId() == TYPEID_PLAYER)
- {
- - //force of nature
- - if (GetEntry() == ENTRY_TREANT)
- + switch (GetEntry())
- {
- - int32 spellDmg = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_NATURE)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_NATURE);
- - if (spellDmg > 0)
- - bonusDamage = spellDmg * 0.09f;
- - }
- - //greater fire elemental
- - else if (GetEntry() == ENTRY_FIRE_ELEMENTAL)
- - {
- - int32 spellDmg = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- - if (spellDmg > 0)
- - bonusDamage = spellDmg * 0.4f;
- + //force of nature
- + case ENTRY_TREANT:
- + {
- + int32 spellDmg = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_NATURE)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_NATURE);
- + if (spellDmg > 0)
- + bonusDamage = spellDmg * 0.09f;
- + break;
- + }
- + //greater fire elemental
- + case ENTRY_FIRE_ELEMENTAL:
- + {
- + int32 spellDmg = int32(m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - m_owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- + if (spellDmg > 0)
- + bonusDamage = spellDmg * 0.4f;
- + break;
- + }
- }
- }
- @@ -1394,7 +1402,7 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
- float att_speed = float(GetAttackTime(BASE_ATTACK))/1000.0f;
- - float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed + bonusDamage;
- + float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed + bonusDamage;
- float base_pct = GetModifierValue(unitMod, BASE_PCT);
- float total_value = GetModifierValue(unitMod, TOTAL_VALUE);
- float total_pct = GetModifierValue(unitMod, TOTAL_PCT);
- @@ -1406,7 +1414,7 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
- float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct;
- // Pet's base damage changes depending on happiness
- - if (isHunterPet() && attType == BASE_ATTACK)
- + /*if (isHunterPet() && attType == BASE_ATTACK)
- {
- switch (ToPet()->GetHappinessState())
- {
- @@ -1424,7 +1432,7 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
- maxdamage = maxdamage * 0.75f;
- break;
- }
- - }
- + }*/
- Unit::AuraEffectList const& mDummy = GetAuraEffectsByType(SPELL_AURA_MOD_ATTACKSPEED);
- for (Unit::AuraEffectList::const_iterator itr = mDummy.begin(); itr != mDummy.end(); ++itr)
- @@ -1445,11 +1453,100 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)
- SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage);
- }
- -void Guardian::SetBonusDamage(int32 damage)
- +void TempSummon::SetBonusDamage(int32 damage)
- {
- + Player* player = GetCharmerOrOwnerPlayerOrPlayerItself();
- + if (!player)
- + return;
- + player->ApplyModUInt32Value(PLAYER_PET_SPELL_POWER, m_bonusSpellDamage, false);
- m_bonusSpellDamage = damage;
- - if (GetOwner()->GetTypeId() == TYPEID_PLAYER)
- - GetOwner()->SetUInt32Value(PLAYER_PET_SPELL_POWER, damage);
- + player->ApplyModUInt32Value(PLAYER_PET_SPELL_POWER, damage, true);
- +}
- +
- +void Guardian::UpdateSpellCritChance()
- +{
- + m_spellCrit = GetSpellCritFromIntellect();
- +}
- +
- +void Guardian::UpdateMeleeCritChance()
- +{
- + m_meleeCrit = GetMeleeCritFromAgility();
- +}
- +
- +float Guardian::GetSpellCritFromIntellect()
- +{
- + uint8 level = getLevel();
- + uint32 pclass = getClass();
- +
- + if (level > GT_MAX_LEVEL)
- + level = GT_MAX_LEVEL;
- +
- + GtChanceToSpellCritBaseEntry const* critBase = sGtChanceToSpellCritBaseStore.LookupEntry(pclass-1);
- + GtChanceToSpellCritEntry const* critRatio = sGtChanceToSpellCritStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
- + if (critBase == NULL || critRatio == NULL)
- + return 0.0f;
- +
- + float crit=critBase->base + GetStat(STAT_INTELLECT)*critRatio->ratio;
- + return crit*100.0f;
- +}
- +
- +float Guardian::GetMeleeCritFromAgility()
- +{
- + uint8 level = getLevel();
- + uint32 pclass = getClass();
- +
- + if (level > GT_MAX_LEVEL)
- + level = GT_MAX_LEVEL;
- +
- + GtChanceToMeleeCritBaseEntry const* critBase = sGtChanceToMeleeCritBaseStore.LookupEntry(pclass-1);
- + GtChanceToMeleeCritEntry const* critRatio = sGtChanceToMeleeCritStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
- + if (critBase == NULL || critRatio == NULL)
- + return 0.0f;
- +
- + float crit = critBase->base + GetStat(STAT_AGILITY)*critRatio->ratio;
- + return crit*100.0f;
- +}
- +
- +float Guardian::OCTRegenHPPerSpirit()
- +{
- + uint8 level = getLevel();
- + uint32 pclass = getClass();
- +
- + if (level > GT_MAX_LEVEL)
- + level = GT_MAX_LEVEL;
- +
- + GtOCTRegenHPEntry const* baseRatio = sGtOCTRegenHPStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
- + GtRegenHPPerSptEntry const* moreRatio = sGtRegenHPPerSptStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
- + if (baseRatio == NULL || moreRatio == NULL)
- + return 0.0f;
- +
- + // Formula from PaperDollFrame script
- + float spirit = GetStat(STAT_SPIRIT);
- + float baseSpirit = spirit;
- + if (baseSpirit > 50)
- + baseSpirit = 50;
- + float moreSpirit = spirit - baseSpirit;
- + float regen = baseSpirit * baseRatio->ratio + moreSpirit * moreRatio->ratio;
- + return regen;
- +}
- +
- +float Guardian::OCTRegenMPPerSpirit()
- +{
- + uint8 level = getLevel();
- + uint32 pclass = getClass();
- +
- + if (level > GT_MAX_LEVEL)
- + level = GT_MAX_LEVEL;
- +
- +// GtOCTRegenMPEntry const* baseRatio = sGtOCTRegenMPStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
- + GtRegenMPPerSptEntry const* moreRatio = sGtRegenMPPerSptStore.LookupEntry((pclass-1)*GT_MAX_LEVEL + level-1);
- + if (moreRatio == NULL)
- + return 0.0f;
- +
- + // Formula get from PaperDollFrame script
- + float spirit = GetStat(STAT_SPIRIT);
- + float regen = spirit * moreRatio->ratio;
- + return regen;
- }
- bool Puppet::UpdateStats(Stats stat)
- diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
- index ba0fab7..00e6da4 100755
- --- a/src/server/game/Entities/Unit/Unit.cpp
- +++ b/src/server/game/Entities/Unit/Unit.cpp
- @@ -2516,11 +2516,7 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit * victim, SpellInfo const * spell)
- modHitChance += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT, schoolMask);
- // Increase hit chance from attacker SPELL_AURA_MOD_SPELL_HIT_CHANCE and attacker ratings
- - Unit *owner = GetOwner();
- - if (owner && owner->GetTypeId() == TYPEID_PLAYER)
- - modHitChance += int32(owner->m_modSpellHitChance);
- - else
- - modHitChance += int32(m_modSpellHitChance);
- + modHitChance += int32(m_modSpellHitChance);
- if (modHitChance > 100)
- modHitChance = 100;
- @@ -2800,6 +2796,8 @@ float Unit::GetUnitCriticalChance(WeaponAttackType attackType, const Unit* victi
- else
- {
- crit = 5.0f;
- + if (isGuardian())
- + crit += ((Guardian*)this)->GetMeleeCrit();
- crit += GetTotalAuraModifier(SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
- crit += GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_PCT);
- }
- @@ -4161,6 +4159,27 @@ void Unit::RemoveAllAurasExceptType(AuraType type)
- }
- }
- +void Unit::RemoveAllNonPassiveAurasExceptType(AuraType type)
- +{
- + for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
- + {
- + Aura const* aura = iter->second->GetBase();
- + if (!aura->GetSpellInfo()->HasAura(type) && !aura->GetSpellInfo()->IsPassive())
- + _UnapplyAura(iter, AURA_REMOVE_BY_DEFAULT);
- + else
- + ++iter;
- + }
- +
- + for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();)
- + {
- + Aura* aura = iter->second;
- + if (!aura->GetSpellInfo()->HasAura(type) && !aura->GetSpellInfo()->IsPassive())
- + RemoveOwnedAura(iter, AURA_REMOVE_BY_DEFAULT);
- + else
- + ++iter;
- + }
- +}
- +
- void Unit::DelayOwnedAuras(uint32 spellId, uint64 caster, int32 delaytime)
- {
- for (AuraMap::iterator iter = m_ownedAuras.lower_bound(spellId); iter != m_ownedAuras.upper_bound(spellId);++iter)
- @@ -7715,9 +7734,10 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
- if (pPet && pPet->getVictim() && damage && procSpell)
- {
- - uint32 procDmg = damage / 2;
- - pPet->SendSpellNonMeleeDamageLog(pPet->getVictim(), procSpell->Id, procDmg, procSpell->GetSchoolMask(), 0, 0, false, 0, false);
- - pPet->DealDamage(pPet->getVictim(), procDmg, NULL, SPELL_DIRECT_DAMAGE, procSpell->GetSchoolMask(), procSpell, true);
- + pPet->CastSpell(pPet->getVictim(), procSpell->Id, true);
- + //uint32 procDmg = damage / 2;
- + //pPet->SendSpellNonMeleeDamageLog(pPet->getVictim(), procSpell->Id, procDmg, procSpell->GetSchoolMask(), 0, 0, false, 0, false);
- + //pPet->DealDamage(pPet->getVictim(), procDmg, NULL, SPELL_DIRECT_DAMAGE, procSpell->GetSchoolMask(), procSpell, true);
- break;
- }
- else
- @@ -10158,6 +10178,90 @@ void Unit::SetMinion(Minion *minion, bool apply)
- }
- }
- +void Unit::RecalculatePetsScalingResistance(uint32 school)
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingResistance(school);
- + }
- +}
- +
- +void Unit::RecalculatePetsScalingStats(Stats stats)
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingStats(stats);
- + }
- +}
- +
- +void Unit::RecalculatePetsScalingHitRating()
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingHitRating();
- + }
- +}
- +
- +void Unit::RecalculatePetsScalingCritRating()
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingCritRating();
- + }
- +}
- +
- +void Unit::RecalculatePetsScalingAttackSpeed(WeaponAttackType att)
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingAttackSpeed(att);
- + }
- +}
- +
- +void Unit::RecalculatePetsScalingAttackPower()
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingAttackPower();
- + }
- +}
- +
- +void Unit::RecalculatePetsScalingDamageDone()
- +{
- + for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- + {
- + Unit* unit = *itr;
- + ++itr;
- +
- + if (unit->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- + ((Guardian*)unit)->RecalculatePetScalingDamageDone();
- + }
- +}
- +
- void Unit::GetAllMinionsByEntry(std::list<Creature*>& Minions, uint32 entry)
- {
- for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end();)
- @@ -10905,8 +11009,8 @@ uint32 Unit::SpellDamageBonus(Unit* victim, SpellInfo const* spellProto, uint32
- int32 TakenAdvertisedBenefit = SpellBaseDamageBonusForVictim(spellProto->GetSchoolMask(), victim);
- // Pets just add their bonus damage to their spell damage
- // note that their spell damage is just gain of their own auras
- - if (HasUnitTypeMask(UNIT_MASK_GUARDIAN))
- - DoneAdvertisedBenefit += ((Guardian*)this)->GetBonusDamage();
- + if (isSummon() && isCharmedOwnedByPlayerOrPlayer())
- + DoneAdvertisedBenefit += ToTempSummon()->GetBonusDamage();
- // Check for table values
- float coeff = 0;
- @@ -10921,6 +11025,9 @@ uint32 Unit::SpellDamageBonus(Unit* victim, SpellInfo const* spellProto, uint32
- WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
- float APbonus = (float) victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS);
- APbonus += GetTotalAttackPowerValue(attType);
- + // Exception for Dancing Rune Weapon
- + if (HasUnitTypeMask(UNIT_MASK_GUARDIAN) && GetEntry() == 27893 && (spellProto->SchoolMask & SPELL_SCHOOL_MASK_MAGIC))
- + APbonus = ((Guardian*)this)->GetBonusDamage();
- DoneTotal += int32(bonus->ap_dot_bonus * stack * ApCoeffMod * APbonus);
- }
- }
- @@ -10932,6 +11039,9 @@ uint32 Unit::SpellDamageBonus(Unit* victim, SpellInfo const* spellProto, uint32
- WeaponAttackType attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
- float APbonus = (float) victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS);
- APbonus += GetTotalAttackPowerValue(attType);
- + // Exception for Dancing Rune Weapon
- + if (HasUnitTypeMask(UNIT_MASK_GUARDIAN) && GetEntry() == 27893 && (spellProto->SchoolMask & SPELL_SCHOOL_MASK_MAGIC))
- + APbonus = ((Guardian*)this)->GetBonusDamage();
- DoneTotal += int32(bonus->ap_bonus * stack * ApCoeffMod * APbonus);
- }
- }
- @@ -11123,10 +11233,11 @@ bool Unit::isSpellCrit(Unit* victim, SpellInfo const* spellProto, SpellSchoolMas
- // Mobs can't crit with spells.
- if (IS_CREATURE_GUID(GetGUID()))
- {
- - if (isGuardian() || isTotem())
- + if (isTotem())
- if (Unit* owner = this->GetCharmerOrOwner())
- return owner->isSpellCrit(victim, spellProto, schoolMask, attackType);
- - return false;
- + if (!isPet())
- + return false;
- }
- // not critting spell
- @@ -13994,7 +14105,7 @@ void Unit::SetPower(Powers power, uint32 val)
- // Update the pet's character sheet with happiness damage bonus
- if (pet->getPetType() == HUNTER_PET && power == POWER_HAPPINESS)
- - pet->UpdateDamagePhysical(BASE_ATTACK);
- + pet->RecalculateHappinessEffect();
- }
- }
- @@ -15254,9 +15365,9 @@ void Unit::ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply
- ApplyPercentModFloatValue(UNIT_FIELD_BASEATTACKTIME+att, -val, apply);
- }
- if (att == BASE_ATTACK && getClass() == CLASS_DEATH_KNIGHT)
- - if (Pet* pet = this->ToPlayer()->GetPet())
- - if (pet->IsPetGhoul())
- - pet->ApplyAttackTimePercentMod(att, val, apply);
- + {
- + RecalculatePetsScalingAttackSpeed(att);
- + }
- m_attackTimer[att] = uint32(GetAttackTime(att) * m_modAttackSpeedPct[att] * remainingTimePct);
- }
- diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
- index d25532f..4a4b12b 100755
- --- a/src/server/game/Entities/Unit/Unit.h
- +++ b/src/server/game/Entities/Unit/Unit.h
- @@ -1685,6 +1685,14 @@ class Unit : public WorldObject
- Player* GetCharmerOrOwnerPlayerOrPlayerItself() const;
- Player* GetAffectingPlayer() const;
- + void RecalculatePetsScalingResistance(uint32 school);
- + void RecalculatePetsScalingStats(Stats stats);
- + void RecalculatePetsScalingAttackPower();
- + void RecalculatePetsScalingDamageDone();
- + void RecalculatePetsScalingAttackSpeed(WeaponAttackType att);
- + void RecalculatePetsScalingHitRating();
- + void RecalculatePetsScalingCritRating();
- +
- void SetMinion(Minion *minion, bool apply);
- void GetAllMinionsByEntry(std::list<Creature*>& Minions, uint32 entry);
- void RemoveAllMinionsByEntry(uint32 entry);
- @@ -1779,6 +1787,7 @@ class Unit : public WorldObject
- void RemoveAllAurasOnDeath();
- void RemoveAllAurasRequiringDeadTarget();
- void RemoveAllAurasExceptType(AuraType type);
- + void RemoveAllNonPassiveAurasExceptType(AuraType type);
- void DelayOwnedAuras(uint32 spellId, uint64 caster, int32 delaytime);
- void _RemoveAllAuraStatMods();
- diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
- index 4a91139..82baff9 100755
- --- a/src/server/game/Globals/ObjectMgr.cpp
- +++ b/src/server/game/Globals/ObjectMgr.cpp
- @@ -2925,7 +2925,7 @@ void ObjectMgr::LoadPetLevelInfo()
- uint32 oldMSTime = getMSTime();
- // 0 1 2 3 4 5 6 7 8 9
- - QueryResult result = WorldDatabase.Query("SELECT creature_entry, level, hp, mana, str, agi, sta, inte, spi, armor FROM pet_levelstats");
- + QueryResult result = WorldDatabase.Query("SELECT creature_entry, level, hp, mana, str, agi, sta, inte, spi, armor, mindmg, maxdmg, attackpower FROM pet_levelstats");
- if (!result)
- {
- @@ -2976,6 +2976,9 @@ void ObjectMgr::LoadPetLevelInfo()
- pLevelInfo->health = fields[2].GetUInt16();
- pLevelInfo->mana = fields[3].GetUInt16();
- pLevelInfo->armor = fields[9].GetUInt16();
- + pLevelInfo->mindmg = fields[10].GetUInt16();
- + pLevelInfo->maxdmg = fields[11].GetUInt16();
- + pLevelInfo->attackpower = fields[12].GetUInt16();
- for (int i = 0; i < MAX_STATS; i++)
- {
- @@ -2986,15 +2989,21 @@ void ObjectMgr::LoadPetLevelInfo()
- }
- while (result->NextRow());
- + PetLevelInfo* petBaseInfo = _petInfoStore[1];
- + uint16 maxLevel = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) - 1;
- +
- // Fill gaps and check integrity
- for (PetLevelInfoContainer::iterator itr = _petInfoStore.begin(); itr != _petInfoStore.end(); ++itr)
- {
- + // Don't fill data for default pet
- + if (itr->first == 1)
- + continue;
- PetLevelInfo* pInfo = itr->second;
- - // fatal error if no level 1 data
- - if (!pInfo || pInfo[0].health == 0)
- + // fatal error if no level 1 or no max health data
- + if(!pInfo || pInfo[0].health == 0 || pInfo[maxLevel].health == 0 )
- {
- - sLog->outErrorDb("Creature %u does not have pet stats data for Level 1!", itr->first);
- + sLog->outErrorDb("Creature %u does not have pet stats data for Levels 1 or %u! Must be exist!", itr->first, maxLevel);
- exit(1);
- }
- @@ -3007,6 +3016,42 @@ void ObjectMgr::LoadPetLevelInfo()
- pInfo[level] = pInfo[level-1];
- }
- }
- +
- + for (uint8 level = 1; level < maxLevel; ++level)
- + {
- + if( pInfo[level].health == 0
- + || pInfo[level].mana == 0
- + || pInfo[level].armor == 0
- + || pInfo[level].mindmg == 0
- + || pInfo[level].maxdmg == 0
- + || pInfo[level].stats[STAT_STRENGTH] == 0
- + || pInfo[level].stats[STAT_STAMINA] == 0
- + || pInfo[level].stats[STAT_AGILITY] == 0
- + || pInfo[level].stats[STAT_INTELLECT] == 0
- + || pInfo[level].stats[STAT_SPIRIT] == 0
- + )
- + {
- + sLog->outErrorDb("Creature %u has no full data set for Level %i pet stats data, using approximated (from default pet progression) data",itr->first,level+1);
- +
- + if(pInfo[level].health == 0)
- + pInfo[level].health = uint16(pInfo[maxLevel].health * (petBaseInfo[level].health / petBaseInfo[maxLevel].health));
- + if(pInfo[level].mana == 0)
- + pInfo[level].mana = uint16(pInfo[maxLevel].mana * (petBaseInfo[level].mana / petBaseInfo[maxLevel].mana));
- + if(pInfo[level].armor == 0)
- + pInfo[level].armor = uint16(pInfo[maxLevel].armor * (petBaseInfo[level].armor / petBaseInfo[maxLevel].armor));
- + if(pInfo[level].mindmg == 0)
- + pInfo[level].mindmg = uint16(pInfo[maxLevel].mindmg * (petBaseInfo[level].mindmg / petBaseInfo[maxLevel].mindmg));
- + if(pInfo[level].maxdmg == 0)
- + pInfo[level].mana = uint16(pInfo[maxLevel].maxdmg * (petBaseInfo[level].maxdmg / petBaseInfo[maxLevel].maxdmg));
- + if(pInfo[level].attackpower == 0)
- + pInfo[level].mana = uint16(pInfo[maxLevel].attackpower * (petBaseInfo[level].attackpower / petBaseInfo[maxLevel].attackpower));
- + for (int i = 0; i < MAX_STATS; i++)
- + {
- + if(pInfo[level].stats[i] == 0)
- + pInfo[level].stats[i] = uint16(pInfo[maxLevel].stats[i] * (petBaseInfo[level].stats[i] / petBaseInfo[maxLevel].stats[i]));
- + }
- + }
- + }
- }
- sLog->outString(">> Loaded %u level pet stats definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
- diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
- index 6eb57ca..76a5219 100755
- --- a/src/server/game/Globals/ObjectMgr.h
- +++ b/src/server/game/Globals/ObjectMgr.h
- @@ -424,6 +424,9 @@ struct PetLevelInfo
- uint16 health;
- uint16 mana;
- uint16 armor;
- + uint16 mindmg;
- + uint16 maxdmg;
- + uint16 attackpower;
- };
- struct MailLevelReward
- diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
- index 356f6d9..e5bbcbd 100755
- --- a/src/server/game/Miscellaneous/SharedDefines.h
- +++ b/src/server/game/Miscellaneous/SharedDefines.h
- @@ -434,7 +434,7 @@ enum SpellAttr4
- SPELL_ATTR4_UNK22 = 0x00400000, // 22
- SPELL_ATTR4_UNK23 = 0x00800000, // 23
- SPELL_ATTR4_UNK24 = 0x01000000, // 24 some shoot spell
- - SPELL_ATTR4_UNK25 = 0x02000000, // 25 pet scaling auras
- + SPELL_ATTR4_PET_SCALING_AURA = 0x02000000, // 25 pet scaling auras
- SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland.
- SPELL_ATTR4_UNK27 = 0x08000000, // 27
- SPELL_ATTR4_UNK28 = 0x10000000, // 28 Aimed Shot
- diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
- index 281ba59..33b948d 100755
- --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
- +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
- @@ -3677,14 +3677,8 @@ void AuraEffect::HandleAuraModBaseResistancePCT(AuraApplication const* aurApp, u
- Unit* target = aurApp->GetTarget();
- - // only players have base stats
- - if (target->GetTypeId() != TYPEID_PLAYER)
- - {
- - //pets only have base armor
- - if (target->ToCreature()->isPet() && (GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL))
- - target->HandleStatModifier(UNIT_MOD_ARMOR, BASE_PCT, float(GetAmount()), apply);
- - }
- - else
- + // only players and pets have base stats
- + if (target->GetTypeId() == TYPEID_PLAYER || target->isPet())
- {
- for (int8 x = SPELL_SCHOOL_NORMAL; x < MAX_SPELL_SCHOOL; x++)
- {
- @@ -3722,14 +3716,8 @@ void AuraEffect::HandleModBaseResistance(AuraApplication const* aurApp, uint8 mo
- Unit* target = aurApp->GetTarget();
- - // only players have base stats
- - if (target->GetTypeId() != TYPEID_PLAYER)
- - {
- - //only pets have base stats
- - if (target->ToCreature()->isPet() && (GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL))
- - target->HandleStatModifier(UNIT_MOD_ARMOR, TOTAL_VALUE, float(GetAmount()), apply);
- - }
- - else
- + // only players and pets have base stats
- + if (target->GetTypeId() == TYPEID_PLAYER || target->isPet())
- {
- for (int i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; i++)
- {
- @@ -3800,8 +3788,8 @@ void AuraEffect::HandleModPercentStat(AuraApplication const* aurApp, uint8 mode,
- return;
- }
- - // only players have base stats
- - if (target->GetTypeId() != TYPEID_PLAYER)
- + // only players and pets have base stats
- + if (target->GetTypeId() != TYPEID_PLAYER && !target->isPet())
- return;
- for (int32 i = STAT_STRENGTH; i < MAX_STATS; ++i)
- @@ -4558,8 +4546,13 @@ void AuraEffect::HandleModDamageDone(AuraApplication const* aurApp, uint8 mode,
- target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+i, GetAmount(), apply);
- }
- }
- - if (Guardian* pet = target->ToPlayer()->GetGuardianPet())
- - pet->UpdateAttackPowerAndDamage();
- + target->RecalculatePetsScalingAttackPower();
- + target->RecalculatePetsScalingDamageDone();
- + }
- + else if (target->isPet())
- + {
- + if (Unit* owner = target->GetOwner())
- + owner->ApplyModUInt32Value(PLAYER_PET_SPELL_POWER, GetAmount(), apply);
- }
- }
- diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
- index da05e3a..168bd07 100755
- --- a/src/server/game/Spells/SpellEffects.cpp
- +++ b/src/server/game/Spells/SpellEffects.cpp
- @@ -408,7 +408,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
- case 49882:
- case 60864: // Jaws of Death
- case 46588: // Ice Spear
- - case 30740: // Eyesore Blaster
- {
- damage = unitTarget->CountPctFromMaxHealth(damage);
- break;
- @@ -1389,18 +1388,6 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
- m_caster->CastSpell(m_caster, spell_id, true);
- return;
- }
- - case 69922: // Temper Quel'Delar
- - {
- - if (!unitTarget)
- - return;
- -
- - if (!unitTarget->FindNearestGameObject(201600, 5.0f))
- - return;
- -
- - // Return Tempered Quel'Delar
- - unitTarget->CastSpell(m_caster, 69956, true);
- - return;
- - }
- case 53808: // Pygmy Oil
- {
- Aura* pAura = m_caster->GetAura(53806);
- @@ -2152,10 +2139,10 @@ void Spell::EffectDummy(SpellEffIndex effIndex)
- // Do we have talent Master of Ghouls?
- if (m_caster->HasAura(52143))
- // summon as pet
- - bp = 52150;
- + bp = m_spellInfo->Effects[EFFECT_2].CalcValue();
- else
- // or guardian
- - bp = 46585;
- + bp = m_spellInfo->Effects[EFFECT_1].CalcValue();
- if (m_targets.HasDst())
- targets.SetDst(*m_targets.GetDst());
- @@ -3815,21 +3802,18 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
- case 629:
- case 181:
- case 715:
- - case 18662:
- - case 48739:
- - case 12749:
- - case 4073:
- - case 19804:
- + case 1161:
- numSummons = (damage > 0) ? damage : 1;
- break;
- - case 46585:
- - duration = 60000;
- - break;
- default:
- numSummons = 1;
- break;
- }
- + // Bloodworms
- + if (m_spellInfo->Id == 50452)
- + numSummons = urand(2, 4);
- +
- switch (properties->Category)
- {
- case SUMMON_CATEGORY_WILD:
- @@ -3912,57 +3896,55 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
- switch (m_spellInfo->Id)
- {
- - case 18662: // Curse of Doom Effect
- - {
- - uint32 petlevel = m_originalCaster->getLevel() < 60 ? 60 : m_originalCaster->getLevel();
- - summon->SetLevel(petlevel);
- - //health, mana, armor and resistance
- - PetLevelInfo const* pInfo = sObjectMgr->GetPetLevelInfo(entry, petlevel);
- - if (pInfo) // exist in DB
- - {
- - summon->SetCreateHealth(pInfo->health);
- - summon->SetCreateMana(pInfo->mana);
- + case 18662: // Curse of Doom Effect
- + {
- + uint32 petlevel = m_originalCaster->getLevel() < 60 ? 60 : m_originalCaster->getLevel();
- + summon->SetLevel(petlevel);
- + //health, mana, armor and resistance
- + PetLevelInfo const* pInfo = sObjectMgr->GetPetLevelInfo(entry, petlevel);
- + if (pInfo) // exist in DB
- + {
- + summon->HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, pInfo->health, true);
- + summon->HandleStatModifier(UNIT_MOD_POWER_START, BASE_VALUE, pInfo->mana, true);
- + summon->SetHealth(summon->GetMaxHealth());
- + summon->SetPower(POWER_MANA, summon->GetMaxPower(POWER_MANA));
- - if (pInfo->armor > 0)
- - summon->SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(pInfo->armor));
- + if (pInfo->armor > 0)
- + summon->SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(pInfo->armor));
- - for (uint8 stat = 0; stat < MAX_STATS; ++stat)
- - summon->SetCreateStat(Stats(stat), float(pInfo->stats[stat]));
- - }
- - else // not exist in DB, use some default fake data
- - {
- - // remove elite bonuses included in DB values
- - CreatureTemplate const *cinfo = summon->GetCreatureInfo();
- - CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class);
- - summon->SetCreateHealth(stats->BaseHealth[cinfo->expansion]);
- - summon->SetCreateMana(stats->BaseMana);
- -
- - summon->SetCreateStat(STAT_STRENGTH, 22);
- - summon->SetCreateStat(STAT_AGILITY, 22);
- - summon->SetCreateStat(STAT_STAMINA, 25);
- - summon->SetCreateStat(STAT_INTELLECT, 28);
- - summon->SetCreateStat(STAT_SPIRIT, 27);
- + for (uint8 stat = 0; stat < MAX_STATS; ++stat)
- + summon->SetStat(Stats(stat), float(pInfo->stats[stat]));
- + }
- + else // not exist in DB, use some default fake data
- + {
- + // remove elite bonuses included in DB values
- + CreatureTemplate const *cinfo = summon->GetCreatureInfo();
- + CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(petlevel, cinfo->unit_class);
- + summon->SetCreateHealth(stats->BaseHealth[cinfo->expansion]);
- + summon->SetCreateMana(stats->BaseMana);
- +
- + summon->SetStat(STAT_STRENGTH, 22);
- + summon->SetStat(STAT_AGILITY, 22);
- + summon->SetStat(STAT_STAMINA, 25);
- + summon->SetStat(STAT_INTELLECT, 28);
- + summon->SetStat(STAT_SPIRIT, 27);
- + }
- + float mod = 1;
- + if (petlevel < 70)
- + mod = 10 + (petlevel-70)/2;
- + else
- + mod = 20 + (petlevel-80);
- + if (mod < 0)
- + mod = 0;
- + float minDamage = (petlevel - (petlevel / 4))*mod;
- + float maxDamage = (petlevel + (petlevel / 4))*mod;
- + float attackPower = ((minDamage + maxDamage) /4)*7;
- + summon->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, minDamage);
- + summon->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxDamage);
- + summon->SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackPower);
- + summon->UpdateAllStats();
- + break;
- }
- -
- - //bonusAP += val * 0.57;
- - float minDamage = (petlevel - (petlevel / 4))*18;
- - float maxDamage = (petlevel + (petlevel / 4))*18;
- - float attackPower = ((minDamage + maxDamage) /4)*7;
- - summon->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, minDamage);
- - summon->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxDamage);
- - summon->SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackPower);
- - summon->SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE) + float(m_originalCaster->GetArmor()) * 0.35f); // Bonus Armor (35% of player armor)
- - summon->SetModifierValue(UNIT_MOD_STAT_STAMINA, BASE_VALUE, float(m_originalCaster->GetStat(STAT_STAMINA)) * 0.3f); // Bonus Stamina (30% of player stamina)
- - summon->SetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE) + float(m_originalCaster->GetResistance(SPELL_SCHOOL_HOLY)) * 0.4f);
- - summon->SetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE) + float(m_originalCaster->GetResistance(SPELL_SCHOOL_FIRE)) * 0.4f);
- - summon->SetModifierValue(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE) + float(m_originalCaster->GetResistance(SPELL_SCHOOL_NATURE)) * 0.4f);
- - summon->SetModifierValue(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE) + float(m_originalCaster->GetResistance(SPELL_SCHOOL_FROST)) * 0.4f);
- - summon->SetModifierValue(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE) + float(m_originalCaster->GetResistance(SPELL_SCHOOL_SHADOW)) * 0.4f);
- - summon->SetModifierValue(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, summon->GetModifierValue(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE) + float(m_originalCaster->GetResistance(SPELL_SCHOOL_ARCANE)) * 0.4f);
- - summon->SetModifierValue(UNIT_MOD_STAT_INTELLECT, BASE_VALUE, float(m_originalCaster->GetStat(STAT_INTELLECT)) * 0.3f);
- - summon->UpdateAllStats();
- - break;
- - }
- }
- if (properties->Category == SUMMON_CATEGORY_ALLY)
- @@ -3994,6 +3976,19 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
- summon->CastSpell(summon, 47448, true);
- summon->CastSpell(summon, 47466, true);
- }
- + // Eye of Kilrogg
- + if (summon->GetEntry() == 4277)
- + {
- + summon->CastSpell(summon, 2585, true);
- + // Glyph of Kilrogg
- + if (m_caster->HasAura(58081))
- + {
- + uint32 v_map = GetVirtualMapForMapAndZone(m_caster->GetMapId(), m_caster->GetZoneId());
- + MapEntry const* mapEntry = sMapStore.LookupEntry(v_map);
- + if (mapEntry && mapEntry->addon > 0 && mapEntry->IsContinent())
- + summon->CastSpell(summon, 58083, true);
- + }
- + }
- break;
- case SUMMON_CATEGORY_VEHICLE:
- // Summoning spells (usually triggered by npc_spellclick) that spawn a vehicle and that cause the clicker
- diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
- index 5c0f6bc..5694042 100644
- --- a/src/server/scripts/Spells/spell_dk.cpp
- +++ b/src/server/scripts/Spells/spell_dk.cpp
- @@ -656,6 +656,304 @@ public:
- }
- };
- +class spell_dk_avoidance_passive : public SpellScriptLoader
- +{
- + public:
- + spell_dk_avoidance_passive() : SpellScriptLoader("spell_dk_avoidance_passive") { }
- +
- + class spell_dk_avoidance_passive_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_dk_avoidance_passive_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAvoidanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + Unit* owner = pet->GetOwner();
- + if (!owner)
- + return;
- +
- + // Night of the dead
- + if (owner->HasAura(55623))
- + amount = 90;
- + else if (owner->HasAura(55620))
- + amount = 45;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_avoidance_passive_AuraScript::CalculateAvoidanceAmount, EFFECT_0, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_dk_avoidance_passive_AuraScript();
- + }
- +};
- +
- +class spell_dk_pet_scaling_01 : public SpellScriptLoader
- +{
- + public:
- + spell_dk_pet_scaling_01() : SpellScriptLoader("spell_dk_pet_scaling_01") { }
- +
- + class spell_dk_pet_scaling_01_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_dk_pet_scaling_01_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateStaminaAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isGuardian())
- + return;
- +
- + Unit* owner = pet->GetOwner();
- + if (!owner)
- + return;
- +
- + float mod = 0.3f;
- +
- + // Ravenous Dead
- + AuraEffect const* aurEff = NULL;
- + // Check just if owner has Ravenous Dead since it's effect is not an aura
- + aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
- + if (aurEff)
- + {
- + mod += CalculatePctN(mod, aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale
- + }
- + // Glyph of the Ghoul
- + aurEff = owner->GetAuraEffect(58686, 0);
- + if (aurEff)
- + mod += CalculatePctN(1.0f, aurEff->GetAmount()); // Glyph of the Ghoul adds a flat value to the scale mod
- + float ownerBonus = float(owner->GetStat(STAT_STAMINA)) * mod;
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateStrengthAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isGuardian())
- + return;
- +
- + Unit* owner = pet->GetOwner();
- + if (!owner)
- + return;
- +
- + float mod = 0.7f;
- +
- + // Ravenous Dead
- + AuraEffect const* aurEff = NULL;
- + // Check just if owner has Ravenous Dead since it's effect is not an aura
- + aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
- + if (aurEff)
- + {
- + mod += CalculatePctN(mod, aurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue()); // Ravenous Dead edits the original scale
- + }
- + // Glyph of the Ghoul
- + aurEff = owner->GetAuraEffect(58686, 0);
- + if (aurEff)
- + mod += CalculatePctN(1.0f, aurEff->GetAmount()); // Glyph of the Ghoul adds a flat value to the scale mod
- + float ownerBonus = float(owner->GetStat(STAT_STRENGTH)) * mod;
- + amount += ownerBonus;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_01_AuraScript::CalculateStaminaAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_01_AuraScript::CalculateStrengthAmount, EFFECT_1, SPELL_AURA_MOD_STAT);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_dk_pet_scaling_01_AuraScript();
- + }
- +};
- +
- +class spell_dk_pet_scaling_02 : public SpellScriptLoader
- +{
- + public:
- + spell_dk_pet_scaling_02() : SpellScriptLoader("spell_dk_pet_scaling_02") { }
- +
- + class spell_dk_pet_scaling_02_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_dk_pet_scaling_02_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountMeleeHaste(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HasteMelee = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_HIT_CHANCE
- + HasteMelee += (1-owner->m_modAttackSpeedPct[BASE_ATTACK])*100;
- +
- + amount += int32(HasteMelee);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_02_AuraScript::CalculateAmountMeleeHaste, EFFECT_1, SPELL_AURA_MELEE_SLOW);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_dk_pet_scaling_02_AuraScript();
- + }
- +};
- +
- +class spell_dk_pet_scaling_03 : public SpellScriptLoader
- +{
- + public:
- + spell_dk_pet_scaling_03() : SpellScriptLoader("spell_dk_pet_scaling_03") { }
- +
- + class spell_dk_pet_scaling_03_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_dk_pet_scaling_03_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountMeleeHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitMelee = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_HIT_CHANCE
- + HitMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE);
- + // Increase hit melee from meele hit ratings
- + HitMelee += owner->GetRatingBonusValue(CR_HIT_MELEE);
- +
- + amount += int32(HitMelee);
- + }
- + }
- +
- + void CalculateAmountSpellHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitSpell = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_SPELL_HIT_CHANCE
- + HitSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + // Increase hit spell from spell hit ratings
- + HitSpell += owner->GetRatingBonusValue(CR_HIT_SPELL);
- +
- + amount += int32(HitSpell);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_03_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_pet_scaling_03_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_dk_pet_scaling_03_AuraScript();
- + }
- +};
- +
- +class spell_dk_rune_weapon_scaling_02 : public SpellScriptLoader
- +{
- + public:
- + spell_dk_rune_weapon_scaling_02() : SpellScriptLoader("spell_dk_rune_weapon_scaling_02") { }
- +
- + class spell_dk_rune_weapon_scaling_02_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_dk_rune_weapon_scaling_02_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateDamageDoneAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + Unit* owner = pet->GetOwner();
- + if (!owner)
- + return;
- +
- + if (pet->isGuardian())
- + ((Guardian*)pet)->SetBonusDamage(owner->GetTotalAttackPowerValue(BASE_ATTACK));
- +
- + amount += owner->CalculateDamage(BASE_ATTACK, true, true);;
- + }
- + }
- +
- + void CalculateAmountMeleeHaste(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HasteMelee = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_HIT_CHANCE
- + HasteMelee += (1-owner->m_modAttackSpeedPct[BASE_ATTACK])*100;
- +
- + amount += int32(HasteMelee);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_rune_weapon_scaling_02_AuraScript::CalculateDamageDoneAmount, EFFECT_0, SPELL_AURA_MOD_DAMAGE_DONE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_rune_weapon_scaling_02_AuraScript::CalculateAmountMeleeHaste, EFFECT_1, SPELL_AURA_MELEE_SLOW);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_dk_rune_weapon_scaling_02_AuraScript();
- + }
- +};
- +
- void AddSC_deathknight_spell_scripts()
- {
- new spell_dk_anti_magic_shell_raid();
- @@ -671,4 +969,9 @@ void AddSC_deathknight_spell_scripts()
- new spell_dk_will_of_the_necropolis();
- new spell_dk_improved_blood_presence();
- new spell_dk_improved_unholy_presence();
- + new spell_dk_avoidance_passive();
- + new spell_dk_pet_scaling_01();
- + new spell_dk_pet_scaling_02();
- + new spell_dk_pet_scaling_03();
- + new spell_dk_rune_weapon_scaling_02();
- }
- diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
- index 8a3424a..360c76b 100644
- --- a/src/server/scripts/Spells/spell_hunter.cpp
- +++ b/src/server/scripts/Spells/spell_hunter.cpp
- @@ -40,6 +40,11 @@ enum HunterSpells
- HUNTER_SPELL_CHIMERA_SHOT_VIPER = 53358,
- HUNTER_SPELL_CHIMERA_SHOT_SCORPID = 53359,
- HUNTER_SPELL_ASPECT_OF_THE_BEAST_PET = 61669,
- + HUNTER_SPELL_KILL_COMMAND_CRIT_10 = 60110,
- + HUNTER_SPELL_KILL_COMMAND_CRIT_20 = 60113,
- + HUNTER_SPELL_FOCUSED_FIRE_1 = 35029,
- + HUNTER_SPELL_FOCUSED_FIRE_2 = 35030,
- + HUNTER_SPELL_ANIMAL_HANDLER = 34453
- };
- // 13161 Aspect of the Beast
- @@ -562,6 +567,569 @@ public:
- }
- };
- +class spell_hun_pet_scaling_01 : public SpellScriptLoader
- +{
- + public:
- + spell_hun_pet_scaling_01() : SpellScriptLoader("spell_hun_pet_scaling_01") { }
- +
- + class spell_hun_pet_scaling_01_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_pet_scaling_01_AuraScript);
- +
- + void CalculateStaminaAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float mod = 0.45f;
- + float ownerBonus = 0.0f;
- +
- + PetSpellMap::const_iterator itr = (pet->ToPet()->m_spells.find(62758)); // Wild Hunt rank 1
- + if (itr == pet->ToPet()->m_spells.end())
- + itr = pet->ToPet()->m_spells.find(62762); // Wild Hunt rank 2
- +
- + if (itr != pet->ToPet()->m_spells.end()) // If pet has Wild Hunt
- + {
- + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value
- + AddPctN(mod, spellInfo->Effects[EFFECT_0].CalcValue());
- + }
- +
- + ownerBonus = owner->GetStat(STAT_STAMINA)*mod;
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateAttackPowerAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float mod = 1.0f; //Hunter contribution modifier
- + float bonusAP = 0.0f;
- +
- + PetSpellMap::const_iterator itr = (pet->ToPet()->m_spells.find(62758)); // Wild Hunt rank 1
- + if (itr == pet->ToPet()->m_spells.end())
- + itr = pet->ToPet()->m_spells.find(62762); // Wild Hunt rank 2
- +
- + if (itr != pet->ToPet()->m_spells.end()) // If pet has Wild Hunt
- + {
- + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value
- + mod += CalculatePctN(1.0f, spellInfo->Effects[EFFECT_1].CalcValue());
- + }
- +
- + bonusAP = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.22f * mod;
- +
- + amount += bonusAP;
- + }
- + }
- +
- + void CalculateDamageDoneAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float mod = 1.0f; //Hunter contribution modifier
- + float bonusDamage = 0.0f;
- +
- + PetSpellMap::const_iterator itr = (pet->ToPet()->m_spells.find(62758)); // Wild Hunt rank 1
- + if (itr == pet->ToPet()->m_spells.end())
- + itr = pet->ToPet()->m_spells.find(62762); // Wild Hunt rank 2
- +
- + if (itr != pet->ToPet()->m_spells.end()) // If pet has Wild Hunt
- + {
- + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first); // Then get the SpellProto and add the dummy effect value
- + mod += CalculatePctN(1.0f, spellInfo->Effects[EFFECT_1].CalcValue());
- + }
- +
- + bonusDamage = owner->GetTotalAttackPowerValue(RANGED_ATTACK) * 0.1287f * mod;
- +
- + amount += bonusDamage;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_01_AuraScript::CalculateStaminaAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_01_AuraScript::CalculateAttackPowerAmount, EFFECT_1, SPELL_AURA_MOD_ATTACK_POWER);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_01_AuraScript::CalculateDamageDoneAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_DONE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_pet_scaling_01_AuraScript();
- + }
- +};
- +
- +class spell_hun_pet_scaling_02 : public SpellScriptLoader
- +{
- + public:
- + spell_hun_pet_scaling_02() : SpellScriptLoader("spell_hun_pet_scaling_02") { }
- +
- + class spell_hun_pet_scaling_02_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_pet_scaling_02_AuraScript);
- +
- + void CalculateFrostResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_FROST), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateFireResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_FIRE), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateNatureResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_NATURE), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateFrostResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateFireResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_02_AuraScript::CalculateNatureResistanceAmount, EFFECT_2, SPELL_AURA_MOD_RESISTANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_pet_scaling_02_AuraScript();
- + }
- +};
- +
- +class spell_hun_pet_scaling_03 : public SpellScriptLoader
- +{
- + public:
- + spell_hun_pet_scaling_03() : SpellScriptLoader("spell_hun_pet_scaling_03") { }
- +
- + class spell_hun_pet_scaling_03_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_pet_scaling_03_AuraScript);
- +
- + void CalculateShadowResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_SHADOW), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateArcaneResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_ARCANE), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateArmorAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetArmor(), 35);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateShadowResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateArcaneResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_03_AuraScript::CalculateArmorAmount, EFFECT_2, SPELL_AURA_MOD_RESISTANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_pet_scaling_03_AuraScript();
- + }
- +};
- +
- +class spell_hun_pet_scaling_04 : public SpellScriptLoader
- +{
- + public:
- + spell_hun_pet_scaling_04() : SpellScriptLoader("spell_hun_pet_scaling_04") { }
- +
- + class spell_hun_pet_scaling_04_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_pet_scaling_04_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountMeleeHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitMelee = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_HIT_CHANCE
- + HitMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE);
- + // Increase hit melee from meele hit ratings
- + HitMelee += owner->GetRatingBonusValue(CR_HIT_MELEE);
- +
- + amount += int32(HitMelee);
- + }
- + }
- +
- + void CalculateAmountSpellHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitSpell = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_SPELL_HIT_CHANCE
- + HitSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + // Increase hit spell from spell hit ratings
- + HitSpell += owner->GetRatingBonusValue(CR_HIT_SPELL);
- +
- + amount += int32(HitSpell);
- + }
- + }
- +
- + void CalculateAmountExpertise(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float Expertise = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_EXPERTISE
- + Expertise += owner->GetTotalAuraModifier(SPELL_AURA_MOD_EXPERTISE);
- + // Increase Expertise from Expertise ratings
- + Expertise += owner->GetRatingBonusValue(CR_EXPERTISE);
- +
- + amount += int32(Expertise);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_scaling_04_AuraScript::CalculateAmountExpertise, EFFECT_2, SPELL_AURA_MOD_EXPERTISE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_pet_scaling_04_AuraScript();
- + }
- +};
- +
- +class spell_hun_pet_passive_crit : public SpellScriptLoader
- +{
- + public:
- + spell_hun_pet_passive_crit() : SpellScriptLoader("spell_hun_pet_passive_crit") { }
- +
- + class spell_hun_pet_passive_crit_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_pet_passive_crit_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountCritSpell(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float CritSpell = 0.0f;
- + // Crit from Intellect
- + // CritSpell += owner->GetSpellCritFromIntellect();
- + // Increase crit from SPELL_AURA_MOD_SPELL_CRIT_CHANCE
- + // CritSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
- + // Increase crit from SPELL_AURA_MOD_CRIT_PCT
- + // CritSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_PCT);
- + // Increase crit spell from spell crit ratings
- + // CritSpell += owner->GetRatingBonusValue(CR_CRIT_SPELL);
- +
- + amount += (CritSpell*0.8f);
- + }
- + }
- +
- + void CalculateAmountCritMelee(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float CritMelee = 0.0f;
- + // Crit from Agility
- + // CritMelee += owner->GetMeleeCritFromAgility();
- + // Increase crit from SPELL_AURA_MOD_WEAPON_CRIT_PERCENT
- + // CritMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
- + // Increase crit from SPELL_AURA_MOD_CRIT_PCT
- + // CritMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_PCT);
- + // Increase crit melee from melee crit ratings
- + // CritMelee += owner->GetRatingBonusValue(CR_CRIT_MELEE);
- +
- + amount += (CritMelee*0.8f);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_crit_AuraScript::CalculateAmountCritSpell, EFFECT_1, SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_crit_AuraScript::CalculateAmountCritMelee, EFFECT_0, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_pet_passive_crit_AuraScript();
- + }
- +};
- +
- +class spell_hun_pet_passive_damage_done : public SpellScriptLoader
- +{
- + public:
- + spell_hun_pet_passive_damage_done() : SpellScriptLoader("spell_hun_pet_passive_damage_done") { }
- +
- + class spell_hun_pet_passive_damage_done_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_pet_passive_damage_done_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountDamageDone(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // Pet's base damage changes depending on happiness
- + if (GetCaster()->isPet() && GetCaster()->ToPet()->isHunterPet())
- + {
- + switch (GetCaster()->ToPet()->GetHappinessState())
- + {
- + case HAPPY:
- + // 125% of normal damage
- + amount += 25.0f;
- + break;
- + case CONTENT:
- + // 100% of normal damage, nothing to modify
- + break;
- + case UNHAPPY:
- + // 75% of normal damage
- + amount += -25.0f;
- + break;
- + }
- + }
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_pet_passive_damage_done_AuraScript();
- + }
- +};
- +
- +class spell_hun_animal_handler : public SpellScriptLoader
- +{
- + public:
- + spell_hun_animal_handler() : SpellScriptLoader("spell_hun_animal_handler") { }
- +
- + class spell_hun_animal_handler_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_animal_handler_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountDamageDone(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + if (AuraEffect* aurEffect = owner->GetAuraEffectOfRankedSpell(HUNTER_SPELL_ANIMAL_HANDLER, EFFECT_1))
- + amount = aurEffect->GetAmount();
- + else
- + amount = 0;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_hun_animal_handler_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_ATTACK_POWER_PCT);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_animal_handler_AuraScript();
- + }
- +};
- +
- +class spell_hun_kill_command : public SpellScriptLoader
- +{
- +public:
- + spell_hun_kill_command() : SpellScriptLoader("spell_hun_kill_command") { }
- +
- + class spell_hun_kill_command_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_hun_kill_command_AuraScript)
- + void ApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- + {
- + if (Unit* m_target = GetTarget())
- + {
- + if (GetCaster()->HasAura(HUNTER_SPELL_FOCUSED_FIRE_2))
- + m_target->CastSpell(m_target, HUNTER_SPELL_KILL_COMMAND_CRIT_20, true);
- + else if (GetCaster()->HasAura(HUNTER_SPELL_FOCUSED_FIRE_1))
- + m_target->CastSpell(m_target, HUNTER_SPELL_KILL_COMMAND_CRIT_10, true);
- + }
- +
- + }
- +
- + void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- + {
- + if (Unit* m_target = GetTarget())
- + {
- + m_target->RemoveAurasDueToSpell(HUNTER_SPELL_KILL_COMMAND_CRIT_10);
- + m_target->RemoveAurasDueToSpell(HUNTER_SPELL_KILL_COMMAND_CRIT_20);
- + }
- + }
- +
- + void Register()
- + {
- + OnEffectRemove += AuraEffectRemoveFn(spell_hun_kill_command_AuraScript::RemoveEffect, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
- + OnEffectApply += AuraEffectApplyFn(spell_hun_kill_command_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_hun_kill_command_AuraScript();
- + }
- +};
- +
- void AddSC_hunter_spell_scripts()
- {
- new spell_hun_aspect_of_the_beast();
- @@ -574,4 +1142,12 @@ void AddSC_hunter_spell_scripts()
- new spell_hun_sniper_training();
- new spell_hun_pet_heart_of_the_phoenix();
- new spell_hun_pet_carrion_feeder();
- + new spell_hun_pet_scaling_01();
- + new spell_hun_pet_scaling_02();
- + new spell_hun_pet_scaling_03();
- + new spell_hun_pet_scaling_04();
- + new spell_hun_pet_passive_crit();
- + new spell_hun_pet_passive_damage_done();
- + new spell_hun_animal_handler();
- + new spell_hun_kill_command();
- }
- diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp
- index b0116d6..90e4393 100644
- --- a/src/server/scripts/Spells/spell_shaman.cpp
- +++ b/src/server/scripts/Spells/spell_shaman.cpp
- @@ -316,6 +316,70 @@ class spell_sha_heroism : public SpellScriptLoader
- }
- };
- +class spell_sha_pet_scaling_04 : public SpellScriptLoader
- +{
- + public:
- + spell_sha_pet_scaling_04() : SpellScriptLoader("spell_sha_pet_scaling_04") { }
- +
- + class spell_sha_pet_scaling_04_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_sha_pet_scaling_04_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountMeleeHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitMelee = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_HIT_CHANCE
- + HitMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_HIT_CHANCE);
- + // Increase hit melee from meele hit ratings
- + HitMelee += owner->GetRatingBonusValue(CR_HIT_MELEE);
- +
- + amount += int32(HitMelee);
- + }
- + }
- +
- + void CalculateAmountSpellHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitSpell = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_SPELL_HIT_CHANCE
- + HitSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + // Increase hit spell from spell hit ratings
- + HitSpell += owner->GetRatingBonusValue(CR_HIT_SPELL);
- +
- + amount += int32(HitSpell);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_pet_scaling_04_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_pet_scaling_04_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_sha_pet_scaling_04_AuraScript();
- + }
- +};
- +
- +
- void AddSC_shaman_spell_scripts()
- {
- new spell_sha_astral_shift();
- @@ -324,4 +388,5 @@ void AddSC_shaman_spell_scripts()
- new spell_sha_earthbind_totem();
- new spell_sha_bloodlust();
- new spell_sha_heroism();
- + new spell_sha_pet_scaling_04();
- }
- diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
- index d81808f..0954182 100644
- --- a/src/server/scripts/Spells/spell_warlock.cpp
- +++ b/src/server/scripts/Spells/spell_warlock.cpp
- @@ -41,6 +41,17 @@ enum WarlockSpells
- WARLOCK_SHADOWFLAME_AURA_R1 = 47960,
- WARLOCK_SHADOWFLAME_R2 = 61290,
- WARLOCK_SHADOWFLAME_AURA_R2 = 61291,
- +
- + WARLOCK_PET_PASSIVE = 35695,
- + WARLOCK_DEMONIC_TACTICS = 30242,
- + WARLOCK_AVOIDANCE_PASSIVE = 32233,
- +
- + ENTRY_IMP = 416,
- + ENTRY_VOIDWALKER = 1860,
- + ENTRY_SUCCUBUS = 1863,
- + ENTRY_FELHUNTER = 417,
- + ENTRY_FELGUARD = 17252,
- + ENTRY_DOOMGUARD = 11859
- };
- class spell_warl_banish : public SpellScriptLoader
- @@ -315,10 +326,6 @@ class spell_warl_seed_of_corruption : public SpellScriptLoader
- }
- };
- -enum eEnslaveDemon
- -{
- - NPC_DOOMGUARD = 11859
- -};
- class spell_warl_enslave_demon : public SpellScriptLoader
- {
- public:
- @@ -329,15 +336,35 @@ public:
- PrepareAuraScript(spell_warl_enslave_demon_AuraScript)
- void ApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- + if (GetCaster()->GetTypeId() != TYPEID_PLAYER)
- + return;
- +
- if (Unit* m_target = GetTarget())
- {
- if (m_target->GetTypeId() == TYPEID_UNIT)
- {
- - if (m_target->GetEntry() == NPC_DOOMGUARD && m_target->isSummon())
- - m_target->ToCreature()->ToTempSummon()->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN);
- + if (m_target->GetEntry() == ENTRY_DOOMGUARD && m_target->isSummon())
- + {
- + m_target->ToTempSummon()->SetTempSummonType(TEMPSUMMON_CORPSE_DESPAWN);
- + //the damage bonus used for pets is either fire or shadow damage, whatever is higher
- + int32 fire = int32(GetCaster()->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - GetCaster()->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- + int32 shadow = int32(GetCaster()->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - GetCaster()->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
- + int32 maximum = (fire > shadow) ? fire : shadow;
- + if (maximum < 0)
- + maximum = 0;
- + float bonusDamage = maximum * 0.15f;
- + m_target->ToTempSummon()->SetBonusDamage(bonusDamage);
- + m_target->CastSpell(m_target, WARLOCK_AVOIDANCE_PASSIVE, true);
- + }
- - if (Unit* m_caster = GetCaster())
- - m_caster->SetPetGUID(m_target->GetGUID());
- + GetCaster()->SetPetGUID(m_target->GetGUID());
- + AuraEffect* aurEffect = GetCaster()->GetAuraEffectOfRankedSpell(WARLOCK_DEMONIC_TACTICS, EFFECT_0);
- + if (aurEffect)
- + {
- + int32 basePoints0 = aurEffect->GetAmount();
- + int32 basePoints1 = aurEffect->GetAmount();
- + m_target->CastCustomSpell(m_target, WARLOCK_PET_PASSIVE, &basePoints0, &basePoints1, NULL, true);
- + }
- }
- }
- @@ -345,15 +372,24 @@ public:
- void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- + if (GetCaster()->GetTypeId() != TYPEID_PLAYER)
- + return;
- +
- if (Unit* m_target = GetTarget())
- + {
- if (m_target->GetTypeId() == TYPEID_UNIT)
- {
- - if (m_target->GetEntry() == NPC_DOOMGUARD && m_target->isSummon())
- - m_target->ToCreature()->ToTempSummon()->SetTempSummonType(TEMPSUMMON_TIMED_DESPAWN);
- -
- - if (Unit* m_caster = GetCaster())
- - m_caster->SetPetGUID(0);
- + if (m_target->GetEntry() == ENTRY_DOOMGUARD && m_target->isSummon())
- + {
- + m_target->RemoveAurasDueToSpell(WARLOCK_AVOIDANCE_PASSIVE);
- + m_target->ToTempSummon()->SetTempSummonType(TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT);
- + }
- +
- + m_target->RemoveAurasDueToSpell(WARLOCK_PET_PASSIVE);
- +
- + GetCaster()->SetPetGUID(0);
- }
- + }
- }
- void Register()
- @@ -370,14 +406,14 @@ public:
- };
- // Shadowflame
- -class spell_shadowflame : public SpellScriptLoader
- +class spell_warl_shadowflame : public SpellScriptLoader
- {
- public:
- - spell_shadowflame() : SpellScriptLoader("spell_shadowflame") { }
- + spell_warl_shadowflame() : SpellScriptLoader("spell_warl_shadowflame") { }
- - class spell_shadowflame_SpellScript : public SpellScript
- + class spell_warl_shadowflame_SpellScript : public SpellScript
- {
- - PrepareSpellScript(spell_shadowflame_SpellScript);
- + PrepareSpellScript(spell_warl_shadowflame_SpellScript);
- void HandleAdditionnalEffect(SpellEffIndex /*effIndex*/)
- {
- @@ -394,16 +430,560 @@ public:
- void Register()
- {
- - OnEffectHitTarget += SpellEffectFn(spell_shadowflame_SpellScript::HandleAdditionnalEffect, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- + OnEffectHitTarget += SpellEffectFn(spell_warl_shadowflame_SpellScript::HandleAdditionnalEffect, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- }
- };
- SpellScript* GetSpellScript() const
- {
- - return new spell_shadowflame_SpellScript();
- + return new spell_warl_shadowflame_SpellScript();
- }
- };
- +class spell_warl_pet_scaling_01 : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_scaling_01() : SpellScriptLoader("spell_warl_pet_scaling_01") { }
- +
- + class spell_warl_pet_scaling_01_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_scaling_01_AuraScript);
- +
- + void CalculateStaminaAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetStat(STAT_STAMINA), 75);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateAttackPowerAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + int32 fire = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- + int32 shadow = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
- + int32 maximum = (fire > shadow) ? fire : shadow;
- + if (maximum < 0)
- + maximum = 0;
- + float bonusAP = maximum * 0.57f;
- +
- + amount += bonusAP;
- +
- + // Glyph of felguard
- + if (pet->GetEntry() == ENTRY_FELGUARD)
- + {
- + if (AuraEffect* aurEffect = owner->GetAuraEffect(56246, EFFECT_0))
- + {
- + float base_attPower = pet->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE) * pet->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_PCT);
- + amount += CalculatePctN(amount+base_attPower, aurEffect->GetAmount());
- + }
- + }
- + }
- + }
- +
- + void CalculateDamageDoneAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + //the damage bonus used for pets is either fire or shadow damage, whatever is higher
- + int32 fire = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE);
- + int32 shadow = int32(owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW)) - owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW);
- + int32 maximum = (fire > shadow) ? fire : shadow;
- + if (maximum < 0)
- + maximum = 0;
- + float bonusDamage = maximum * 0.15f;
- +
- + amount += bonusDamage;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_01_AuraScript::CalculateStaminaAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_01_AuraScript::CalculateAttackPowerAmount, EFFECT_1, SPELL_AURA_MOD_ATTACK_POWER);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_01_AuraScript::CalculateDamageDoneAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_DONE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_scaling_01_AuraScript();
- + }
- +};
- +
- +class spell_warl_pet_scaling_02 : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_scaling_02() : SpellScriptLoader("spell_warl_pet_scaling_02") { }
- +
- + class spell_warl_pet_scaling_02_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_scaling_02_AuraScript);
- +
- + void CalculateIntellectAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetStat(STAT_INTELLECT), 30);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateArmorAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetArmor(), 35);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateFireResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_FIRE), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_02_AuraScript::CalculateIntellectAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_02_AuraScript::CalculateArmorAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_02_AuraScript::CalculateFireResistanceAmount, EFFECT_2, SPELL_AURA_MOD_RESISTANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_scaling_02_AuraScript();
- + }
- +};
- +
- +class spell_warl_pet_scaling_03 : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_scaling_03() : SpellScriptLoader("spell_warl_pet_scaling_03") { }
- +
- + class spell_warl_pet_scaling_03_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_scaling_03_AuraScript);
- +
- + void CalculateFrostResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_FROST), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateArcaneResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_ARCANE), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void CalculateNatureResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_NATURE), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateFrostResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateArcaneResistanceAmount, EFFECT_1, SPELL_AURA_MOD_RESISTANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_03_AuraScript::CalculateNatureResistanceAmount, EFFECT_2, SPELL_AURA_MOD_RESISTANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_scaling_03_AuraScript();
- + }
- +};
- +
- +
- +class spell_warl_pet_scaling_04 : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_scaling_04() : SpellScriptLoader("spell_warl_pet_scaling_04") { }
- +
- + class spell_warl_pet_scaling_04_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_scaling_04_AuraScript);
- +
- + void CalculateShadowResistanceAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + float ownerBonus = 0.0f;
- +
- + ownerBonus = CalculatePctN(owner->GetResistance(SPELL_SCHOOL_SHADOW), 40);
- +
- + amount += ownerBonus;
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_04_AuraScript::CalculateShadowResistanceAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_scaling_04_AuraScript();
- + }
- +};
- +
- +class spell_warl_pet_scaling_05 : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_scaling_05() : SpellScriptLoader("spell_warl_pet_scaling_05") { }
- +
- + class spell_warl_pet_scaling_05_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_scaling_05_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountMeleeHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitMelee = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_SPELL_HIT_CHANCE
- + HitMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + // Increase hit spell from spell hit ratings
- + HitMelee += owner->GetRatingBonusValue(CR_HIT_SPELL);
- +
- + amount += int32(HitMelee);
- + }
- + }
- +
- + void CalculateAmountSpellHit(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float HitSpell = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_SPELL_HIT_CHANCE
- + HitSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + // Increase hit spell from spell hit ratings
- + HitSpell += owner->GetRatingBonusValue(CR_HIT_SPELL);
- +
- + amount += int32(HitSpell);
- + }
- + }
- +
- + void CalculateAmountExpertise(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float Expertise = 0.0f;
- + // Increase hit from SPELL_AURA_MOD_SPELL_HIT_CHANCE
- + Expertise += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + // Increase hit spell from spell hit ratings
- + Expertise += owner->GetRatingBonusValue(CR_HIT_SPELL);
- +
- + amount += int32(Expertise);
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountMeleeHit, EFFECT_0, SPELL_AURA_MOD_HIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountSpellHit, EFFECT_1, SPELL_AURA_MOD_SPELL_HIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_scaling_05_AuraScript::CalculateAmountExpertise, EFFECT_2, SPELL_AURA_MOD_EXPERTISE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_scaling_05_AuraScript();
- + }
- +};
- +
- +class spell_warl_pet_passive : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_passive() : SpellScriptLoader("spell_warl_pet_passive") { }
- +
- + class spell_warl_pet_passive_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_passive_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountCritSpell(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float CritSpell = 0.0f;
- + // Crit from Intellect
- + CritSpell += owner->GetSpellCritFromIntellect();
- + // Increase crit from SPELL_AURA_MOD_SPELL_CRIT_CHANCE
- + CritSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
- + // Increase crit from SPELL_AURA_MOD_CRIT_PCT
- + CritSpell += owner->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_PCT);
- + // Increase crit spell from spell crit ratings
- + CritSpell += owner->GetRatingBonusValue(CR_CRIT_SPELL);
- +
- + if (AuraApplication* improvedDemonicTacticsApp = owner->GetAuraApplicationOfRankedSpell(54347))
- + if (Aura* improvedDemonicTactics = improvedDemonicTacticsApp->GetBase())
- + if (AuraEffect* improvedDemonicTacticsEffect = improvedDemonicTactics->GetEffect(EFFECT_0))
- + amount += CalculatePctN(CritSpell, improvedDemonicTacticsEffect->GetAmount());
- + }
- + }
- +
- + void CalculateAmountCritMelee(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + // For others recalculate it from:
- + float CritMelee = 0.0f;
- + // Crit from Agility
- + CritMelee += owner->GetMeleeCritFromAgility();
- + // Increase crit from SPELL_AURA_MOD_WEAPON_CRIT_PERCENT
- + CritMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
- + // Increase crit from SPELL_AURA_MOD_CRIT_PCT
- + CritMelee += owner->GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_PCT);
- + // Increase crit melee from melee crit ratings
- + CritMelee += owner->GetRatingBonusValue(CR_CRIT_MELEE);
- +
- + if (AuraApplication* improvedDemonicTacticsApp = owner->GetAuraApplicationOfRankedSpell(54347))
- + if (Aura* improvedDemonicTactics = improvedDemonicTacticsApp->GetBase())
- + if (AuraEffect* improvedDemonicTacticsEffect = improvedDemonicTactics->GetEffect(EFFECT_0))
- + amount += CalculatePctN(CritMelee, improvedDemonicTacticsEffect->GetAmount());
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_AuraScript::CalculateAmountCritSpell, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_AuraScript::CalculateAmountCritMelee, EFFECT_1, SPELL_AURA_MOD_WEAPON_CRIT_PERCENT);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_passive_AuraScript();
- + }
- +};
- +
- +class spell_warl_pet_passive_damage_done : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_passive_damage_done() : SpellScriptLoader("spell_warl_pet_passive_damage_done") { }
- +
- + class spell_warl_pet_passive_damage_done_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_passive_damage_done_AuraScript);
- +
- + bool Load()
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner() || GetCaster()->GetOwner()->GetTypeId() != TYPEID_PLAYER)
- + return false;
- + return true;
- + }
- +
- + void CalculateAmountDamageDone(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (!GetCaster() || !GetCaster()->GetOwner())
- + return;
- + if (Player* owner = GetCaster()->GetOwner()->ToPlayer())
- + {
- + switch (GetCaster()->GetEntry())
- + {
- + case ENTRY_VOIDWALKER:
- + amount += -16;
- + break;
- + case ENTRY_FELHUNTER:
- + amount += -20;
- + break;
- + case ENTRY_SUCCUBUS:
- + case ENTRY_FELGUARD:
- + amount += 5;
- + break;
- + }
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_damage_done_AuraScript::CalculateAmountDamageDone, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_passive_damage_done_AuraScript();
- + }
- +};
- +
- +class spell_warl_pet_passive_voidwalker : public SpellScriptLoader
- +{
- + public:
- + spell_warl_pet_passive_voidwalker() : SpellScriptLoader("spell_warl_pet_passive_voidwalker") { }
- +
- + class spell_warl_pet_passive_voidwalker_AuraScript : public AuraScript
- + {
- + PrepareAuraScript(spell_warl_pet_passive_voidwalker_AuraScript);
- +
- + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
- + {
- + if (Unit* pet = GetUnitOwner())
- + {
- + if (!pet->isPet())
- + return;
- +
- + Unit* owner = pet->ToPet()->GetOwner();
- + if (!owner)
- + return;
- +
- + if (AuraEffect* aurEffect = owner->GetAuraEffect(56247, EFFECT_0))
- + amount += aurEffect->GetAmount();
- + }
- + }
- +
- + void Register()
- + {
- + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_pet_passive_voidwalker_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE);
- + }
- + };
- +
- + AuraScript* GetAuraScript() const
- + {
- + return new spell_warl_pet_passive_voidwalker_AuraScript();
- + }
- +};
- +
- void AddSC_warlock_spell_scripts()
- {
- new spell_warl_banish();
- @@ -413,5 +993,13 @@ void AddSC_warlock_spell_scripts()
- new spell_warl_ritual_of_doom_effect();
- new spell_warl_seed_of_corruption();
- new spell_warl_enslave_demon();
- - new spell_shadowflame();
- + new spell_warl_shadowflame();
- + new spell_warl_pet_scaling_01();
- + new spell_warl_pet_scaling_02();
- + new spell_warl_pet_scaling_03();
- + new spell_warl_pet_scaling_04();
- + new spell_warl_pet_scaling_05();
- + new spell_warl_pet_passive();
- + new spell_warl_pet_passive_voidwalker();
- + new spell_warl_pet_passive_damage_done();
- }
- diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp
- index 0caf1c8..9da41e9 100644
- --- a/src/server/scripts/World/npcs_special.cpp
- +++ b/src/server/scripts/World/npcs_special.cpp
- @@ -1980,6 +1980,10 @@ public:
- }
- }
- + void EnterEvadeMode()
- + {
- + }
- +
- void JustDied(Unit* /*killer*/)
- {
- // Stop Feeding Gargoyle when it dies
Advertisement
Add Comment
Please, Sign In to add comment