Merge commit 'origin/master' into 320

This commit is contained in:
tomrus88 2009-09-14 16:32:59 +04:00
commit 6f2b9a7e80
48 changed files with 574 additions and 281 deletions

View file

@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
`version` varchar(120) default NULL, `version` varchar(120) default NULL,
`creature_ai_version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL,
`cache_id` int(10) default '0', `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'; ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
-- --
@ -13594,150 +13594,157 @@ LOCK TABLES `spell_bonus_data` WRITE;
/*!40000 ALTER TABLE `spell_bonus_data` DISABLE KEYS */; /*!40000 ALTER TABLE `spell_bonus_data` DISABLE KEYS */;
INSERT INTO `spell_bonus_data` VALUES INSERT INTO `spell_bonus_data` VALUES
/* Death Knight */ /* Death Knight */
('48721', '0', '0', '0.04', 'Death Knight - Blood Boil'), (48721, 0, 0, 0.04, 'Death Knight - Blood Boil'),
('55078', '0', '0', '0.055', 'Death Knight - Blood Plague Dummy Proc'), (55078, 0, 0, 0.055, 'Death Knight - Blood Plague Dummy Proc'),
('50444', '0', '0', '0.105', 'Death Knight - Corpse Explosion Triggered'), (50444, 0, 0, 0.105, 'Death Knight - Corpse Explosion Triggered'),
('52212', '0', '0', '0.0475', 'Death Knight - Death and Decay Triggered'), (52212, 0, 0, 0.0475,'Death Knight - Death and Decay Triggered'),
('47632', '0', '0', '0.15', 'Death Knight - Death Coil Damage'), (47632, 0, 0, 0.15, 'Death Knight - Death Coil Damage'),
('47633', '0', '0', '0.15', 'Death Knight - Death Coil Heal'), (47633, 0, 0, 0.15, 'Death Knight - Death Coil Heal'),
('55095', '0', '0', '0.055', 'Death Knight - Frost Fever'), (55095, 0, 0, 0.055, 'Death Knight - Frost Fever'),
('49184', '0', '0', '0.1', 'Death Knight - Howling Blast'), (49184, 0, 0, 0.1, 'Death Knight - Howling Blast'),
('45477', '0', '0', '0.1', 'Death Knight - Icy Touch'), (45477, 0, 0, 0.1, 'Death Knight - Icy Touch'),
('50842', '0', '0', '0.04', 'Death Knight - Pestilence'), (56903, 0, 0, 0, 'Death Knight - Lichflame'),
('47476', '0', '0', '0.06', 'Death Knight - Strangulate'), (50842, 0, 0, 0.04, 'Death Knight - Pestilence'),
('50536', '0', '0', '0.013', 'Death Knight - Unholy Blight Triggered'), (50401, 0, 0, 0, 'Death Knight - Razor Frost'),
('50401', '0', '0', '0', 'Death Knight - Razor Frost'), (47476, 0, 0, 0.06, 'Death Knight - Strangulate'),
('56903', '0', '0', '0', 'Death Knight - Lichflame'), (50536, 0, 0, 0.013, 'Death Knight - Unholy Blight Triggered'),
/* Druid */ /* Druid */
('5185', '1.6104', '0', '0', 'Druid - Healing Touch'), (5185, 1.6104, 0, 0, 'Druid - Healing Touch'),
('33763', '0', '0.09518', '0', 'Druid - Lifebloom'), (339, 0, 0.1, 0, 'Druid - Entangling Roots'),
('774', '0', '0.37604', '0', 'Druid - Rejuvenation'), (42231, 0.12898,0, 0, 'Druid - Hurricane Triggered'),
('8936', '0.539', '0.188', '0', 'Druid - Regrowth'), (5570, 0, 0.2, 0, 'Druid - Insect Swarm'),
('50288', '0.05', '0', '0', 'Druid - Starfall'), (33763, 0, 0.09518, 0, 'Druid - Lifebloom'),
('50294', '0.012', '0', '0', 'Druid - Starfall AOE'), (8921, 0.1515, 0.13, 0, 'Druid - Moonfire'),
('18562', '0', '0', '0', 'Druid - Swiftmend'), (50464, 0.6611, 0, 0, 'Druid - Nourish'),
('44203', '0.538', '0', '0', 'Druid - Tranquility Triggered'), (8936, 0.539, 0.188, 0, 'Druid - Regrowth'),
('48438', '0', '0.11505', '0', 'Druid - Wild Growth'), (774, 0, 0.37604, 0, 'Druid - Rejuvenation'),
('50464', '0.6611', '0', '0', 'Druid - Nourish'), (50288, 0.05, 0, 0, 'Druid - Starfall'),
('339', '0', '0.1', '0', 'Druid - Entangling Roots'), (50294, 0.012, 0, 0, 'Druid - Starfall AOE'),
('42231', '0.12898', '0', '0', 'Druid - Hurricane Triggered'), (2912, 1, 0, 0, 'Druid - Starfire'),
('5570', '0', '0.127', '0', 'Druid - Insect Swarm'), (18562, 0, 0, 0, 'Druid - Swiftmend'),
('8921', '0.1515', '0.13', '0', 'Druid - Moonfire'), (44203, 0.538, 0, 0, 'Druid - Tranquility Triggered'),
('2912', '1', '0', '0', 'Druid - Starfire'), (61391, 0.193, 0, 0, 'Druid - Typhoon'),
('5176', '0.5714', '0', '0', 'Druid - Wrath'), (48438, 0, 0.11505, 0, 'Druid - Wild Growth'),
(5176, 0.5714, 0, 0, 'Druid - Wrath'),
/* Mage */ /* Mage */
('30451', '0.7143', '0', '0', 'Mage - Arcane Blast'), (44425, 0.714286,0, 0, 'Mage - Arcane Barrage'),
('1449', '0.2128', '0', '0', 'Mage - Arcane Explosion'), (30451, 0.7143, 0, 0, 'Mage - Arcane Blast'),
('7268', '0.2857', '0', '0', 'Mage - Arcane Missiles Triggered Spell'), (1449, 0.2128, 0, 0, 'Mage - Arcane Explosion'),
('1463', '0.8053', '0', '0', 'Mage - Mana Shield'), (7268, 0.2857, 0, 0, 'Mage - Arcane Missiles Triggered Spell'),
('44425', '0.8571', '0', '0', 'Mage - Arcane Barrage'), (42208, 0.1437, 0, 0, 'Mage - Blizzard Triggered'),
('11113', '0.1357', '0', '0', 'Mage - Blast Wave Rank'), (2136, 0.4286, 0, 0, 'Mage - Fire Blast'),
('31661', '0.1357', '0', '0', 'Mage - Dragons Breath'), (133, 1, 0, 0, 'Mage - Fire Ball'),
('2136', '0.4286', '0', '0', 'Mage - Fire Blast'), (2120, 0.2357, 0.122, 0, 'Mage - Flamestrike'),
('133', '1', '0', '0', 'Mage - Fire Ball'), (122, 0.193, 0, 0, 'Mage - Frost Nova'),
('2120', '0.2357', '0.122', '0', 'Mage - Flamestrike'), (116, 0.8143, 0, 0, 'Mage - Frost Bolt'),
('11366', '1.15', '0.05', '0', 'Mage - Pyroblast'), (44614, 0.8571, 0, 0, 'Mage - Frostfire Bolt'),
('2948', '0.4286', '0', '0', 'Mage - Scorch'), (11426, 0.8053, 0, 0, 'Mage - Ice Barrier'),
('44614', '0.8571', '0', '0', 'Mage - Frostfire Bolt'), (30455, 0.1429, 0, 0, 'Mage - Ice Lance'),
('44457', '0.4', '0.2', '0', 'Mage - Living Bomb'), (44457, 0.4, 0.2, 0, 'Mage - Living Bomb'),
('42208', '0.0952', '0', '0', 'Mage - Blizzard Triggered Spell'), (1463, 0.8053, 0, 0, 'Mage - Mana Shield'),
('120', '0.1357', '0', '0', 'Mage - Cone of Cold'), (34913, 0, 0, 0, 'Mage - Molten Armor Triggered'),
('122', '0.193', '0', '0', 'Mage - Frost Nova'), (11366, 1.15, 0.05, 0, 'Mage - Pyroblast'),
('116', '0.8143', '0', '0', 'Mage - Frost Bolt'), (2948, 0.4286, 0, 0, 'Mage - Scorch'),
('11426', '0.8053', '0', '0', 'Mage - Ice Barrier'),
('30455', '0.1429', '0', '0', 'Mage - Ice Lance'),
('34913','0', '0', '0', 'Mage - Molten Armor Triggered'),
/* Paladin */ /* Paladin */
('19750','0.4286', '0', '0', 'Paladin - Flash of Light'), (31935, 0.07, 0, 0.07, 'Paladin - Avengers Shiled'),
('635', '0.7143', '0', '0', 'Paladin - Holy Light'), (53742, 0, 0.0156, 0.03, 'Paladin - Blood Corruption'),
('25912', '0.4286', '0', '0', 'Paladin - Holy Shock Triggered Hurt'), (26573, 0, 0.04, 0.04, 'Paladin - Consecration'),
('25914', '0.4286', '0', '0', 'Paladin - Holy Shock Triggered Heal'), (879, 0.15, 0, 0.15, 'Paladin - Exorcism'),
('31935', '0.07', '0', '0.07', 'Paladin - Avengers Shiled'), (25997, 0, 0, 0, 'Paladin - Eye for an Eye'),
('26573', '0', '0.04', '0.04', 'Paladin - Consecration'), (19750, 1, 0, 0, 'Paladin - Flash of Light'),
('879', '0.15', '0', '0.15', 'Paladin - Exorcism'), (53595, 0, 0, 0, 'Paladin - Hammer of the Righteous'),
('24275', '0.15', '0', '0.15', 'Paladin - Hammer of Wrath'), (24275, 0.15, 0, 0.15, 'Paladin - Hammer of Wrath'),
('20925', '0.09', '0', '0.056', 'Paladin - Holy Shield'), (635, 1.66, 0, 0, 'Paladin - Holy Light'),
('2812', '0.07', '0', '0.07', 'Paladin - Holy Wrath'), (25912, 0.4286, 0, 0, 'Paladin - Holy Shock Triggered Hurt'),
('31893', '0.25', '0', '0.16', 'Paladin - Seal of Blood Enemy Proc'), (20925, 0.09, 0, 0.056, 'Paladin - Holy Shield'),
('32221', '0.25', '0', '0.16', 'Paladin - Seal of Blood Self Proc'), (31803, 0, 0.0156, 0.03, 'Paladin - Holy Vengeance'),
('20424', '0.25', '0', '0.16', 'Paladin - Seal of Command Proc'), (2812, 0.07, 0, 0.07, 'Paladin - Holy Wrath'),
('379', '0', '0', '0', 'Shaman - Earth Shield Triggered'), (31898, 0.18, 0, 0.11, 'Paladin - Judgement of Blood Enemy'),
('20167', '0.25', '0', '0.16', 'Paladin - Seal of Light Proc'), (32220, 0.0594, 0, 0.0363,'Paladin - Judgement of Blood Self'),
('53719', '0.25', '0', '0.16', 'Paladin - Seal of The Martyr Enemy Proc'), (20467, 0.25, 0, 0.16, 'Paladin - Judgement of Command'),
('53718', '0.25', '0', '0.16', 'Paladin - Seal of The Martyr Self Proc'), (53733, 0, 0, 0, 'Paladin - Judgement of Corruption'),
('25742', '0.07', '0', '0.039', 'Paladin - Seal of Righteousness Dummy Proc'), (20267, 0.1, 0, 0.1, 'Paladin - Judgement of Light Proc'),
('53595', '0', '0', '0','Paladin - Hammer of the Righteous'), (20187, 0.32, 0, 0, 'Paladin - Judgement of Righteousness'),
('31803', '0', '0.013', '0.15', 'Paladin - Holy Vengeance'), (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 */ /* Priest */
('32546', '0.8068', '0', '0', 'Priest - Binding Heal'), (32546, 0.8068, 0, 0, 'Priest - Binding Heal'),
('34861', '0.402', '0', '0', 'Priest - Circle of Healing'), (27813, 0, 0, 0, 'Priest - Blessed Recovery'),
('19236', '0.8068', '0', '0', 'Priest - Desperate Prayer'), (34861, 0.402, 0, 0, 'Priest - Circle of Healing'),
('2061', '0.8068', '0', '0', 'Priest - Flash Heal'), (19236, 0.8068, 0, 0, 'Priest - Desperate Prayer'),
('2060', '1.6135', '0', '0', 'Priest - Greater Heal'), (2944, 0, 0.1849, 0, 'Priest - Devouring Plague'),
('23455', '0.3035', '0', '0', 'Priest - Holy Nova Heal'), (14914, 0.5711, 0.024, 0, 'Priest - Holy Fire'),
('17', '0.8068', '0', '0', 'Priest - Power Word: Shield'), (15237, 0.1606, 0, 0, 'Priest - Holy Nova Damage'),
('596', '0.8086', '0', '0', 'Priest - Prayer of Healing'), (2061, 0.8068, 0, 0, 'Priest - Flash Heal'),
('33110', '0.8068', '0', '0', 'Priest - Prayer of Mending Heal Proc'), (2060, 1.6135, 0, 0, 'Priest - Greater Heal'),
('139', '0', '0.376', '0', 'Priest - Renew'), (23455, 0.3035, 0, 0, 'Priest - Holy Nova Heal'),
('2944', '0.1849', '0', '0', 'Priest - Devouring Plague'), (8129, 0, 0, 0, 'Priest - Mana Burn'),
('14914', '0.5711', '0.024', '0', 'Priest - Holy Fire'), (58381, 0.257143,0, 0, 'Priest - Mind Flay Triggered'),
('15237', '0.1606', '0', '0', 'Priest - Holy Nova Damage'), (49821, 0.14286,0, 0, 'Priest - Mind Sear Trigger'),
('8129', '0', '0', '0', 'Priest - Mana Burn'), (17, 0.8068, 0, 0, 'Priest - Power Word: Shield'),
('8092', '0.4296', '0', '0', 'Priest - Mind Blast'), (33110, 0.8068, 0, 0, 'Priest - Prayer of Mending Heal Proc'),
('15407', '0.257', '0', '0', 'Priest - Mind Flay'), (33619, 0, 0, 0, 'Priest - Reflective Shield'),
('49821', '0.14286', '0', '0', 'Priest - Mind Sear Trigger'), (139, 0, 0.376, 0, 'Priest - Renew'),
('34433', '0.65', '0', '0', 'Priest - Shadowfiend'), (32379, 0.4296, 0, 0, 'Priest - Shadow Word: Death'),
('32379', '0.4296', '0', '0', 'Priest - Shadow Word: Death'), (589, 0, 0.1829, 0, 'Priest - Shadow Word: Pain'),
('589', '0', '0.1829', '0', 'Priest - Shadow Word: Pain'), (34433, 0.65, 0, 0, 'Priest - Shadowfiend'),
('585', '0.714', '0', '0', 'Priest - Smite'), (585, 0.714, 0, 0, 'Priest - Smite'),
('34914', '0', '0.4', '0', 'Priest - Vampiric Touch'), (34914, 0, 0.4, 0, 'Priest - Vampiric Touch'),
/* Shaman */ /* Shaman */
('974', '0.4762', '0', '0', 'Shaman - Earth Shield'), (974, 0.4762, 0, 0, 'Shaman - Earth Shield'),
('1064', '1.34', '0', '0', 'Shaman - Chain Heal'), (379, 0, 0, 0, 'Shaman - Earth Shield Triggered'),
('331', '1.6106', '0', '0', 'Shaman - Healing Wave'), (1064, 1.34, 0, 0, 'Shaman - Chain Heal'),
('52042', '0.045', '0', '0', 'Shaman - Healing Stream Totem Triggered Heal'), (421, 0.57, 0, 0, 'Shaman - Chain Lightning'),
('8004', '0.8082', '0', '0', 'Shaman - Lesser Healing Wave'), (8042, 0.3858, 0, 0, 'Shaman - Earth Shock'),
('61295', '0.4', '0.18', '0', 'Shaman - Riptide'), (8443, 0.2142, 0, 0, 'Shaman - Fire Nova Totem Casted by Totem'),
('421', '0.57', '0', '0', 'Shaman - Chain Lightning'), (8050, 0.2142, 0.1, 0, 'Shaman - Flame Shock'),
('8042', '0.3858', '0', '0', 'Shaman - Earth Shock'), (8026, 0.1, 0, 0, 'Shaman - Flametongue Weapon Proc'),
('8443', '0.2142', '0', '0', 'Shaman - Fire Nova Totem Casted by Totem'), (8056, 0.3858, 0, 0, 'Shaman - Frost Shock'),
('8050', '0.2142', '0.1', '0', 'Shaman - Flame Shock'), (8034, 0.1, 0, 0, 'Shaman - Frostbrand Attack Rank 1'),
('8026', '0.1', '0', '0', 'Shaman - Flametongue Weapon Proc'), (52042, 0.045, 0, 0, 'Shaman - Healing Stream Totem Triggered Heal'),
('8056', '0.3858', '0', '0', 'Shaman - Frost Shock'), (331, 1.6106, 0, 0, 'Shaman - Healing Wave'),
('8034', '0.1', '0', '0', 'Shaman - Frostbrand Attack Rank 1'), (51505, 0.5714, 0, 0, 'Shaman - Lava Burst'),
('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'), (403, 0.7143, 0, 0, 'Shaman - Lightning Bolt'),
('26364', '0.33', '0', '0', 'Shaman - Lightning Shield Proc'), (26364, 0.33, 0, 0, 'Shaman - Lightning Shield Proc'),
('8188', '0.1', '0', '0', 'Shaman - Magma Totam Passive'), (8188, 0.1, 0, 0, 'Shaman - Magma Totam Passive'),
('3606', '0.1667', '0', '0', 'Shaman - Searing Totem Attack'), (61295, 0.4, 0.18, 0, 'Shaman - Riptide'),
(3606, 0.1667, 0, 0, 'Shaman - Searing Totem Attack'),
/* Warlock */ /* Warlock */
('980', '0', '0.1', '0', 'Warlock - Curse of Agony'), (17962, 0, 0, 0, 'Warlock - Conflagrate'),
('603', '0', '2', '0', 'Warlock - Curse of Doom'), (172, 0, 0.3, 0, 'Warlock - Corruption'),
('172', '0', '0.3', '0', 'Warlock - Corruption'), (980, 0, 0.1, 0, 'Warlock - Curse of Agony'),
('348', '0.2', '0.2', '0', 'Warlock - Immolate'), (603, 0, 2, 0, 'Warlock - Curse of Doom'),
('27243', '0.22', '0.25', '0', 'Warlock - Seed of Corruption'), (18220, 0.96, 0, 0, 'Warlock - Dark Pact'),
('30108', '0', '0.24', '0', 'Warlock - Unstable Affliction'), (5138, 0, 0, 0, 'Warlock - Drain Mana'),
('31117', '1.8', '0', '0', 'Warlock - Unstable Affliction Dispell'), (1120, 0, 0.4286, 0, 'Warlock - Drain Soul'),
('17962', '0', '0', '0', 'Warlock - Conflagrate'), (28176, 0, 0, 0, 'Warlock - Fel Armor'),
('6789', '0.22', '0', '0', 'Warlock - Death Coil'), (18790, 0, 0, 0, 'Warlock - Fel Stamina'),
('28176', '0', '0', '0', 'Warlock - Fel Armor'), (48181, 0.4729, 0, 0, 'Warlock - Haunt'),
('48181', '0.4729', '0', '0', 'Warlock - Haunt'), (755 , 0, 0.4485, 0, 'Warlock - Health Funnel'),
('29722', '0.7143', '0', '0', 'Warlock - Incinerate'), (1949, 0, 0.0946, 0, 'Warlock - Hellfire'),
('5676', '0.4286', '0', '0', 'Warlock - Searing Pain'), (5857, 0.1428, 0, 0, 'Warlock - Hellfire Effect on Enemy'),
('686', '0.8571', '0', '0', 'Warlock - Shadow Bolt'), (348, 0.2, 0.2, 0, 'Warlock - Immolate'),
('17877', '0.4286', '0', '0', 'Warlock - Shadowburn'), (42223, 0.285714,0, 0, 'Warlock - Rain of Fire Triggered'),
('30283', '0.195', '0', '0', 'Warlock - Shadowfury'), (27243, 0.2129, 0.25, 0, 'Warlock - Seed of Corruption'),
('6353', '1.15', '0', '0', 'Warlock - Soul Fire'), (6229, 0.3, 0, 0, 'Warlock - Shadow Ward'),
('689', '0', '0.1428', '0', 'Warlock - Drain Life'), (47960, 0, 0.06666, 0, 'Warlock - Shadowflame DoT'),
('5138', '0', '0', '0', 'Warlock - Drain Mana'), (47897, 0.1064, 0, 0, 'Warlock - Shadowflame Direct'),
('1120', '0', '0.4286', '0', 'Warlock - Drain Soul'), (63106, 0, 0, 0, 'Warlock - Siphon Life Triggered'),
('755', '0', '0.4485', '0', 'Warlock - Health Funnel'), (6353, 1.15, 0, 0, 'Warlock - Soul Fire'),
('1949', '0', '0.0946', '0', 'Warlock - Hellfire'), (30294, 0, 0, 0, 'Warlock - Soul Leech'),
('5857', '0.1428', '0', '0', 'Warlock - Hellfire Effect on Enemy'), (31117, 1.8, 0, 0, 'Warlock - Unstable Affliction Dispell'),
('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'),
/* Item */ /* Item */
(40293, 0, 0, 0, 'Item - Siphon Essence'); (40293, 0, 0, 0, 'Item - Siphon Essence');
/*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */; /*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */;
@ -14255,6 +14262,10 @@ INSERT INTO spell_chain VALUES
/*Body and Soul*/ /*Body and Soul*/
(64127,0,64127,1,0), (64127,0,64127,1,0),
(64129,64127,64127,2,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*/ /*Circle of Healing*/
(34861,0,34861,1,0), (34861,0,34861,1,0),
(34863,34861,34861,2,0), (34863,34861,34861,2,0),
@ -16255,6 +16266,12 @@ INSERT INTO spell_chain VALUES
(53225,53223,50516,3,0), (53225,53223,50516,3,0),
(53226,53225,50516,4,0), (53226,53225,50516,4,0),
(61384,53226,50516,5,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*/ /*Wrath*/
(5176,0,5176,1,0), (5176,0,5176,1,0),
(5177,5176,5176,2,0), (5177,5176,5176,2,0),
@ -16821,9 +16838,9 @@ INSERT INTO spell_chain VALUES
(34769,0,34769,1,0), (34769,0,34769,1,0),
(34767,34769,34769,2,33391), (34767,34769,34769,2,33391),
/*------------------ /*------------------
--(780)Pet-ExoticChimaera --(780)Pet-Exotic Chimaera
------------------*/ ------------------*/
/*FroststormBreath*/ /*Froststorm Breath*/
(54644,0,54644,1,0), (54644,0,54644,1,0),
(55488,54644,54644,2,0), (55488,54644,54644,2,0),
(55489,55488,54644,3,0), (55489,55488,54644,3,0),
@ -16831,9 +16848,9 @@ INSERT INTO spell_chain VALUES
(55491,55490,54644,5,0), (55491,55490,54644,5,0),
(55492,55491,54644,6,0), (55492,55491,54644,6,0),
/*------------------ /*------------------
--(781)Pet-ExoticDevlisaur --(781)Pet-Exotic Devlisaur
------------------*/ ------------------*/
/*MonstrousBite*/ /*Monstrous Bite*/
(54680,0,54680,1,0), (54680,0,54680,1,0),
(55495,54680,54680,2,0), (55495,54680,54680,2,0),
(55496,55495,54680,3,0), (55496,55495,54680,3,0),
@ -16841,7 +16858,7 @@ INSERT INTO spell_chain VALUES
(55498,55497,54680,5,0), (55498,55497,54680,5,0),
(55499,55498,54680,6,0), (55499,55498,54680,6,0),
/*------------------ /*------------------
--(784)Pet-ExoticWorm --(784)Pet-Exotic Worm
------------------*/ ------------------*/
/*AcidSpit*/ /*AcidSpit*/
(55749,0,55749,1,0), (55749,0,55749,1,0),
@ -16861,9 +16878,9 @@ INSERT INTO spell_chain VALUES
(56630,56629,56626,5,0), (56630,56629,56626,5,0),
(56631,56630,56626,6,0), (56631,56630,56626,6,0),
/*------------------ /*------------------
--(787)Pet-ExoticCoreHound --(787)Pet-Exotic Core Hound
------------------*/ ------------------*/
/*LavaBreath*/ /*Lava Breath*/
(58604,0,58604,1,0), (58604,0,58604,1,0),
(58607,58604,58604,2,0), (58607,58604,58604,2,0),
(58608,58607,58604,3,0), (58608,58607,58604,3,0),
@ -16871,16 +16888,27 @@ INSERT INTO spell_chain VALUES
(58610,58609,58604,5,0), (58610,58609,58604,5,0),
(58611,58610,58604,6,0), (58611,58610,58604,6,0),
/*------------------ /*------------------
--(788)Pet-ExoticSpiritBeast --(788)Pet-Exotic Spirit Beast
------------------*/ ------------------*/
/*SpiritStrike*/ /*Spirit Strike*/
(61193,0,61193,1,0), (61193,0,61193,1,0),
(61194,61193,61193,2,0), (61194,61193,61193,2,0),
(61195,61194,61193,3,0), (61195,61194,61193,3,0),
(61196,61195,61193,4,0), (61196,61195,61193,4,0),
(61197,61196,61193,5,0), (61197,61196,61193,5,0),
(61198,61197,61193,6,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*/ /*Tranquility*/
(44203, 0,44203,1,0), (44203, 0,44203,1,0),
(44205,44203,44203,2,0), (44205,44203,44203,2,0),
@ -16888,13 +16916,7 @@ INSERT INTO spell_chain VALUES
(44207,44206,44203,4,0), (44207,44206,44203,4,0),
(44208,44207,44203,5,0), (44208,44207,44203,5,0),
(48444,44208,44203,6,0), (48444,44208,44203,6,0),
(48445,48444,44203,7,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);
/*!40000 ALTER TABLE `spell_chain` ENABLE KEYS */; /*!40000 ALTER TABLE `spell_chain` ENABLE KEYS */;
UNLOCK TABLES; 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), (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), (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), (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), (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), (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), (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), (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), (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), (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), (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), (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), (53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),

View file

@ -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, 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,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, 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 */

View file

@ -6,4 +6,4 @@ CREATE TABLE `item_required_target` (
`type` tinyint(3) unsigned NOT NULL default '0', `type` tinyint(3) unsigned NOT NULL default '0',
`targetEntry` mediumint(8) unsigned NOT NULL default '0', `targetEntry` mediumint(8) unsigned NOT NULL default '0',
UNIQUE KEY `entry_type_target` (`entry`,`type`,`targetEntry`) UNIQUE KEY `entry_type_target` (`entry`,`type`,`targetEntry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

View file

@ -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");

View file

@ -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);

View file

@ -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');

View file

@ -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');

View file

@ -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);

View file

@ -101,6 +101,11 @@ pkgdata_DATA = \
8462_01_mangos_creature_ai_texts.sql \ 8462_01_mangos_creature_ai_texts.sql \
8469_01_characters_character_spell.sql \ 8469_01_characters_character_spell.sql \
8482_01_mangos_spell_elixir.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 README
## Additional files to include when running 'make dist' ## Additional files to include when running 'make dist'
@ -182,4 +187,9 @@ EXTRA_DIST = \
8462_01_mangos_creature_ai_texts.sql \ 8462_01_mangos_creature_ai_texts.sql \
8469_01_characters_character_spell.sql \ 8469_01_characters_character_spell.sql \
8482_01_mangos_spell_elixir.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 README

View file

@ -20,7 +20,6 @@
#define MANGOS_GRIDNOTIFIERS_H #define MANGOS_GRIDNOTIFIERS_H
#include "ObjectGridLoader.h" #include "ObjectGridLoader.h"
#include "ByteBuffer.h"
#include "UpdateData.h" #include "UpdateData.h"
#include <iostream> #include <iostream>

View file

@ -65,7 +65,7 @@ void WorldSession::HandleMoveWorldportAckOpcode()
GetPlayer()->SetSemaphoreTeleportFar(false); GetPlayer()->SetSemaphoreTeleportFar(false);
// relocate the player to the teleport destination // 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()->Relocate(loc.coord_x, loc.coord_y, loc.coord_z, loc.orientation);
GetPlayer()->SendInitialPacketsBeforeAddToMap(); GetPlayer()->SendInitialPacketsBeforeAddToMap();

View file

@ -85,7 +85,6 @@ enum PhaseMasks
class WorldPacket; class WorldPacket;
class UpdateData; class UpdateData;
class ByteBuffer;
class WorldSession; class WorldSession;
class Creature; class Creature;
class Player; class Player;

View file

@ -451,11 +451,22 @@ ObjectAccessor::UpdateObjectVisibility(WorldObject *obj)
void ObjectAccessor::UpdateVisibilityForPlayer( Player* player ) void ObjectAccessor::UpdateVisibilityForPlayer( Player* player )
{ {
CellPair p = MaNGOS::ComputeCellPair(player->GetPositionX(), player->GetPositionY()); WorldObject const* viewPoint = player->GetViewPoint();
Cell cell(p);
Map* m = player->GetMap(); Map* m = player->GetMap();
CellPair p(MaNGOS::ComputeCellPair(player->GetPositionX(), player->GetPositionY()));
Cell cell(p);
m->UpdatePlayerVisibility(player, cell, p); m->UpdatePlayerVisibility(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); m->UpdateObjectsVisibilityFor(player, cell, p);
} }

View file

@ -25,7 +25,6 @@
#include "Utilities/UnorderedMap.h" #include "Utilities/UnorderedMap.h"
#include "Policies/ThreadingModel.h" #include "Policies/ThreadingModel.h"
#include "ByteBuffer.h"
#include "UpdateData.h" #include "UpdateData.h"
#include "GridDefines.h" #include "GridDefines.h"

View file

@ -3638,20 +3638,17 @@ void ObjectMgr::LoadQuests()
qinfo->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell); qinfo->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell);
qinfo->RewSpell = 0; // no spell reward will display for this quest qinfo->RewSpell = 0; // no spell reward will display for this quest
} }
else if(!SpellMgr::IsSpellValid(spellInfo))
if(!SpellMgr::IsSpellValid(spellInfo))
{ {
sLog.outErrorDb("Quest %u has `RewSpell` = %u but spell %u is broken, quest will not have a spell reward.", 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->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell);
qinfo->RewSpell = 0; // no spell reward will display for this quest qinfo->RewSpell = 0; // no spell reward will display for this quest
} }
else if(GetTalentSpellCost(qinfo->RewSpell))
if(GetTalentSpellCost(qinfo->RewSpell))
{ {
sLog.outErrorDb("Quest %u has `RewSpell` = %u but spell %u is talent, quest will not have a spell reward.", 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->GetQuestId(),qinfo->RewSpell,qinfo->RewSpell);
qinfo->RewSpell = 0; // no spell reward will display for this quest 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->GetQuestId(),qinfo->RewSpellCast,qinfo->RewSpellCast);
qinfo->RewSpellCast = 0; // no spell will be casted on player qinfo->RewSpellCast = 0; // no spell will be casted on player
} }
else if(!SpellMgr::IsSpellValid(spellInfo))
if(!SpellMgr::IsSpellValid(spellInfo))
{ {
sLog.outErrorDb("Quest %u has `RewSpellCast` = %u but spell %u is broken, quest will not have a spell reward.", 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->GetQuestId(),qinfo->RewSpellCast,qinfo->RewSpellCast);
qinfo->RewSpellCast = 0; // no spell will be casted on player qinfo->RewSpellCast = 0; // no spell will be casted on player
} }
else if(GetTalentSpellCost(qinfo->RewSpellCast))
if(GetTalentSpellCost(qinfo->RewSpellCast))
{ {
sLog.outErrorDb("Quest %u has `RewSpell` = %u but spell %u is talent, quest will not have a spell reward.", 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->GetQuestId(),qinfo->RewSpellCast,qinfo->RewSpellCast);
qinfo->RewSpellCast = 0; // no spell will be casted on player qinfo->RewSpellCast = 0; // no spell will be casted on player
continue;
} }
} }

View file

@ -1008,13 +1008,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo); caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo);
caster->DealSpellDamage(&damageInfo, true); 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) // Passive spell hits/misses or active spells only misses (only triggers)
else else

View file

@ -489,6 +489,9 @@ Unit *caster, Item* castItem) : Aura(spellproto, eff, currentBasePoints, target,
m_areaAuraType = AREA_AURA_RAID; m_areaAuraType = AREA_AURA_RAID;
if (target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem()) if (target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem())
m_modifier.m_auraname = SPELL_AURA_NONE; 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; break;
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:
m_areaAuraType = AREA_AURA_FRIEND; m_areaAuraType = AREA_AURA_FRIEND;
@ -782,7 +785,40 @@ void AreaAura::Update(uint32 diff)
for(std::list<Unit *>::iterator tIter = targets.begin(); tIter != targets.end(); tIter++) for(std::list<Unit *>::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; continue;
if(SpellEntry const *actualSpellInfo = spellmgr.SelectAuraRankForPlayerLevel(GetSpellProto(), (*tIter)->getLevel())) if(SpellEntry const *actualSpellInfo = spellmgr.SelectAuraRankForPlayerLevel(GetSpellProto(), (*tIter)->getLevel()))
@ -815,7 +851,7 @@ void AreaAura::Update(uint32 diff)
caster->IsFriendlyTo(m_target) != needFriendly 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 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(); Player* checkTarget = m_target->GetCharmerOrOwnerPlayerOrPlayerItself();
if(!checkTarget) if(!checkTarget)
m_target->RemoveAura(GetId(), GetEffIndex()); m_target->RemoveAurasByCasterSpell(GetId(), GetEffIndex(), GetCasterGUID());
} }
else else
m_target->RemoveAura(GetId(), GetEffIndex()); m_target->RemoveAurasByCasterSpell(GetId(), GetEffIndex(), GetCasterGUID());
} }
} }
else if( m_areaAuraType == AREA_AURA_PET || m_areaAuraType == AREA_AURA_OWNER ) else if( m_areaAuraType == AREA_AURA_PET || m_areaAuraType == AREA_AURA_OWNER )
{ {
if( m_target->GetGUID() != caster->GetCharmerOrOwnerGUID() ) 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); 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() void Aura::_AddAura()
{ {
if (!GetId()) if (!GetId())
@ -954,10 +1016,7 @@ void Aura::_AddAura()
} }
} }
// passive auras (except totem auras) do not get placed in the slots if (IsNeedVisibleSlot(caster))
// 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))
{ {
SetAuraSlot( slot ); SetAuraSlot( slot );
if(slot < MAX_AURAS) // slot found send data to client if(slot < MAX_AURAS) // slot found send data to client
@ -2418,6 +2477,20 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
} }
break; 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: case SPELLFAMILY_DRUID:
{ {
switch(GetId()) switch(GetId())

View file

@ -383,6 +383,7 @@ class MANGOS_DLL_SPEC Aura
uint32 m_in_use; // > 0 while in Aura::ApplyModifier call/Aura::Update/etc uint32 m_in_use; // > 0 while in Aura::ApplyModifier call/Aura::Update/etc
private: private:
void CleanupTriggeredSpells(); void CleanupTriggeredSpells();
bool IsNeedVisibleSlot(Unit const* caster) const; // helper for check req. visibility slot
}; };
class MANGOS_DLL_SPEC AreaAura : public Aura class MANGOS_DLL_SPEC AreaAura : public Aura

View file

@ -610,9 +610,17 @@ void Spell::EffectSchoolDMG(uint32 effect_idx)
} }
case SPELLFAMILY_PALADIN: 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) 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); float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK);
int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) + int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) +
m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget); m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget);
@ -621,11 +629,13 @@ void Spell::EffectSchoolDMG(uint32 effect_idx)
uint32 stacks = 0; uint32 stacks = 0;
Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE);
for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) 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(); stacks = (*itr)->GetStackAmount();
break; break;
} }
}
// + 10% for each application of Holy Vengeance on the target // + 10% for each application of Holy Vengeance on the target
if(stacks) if(stacks)
damage += damage * stacks * 10 /100; damage += damage * stacks * 10 /100;
@ -1670,25 +1680,7 @@ void Spell::EffectDummy(uint32 i)
if (!spell_proto) if (!spell_proto)
return; 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); 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);
return; return;
} }
} }
@ -3508,6 +3500,11 @@ void Spell::EffectDispel(uint32 i)
std::list < std::pair<uint32,uint64> > success_list;// (spell_id,casterGuid) std::list < std::pair<uint32,uint64> > success_list;// (spell_id,casterGuid)
std::list < uint32 > fail_list; // spell_id std::list < uint32 > fail_list; // spell_id
int32 list_size = dispel_list.size(); 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) // Dispell N = damage buffs (or while exist buffs for dispel)
for (int32 count=0; count < damage && list_size > 0; ++count) 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) if(m_caster->GetTypeId()==TYPEID_PLAYER)
((Player*)m_caster)->AddComboPoints(unitTarget, 1); ((Player*)m_caster)->AddComboPoints(unitTarget, 1);
} }
// Mangle (Cat): CP // 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) if(m_caster->GetTypeId()==TYPEID_PLAYER)
((Player*)m_caster)->AddComboPoints(unitTarget, 1); ((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 // take ammo
if(m_attackType == RANGED_ATTACK && m_caster->GetTypeId() == TYPEID_PLAYER) if(m_attackType == RANGED_ATTACK && m_caster->GetTypeId() == TYPEID_PLAYER)

View file

@ -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) || 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)) (spellInfo_2->SpellFamilyFlags2 & 0x00000020) && (spellInfo_1->SpellIconID == 291 || spellInfo_1->SpellIconID == 3028))
return false; 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) // Combustion and Fire Protection Aura (multi-family check)

View file

@ -427,7 +427,7 @@ enum ProcFlags
PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor
PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward) 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_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 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 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_TAKEN_MELEE_HIT | \
PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT | \ PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT | \
PROC_FLAG_TAKEN_MELEE_SPELL_HIT | \ PROC_FLAG_TAKEN_MELEE_SPELL_HIT | \

View file

@ -1205,12 +1205,12 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da
switch (attackType) switch (attackType)
{ {
case BASE_ATTACK: 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->procVictim = PROC_FLAG_TAKEN_MELEE_HIT;
damageInfo->HitInfo = HITINFO_NORMALSWING2; damageInfo->HitInfo = HITINFO_NORMALSWING2;
break; break;
case OFF_ATTACK: 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->procVictim = PROC_FLAG_TAKEN_MELEE_HIT;//|PROC_FLAG_TAKEN_OFFHAND_HIT // not used
damageInfo->HitInfo = HITINFO_LEFTSWING; damageInfo->HitInfo = HITINFO_LEFTSWING;
break; break;
@ -3417,6 +3417,7 @@ bool Unit::AddAura(Aura *Aur)
return false; 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; AuraType aurName = Aur->GetModifier()->m_auraname;
spellEffectPair spair = spellEffectPair(Aur->GetId(), Aur->GetEffIndex()); spellEffectPair spair = spellEffectPair(Aur->GetId(), Aur->GetEffIndex());
@ -3445,10 +3446,15 @@ bool Unit::AddAura(Aura *Aur)
} }
bool stop = false; 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 // 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_DAMAGE_PERCENT:
case SPELL_AURA_PERIODIC_LEECH: case SPELL_AURA_PERIODIC_LEECH:
case SPELL_AURA_PERIODIC_HEAL: 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) void Unit::RemoveAurasDueToSpellByDispel(uint32 spellId, uint64 casterGUID, Unit *dispeler)
{ {
for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); ) 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); 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; break;
@ -5737,6 +5759,43 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
return false; return false;
triggered_spell_id = 31803; 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; break;
} }
// Spiritual Attunement // Spiritual Attunement
@ -5756,33 +5815,54 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
// Seal of Blood do damage trigger // Seal of Blood do damage trigger
case 31892: 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; 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 else
return true; return true;
break; 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 // Seal of the Martyr do damage trigger
case 53720: 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; 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 else
return true; return true;
break; break;
@ -6590,6 +6670,13 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
break; break;
} }
case SPELLFAMILY_HUNTER: 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; break;
case SPELLFAMILY_PALADIN: case SPELLFAMILY_PALADIN:
{ {
@ -8453,12 +8540,22 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
break; break;
} }
break; break;
} }
} }
break; break;
} }
case SPELL_DAMAGE_CLASS_MELEE: 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: case SPELL_DAMAGE_CLASS_RANGED:
{ {
if (pVictim) if (pVictim)

View file

@ -1211,6 +1211,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void RemoveAurasDueToSpell(uint32 spellId, Aura* except = NULL); void RemoveAurasDueToSpell(uint32 spellId, Aura* except = NULL);
void RemoveAurasDueToItemSpell(Item* castItem,uint32 spellId); void RemoveAurasDueToItemSpell(Item* castItem,uint32 spellId);
void RemoveAurasByCasterSpell(uint32 spellId, uint64 casterGUID); void RemoveAurasByCasterSpell(uint32 spellId, uint64 casterGUID);
void RemoveAurasByCasterSpell(uint32 spellId, uint32 effindex, uint64 casterGUID);
void RemoveAurasDueToSpellByDispel(uint32 spellId, uint64 casterGUID, Unit *dispeler); void RemoveAurasDueToSpellByDispel(uint32 spellId, uint64 casterGUID, Unit *dispeler);
void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit *stealer); void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit *stealer);
void RemoveAurasDueToSpellByCancel(uint32 spellId); void RemoveAurasDueToSpellByCancel(uint32 spellId);

View file

@ -19,8 +19,11 @@
#ifndef __UPDATEDATA_H #ifndef __UPDATEDATA_H
#define __UPDATEDATA_H #define __UPDATEDATA_H
#include "ByteBuffer.h"
class WorldPacket; class WorldPacket;
enum OBJECT_UPDATE_TYPE enum OBJECT_UPDATE_TYPE
{ {
UPDATETYPE_VALUES = 0, UPDATETYPE_VALUES = 0,

View file

@ -37,6 +37,7 @@
#include "ByteBuffer.h" #include "ByteBuffer.h"
#include "Opcodes.h" #include "Opcodes.h"
#include "Database/DatabaseEnv.h" #include "Database/DatabaseEnv.h"
#include "Auth/BigNumber.h"
#include "Auth/Sha1.h" #include "Auth/Sha1.h"
#include "WorldSession.h" #include "WorldSession.h"
#include "WorldSocketMgr.h" #include "WorldSocketMgr.h"

View file

@ -480,9 +480,9 @@ bool AuthSocket::_HandleLogonChallenge()
pkt << uint8(1); pkt << uint8(1);
pkt.append(g.AsByteArray(), 1); pkt.append(g.AsByteArray(), 1);
pkt << uint8(32); pkt << uint8(32);
pkt.append(N.AsByteArray(), 32); pkt.append(N.AsByteArray(32), 32);
pkt.append(s.AsByteArray(), s.GetNumBytes());// 32 bytes pkt.append(s.AsByteArray(), s.GetNumBytes());// 32 bytes
pkt.append(unk3.AsByteArray(), 16); pkt.append(unk3.AsByteArray(16), 16);
uint8 securityFlags = 0; uint8 securityFlags = 0;
pkt << uint8(securityFlags); // security flags (0x0...0x04) pkt << uint8(securityFlags); // security flags (0x0...0x04)
@ -807,7 +807,7 @@ bool AuthSocket::_HandleReconnectChallenge()
pkt << (uint8) AUTH_RECONNECT_CHALLENGE; pkt << (uint8) AUTH_RECONNECT_CHALLENGE;
pkt << (uint8) 0x00; pkt << (uint8) 0x00;
_reconnectProof.SetRand(16 * 8); _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 pkt << (uint64) 0x00 << (uint64) 0x00; // 16 bytes zeros
SendBuf((char const*)pkt.contents(), pkt.size()); SendBuf((char const*)pkt.contents(), pkt.size());
return true; return true;

View file

@ -186,21 +186,6 @@ uint8 *BigNumber::AsByteArray(int minSize)
return _array; return _array;
} }
ByteBuffer BigNumber::AsByteBuffer()
{
ByteBuffer ret(GetNumBytes());
ret.append(AsByteArray(), GetNumBytes());
return ret;
}
std::vector<uint8> BigNumber::AsByteVector()
{
std::vector<uint8> ret;
ret.resize(GetNumBytes());
memcpy(&ret[0], AsByteArray(), GetNumBytes());
return ret;
}
const char *BigNumber::AsHexStr() const char *BigNumber::AsHexStr()
{ {
return BN_bn2hex(_bn); return BN_bn2hex(_bn);

View file

@ -20,7 +20,6 @@
#define _AUTH_BIGNUMBER_H #define _AUTH_BIGNUMBER_H
#include "Common.h" #include "Common.h"
#include "ByteBuffer.h"
struct bignum_st; struct bignum_st;
@ -83,8 +82,6 @@ class BigNumber
uint32 AsDword(); uint32 AsDword();
uint8* AsByteArray(int minSize = 0); uint8* AsByteArray(int minSize = 0);
ByteBuffer AsByteBuffer();
std::vector<uint8> AsByteVector();
const char *AsHexStr(); const char *AsHexStr();
const char *AsDecStr(); const char *AsDecStr();

View file

@ -17,6 +17,7 @@
*/ */
#include "Auth/Sha1.h" #include "Auth/Sha1.h"
#include "Auth/BigNumber.h"
#include <stdarg.h> #include <stdarg.h>
Sha1Hash::Sha1Hash() Sha1Hash::Sha1Hash()

View file

@ -22,7 +22,8 @@
#include "Common.h" #include "Common.h"
#include <openssl/sha.h> #include <openssl/sha.h>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include "Auth/BigNumber.h"
class BigNumber;
class Sha1Hash class Sha1Hash
{ {

View file

@ -17,6 +17,7 @@
*/ */
#include "Threading.h" #include "Threading.h"
#include "Errors.h"
#include <ace/OS_NS_unistd.h> #include <ace/OS_NS_unistd.h>
#include <ace/Sched_Params.h> #include <ace/Sched_Params.h>
#include <vector> #include <vector>

View file

@ -23,7 +23,6 @@
#include <ace/TSS_T.h> #include <ace/TSS_T.h>
#include "ace/Atomic_Op.h" #include "ace/Atomic_Op.h"
#include <assert.h> #include <assert.h>
#include "Errors.h"
namespace ACE_Based namespace ACE_Based
{ {

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "8485" #define REVISION_NR "8498"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__

View file

@ -1,6 +1,6 @@
#ifndef __REVISION_SQL_H__ #ifndef __REVISION_SQL_H__
#define __REVISION_SQL_H__ #define __REVISION_SQL_H__
#define REVISION_DB_CHARACTERS "required_8469_01_characters_character_spell" #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" #define REVISION_DB_REALMD "required_8332_01_realmd_realmcharacters"
#endif // __REVISION_SQL_H__ #endif // __REVISION_SQL_H__