diff --git a/sql/mangos.sql b/sql/mangos.sql index f71c3775c..072f1d1d8 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `cache_id` int(10) default '0', - `required_8482_01_mangos_spell_elixir` bit(1) default NULL + `required_8498_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -13594,152 +13594,159 @@ LOCK TABLES `spell_bonus_data` WRITE; /*!40000 ALTER TABLE `spell_bonus_data` DISABLE KEYS */; INSERT INTO `spell_bonus_data` VALUES /* Death Knight */ -('48721', '0', '0', '0.04', 'Death Knight - Blood Boil'), -('55078', '0', '0', '0.055', 'Death Knight - Blood Plague Dummy Proc'), -('50444', '0', '0', '0.105', 'Death Knight - Corpse Explosion Triggered'), -('52212', '0', '0', '0.0475', 'Death Knight - Death and Decay Triggered'), -('47632', '0', '0', '0.15', 'Death Knight - Death Coil Damage'), -('47633', '0', '0', '0.15', 'Death Knight - Death Coil Heal'), -('55095', '0', '0', '0.055', 'Death Knight - Frost Fever'), -('49184', '0', '0', '0.1', 'Death Knight - Howling Blast'), -('45477', '0', '0', '0.1', 'Death Knight - Icy Touch'), -('50842', '0', '0', '0.04', 'Death Knight - Pestilence'), -('47476', '0', '0', '0.06', 'Death Knight - Strangulate'), -('50536', '0', '0', '0.013', 'Death Knight - Unholy Blight Triggered'), -('50401', '0', '0', '0', 'Death Knight - Razor Frost'), -('56903', '0', '0', '0', 'Death Knight - Lichflame'), +(48721, 0, 0, 0.04, 'Death Knight - Blood Boil'), +(55078, 0, 0, 0.055, 'Death Knight - Blood Plague Dummy Proc'), +(50444, 0, 0, 0.105, 'Death Knight - Corpse Explosion Triggered'), +(52212, 0, 0, 0.0475,'Death Knight - Death and Decay Triggered'), +(47632, 0, 0, 0.15, 'Death Knight - Death Coil Damage'), +(47633, 0, 0, 0.15, 'Death Knight - Death Coil Heal'), +(55095, 0, 0, 0.055, 'Death Knight - Frost Fever'), +(49184, 0, 0, 0.1, 'Death Knight - Howling Blast'), +(45477, 0, 0, 0.1, 'Death Knight - Icy Touch'), +(56903, 0, 0, 0, 'Death Knight - Lichflame'), +(50842, 0, 0, 0.04, 'Death Knight - Pestilence'), +(50401, 0, 0, 0, 'Death Knight - Razor Frost'), +(47476, 0, 0, 0.06, 'Death Knight - Strangulate'), +(50536, 0, 0, 0.013, 'Death Knight - Unholy Blight Triggered'), /* Druid */ -('5185', '1.6104', '0', '0', 'Druid - Healing Touch'), -('33763', '0', '0.09518', '0', 'Druid - Lifebloom'), -('774', '0', '0.37604', '0', 'Druid - Rejuvenation'), -('8936', '0.539', '0.188', '0', 'Druid - Regrowth'), -('50288', '0.05', '0', '0', 'Druid - Starfall'), -('50294', '0.012', '0', '0', 'Druid - Starfall AOE'), -('18562', '0', '0', '0', 'Druid - Swiftmend'), -('44203', '0.538', '0', '0', 'Druid - Tranquility Triggered'), -('48438', '0', '0.11505', '0', 'Druid - Wild Growth'), -('50464', '0.6611', '0', '0', 'Druid - Nourish'), -('339', '0', '0.1', '0', 'Druid - Entangling Roots'), -('42231', '0.12898', '0', '0', 'Druid - Hurricane Triggered'), -('5570', '0', '0.127', '0', 'Druid - Insect Swarm'), -('8921', '0.1515', '0.13', '0', 'Druid - Moonfire'), -('2912', '1', '0', '0', 'Druid - Starfire'), -('5176', '0.5714', '0', '0', 'Druid - Wrath'), +(5185, 1.6104, 0, 0, 'Druid - Healing Touch'), +(339, 0, 0.1, 0, 'Druid - Entangling Roots'), +(42231, 0.12898,0, 0, 'Druid - Hurricane Triggered'), +(5570, 0, 0.2, 0, 'Druid - Insect Swarm'), +(33763, 0, 0.09518, 0, 'Druid - Lifebloom'), +(8921, 0.1515, 0.13, 0, 'Druid - Moonfire'), +(50464, 0.6611, 0, 0, 'Druid - Nourish'), +(8936, 0.539, 0.188, 0, 'Druid - Regrowth'), +(774, 0, 0.37604, 0, 'Druid - Rejuvenation'), +(50288, 0.05, 0, 0, 'Druid - Starfall'), +(50294, 0.012, 0, 0, 'Druid - Starfall AOE'), +(2912, 1, 0, 0, 'Druid - Starfire'), +(18562, 0, 0, 0, 'Druid - Swiftmend'), +(44203, 0.538, 0, 0, 'Druid - Tranquility Triggered'), +(61391, 0.193, 0, 0, 'Druid - Typhoon'), +(48438, 0, 0.11505, 0, 'Druid - Wild Growth'), +(5176, 0.5714, 0, 0, 'Druid - Wrath'), /* Mage */ -('30451', '0.7143', '0', '0', 'Mage - Arcane Blast'), -('1449', '0.2128', '0', '0', 'Mage - Arcane Explosion'), -('7268', '0.2857', '0', '0', 'Mage - Arcane Missiles Triggered Spell'), -('1463', '0.8053', '0', '0', 'Mage - Mana Shield'), -('44425', '0.8571', '0', '0', 'Mage - Arcane Barrage'), -('11113', '0.1357', '0', '0', 'Mage - Blast Wave Rank'), -('31661', '0.1357', '0', '0', 'Mage - Dragons Breath'), -('2136', '0.4286', '0', '0', 'Mage - Fire Blast'), -('133', '1', '0', '0', 'Mage - Fire Ball'), -('2120', '0.2357', '0.122', '0', 'Mage - Flamestrike'), -('11366', '1.15', '0.05', '0', 'Mage - Pyroblast'), -('2948', '0.4286', '0', '0', 'Mage - Scorch'), -('44614', '0.8571', '0', '0', 'Mage - Frostfire Bolt'), -('44457', '0.4', '0.2', '0', 'Mage - Living Bomb'), -('42208', '0.0952', '0', '0', 'Mage - Blizzard Triggered Spell'), -('120', '0.1357', '0', '0', 'Mage - Cone of Cold'), -('122', '0.193', '0', '0', 'Mage - Frost Nova'), -('116', '0.8143', '0', '0', 'Mage - Frost Bolt'), -('11426', '0.8053', '0', '0', 'Mage - Ice Barrier'), -('30455', '0.1429', '0', '0', 'Mage - Ice Lance'), -('34913','0', '0', '0', 'Mage - Molten Armor Triggered'), +(44425, 0.714286,0, 0, 'Mage - Arcane Barrage'), +(30451, 0.7143, 0, 0, 'Mage - Arcane Blast'), +(1449, 0.2128, 0, 0, 'Mage - Arcane Explosion'), +(7268, 0.2857, 0, 0, 'Mage - Arcane Missiles Triggered Spell'), +(42208, 0.1437, 0, 0, 'Mage - Blizzard Triggered'), +(2136, 0.4286, 0, 0, 'Mage - Fire Blast'), +(133, 1, 0, 0, 'Mage - Fire Ball'), +(2120, 0.2357, 0.122, 0, 'Mage - Flamestrike'), +(122, 0.193, 0, 0, 'Mage - Frost Nova'), +(116, 0.8143, 0, 0, 'Mage - Frost Bolt'), +(44614, 0.8571, 0, 0, 'Mage - Frostfire Bolt'), +(11426, 0.8053, 0, 0, 'Mage - Ice Barrier'), +(30455, 0.1429, 0, 0, 'Mage - Ice Lance'), +(44457, 0.4, 0.2, 0, 'Mage - Living Bomb'), +(1463, 0.8053, 0, 0, 'Mage - Mana Shield'), +(34913, 0, 0, 0, 'Mage - Molten Armor Triggered'), +(11366, 1.15, 0.05, 0, 'Mage - Pyroblast'), +(2948, 0.4286, 0, 0, 'Mage - Scorch'), /* Paladin */ -('19750','0.4286', '0', '0', 'Paladin - Flash of Light'), -('635', '0.7143', '0', '0', 'Paladin - Holy Light'), -('25912', '0.4286', '0', '0', 'Paladin - Holy Shock Triggered Hurt'), -('25914', '0.4286', '0', '0', 'Paladin - Holy Shock Triggered Heal'), -('31935', '0.07', '0', '0.07', 'Paladin - Avengers Shiled'), -('26573', '0', '0.04', '0.04', 'Paladin - Consecration'), -('879', '0.15', '0', '0.15', 'Paladin - Exorcism'), -('24275', '0.15', '0', '0.15', 'Paladin - Hammer of Wrath'), -('20925', '0.09', '0', '0.056', 'Paladin - Holy Shield'), -('2812', '0.07', '0', '0.07', 'Paladin - Holy Wrath'), -('31893', '0.25', '0', '0.16', 'Paladin - Seal of Blood Enemy Proc'), -('32221', '0.25', '0', '0.16', 'Paladin - Seal of Blood Self Proc'), -('20424', '0.25', '0', '0.16', 'Paladin - Seal of Command Proc'), -('379', '0', '0', '0', 'Shaman - Earth Shield Triggered'), -('20167', '0.25', '0', '0.16', 'Paladin - Seal of Light Proc'), -('53719', '0.25', '0', '0.16', 'Paladin - Seal of The Martyr Enemy Proc'), -('53718', '0.25', '0', '0.16', 'Paladin - Seal of The Martyr Self Proc'), -('25742', '0.07', '0', '0.039', 'Paladin - Seal of Righteousness Dummy Proc'), -('53595', '0', '0', '0','Paladin - Hammer of the Righteous'), -('31803', '0', '0.013', '0.15', 'Paladin - Holy Vengeance'), +(31935, 0.07, 0, 0.07, 'Paladin - Avengers Shiled'), +(53742, 0, 0.0156, 0.03, 'Paladin - Blood Corruption'), +(26573, 0, 0.04, 0.04, 'Paladin - Consecration'), +(879, 0.15, 0, 0.15, 'Paladin - Exorcism'), +(25997, 0, 0, 0, 'Paladin - Eye for an Eye'), +(19750, 1, 0, 0, 'Paladin - Flash of Light'), +(53595, 0, 0, 0, 'Paladin - Hammer of the Righteous'), +(24275, 0.15, 0, 0.15, 'Paladin - Hammer of Wrath'), +(635, 1.66, 0, 0, 'Paladin - Holy Light'), +(25912, 0.4286, 0, 0, 'Paladin - Holy Shock Triggered Hurt'), +(20925, 0.09, 0, 0.056, 'Paladin - Holy Shield'), +(31803, 0, 0.0156, 0.03, 'Paladin - Holy Vengeance'), +(2812, 0.07, 0, 0.07, 'Paladin - Holy Wrath'), +(31898, 0.18, 0, 0.11, 'Paladin - Judgement of Blood Enemy'), +(32220, 0.0594, 0, 0.0363,'Paladin - Judgement of Blood Self'), +(20467, 0.25, 0, 0.16, 'Paladin - Judgement of Command'), +(53733, 0, 0, 0, 'Paladin - Judgement of Corruption'), +(20267, 0.1, 0, 0.1, 'Paladin - Judgement of Light Proc'), +(20187, 0.32, 0, 0, 'Paladin - Judgement of Righteousness'), +(53726, 0.18, 0, 0.11, 'Paladin - Judgement of the Martyr Enemy'), +(53725, 0.0594, 0, 0.0363,'Paladin - Judgement of the Martyr Self'), +(31804, 0, 0, 0, 'Paladin - Judgement of Vengeance'), +(31893, 0, 0, 0, 'Paladin - Seal of Blood Proc Enemy'), +(32221, 0, 0, 0, 'Paladin - Seal of Blood Proc Self'), +(20424, 0, 0, 0, 'Paladin - Seal of Command Proc'), +(53739, 0, 0.00156, 0.003, 'Paladin - Seal of Corruption (full stack proc)'), +(20167, 0.15, 0, 0.15, 'Paladin - Seal of Light Proc'), +(25742, 0.07, 0, 0.039, 'Paladin - Seal of Righteousness Dummy Proc'), +(53719, 0, 0, 0, 'Paladin - Seal of the Martyr Proc Enemy'), +(53718, 0, 0, 0, 'Paladin - Seal of the Martyr Proc Self'), +(42463, 0, 0.00156, 0.003, 'Paladin - Seal of Vengeance (full stack proc)'), +(53600, 0, 0, 0, 'Paladin - Shield of Righteousness'), /* Priest */ -('32546', '0.8068', '0', '0', 'Priest - Binding Heal'), -('34861', '0.402', '0', '0', 'Priest - Circle of Healing'), -('19236', '0.8068', '0', '0', 'Priest - Desperate Prayer'), -('2061', '0.8068', '0', '0', 'Priest - Flash Heal'), -('2060', '1.6135', '0', '0', 'Priest - Greater Heal'), -('23455', '0.3035', '0', '0', 'Priest - Holy Nova Heal'), -('17', '0.8068', '0', '0', 'Priest - Power Word: Shield'), -('596', '0.8086', '0', '0', 'Priest - Prayer of Healing'), -('33110', '0.8068', '0', '0', 'Priest - Prayer of Mending Heal Proc'), -('139', '0', '0.376', '0', 'Priest - Renew'), -('2944', '0.1849', '0', '0', 'Priest - Devouring Plague'), -('14914', '0.5711', '0.024', '0', 'Priest - Holy Fire'), -('15237', '0.1606', '0', '0', 'Priest - Holy Nova Damage'), -('8129', '0', '0', '0', 'Priest - Mana Burn'), -('8092', '0.4296', '0', '0', 'Priest - Mind Blast'), -('15407', '0.257', '0', '0', 'Priest - Mind Flay'), -('49821', '0.14286', '0', '0', 'Priest - Mind Sear Trigger'), -('34433', '0.65', '0', '0', 'Priest - Shadowfiend'), -('32379', '0.4296', '0', '0', 'Priest - Shadow Word: Death'), -('589', '0', '0.1829', '0', 'Priest - Shadow Word: Pain'), -('585', '0.714', '0', '0', 'Priest - Smite'), -('34914', '0', '0.4', '0', 'Priest - Vampiric Touch'), +(32546, 0.8068, 0, 0, 'Priest - Binding Heal'), +(27813, 0, 0, 0, 'Priest - Blessed Recovery'), +(34861, 0.402, 0, 0, 'Priest - Circle of Healing'), +(19236, 0.8068, 0, 0, 'Priest - Desperate Prayer'), +(2944, 0, 0.1849, 0, 'Priest - Devouring Plague'), +(14914, 0.5711, 0.024, 0, 'Priest - Holy Fire'), +(15237, 0.1606, 0, 0, 'Priest - Holy Nova Damage'), +(2061, 0.8068, 0, 0, 'Priest - Flash Heal'), +(2060, 1.6135, 0, 0, 'Priest - Greater Heal'), +(23455, 0.3035, 0, 0, 'Priest - Holy Nova Heal'), +(8129, 0, 0, 0, 'Priest - Mana Burn'), +(58381, 0.257143,0, 0, 'Priest - Mind Flay Triggered'), +(49821, 0.14286,0, 0, 'Priest - Mind Sear Trigger'), +(17, 0.8068, 0, 0, 'Priest - Power Word: Shield'), +(33110, 0.8068, 0, 0, 'Priest - Prayer of Mending Heal Proc'), +(33619, 0, 0, 0, 'Priest - Reflective Shield'), +(139, 0, 0.376, 0, 'Priest - Renew'), +(32379, 0.4296, 0, 0, 'Priest - Shadow Word: Death'), +(589, 0, 0.1829, 0, 'Priest - Shadow Word: Pain'), +(34433, 0.65, 0, 0, 'Priest - Shadowfiend'), +(585, 0.714, 0, 0, 'Priest - Smite'), +(34914, 0, 0.4, 0, 'Priest - Vampiric Touch'), /* Shaman */ -('974', '0.4762', '0', '0', 'Shaman - Earth Shield'), -('1064', '1.34', '0', '0', 'Shaman - Chain Heal'), -('331', '1.6106', '0', '0', 'Shaman - Healing Wave'), -('52042', '0.045', '0', '0', 'Shaman - Healing Stream Totem Triggered Heal'), -('8004', '0.8082', '0', '0', 'Shaman - Lesser Healing Wave'), -('61295', '0.4', '0.18', '0', 'Shaman - Riptide'), -('421', '0.57', '0', '0', 'Shaman - Chain Lightning'), -('8042', '0.3858', '0', '0', 'Shaman - Earth Shock'), -('8443', '0.2142', '0', '0', 'Shaman - Fire Nova Totem Casted by Totem'), -('8050', '0.2142', '0.1', '0', 'Shaman - Flame Shock'), -('8026', '0.1', '0', '0', 'Shaman - Flametongue Weapon Proc'), -('8056', '0.3858', '0', '0', 'Shaman - Frost Shock'), -('8034', '0.1', '0', '0', 'Shaman - Frostbrand Attack Rank 1'), -('51505', '0.5714', '0', '0', 'Shaman - Lava Burst'), -('403', '0.7143', '0', '0', 'Shaman - Lightning Bolt'), -('26364', '0.33', '0', '0', 'Shaman - Lightning Shield Proc'), -('8188', '0.1', '0', '0', 'Shaman - Magma Totam Passive'), -('3606', '0.1667', '0', '0', 'Shaman - Searing Totem Attack'), +(974, 0.4762, 0, 0, 'Shaman - Earth Shield'), +(379, 0, 0, 0, 'Shaman - Earth Shield Triggered'), +(1064, 1.34, 0, 0, 'Shaman - Chain Heal'), +(421, 0.57, 0, 0, 'Shaman - Chain Lightning'), +(8042, 0.3858, 0, 0, 'Shaman - Earth Shock'), +(8443, 0.2142, 0, 0, 'Shaman - Fire Nova Totem Casted by Totem'), +(8050, 0.2142, 0.1, 0, 'Shaman - Flame Shock'), +(8026, 0.1, 0, 0, 'Shaman - Flametongue Weapon Proc'), +(8056, 0.3858, 0, 0, 'Shaman - Frost Shock'), +(8034, 0.1, 0, 0, 'Shaman - Frostbrand Attack Rank 1'), +(52042, 0.045, 0, 0, 'Shaman - Healing Stream Totem Triggered Heal'), +(331, 1.6106, 0, 0, 'Shaman - Healing Wave'), +(51505, 0.5714, 0, 0, 'Shaman - Lava Burst'), +(8004, 0.8082, 0, 0, 'Shaman - Lesser Healing Wave'), +(403, 0.7143, 0, 0, 'Shaman - Lightning Bolt'), +(26364, 0.33, 0, 0, 'Shaman - Lightning Shield Proc'), +(8188, 0.1, 0, 0, 'Shaman - Magma Totam Passive'), +(61295, 0.4, 0.18, 0, 'Shaman - Riptide'), +(3606, 0.1667, 0, 0, 'Shaman - Searing Totem Attack'), /* Warlock */ -('980', '0', '0.1', '0', 'Warlock - Curse of Agony'), -('603', '0', '2', '0', 'Warlock - Curse of Doom'), -('172', '0', '0.3', '0', 'Warlock - Corruption'), -('348', '0.2', '0.2', '0', 'Warlock - Immolate'), -('27243', '0.22', '0.25', '0', 'Warlock - Seed of Corruption'), -('30108', '0', '0.24', '0', 'Warlock - Unstable Affliction'), -('31117', '1.8', '0', '0', 'Warlock - Unstable Affliction Dispell'), -('17962', '0', '0', '0', 'Warlock - Conflagrate'), -('6789', '0.22', '0', '0', 'Warlock - Death Coil'), -('28176', '0', '0', '0', 'Warlock - Fel Armor'), -('48181', '0.4729', '0', '0', 'Warlock - Haunt'), -('29722', '0.7143', '0', '0', 'Warlock - Incinerate'), -('5676', '0.4286', '0', '0', 'Warlock - Searing Pain'), -('686', '0.8571', '0', '0', 'Warlock - Shadow Bolt'), -('17877', '0.4286', '0', '0', 'Warlock - Shadowburn'), -('30283', '0.195', '0', '0', 'Warlock - Shadowfury'), -('6353', '1.15', '0', '0', 'Warlock - Soul Fire'), -('689', '0', '0.1428', '0', 'Warlock - Drain Life'), -('5138', '0', '0', '0', 'Warlock - Drain Mana'), -('1120', '0', '0.4286', '0', 'Warlock - Drain Soul'), -('755', '0', '0.4485', '0', 'Warlock - Health Funnel'), -('1949', '0', '0.0946', '0', 'Warlock - Hellfire'), -('5857', '0.1428', '0', '0', 'Warlock - Hellfire Effect on Enemy'), -('42223', '0.952', '0', '0', 'Warlock - Rain of Fire Triggered'), -('18220', '0.96', '0', '0', 'Warlock - Dark Pact'), -('6229', '0.3', '0', '0', 'Warlock - Shadow Ward'), -('63106', '0', '0', '0', 'Warlock - Siphon Life Triggered'), +(17962, 0, 0, 0, 'Warlock - Conflagrate'), +(172, 0, 0.3, 0, 'Warlock - Corruption'), +(980, 0, 0.1, 0, 'Warlock - Curse of Agony'), +(603, 0, 2, 0, 'Warlock - Curse of Doom'), +(18220, 0.96, 0, 0, 'Warlock - Dark Pact'), +(5138, 0, 0, 0, 'Warlock - Drain Mana'), +(1120, 0, 0.4286, 0, 'Warlock - Drain Soul'), +(28176, 0, 0, 0, 'Warlock - Fel Armor'), +(18790, 0, 0, 0, 'Warlock - Fel Stamina'), +(48181, 0.4729, 0, 0, 'Warlock - Haunt'), +(755 , 0, 0.4485, 0, 'Warlock - Health Funnel'), +(1949, 0, 0.0946, 0, 'Warlock - Hellfire'), +(5857, 0.1428, 0, 0, 'Warlock - Hellfire Effect on Enemy'), +(348, 0.2, 0.2, 0, 'Warlock - Immolate'), +(42223, 0.285714,0, 0, 'Warlock - Rain of Fire Triggered'), +(27243, 0.2129, 0.25, 0, 'Warlock - Seed of Corruption'), +(6229, 0.3, 0, 0, 'Warlock - Shadow Ward'), +(47960, 0, 0.06666, 0, 'Warlock - Shadowflame DoT'), +(47897, 0.1064, 0, 0, 'Warlock - Shadowflame Direct'), +(63106, 0, 0, 0, 'Warlock - Siphon Life Triggered'), +(6353, 1.15, 0, 0, 'Warlock - Soul Fire'), +(30294, 0, 0, 0, 'Warlock - Soul Leech'), +(31117, 1.8, 0, 0, 'Warlock - Unstable Affliction Dispell'), /* Item */ -(40293, 0, 0, 0, 'Item - Siphon Essence'); +(40293, 0, 0, 0, 'Item - Siphon Essence'); /*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */; UNLOCK TABLES; @@ -14255,6 +14262,10 @@ INSERT INTO spell_chain VALUES /*Body and Soul*/ (64127,0,64127,1,0), (64129,64127,64127,2,0), +/*Blessed Recovery Proc*/ +(27813,0,27813,1,0), +(27817,27813,27813,2,0), +(27818,27817,27813,3,0), /*Circle of Healing*/ (34861,0,34861,1,0), (34863,34861,34861,2,0), @@ -16255,6 +16266,12 @@ INSERT INTO spell_chain VALUES (53225,53223,50516,3,0), (53226,53225,50516,4,0), (61384,53226,50516,5,0), +/*Typhoon Triggered*/ +(61391,0,61391,1,0), +(61390,61391,61391,2,0), +(61388,61390,61391,3,0), +(61387,61388,61391,4,0), +(53227,61387,61391,5,0), /*Wrath*/ (5176,0,5176,1,0), (5177,5176,5176,2,0), @@ -16821,9 +16838,9 @@ INSERT INTO spell_chain VALUES (34769,0,34769,1,0), (34767,34769,34769,2,33391), /*------------------ ---(780)Pet-ExoticChimaera +--(780)Pet-Exotic Chimaera ------------------*/ -/*FroststormBreath*/ +/*Froststorm Breath*/ (54644,0,54644,1,0), (55488,54644,54644,2,0), (55489,55488,54644,3,0), @@ -16831,9 +16848,9 @@ INSERT INTO spell_chain VALUES (55491,55490,54644,5,0), (55492,55491,54644,6,0), /*------------------ ---(781)Pet-ExoticDevlisaur +--(781)Pet-Exotic Devlisaur ------------------*/ -/*MonstrousBite*/ +/*Monstrous Bite*/ (54680,0,54680,1,0), (55495,54680,54680,2,0), (55496,55495,54680,3,0), @@ -16841,7 +16858,7 @@ INSERT INTO spell_chain VALUES (55498,55497,54680,5,0), (55499,55498,54680,6,0), /*------------------ ---(784)Pet-ExoticWorm +--(784)Pet-Exotic Worm ------------------*/ /*AcidSpit*/ (55749,0,55749,1,0), @@ -16861,9 +16878,9 @@ INSERT INTO spell_chain VALUES (56630,56629,56626,5,0), (56631,56630,56626,6,0), /*------------------ ---(787)Pet-ExoticCoreHound +--(787)Pet-Exotic Core Hound ------------------*/ -/*LavaBreath*/ +/*Lava Breath*/ (58604,0,58604,1,0), (58607,58604,58604,2,0), (58608,58607,58604,3,0), @@ -16871,16 +16888,27 @@ INSERT INTO spell_chain VALUES (58610,58609,58604,5,0), (58611,58610,58604,6,0), /*------------------ ---(788)Pet-ExoticSpiritBeast +--(788)Pet-Exotic Spirit Beast ------------------*/ -/*SpiritStrike*/ +/*Spirit Strike*/ (61193,0,61193,1,0), (61194,61193,61193,2,0), (61195,61194,61193,3,0), (61196,61195,61193,4,0), (61197,61196,61193,5,0), (61198,61197,61193,6,0), - +/*------------------ +--(-) Not listed in skill abilities +------------------*/ +/*Hurricane*/ +(42231, 0,42231,1,0), +(42232,42231,42231,2,0), +(42233,42232,42231,3,0), +(42230,42233,42231,4,0), +(48466,42230,42231,5,0), +/*Shadowflame Triggered DoT*/ +(47960,0,47960,1,0), +(61291,47960,47960,2,0), /*Tranquility*/ (44203, 0,44203,1,0), (44205,44203,44203,2,0), @@ -16888,13 +16916,7 @@ INSERT INTO spell_chain VALUES (44207,44206,44203,4,0), (44208,44207,44203,5,0), (48444,44208,44203,6,0), -(48445,48444,44203,7,0), -/*Hurricane*/ -(42231, 0,42231,1,0), -(42232,42231,42231,2,0), -(42233,42232,42231,3,0), -(42230,42233,42231,4,0), -(48466,42230,42231,5,0); +(48445,48444,44203,7,0); /*!40000 ALTER TABLE `spell_chain` ENABLE KEYS */; UNLOCK TABLES; @@ -17485,7 +17507,6 @@ INSERT INTO `spell_proc_event` VALUES (31570, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (31785, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), (31794, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), -(31801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,20.000000, 0.000000, 0), (31833, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (31835, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (31836, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -17828,6 +17849,9 @@ INSERT INTO `spell_proc_event` VALUES (53224, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (53228, 0x00000000, 9, 0x00000020, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (53232, 0x00000000, 9, 0x00000020, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53237, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53238, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), diff --git a/sql/mangos_spell_check.sql b/sql/mangos_spell_check.sql index e284285f0..7b1bc2c7f 100644 --- a/sql/mangos_spell_check.sql +++ b/sql/mangos_spell_check.sql @@ -406,4 +406,8 @@ INSERT INTO spell_check (spellid,SpellFamilyName,SpellFamilyMaskA,SpellFamilyMas ( 0, 7,0x0010000000000000,0x00000000, -1, -1, -1, 2, -1,-1,'Swipe', 'Spell::EffectSchoolDMG'), ( 0, 4,0x0000000000000080,0x00000000, -1, -1, -1, 2, -1,-1,'Thunder Clap', 'Spell::EffectSchoolDMG'), ( 0, 4,0x0000010000000000,0x00000000, -1, -1, -1, 2, -1,-1,'Victory Rush', 'Spell::EffectSchoolDMG'), -( 0, 8,0x0000000010000000,0x00000000, -1, -1, -1, 2, -1,-1,'Wound Poison', 'Spell::EffectSchoolDMG'); +( 0, 8,0x0000000010000000,0x00000000, -1, -1, -1, 2, -1,-1,'Wound Poison', 'Spell::EffectSchoolDMG'), + +/* some random spells from not proccessed files sorted by spell ids */ +/*id fm familyMaskA fmMaskB icon vis cat eff aur ef name code */ +(53563,-1, -1, -1, -1, -1, -1, -1, 4,-1,'Beacon of Light', 'Aura::HandleAuraDummy'); /* will outdated in 3.2.x */ diff --git a/sql/updates/0.13/7980_01_mangos_item_required_target.sql b/sql/updates/0.13/7980_01_mangos_item_required_target.sql index 816702de5..3a9ace804 100644 --- a/sql/updates/0.13/7980_01_mangos_item_required_target.sql +++ b/sql/updates/0.13/7980_01_mangos_item_required_target.sql @@ -6,4 +6,4 @@ CREATE TABLE `item_required_target` ( `type` tinyint(3) unsigned NOT NULL default '0', `targetEntry` mediumint(8) unsigned NOT NULL default '0', UNIQUE KEY `entry_type_target` (`entry`,`type`,`targetEntry`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED; diff --git a/sql/updates/8030_01_characters_character_spell.sql b/sql/updates/8030_01_characters_character_spell.sql index 9ff2ede71..e9b210a59 100644 --- a/sql/updates/8030_01_characters_character_spell.sql +++ b/sql/updates/8030_01_characters_character_spell.sql @@ -4,4 +4,4 @@ UPDATE IGNORE character_spell SET spell = 64901 WHERE spell = 64904; -DELETE FROM character_spell WHERE spell = 64904; \ No newline at end of file +DELETE FROM character_spell WHERE spell = 64904; diff --git a/sql/updates/8030_03_mangos_npc_trainer.sql b/sql/updates/8030_03_mangos_npc_trainer.sql index bf480c28f..85d70a1c0 100644 --- a/sql/updates/8030_03_mangos_npc_trainer.sql +++ b/sql/updates/8030_03_mangos_npc_trainer.sql @@ -1,3 +1,3 @@ ALTER TABLE db_version CHANGE COLUMN required_8021_01_mangos_spell_proc_event required_8030_03_mangos_npc_trainer bit; -DELETE FROM npc_trainer WHERE spell = 64904; \ No newline at end of file +DELETE FROM npc_trainer WHERE spell = 64904; diff --git a/sql/updates/8050_01_mangos_spell_proc_event.sql b/sql/updates/8050_01_mangos_spell_proc_event.sql index b36a9670e..f43b314b0 100644 --- a/sql/updates/8050_01_mangos_spell_proc_event.sql +++ b/sql/updates/8050_01_mangos_spell_proc_event.sql @@ -1,4 +1,4 @@ ALTER TABLE db_version CHANGE COLUMN required_8030_03_mangos_npc_trainer required_8050_01_mangos_spell_proc_event bit; DELETE FROM spell_proc_event WHERE entry = 63108; -INSERT INTO spell_proc_event VALUES (63108, 0x00, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file +INSERT INTO spell_proc_event VALUES (63108, 0x00, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); diff --git a/sql/updates/8050_02_mangos_spell_bonus_data.sql b/sql/updates/8050_02_mangos_spell_bonus_data.sql index b3f1fdf87..2af1261d7 100644 --- a/sql/updates/8050_02_mangos_spell_bonus_data.sql +++ b/sql/updates/8050_02_mangos_spell_bonus_data.sql @@ -1,4 +1,4 @@ ALTER TABLE db_version CHANGE COLUMN required_8050_01_mangos_spell_proc_event required_8050_02_mangos_spell_bonus_data bit; DELETE FROM spell_bonus_data WHERE entry = 63106; -INSERT INTO spell_bonus_data VALUES (63106, 0, 0, 0, 'Warlock - Siphon Life Triggered'); \ No newline at end of file +INSERT INTO spell_bonus_data VALUES (63106, 0, 0, 0, 'Warlock - Siphon Life Triggered'); diff --git a/sql/updates/8065_01_mangos_spell_proc_event.sql b/sql/updates/8065_01_mangos_spell_proc_event.sql index aa44e757d..a4dd7df4f 100644 --- a/sql/updates/8065_01_mangos_spell_proc_event.sql +++ b/sql/updates/8065_01_mangos_spell_proc_event.sql @@ -1,3 +1,3 @@ ALTER TABLE db_version CHANGE COLUMN required_8064_01_mangos_spell_chain required_8065_01_mangos_spell_proc_event bit; -DELETE FROM spell_proc_event WHERE entry IN (47535, 47536, 47537, 58435); \ No newline at end of file +DELETE FROM spell_proc_event WHERE entry IN (47535, 47536, 47537, 58435); diff --git a/sql/updates/8112_01_mangos_spell_proc_event.sql b/sql/updates/8112_01_mangos_spell_proc_event.sql index b882e66ee..017059c24 100644 --- a/sql/updates/8112_01_mangos_spell_proc_event.sql +++ b/sql/updates/8112_01_mangos_spell_proc_event.sql @@ -3,4 +3,4 @@ ALTER TABLE db_version CHANGE COLUMN required_8098_02_mangos_playercreateinfo_ac DELETE FROM spell_proc_event WHERE entry IN (63156, 63158); INSERT INTO spell_proc_event VALUES (63156, 0x00000000, 0, 0x00000001, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(63158, 0x00000000, 0, 0x00000001, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file +(63158, 0x00000000, 0, 0x00000001, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); diff --git a/sql/updates/8140_01_mangos_spell_proc_event.sql b/sql/updates/8140_01_mangos_spell_proc_event.sql index 84a6ef378..5d9730f0a 100644 --- a/sql/updates/8140_01_mangos_spell_proc_event.sql +++ b/sql/updates/8140_01_mangos_spell_proc_event.sql @@ -4,4 +4,4 @@ DELETE FROM spell_proc_event WHERE entry IN (31876, 31877, 31878); INSERT INTO spell_proc_event VALUES (31876, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000008, 0x00004110, 0x00000000, 0.000000, 0.000000, 0), (31877, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000008, 0x00004110, 0x00000000, 0.000000, 0.000000, 0), -(31878, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000008, 0x00004110, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file +(31878, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000008, 0x00004110, 0x00000000, 0.000000, 0.000000, 0); diff --git a/sql/updates/8213_01_mangos_spell_bonus_data.sql b/sql/updates/8213_01_mangos_spell_bonus_data.sql index 9ccc350ba..4a2c9647f 100644 --- a/sql/updates/8213_01_mangos_spell_bonus_data.sql +++ b/sql/updates/8213_01_mangos_spell_bonus_data.sql @@ -1,4 +1,4 @@ ALTER TABLE db_version CHANGE COLUMN required_8212_01_mangos_spell_proc_event required_8213_01_mangos_spell_bonus_data bit; DELETE FROM `spell_bonus_data` where entry='17962'; -INSERT INTO `spell_bonus_data` (`entry`) VALUES ('17962'); \ No newline at end of file +INSERT INTO `spell_bonus_data` (`entry`) VALUES ('17962'); diff --git a/sql/updates/8237_01_mangos_creature_template.sql b/sql/updates/8237_01_mangos_creature_template.sql index 89b433cc2..df425ea41 100644 --- a/sql/updates/8237_01_mangos_creature_template.sql +++ b/sql/updates/8237_01_mangos_creature_template.sql @@ -1,4 +1,4 @@ ALTER TABLE db_version CHANGE COLUMN required_8227_01_mangos_spell_proc_event required_8237_01_mangos_creature_template bit; UPDATE creature_template - SET mindmg = ROUND(mindmg + attackpower), maxdmg=ROUND(maxdmg+attackpower); \ No newline at end of file + SET mindmg = ROUND(mindmg + attackpower), maxdmg=ROUND(maxdmg+attackpower); diff --git a/sql/updates/8250_01_mangos_spell_threat.sql b/sql/updates/8250_01_mangos_spell_threat.sql index 6bc81761c..b9aee8129 100644 --- a/sql/updates/8250_01_mangos_spell_threat.sql +++ b/sql/updates/8250_01_mangos_spell_threat.sql @@ -1,3 +1,3 @@ ALTER TABLE db_version CHANGE COLUMN required_8249_02_mangos_spell_chain required_8250_01_mangos_spell_threat bit; -DELETE FROM `spell_threat` WHERE `entry` IN (778,9749,9907,14274,15629,15630,15631,15632,17390,17391,17392,26993,27011); \ No newline at end of file +DELETE FROM `spell_threat` WHERE `entry` IN (778,9749,9907,14274,15629,15630,15631,15632,17390,17391,17392,26993,27011); diff --git a/sql/updates/8402_01_characters_guild_eventlog.sql b/sql/updates/8402_01_characters_guild_eventlog.sql index 32f5b09a9..107639d39 100644 --- a/sql/updates/8402_01_characters_guild_eventlog.sql +++ b/sql/updates/8402_01_characters_guild_eventlog.sql @@ -17,4 +17,4 @@ CREATE TABLE `guild_eventlog` ( -- The reason i decided for such dramatic change is that old guild_eventlog table didn't have Primary key and -- used LogGuids from 0 to infinity --- New system uses LogGuids from 0 to number defined in config. \ No newline at end of file +-- New system uses LogGuids from 0 to number defined in config. diff --git a/sql/updates/8402_02_characters_guild_bank_eventlog.sql b/sql/updates/8402_02_characters_guild_bank_eventlog.sql index e2c271373..0cee36c4c 100644 --- a/sql/updates/8402_02_characters_guild_bank_eventlog.sql +++ b/sql/updates/8402_02_characters_guild_bank_eventlog.sql @@ -20,4 +20,4 @@ CREATE TABLE `guild_bank_eventlog` ( -- The reason i decided for such dramatic change is that old guild_bank_eventlog table used `TabId` = 0 for Money events and -- used `LogGuid` from 0 to infinity --- New system uses `LogGuid` from 0 to number defined in config. \ No newline at end of file +-- New system uses `LogGuid` from 0 to number defined in config. diff --git a/sql/updates/8409_01_characters_guild.sql b/sql/updates/8409_01_characters_guild.sql index f08f861bb..7d879a811 100644 --- a/sql/updates/8409_01_characters_guild.sql +++ b/sql/updates/8409_01_characters_guild.sql @@ -14,4 +14,4 @@ ALTER TABLE guild ADD COLUMN createdate bigint(20) NOT NULL default '0' AFTER mo -- copy data to new column UPDATE guild set createdate = created_temp; -- remove old column -ALTER TABLE guild DROP COLUMN created_temp; \ No newline at end of file +ALTER TABLE guild DROP COLUMN created_temp; diff --git a/sql/updates/8433_01_characters_character_account_data.sql b/sql/updates/8433_01_characters_character_account_data.sql index 88402b294..5f0aacd0d 100644 --- a/sql/updates/8433_01_characters_character_account_data.sql +++ b/sql/updates/8433_01_characters_character_account_data.sql @@ -13,4 +13,4 @@ INSERT INTO character_account_data SELECT c.guid as guid, a.type as type, a.time as time, a.data as data FROM characters c LEFT JOIN account_data a ON c.account = a.account WHERE a.type IN (1, 3, 5, 6, 7); -DELETE FROM account_data WHERE type IN (1, 3, 5, 6, 7); \ No newline at end of file +DELETE FROM account_data WHERE type IN (1, 3, 5, 6, 7); diff --git a/sql/updates/8487_01_mangos_spell_bonus_data.sql b/sql/updates/8487_01_mangos_spell_bonus_data.sql new file mode 100644 index 000000000..880f4773b --- /dev/null +++ b/sql/updates/8487_01_mangos_spell_bonus_data.sql @@ -0,0 +1,20 @@ +ALTER TABLE db_version CHANGE COLUMN required_8482_01_mangos_spell_elixir required_8487_01_mangos_spell_bonus_data bit; + +DELETE FROM `spell_bonus_data` where entry in (20424, 20467, 42463, 53739, 31803, 53742, 31804, 53733, 31893, 32221, 32220, 31898, 53719, 53718, 53725, 53726); +INSERT INTO `spell_bonus_data` VALUES +(20424, 0, 0, 0, "Paladin - Seal of Command Proc"), +(20467, 0.25, 0, 0.16, "Paladin - Judgement of Command"), +(42463, 0, 0.00156, 0.003, "Paladin - Seal of Vengeance (full stack proc)"), +(53739, 0, 0.00156, 0.003, "Paladin - Seal of Corruption (full stack proc)"), +(31803, 0, 0.0156, 0.03, "Paladin - Holy Vengeance"), +(53742, 0, 0.0156, 0.03, "Paladin - Blood Corruption"), +(31804, 0, 0, 0, "Paladin - Judgement of Vengeance"), +(53733, 0, 0, 0, "Paladin - Judgement of Corruption"), +(31893, 0, 0, 0, "Paladin - Seal of Blood Proc Enemy"), +(32221, 0, 0, 0, "Paladin - Seal of Blood Proc Self"), +(31898, 0.18, 0, 0.11, "Paladin - Judgement of Blood Enemy"), +(32220, 0.0594, 0, 0.0363, "Paladin - Judgement of Blood Self"), +(53719, 0, 0, 0, "Paladin - Seal of the Martyr Proc Enemy"), +(53718, 0, 0, 0, "Paladin - Seal of the Martyr Proc Self"), +(53726, 0.18, 0, 0.11, "Paladin - Judgement of the Martyr Enemy"), +(53725, 0.0594, 0, 0.0363, "Paladin - Judgement of the Martyr Self"); diff --git a/sql/updates/8487_02_mangos_spell_proc_event.sql b/sql/updates/8487_02_mangos_spell_proc_event.sql new file mode 100644 index 000000000..bbe4f9108 --- /dev/null +++ b/sql/updates/8487_02_mangos_spell_proc_event.sql @@ -0,0 +1,3 @@ +ALTER TABLE db_version CHANGE COLUMN required_8487_01_mangos_spell_bonus_data required_8487_02_mangos_spell_proc_event bit; + +DELETE FROM `spell_proc_event` WHERE `entry` IN (31801, 53736); diff --git a/sql/updates/8488_01_mangos_spell_chain.sql b/sql/updates/8488_01_mangos_spell_chain.sql new file mode 100644 index 000000000..1827a8be0 --- /dev/null +++ b/sql/updates/8488_01_mangos_spell_chain.sql @@ -0,0 +1,18 @@ +ALTER TABLE db_version CHANGE COLUMN required_8487_02_mangos_spell_proc_event required_8488_01_mangos_spell_chain bit; + +DELETE FROM `spell_chain` WHERE `spell_id` IN (27813, 27817, 27818, 61391, 61390, 61388, 61387, 53227, 47960, 61291); + +INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES +/*Blessed Recovery Proc*/ +('27813', '0', '27813', '1', '0'), +('27817', '27813', '27813', '2', '0'), +('27818', '27817', '27813', '3', '0'), +/*Typhoon Triggered*/ +('61391', '0', '61391', '1', '0'), +('61390', '61391', '61391', '2', '0'), +('61388', '61390', '61391', '3', '0'), +('61387', '61388', '61391', '4', '0'), +('53227', '61387', '61391', '5', '0'), +/*Shadowflame Triggered DoT*/ +('47960','0','47960','1','0'), +('61291','47960','47960','2','0'); diff --git a/sql/updates/8488_02_mangos_spell_bonus_data.sql b/sql/updates/8488_02_mangos_spell_bonus_data.sql new file mode 100644 index 000000000..3998b7f6f --- /dev/null +++ b/sql/updates/8488_02_mangos_spell_bonus_data.sql @@ -0,0 +1,30 @@ +ALTER TABLE db_version CHANGE COLUMN required_8488_01_mangos_spell_chain required_8488_02_mangos_spell_bonus_data bit; + +DELETE FROM `spell_bonus_data` WHERE `entry` IN +-- Spells that would be better off using default calculations (and should be removed from base MaNGOS tables) +(689, 30108, 6789, 29722, 5676, 686, 17877, 30283, 11113, 31661, 120, 25914, 596, 8092, 15407, +-- Spells that are getting entries below +18790, 42223, 27243, 30294, 47960, 47897, 44425, 42208, 19750, 635, 20167, 20267, 20187, 53600, 25997, 2944, 58381, 27813, 33619, 5570, 61391); + +INSERT INTO `spell_bonus_data` (`entry`, `direct_bonus`, `dot_bonus`, `ap_bonus`, `comments`) VALUES +('18790', '0', '0', '0','Warlock - Fel Stamina'), +('42223', '0.285714', '0', '0', 'Warlock - Rain of Fire Triggered'), -- should be same as default calc (2/7), but this is a triggered spell +('27243', '0.2129', '0.25', '0', 'Warlock - Seed of Corruption'), +('30294', '0', '0', '0', 'Warlock - Soul Leech'), +('47960', '0', '0.06666', '0', 'Warlock - Shadowflame DoT'), +('47897', '0.1064', '0', '0', 'Warlock - Shadowflame Direct'), +('44425', '0.714286', '0', '0', 'Mage - Arcane Barrage'), -- treat as 2.5 second cast time (as of 3.0.9) +('42208', '0.1437', '0', '0', 'Mage - Blizzard Triggered'), +('19750', '1', '0', '0', 'Paladin - Flash of Light'), +('635', '1.66', '0', '0', 'Paladin - Holy Light'), -- These two Paladin heals are their default calculations multiplied by 7/3, not sure why that is +('20167', '0.15', '0', '0.15', 'Paladin - Seal of Light Proc'), +('20267', '0.1', '0', '0.1', 'Paladin - Judgement of Light Proc'), +('20187', '0.32', '0', '0', 'Paladin - Judgement of Righteousness'), +('53600', '0', '0', '0', 'Paladin - Shield of Righteousness'), +('25997', '0', '0', '0', 'Paladin - Eye for an Eye'), +('2944', '0', '0.1849', '0', 'Priest - Devouring Plague'), +('58381', '0.257143', '0', '0', 'Priest - Mind Flay Triggered'), -- Treated as 2.7 sec channel instead of 3? +('27813', '0', '0', '0', 'Priest - Blessed Recovery'), +('33619', '0', '0', '0', 'Priest - Reflective Shield'), +('5570', '0', '0.2', '0', 'Druid - Insect Swarm'), +('61391', '0.193', '0', '0', 'Druid - Typhoon'); diff --git a/sql/updates/8498_01_mangos_spell_proc_event.sql b/sql/updates/8498_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..6f0aef6b0 --- /dev/null +++ b/sql/updates/8498_01_mangos_spell_proc_event.sql @@ -0,0 +1,8 @@ +ALTER TABLE db_version CHANGE COLUMN required_8488_02_mangos_spell_bonus_data required_8498_01_mangos_spell_proc_event bit; + +DELETE FROM `spell_proc_event` WHERE `entry` IN (53234, 53237, 53238); + +INSERT INTO spell_proc_event VALUES +(53234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53237, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53238, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 60ace4e61..f29308a99 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -101,6 +101,11 @@ pkgdata_DATA = \ 8462_01_mangos_creature_ai_texts.sql \ 8469_01_characters_character_spell.sql \ 8482_01_mangos_spell_elixir.sql \ + 8487_01_mangos_spell_bonus_data.sql \ + 8487_02_mangos_spell_proc_event.sql \ + 8488_01_mangos_spell_chain.sql \ + 8488_02_mangos_spell_bonus_data.sql \ + 8498_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -182,4 +187,9 @@ EXTRA_DIST = \ 8462_01_mangos_creature_ai_texts.sql \ 8469_01_characters_character_spell.sql \ 8482_01_mangos_spell_elixir.sql \ + 8487_01_mangos_spell_bonus_data.sql \ + 8487_02_mangos_spell_proc_event.sql \ + 8488_01_mangos_spell_chain.sql \ + 8488_02_mangos_spell_bonus_data.sql \ + 8498_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index 38fbd1704..92c42cefe 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -20,7 +20,6 @@ #define MANGOS_GRIDNOTIFIERS_H #include "ObjectGridLoader.h" -#include "ByteBuffer.h" #include "UpdateData.h" #include diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 0f58b1d10..5ad057fe2 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -65,7 +65,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() GetPlayer()->SetSemaphoreTeleportFar(false); // relocate the player to the teleport destination - GetPlayer()->SetMap(MapManager::Instance().CreateMap(loc.mapid, GetPlayer())); GetPlayer()->Relocate(loc.coord_x, loc.coord_y, loc.coord_z, loc.orientation); + GetPlayer()->SetMap(MapManager::Instance().CreateMap(loc.mapid, GetPlayer())); GetPlayer()->Relocate(loc.coord_x, loc.coord_y, loc.coord_z, loc.orientation); GetPlayer()->SendInitialPacketsBeforeAddToMap(); diff --git a/src/game/Object.h b/src/game/Object.h index 265d184a7..1bda374e3 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -85,7 +85,6 @@ enum PhaseMasks class WorldPacket; class UpdateData; -class ByteBuffer; class WorldSession; class Creature; class Player; diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index 79b9d9c02..ee8943781 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -451,12 +451,23 @@ ObjectAccessor::UpdateObjectVisibility(WorldObject *obj) void ObjectAccessor::UpdateVisibilityForPlayer( Player* player ) { - CellPair p = MaNGOS::ComputeCellPair(player->GetPositionX(), player->GetPositionY()); - Cell cell(p); + WorldObject const* viewPoint = player->GetViewPoint(); Map* m = player->GetMap(); + CellPair p(MaNGOS::ComputeCellPair(player->GetPositionX(), player->GetPositionY())); + Cell cell(p); + m->UpdatePlayerVisibility(player, cell, p); - m->UpdateObjectsVisibilityFor(player, cell, p); + + if (player!=viewPoint) + { + CellPair pView(MaNGOS::ComputeCellPair(viewPoint->GetPositionX(), viewPoint->GetPositionY())); + Cell cellView(pView); + + m->UpdateObjectsVisibilityFor(player, cellView, pView); + } + else + m->UpdateObjectsVisibilityFor(player, cell, p); } /// Define the static member of HashMapHolder diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index cf223ebc9..14154817a 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -25,7 +25,6 @@ #include "Utilities/UnorderedMap.h" #include "Policies/ThreadingModel.h" -#include "ByteBuffer.h" #include "UpdateData.h" #include "GridDefines.h" diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 10df0cc3a..64ce2afe5 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -3638,20 +3638,17 @@ void ObjectMgr::LoadQuests() qinfo->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell); qinfo->RewSpell = 0; // no spell reward will display for this quest } - - if(!SpellMgr::IsSpellValid(spellInfo)) + else if(!SpellMgr::IsSpellValid(spellInfo)) { sLog.outErrorDb("Quest %u has `RewSpell` = %u but spell %u is broken, quest will not have a spell reward.", qinfo->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell); qinfo->RewSpell = 0; // no spell reward will display for this quest } - - if(GetTalentSpellCost(qinfo->RewSpell)) + else if(GetTalentSpellCost(qinfo->RewSpell)) { sLog.outErrorDb("Quest %u has `RewSpell` = %u but spell %u is talent, quest will not have a spell reward.", qinfo->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell); qinfo->RewSpell = 0; // no spell reward will display for this quest - continue; } } @@ -3665,20 +3662,17 @@ void ObjectMgr::LoadQuests() qinfo->GetQuestId(),qinfo->RewSpellCast,qinfo->RewSpellCast); qinfo->RewSpellCast = 0; // no spell will be casted on player } - - if(!SpellMgr::IsSpellValid(spellInfo)) + else if(!SpellMgr::IsSpellValid(spellInfo)) { sLog.outErrorDb("Quest %u has `RewSpellCast` = %u but spell %u is broken, quest will not have a spell reward.", qinfo->GetQuestId(),qinfo->RewSpellCast,qinfo->RewSpellCast); qinfo->RewSpellCast = 0; // no spell will be casted on player } - - if(GetTalentSpellCost(qinfo->RewSpellCast)) + else if(GetTalentSpellCost(qinfo->RewSpellCast)) { sLog.outErrorDb("Quest %u has `RewSpell` = %u but spell %u is talent, quest will not have a spell reward.", qinfo->GetQuestId(),qinfo->RewSpellCast,qinfo->RewSpellCast); qinfo->RewSpellCast = 0; // no spell will be casted on player - continue; } } diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 0ea85281b..34e81012e 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1008,13 +1008,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo); caster->DealSpellDamage(&damageInfo, true); - - // Judgement of Blood - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000800000000)) && m_spellInfo->SpellIconID==153) - { - int32 damagePoint = damageInfo.damage * 33 / 100; - m_caster->CastCustomSpell(m_caster, 32220, &damagePoint, NULL, NULL, true); - } } // Passive spell hits/misses or active spells only misses (only triggers) else diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 74c42a310..6ac84de2a 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -489,6 +489,9 @@ Unit *caster, Item* castItem) : Aura(spellproto, eff, currentBasePoints, target, m_areaAuraType = AREA_AURA_RAID; if (target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem()) m_modifier.m_auraname = SPELL_AURA_NONE; + // Light's Beacon not applied to caster itself (TODO: more generic check for another simialr spell if any?) + else if (target == caster_ptr && m_spellProto->Id == 53651) + m_modifier.m_auraname = SPELL_AURA_NONE; break; case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: m_areaAuraType = AREA_AURA_FRIEND; @@ -782,7 +785,40 @@ void AreaAura::Update(uint32 diff) for(std::list::iterator tIter = targets.begin(); tIter != targets.end(); tIter++) { - if((*tIter)->HasAura(GetId(), m_effIndex)) + // flag for seelction is need apply aura to current iteration target + bool apply = true; + + // we need ignore present caster self applied are auras sometime + // in cases if this only auras applied for spell effect + Unit::spellEffectPair spair = Unit::spellEffectPair(GetId(), m_effIndex); + for(Unit::AuraMap::const_iterator i = (*tIter)->GetAuras().lower_bound(spair); i != (*tIter)->GetAuras().upper_bound(spair); ++i) + { + if (i->second->IsDeleted()) + continue; + + switch(m_areaAuraType) + { + case AREA_AURA_ENEMY: + // non caster self-casted auras (non stacked) + if(i->second->GetModifier()->m_auraname != SPELL_AURA_NONE) + apply = false; + break; + case AREA_AURA_RAID: + // non caster self-casted auras (stacked from diff. casters) + if(i->second->GetModifier()->m_auraname != SPELL_AURA_NONE || i->second->GetCasterGUID() == GetCasterGUID()) + apply = false; + break; + default: + // in generic case not allow stacking area auras + apply = false; + break; + } + + if(!apply) + break; + } + + if(!apply) continue; if(SpellEntry const *actualSpellInfo = spellmgr.SelectAuraRankForPlayerLevel(GetSpellProto(), (*tIter)->getLevel())) @@ -815,7 +851,7 @@ void AreaAura::Update(uint32 diff) caster->IsFriendlyTo(m_target) != needFriendly ) { - m_target->RemoveAura(GetId(), GetEffIndex()); + m_target->RemoveAurasByCasterSpell(GetId(), GetEffIndex(),GetCasterGUID()); } else if( m_areaAuraType == AREA_AURA_PARTY) // check if in same sub group { @@ -847,16 +883,16 @@ void AreaAura::Update(uint32 diff) { Player* checkTarget = m_target->GetCharmerOrOwnerPlayerOrPlayerItself(); if(!checkTarget) - m_target->RemoveAura(GetId(), GetEffIndex()); + m_target->RemoveAurasByCasterSpell(GetId(), GetEffIndex(), GetCasterGUID()); } else - m_target->RemoveAura(GetId(), GetEffIndex()); + m_target->RemoveAurasByCasterSpell(GetId(), GetEffIndex(), GetCasterGUID()); } } else if( m_areaAuraType == AREA_AURA_PET || m_areaAuraType == AREA_AURA_OWNER ) { if( m_target->GetGUID() != caster->GetCharmerOrOwnerGUID() ) - m_target->RemoveAura(GetId(), GetEffIndex()); + m_target->RemoveAurasByCasterSpell(GetId(), GetEffIndex(), GetCasterGUID()); } } } @@ -897,6 +933,32 @@ void Aura::ApplyModifier(bool apply, bool Real) SetInUse(false); } +bool Aura::IsNeedVisibleSlot(Unit const* caster) const +{ + bool totemAura = caster && caster->GetTypeId() == TYPEID_UNIT && ((Creature*)caster)->isTotem(); + + // passive auras (except totem auras) do not get placed in the slots + if (m_isPassive && !totemAura) + return false; + + // generic not caster case + if (m_target != caster) + return true; + + // special area auras case at caster + switch(m_spellProto->Effect[GetEffIndex()]) + { + case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: + return false; + case SPELL_EFFECT_APPLY_AREA_AURA_RAID: + // not sure is totemAura need, just preserve old code results + return totemAura || m_modifier.m_auraname != SPELL_AURA_NONE; + default: break; + } + + return true; +} + void Aura::_AddAura() { if (!GetId()) @@ -954,10 +1016,7 @@ void Aura::_AddAura() } } - // passive auras (except totem auras) do not get placed in the slots - // area auras with SPELL_AURA_NONE are not shown on target - if((!m_isPassive || (caster && caster->GetTypeId() == TYPEID_UNIT && ((Creature*)caster)->isTotem())) && - (m_spellProto->Effect[GetEffIndex()] != SPELL_EFFECT_APPLY_AREA_AURA_ENEMY || m_target != caster)) + if (IsNeedVisibleSlot(caster)) { SetAuraSlot( slot ); if(slot < MAX_AURAS) // slot found send data to client @@ -2418,6 +2477,20 @@ void Aura::HandleAuraDummy(bool apply, bool Real) } break; } + case SPELLFAMILY_PALADIN: + { + // Beacon of Light + if (GetId() == 53563) + { + if(apply) + // original caster must be target (beacon) + m_target->CastSpell(m_target,53651,true,NULL,this,m_target->GetGUID()); + else + m_target->RemoveAurasByCasterSpell(53651,m_target->GetGUID()); + return; + } + break; + } case SPELLFAMILY_DRUID: { switch(GetId()) diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index c6965ca53..98fe1111d 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -383,6 +383,7 @@ class MANGOS_DLL_SPEC Aura uint32 m_in_use; // > 0 while in Aura::ApplyModifier call/Aura::Update/etc private: void CleanupTriggeredSpells(); + bool IsNeedVisibleSlot(Unit const* caster) const; // helper for check req. visibility slot }; class MANGOS_DLL_SPEC AreaAura : public Aura diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index a310b3f0f..5a793ff0c 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -610,9 +610,17 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) } case SPELLFAMILY_PALADIN: { - // Judgement of Vengeance ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance on the target + // Judgement of Vengeance/Corruption ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance/Blood Corruption on the target if ((m_spellInfo->SpellFamilyFlags & UI64LIT(0x800000000)) && m_spellInfo->SpellIconID==2292) { + uint32 debuf_id; + switch(m_spellInfo->Id) + { + case 53733: debuf_id = 53742; break;// Judgement of Corruption -> Blood Corruption + case 31804: debuf_id = 31803; break;// Judgement of Vengeance -> Holy Vengeance + default: return; + } + float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK); int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) + m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget); @@ -621,11 +629,13 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) uint32 stacks = 0; Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) - if((*itr)->GetId() == 31803 && (*itr)->GetCasterGUID()==m_caster->GetGUID()) + { + if( ((*itr)->GetId() == debuf_id) && (*itr)->GetCasterGUID()==m_caster->GetGUID()) { stacks = (*itr)->GetStackAmount(); break; } + } // + 10% for each application of Holy Vengeance on the target if(stacks) damage += damage * stacks * 10 /100; @@ -1670,25 +1680,7 @@ void Spell::EffectDummy(uint32 i) if (!spell_proto) return; - if (!unitTarget->hasUnitState(UNIT_STAT_STUNNED) && m_caster->GetTypeId()==TYPEID_PLAYER) - { - // decreased damage (/2) for non-stunned target. - SpellModifier *mod = new SpellModifier; - mod->op = SPELLMOD_DAMAGE; - mod->value = -50; - mod->type = SPELLMOD_PCT; - mod->spellId = m_spellInfo->Id; - mod->mask = UI64LIT(0x0000020000000000); - mod->mask2= UI64LIT(0x0); - - ((Player*)m_caster)->AddSpellMod(mod, true); - m_caster->CastSpell(unitTarget, spell_proto, true, NULL); - // mod deleted - ((Player*)m_caster)->AddSpellMod(mod, false); - } - else - m_caster->CastSpell(unitTarget, spell_proto, true, NULL); - + m_caster->CastSpell(unitTarget, spell_proto, true, NULL); return; } } @@ -3508,6 +3500,11 @@ void Spell::EffectDispel(uint32 i) std::list < std::pair > success_list;// (spell_id,casterGuid) std::list < uint32 > fail_list; // spell_id int32 list_size = dispel_list.size(); + + // some spells have effect value = 0 and all from its by meaning expect 1 + if(!damage) + damage = 1; + // Dispell N = damage buffs (or while exist buffs for dispel) for (int32 count=0; count < damage && list_size > 0; ++count) { @@ -4645,13 +4642,33 @@ void Spell::EffectWeaponDmg(uint32 i) if(m_caster->GetTypeId()==TYPEID_PLAYER) ((Player*)m_caster)->AddComboPoints(unitTarget, 1); } - // Mangle (Cat): CP - if (m_spellInfo->SpellFamilyName==SPELLFAMILY_DRUID && (m_spellInfo->SpellFamilyFlags==UI64LIT(0x0000040000000000))) + else if (m_spellInfo->SpellFamilyName==SPELLFAMILY_DRUID && (m_spellInfo->SpellFamilyFlags==UI64LIT(0x0000040000000000))) { if(m_caster->GetTypeId()==TYPEID_PLAYER) ((Player*)m_caster)->AddComboPoints(unitTarget, 1); } + else if(m_spellInfo->SpellFamilyName==SPELLFAMILY_PALADIN) + { + // Judgement of Blood/of the Martyr backlash damage (33%) + if(m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL && m_spellInfo->SpellIconID==153) + { + int32 damagePoint = m_damage * 33 / 100; + if(m_spellInfo->Id == 31898) + m_caster->CastCustomSpell(m_caster, 32220, &damagePoint, NULL, NULL, true); + else + m_caster->CastCustomSpell(m_caster, 53725, &damagePoint, NULL, NULL, true); + } + // Seal of Blood/of the Martyr backlash damage (10%) + else if(m_spellInfo->SpellIconID==2293) + { + int32 damagePoint = m_damage * 10 / 100; + if(m_spellInfo->Id == 31893) + m_caster->CastCustomSpell(m_caster, 32221, &damagePoint, NULL, NULL, true); + else + m_caster->CastCustomSpell(m_caster, 53718, &damagePoint, NULL, NULL, true); + } + } // take ammo if(m_attackType == RANGED_ATTACK && m_caster->GetTypeId() == TYPEID_PLAYER) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 29272ee01..cd67d6de1 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1571,6 +1571,10 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons if ((spellInfo_1->SpellFamilyFlags2 & 0x00000020) && (spellInfo_2->SpellIconID == 291 || spellInfo_2->SpellIconID == 3028) || (spellInfo_2->SpellFamilyFlags2 & 0x00000020) && (spellInfo_1->SpellIconID == 291 || spellInfo_1->SpellIconID == 3028)) return false; + + // Beacon of Light and Light's Beacon + if ((spellInfo_1->SpellIconID == 3032) && (spellInfo_2->SpellIconID == 3032)) + return false; } // Combustion and Fire Protection Aura (multi-family check) diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 68560b750..86388e2af 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -427,7 +427,7 @@ enum ProcFlags PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward) - PROC_FLAG_SUCCESSFUL_MILEE_HIT = 0x00000004, // 02 Successful melee auto attack + PROC_FLAG_SUCCESSFUL_MELEE_HIT = 0x00000004, // 02 Successful melee auto attack PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee auto attack hit PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT = 0x00000010, // 04 Successful attack by Spell that use melee weapon @@ -461,7 +461,7 @@ enum ProcFlags PROC_FLAG_SUCCESSFUL_OFFHAND_HIT = 0x00800000 // 23 Successful off-hand melee attacks }; -#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_SUCCESSFUL_MILEE_HIT | \ +#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_SUCCESSFUL_MELEE_HIT | \ PROC_FLAG_TAKEN_MELEE_HIT | \ PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT | \ PROC_FLAG_TAKEN_MELEE_SPELL_HIT | \ diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 2725018f0..2288ffaa7 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1205,12 +1205,12 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da switch (attackType) { case BASE_ATTACK: - damageInfo->procAttacker = PROC_FLAG_SUCCESSFUL_MILEE_HIT; + damageInfo->procAttacker = PROC_FLAG_SUCCESSFUL_MELEE_HIT; damageInfo->procVictim = PROC_FLAG_TAKEN_MELEE_HIT; damageInfo->HitInfo = HITINFO_NORMALSWING2; break; case OFF_ATTACK: - damageInfo->procAttacker = PROC_FLAG_SUCCESSFUL_MILEE_HIT | PROC_FLAG_SUCCESSFUL_OFFHAND_HIT; + damageInfo->procAttacker = PROC_FLAG_SUCCESSFUL_MELEE_HIT | PROC_FLAG_SUCCESSFUL_OFFHAND_HIT; damageInfo->procVictim = PROC_FLAG_TAKEN_MELEE_HIT;//|PROC_FLAG_TAKEN_OFFHAND_HIT // not used damageInfo->HitInfo = HITINFO_LEFTSWING; break; @@ -3417,6 +3417,7 @@ bool Unit::AddAura(Aura *Aur) return false; } + // m_auraname can be modified to SPELL_AURA_NONE for area auras, this expected for this value AuraType aurName = Aur->GetModifier()->m_auraname; spellEffectPair spair = spellEffectPair(Aur->GetId(), Aur->GetEffIndex()); @@ -3445,10 +3446,15 @@ bool Unit::AddAura(Aura *Aur) } bool stop = false; - switch(aurName) + + // m_auraname can be modified to SPELL_AURA_NONE for area auras, use original + AuraType aurNameReal = AuraType(aurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]); + + switch(aurNameReal) { // DoT/HoT/etc - case SPELL_AURA_PERIODIC_DAMAGE: // allow stack + case SPELL_AURA_DUMMY: // allow stack + case SPELL_AURA_PERIODIC_DAMAGE: case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: case SPELL_AURA_PERIODIC_LEECH: case SPELL_AURA_PERIODIC_HEAL: @@ -3752,6 +3758,22 @@ void Unit::RemoveAurasByCasterSpell(uint32 spellId, uint64 casterGUID) } } +void Unit::RemoveAurasByCasterSpell(uint32 spellId, uint32 effindex, uint64 casterGUID) +{ + spellEffectPair spair = spellEffectPair(spellId, effindex); + for(AuraMap::iterator iter = m_Auras.lower_bound(spair); iter != m_Auras.upper_bound(spair);) + { + Aura *aur = iter->second; + if (aur->GetId() == spellId && aur->GetCasterGUID() == casterGUID) + { + RemoveAura(iter); + iter = m_Auras.lower_bound(spair); + } + else + ++iter; + } +} + void Unit::RemoveAurasDueToSpellByDispel(uint32 spellId, uint64 casterGUID, Unit *dispeler) { for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); ) @@ -5110,7 +5132,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } CastSpell(this, 28682, true, castItem, triggeredByAura); - return (procEx & PROC_EX_CRITICAL_HIT);// charge update only at crit hits, no hidden cooldowns + return (procEx & PROC_EX_CRITICAL_HIT); // charge update only at crit hits, no hidden cooldowns } } break; @@ -5737,6 +5759,43 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return false; triggered_spell_id = 31803; + + // Add 5-stack effect + int8 stacks = 0; + AuraList const& auras = target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); + for(AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) + { + if( ((*itr)->GetId() == 31803) && (*itr)->GetCasterGUID()==GetGUID()) + { + stacks = (*itr)->GetStackAmount(); + break; + } + } + if(stacks >= 5) + CastSpell(target,42463,true,NULL,triggeredByAura); + break; + } + // Seal of Corruption (damage calc on apply aura) + case 53736: + { + if(effIndex != 0) // effect 1,2 used by seal unleashing code + return false; + + triggered_spell_id = 53742; + + // Add 5-stack effect + int8 stacks = 0; + AuraList const& auras = target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); + for(AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) + { + if( ((*itr)->GetId() == 53742) && (*itr)->GetCasterGUID()==GetGUID()) + { + stacks = (*itr)->GetStackAmount(); + break; + } + } + if(stacks >= 5) + CastSpell(target,53739,true,NULL,triggeredByAura); break; } // Spiritual Attunement @@ -5756,33 +5815,54 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu // Seal of Blood do damage trigger case 31892: { - if (effIndex == 0) // 0 effect - is proc on enemy + // 0 effect - is proc on enemy + if (effIndex == 0 && (procFlag & PROC_FLAG_SUCCESSFUL_MELEE_HIT)) triggered_spell_id = 31893; - else if (effIndex == 1) // 1 effect - is proc on self - { - // add spell damage from prev effect (27%) - damage += CalculateDamage(BASE_ATTACK, false) * 27 / 100; - basepoints0 = triggerAmount * damage / 100; - target = this; - triggered_spell_id = 32221; - } else return true; break; } + // Light's Beacon (heal target area aura) + case 53651: + { + // not do bonus heal for explicit beacon focus healing + if (GetGUID() == triggeredByAura->GetCasterGUID()) + return false; + + // beacon + Unit* beacon = triggeredByAura->GetCaster(); + if (!beacon) + return false; + + // find caster main aura at beacon + Aura* dummy = NULL; + Unit::AuraList const& baa = beacon->GetAurasByType(SPELL_AURA_DUMMY); + for(Unit::AuraList::const_iterator i = baa.begin(); i != baa.end(); ++i) + { + if ((*i)->GetId() == 53563 && (*i)->GetCasterGUID() == pVictim->GetGUID()) + { + dummy = (*i); + break; + } + } + + // original heal must be form beacon caster + if (!dummy) + return false; + + triggered_spell_id = 53652; // Beacon of Light + basepoints0 = triggeredByAura->GetModifier()->m_amount*damage/100; + + // cast with original caster set but beacon to beacon for apply caster mods and avoid LoS check + beacon->CastCustomSpell(beacon,triggered_spell_id,&basepoints0,NULL,NULL,true,castItem,triggeredByAura,pVictim->GetGUID()); + return true; + } // Seal of the Martyr do damage trigger case 53720: { - if (effIndex == 0) // 0 effect - is proc on enemy + // 0 effect - is proc on enemy + if (effIndex == 0 && (procFlag & PROC_FLAG_SUCCESSFUL_MELEE_HIT)) triggered_spell_id = 53719; - else if (effIndex == 1) // 1 effect - is proc on self - { - // add spell damage from prev effect (27%) - damage += CalculateDamage(BASE_ATTACK, false) * 27 / 100; - basepoints0 = triggerAmount * damage / 100; - target = this; - triggered_spell_id = 53718; - } else return true; break; @@ -6590,6 +6670,13 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB break; } case SPELLFAMILY_HUNTER: + // Piercing Shots + if (auraSpellInfo->SpellIconID == 3247 && auraSpellInfo->SpellVisual[0] == 0) + { + basepoints[0] = damage * triggerAmount / 100 / 8; + trigger_spell_id = 63468; + target = pVictim; + } break; case SPELLFAMILY_PALADIN: { @@ -8453,12 +8540,22 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM break; } break; - } } break; } case SPELL_DAMAGE_CLASS_MELEE: + { + // Judgement of Command proc always crits on stunned target + if(spellProto->SpellFamilyName == SPELLFAMILY_PALADIN) + { + if(spellProto->SpellFamilyFlags & 0x0000000000800000LL && spellProto->SpellIconID == 561) + { + if(pVictim->hasUnitState(UNIT_STAT_STUNNED)) + return true; + } + } + } case SPELL_DAMAGE_CLASS_RANGED: { if (pVictim) diff --git a/src/game/Unit.h b/src/game/Unit.h index 20c175471..b098d4dc9 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1211,6 +1211,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void RemoveAurasDueToSpell(uint32 spellId, Aura* except = NULL); void RemoveAurasDueToItemSpell(Item* castItem,uint32 spellId); void RemoveAurasByCasterSpell(uint32 spellId, uint64 casterGUID); + void RemoveAurasByCasterSpell(uint32 spellId, uint32 effindex, uint64 casterGUID); void RemoveAurasDueToSpellByDispel(uint32 spellId, uint64 casterGUID, Unit *dispeler); void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit *stealer); void RemoveAurasDueToSpellByCancel(uint32 spellId); diff --git a/src/game/UpdateData.h b/src/game/UpdateData.h index e31140e7d..211025ade 100644 --- a/src/game/UpdateData.h +++ b/src/game/UpdateData.h @@ -19,8 +19,11 @@ #ifndef __UPDATEDATA_H #define __UPDATEDATA_H +#include "ByteBuffer.h" + class WorldPacket; + enum OBJECT_UPDATE_TYPE { UPDATETYPE_VALUES = 0, diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index 8646d4cec..1de190ba5 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -37,6 +37,7 @@ #include "ByteBuffer.h" #include "Opcodes.h" #include "Database/DatabaseEnv.h" +#include "Auth/BigNumber.h" #include "Auth/Sha1.h" #include "WorldSession.h" #include "WorldSocketMgr.h" diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp index 81c15a63e..bac584888 100644 --- a/src/realmd/AuthSocket.cpp +++ b/src/realmd/AuthSocket.cpp @@ -480,9 +480,9 @@ bool AuthSocket::_HandleLogonChallenge() pkt << uint8(1); pkt.append(g.AsByteArray(), 1); pkt << uint8(32); - pkt.append(N.AsByteArray(), 32); + pkt.append(N.AsByteArray(32), 32); pkt.append(s.AsByteArray(), s.GetNumBytes());// 32 bytes - pkt.append(unk3.AsByteArray(), 16); + pkt.append(unk3.AsByteArray(16), 16); uint8 securityFlags = 0; pkt << uint8(securityFlags); // security flags (0x0...0x04) @@ -807,7 +807,7 @@ bool AuthSocket::_HandleReconnectChallenge() pkt << (uint8) AUTH_RECONNECT_CHALLENGE; pkt << (uint8) 0x00; _reconnectProof.SetRand(16 * 8); - pkt.append(_reconnectProof.AsByteBuffer()); // 16 bytes random + pkt.append(_reconnectProof.AsByteArray(16),16); // 16 bytes random pkt << (uint64) 0x00 << (uint64) 0x00; // 16 bytes zeros SendBuf((char const*)pkt.contents(), pkt.size()); return true; diff --git a/src/shared/Auth/BigNumber.cpp b/src/shared/Auth/BigNumber.cpp index c78745523..56365e889 100644 --- a/src/shared/Auth/BigNumber.cpp +++ b/src/shared/Auth/BigNumber.cpp @@ -186,21 +186,6 @@ uint8 *BigNumber::AsByteArray(int minSize) return _array; } -ByteBuffer BigNumber::AsByteBuffer() -{ - ByteBuffer ret(GetNumBytes()); - ret.append(AsByteArray(), GetNumBytes()); - return ret; -} - -std::vector BigNumber::AsByteVector() -{ - std::vector ret; - ret.resize(GetNumBytes()); - memcpy(&ret[0], AsByteArray(), GetNumBytes()); - return ret; -} - const char *BigNumber::AsHexStr() { return BN_bn2hex(_bn); diff --git a/src/shared/Auth/BigNumber.h b/src/shared/Auth/BigNumber.h index 5900afcb5..49cc2ff35 100644 --- a/src/shared/Auth/BigNumber.h +++ b/src/shared/Auth/BigNumber.h @@ -20,7 +20,6 @@ #define _AUTH_BIGNUMBER_H #include "Common.h" -#include "ByteBuffer.h" struct bignum_st; @@ -83,8 +82,6 @@ class BigNumber uint32 AsDword(); uint8* AsByteArray(int minSize = 0); - ByteBuffer AsByteBuffer(); - std::vector AsByteVector(); const char *AsHexStr(); const char *AsDecStr(); diff --git a/src/shared/Auth/Sha1.cpp b/src/shared/Auth/Sha1.cpp index f5bb7cc32..6beff2699 100644 --- a/src/shared/Auth/Sha1.cpp +++ b/src/shared/Auth/Sha1.cpp @@ -17,6 +17,7 @@ */ #include "Auth/Sha1.h" +#include "Auth/BigNumber.h" #include Sha1Hash::Sha1Hash() diff --git a/src/shared/Auth/Sha1.h b/src/shared/Auth/Sha1.h index ffb4a1711..754ab3f9e 100644 --- a/src/shared/Auth/Sha1.h +++ b/src/shared/Auth/Sha1.h @@ -22,7 +22,8 @@ #include "Common.h" #include #include -#include "Auth/BigNumber.h" + +class BigNumber; class Sha1Hash { diff --git a/src/shared/Threading.cpp b/src/shared/Threading.cpp index 652f46877..90861b8f4 100644 --- a/src/shared/Threading.cpp +++ b/src/shared/Threading.cpp @@ -17,6 +17,7 @@ */ #include "Threading.h" +#include "Errors.h" #include #include #include diff --git a/src/shared/Threading.h b/src/shared/Threading.h index 6c3f3724b..574b9641a 100644 --- a/src/shared/Threading.h +++ b/src/shared/Threading.h @@ -23,7 +23,6 @@ #include #include "ace/Atomic_Op.h" #include -#include "Errors.h" namespace ACE_Based { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 27c3ccbab..d3a514ffb 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8485" + #define REVISION_NR "8498" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 1b4adb2c7..6601f92f2 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_8469_01_characters_character_spell" - #define REVISION_DB_MANGOS "required_8482_01_mangos_spell_elixir" + #define REVISION_DB_MANGOS "required_8498_01_mangos_spell_proc_event" #define REVISION_DB_REALMD "required_8332_01_realmd_realmcharacters" #endif // __REVISION_SQL_H__