From bb7e38b97781064c2abc39aa267ca8c1232a4e88 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Fri, 23 Sep 2022 17:48:29 -0400 Subject: [PATCH 01/26] fix(DB/skilllineability_dbc): Correct structure of skilllineability_dbc (#13088) * Create blackrock-drakes.sql * Guess I guess * get rid of it it's not funny anymore * slap that bad boy on there * get rid of it because i'm not a comedian * Testing * no test * for the good of all things skillful --- data/sql/updates/pending_db_world/fix-it-please.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 data/sql/updates/pending_db_world/fix-it-please.sql diff --git a/data/sql/updates/pending_db_world/fix-it-please.sql b/data/sql/updates/pending_db_world/fix-it-please.sql new file mode 100644 index 000000000..d1b17f9e1 --- /dev/null +++ b/data/sql/updates/pending_db_world/fix-it-please.sql @@ -0,0 +1,10 @@ +ALTER TABLE `skilllineability_dbc` + CHANGE `MinSkillLineRank` `ExcludeRace` INT NOT NULL DEFAULT 0, + CHANGE `SupercededBySpell` `ExcludeClass` INT NOT NULL DEFAULT 0, + CHANGE `AcquireMethod` `MinSkillLineRank` INT NOT NULL DEFAULT 0, + CHANGE `TrivialSkillLineRankHigh` `SupercededBySpell` INT NOT NULL DEFAULT 0, + CHANGE `TrivialSkillLineRankLow` `AcquireMethod` INT NOT NULL DEFAULT 0, + CHANGE `CharacterPoints_1` `TrivialSkillLineRankHigh` INT NOT NULL DEFAULT 0, + CHANGE `CharacterPoints_2` `TrivialSkillLineRankLow` INT NOT NULL DEFAULT 0, + CHANGE `TradeSkillCategoryID` `CharacterPoints_1` INT NOT NULL DEFAULT 0, + ADD COLUMN `CharacterPoints_2` INT NOT NULL DEFAULT 0 AFTER `CharacterPoints_1`; From 5367b8ec8f66775b7bf3fbd2c49d02868bdef9b1 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Fri, 23 Sep 2022 21:50:41 +0000 Subject: [PATCH 02/26] chore(DB): import pending files Referenced commit(s): bb7e38b97781064c2abc39aa267ca8c1232a4e88 --- .../fix-it-please.sql => db_world/2022_09_23_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/fix-it-please.sql => db_world/2022_09_23_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/fix-it-please.sql b/data/sql/updates/db_world/2022_09_23_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/fix-it-please.sql rename to data/sql/updates/db_world/2022_09_23_00.sql index d1b17f9e1..73c36346c 100644 --- a/data/sql/updates/pending_db_world/fix-it-please.sql +++ b/data/sql/updates/db_world/2022_09_23_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_22_01 -> 2022_09_23_00 ALTER TABLE `skilllineability_dbc` CHANGE `MinSkillLineRank` `ExcludeRace` INT NOT NULL DEFAULT 0, CHANGE `SupercededBySpell` `ExcludeClass` INT NOT NULL DEFAULT 0, From a59ac556ab81a8a2c15b310f267add0d31c6deb8 Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Sat, 24 Sep 2022 00:23:20 -0600 Subject: [PATCH 03/26] fix(DB): Override Spell Bonus Coefficients (Workaround) (#13104) --- .../rev_1663951634330230900.sql | 1003 +++++++++++++++++ 1 file changed, 1003 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1663951634330230900.sql diff --git a/data/sql/updates/pending_db_world/rev_1663951634330230900.sql b/data/sql/updates/pending_db_world/rev_1663951634330230900.sql new file mode 100644 index 000000000..b35f18539 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1663951634330230900.sql @@ -0,0 +1,1003 @@ +-- +DELETE FROM `spell_bonus_data` WHERE `entry` BETWEEN 110 AND 50000; +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES +(116, 0.172, 0, 0, 0, 'Mage - Frost Bolt'), +(120, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(122, 0.018, 0, 0, 0, 'Mage - Frost Nova'), +(133, 0.123, 0, 0, 0, 'Mage - Fire ball'), +(139, 0, 0.207, 0, 0, 'Priest - Renew'), +(143, 0.271, 0, 0, 0, 'Mage - Fire ball'), +(145, 0.5, 0, 0, 0, 'Mage - Fire ball'), +(172, 0, 0.0624, 0, 0, 'Warlock - Corruption'), +(205, 0.283, 0, 0, 0, 'Mage - Frost Bolt'), +(331, 0.231, 0, 0, 0, 'Shaman - Healing Wave'), +(332, 0.51, 0, 0, 0, 'Shaman - Healing Wave'), +(339, 0, 0.055, 0, 0, 'Druid - Entangling Roots'), +(348, 0.058, 0.058, 0, 0, 'Warlock - Immolate'), +(403, 0.125, 0, 0, 0, 'Shaman - Lightning Bolt'), +(421, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(467, 0.033, 0, 0, 0, 'Druid - Thorns'), +(529, 0.317, 0, 0, 0, 'Shaman - Lightning Bolt'), +(547, 0.94, 0, 0, 0, 'Shaman - Healing Wave'), +(548, 0.561, 0, 0, 0, 'Shaman - Lightning Bolt'), +(585, 0.123, 0, 0, 0, 'Priest - Smite'), +(589, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(591, 0.271, 0, 0, 0, 'Priest - Smite'), +(594, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(596, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(598, 0.554, 0, 0, 0, 'Priest - Smite'), +(603, 0, 2, 0, 0, 'Warlock - Curse of Doom'), +(635, 0.481, 0, 0, 0, 'Paladin - Holy Light'), +(639, 0.796, 0, 0, 0, 'Paladin - Holy Light'), +(647, 1.3, 0, 0, 0, 'Paladin - Holy Light'), +(686, 0.14, 0, 0, 0, 'Warlock - Shadow Bolt'), +(689, 0, 0.111, 0, 0, 'Warlock - Drain Life'), +(695, 0.299, 0, 0, 0, 'Warlock - Shadow Bolt'), +(699, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(703, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(705, 0.56, 0, 0, 0, 'Warlock - Shadow Bolt'), +(707, 0.125, 0.125, 0, 0, 'Warlock - Immolate'), +(709, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(755, 0, 0.376, 0, 0, 'Warlock - Health Funnel'), +(769, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(774, 0, 0.15, 0, 0, 'Druid - Rejuvenation'), +(779, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(780, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(782, 0.033, 0, 0, 0, 'Druid - Thorns'), +(837, 0.488, 0, 0, 0, 'Mage - Frost Bolt'), +(865, 0.043, 0, 0, 0, 'Mage - Frost Nova'), +(879, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(913, 1.491, 0, 0, 0, 'Shaman - Healing Wave'), +(915, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(930, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(939, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(943, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(959, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(970, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(974, 0.5371, 0, 0, 0, 'Shaman - Earth Shield'), +(980, 0, 0.0548, 0, 0, 'Warlock - Curse of Agony'), +(984, 0.714, 0, 0, 0, 'Priest - Smite'), +(992, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(996, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(1004, 0.714, 0, 0, 0, 'Priest - Smite'), +(1014, 0, 0.0923, 0, 0, 'Warlock - Curse of Agony'), +(1026, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(1042, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(1058, 0, 0.235, 0, 0, 'Druid - Rejuvenation'), +(1062, 0, 0.093, 0, 0, 'Druid - Entangling Roots'), +(1064, 1.3428, 0, 0, 0, 'Shaman - Chain Heal'), +(1075, 0.033, 0, 0, 0, 'Druid - Thorns'), +(1088, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(1094, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(1106, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(1120, 0, 0.268, 0, 0, 'Warlock - Drain Soul'), +(1430, 0, 0.32, 0, 0, 'Druid - Rejuvenation'), +(1449, 0.166, 0, 0, 0, 'Mage - Arcane Explosion'), +(1495, 0, 0, 0.2, 0, 'Hunter - Mongoose Bite'), +(1776, 0, 0, 0.21, 0, 'Rogue - Gouge'), +(1822, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(1823, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(1824, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(1949, 0, 0.0949, 0, 0, 'Warlock - Hellfire'), +(1978, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(2050, 0.231, 0, 0, 0, 'Priest - Lesser Heal'), +(2052, 0.431, 0, 0, 0, 'Priest - Lesser Heal'), +(2053, 0.755, 0, 0, 0, 'Priest - Lesser Heal'), +(2054, 1.37, 0, 0, 0, 'Priest - Heal'), +(2055, 1.37, 0, 0, 0, 'Priest - Heal'), +(2060, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(2061, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(2090, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(2091, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(2120, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(2121, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(2136, 0.204, 0, 0, 0, 'Mage - Fire Blast'), +(2137, 0.332, 0, 0, 0, 'Mage - Fire Blast'), +(2138, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(2643, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(2767, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(2812, 0.07, 0, 0.07, 0, 'Paladin - Holy Wrath'), +(2818, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 1($AP*0.12 / number of ticks)'), +(2819, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 2($AP*0.12 / number of ticks)'), +(2860, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(2912, 1, 0, 0, 0, 'Druid - Starfire'), +(2941, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(2944, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(2948, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(3009, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(3010, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(3044, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(3110, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(3140, 0.793, 0, 0, 0, 'Mage - Fire ball'), +(3472, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(3606, 0.104, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 1'), +(3627, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(3674, 0, 0, 0, 0.02, 'Hunter - Black Arrow($RAP*0.1 / number of ticks)'), +(3698, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(3699, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(3700, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(4524, 1.35, 0, 0, 0, 'Pet Warlock - Demonic Immolation'), +(5176, 0.123, 0, 0, 0, 'Druid - Wrath'), +(5177, 0.231, 0, 0, 0, 'Druid - Wrath'), +(5178, 0.443, 0, 0, 0, 'Druid - Wrath'), +(5179, 0.571, 0, 0, 0, 'Druid - Wrath'), +(5180, 0.571, 0, 0, 0, 'Druid - Wrath'), +(5185, 0.231, 0, 0, 0, 'Druid - Healing Touch'), +(5186, 0.59, 0, 0, 0, 'Druid - Healing Touch'), +(5187, 1.042, 0, 0, 0, 'Druid - Healing Touch'), +(5188, 1.611, 0, 0, 0, 'Druid - Healing Touch'), +(5189, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(5195, 0, 0.1, 0, 0, 'Druid - Entangling Roots'), +(5196, 0, 0.1, 0, 0, 'Druid - Entangling Roots'), +(5570, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(5614, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(5615, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(5676, 0.396, 0, 0, 0, 'Warlock - Searing Pain'), +(5857, 0.143, 0, 0, 0, 'Warlock - Hellfire Effect on Enemy Rank 1'), +(6041, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(6060, 0.714, 0, 0, 0, 'Priest - Smite'), +(6063, 1.37, 0, 0, 0, 'Priest - Heal'), +(6064, 1.37, 0, 0, 0, 'Priest - Heal'), +(6074, 0, 0.291, 0, 0, 'Priest - Renew'), +(6075, 0, 0.376, 0, 0, 'Priest - Renew'), +(6076, 0, 0.376, 0, 0, 'Priest - Renew'), +(6077, 0, 0.376, 0, 0, 'Priest - Renew'), +(6078, 0, 0.376, 0, 0, 'Priest - Renew'), +(6131, 0.043, 0, 0, 0, 'Mage - Frost Nova'), +(6217, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(6222, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(6223, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(6343, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(6350, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 2'), +(6351, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 3'), +(6352, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 4'), +(6353, 1.15, 0, 0, 0, 'Warlock - Soul Fire'), +(6572, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(6574, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(6778, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(6780, 0.571, 0, 0, 0, 'Druid - Wrath'), +(6789, 0.214, 0, 0, 0, 'Warlock - Death Coil'), +(7001, 0, 0.3333, 0, 0, 'Priest - Lightwell Renew Rank 1'), +(7268, 0.157, 0, 0, 0, 'Mage - Arcane Missiles'), +(7269, 0.243, 0, 0, 0, 'Mage - Arcane Missiles'), +(7270, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(7294, 0.025, 0, 0, 0, 'Paladin - Retribution Aura'), +(7322, 0.743, 0, 0, 0, 'Mage - Frost Bolt'), +(7379, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(7641, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(7648, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(7651, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(7799, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(7800, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(7801, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(7802, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(7814, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(7815, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(7816, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(8004, 0.807, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(8005, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(8008, 0.807, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(8010, 0.807, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(8026, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(8028, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(8029, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(8034, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack'), +(8037, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack'), +(8042, 0.154, 0, 0, 0, 'Shaman - Earth Shock'), +(8044, 0.212, 0, 0, 0, 'Shaman - Earth Shock'), +(8045, 0.299, 0, 0, 0, 'Shaman - Earth Shock'), +(8046, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(8050, 0.134, 0.1, 0, 0, 'Shaman - Flame Shock'), +(8052, 0.198, 0.1, 0, 0, 'Shaman - Flame Shock'), +(8053, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(8056, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(8058, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(8092, 0.268, 0, 0, 0, 'Priest - Mind Blast'), +(8102, 0.364, 0, 0, 0, 'Priest - Mind Blast'), +(8103, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(8104, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(8105, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(8106, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(8187, 0.1, 0, 0, 0, 'Shaman - Magma totem trigger 1'), +(8198, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(8204, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(8205, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(8288, 0, 0.429, 0, 0, 'Warlock - Drain Soul'), +(8289, 0, 0.429, 0, 0, 'Warlock - Drain Soul'), +(8349, 0.15, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(8400, 1, 0, 0, 0, 'Mage - Fire ball'), +(8401, 1, 0, 0, 0, 'Mage - Fire ball'), +(8402, 1, 0, 0, 0, 'Mage - Fire ball'), +(8406, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(8407, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(8408, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(8412, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(8413, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(8418, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(8419, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(8422, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(8423, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(8437, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(8438, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(8439, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(8444, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(8445, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(8446, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(8492, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(8502, 0.214, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(8503, 0.214, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(8631, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(8632, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(8633, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(8680, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 1'), +(8685, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 2'), +(8689, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 3'), +(8903, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(8905, 0.571, 0, 0, 0, 'Druid - Wrath'), +(8910, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(8914, 0.033, 0, 0, 0, 'Druid - Thorns'), +(8921, 0.052, 0.052, 0, 0, 'Druid - Moonfire'), +(8924, 0.081, 0.081, 0, 0, 'Druid - Moonfire'), +(8925, 0.111, 0.111, 0, 0, 'Druid - Moonfire'), +(8926, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(8927, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(8928, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(8929, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(8936, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(8938, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(8939, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(8940, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(8941, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(8949, 1, 0, 0, 0, 'Druid - Starfire'), +(8950, 1, 0, 0, 0, 'Druid - Starfire'), +(8951, 1, 0, 0, 0, 'Druid - Starfire'), +(9005, 0, 0, 0, 0.03, 'Druid - Pounce'), +(9472, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(9473, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(9474, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(9750, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(9754, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(9756, 0.033, 0, 0, 0, 'Druid - Thorns'), +(9758, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(9823, 0, 0, 0, 0.03, 'Druid - Pounce'), +(9827, 0, 0, 0, 0.03, 'Druid - Pounce'), +(9833, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(9834, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(9835, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(9839, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(9840, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(9841, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(9852, 0, 0.1, 0, 0, 'Druid - Entangling Roots'), +(9853, 0, 0.1, 0, 0, 'Druid - Entangling Roots'), +(9856, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(9857, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(9858, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(9875, 1, 0, 0, 0, 'Druid - Starfire'), +(9876, 1, 0, 0, 0, 'Druid - Starfire'), +(9888, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(9889, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(9904, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(9908, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(9910, 0.033, 0, 0, 0, 'Druid - Thorns'), +(9912, 0.571, 0, 0, 0, 'Druid - Wrath'), +(10148, 1, 0, 0, 0, 'Mage - Fire ball'), +(10149, 1, 0, 0, 0, 'Mage - Fire ball'), +(10150, 1, 0, 0, 0, 'Mage - Fire ball'), +(10151, 1, 0, 0, 0, 'Mage - Fire ball'), +(10159, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(10160, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(10161, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(10179, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(10180, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(10181, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(10197, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(10199, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(10201, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(10202, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(10205, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(10206, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(10207, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(10215, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(10216, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(10230, 0.043, 0, 0, 0, 'Mage - Frost Nova'), +(10273, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(10274, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(10312, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(10313, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(10314, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(10318, 0.07, 0, 0.07, 0, 'Paladin - Holy Wrath'), +(10328, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(10329, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(10391, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(10392, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(10395, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(10396, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(10412, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(10413, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(10414, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(10435, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 5'), +(10436, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 6'), +(10445, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(10447, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(10448, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(10458, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack'), +(10466, 0.8057, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(10467, 0.8057, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(10468, 0.8057, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(10472, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(10473, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(10579, 0.1, 0, 0, 0, 'Shaman - Magma totem trigger 2'), +(10580, 0.1, 0, 0, 0, 'Shaman - Magma totem trigger 3'), +(10581, 0.1, 0, 0, 0, 'Shaman - Magma totem trigger 4'), +(10605, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(10622, 1.3428, 0, 0, 0, 'Shaman - Chain Heal'), +(10623, 1.3428, 0, 0, 0, 'Shaman - Chain Heal'), +(10892, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(10893, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(10894, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(10915, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(10916, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(10917, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(10927, 0, 0.376, 0, 0, 'Priest - Renew'), +(10928, 0, 0.376, 0, 0, 'Priest - Renew'), +(10929, 0, 0.376, 0, 0, 'Priest - Renew'), +(10933, 0.714, 0, 0, 0, 'Priest - Smite'), +(10934, 0.714, 0, 0, 0, 'Priest - Smite'), +(10945, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(10946, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(10947, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(10960, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(10961, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(10963, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(10964, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(10965, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(11113, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(11289, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(11290, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(11306, 0.214, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(11307, 0.214, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(11335, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 4'), +(11336, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 5'), +(11337, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 6'), +(11353, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 3($AP*0.12 / number of ticks)'), +(11354, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 4($AP*0.12 / number of ticks)'), +(11366, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(11580, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(11581, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(11600, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(11601, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(11659, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(11660, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(11661, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(11665, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(11667, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(11668, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(11671, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(11672, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(11675, 0, 0.429, 0, 0, 'Warlock - Drain Soul'), +(11681, 0.143, 0, 0, 0, 'Warlock - Hellfire Effect on Enemy Rank 1'), +(11682, 0.143, 0, 0, 0, 'Warlock - Hellfire Effect on Enemy Rank 1'), +(11683, 0, 0.0949, 0, 0, 'Warlock - Hellfire'), +(11684, 0, 0.0949, 0, 0, 'Warlock - Hellfire'), +(11693, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(11694, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(11695, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(11699, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(11700, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(11711, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(11712, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(11713, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(11762, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(11763, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(11778, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(11779, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(11780, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(12470, 0.5, 0, 0, 0, 'Pet Shaman - Fire Elemental Fire Nova'), +(12505, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(12522, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(12523, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(12524, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(12525, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(12526, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(13018, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(13019, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(13020, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(13021, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(13218, 0, 0, 0.04, 0, 'Rogue - Wound Poison Rank 1'), +(13222, 0, 0, 0.04, 0, 'Rogue - Wound Poison Rank 2'), +(13223, 0, 0, 0.04, 0, 'Rogue - Wound Poison Rank 3'), +(13224, 0, 0, 0.04, 0, 'Rogue - Wound Poison Rank 4'), +(13376, 0.015, 0, 0, 0, 'Pet Shaman - Fire Elemental Fire Shield'), +(13549, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13550, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13551, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13552, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13553, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13554, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13555, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(13797, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(13812, 0, 0, 0.1, 0.1, 'Hunter - Explosive Trap Effect'), +(14269, 0, 0, 0.2, 0, 'Hunter - Mongoose Bite'), +(14270, 0, 0, 0.2, 0, 'Hunter - Mongoose Bite'), +(14271, 0, 0, 0.2, 0, 'Hunter - Mongoose Bite'), +(14281, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14282, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14283, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14284, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14285, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14286, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14287, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(14288, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(14289, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(14290, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(14298, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(14299, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(14300, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(14301, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(14314, 0, 0, 0.1, 0.1, 'Hunter - Explosive Trap Effect'), +(14315, 0, 0, 0.1, 0.1, 'Hunter - Explosive Trap Effect'), +(14914, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15207, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(15208, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(15237, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(15261, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15262, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15263, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15264, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15265, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15266, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15267, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(15430, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(15431, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(16343, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(16344, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(16352, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack'), +(16353, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack'), +(16827, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(16828, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(16829, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(16830, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(16831, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(16832, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(17253, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17255, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17256, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17257, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17258, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17259, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17260, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17261, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(17877, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(17919, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(17920, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(17921, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(17922, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(17923, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(17924, 1.15, 0, 0, 0, 'Warlock - Soul Fire'), +(17925, 0.214, 0, 0, 0, 'Warlock - Death Coil'), +(17926, 0.214, 0, 0, 0, 'Warlock - Death Coil'), +(18220, 0.96, 0, 0, 0, 'Warlock - Dark Pact'), +(18809, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(18817, 1, 0, 0, 0, 'Skullflame Shield - Drain Life'), +(18867, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(18868, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(18869, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(18870, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(18871, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(18937, 0.96, 0, 0, 0, 'Warlock - Dark Pact'), +(18938, 0.96, 0, 0, 0, 'Warlock - Dark Pact'), +(19236, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(19238, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(19240, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(19241, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(19242, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(19243, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(19276, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(19277, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(19278, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(19279, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(19280, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(19306, 0, 0, 0.2, 0, 'Hunter - Counterattack'), +(19750, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(19939, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(19940, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(19941, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(19942, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(19943, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(19970, 0, 0.1, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(19971, 0, 0.1, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(19972, 0, 0.1, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(19973, 0, 0.1, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(19974, 0, 0.093, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(19975, 0, 0.055, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(20116, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(20153, 1.35, 0, 0, 0, 'Pet Warlock - Immolation (Infernal)'), +(20167, 0.15, 0, 0.15, 0, 'Paladin - Seal of Light Proc'), +(20187, 0.32, 0, 0.2, 0, 'Paladin - Judgement of Righteousness'), +(20253, 0, 0, 0.12, 0, 'Warrior - Intercept'), +(20909, 0, 0, 0.2, 0, 'Hunter - Counterattack'), +(20910, 0, 0, 0.2, 0, 'Hunter - Counterattack'), +(20922, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(20923, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(20924, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(20925, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'), +(20927, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'), +(20928, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'), +(22009, 0, 0.2, 0, 0, 'Priest - Greater Heal - 8P T2'), +(22703, 1, 0, 0, 0, 'Warlock - Inferno Effect'), +(23455, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(23458, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(23459, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(24239, 0.15, 0, 0.15, 0, 'Paladin - Hammer of Wrath'), +(24274, 0.15, 0, 0.15, 0, 'Paladin - Hammer of Wrath'), +(24275, 0.15, 0, 0.15, 0, 'Paladin - Hammer of Wrath'), +(24423, 0.119658, 0, 0.07, 0, 'Pet Skills - Demoralizing Screech'), +(24577, 0.119658, 0, 0.07, 0, 'Pet Skills - Demoralizing Screech'), +(24578, 0.119658, 0, 0.07, 0, 'Pet Skills - Demoralizing Screech'), +(24579, 0.119658, 0, 0.07, 0, 'Pet Skills - Demoralizing Screech'), +(24583, 0, 0.067, 0, 0, 'Pet Skills - Scorpid Poison'), +(24586, 0, 0.067, 0, 0, 'Pet Skills - Scorpid Poison'), +(24587, 0, 0.067, 0, 0, 'Pet Skills - Scorpid Poison'), +(24640, 0, 0.067, 0, 0, 'Pet Skills - Scorpid Poison'), +(24844, 0.333, 0, 0, 0, 'Pet Skills - Lightning Breath'), +(24974, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(24975, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(24976, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(24977, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(25008, 0.333, 0, 0, 0, 'Pet Skills - Lightning Breath'), +(25009, 0.333, 0, 0, 0, 'Pet Skills - Lightning Breath'), +(25010, 0.333, 0, 0, 0, 'Pet Skills - Lightning Breath'), +(25011, 0.333, 0, 0, 0, 'Pet Skills - Lightning Breath'), +(25012, 0.333, 0, 0, 0, 'Pet Skills - Lightning Breath'), +(25210, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(25213, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(25221, 0, 0.376, 0, 0, 'Priest - Renew'), +(25222, 0, 0.376, 0, 0, 'Priest - Renew'), +(25233, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(25235, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(25264, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(25269, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(25288, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(25292, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(25294, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(25295, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(25297, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(25298, 1, 0, 0, 0, 'Druid - Starfire'), +(25299, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(25304, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(25306, 1, 0, 0, 0, 'Mage - Fire ball'), +(25307, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(25308, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(25309, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(25311, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(25314, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(25315, 0, 0.376, 0, 0, 'Priest - Renew'), +(25316, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(25329, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(25331, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(25346, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(25349, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 5($AP*0.12 / number of ticks)'), +(25357, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(25363, 0.714, 0, 0, 0, 'Priest - Smite'), +(25364, 0.714, 0, 0, 0, 'Priest - Smite'), +(25367, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(25368, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(25372, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(25375, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(25384, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(25391, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(25396, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(25420, 0.8057, 0, 0, 0, 'Shaman - Lesser Healing Wave'), +(25422, 1.3428, 0, 0, 0, 'Shaman - Chain Heal'), +(25423, 1.3428, 0, 0, 0, 'Shaman - Chain Heal'), +(25437, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(25439, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(25442, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(25448, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(25449, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(25454, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(25457, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(25464, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(25467, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(25488, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon'), +(25501, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack'), +(25530, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack Rank 7'), +(25535, 0.214, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(25537, 0.214, 0, 0, 0, 'Shaman - Fire Nova Totem'), +(25550, 0.1, 0, 0, 0, 'Shaman - Magma totem trigger 5'), +(25902, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(25903, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(25911, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(25912, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(25913, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(25914, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(26363, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26364, 0.147, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26365, 0.227, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26366, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26367, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26369, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26370, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26371, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26372, 0.267, 0, 0, 0, 'Shaman - Lightning Shield Proc Rank 1'), +(26573, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(26839, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(26884, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(26890, 0, 0, 0.1, 0, 'Rogue - Instant Poison Rank 7'), +(26968, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 6($AP*0.12 / number of ticks)'), +(26978, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(26979, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(26980, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(26981, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(26982, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(26984, 0.571, 0, 0, 0, 'Druid - Wrath'), +(26985, 0.571, 0, 0, 0, 'Druid - Wrath'), +(26986, 1, 0, 0, 0, 'Druid - Starfire'), +(26987, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(26988, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(26989, 0, 0.1, 0, 0, 'Druid - Entangling Roots'), +(26992, 0.033, 0, 0, 0, 'Druid - Thorns'), +(26997, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(27003, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(27006, 0, 0, 0, 0.03, 'Druid - Pounce'), +(27010, 0, 0.1, 0, 0, 'Druid - Entangling Roots (Natures Grasp)'), +(27013, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(27016, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(27019, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(27021, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(27024, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(27026, 0, 0, 0.1, 0.1, 'Hunter - Explosive Trap Effect'), +(27049, 0.119658, 0, 0.07, 0, 'Pet Skills - Claw'), +(27050, 0.119658, 0, 0.07, 0, 'Pet Skills - Bite'), +(27051, 0.119658, 0, 0.07, 0, 'Pet Skills - Demoralizing Screech'), +(27060, 0, 0.067, 0, 0, 'Pet Skills - Scorpid Poison'), +(27067, 0, 0, 0.2, 0, 'Hunter - Counterattack'), +(27070, 1, 0, 0, 0, 'Mage - Fire ball'), +(27071, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(27072, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(27073, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(27074, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(27076, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(27078, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(27079, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(27080, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(27082, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(27086, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(27087, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(27088, 0.193, 0, 0, 0, 'Mage - Frost Nova'), +(27132, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(27133, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(27135, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(27136, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(27137, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(27138, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(27139, 0.07, 0, 0.07, 0, 'Paladin - Holy Wrath'), +(27173, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(27175, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(27176, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(27179, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'), +(27180, 0.15, 0, 0.15, 0, 'Paladin - Hammer of Wrath'), +(27187, 0, 0, 0, 0.03, 'Rogue - Deadly Poison Rank 7($AP*0.12 / number of ticks)'), +(27189, 0, 0, 0.04, 0, 'Rogue - Wound Poison Rank 5'), +(27209, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(27210, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(27211, 1.15, 0, 0, 0, 'Warlock - Soul Fire'), +(27213, 0, 0.0949, 0, 0, 'Warlock - Hellfire'), +(27214, 0.143, 0, 0, 0, 'Warlock - Hellfire Effect on Enemy Rank 1'), +(27215, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(27216, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(27217, 0, 0.429, 0, 0, 'Warlock - Drain Soul'), +(27218, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(27219, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(27220, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(27223, 0.214, 0, 0, 0, 'Warlock - Death Coil'), +(27243, 0, 0.25, 0, 0, 'Warlock - Seed of Corruption DOT'), +(27259, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(27263, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(27265, 0.96, 0, 0, 0, 'Warlock - Dark Pact'), +(27267, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(27274, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(27285, 0.2129, 0, 0, 0, 'Warlock - Seed of Corruption DD'), +(27799, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(27800, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(27801, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(27803, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(27804, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(27805, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(27873, 0, 0.3333, 0, 0, 'Priest - Lightwell Renew Rank 1'), +(27874, 0, 0.3333, 0, 0, 'Priest - Lightwell Renew Rank 1'), +(28276, 0, 0.3333, 0, 0, 'Priest - Lightwell Renew Rank 1'), +(29228, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(29722, 0.714, 0, 0, 0, 'Warlock - Incinerate'), +(30108, 0, 0.2, 0, 0, 'Warlock - Unstable Affliction'), +(30153, 0, 0, 0.028, 0, 'Pet Warlock - Intercept'), +(30195, 0, 0, 0.028, 0, 'Pet Warlock - Intercept'), +(30197, 0, 0, 0.028, 0, 'Pet Warlock - Intercept'), +(30213, 0, 0, 0.1429, 0, 'Pet Warlock - Cleave'), +(30219, 0, 0, 0.1429, 0, 'Pet Warlock - Cleave'), +(30223, 0, 0, 0.1429, 0, 'Pet Warlock - Cleave'), +(30283, 0.193, 0, 0, 0, 'Warlock - Shadowfury'), +(30357, 0, 0, 0.31, 0, 'Warrior - Revenge'), +(30404, 0, 0.2, 0, 0, 'Warlock - Unstable Affliction'), +(30405, 0, 0.2, 0, 0, 'Warlock - Unstable Affliction'), +(30413, 0.193, 0, 0, 0, 'Warlock - Shadowfury'), +(30414, 0.193, 0, 0, 0, 'Warlock - Shadowfury'), +(30451, 0.714, 0, 0, 0, 'Mage - Arcane Blast'), +(30455, 0.1429, 0, 0, 0, 'Mage - Ice Lance'), +(30459, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(30545, 1.15, 0, 0, 0, 'Warlock - Soul Fire'), +(30546, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(30910, 0, 2, 0, 0, 'Warlock - Curse of Doom'), +(31117, 1.8, 0, 0, 0, 'Warlock - Unstable Affliction Dispell'), +(31661, 0.193, 0, 0, 0, 'Mage - Dragons Breath'), +(31707, 0.83, 0, 0, 0, 'Pet Mage - Water Elemental Frostbolt'), +(31803, 0, 0.013, 0, 0.025, 'Paladin - Seal of Vengeance'), +(31804, 0.22, 0, 0.14, 0, 'Paladin - Judgement of Vengeance'), +(31935, 0.07, 0, 0.07, 0, 'Paladin - Avenger Shield'), +(32231, 0.714, 0, 0, 0, 'Warlock - Incinerate'), +(32379, 0.4286, 0, 0, 0, 'Priest - Shadow Word: Death'), +(32546, 0.8057, 0, 0, 0, 'Priest - Binding Heal'), +(32593, 0.5371, 0, 0, 0, 'Shaman - Earth Shield'), +(32594, 0.5371, 0, 0, 0, 'Shaman - Earth Shield'), +(32699, 0.07, 0, 0.07, 0, 'Paladin - Avenger Shield'), +(32700, 0.07, 0, 0.07, 0, 'Paladin - Avenger Shield'), +(32996, 0.4286, 0, 0, 0, 'Priest - Shadow Word: Death'), +(33041, 0.193, 0, 0, 0, 'Mage - Dragons Breath'), +(33042, 0.193, 0, 0, 0, 'Mage - Dragons Breath'), +(33043, 0.193, 0, 0, 0, 'Mage - Dragons Breath'), +(33073, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(33074, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(33110, 0.8057, 0, 0, 0, 'Priest - Prayer of Mending Heal Proc'), +(33745, 0, 0, 0, 0.01, 'Druid - Lacerate($AP*0.05 / number of ticks)'), +(33763, 0, 0.09518, 0, 0, 'Druid - Lifebloom HOT'), +(33778, 0.655, 0, 0, 0, 'Druid - Lifebloom DH'), +(33933, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(33938, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(34120, 0, 0, 0.1, 0, 'Hunter - Steady Shot'), +(34433, 0.65, 0, 0, 0, 'Priest - Shadowfiend'), +(34861, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(34863, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(34864, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(34865, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(34866, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(34889, 0.333, 0.167, 0, 0, 'Pet Skills - Fire Breath'), +(34914, 0, 0.4, 0, 0, 'Priest - Vampiric Touch'), +(34916, 0, 0.4, 0, 0, 'Priest - Vampiric Touch'), +(34917, 0, 0.4, 0, 0, 'Priest - Vampiric Touch'), +(35290, 0.119658, 0, 0.07, 0, 'Pet Skills - Gore'), +(35291, 0.119658, 0, 0.07, 0, 'Pet Skills - Gore'), +(35292, 0.119658, 0, 0.07, 0, 'Pet Skills - Gore'), +(35293, 0.119658, 0, 0.07, 0, 'Pet Skills - Gore'), +(35294, 0.119658, 0, 0.07, 0, 'Pet Skills - Gore'), +(35295, 0.119658, 0, 0.07, 0, 'Pet Skills - Gore'), +(35323, 0.333, 0.167, 0, 0, 'Pet Skills - Fire Breath'), +(35387, 0, 0.067, 0, 0, 'Pet Skills - Poison Spit'), +(35389, 0, 0.067, 0, 0, 'Pet Skills - Poison Spit'), +(35392, 0, 0.067, 0, 0, 'Pet Skills - Poison Spit'), +(36916, 0, 0, 0.2, 0, 'Hunter - Mongoose Bite'), +(38692, 1, 0, 0, 0, 'Mage - Fire ball'), +(38697, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(38700, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(38703, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(42198, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42208, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42209, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42210, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42211, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42212, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42213, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42218, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(42223, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(42224, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(42225, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(42226, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(42227, 0.286, 0, 0, 0, 'Pet Warlock - Rain of Fire'), +(42230, 0.12898, 0, 0, 0, 'Druid - Hurricane Triggered'), +(42231, 0.12898, 0, 0, 0, 'Druid - Hurricane Triggered'), +(42232, 0.12898, 0, 0, 0, 'Druid - Hurricane Triggered'), +(42233, 0.12898, 0, 0, 0, 'Druid - Hurricane Triggered'), +(42234, 0, 0, 0.0837, 0, 'Hunter - Volley'), +(42243, 0, 0, 0.0837, 0, 'Hunter - Volley'), +(42244, 0, 0, 0.0837, 0, 'Hunter - Volley'), +(42245, 0, 0, 0.0837, 0, 'Hunter - Volley'), +(42832, 1, 0, 0, 0, 'Mage - Fire ball'), +(42833, 1, 0, 0, 0, 'Mage - Fire ball'), +(42841, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(42842, 0.857, 0, 0, 0, 'Mage - Frost Bolt'), +(42844, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(42845, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles'), +(42858, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(42859, 0.4286, 0, 0, 0, 'Mage - Scorch'), +(42872, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(42873, 0.4286, 0, 0, 0, 'Mage - Fire Blast'), +(42890, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(42891, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'), +(42894, 0.714, 0, 0, 0, 'Mage - Arcane Blast'), +(42896, 0.714, 0, 0, 0, 'Mage - Arcane Blast'), +(42897, 0.714, 0, 0, 0, 'Mage - Arcane Blast'), +(42913, 0.1429, 0, 0, 0, 'Mage - Ice Lance'), +(42914, 0.1429, 0, 0, 0, 'Mage - Ice Lance'), +(42917, 0.193, 0, 0, 0, 'Mage - Frost Nova'), +(42920, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(42921, 0.214, 0, 0, 0, 'Mage - Arcane Explosion'), +(42925, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(42926, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'), +(42930, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(42931, 0.2036, 0, 0, 0, 'Mage - Cone of Cold'), +(42937, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42938, 0.1429, 0, 0, 0, 'Mage - Blizzard Triggered Spell'), +(42944, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(42945, 0.193, 0, 0, 0, 'Mage - Blast Wave'), +(42949, 0.193, 0, 0, 0, 'Mage - Dragons Breath'), +(42950, 0.193, 0, 0, 0, 'Mage - Dragons Breath'), +(44203, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(44205, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(44206, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(44207, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(44208, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(44425, 0.714, 0, 0, 0, 'Mage - Arcane Barrage'), +(44457, 0, 0.2, 0, 0, 'Mage - Living Bomb DOT'), +(44461, 0.4, 0, 0, 0, 'Mage - Living Bomb DD'), +(44614, 0.857, 0, 0, 0, 'Mage - Frostfire Bolt'), +(44780, 0.714, 0, 0, 0, 'Mage - Arcane Barrage'), +(44781, 0.714, 0, 0, 0, 'Mage - Arcane Barrage'), +(45477, 0, 0, 0.1, 0, 'Death Knight - Icy Touch'), +(47476, 0, 0, 0.06, 0, 'Death Knight - Strangulate'), +(47501, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(47502, 0, 0, 0.12, 0, 'Warrior - Thunder Clap'), +(47610, 0.857, 0, 0, 0, 'Mage - Frostfire Bolt'), +(47632, 0, 0, 0.15, 0, 'Death Knight - Death Coil'), +(47633, 0, 0, 0.225, 0, 'Death Knight - Death Coil Heal'), +(47666, 0.1905, 0, 0, 0, 'Priest - Pennance damage'), +(47750, 0.5362, 0, 0, 0, 'Priest - Pennance heal'), +(47808, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(47809, 0.857, 0, 0, 0, 'Warlock - Shadow Bolt'), +(47810, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(47811, 0.2, 0.2, 0, 0, 'Warlock - Immolate'), +(47812, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(47813, 0, 0.2, 0, 0, 'Warlock - Corruption'), +(47814, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(47815, 0.4286, 0, 0, 0, 'Warlock - Searing Pain'), +(47817, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(47818, 0.286, 0, 0, 0, 'Warlock - Rain of Fire Triggered Rank 1'), +(47822, 0.143, 0, 0, 0, 'Warlock - Hellfire Effect on Enemy Rank 1'), +(47823, 0, 0.0949, 0, 0, 'Warlock - Hellfire'), +(47824, 1.15, 0, 0, 0, 'Warlock - Soul Fire'), +(47825, 1.15, 0, 0, 0, 'Warlock - Soul Fire'), +(47826, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(47827, 0.4286, 0, 0, 0, 'Warlock - Shadowburn'), +(47833, 0.2129, 0, 0, 0, 'Warlock - Seed of Corruption DD'), +(47834, 0.2129, 0, 0, 0, 'Warlock - Seed of Corruption DD'), +(47835, 0, 0.25, 0, 0, 'Warlock - Seed of Corruption DOT'), +(47836, 0, 0.25, 0, 0, 'Warlock - Seed of Corruption DOT'), +(47837, 0.714, 0, 0, 0, 'Warlock - Incinerate'), +(47838, 0.714, 0, 0, 0, 'Warlock - Incinerate'), +(47841, 0, 0.2, 0, 0, 'Warlock - Unstable Affliction'), +(47843, 0, 0.2, 0, 0, 'Warlock - Unstable Affliction'), +(47846, 0.193, 0, 0, 0, 'Warlock - Shadowfury'), +(47847, 0.193, 0, 0, 0, 'Warlock - Shadowfury'), +(47855, 0, 0.429, 0, 0, 'Warlock - Drain Soul'), +(47856, 0, 0.538, 0, 0, 'Warlock - Health Funnel'), +(47857, 0, 0.143, 0, 0, 'Warlock - Drain Life'), +(47859, 0.214, 0, 0, 0, 'Warlock - Death Coil'), +(47860, 0.214, 0, 0, 0, 'Warlock - Death Coil'), +(47863, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(47864, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'), +(47867, 0, 2, 0, 0, 'Warlock - Curse of Doom'), +(47897, 0.1064, 0, 0, 0, 'Warlock - Shadowflame(rank 1, DD)'), +(47960, 0, 0.0667, 0, 0, 'Warlock - Shadowflame(rank 1, DOT)'), +(47964, 0.714, 0, 0, 0, 'Pet Warlock - Firebolt'), +(47991, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(47992, 0.429, 0, 0, 0, 'Pet Warlock - Lash of Pain'), +(47994, 0, 0, 0.1429, 0, 'Pet Warlock - Cleave'), +(47995, 0, 0, 0.028, 0, 'Pet Warlock - Intercept'), +(48062, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(48063, 1.611, 0, 0, 0, 'Priest - Greater Heal'), +(48067, 0, 0.376, 0, 0, 'Priest - Renew'), +(48068, 0, 0.376, 0, 0, 'Priest - Renew'), +(48070, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(48071, 0.8057, 0, 0, 0, 'Priest - Flash Heal'), +(48072, 0.526, 0, 0, 0, 'Priest - Prayer of Healing'), +(48075, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(48076, 0.303, 0, 0, 0, 'Priest - Holy Nova Heal'), +(48077, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(48078, 0.161, 0, 0, 0, 'Priest - Holy Nova Damage'), +(48084, 0, 0.3333, 0, 0, 'Priest - Lightwell Renew Rank 1'), +(48088, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(48089, 0.402, 0, 0, 0, 'Priest - Circle of Healing'), +(48119, 0.8057, 0, 0, 0, 'Priest - Binding Heal'), +(48120, 0.8057, 0, 0, 0, 'Priest - Binding Heal'), +(48122, 0.714, 0, 0, 0, 'Priest - Smite'), +(48123, 0.714, 0, 0, 0, 'Priest - Smite'), +(48124, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(48125, 0, 0.1833, 0, 0, 'Priest - Shadow Word: Pain'), +(48126, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(48127, 0.4286, 0, 0, 0, 'Priest - Mind Blast'), +(48134, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(48135, 0.571, 0.0529, 0, 0, 'Priest - Holy Fire'), +(48157, 0.4286, 0, 0, 0, 'Priest - Shadow Word: Death'), +(48158, 0.4286, 0, 0, 0, 'Priest - Shadow Word: Death'), +(48159, 0, 0.4, 0, 0, 'Priest - Vampiric Touch'), +(48160, 0, 0.4, 0, 0, 'Priest - Vampiric Touch'), +(48172, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(48173, 0.8057, 0, 0, 0, 'Priest - Desperate Prayer'), +(48181, 0.4286, 0, 0, 0, 'Warlock - Haunt'), +(48299, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(48300, 0, 0.18, 0, 0, 'Priest - Devouring Plague'), +(48377, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(48378, 1.61, 0, 0, 0, 'Druid - Healing Touch'), +(48438, 0, 0.115, 0, 0, 'Druid - Wild Growth'), +(48440, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(48441, 0, 0.376, 0, 0, 'Druid - Rejuvenation'), +(48442, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(48443, 0.3, 0.1878, 0, 0, 'Druid - Regrowth'), +(48444, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(48445, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'), +(48450, 0, 0.09518, 0, 0, 'Druid - Lifebloom HOT'), +(48451, 0, 0.09518, 0, 0, 'Druid - Lifebloom HOT'), +(48459, 0.571, 0, 0, 0, 'Druid - Wrath'), +(48461, 0.571, 0, 0, 0, 'Druid - Wrath'), +(48462, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(48463, 0.13, 0.13, 0, 0, 'Druid - Moonfire'), +(48464, 1, 0, 0, 0, 'Druid - Starfire'), +(48465, 1, 0, 0, 0, 'Druid - Starfire'), +(48466, 0.12898, 0, 0, 0, 'Druid - Hurricane Triggered'), +(48468, 0, 0.2, 0, 0, 'Druid - Insect Swarm'), +(48561, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(48562, 0, 0, 0.063, 0, 'Druid - Swipe (Bear)'), +(48567, 0, 0, 0, 0.01, 'Druid - Lacerate($AP*0.05 / number of ticks)'), +(48568, 0, 0, 0, 0.01, 'Druid - Lacerate($AP*0.05 / number of ticks)'), +(48573, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(48574, 0, 0, 0.01, 0.06, 'Druid - Rake ($AP*0.18 / number of ticks)'), +(48628, 0, 0, 0, 0.15, 'Druid - Lock Jaw'), +(48675, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(48676, 0, 0, 0, 0.07, 'Rogue - Garrote'), +(48721, 0, 0, 0.06, 0, 'Death Knight - Blood Boil'), +(48781, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(48782, 1.66, 0, 0, 0, 'Paladin - Holy Light'), +(48784, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(48785, 1, 0, 0, 0, 'Paladin - Flash of Light'), +(48800, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(48801, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'), +(48805, 0.15, 0, 0.15, 0, 'Paladin - Hammer of Wrath'), +(48806, 0.15, 0, 0.15, 0, 'Paladin - Hammer of Wrath'), +(48816, 0.07, 0, 0.07, 0, 'Paladin - Holy Wrath'), +(48817, 0.07, 0, 0.07, 0, 'Paladin - Holy Wrath'), +(48818, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(48819, 0, 0.04, 0, 0.04, 'Paladin - Consecration'), +(48820, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(48821, 0.8057, 0, 0, 0, 'Paladin - Holy Shock Triggered Heal Rank 1'), +(48822, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(48823, 0.4286, 0, 0, 0, 'Paladin - Holy Shock Triggered Hurt Rank 1'), +(48826, 0.07, 0, 0.07, 0, 'Paladin - Avenger Shield'), +(48827, 0.07, 0, 0.07, 0, 'Paladin - Avenger Shield'), +(48951, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'), +(48952, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'), +(48998, 0, 0, 0.2, 0, 'Hunter - Counterattack'), +(48999, 0, 0, 0.2, 0, 'Hunter - Counterattack'), +(49000, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(49001, 0, 0, 0, 0.04, 'Hunter - Serpent Sting($RAP*0.2 / number of ticks)'), +(49044, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(49045, 0, 0, 0.15, 0, 'Hunter - Arcane Shot'), +(49047, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(49048, 0, 0, 0.2, 0, 'Hunter - Multi Shot'), +(49051, 0, 0, 0.1, 0, 'Hunter - Steady Shot'), +(49052, 0, 0, 0.1, 0, 'Hunter - Steady Shot'), +(49053, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(49054, 0, 0, 0, 0.02, 'Hunter - Immolation Trap($RAP*0.1 / number of ticks)'), +(49064, 0, 0, 0.1, 0.1, 'Hunter - Explosive Trap Effect'), +(49065, 0, 0, 0.1, 0.1, 'Hunter - Explosive Trap Effect'), +(49184, 0, 0, 0.2, 0, 'Death Knight - Howling Blast'), +(49230, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(49231, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'), +(49232, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(49233, 0.214, 0.1, 0, 0, 'Shaman - Flame Shock'), +(49235, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(49236, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'), +(49237, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(49238, 0.714, 0, 0, 0, 'Shaman - Lightning Bolt'), +(49270, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(49271, 0.571, 0, 0, 0, 'Shaman - Chain Lightning'), +(49272, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(49273, 1.611, 0, 0, 0, 'Shaman - Healing Wave'), +(49275, 0.8057, 0, 0, 0, 'Shaman - Lesser Healing Wave'); From f61943b5820c75dc32b317b2174ae0e3c8b87367 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 24 Sep 2022 06:25:26 +0000 Subject: [PATCH 04/26] chore(DB): import pending files Referenced commit(s): a59ac556ab81a8a2c15b310f267add0d31c6deb8 --- .../rev_1663951634330230900.sql => db_world/2022_09_24_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1663951634330230900.sql => db_world/2022_09_24_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1663951634330230900.sql b/data/sql/updates/db_world/2022_09_24_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1663951634330230900.sql rename to data/sql/updates/db_world/2022_09_24_00.sql index b35f18539..556df8558 100644 --- a/data/sql/updates/pending_db_world/rev_1663951634330230900.sql +++ b/data/sql/updates/db_world/2022_09_24_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_23_00 -> 2022_09_24_00 -- DELETE FROM `spell_bonus_data` WHERE `entry` BETWEEN 110 AND 50000; INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `ap_dot_bonus`, `comments`) VALUES From d2610941bd54ed5b4e661a4dbcff7583c9d6e44b Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Sat, 24 Sep 2022 03:28:32 -0300 Subject: [PATCH 05/26] fix(Core): Crash (#13106) --- src/server/scripts/Spells/spell_rogue.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 18d7aefdd..bb6b8b9e2 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -104,6 +104,9 @@ class spell_rog_blade_flurry : public AuraScript bool CheckProc(ProcEventInfo& eventInfo) { + if (!eventInfo.GetActor()) + return false; + Unit* _procTarget = eventInfo.GetActor()->SelectNearbyNoTotemTarget(eventInfo.GetProcTarget()); if (_procTarget) _procTargetGUID = _procTarget->GetGUID(); From 14f0eb1ba6e0c96e35f7b6cc675555f0168e3c73 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 24 Sep 2022 15:27:16 -0300 Subject: [PATCH 06/26] fix(DB/Creature): Set Battered Brewer's gossip (#13123) --- data/sql/updates/pending_db_world/rev_1664040930977215800.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1664040930977215800.sql diff --git a/data/sql/updates/pending_db_world/rev_1664040930977215800.sql b/data/sql/updates/pending_db_world/rev_1664040930977215800.sql new file mode 100644 index 000000000..62d2180b3 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1664040930977215800.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `gossip_menu_id` = 11383, `npcflag` = `npcflag` |1 WHERE `entry` = 40437; From d394668597993d4d1974687503eec5e448185afc Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 24 Sep 2022 18:29:12 +0000 Subject: [PATCH 07/26] chore(DB): import pending files Referenced commit(s): 14f0eb1ba6e0c96e35f7b6cc675555f0168e3c73 --- .../rev_1664040930977215800.sql => db_world/2022_09_24_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1664040930977215800.sql => db_world/2022_09_24_01.sql} (71%) diff --git a/data/sql/updates/pending_db_world/rev_1664040930977215800.sql b/data/sql/updates/db_world/2022_09_24_01.sql similarity index 71% rename from data/sql/updates/pending_db_world/rev_1664040930977215800.sql rename to data/sql/updates/db_world/2022_09_24_01.sql index 62d2180b3..4a2924e8d 100644 --- a/data/sql/updates/pending_db_world/rev_1664040930977215800.sql +++ b/data/sql/updates/db_world/2022_09_24_01.sql @@ -1,2 +1,3 @@ +-- DB update 2022_09_24_00 -> 2022_09_24_01 -- UPDATE `creature_template` SET `gossip_menu_id` = 11383, `npcflag` = `npcflag` |1 WHERE `entry` = 40437; From 2e92d1e993c1d4461ed4e7bcc5874403d9aff6d5 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 25 Sep 2022 10:12:58 -0300 Subject: [PATCH 08/26] =?UTF-8?q?chore(DB/Quests):=20Correct=20wrong=20mar?= =?UTF-8?q?k=20quest=20being=20added=20in=208fc055e44ec=E2=80=A6=20(#13118?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(DB/Quests): Correct wrong mark quest being added in 8fc055e44ecc3de509bb0d5ee2f44a41b357a8eb * Update rev_1664025994910185400.sql --- .../sql/updates/pending_db_world/rev_1664025994910185400.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1664025994910185400.sql diff --git a/data/sql/updates/pending_db_world/rev_1664025994910185400.sql b/data/sql/updates/pending_db_world/rev_1664025994910185400.sql new file mode 100644 index 000000000..8b886372b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1664025994910185400.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `creature_questender` WHERE `id` = 15738 AND `quest` = 8832; +DELETE FROM `creature_questender` WHERE `id` = 15738 AND `quest` = 8815; +INSERT INTO `creature_questender` (`id`, `quest`) VALUES +(15738, 8815); From a404ae849b3516fe3fde7acd7b1115c70636115d Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 25 Sep 2022 13:15:03 +0000 Subject: [PATCH 09/26] chore(DB): import pending files Referenced commit(s): 2e92d1e993c1d4461ed4e7bcc5874403d9aff6d5 --- .../rev_1664025994910185400.sql => db_world/2022_09_25_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1664025994910185400.sql => db_world/2022_09_25_00.sql} (83%) diff --git a/data/sql/updates/pending_db_world/rev_1664025994910185400.sql b/data/sql/updates/db_world/2022_09_25_00.sql similarity index 83% rename from data/sql/updates/pending_db_world/rev_1664025994910185400.sql rename to data/sql/updates/db_world/2022_09_25_00.sql index 8b886372b..4f1530a67 100644 --- a/data/sql/updates/pending_db_world/rev_1664025994910185400.sql +++ b/data/sql/updates/db_world/2022_09_25_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_24_01 -> 2022_09_25_00 -- DELETE FROM `creature_questender` WHERE `id` = 15738 AND `quest` = 8832; DELETE FROM `creature_questender` WHERE `id` = 15738 AND `quest` = 8815; From 87861a86c1a8b3dcd9bf6388804fe6e02d4b9d3d Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:40:21 +0200 Subject: [PATCH 10/26] fix(Core): Crashfix. (#13126) --- .../Ulduar/Ulduar/boss_assembly_of_iron.cpp | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 262f7e36e..ab9689c13 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -612,7 +612,7 @@ public: InstanceScript* pInstance; uint32 _phase; bool _flyPhase; - Unit* _flyTarget; + ObjectGuid _flyTargetGUID; uint32 _channelTimer; bool _stunnedAchievement; @@ -625,7 +625,7 @@ public: _channelTimer = 0; _phase = 0; _flyPhase = false; - _flyTarget = nullptr; + _flyTargetGUID.Clear(); _stunnedAchievement = true; events.Reset(); @@ -756,11 +756,14 @@ public: if (_flyPhase) { - if (_flyTarget && me->GetDistance2d(_flyTarget) >= 6 ) + if (Unit* flyTarget = ObjectAccessor::GetUnit(*me, _flyTargetGUID)) { - //float speed = me->GetDistance(_flyTarget->GetPositionX(), _flyTarget->GetPositionY(), _flyTarget->GetPositionZ()+15) / (1500.0f * 0.001f); - me->SendMonsterMove(_flyTarget->GetPositionX(), _flyTarget->GetPositionY(), _flyTarget->GetPositionZ() + 15, 1500, SPLINEFLAG_FLYING); - me->SetPosition(_flyTarget->GetPositionX(), _flyTarget->GetPositionY(), _flyTarget->GetPositionZ(), _flyTarget->GetOrientation()); + if (me->GetDistance2d(flyTarget) >= 6) + { + //float speed = me->GetDistance(_flyTarget->GetPositionX(), _flyTarget->GetPositionY(), _flyTarget->GetPositionZ()+15) / (1500.0f * 0.001f); + me->SendMonsterMove(flyTarget->GetPositionX(), flyTarget->GetPositionY(), flyTarget->GetPositionZ() + 15, 1500, SPLINEFLAG_FLYING); + me->SetPosition(flyTarget->GetPositionX(), flyTarget->GetPositionY(), flyTarget->GetPositionZ(), flyTarget->GetOrientation()); + } } } @@ -794,7 +797,8 @@ public: Talk(SAY_BRUNDIR_FLIGHT); _flyPhase = true; - _flyTarget = me->GetVictim(); + Unit* oldVictim = me->GetVictim(); + _flyTargetGUID = oldVictim->GetGUID(); me->SetRegeneratingHealth(false); me->SetDisableGravity(true); @@ -803,7 +807,7 @@ public: me->SetReactState(REACT_PASSIVE); me->SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty); me->SetUnitFlag(UNIT_FLAG_STUNNED); - me->SendMonsterMove(_flyTarget->GetPositionX(), _flyTarget->GetPositionY(), _flyTarget->GetPositionZ() + 15, 1500, SPLINEFLAG_FLYING); + me->SendMonsterMove(oldVictim->GetPositionX(), oldVictim->GetPositionY(), oldVictim->GetPositionZ() + 15, 1500, SPLINEFLAG_FLYING); me->CastSpell(me, SPELL_LIGHTNING_TENDRILS, true); me->CastSpell(me, 61883, true); @@ -822,11 +826,13 @@ public: me->SetCanFly(false); me->SetReactState(REACT_AGGRESSIVE); me->SetDisableGravity(false); - if (_flyTarget) - me->Attack(_flyTarget, false); + if (Unit* flyTarget = ObjectAccessor::GetUnit(*me, _flyTargetGUID)) + { + me->Attack(flyTarget, false); + } me->SetRegeneratingHealth(true); - _flyTarget = nullptr; + _flyTargetGUID.Clear(); me->RemoveAura(SPELL_LIGHTNING_TENDRILS); me->RemoveAura(61883); DoResetThreat(); From 984a389d37f6bff11193a7103edf75811969042e Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:40:37 +0200 Subject: [PATCH 11/26] fix(Core): Crashfix. (#13113) Fixes #13111 --- src/server/game/Entities/GameObject/GameObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index d58979f0d..81b823b62 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2089,7 +2089,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) trigger->SetUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); if (owner->IsFFAPvP()) { - if (!HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP)) + if (!trigger->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP)) { sScriptMgr->OnFfaPvpStateUpdate(trigger, true); trigger->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); From dd4fa3893eb126ce89a42a3657e030ad3e0c9d33 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:41:37 +0200 Subject: [PATCH 12/26] =?UTF-8?q?fix(Scripts/MoltenCore):=20Boss'=20runes?= =?UTF-8?q?=20should=20not=20respawn=20after=205=20min=20o=E2=80=A6=20(#13?= =?UTF-8?q?127)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/MoltenCore): Boss' runes should not respawn after 5 min of boss death. Fixes #10039 --- .../BlackrockMountain/MoltenCore/instance_molten_core.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp index 230b54e6e..e5896a335 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp @@ -163,7 +163,7 @@ public: if (GetBossState(linkedBossObjData[i].bossId) == DONE) { - go->DespawnOrUnsummon(); + go->DespawnOrUnsummon(0ms, Seconds(WEEK)); } else { @@ -190,7 +190,7 @@ public: if (GetBossState(linkedBossObjData[i].bossId) == DONE) { - go->SetGoState(GO_STATE_ACTIVE); + go->UseDoorOrButton(WEEK * IN_MILLISECONDS); } else { @@ -310,13 +310,13 @@ public: { if (GameObject* circle = instance->GetGameObject(_circlesGUIDs[bossId])) { - circle->DespawnOrUnsummon(); + circle->DespawnOrUnsummon(0ms, Seconds(WEEK)); _circlesGUIDs[bossId].Clear(); } if (GameObject* rune = instance->GetGameObject(_runesGUIDs[bossId])) { - rune->SetGoState(GO_STATE_ACTIVE); + rune->UseDoorOrButton(WEEK * IN_MILLISECONDS); _runesGUIDs[bossId].Clear(); } From daf064c4c3199984db2e67ee033e9f924bea8f19 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:41:52 +0200 Subject: [PATCH 13/26] =?UTF-8?q?fix(DB/Conditions):=20"Brewfest=20-=20app?= =?UTF-8?q?le=20trap=20-=20friendly=20DND"=20aura=20targe=E2=80=A6=20(#131?= =?UTF-8?q?10)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(DB/Conditions): "Brewfest - apple trap - friendly DND" aura targets only players with "Ram Fatigue" aura. Fixes #13078 * Update. --- data/sql/updates/pending_db_world/rev_1664010686716176700.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1664010686716176700.sql diff --git a/data/sql/updates/pending_db_world/rev_1664010686716176700.sql b/data/sql/updates/pending_db_world/rev_1664010686716176700.sql new file mode 100644 index 000000000..21e15421c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1664010686716176700.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=43450; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,43450,0,0,1,0,43052,0,0,0,0,0,'','Brewfest - apple trap - friendly DND targets only players with aura Ram Fatigue'); From 654ab0cc6f8b8eab93fcc31485e3b324600eeaca Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:42:40 +0200 Subject: [PATCH 14/26] fix(DB/Conditions): Added conditions to Neill Ramstein & Ram Master Ray gossip options. Source: TrinityCore. (#13108) fix(DB/Conditions): Added conditions to Neill Ramstein & Ram Master Ray gossip options. Fixes #13082 --- .../rev_1664007070636219300.sql | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1664007070636219300.sql diff --git a/data/sql/updates/pending_db_world/rev_1664007070636219300.sql b/data/sql/updates/pending_db_world/rev_1664007070636219300.sql new file mode 100644 index 000000000..20076cd41 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1664007070636219300.sql @@ -0,0 +1,47 @@ +-- +DELETE FROM `gossip_menu_option` WHERE `MenuId`=8934 AND `OptionId`=4 AND `ActionMenuId`=0; +UPDATE `gossip_menu_option` SET `OptionId`=4 WHERE `MenuId`=8934 AND `OptionId`=0 AND `ActionMenuId`=8953; + +UPDATE `gossip_menu_option` SET `OptionText`='Do you still need some help moving kegs from the crash site near Razor Hill?', `OptionBroadcastTextID`=23546, `ActionMenuId`=8973 WHERE `MenuId`=8976 AND `OptionId`=4; + +DELETE FROM `gossip_menu_option` WHERE `MenuID`=8973; +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(8973,0,0,'I\m ready to work for you today! Give me that ram!',23545,1,1,0,0,0,0,NULL,0,0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (8934,8976); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15,8934,1,0,0,1,0,43883,0,0,1,0,0,'','Show Gossip option only if player does not have Aura \"Rental Racing Ram\"'), +(15,8934,1,0,0,47,0,11122,10,0,0,0,0,'','Show Gossip option only if player does not have \"There and Back Again\" taken'), +(15,8934,1,0,0,28,0,11122,0,0,1,0,0,'','Show Gossip option only if player has not quest \"There and Back Again\" rewarded'), + +(15,8934,2,0,0,1,0,43883,0,0,1,0,0,'','Show Gossip option only if player does not have Aura \"Rental Racing Ram\"'), +(15,8934,2,0,0,47,0,11318,10,0,0,0,0,'','Show Gossip option only if player does not have \"Now This is Ram Racing... Almost.\" taken'), +(15,8934,2,0,0,28,0,11318,0,0,1,0,0,'','Show Gossip option only if player has not quest \"Now This is Ram Racing... Almost.\" rewarded'), + +(15,8934,3,0,0,1,0,43883,0,0,1,0,0,'','Show Gossip option only if player does not have Aura \"Rental Racing Ram\"'), +(15,8934,3,0,0,47,0,11293,10,0,0,0,0,'','Show Gossip option only if player does not have \"Bark for the Barleybrews!\" taken'), +(15,8934,3,0,1,47,0,11294,10,0,0,0,0,'','Show Gossip option only if player does not have \"Bark for the Thunderbrews!\" taken'), +(15,8934,3,0,0,28,0,11293,0,0,1,0,0,'','Show Gossip option only if player has not quest \"Bark for the Barleybrews!\" rewarded'), +(15,8934,3,0,1,28,0,11294,0,0,1,0,0,'','Show Gossip option only if player has not quest \"Bark for the Thunderbrews!\" rewarded'), + +(15,8934,4,0,0,8,0,11122,0,0,0,0,0,'','Brewfest Relay Race - Show gossip if player has turned in the quest \"There and Back Again\"'), +(15,8934,4,0,0,1,0,44689,0,0,1,0,0,'','Brewfest Relay Race - Show gossip if player does not have aura \"Relay Race Accept Hidden Debuff - DND\"'), +(15,8934,4,0,0,1,0,43883,0,0,1,0,0,'','Brewfest Relay Race - Show gossip if player does not have aura \"Rental Racing Ram\"'), + +(15,8976,1,0,0,1,0,43883,0,0,1,0,0,'','Show Gossip option only if player does not have Aura \"Rental Racing Ram\"'), +(15,8976,1,0,0,47,0,11412,10,0,0,0,0,'','Show Gossip option only if player does not have \"There and Back Again\" taken'), +(15,8976,1,0,0,28,0,11412,0,0,1,0,0,'','Show Gossip option only if player has not quest \"There and Back Again\" rewarded'), + +(15,8976,2,0,0,1,0,43883,0,0,1,0,0,'','Show Gossip option only if player does not have Aura \"Rental Racing Ram\"'), +(15,8976,2,0,0,47,0,11409,10,0,0,0,0,'','Show Gossip option only if player does not have \"Now This is Ram Racing... Almost.\" taken'), +(15,8976,2,0,0,28,0,11409,0,0,1,0,0,'','Show Gossip option only if player has not quest \"Now This is Ram Racing... Almost.\" rewarded'), + +(15,8976,3,0,0,1,0,43883,0,0,1,0,0,'','Show Gossip option only if player does not have Aura \"Rental Racing Ram\"'), +(15,8976,3,0,0,47,0,11407,10,0,0,0,0,'','Show Gossip option only if player does not have \"Bark for Drohn\s Distillery!\" taken'), +(15,8976,3,0,1,47,0,11408,10,0,0,0,0,'','Show Gossip option only if player does not have \"Bark for T\chali\s Voodoo Brewery!\" taken'), +(15,8976,3,0,0,28,0,11407,0,0,1,0,0,'','Show Gossip option only if player has not quest \"Bark for Drohn\s Distillery!\" rewarded'), +(15,8976,3,0,1,28,0,11408,0,0,1,0,0,'','Show Gossip option only if player has not quest \"Bark for T\chali\s Voodoo Brewery!\" rewarded'), + +(15,8976,4,0,0,8,0,11412,0,0,0,0,0,'','Brewfest Relay Race - Show gossip if player has turned in the quest \"There and Back Again\"'), +(15,8976,4,0,0,1,0,44689,0,0,1,0,0,'','Brewfest Relay Race - Show gossip if player does not have aura \"Relay Race Accept Hidden Debuff - DND\"'), +(15,8976,4,0,0,1,0,43883,0,0,1,0,0,'','Brewfest Relay Race - Show gossip if player does not have aura \"Rental Racing Ram\"'); From 63acc112341ce3203f978103976a1ff4ca965a7e Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Sun, 25 Sep 2022 10:44:00 -0300 Subject: [PATCH 15/26] fix(Scripts/TempleOfAhnQiraj): Reduce player damage req for Ouro (#13065) * fix(Core/TempleOfAhnQiraj): Reduce player damage req for ouro * move --- src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 02688a101..5d78ec10e 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -291,6 +291,7 @@ struct npc_dirt_mound : ScriptedAI { creature->SetInCombatWithZone(); creature->SetHealth(_ouroHealth); + creature->LowerPlayerDamageReq(creature->GetMaxHealth() - creature->GetHealth()); } } From 91daa6cb7813f5f9edf1dab2d3104b432a29e792 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 15:44:33 +0200 Subject: [PATCH 16/26] =?UTF-8?q?fix(Scripts/Spells):=20Prevent=20from=20s?= =?UTF-8?q?tacking=20basic=20campfires=20on=20each=20ot=E2=80=A6=20(#13037?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/Spells): Prevent from stacking basic campfires on each other. Fixes #9369 --- .../rev_1663405794661340300.sql | 4 ++++ src/server/scripts/Spells/spell_generic.cpp | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1663405794661340300.sql diff --git a/data/sql/updates/pending_db_world/rev_1663405794661340300.sql b/data/sql/updates/pending_db_world/rev_1663405794661340300.sql new file mode 100644 index 000000000..ad5b5e402 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1663405794661340300.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id`=818; +INSERT INTO `spell_script_names` VALUES +(818,'spell_gen_basic_campfire'); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 280fd2c60..ea4028627 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4571,6 +4571,29 @@ private: uint32 _aura; }; +// 818 Basic Campfire +class spell_gen_basic_campfire : public SpellScript +{ + PrepareSpellScript(spell_gen_basic_campfire); + + void ModDest(SpellDestination& dest) + { + if (Unit* caster = GetCaster()) + { + if (caster->GetMap()->GetGameObjectFloor(caster->GetPhaseMask(), caster->GetPositionX(), caster->GetPositionY(), caster->GetPositionZ()) == -G3D::finf()) + { + float ground = caster->GetMap()->GetHeight(dest._position.GetPositionX(), dest._position.GetPositionY(), dest._position.GetPositionZ() + caster->GetCollisionHeight() * 0.5f); + dest._position.m_positionZ = ground; + } + } + } + + void Register() override + { + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_gen_basic_campfire::ModDest, EFFECT_0, TARGET_DEST_CASTER_SUMMON); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -4708,4 +4731,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScriptWithArgs(spell_gen_consume, "spell_consume_aq20", SPELL_CONSUME_LEECH_AQ20, SPELL_CONSUME_LEECH_HEAL_AQ20); RegisterSpellScriptWithArgs(spell_gen_apply_aura_after_expiration, "spell_itch_aq20", SPELL_HIVEZARA_CATALYST, EFFECT_0, SPELL_AURA_DUMMY); RegisterSpellScriptWithArgs(spell_gen_apply_aura_after_expiration, "spell_itch_aq40", SPELL_VEKNISS_CATALYST, EFFECT_0, SPELL_AURA_DUMMY); + RegisterSpellScript(spell_gen_basic_campfire); } From fbf65ebc9d7fde5389daf5c030544d88ab12c25f Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Sun, 25 Sep 2022 07:45:22 -0600 Subject: [PATCH 17/26] feat(Core): Allow negative resistance values (#12958) * feat(Core): Allow negative resistance values * Add SQL --- .../pending_db_world/rev_1663774492767692300.sql | 7 +++++++ src/server/game/Entities/Item/ItemTemplate.h | 12 ++++++------ src/server/game/Globals/ObjectMgr.cpp | 12 ++++++------ 3 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1663774492767692300.sql diff --git a/data/sql/updates/pending_db_world/rev_1663774492767692300.sql b/data/sql/updates/pending_db_world/rev_1663774492767692300.sql new file mode 100644 index 000000000..8b8d081fa --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1663774492767692300.sql @@ -0,0 +1,7 @@ +-- Alter AzerothCore table to support Vanilla negative resistance values +ALTER TABLE item_template MODIFY fire_res SMALLINT; +ALTER TABLE item_template MODIFY holy_res SMALLINT; +ALTER TABLE item_template MODIFY nature_res SMALLINT; +ALTER TABLE item_template MODIFY frost_res SMALLINT; +ALTER TABLE item_template MODIFY shadow_res SMALLINT; +ALTER TABLE item_template MODIFY arcane_res SMALLINT; diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 2b6020e13..30eb7860f 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -659,12 +659,12 @@ struct ItemTemplate uint32 ScalingStatValue; // mask for selecting column in ScalingStatValues.dbc _Damage Damage[MAX_ITEM_PROTO_DAMAGES]; uint32 Armor; - uint32 HolyRes; - uint32 FireRes; - uint32 NatureRes; - uint32 FrostRes; - uint32 ShadowRes; - uint32 ArcaneRes; + int32 HolyRes; + int32 FireRes; + int32 NatureRes; + int32 FrostRes; + int32 ShadowRes; + int32 ArcaneRes; uint32 Delay; uint32 AmmoType; float RangedModRange; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 025ec9a0b..3a30c8ba4 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2692,12 +2692,12 @@ void ObjectMgr::LoadItemTemplates() } itemTemplate.Armor = fields[56].Get(); - itemTemplate.HolyRes = fields[57].Get(); - itemTemplate.FireRes = fields[58].Get(); - itemTemplate.NatureRes = fields[59].Get(); - itemTemplate.FrostRes = fields[60].Get(); - itemTemplate.ShadowRes = fields[61].Get(); - itemTemplate.ArcaneRes = fields[62].Get(); + itemTemplate.HolyRes = fields[57].Get(); + itemTemplate.FireRes = fields[58].Get(); + itemTemplate.NatureRes = fields[59].Get(); + itemTemplate.FrostRes = fields[60].Get(); + itemTemplate.ShadowRes = fields[61].Get(); + itemTemplate.ArcaneRes = fields[62].Get(); itemTemplate.Delay = uint32(fields[63].Get()); itemTemplate.AmmoType = uint32(fields[64].Get()); itemTemplate.RangedModRange = fields[65].Get(); From 7400338ecb5b300dada30da2b8ae895b65c541ae Mon Sep 17 00:00:00 2001 From: Grimgravy Date: Sun, 25 Sep 2022 10:46:24 -0300 Subject: [PATCH 18/26] fix(core/quest): improved egg collection (#12640) * fix(core/quest): improved egg collection * . * Update rev_1659836460796753400.sql * update --- .../rev_1659836460796753400.sql | 4 ++ .../game/Spells/SpellInfoCorrections.cpp | 6 +++ src/server/scripts/Spells/spell_quest.cpp | 46 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1659836460796753400.sql diff --git a/data/sql/updates/pending_db_world/rev_1659836460796753400.sql b/data/sql/updates/pending_db_world/rev_1659836460796753400.sql new file mode 100644 index 000000000..0b8d0795e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1659836460796753400.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_q4735_collect_rookery_egg'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(15958, 'spell_q4735_collect_rookery_egg'); diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 4545c377a..bf62dbaec 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4391,6 +4391,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->SpellFamilyName = SPELLFAMILY_POTION; }); + // Collect Rookery Egg + ApplySpellFix({ 15958 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_1].Effect = 0; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 140731a6d..6d091c141 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -2403,6 +2403,51 @@ class spell_q5056_summon_shy_rotam : public SpellScript } }; +enum RookeryEgg +{ + ITEM_COLLECTED_DRAGON_EGG = 12241, + QUEST_EGG_COLLECTION = 4735, + GO_ROOKERY_EGG = 175124 +}; + +class spell_q4735_collect_rookery_egg : public SpellScript +{ + PrepareSpellScript(spell_q4735_collect_rookery_egg); + + SpellCastResult CheckCast() + { + if (GameObject* rookery = GetCaster()->FindNearestGameObject(GO_ROOKERY_EGG, 5.0f, true)) + { + if (rookery->GetGoState() != GO_STATE_ACTIVE_ALTERNATIVE) + return SPELL_FAILED_BAD_TARGETS; + } + return SPELL_CAST_OK; + } + + SpellCastResult CheckQuest() + { + if (Player* playerCaster = GetCaster()->ToPlayer()) + { + if (playerCaster->GetQuestStatus(QUEST_EGG_COLLECTION) == QUEST_STATUS_INCOMPLETE) + return SPELL_CAST_OK; + } + return SPELL_FAILED_DONT_REPORT; + } + + void HandleActiveObject(SpellEffIndex /*effIndex*/) + { + if (Player* playerCaster = GetCaster()->ToPlayer()) + playerCaster->AddItem(ITEM_COLLECTED_DRAGON_EGG, 1); + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_q4735_collect_rookery_egg::CheckQuest); + OnCheckCast += SpellCheckCastFn(spell_q4735_collect_rookery_egg::CheckCast); + OnEffectHit += SpellEffectFn(spell_q4735_collect_rookery_egg::HandleActiveObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT); + } +}; + void AddSC_quest_spell_scripts() { RegisterSpellAndAuraScriptPair(spell_q11065_wrangle_some_aether_rays, spell_q11065_wrangle_some_aether_rays_aura); @@ -2473,4 +2518,5 @@ void AddSC_quest_spell_scripts() RegisterSpellScript(spell_q12919_gymers_grab); RegisterSpellScript(spell_q12919_gymers_throw); RegisterSpellScript(spell_q5056_summon_shy_rotam); + RegisterSpellScript(spell_q4735_collect_rookery_egg); } From 6e1a1ad42483be873c2b9fbb875212f9af509b4f Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 25 Sep 2022 13:48:39 +0000 Subject: [PATCH 19/26] chore(DB): import pending files Referenced commit(s): 7400338ecb5b300dada30da2b8ae895b65c541ae --- .../rev_1659836460796753400.sql => db_world/2022_09_25_01.sql} | 1 + .../rev_1663405794661340300.sql => db_world/2022_09_25_02.sql} | 1 + .../rev_1663774492767692300.sql => db_world/2022_09_25_03.sql} | 1 + .../rev_1664007070636219300.sql => db_world/2022_09_25_04.sql} | 1 + .../rev_1664010686716176700.sql => db_world/2022_09_25_05.sql} | 1 + 5 files changed, 5 insertions(+) rename data/sql/updates/{pending_db_world/rev_1659836460796753400.sql => db_world/2022_09_25_01.sql} (81%) rename data/sql/updates/{pending_db_world/rev_1663405794661340300.sql => db_world/2022_09_25_02.sql} (75%) rename data/sql/updates/{pending_db_world/rev_1663774492767692300.sql => db_world/2022_09_25_03.sql} (89%) rename data/sql/updates/{pending_db_world/rev_1664007070636219300.sql => db_world/2022_09_25_04.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1664010686716176700.sql => db_world/2022_09_25_05.sql} (91%) diff --git a/data/sql/updates/pending_db_world/rev_1659836460796753400.sql b/data/sql/updates/db_world/2022_09_25_01.sql similarity index 81% rename from data/sql/updates/pending_db_world/rev_1659836460796753400.sql rename to data/sql/updates/db_world/2022_09_25_01.sql index 0b8d0795e..c4d23f7fd 100644 --- a/data/sql/updates/pending_db_world/rev_1659836460796753400.sql +++ b/data/sql/updates/db_world/2022_09_25_01.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_25_00 -> 2022_09_25_01 -- DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_q4735_collect_rookery_egg'; INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1663405794661340300.sql b/data/sql/updates/db_world/2022_09_25_02.sql similarity index 75% rename from data/sql/updates/pending_db_world/rev_1663405794661340300.sql rename to data/sql/updates/db_world/2022_09_25_02.sql index ad5b5e402..2023cbd3c 100644 --- a/data/sql/updates/pending_db_world/rev_1663405794661340300.sql +++ b/data/sql/updates/db_world/2022_09_25_02.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_25_01 -> 2022_09_25_02 -- DELETE FROM `spell_script_names` WHERE `spell_id`=818; INSERT INTO `spell_script_names` VALUES diff --git a/data/sql/updates/pending_db_world/rev_1663774492767692300.sql b/data/sql/updates/db_world/2022_09_25_03.sql similarity index 89% rename from data/sql/updates/pending_db_world/rev_1663774492767692300.sql rename to data/sql/updates/db_world/2022_09_25_03.sql index 8b8d081fa..d42e10aae 100644 --- a/data/sql/updates/pending_db_world/rev_1663774492767692300.sql +++ b/data/sql/updates/db_world/2022_09_25_03.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_25_02 -> 2022_09_25_03 -- Alter AzerothCore table to support Vanilla negative resistance values ALTER TABLE item_template MODIFY fire_res SMALLINT; ALTER TABLE item_template MODIFY holy_res SMALLINT; diff --git a/data/sql/updates/pending_db_world/rev_1664007070636219300.sql b/data/sql/updates/db_world/2022_09_25_04.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1664007070636219300.sql rename to data/sql/updates/db_world/2022_09_25_04.sql index 20076cd41..3995443c8 100644 --- a/data/sql/updates/pending_db_world/rev_1664007070636219300.sql +++ b/data/sql/updates/db_world/2022_09_25_04.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_25_03 -> 2022_09_25_04 -- DELETE FROM `gossip_menu_option` WHERE `MenuId`=8934 AND `OptionId`=4 AND `ActionMenuId`=0; UPDATE `gossip_menu_option` SET `OptionId`=4 WHERE `MenuId`=8934 AND `OptionId`=0 AND `ActionMenuId`=8953; diff --git a/data/sql/updates/pending_db_world/rev_1664010686716176700.sql b/data/sql/updates/db_world/2022_09_25_05.sql similarity index 91% rename from data/sql/updates/pending_db_world/rev_1664010686716176700.sql rename to data/sql/updates/db_world/2022_09_25_05.sql index 21e15421c..419564620 100644 --- a/data/sql/updates/pending_db_world/rev_1664010686716176700.sql +++ b/data/sql/updates/db_world/2022_09_25_05.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_25_04 -> 2022_09_25_05 -- DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=43450; INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES From ddcf0e79b6355a0f7ac4a6ce358a72864143e075 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 25 Sep 2022 18:11:31 +0200 Subject: [PATCH 20/26] =?UTF-8?q?fix(Scripts/Brewfest):=20Added=20inebriat?= =?UTF-8?q?e=20effect=20to=20Complimentary=20Brewfe=E2=80=A6=20(#13112)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/Brewfest): Added inebriate effect to Complimentary Brewfest Sampler. Fixes #13085 --- src/server/scripts/Events/brewfest.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 1c62dd4ea..1c4cf1867 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -294,6 +294,7 @@ enum darkIronAttack SPELL_DRUNKEN_MASTER = 42696, SPELL_SUMMON_PLANS_A = 48145, SPELL_SUMMON_PLANS_H = 49318, + SPELL_WEAK_ALCOHOL = 42523, // Dark Irons SPELL_ATTACK_KEG = 42393, @@ -1271,6 +1272,8 @@ class spell_brewfest_toss_mug : public SpellScript creature->CastSpell(caster, SPELL_THROW_MUG_TO_PLAYER, true); } } + + caster->CastSpell(caster, SPELL_WEAK_ALCOHOL, true); } void Register() override From 1f472bddd395073bf2a2d146ecb66489b36015fb Mon Sep 17 00:00:00 2001 From: Maelthyr <100411212+Maelthyrr@users.noreply.github.com> Date: Sun, 25 Sep 2022 20:20:34 +0200 Subject: [PATCH 21/26] refactor(Core/Combat): Code style and improvement of ThreatMgr (#12992) --- src/server/game/AI/CoreAI/UnitAI.cpp | 4 +- src/server/game/AI/CoreAI/UnitAI.h | 4 +- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 6 +- .../game/AI/SmartScripts/SmartScript.cpp | 8 +- src/server/game/Combat/HostileRefMgr.cpp | 4 +- src/server/game/Combat/ThreatMgr.cpp | 63 ++++++++-------- src/server/game/Combat/ThreatMgr.h | 75 +++++++++++-------- .../game/Entities/Creature/Creature.cpp | 12 +-- src/server/game/Entities/Unit/Unit.cpp | 22 +++--- src/server/game/Spells/SpellEffects.cpp | 12 +-- src/server/scripts/Commands/cs_debug.cpp | 18 ++--- .../BlackrockSpire/boss_drakkisath.cpp | 6 +- .../BlackrockSpire/boss_mor_grayhoof.cpp | 6 +- .../BlackwingLair/boss_nefarian.cpp | 2 +- .../MoltenCore/boss_ragnaros.cpp | 2 +- .../MoltenCore/boss_shazzrah.cpp | 2 +- .../Karazhan/boss_netherspite.cpp | 2 +- .../Karazhan/boss_prince_malchezaar.cpp | 2 +- .../Karazhan/boss_shade_of_aran.cpp | 2 +- .../boss_priestess_delrissa.cpp | 12 +-- .../Scholomance/instance_scholomance.cpp | 2 +- .../ZulGurub/boss_gahzranka.cpp | 4 +- .../EasternKingdoms/ZulGurub/boss_grilek.cpp | 4 +- .../EasternKingdoms/ZulGurub/boss_hakkar.cpp | 6 +- .../ZulGurub/boss_hazzarah.cpp | 2 +- .../EasternKingdoms/ZulGurub/boss_jindo.cpp | 6 +- .../ZulGurub/boss_mandokir.cpp | 6 +- .../EasternKingdoms/ZulGurub/boss_marli.cpp | 2 +- .../ZulGurub/boss_renataki.cpp | 4 +- .../BattleForMountHyjal/boss_archimonde.cpp | 4 +- .../TempleOfAhnQiraj/boss_bug_trio.cpp | 2 +- .../Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp | 2 +- .../TempleOfAhnQiraj/boss_sartura.cpp | 12 +-- src/server/scripts/Kalimdor/boss_azuregos.cpp | 2 +- .../ahnkahet/boss_prince_taldaram.cpp | 2 +- .../boss_faction_champions.cpp | 16 ++-- .../boss_lady_deathwhisper.cpp | 2 +- .../boss_valithria_dreamwalker.cpp | 2 +- .../IcecrownCitadel/icecrown_citadel.cpp | 8 +- .../Northrend/Naxxramas/boss_gothik.cpp | 2 +- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- .../Northrend/Naxxramas/boss_patchwerk.cpp | 4 +- .../Northrend/Naxxramas/boss_sapphiron.cpp | 4 +- .../Northrend/Naxxramas/boss_thaddius.cpp | 8 +- .../Northrend/Ulduar/Ulduar/boss_kologarn.cpp | 2 +- .../boss_blackheart_the_inciter.cpp | 2 +- .../ShadowLabyrinth/boss_murmur.cpp | 2 +- .../Outland/BlackTemple/boss_bloodboil.cpp | 2 +- .../Outland/BlackTemple/boss_supremus.cpp | 2 +- .../SerpentShrine/boss_lurker_below.cpp | 2 +- .../boss_morogrim_tidewalker.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_alar.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 2 +- .../scripts/Outland/zone_netherstorm.cpp | 2 +- .../Outland/zone_shadowmoon_valley.cpp | 2 +- src/server/scripts/Pet/pet_mage.cpp | 2 +- src/server/scripts/Spells/spell_generic.cpp | 4 +- src/server/scripts/Spells/spell_warlock.cpp | 2 +- .../scripts/World/boss_emerald_dragons.cpp | 2 +- .../scripts/World/npc_stave_of_ancients.cpp | 2 +- .../scripts/World/npc_stave_of_ancients.h | 2 +- 61 files changed, 212 insertions(+), 196 deletions(-) diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index 1304a6cfe..c6ffa1462 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -136,7 +136,7 @@ SpellCastResult UnitAI::DoAddAuraToAllHostilePlayers(uint32 spellid) { if (me->IsInCombat()) { - ThreatContainer::StorageType threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) @@ -159,7 +159,7 @@ SpellCastResult UnitAI::DoCastToAllHostilePlayers(uint32 spellid, bool triggered { if (me->IsInCombat()) { - ThreatContainer::StorageType threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index a423997b9..1070a2ba5 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -216,7 +216,7 @@ public: template Unit* SelectTarget(SelectTargetMethod targetType, uint32 position, PREDICATE const& predicate) { - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); if (position >= threatlist.size()) return nullptr; @@ -278,7 +278,7 @@ public: template void SelectTargetList(std::list& targetList, PREDICATE const& predicate, uint32 maxTargets, SelectTargetMethod targetType) { - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); if (threatlist.empty()) return; diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index e1c6eedca..c131a8fd6 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -399,14 +399,14 @@ float ScriptedAI::DoGetThreat(Unit* unit) { if (!unit) return 0.0f; - return me->GetThreatMgr().getThreat(unit); + return me->GetThreatMgr().GetThreat(unit); } void ScriptedAI::DoModifyThreatPercent(Unit* unit, int32 pct) { if (!unit) return; - me->GetThreatMgr().modifyThreatPercent(unit, pct); + me->GetThreatMgr().ModifyThreatByPercent(unit, pct); } void ScriptedAI::DoTeleportPlayer(Unit* unit, float x, float y, float z, float o) @@ -580,7 +580,7 @@ void BossAI::TeleportCheaters() float x, y, z; me->GetPosition(x, y, z); - ThreatContainer::StorageType threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatList = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) if (Unit* target = (*itr)->getTarget()) if (target->GetTypeId() == TYPEID_PLAYER && !IsInBoundary(target)) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 4fe9984c7..b93254fed 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -522,12 +522,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!me) break; - ThreatContainer::StorageType threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatList = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i) { if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) { - me->GetThreatMgr().modifyThreatPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); + me->GetThreatMgr().ModifyThreatByPercent(target, e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); LOG_DEBUG("sql.sql", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_ALL_PCT: Creature {} modify threat for unit {}, value {}", me->GetGUID().ToString(), target->GetGUID().ToString(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); } @@ -543,7 +543,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (IsUnit(target)) { - me->GetThreatMgr().modifyThreatPercent(target->ToUnit(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); + me->GetThreatMgr().ModifyThreatByPercent(target->ToUnit(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_THREAT_SINGLE_PCT: Creature guidLow {} modify threat for unit {}, value %i", me->GetGUID().ToString(), target->GetGUID().ToString(), e.action.threatPCT.threatINC ? (int32)e.action.threatPCT.threatINC : -(int32)e.action.threatPCT.threatDEC); } @@ -3219,7 +3219,7 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, { if (me) { - ThreatContainer::StorageType threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatList = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i) if (Unit* temp = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) // Xinef: added distance check diff --git a/src/server/game/Combat/HostileRefMgr.cpp b/src/server/game/Combat/HostileRefMgr.cpp index f44638080..16fc944a5 100644 --- a/src/server/game/Combat/HostileRefMgr.cpp +++ b/src/server/game/Combat/HostileRefMgr.cpp @@ -53,7 +53,7 @@ void HostileRefMgr::threatAssist(Unit* victim, float baseThreat, SpellInfo const } } - ref->GetSource()->doAddThreat(victim, threat); + ref->GetSource()->DoAddThreat(victim, threat); } ref = ref->next(); @@ -239,7 +239,7 @@ void HostileRefMgr::UpdateVisibility(bool checkThreat) while (ref) { HostileReference* nextRef = ref->next(); - if ((!checkThreat || ref->GetSource()->getThreatList().size() <= 1)) + if ((!checkThreat || ref->GetSource()->GetThreatListSize() <= 1)) { nextRef = ref->next(); ref->removeReference(); diff --git a/src/server/game/Combat/ThreatMgr.cpp b/src/server/game/Combat/ThreatMgr.cpp index 7cbbcd94d..91751f22a 100644 --- a/src/server/game/Combat/ThreatMgr.cpp +++ b/src/server/game/Combat/ThreatMgr.cpp @@ -131,14 +131,17 @@ void HostileReference::fireStatusChanged(ThreatRefStatusChangeEvent& threatRefSt GetSource()->processThreatEvent(&threatRefStatusChangeEvent); } +// -- compatibility layer for combat rewrite +Unit* HostileReference::GetOwner() const { return GetSource()->GetOwner(); } + //============================================================ -void HostileReference::addThreat(float modThreat) +void HostileReference::AddThreat(float modThreat) { iThreat += modThreat; // the threat is changed. Source and target unit have to be available // if the link was cut before relink it again - if (!isOnline()) + if (!IsOnline()) updateOnlineStatus(); if (modThreat != 0.0f) { @@ -154,7 +157,7 @@ void HostileReference::addThreat(float modThreat) Unit* victimOwner = target->GetCharmerOrOwner(); if (victimOwner && victimOwner->IsAlive()) { - GetSource()->addThreat(victimOwner, 0.0f); // create a threat to the owner of a pet, if the pet attacks + GetSource()->AddThreat(victimOwner, 0.0f); // create a threat to the owner of a pet, if the pet attacks } } } @@ -169,7 +172,7 @@ void HostileReference::addThreatPercent(int32 percent) float tmpThreat = iThreat; AddPct(tmpThreat, percent); - addThreat(tmpThreat - iThreat); + AddThreat(tmpThreat - iThreat); } //============================================================ @@ -256,7 +259,7 @@ void ThreatContainer::clearReferences() //============================================================ // Return the HostileReference of nullptr, if not found -HostileReference* ThreatContainer::getReferenceByTarget(Unit* victim) const +HostileReference* ThreatContainer::getReferenceByTarget(Unit const* victim) const { if (!victim) return nullptr; @@ -281,17 +284,17 @@ HostileReference* ThreatContainer::getReferenceByTarget(ObjectGuid const& guid) //============================================================ // Add the threat, if we find the reference -HostileReference* ThreatContainer::addThreat(Unit* victim, float threat) +HostileReference* ThreatContainer::AddThreat(Unit* victim, float threat) { HostileReference* ref = getReferenceByTarget(victim); if (ref) - ref->addThreat(threat); + ref->AddThreat(threat); return ref; } //============================================================ -void ThreatContainer::modifyThreatPercent(Unit* victim, int32 percent) +void ThreatContainer::ModifyThreatByPercent(Unit* victim, int32 percent) { if (HostileReference* ref = getReferenceByTarget(victim)) ref->addThreatPercent(percent); @@ -312,7 +315,7 @@ void ThreatContainer::update() // return the next best victim // could be the current victim -HostileReference* ThreatContainer::selectNextVictim(Creature* attacker, HostileReference* currentVictim) const +HostileReference* ThreatContainer::SelectNextVictim(Creature* attacker, HostileReference* currentVictim) const { // pussywizard: pretty much remade this whole function @@ -370,12 +373,12 @@ HostileReference* ThreatContainer::selectNextVictim(Creature* attacker, HostileR } // pussywizard: implement 110% threat rule for targets in melee range and 130% rule for targets in ranged distances - if (currentRef->getThreat() > 1.3f * currentVictim->getThreat()) // pussywizard: enough in all cases, end + if (currentRef->GetThreat() > 1.3f * currentVictim->GetThreat()) // pussywizard: enough in all cases, end { found = true; break; } - else if (currentRef->getThreat() > 1.1f * currentVictim->getThreat()) // pussywizard: enought only if target in melee range + else if (currentRef->GetThreat() > 1.1f * currentVictim->GetThreat()) // pussywizard: enought only if target in melee range { if (attacker->IsWithinMeleeRange(target)) { @@ -431,7 +434,7 @@ void ThreatMgr::clearReferences() //============================================================ -void ThreatMgr::addThreat(Unit* victim, float threat, SpellSchoolMask schoolMask, SpellInfo const* threatSpell) +void ThreatMgr::AddThreat(Unit* victim, float threat, SpellSchoolMask schoolMask, SpellInfo const* threatSpell) { if (!ThreatCalcHelper::isValidProcess(victim, iOwner, threatSpell)) return; @@ -445,10 +448,10 @@ void ThreatMgr::addThreat(Unit* victim, float threat, SpellSchoolMask schoolMask } } - doAddThreat(victim, threat); + DoAddThreat(victim, threat); } -void ThreatMgr::doAddThreat(Unit* victim, float threat) +void ThreatMgr::DoAddThreat(Unit* victim, float threat) { uint32 redirectThreadPct = victim->GetRedirectThreatPercent(); @@ -469,17 +472,17 @@ void ThreatMgr::doAddThreat(Unit* victim, float threat) void ThreatMgr::_addThreat(Unit* victim, float threat) { - HostileReference* ref = iThreatContainer.addThreat(victim, threat); + HostileReference* ref = iThreatContainer.AddThreat(victim, threat); // Ref is not in the online refs, search the offline refs next if (!ref) - ref = iThreatOfflineContainer.addThreat(victim, threat); + ref = iThreatOfflineContainer.AddThreat(victim, threat); if (!ref) // there was no ref => create a new one { // threat has to be 0 here HostileReference* hostileRef = new HostileReference(victim, this, 0); iThreatContainer.addReference(hostileRef); - hostileRef->addThreat(threat); // now we add the real threat + hostileRef->AddThreat(threat); // now we add the real threat if (victim->GetTypeId() == TYPEID_PLAYER && victim->ToPlayer()->IsGameMaster()) hostileRef->setOnlineOfflineState(false); // GM is always offline } @@ -487,9 +490,9 @@ void ThreatMgr::_addThreat(Unit* victim, float threat) //============================================================ -void ThreatMgr::modifyThreatPercent(Unit* victim, int32 percent) +void ThreatMgr::ModifyThreatByPercent(Unit* victim, int32 percent) { - iThreatContainer.modifyThreatPercent(victim, percent); + iThreatContainer.ModifyThreatByPercent(victim, percent); } //============================================================ @@ -497,21 +500,21 @@ void ThreatMgr::modifyThreatPercent(Unit* victim, int32 percent) Unit* ThreatMgr::getHostileTarget() { iThreatContainer.update(); - HostileReference* nextVictim = iThreatContainer.selectNextVictim(GetOwner()->ToCreature(), getCurrentVictim()); + HostileReference* nextVictim = iThreatContainer.SelectNextVictim(GetOwner()->ToCreature(), getCurrentVictim()); setCurrentVictim(nextVictim); return getCurrentVictim() != nullptr ? getCurrentVictim()->getTarget() : nullptr; } //============================================================ -float ThreatMgr::getThreat(Unit* victim, bool alsoSearchOfflineList) +float ThreatMgr::GetThreat(Unit* victim, bool alsoSearchOfflineList) { float threat = 0.0f; HostileReference* ref = iThreatContainer.getReferenceByTarget(victim); if (!ref && alsoSearchOfflineList) ref = iThreatOfflineContainer.getReferenceByTarget(victim); if (ref) - threat = ref->getThreat(); + threat = ref->GetThreat(); return threat; } @@ -524,7 +527,7 @@ float ThreatMgr::getThreatWithoutTemp(Unit* victim, bool alsoSearchOfflineList) if (!ref && alsoSearchOfflineList) ref = iThreatOfflineContainer.getReferenceByTarget(victim); if (ref) - threat = ref->getThreat() - ref->getTempThreatModifier(); + threat = ref->GetThreat() - ref->getTempThreatModifier(); return threat; } @@ -533,10 +536,10 @@ float ThreatMgr::getThreatWithoutTemp(Unit* victim, bool alsoSearchOfflineList) void ThreatMgr::tauntApply(Unit* taunter) { HostileReference* ref = iThreatContainer.getReferenceByTarget(taunter); - if (getCurrentVictim() && ref && (ref->getThreat() < getCurrentVictim()->getThreat())) + if (getCurrentVictim() && ref && (ref->GetThreat() < getCurrentVictim()->GetThreat())) { if (ref->getTempThreatModifier() == 0.0f) // Ok, temp threat is unused - ref->setTempThreat(getCurrentVictim()->getThreat()); + ref->setTempThreat(getCurrentVictim()->GetThreat()); } } @@ -578,7 +581,7 @@ void ThreatMgr::processThreatEvent(ThreatRefStatusChangeEvent* threatRefStatusCh setDirty(true); // the order in the threat list might have changed break; case UEV_THREAT_REF_ONLINE_STATUS: - if (!hostileRef->isOnline()) + if (!hostileRef->IsOnline()) { if (hostileRef == getCurrentVictim()) { @@ -594,7 +597,7 @@ void ThreatMgr::processThreatEvent(ThreatRefStatusChangeEvent* threatRefStatusCh } else { - if (getCurrentVictim() && hostileRef->getThreat() > (1.1f * getCurrentVictim()->getThreat())) + if (getCurrentVictim() && hostileRef->GetThreat() > (1.1f * getCurrentVictim()->GetThreat())) setDirty(true); iThreatContainer.addReference(hostileRef); iThreatOfflineContainer.remove(hostileRef); @@ -607,7 +610,7 @@ void ThreatMgr::processThreatEvent(ThreatRefStatusChangeEvent* threatRefStatusCh setDirty(true); } iOwner->SendRemoveFromThreatListOpcode(hostileRef); - if (hostileRef->isOnline()) + if (hostileRef->IsOnline()) iThreatContainer.remove(hostileRef); else iThreatOfflineContainer.remove(hostileRef); @@ -630,14 +633,14 @@ bool ThreatMgr::isNeedUpdateToClient(uint32 time) } // Reset all aggro without modifying the threatlist. -void ThreatMgr::resetAllAggro() +void ThreatMgr::ResetAllThreat() { ThreatContainer::StorageType& threatList = iThreatContainer.iThreatList; if (threatList.empty()) return; for (ThreatContainer::StorageType::iterator itr = threatList.begin(); itr != threatList.end(); ++itr) - (*itr)->setThreat(0); + (*itr)->SetThreat(0); setDirty(true); } diff --git a/src/server/game/Combat/ThreatMgr.h b/src/server/game/Combat/ThreatMgr.h index 6844b08d1..7196e5638 100644 --- a/src/server/game/Combat/ThreatMgr.h +++ b/src/server/game/Combat/ThreatMgr.h @@ -19,6 +19,7 @@ #define _THREATMANAGER #include "Common.h" +#include "IteratorPair.h" #include "ObjectGuid.h" #include "Reference.h" #include "SharedDefines.h" @@ -49,36 +50,43 @@ class HostileReference : public Reference public: HostileReference(Unit* refUnit, ThreatMgr* threatMgr, float threat); - //================================================= - void addThreat(float modThreat); + Unit* GetOwner() const; + Unit* GetVictim() const { return getTarget(); } - void setThreat(float threat) { addThreat(threat - getThreat()); } + //================================================= + void AddThreat(float modThreat); + + void SetThreat(float threat) { AddThreat(threat - GetThreat()); } void addThreatPercent(int32 percent); - [[nodiscard]] float getThreat() const { return iThreat; } + [[nodiscard]] float GetThreat() const { return iThreat; } - [[nodiscard]] bool isOnline() const { return iOnline; } + void ClearThreat() { removeReference(); } + + [[nodiscard]] bool IsOnline() const { return iOnline; } + [[nodiscard]] bool IsAvailable() const { return iOnline; } // unused for now + [[nodiscard]] bool IsOffline() const { return !iOnline; } // unused for now // used for temporary setting a threat and reducting it later again. // the threat modification is stored void setTempThreat(float threat) { - addTempThreat(threat - getThreat()); + addTempThreat(threat - GetThreat()); } void addTempThreat(float threat) { iTempThreatModifier = threat; if (iTempThreatModifier != 0.0f) - addThreat(iTempThreatModifier); + AddThreat(iTempThreatModifier); } void resetTempThreat() { if (iTempThreatModifier != 0.0f) { - addThreat(-iTempThreatModifier); + AddThreat(-iTempThreatModifier); iTempThreatModifier = 0.0f; } } @@ -143,11 +151,11 @@ public: ~ThreatContainer() { clearReferences(); } - HostileReference* addThreat(Unit* victim, float threat); + HostileReference* AddThreat(Unit* victim, float threat); - void modifyThreatPercent(Unit* victim, int32 percent); + void ModifyThreatByPercent(Unit* victim, int32 percent); - HostileReference* selectNextVictim(Creature* attacker, HostileReference* currentVictim) const; + HostileReference* SelectNextVictim(Creature* attacker, HostileReference* currentVictim) const; void setDirty(bool isDirty) { iDirty = isDirty; } @@ -163,10 +171,10 @@ public: return iThreatList.empty() ? nullptr : iThreatList.front(); } - HostileReference* getReferenceByTarget(Unit* victim) const; + HostileReference* getReferenceByTarget(Unit const* victim) const; HostileReference* getReferenceByTarget(ObjectGuid const& guid) const; - [[nodiscard]] StorageType const& getThreatList() const { return iThreatList; } + [[nodiscard]] StorageType const& GetThreatList() const { return iThreatList; } private: void remove(HostileReference* hostileRef) @@ -190,6 +198,8 @@ private: //================================================= +typedef HostileReference ThreatReference; + class ThreatMgr { public: @@ -199,16 +209,17 @@ public: ~ThreatMgr() { clearReferences(); } + Unit* SelectVictim() { return getHostileTarget(); } + Unit* GetCurrentVictim() const { if (ThreatReference* ref = getCurrentVictim()) return ref->GetVictim(); else return nullptr; } + Unit* GetAnyTarget() const { auto const& list = GetThreatList(); if (!list.empty()) return list.front()->getTarget(); return nullptr; } + void clearReferences(); - void addThreat(Unit* victim, float threat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* threatSpell = nullptr); - - void doAddThreat(Unit* victim, float threat); - - void modifyThreatPercent(Unit* victim, int32 percent); - - float getThreat(Unit* victim, bool alsoSearchOfflineList = false); - + void AddThreat(Unit* victim, float threat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* threatSpell = nullptr); + void DoAddThreat(Unit* victim, float threat); + void ModifyThreatByPercent(Unit* victim, int32 percent); + float GetThreat(Unit* victim, bool alsoSearchOfflineList = false); + float GetThreatListSize() const { return GetThreatList().size(); } float getThreatWithoutTemp(Unit* victim, bool alsoSearchOfflineList = false); [[nodiscard]] bool isThreatListEmpty() const { return iThreatContainer.empty(); } @@ -232,11 +243,10 @@ public: void setDirty(bool isDirty) { iThreatContainer.setDirty(isDirty); } // Reset all aggro without modifying the threadlist. - void resetAllAggro(); - - // -- compatibility layer for combat rewrite - void ResetAllThreat() { resetAllAggro(); } + void ResetThreat(Unit const* who) { if (auto* ref = FindReference(who, true)) ref->SetThreat(0.0f); } + void ResetAllThreat(); + void ClearThreat(Unit const* who) { if (auto* ref = FindReference(who, true)) ref->removeReference(); } void ClearAllThreat(); // Reset all aggro of unit in threadlist satisfying the predicate. @@ -250,7 +260,7 @@ public: { if (predicate(ref->getTarget())) { - ref->setThreat(0); + ref->SetThreat(0); setDirty(true); } } @@ -258,11 +268,14 @@ public: // methods to access the lists from the outside to do some dirty manipulation (scriping and such) // I hope they are used as little as possible. - [[nodiscard]] ThreatContainer::StorageType const& getThreatList() const { return iThreatContainer.getThreatList(); } - [[nodiscard]] ThreatContainer::StorageType const& getOfflineThreatList() const { return iThreatOfflineContainer.getThreatList(); } - ThreatContainer& getOnlineContainer() { return iThreatContainer; } - ThreatContainer& getOfflineContainer() { return iThreatOfflineContainer; } + [[nodiscard]] ThreatContainer::StorageType const& GetThreatList() const { return iThreatContainer.GetThreatList(); } + [[nodiscard]] ThreatContainer::StorageType const& GetOfflineThreatList() const { return iThreatOfflineContainer.GetThreatList(); } + ThreatContainer& GetOnlineContainer() { return iThreatContainer; } + ThreatContainer& GetOfflineContainer() { return iThreatOfflineContainer; } + private: + HostileReference* FindReference(Unit const* who, bool includeOffline) const { if (auto* ref = iThreatContainer.getReferenceByTarget(who)) return ref; if (includeOffline) if (auto* ref = iThreatOfflineContainer.getReferenceByTarget(who)) return ref; return nullptr; } + void _addThreat(Unit* victim, float threat); HostileReference* iCurrentVictim; @@ -283,7 +296,7 @@ namespace Acore ThreatOrderPred(bool ascending = false) : m_ascending(ascending) {} bool operator() (HostileReference const* a, HostileReference const* b) const { - return m_ascending ? a->getThreat() < b->getThreat() : a->getThreat() > b->getThreat(); + return m_ascending ? a->GetThreat() < b->GetThreat() : a->GetThreat() > b->GetThreat(); } private: const bool m_ascending; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 99fa625f8..512e7c39e 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -207,8 +207,8 @@ bool TemporaryThreatModifierEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) { if (m_owner.IsInCombatWith(victim)) { - m_owner.GetThreatMgr().modifyThreatPercent(victim, -100); // Reset threat to zero. - m_owner.GetThreatMgr().addThreat(victim, m_threatValue); // Set to the previous value it had, first before modification. + m_owner.GetThreatMgr().ModifyThreatByPercent(victim, -100); // Reset threat to zero. + m_owner.GetThreatMgr().AddThreat(victim, m_threatValue); // Set to the previous value it had, first before modification. } } @@ -839,13 +839,13 @@ void Creature::Update(uint32 diff) } }; - if (GetThreatMgr().getThreatList().size() <= 1) + if (GetThreatMgr().GetThreatListSize() <= 1) { EnterEvade(); } else { - if (HostileReference* ref = GetThreatMgr().getOnlineContainer().getReferenceByTarget(m_cannotReachTarget)) + if (HostileReference* ref = GetThreatMgr().GetOnlineContainer().getReferenceByTarget(m_cannotReachTarget)) { ref->removeReference(); SetCannotReachTarget(); @@ -3626,11 +3626,11 @@ void Creature::ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds { if (victim) { - float currentThreat = GetThreatMgr().getThreat(victim); + float currentThreat = GetThreatMgr().GetThreat(victim); if (percent != 0.0f) { - GetThreatMgr().modifyThreatPercent(victim, percent); + GetThreatMgr().ModifyThreatByPercent(victim, percent); } TemporaryThreatModifierEvent* pEvent = new TemporaryThreatModifierEvent(*this, victim->GetGUID(), currentThreat); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c2b03b3e4..d190cbdcd 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8977,7 +8977,7 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg return false; if (victim && victim->IsAlive()) - victim->GetThreatMgr().modifyThreatPercent(this, -10); + victim->GetThreatMgr().ModifyThreatByPercent(this, -10); basepoints0 = int32(CountPctFromMaxHealth(triggerAmount)); trigger_spell_id = 31616; @@ -14104,7 +14104,7 @@ void Unit::AddThreat(Unit* victim, float fThreat, SpellSchoolMask schoolMask, Sp // Only mobs can manage threat lists if (CanHaveThreatList() && !HasUnitState(UNIT_STATE_EVADE)) { - m_ThreatMgr.addThreat(victim, fThreat, schoolMask, threatSpell); + m_ThreatMgr.AddThreat(victim, fThreat, schoolMask, threatSpell); } } @@ -18679,8 +18679,8 @@ void Unit::SetPhaseMask(uint32 newPhaseMask, bool update) // modify threat lists for new phasemask if (GetTypeId() != TYPEID_PLAYER) { - ThreatContainer::StorageType threatList = GetThreatMgr().getThreatList(); - ThreatContainer::StorageType offlineThreatList = GetThreatMgr().getOfflineThreatList(); + ThreatContainer::StorageType threatList = GetThreatMgr().GetThreatList(); + ThreatContainer::StorageType offlineThreatList = GetThreatMgr().GetOfflineThreatList(); // merge expects sorted lists threatList.sort(); @@ -19654,17 +19654,17 @@ void Unit::SendThreatListUpdate() { if (!GetThreatMgr().isThreatListEmpty()) { - uint32 count = GetThreatMgr().getThreatList().size(); + uint32 count = GetThreatMgr().GetThreatList().size(); //LOG_DEBUG("entities.unit", "WORLD: Send SMSG_THREAT_UPDATE Message"); WorldPacket data(SMSG_THREAT_UPDATE, 8 + count * 8); data << GetPackGUID(); data << uint32(count); - ThreatContainer::StorageType const& tlist = GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& tlist = GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr) { data << (*itr)->getUnitGuid().WriteAsPacked(); - data << uint32((*itr)->getThreat() * 100); + data << uint32((*itr)->GetThreat() * 100); } SendMessageToSet(&data, false); } @@ -19674,18 +19674,18 @@ void Unit::SendChangeCurrentVictimOpcode(HostileReference* pHostileReference) { if (!GetThreatMgr().isThreatListEmpty()) { - uint32 count = GetThreatMgr().getThreatList().size(); + uint32 count = GetThreatMgr().GetThreatList().size(); LOG_DEBUG("entities.unit", "WORLD: Send SMSG_HIGHEST_THREAT_UPDATE Message"); WorldPacket data(SMSG_HIGHEST_THREAT_UPDATE, 8 + 8 + count * 8); data << GetPackGUID(); data << pHostileReference->getUnitGuid().WriteAsPacked(); data << uint32(count); - ThreatContainer::StorageType const& tlist = GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& tlist = GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr) { data << (*itr)->getUnitGuid().WriteAsPacked(); - data << uint32((*itr)->getThreat() * 100); + data << uint32((*itr)->GetThreat() * 100); } SendMessageToSet(&data, false); } @@ -20615,7 +20615,7 @@ bool Unit::IsInCombatWith(Unit const* who) const return false; // Search in threat list ObjectGuid guid = who->GetGUID(); - for (ThreatContainer::StorageType::const_iterator i = m_ThreatMgr.getThreatList().begin(); i != m_ThreatMgr.getThreatList().end(); ++i) + for (ThreatContainer::StorageType::const_iterator i = m_ThreatMgr.GetThreatList().begin(); i != m_ThreatMgr.GetThreatList().end(); ++i) { HostileReference* ref = (*i); // Return true if the unit matches diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index cd5809cd0..6fa9b83a6 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3299,16 +3299,16 @@ void Spell::EffectTaunt(SpellEffIndex /*effIndex*/) return; } - if (!unitTarget->GetThreatMgr().getOnlineContainer().empty()) + if (!unitTarget->GetThreatMgr().GetOnlineContainer().empty()) { // Also use this effect to set the taunter's threat to the taunted creature's highest value - float myThreat = unitTarget->GetThreatMgr().getThreat(m_caster); - float topThreat = unitTarget->GetThreatMgr().getOnlineContainer().getMostHated()->getThreat(); + float myThreat = unitTarget->GetThreatMgr().GetThreat(m_caster); + float topThreat = unitTarget->GetThreatMgr().GetOnlineContainer().getMostHated()->GetThreat(); if (topThreat > myThreat) - unitTarget->GetThreatMgr().doAddThreat(m_caster, topThreat - myThreat); + unitTarget->GetThreatMgr().DoAddThreat(m_caster, topThreat - myThreat); //Set aggro victim to caster - if (HostileReference* forcedVictim = unitTarget->GetThreatMgr().getOnlineContainer().getReferenceByTarget(m_caster)) + if (HostileReference* forcedVictim = unitTarget->GetThreatMgr().GetOnlineContainer().getReferenceByTarget(m_caster)) unitTarget->GetThreatMgr().setCurrentVictim(forcedVictim); } @@ -5386,7 +5386,7 @@ void Spell::EffectModifyThreatPercent(SpellEffIndex /*effIndex*/) if (!unitTarget) return; - unitTarget->GetThreatMgr().modifyThreatPercent(m_caster, damage); + unitTarget->GetThreatMgr().ModifyThreatByPercent(m_caster, damage); } void Spell::EffectTransmitted(SpellEffIndex effIndex) diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index e0c12e927..f713503de 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -806,7 +806,7 @@ public: if (!target || target->IsTotem() || target->IsPet()) return false; - auto const& threatList = target->GetThreatMgr().getThreatList(); + auto const& threatList = target->GetThreatMgr().GetThreatList(); ThreatContainer::StorageType::const_iterator itr; uint32 count = 0; @@ -817,24 +817,24 @@ public: Unit* unit = (*itr)->getTarget(); if (!unit) { - handler->PSendSysMessage(" %u. No Unit - threat %f", ++count, (*itr)->getThreat()); + handler->PSendSysMessage(" %u. No Unit - threat %f", ++count, (*itr)->GetThreat()); continue; } - handler->PSendSysMessage(" %u. %s (%s) - threat %f", ++count, unit->GetName().c_str(), unit->GetGUID().ToString().c_str(), (*itr)->getThreat()); + handler->PSendSysMessage(" %u. %s (%s) - threat %f", ++count, unit->GetName().c_str(), unit->GetGUID().ToString().c_str(), (*itr)->GetThreat()); } - auto const& threatList2 = target->GetThreatMgr().getOfflineThreatList(); + auto const& threatList2 = target->GetThreatMgr().GetOfflineThreatList(); for (itr = threatList2.begin(); itr != threatList2.end(); ++itr) { Unit* unit = (*itr)->getTarget(); if (!unit) { - handler->PSendSysMessage(" %u. [offline] No Unit - threat %f", ++count, (*itr)->getThreat()); + handler->PSendSysMessage(" %u. [offline] No Unit - threat %f", ++count, (*itr)->GetThreat()); continue; } - handler->PSendSysMessage(" %u. [offline] %s (%s) - threat %f", ++count, unit->GetName().c_str(), unit->GetGUID().ToString().c_str(), (*itr)->getThreat()); + handler->PSendSysMessage(" %u. [offline] %s (%s) - threat %f", ++count, unit->GetName().c_str(), unit->GetGUID().ToString().c_str(), (*itr)->GetThreat()); } handler->SendSysMessage("End of threat list."); @@ -857,12 +857,12 @@ public: { if (Unit* unit = ref->GetSource()->GetOwner()) { - handler->PSendSysMessage(" %u. %s %s (%s) - threat %f", ++count, (ref->isOnline() ? "" : "[offline]"), - unit->GetName().c_str(), unit->GetGUID().ToString().c_str(), ref->getThreat()); + handler->PSendSysMessage(" %u. %s %s (%s) - threat %f", ++count, (ref->IsOnline() ? "" : "[offline]"), + unit->GetName().c_str(), unit->GetGUID().ToString().c_str(), ref->GetThreat()); } else { - handler->PSendSysMessage(" %u. No Owner - threat %f", ++count, ref->getThreat()); + handler->PSendSysMessage(" %u. No Owner - threat %f", ++count, ref->GetThreat()); } ref = ref->next(); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp index c81f6b395..e4c461bf9 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp @@ -91,8 +91,8 @@ public: if (Unit* target = me->GetVictim()) { _conflagrateTarget = me->GetVictim()->GetGUID(); - _conflagrateThreat = me->GetThreatMgr().getThreat(me->GetVictim()); - me->GetThreatMgr().modifyThreatPercent(target, -100); + _conflagrateThreat = me->GetThreatMgr().GetThreat(me->GetVictim()); + me->GetThreatMgr().ModifyThreatByPercent(target, -100); } events.ScheduleEvent(EVENT_CONFLAGRATION, urand(10000, 13000)); events.ScheduleEvent(EVENT_CHECK_CONFLAGRATION_TARGET, 10000); @@ -112,7 +112,7 @@ public: case EVENT_CHECK_CONFLAGRATION_TARGET: if (Unit* target = ObjectAccessor::GetUnit(*me, _conflagrateTarget)) { - me->GetThreatMgr().addThreat(target, _conflagrateThreat); + me->GetThreatMgr().AddThreat(target, _conflagrateThreat); } break; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp index 94e04a926..1415d7096 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mor_grayhoof.cpp @@ -122,13 +122,13 @@ struct boss_mor_grayhoof : public BossAI // Sleep can target tank, we need to drop threat temporarily on the target. _sleepTargetGUID = target->GetGUID(); - _sleepTargetThreat = me->GetThreatMgr().getThreat(target); - me->GetThreatMgr().modifyThreatPercent(target, -100); + _sleepTargetThreat = me->GetThreatMgr().GetThreat(target); + me->GetThreatMgr().ModifyThreatByPercent(target, -100); _scheduler.Schedule(10s, [this](TaskContext /*context*/) { if (Unit* sleepTarget = ObjectAccessor::GetUnit(*me, _sleepTargetGUID)) { - me->GetThreatMgr().addThreat(sleepTarget, _sleepTargetThreat); + me->GetThreatMgr().AddThreat(sleepTarget, _sleepTargetThreat); } }); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 4a8fe95d7..213e1e107 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -679,7 +679,7 @@ struct boss_nefarian : public BossAI case EVENT_CLASSCALL: if (classesPresent.empty()) { - for (auto& ref : me->GetThreatMgr().getThreatList()) + for (auto& ref : me->GetThreatMgr().GetThreatList()) { if (ref->getTarget() && ref->getTarget()->GetTypeId() == TYPEID_PLAYER) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 889cb3cd1..733e1a6a3 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -236,7 +236,7 @@ public: void EnterEvadeMode(EvadeReason why) override { - if (!me->GetThreatMgr().getThreatList().empty()) + if (!me->GetThreatMgr().GetThreatList().empty()) { if (!_processingMagmaBurst) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp index 8121b75d1..e18944ee4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp @@ -171,7 +171,7 @@ public: if (Creature* creatureCaster = caster->ToCreature()) { creatureCaster->GetThreatMgr().ResetAllThreat(); - creatureCaster->GetThreatMgr().addThreat(target, 1); + creatureCaster->GetThreatMgr().AddThreat(target, 1); creatureCaster->AI()->AttackStart(target); // Attack the target which caster will teleport to. } } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index 454009dd0..4fb6956fb 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -212,7 +212,7 @@ public: } // aggro target if Red Beam if (j == RED_PORTAL && me->GetVictim() != target && target->GetTypeId() == TYPEID_PLAYER) - me->GetThreatMgr().addThreat(target, 100000.0f + DoGetThreat(me->GetVictim())); + me->GetThreatMgr().AddThreat(target, 100000.0f + DoGetThreat(me->GetVictim())); } } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 702b70481..8ba3955a7 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -251,7 +251,7 @@ public: if (!info) return; - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); std::vector targets; if (t_list.empty()) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 861626e40..1855dde57 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -162,7 +162,7 @@ public: void FlameWreathEffect() { std::vector targets; - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); if (t_list.empty()) return; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index 43796d624..8d8bde598 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -299,16 +299,16 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI void RecalculateThreat() { - ThreatContainer::StorageType const& tList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& tList = me->GetThreatMgr().GetThreatList(); for( ThreatContainer::StorageType::const_iterator itr = tList.begin(); itr != tList.end(); ++itr ) { Unit* pUnit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if( pUnit && pUnit->GetTypeId() == TYPEID_PLAYER && me->GetThreatMgr().getThreat(pUnit) ) + if( pUnit && pUnit->GetTypeId() == TYPEID_PLAYER && me->GetThreatMgr().GetThreat(pUnit) ) { float threatMod = GetThreatMod(me->GetDistance2d(pUnit), (float)pUnit->GetArmor(), pUnit->GetHealth(), pUnit->GetMaxHealth(), pUnit); - me->GetThreatMgr().modifyThreatPercent(pUnit, -100); - if (HostileReference* ref = me->GetThreatMgr().getOnlineContainer().getReferenceByTarget(pUnit)) - ref->addThreat(10000000.0f * threatMod); + me->GetThreatMgr().ModifyThreatByPercent(pUnit, -100); + if (HostileReference* ref = me->GetThreatMgr().GetOnlineContainer().getReferenceByTarget(pUnit)) + ref->AddThreat(10000000.0f * threatMod); } } } @@ -741,7 +741,7 @@ public: case EVENT_SPELL_BLINK: { bool InMeleeRange = false; - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) if (Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (target->IsWithinMeleeRange(me)) diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index 19f51d319..3bea4a1e5 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -371,7 +371,7 @@ public: Unit* SelectUnitCasting() { - ThreatContainer::StorageType threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index d05d1696f..6b4a19674 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -130,7 +130,7 @@ class spell_gahzranka_slam : public SpellScript { if (Unit* caster = GetCaster()) { - _wipeThreat = targets.size() < caster->GetThreatMgr().getThreatList().size(); + _wipeThreat = targets.size() < caster->GetThreatMgr().GetThreatListSize();; } } @@ -142,7 +142,7 @@ class spell_gahzranka_slam : public SpellScript { if (Unit* target = GetHitUnit()) { - caster->GetThreatMgr().modifyThreatPercent(target, -100); + caster->GetThreatMgr().ModifyThreatByPercent(target, -100); } } } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp index a8b91ac68..c50f5a75b 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp @@ -104,14 +104,14 @@ public: me->SetReactState(REACT_AGGRESSIVE); if (Unit* pursuitTarget = ObjectAccessor::GetUnit(*me, _pursuitTargetGUID)) { - me->GetThreatMgr().addThreat(pursuitTarget, 1000000.f); + me->GetThreatMgr().AddThreat(pursuitTarget, 1000000.f); } break; case EVENT_STOP_PURSUIT: if (Unit* pursuitTarget = ObjectAccessor::GetUnit(*me, _pursuitTargetGUID)) { _pursuitTargetGUID.Clear(); - me->GetThreatMgr().addThreat(pursuitTarget, -1000000.f); + me->GetThreatMgr().AddThreat(pursuitTarget, -1000000.f); } break; case EVENT_ENTANGLING_ROOTS: diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp index b63fb4780..84192aadb 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp @@ -160,7 +160,7 @@ public: events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, urand(30000, 45000)); break; case EVENT_CAUSE_INSANITY: - if (me->GetThreatMgr().getThreatList().size() > 1) + if (me->GetThreatMgr().GetThreatListSize() > 1) { if (Unit* victim = SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.f, true)) { @@ -186,7 +186,7 @@ public: if (Unit* victim = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.f, true)) { DoCast(victim, SPELL_ASPECT_OF_MARLI, true); - me->GetThreatMgr().modifyThreatPercent(victim, -100.f); + me->GetThreatMgr().ModifyThreatByPercent(victim, -100.f); } events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 45000); break; @@ -198,7 +198,7 @@ public: if (Unit* victim = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.f, true)) { DoCast(victim, SPELL_ASPECT_OF_ARLOKK, true); - me->GetThreatMgr().modifyThreatPercent(victim, -100.f); + me->GetThreatMgr().ModifyThreatByPercent(victim, -100.f); } events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, urand(10000, 15000)); break; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index be9b57e66..648057c56 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -80,7 +80,7 @@ struct boss_hazzarah : public BossAI bool CanAIAttack(Unit const* target) const override { - if (me->GetThreatMgr().getThreatList().size() > 1 && me->GetThreatMgr().getOnlineContainer().getMostHated()->getTarget() == target) + if (me->GetThreatMgr().GetThreatListSize() > 1 && me->GetThreatMgr().GetOnlineContainer().getMostHated()->getTarget() == target) return !target->HasAura(SPELL_SLEEP); return true; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index 6d85c47d8..0c69b7a29 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -81,7 +81,7 @@ struct boss_jindo : public BossAI { case NPC_BRAIN_WASH_TOTEM: summon->SetReactState(REACT_PASSIVE); - if (Unit* target = SelectTarget(SelectTargetMethod::Random, me->GetThreatMgr().getThreatList().size() > 1 ? 1 : 0)) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, me->GetThreatMgr().GetThreatListSize() > 1 ? 1 : 0)) { summon->CastSpell(target, summon->m_spells[0], true); } @@ -132,7 +132,7 @@ struct boss_jindo : public BossAI events.ScheduleEvent(EVENT_POWERFULL_HEALING_WARD, urand(14000, 20000)); break; case EVENT_HEX: - if (me->GetThreatMgr().getThreatList().size() > 1) + if (me->GetThreatMgr().GetThreatListSize() > 1) DoCastVictim(SPELL_HEX, true); events.ScheduleEvent(EVENT_HEX, urand(12000, 20000)); break; @@ -154,7 +154,7 @@ struct boss_jindo : public BossAI bool CanAIAttack(Unit const* target) const override { - if (me->GetThreatMgr().getThreatList().size() > 1 && me->GetThreatMgr().getOnlineContainer().getMostHated()->getTarget() == target) + if (me->GetThreatMgr().GetThreatListSize() > 1 && me->GetThreatMgr().GetOnlineContainer().getMostHated()->getTarget() == target) return !target->HasAura(SPELL_HEX); return true; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index d0d82b76b..11f398ef4 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -457,7 +457,7 @@ public: events.DelayEvents(1500); if (Unit* mainTarget = SelectTarget(SelectTargetMethod::MaxThreat, 0, 100.0f)) { - me->GetThreatMgr().modifyThreatPercent(mainTarget, -100); + me->GetThreatMgr().ModifyThreatByPercent(mainTarget, -100); } } events.ScheduleEvent(EVENT_CHARGE_PLAYER, urand(30000, 40000)); @@ -469,8 +469,8 @@ public: case EVENT_CLEAVE: { std::list meleeRangeTargets; - auto i = me->GetThreatMgr().getThreatList().begin(); - for (; i != me->GetThreatMgr().getThreatList().end(); ++i) + auto i = me->GetThreatMgr().GetThreatList().begin(); + for (; i != me->GetThreatMgr().GetThreatList().end(); ++i) { Unit* target = (*i)->getTarget(); if (me->IsWithinMeleeRange(target)) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp index 6748979a8..806477ace 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp @@ -314,7 +314,7 @@ class spell_enveloping_webs : public SpellScript Unit* hitUnit = GetHitUnit(); if (caster && hitUnit && hitUnit->GetTypeId() == TYPEID_PLAYER) { - caster->GetThreatMgr().modifyThreatPercent(hitUnit, -100); + caster->GetThreatMgr().ModifyThreatByPercent(hitUnit, -100); } } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp index f2afa88ca..373f2a8f8 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp @@ -85,7 +85,7 @@ public: bool CanAIAttack(Unit const* target) const override { - if (me->GetThreatMgr().getThreatList().size() > 1 && me->GetThreatMgr().getOnlineContainer().getMostHated()->getTarget() == target) + if (me->GetThreatMgr().GetThreatListSize() > 1 && me->GetThreatMgr().GetOnlineContainer().getMostHated()->getTarget() == target) return !target->HasAura(SPELL_GOUGE); return true; @@ -158,7 +158,7 @@ public: if (_thousandBladesTargets.empty()) { std::vector targetList; - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { if (Unit* target = (*itr)->getTarget()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index c786f683b..8f616e1ef 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -325,7 +325,7 @@ public: return; // Now lets get archimode threat list - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); if (t_list.empty()) return; @@ -435,7 +435,7 @@ public: if (victim && me->IsWithinMeleeRange(victim)) return false; - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); if (threatlist.empty()) return false; diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index c57a95144..d4fb57363 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -423,7 +423,7 @@ class spell_vem_knockback : public SpellScript { if (Creature* cCaster = GetCaster()->ToCreature()) { - cCaster->GetThreatMgr().modifyThreatPercent(target, -80); + cCaster->GetThreatMgr().ModifyThreatByPercent(target, -80); } } } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 5d78ec10e..a19ea1eae 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -180,7 +180,7 @@ struct boss_ouro : public BossAI void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_SAND_BLAST && target) - me->GetThreatMgr().modifyThreatPercent(target, 100); + me->GetThreatMgr().ModifyThreatByPercent(target, 100); } void Emerge() diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp index 221c30c73..6dabe7337 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp @@ -169,8 +169,8 @@ struct boss_sartura : public BossAI if (Unit* originalTarget = SelectTarget(SelectTargetMethod::Random, 0)) { _savedTargetGUID = originalTarget->GetGUID(); - _savedTargetThreat = me->GetThreatMgr().getThreat(originalTarget); - me->GetThreatMgr().modifyThreatPercent(originalTarget, -100); + _savedTargetThreat = me->GetThreatMgr().GetThreat(originalTarget); + me->GetThreatMgr().ModifyThreatByPercent(originalTarget, -100); } aggroReset = true; events.ScheduleEvent(EVENT_SARTURA_AGGRO_RESET_END, 5000); @@ -190,7 +190,7 @@ struct boss_sartura : public BossAI events.CancelEvent(EVENT_SARTURA_AGGRO_RESET); if (Unit* originalTarget = ObjectAccessor::GetUnit(*me, _savedTargetGUID)) { - me->GetThreatMgr().addThreat(originalTarget, _savedTargetThreat); + me->GetThreatMgr().AddThreat(originalTarget, _savedTargetThreat); _savedTargetGUID.Clear(); } aggroReset = false; @@ -286,8 +286,8 @@ struct npc_sartura_royal_guard : public ScriptedAI if (Unit* originalTarget = SelectTarget(SelectTargetMethod::Random, 0)) { _savedTargetGUID = originalTarget->GetGUID(); - _savedTargetThreat = me->GetThreatMgr().getThreat(originalTarget); - me->GetThreatMgr().modifyThreatPercent(originalTarget, -100); + _savedTargetThreat = me->GetThreatMgr().GetThreat(originalTarget); + me->GetThreatMgr().ModifyThreatByPercent(originalTarget, -100); } aggroReset = true; events.ScheduleEvent(EVENT_GUARD_AGGRO_RESET_END, 5000); @@ -307,7 +307,7 @@ struct npc_sartura_royal_guard : public ScriptedAI events.CancelEvent(EVENT_GUARD_AGGRO_RESET); if (Unit* originalTarget = ObjectAccessor::GetUnit(*me, _savedTargetGUID)) { - me->GetThreatMgr().addThreat(originalTarget, _savedTargetThreat); + me->GetThreatMgr().AddThreat(originalTarget, _savedTargetThreat); _savedTargetGUID.Clear(); } aggroReset = false; diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp index 13c6ee445..66d5f2129 100644 --- a/src/server/scripts/Kalimdor/boss_azuregos.cpp +++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp @@ -189,7 +189,7 @@ class spell_arcane_vacuum : public SpellScript Unit* hitUnit = GetHitUnit(); if (caster && hitUnit && hitUnit->ToPlayer()) { - caster->GetThreatMgr().modifyThreatPercent(hitUnit, -100); + caster->GetThreatMgr().ModifyThreatByPercent(hitUnit, -100); caster->CastSpell(hitUnit, SPELL_ARCANE_VACUUM_TP, true); } } diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp index f4bf7e5b4..9b073985e 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp @@ -411,7 +411,7 @@ struct boss_taldaram : public BossAI { //Count alive players uint8 count = 0; - std::list const t_list = me->GetThreatMgr().getThreatList(); + std::list const t_list = me->GetThreatMgr().GetThreatList(); if (!t_list.empty()) { for (HostileReference const* reference : t_list) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 3ccc2a9c4..c80a6107c 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -102,17 +102,17 @@ struct boss_faction_championsAI : public ScriptedAI void RecalculateThreat() { - ThreatContainer::StorageType const& tList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& tList = me->GetThreatMgr().GetThreatList(); for( ThreatContainer::StorageType::const_iterator itr = tList.begin(); itr != tList.end(); ++itr ) { Unit* pUnit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if( pUnit && pUnit->GetTypeId() == TYPEID_PLAYER && me->GetThreatMgr().getThreat(pUnit) ) + if( pUnit && pUnit->GetTypeId() == TYPEID_PLAYER && me->GetThreatMgr().GetThreat(pUnit) ) { float threatMod = GetThreatMod(me->GetDistance2d(pUnit), (float)pUnit->GetArmor(), pUnit->GetHealth(), pUnit->GetMaxHealth(), pUnit); - me->GetThreatMgr().modifyThreatPercent(pUnit, -100); - //me->getThreatMgr().doAddThreat(pUnit, 10000000.0f * threatMod); - if (HostileReference* ref = me->GetThreatMgr().getOnlineContainer().getReferenceByTarget(pUnit)) - ref->addThreat(10000000.0f * threatMod); + me->GetThreatMgr().ModifyThreatByPercent(pUnit, -100); + //me->getThreatMgr().DoAddThreat(pUnit, 10000000.0f * threatMod); + if (HostileReference* ref = me->GetThreatMgr().GetOnlineContainer().getReferenceByTarget(pUnit)) + ref->AddThreat(10000000.0f * threatMod); } } } @@ -177,7 +177,7 @@ struct boss_faction_championsAI : public ScriptedAI uint32 EnemiesInRange(float distance) { - ThreatContainer::StorageType const& tList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& tList = me->GetThreatMgr().GetThreatList(); uint32 count = 0; Unit* target; for( ThreatContainer::StorageType::const_iterator iter = tList.begin(); iter != tList.end(); ++iter ) @@ -191,7 +191,7 @@ struct boss_faction_championsAI : public ScriptedAI Unit* SelectEnemyCaster(bool casting, float range) { - ThreatContainer::StorageType const& tList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& tList = me->GetThreatMgr().GetThreatList(); Unit* target; for( ThreatContainer::StorageType::const_iterator iter = tList.begin(); iter != tList.end(); ++iter ) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index e2c600ba0..fdb3b37f4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -299,7 +299,7 @@ public: if (events.GetPhaseMask() & PHASE_ONE_MASK && damage >= me->GetPower(POWER_MANA)) { // reset threat - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr) { Unit* unit = ObjectAccessor::GetUnit((*me), (*itr)->getUnitGuid()); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 98d5adf71..1484e1aa7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -592,7 +592,7 @@ public: { checkTimer = 3000; me->SetInCombatWithZone(); - ThreatContainer::StorageType const& threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatList = me->GetThreatMgr().GetThreatList(); if (!threatList.empty()) for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) if (Unit* target = (*itr)->getTarget()) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index c3f478d12..b581decfc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1775,15 +1775,15 @@ public: Position myPos = me->GetPosition(); me->NearTeleportTo(c->GetPositionX(), c->GetPositionY(), c->GetPositionZ(), c->GetOrientation()); c->NearTeleportTo(myPos.GetPositionX(), myPos.GetPositionY(), myPos.GetPositionZ(), myPos.GetOrientation()); - const ThreatContainer::StorageType me_tl = me->GetThreatMgr().getThreatList(); - const ThreatContainer::StorageType target_tl = c->GetThreatMgr().getThreatList(); + const ThreatContainer::StorageType me_tl = me->GetThreatMgr().GetThreatList(); + const ThreatContainer::StorageType target_tl = c->GetThreatMgr().GetThreatList(); DoResetThreat(); for (ThreatContainer::StorageType::const_iterator iter = target_tl.begin(); iter != target_tl.end(); ++iter) - me->GetThreatMgr().addThreat((*iter)->getTarget(), (*iter)->getThreat()); + me->GetThreatMgr().AddThreat((*iter)->getTarget(), (*iter)->GetThreat()); c->GetThreatMgr().ResetAllThreat(); for (ThreatContainer::StorageType::const_iterator iter = me_tl.begin(); iter != me_tl.end(); ++iter) - c->GetThreatMgr().addThreat((*iter)->getTarget(), (*iter)->getThreat()); + c->GetThreatMgr().AddThreat((*iter)->getTarget(), (*iter)->GetThreat()); } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 65d745f89..591cb95b5 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -456,7 +456,7 @@ public: me->GetThreatMgr().resetAggro(NotOnSameSide(me)); if (Unit* pTarget = SelectTarget(SelectTargetMethod::MaxDistance, 0)) { - me->GetThreatMgr().addThreat(pTarget, 100.0f); + me->GetThreatMgr().AddThreat(pTarget, 100.0f); AttackStart(pTarget); } events.RepeatEvent(20000); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 92d5ebff2..5617f54da 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -438,7 +438,7 @@ public: case EVENT_DETONATE_MANA: { std::vector unitList; - ThreatContainer::StorageType const& threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatList = me->GetThreatMgr().GetThreatList(); for (auto itr : threatList) { if (itr->getTarget()->GetTypeId() == TYPEID_PLAYER diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index 275569233..e3e88e92f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -128,8 +128,8 @@ public: std::list meleeRangeTargets; Unit* finalTarget = nullptr; uint8 counter = 0; - auto i = me->GetThreatMgr().getThreatList().begin(); - for (; i != me->GetThreatMgr().getThreatList().end(); ++i, ++counter) + auto i = me->GetThreatMgr().GetThreatList().begin(); + for (; i != me->GetThreatMgr().GetThreatList().end(); ++i, ++counter) { // Gather all units with melee range Unit* target = (*i)->getTarget(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 9d5940163..6f31f8417 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -321,8 +321,8 @@ public: } std::vector targets; - auto i = me->GetThreatMgr().getThreatList().begin(); - for (; i != me->GetThreatMgr().getThreatList().end(); ++i) + auto i = me->GetThreatMgr().GetThreatList().begin(); + for (; i != me->GetThreatMgr().GetThreatList().end(); ++i) { if ((*i)->getTarget()->GetTypeId() == TYPEID_PLAYER) { diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index aace56577..4b9d3fde4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -553,17 +553,17 @@ public: if (!feugen->IsAlive() || !feugen->GetVictim() || !me->GetVictim()) return; - float threatFeugen = feugen->GetThreatMgr().getThreat(feugen->GetVictim()); - float threatStalagg = me->GetThreatMgr().getThreat(me->GetVictim()); + float threatFeugen = feugen->GetThreatMgr().GetThreat(feugen->GetVictim()); + float threatStalagg = me->GetThreatMgr().GetThreat(me->GetVictim()); Unit* tankFeugen = feugen->GetVictim(); Unit* tankStalagg = me->GetVictim(); - feugen->GetThreatMgr().modifyThreatPercent(tankFeugen, -100); + feugen->GetThreatMgr().ModifyThreatByPercent(tankFeugen, -100); feugen->AddThreat(tankStalagg, threatFeugen); feugen->CastSpell(tankStalagg, SPELL_MAGNETIC_PULL, true); feugen->AI()->DoAction(ACTION_MAGNETIC_PULL); - me->GetThreatMgr().modifyThreatPercent(tankStalagg, -100); + me->GetThreatMgr().ModifyThreatByPercent(tankStalagg, -100); me->AddThreat(tankFeugen, threatStalagg); me->CastSpell(tankFeugen, SPELL_MAGNETIC_PULL, true); DoAction(ACTION_MAGNETIC_PULL); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index fd4456b7c..1196e2c10 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -670,7 +670,7 @@ public: bool operator() (WorldObject* target) const { - if (target == _victim && _me->GetThreatMgr().getThreatList().size() > 1) + if (target == _victim && _me->GetThreatMgr().GetThreatListSize() > 1) return true; if (target->GetTypeId() != TYPEID_PLAYER) diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp index d23c7ab42..8404dd047 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp @@ -116,7 +116,7 @@ public: { me->CastSpell(me, SPELL_INCITE_CHAOS, false); - std::list t_list = me->GetThreatMgr().getThreatList(); + std::list t_list = me->GetThreatMgr().GetThreatList(); for (std::list::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) { Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index bb3686d76..fba9f6f19 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -150,7 +150,7 @@ public: if (!me->IsWithinMeleeRange(me->GetVictim())) { - ThreatContainer::StorageType threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i) if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid())) if (target->IsAlive() && me->IsWithinMeleeRange(target)) diff --git a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp index d8955c7d8..e7ddb967b 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_bloodboil.cpp @@ -245,7 +245,7 @@ public: { PreventHitEffect(effIndex); if (Unit* target = GetHitUnit()) - GetCaster()->GetThreatMgr().modifyThreatPercent(target, -20); + GetCaster()->GetThreatMgr().ModifyThreatByPercent(target, -20); } void Register() override diff --git a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp index 16825cc56..722db4cce 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_supremus.cpp @@ -126,7 +126,7 @@ public: Unit* FindHatefulStrikeTarget() { Unit* target = nullptr; - ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatlist = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i) { Unit* unit = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index d2036cb02..1ff3f3771 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -187,7 +187,7 @@ public: target = me->GetVictim(); else { - ThreatContainer::StorageType const& t_list = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& t_list = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) if (Unit* threatTarget = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (me->IsWithinMeleeRange(threatTarget)) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index 5c70e0271..66c73cca7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -221,7 +221,7 @@ public: // Xinef: if we have target we currently follow, return if (Unit* target = GetCaster()->GetVictim()) - if (GetCaster()->GetThreatMgr().getThreat(target) >= 100000.0f) + if (GetCaster()->GetThreatMgr().GetThreat(target) >= 100000.0f) return; // Xinef: acquire new target diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 076c96442..dfa312a1b 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -323,7 +323,7 @@ public: else { me->resetAttackTimer(); - ThreatContainer::StorageType const& threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatList = me->GetThreatMgr().GetThreatList(); for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) if (Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid())) if (me->IsWithinMeleeRange(unit)) diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 7d6ab1d67..eea9cda11 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -994,7 +994,7 @@ public: { PreventHitEffect(effIndex); - ThreatContainer::StorageType const& ThreatList = GetCaster()-> GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& ThreatList = GetCaster()-> GetThreatMgr().GetThreatList(); std::list targetList; for (ThreatContainer::StorageType::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr) { diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 3ed77d91e..980d00719 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -1741,7 +1741,7 @@ public: // some code to cast spell Mana Burn on random target which has mana if (ManaBurnTimer <= diff) { - std::list AggroList = me->GetThreatMgr().getThreatList(); + std::list AggroList = me->GetThreatMgr().GetThreatList(); std::list UnitsWithMana; for (std::list::const_iterator itr = AggroList.begin(); itr != AggroList.end(); ++itr) diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 8859a7e36..6f21b92e8 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -489,7 +489,7 @@ public: AttackStart(Dragonmaw); } - HostileReference* ref = me->GetThreatMgr().getOnlineContainer().getReferenceByTarget(caster); + HostileReference* ref = me->GetThreatMgr().GetOnlineContainer().getReferenceByTarget(caster); if (ref) ref->removeReference(); } diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index dd7ce5745..d426b6b31 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -101,7 +101,7 @@ struct npc_pet_mage_mirror_image : CasterAI while (ref) { if (Unit* unit = ref->GetSource()->GetOwner()) - unit->AddThreat(me, ref->getThreat() - ref->getTempThreatModifier()); + unit->AddThreat(me, ref->GetThreat() - ref->getTempThreatModifier()); ref = ref->next(); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ea4028627..7e16ae4f6 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -893,7 +893,7 @@ class spell_gen_knock_away : public SpellScript PreventHitDefaultEffect(effIndex); if (Unit* target = GetHitUnit()) if (Creature* caster = GetCaster()->ToCreature()) - caster->GetThreatMgr().modifyThreatPercent(target, -25); // Xinef: amount confirmed by onyxia and void reaver notes + caster->GetThreatMgr().ModifyThreatByPercent(target, -25); // Xinef: amount confirmed by onyxia and void reaver notes } void Register() override @@ -999,7 +999,7 @@ class spell_gen_hate_to_zero : public SpellScript PreventHitDefaultEffect(effIndex); if (Unit* target = GetHitUnit()) if (Creature* caster = GetCaster()->ToCreature()) - caster->GetThreatMgr().modifyThreatPercent(target, -100); + caster->GetThreatMgr().ModifyThreatByPercent(target, -100); } void Register() override diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 82a3e5e99..f23d3a247 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -699,7 +699,7 @@ class spell_warl_soulshatter : public SpellScript Unit* caster = GetCaster(); if (Unit* target = GetHitUnit()) { - if (target->CanHaveThreatList() && target->GetThreatMgr().getThreat(caster) > 0.0f) + if (target->CanHaveThreatList() && target->GetThreatMgr().GetThreat(caster) > 0.0f) caster->CastSpell(target, SPELL_WARLOCK_SOULSHATTER, true); } } diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index a45f55d13..fb3046986 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -320,7 +320,7 @@ public: { Talk(SAY_YSONDRE_SUMMON_DRUIDS); - auto const& attackers = me->GetThreatMgr().getThreatList(); + auto const& attackers = me->GetThreatMgr().GetThreatList(); uint8 attackersCount = 0; for (const auto attacker : attackers) diff --git a/src/server/scripts/World/npc_stave_of_ancients.cpp b/src/server/scripts/World/npc_stave_of_ancients.cpp index 8ce88a0d5..24e6fa411 100644 --- a/src/server/scripts/World/npc_stave_of_ancients.cpp +++ b/src/server/scripts/World/npc_stave_of_ancients.cpp @@ -111,7 +111,7 @@ bool NPCStaveQuestAI::IsFairFight() { Unit* unit = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); - if (!(*itr)->getThreat()) + if (!(*itr)->GetThreat()) { // if target threat is 0 its fair, this prevents despawn in the case when // there is a bystander since UpdateVictim adds nearby enemies to the threatlist diff --git a/src/server/scripts/World/npc_stave_of_ancients.h b/src/server/scripts/World/npc_stave_of_ancients.h index d0b6c96ad..719499c9e 100644 --- a/src/server/scripts/World/npc_stave_of_ancients.h +++ b/src/server/scripts/World/npc_stave_of_ancients.h @@ -138,7 +138,7 @@ struct NPCStaveQuestAI : public ScriptedAI ObjectGuid gossipPlayerGUID; ObjectGuid playerGUID; bool encounterStarted; - ThreatContainer::StorageType const& threatList = me->GetThreatMgr().getThreatList(); + ThreatContainer::StorageType const& threatList = me->GetThreatMgr().GetThreatList(); std::map entryKeys = { { ARTORIUS_NORMAL_ENTRY, 1 }, From 24c60ec3025d43d37079102f010478c00008c04a Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 26 Sep 2022 03:45:25 +0200 Subject: [PATCH 22/26] fix(Scripts/Brewfest): Fixed race for tokens dailies. (#13109) * fix(Scripts/Brewfest): Fixed race for tokens dailies. Fixes #13077 * Update. --- src/server/scripts/Events/brewfest.cpp | 34 +++++++++++--------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 1c4cf1867..12ce02ee2 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -49,10 +49,13 @@ enum kegThrowers SPELL_THROW_KEG = 43660, SPELL_RAM_AURA = 43883, SPELL_ADD_TOKENS = 44501, - SPELL_COOLDOWN_CHECKER = 43755, + SPELL_RAM_RACING_CROP = 44262, + SPELL_COOLDOWN_CHECKER = 44689, NPC_RAM_MASTER_RAY = 24497, NPC_NEILL_RAMSTEIN = 23558, KEG_KILL_CREDIT = 24337, + GOSSIP_NEIL = 8953, + GOSSIP_RAY = 8973 }; struct npc_brewfest_keg_thrower : public ScriptedAI @@ -112,30 +115,21 @@ struct npc_brewfest_keg_reciver : public ScriptedAI } } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*uiSender*/, uint32 uiAction) + void sGossipSelect(Player* player, uint32 uiSender, uint32 uiAction) override { - switch (uiAction) + if (uiSender == GOSSIP_NEIL || uiSender == GOSSIP_RAY) { - case GOSSIP_ACTION_INFO_DEF+1: - CloseGossipMenuFor(player); - player->AddSpellCooldown(SPELL_COOLDOWN_CHECKER, 0, 18 * HOUR * IN_MILLISECONDS); - player->CastSpell(player, 43883, true); - player->CastSpell(player, 44262, true); - break; + player->CastSpell(player, SPELL_COOLDOWN_CHECKER, true); + player->AddSpellCooldown(SPELL_COOLDOWN_CHECKER, 0, 18 * HOUR * IN_MILLISECONDS); } - return true; - } - bool OnGossipHello(Player* player, Creature* creature) - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); + if (uiAction != 4) + { + CloseGossipMenuFor(player); - if (!player->HasSpellCooldown(SPELL_COOLDOWN_CHECKER) && player->GetQuestRewardStatus(player->GetTeamId() == TEAM_ALLIANCE ? QUEST_THERE_AND_BACK_AGAIN_A : QUEST_THERE_AND_BACK_AGAIN_H)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Do you have additional work?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - - SendGossipMenuFor(player, (creature->GetEntry() == NPC_NEILL_RAMSTEIN ? 8934 : 8976), creature->GetGUID()); - return true; + player->CastSpell(player, SPELL_RAM_AURA, true); + player->CastSpell(player, SPELL_RAM_RACING_CROP, true); + } } }; From c4ec30ae055fc4546086d557cec5b21a474e6ef7 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Mon, 26 Sep 2022 10:36:14 -0300 Subject: [PATCH 23/26] fix(Core/TempleOfAhnQiraj): Fankriss pull range (#13143) --- .../scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp index d0ca30daa..eb553c9de 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp @@ -51,7 +51,10 @@ const std::array entangleSpells = { SPELL_ENTANGLE_RIGHT, SPELL_ENTAN struct boss_fankriss : public BossAI { - boss_fankriss(Creature* creature) : BossAI(creature, DATA_FANKRISS) { } + boss_fankriss(Creature* creature) : BossAI(creature, DATA_FANKRISS) + { + me->m_CombatDistance = 80.f; + } void Reset() override { From b5b8960b2756e07a973571f26d4eaffd10011bd0 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Mon, 26 Sep 2022 10:38:09 -0300 Subject: [PATCH 24/26] fix(DB/waypoint): Update Sartura waypoints (#13142) Create rev_1664158803089680000.sql --- .../pending_db_world/rev_1664158803089680000.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1664158803089680000.sql diff --git a/data/sql/updates/pending_db_world/rev_1664158803089680000.sql b/data/sql/updates/pending_db_world/rev_1664158803089680000.sql new file mode 100644 index 000000000..6dcf404a0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1664158803089680000.sql @@ -0,0 +1,14 @@ +-- Sartura updated waypoints. +SET @PATH=876480; +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-8264.544,1744.8572,-15.0647335,0,0,1,0,100,0), +(@PATH,2,-8256.176,1706.1317,-25.63707,0,0,1,0,100,0), +(@PATH,3,-8260.745,1661.0099,-30.723732,0,0,1,0,100,0), +(@PATH,4,-8308.3955,1705.1285,-20.586851,0,0,1,0,100,0), +(@PATH,5,-8276.452,1706.4706,-21.835382,0,0,1,0,100,0), +(@PATH,6,-8251.389,1708.8358,-25.77644,0,0,1,0,100,0), +(@PATH,7,-8224.531,1711.2188,-27.293034,0,0,1,0,100,0), +(@PATH,8,-8261.439,1684.3287,-28.363323,0,0,1,0,100,0), +(@PATH,9,-8286.062,1662.6569,-29.59315,0,0,1,0,100,0), +(@PATH,10,-8321.049,1634.6908,-32.10147,0,0,1,0,100,0); From 9837bdeb6ee6851cf5a33710e2569c7382bb4433 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 26 Sep 2022 13:40:28 +0000 Subject: [PATCH 25/26] chore(DB): import pending files Referenced commit(s): b5b8960b2756e07a973571f26d4eaffd10011bd0 --- .../rev_1664158803089680000.sql => db_world/2022_09_26_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1664158803089680000.sql => db_world/2022_09_26_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1664158803089680000.sql b/data/sql/updates/db_world/2022_09_26_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1664158803089680000.sql rename to data/sql/updates/db_world/2022_09_26_00.sql index 6dcf404a0..aa4c2cd17 100644 --- a/data/sql/updates/pending_db_world/rev_1664158803089680000.sql +++ b/data/sql/updates/db_world/2022_09_26_00.sql @@ -1,3 +1,4 @@ +-- DB update 2022_09_25_05 -> 2022_09_26_00 -- Sartura updated waypoints. SET @PATH=876480; DELETE FROM `waypoint_data` WHERE `id`=@PATH; From 6c3fc2603b46c84cd4334030f4bf7b57857e0241 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 26 Sep 2022 15:41:20 +0200 Subject: [PATCH 26/26] =?UTF-8?q?fix(Scripts/MoltenCore):=20Players=20shou?= =?UTF-8?q?ld=20not=20be=20able=20to=20summon=20Ragnaro=E2=80=A6=20(#13128?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Scripts/MoltenCore): Players should not be able to summon Ragnaros before Majordomo's teleport. Fixes #11870 --- .../BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index d7f840320..5fea5d398 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -213,6 +213,8 @@ public: majordomoSummonsData[spawn->GetGUID().GetCounter()] = MajordomoAddData(spawn->GetGUID(), spawn->GetEntry(), spawn->GetPosition()); } } + + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } else {