[10742] Add spell_bonus_data.spell_bonus_data field and support for RAP bonuses use for spells damage from table.

Thanks to insider42 for prepering patch for mangos repo.

Signed-off-by: VladimirMangos <vladimir@getmangos.com>

Also added loading check for redundant ap/ap_dot data in table.
This commit is contained in:
QAston 2010-11-19 05:15:22 +03:00 committed by VladimirMangos
parent 21d63d491b
commit f27741460f
8 changed files with 157 additions and 133 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_10704_01_mangos_gossip_menu_option` bit(1) default NULL `required_10742_01_mangos_spell_bonus_data` 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';
-- --
@ -14354,6 +14354,7 @@ CREATE TABLE `spell_bonus_data` (
`direct_bonus` float NOT NULL default '0', `direct_bonus` float NOT NULL default '0',
`dot_bonus` float NOT NULL default '0', `dot_bonus` float NOT NULL default '0',
`ap_bonus` float NOT NULL default '0', `ap_bonus` float NOT NULL default '0',
`ap_dot_bonus` float NOT NULL default '0',
`comments` varchar(255) default NULL, `comments` varchar(255) default NULL,
PRIMARY KEY (`entry`) PRIMARY KEY (`entry`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
@ -14366,137 +14367,137 @@ 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, 0, 'Death Knight - Blood Boil'),
(50444, 0, 0, 0.105, 'Death Knight - Corpse Explosion Triggered'), (50444, 0, 0, 0.105, 0, 'Death Knight - Corpse Explosion Triggered'),
(52212, 0, 0, 0.0475,'Death Knight - Death and Decay Triggered'), (52212, 0, 0, 0.0475,0, 'Death Knight - Death and Decay Triggered'),
(47632, 0, 0, 0.15, 'Death Knight - Death Coil Damage'), (47632, 0, 0, 0.15, 0, 'Death Knight - Death Coil Damage'),
(47633, 0, 0, 0.15, 'Death Knight - Death Coil Heal'), (47633, 0, 0, 0.15, 0, 'Death Knight - Death Coil Heal'),
(49184, 0, 0, 0.1, 'Death Knight - Howling Blast'), (49184, 0, 0, 0.1, 0, 'Death Knight - Howling Blast'),
(45477, 0, 0, 0.1, 'Death Knight - Icy Touch'), (45477, 0, 0, 0.1, 0, 'Death Knight - Icy Touch'),
(56903, 0, 0, 0, 'Death Knight - Lichflame'), (56903, 0, 0, 0, 0, 'Death Knight - Lichflame'),
(50842, 0, 0, 0.04, 'Death Knight - Pestilence'), (50842, 0, 0, 0.04, 0, 'Death Knight - Pestilence'),
(50401, 0, 0, 0, 'Death Knight - Razor Frost'), (50401, 0, 0, 0, 0, 'Death Knight - Razor Frost'),
(47476, 0, 0, 0.06, 'Death Knight - Strangulate'), (47476, 0, 0, 0.06, 0, 'Death Knight - Strangulate'),
(50536, 0, 0, 0.013, 'Death Knight - Unholy Blight Triggered'), (50536, 0, 0, 0, 0.013, 'Death Knight - Unholy Blight Triggered'),
(48743, 0, 0, 0, 'Death Knight - Death Pact'), (48743, 0, 0, 0, 0, 'Death Knight - Death Pact'),
/* Druid */ /* Druid */
(5185, 1.6104, 0, 0, 'Druid - Healing Touch'), (5185, 1.6104, 0, 0, 0, 'Druid - Healing Touch'),
(339, 0, 0.1, 0, 'Druid - Entangling Roots'), (339, 0, 0.1, 0, 0, 'Druid - Entangling Roots'),
(60089, 0, 0, 0.15, 'Druid - Faerie Fire (Feral) Triggered'), (60089, 0, 0, 0.15, 0, 'Druid - Faerie Fire (Feral) Triggered'),
(42231, 0.12898,0, 0, 'Druid - Hurricane Triggered'), (42231, 0.12898,0, 0, 0, 'Druid - Hurricane Triggered'),
(5570, 0, 0.2, 0, 'Druid - Insect Swarm'), (5570, 0, 0.2, 0, 0, 'Druid - Insect Swarm'),
(33763, 0, 0.09518, 0, 'Druid - Lifebloom'), (33763, 0, 0.09518, 0, 0, 'Druid - Lifebloom'),
(8921, 0.1515, 0.13, 0, 'Druid - Moonfire'), (8921, 0.1515, 0.13, 0, 0, 'Druid - Moonfire'),
(50464, 0.6611, 0, 0, 'Druid - Nourish'), (50464, 0.6611, 0, 0, 0, 'Druid - Nourish'),
(8936, 0.539, 0.188, 0, 'Druid - Regrowth'), (8936, 0.539, 0.188, 0, 0, 'Druid - Regrowth'),
(50288, 0.05, 0, 0, 'Druid - Starfall'), (50288, 0.05, 0, 0, 0, 'Druid - Starfall'),
(50294, 0.012, 0, 0, 'Druid - Starfall AOE'), (50294, 0.012, 0, 0, 0, 'Druid - Starfall AOE'),
(18562, 0, 0, 0, 'Druid - Swiftmend'), (18562, 0, 0, 0, 0, 'Druid - Swiftmend'),
(44203, 0.538, 0, 0, 'Druid - Tranquility Triggered'), (44203, 0.538, 0, 0, 0, 'Druid - Tranquility Triggered'),
(48438, 0, 0.11505, 0, 'Druid - Wild Growth'), (48438, 0, 0.11505, 0, 0, 'Druid - Wild Growth'),
(5176, 0.5714, 0, 0, 'Druid - Wrath'), (5176, 0.5714, 0, 0, 0, 'Druid - Wrath'),
/* Generic */ /* Generic */
(54757, 0, 0, 0, 'Generic - Pyro Rocket'), (54757, 0, 0, 0, 0, 'Generic - Pyro Rocket'),
/* Mage */ /* Mage */
(44425, 0.714286,0, 0, 'Mage - Arcane Barrage'), (44425, 0.714286,0, 0, 0, 'Mage - Arcane Barrage'),
(7268, 0.2857, 0, 0, 'Mage - Arcane Missiles Triggered Spell'), (7268, 0.2857, 0, 0, 0, 'Mage - Arcane Missiles Triggered Spell'),
(42208, 0.1437, 0, 0, 'Mage - Blizzard Triggered'), (42208, 0.1437, 0, 0, 0, 'Mage - Blizzard Triggered'),
(133, 1, 0, 0, 'Mage - Fire Ball'), (133, 1, 0, 0, 0, 'Mage - Fire Ball'),
(2120, 0.2357, 0.122, 0, 'Mage - Flamestrike'), (2120, 0.2357, 0.122, 0, 0, 'Mage - Flamestrike'),
(116, 0.8143, 0, 0, 'Mage - Frost Bolt'), (116, 0.8143, 0, 0, 0, 'Mage - Frost Bolt'),
(44614, 0.8571, 0, 0, 'Mage - Frostfire Bolt'), (44614, 0.8571, 0, 0, 0, 'Mage - Frostfire Bolt'),
(30455, 0.1429, 0, 0, 'Mage - Ice Lance'), (30455, 0.1429, 0, 0, 0, 'Mage - Ice Lance'),
(1463, 0.8053, 0, 0, 'Mage - Mana Shield'), (1463, 0.8053, 0, 0, 0, 'Mage - Mana Shield'),
(34913, 0, 0, 0, 'Mage - Molten Armor Triggered'), (34913, 0, 0, 0, 0, 'Mage - Molten Armor Triggered'),
(11366, 1.15, 0.05, 0, 'Mage - Pyroblast'), (11366, 1.15, 0.05, 0, 0, 'Mage - Pyroblast'),
/* Paladin */ /* Paladin */
(26573, 0, 0.04, 0.04, 'Paladin - Consecration'), (26573, 0, 0.04, 0, 0.04, 'Paladin - Consecration'),
(879, 0.15, 0, 0.15, 'Paladin - Exorcism'), (879, 0.15, 0, 0.15, 0, 'Paladin - Exorcism'),
(25997, 0, 0, 0, 'Paladin - Eye for an Eye'), (25997, 0, 0, 0, 0, 'Paladin - Eye for an Eye'),
(19750, 1, 0, 0, 'Paladin - Flash of Light'), (19750, 1, 0, 0, 0, 'Paladin - Flash of Light'),
(53595, 0, 0, 0, 'Paladin - Hammer of the Righteous'), (53595, 0, 0, 0, 0, 'Paladin - Hammer of the Righteous'),
(635, 1.66, 0, 0, 'Paladin - Holy Light'), (635, 1.66, 0, 0, 0, 'Paladin - Holy Light'),
(20925, 0.09, 0, 0.056, 'Paladin - Holy Shield'), (20925, 0.09, 0, 0.056, 0, 'Paladin - Holy Shield'),
(2812, 0.07, 0, 0.07, 'Paladin - Holy Wrath'), (2812, 0.07, 0, 0.07, 0, 'Paladin - Holy Wrath'),
(54158, 0.25, 0, 0, 'Paladin - Judgement'), (54158, 0.25, 0, 0, 0, 'Paladin - Judgement'),
(20467, 0.25, 0, 0.16, 'Paladin - Judgement of Command'), (20467, 0.25, 0, 0.16, 0, 'Paladin - Judgement of Command'),
(53733, 0, 0, 0, 'Paladin - Judgement of Corruption'), (53733, 0, 0, 0, 0, 'Paladin - Judgement of Corruption'),
(20267, 0.1, 0, 0.1, 'Paladin - Judgement of Light Proc'), (20267, 0.1, 0, 0.1, 0, 'Paladin - Judgement of Light Proc'),
(31804, 0, 0, 0, 'Paladin - Judgement of Vengeance'), (31804, 0, 0, 0, 0, 'Paladin - Judgement of Vengeance'),
(20424, 0, 0, 0, 'Paladin - Seal of Command Proc'), (20424, 0, 0, 0, 0, 'Paladin - Seal of Command Proc'),
(53739, 0, 0, 0.003, 'Paladin - Seal of Corruption (full stack proc)'), (53739, 0, 0, 0.003, 0, 'Paladin - Seal of Corruption (full stack proc)'),
(25742, 0.07, 0, 0.039, 'Paladin - Seal of Righteousness Dummy Proc'), (25742, 0.07, 0, 0.039, 0, 'Paladin - Seal of Righteousness Dummy Proc'),
(42463, 0, 0, 0.003, 'Paladin - Seal of Vengeance (full stack proc)'), (42463, 0, 0, 0.003, 0, 'Paladin - Seal of Vengeance (full stack proc)'),
(53600, 0, 0, 0, 'Paladin - Shield of Righteousness'), (53600, 0, 0, 0, 0, 'Paladin - Shield of Righteousness'),
/* Priest */ /* Priest */
(27813, 0, 0, 0, 'Priest - Blessed Recovery'), (27813, 0, 0, 0, 0, 'Priest - Blessed Recovery'),
(2944, 0, 0.1849, 0, 'Priest - Devouring Plague'), (2944, 0, 0.1849, 0, 0, 'Priest - Devouring Plague'),
(63544, 0, 0, 0, 'Priest - Empowered Renew Triggered'), (63544, 0, 0, 0, 0, 'Priest - Empowered Renew Triggered'),
(14914, 0.5711, 0.024, 0, 'Priest - Holy Fire'), (14914, 0.5711, 0.024, 0, 0, 'Priest - Holy Fire'),
(15237, 0.1606, 0, 0, 'Priest - Holy Nova Damage'), (15237, 0.1606, 0, 0, 0, 'Priest - Holy Nova Damage'),
(23455, 0.3035, 0, 0, 'Priest - Holy Nova Heal'), (23455, 0.3035, 0, 0, 0, 'Priest - Holy Nova Heal'),
(63675, 0, 0, 0, 'Priest - Improved Devouring Plague Triggered'), (63675, 0, 0, 0, 0, 'Priest - Improved Devouring Plague Triggered'),
(8129, 0, 0, 0, 'Priest - Mana Burn'), (8129, 0, 0, 0, 0, 'Priest - Mana Burn'),
(58381, 0.257143,0, 0, 'Priest - Mind Flay Triggered'), (58381, 0.257143,0, 0, 0, 'Priest - Mind Flay Triggered'),
(49821, 0.2857, 0, 0, 'Priest - Mind Sear Trigger'), (49821, 0.2857, 0, 0, 0, 'Priest - Mind Sear Trigger'),
(47666, 0.229, 0, 0, 'Priest - Penance dmg effect'), (47666, 0.229, 0, 0, 0, 'Priest - Penance dmg effect'),
(47750, 0.537, 0, 0, 'Priest - Penance heal effect'), (47750, 0.537, 0, 0, 0, 'Priest - Penance heal effect'),
(33619, 0, 0, 0, 'Priest - Reflective Shield'), (33619, 0, 0, 0, 0, 'Priest - Reflective Shield'),
(34433, 0.65, 0, 0, 'Priest - Shadowfiend'), (34433, 0.65, 0, 0, 0, 'Priest - Shadowfiend'),
(585, 0.714, 0, 0, 'Priest - Smite'), (585, 0.714, 0, 0, 0, 'Priest - Smite'),
(34914, 0, 0.4, 0, 'Priest - Vampiric Touch'), (34914, 0, 0.4, 0, 0, 'Priest - Vampiric Touch'),
(64085, 1.2, 0, 0, 'Priest - Vampiric Touch Dispel'), (64085, 1.2, 0, 0, 0, 'Priest - Vampiric Touch Dispel'),
/* Shaman */ /* Shaman */
(974, 0.4762, 0, 0, 'Shaman - Earth Shield'), (974, 0.4762, 0, 0, 0, 'Shaman - Earth Shield'),
(379, 0, 0, 0, 'Shaman - Earth Shield Triggered'), (379, 0, 0, 0, 0, 'Shaman - Earth Shield Triggered'),
(8042, 0.3858, 0, 0, 'Shaman - Earth Shock'), (8042, 0.3858, 0, 0, 0, 'Shaman - Earth Shock'),
(8050, 0.2142, 0.1, 0, 'Shaman - Flame Shock'), (8050, 0.2142, 0.1, 0, 0, 'Shaman - Flame Shock'),
(8026, 0.1, 0, 0, 'Shaman - Flametongue Weapon Proc'), (8026, 0.1, 0, 0, 0, 'Shaman - Flametongue Weapon Proc'),
(8056, 0.3858, 0, 0, 'Shaman - Frost Shock'), (8056, 0.3858, 0, 0, 0, 'Shaman - Frost Shock'),
(8034, 0.1, 0, 0, 'Shaman - Frostbrand Attack Rank 1'), (8034, 0.1, 0, 0, 0, 'Shaman - Frostbrand Attack Rank 1'),
(52042, 0.045, 0, 0, 'Shaman - Healing Stream Totem Triggered Heal'), (52042, 0.045, 0, 0, 0, 'Shaman - Healing Stream Totem Triggered Heal'),
(331, 1.6106, 0, 0, 'Shaman - Healing Wave'), (331, 1.6106, 0, 0, 0, 'Shaman - Healing Wave'),
(403, 0.7143, 0, 0, 'Shaman - Lightning Bolt'), (403, 0.7143, 0, 0, 0, 'Shaman - Lightning Bolt'),
(26364, 0.33, 0, 0, 'Shaman - Lightning Shield Proc'), (26364, 0.33, 0, 0, 0, 'Shaman - Lightning Shield Proc'),
(8188, 0.1, 0, 0, 'Shaman - Magma Totam Passive'), (8188, 0.1, 0, 0, 0, 'Shaman - Magma Totam Passive'),
(61295, 0.4, 0.18, 0, 'Shaman - Riptide'), (61295, 0.4, 0.18, 0, 0, 'Shaman - Riptide'),
(3606, 0.1667, 0, 0, 'Shaman - Searing Totem Attack'), (3606, 0.1667, 0, 0, 0, 'Shaman - Searing Totem Attack'),
(10444, 0, 0, 0, 'Shaman - Flametongue Attack'), (10444, 0, 0, 0, 0, 'Shaman - Flametongue Attack'),
/* Warlock */ /* Warlock */
(17962, 0, 0, 0, 'Warlock - Conflagrate'), (17962, 0, 0, 0, 0, 'Warlock - Conflagrate'),
(172, 0, 0.2, 0, 'Warlock - Corruption'), (172, 0, 0.2, 0, 0, 'Warlock - Corruption'),
(980, 0, 0.1, 0, 'Warlock - Curse of Agony'), (980, 0, 0.1, 0, 0, 'Warlock - Curse of Agony'),
(603, 0, 2, 0, 'Warlock - Curse of Doom'), (603, 0, 2, 0, 0, 'Warlock - Curse of Doom'),
(18220, 0.96, 0, 0, 'Warlock - Dark Pact'), (18220, 0.96, 0, 0, 0, 'Warlock - Dark Pact'),
(5138, 0, 0, 0, 'Warlock - Drain Mana'), (5138, 0, 0, 0, 0, 'Warlock - Drain Mana'),
(1120, 0, 0.4286, 0, 'Warlock - Drain Soul'), (1120, 0, 0.4286, 0, 0, 'Warlock - Drain Soul'),
(28176, 0, 0, 0, 'Warlock - Fel Armor'), (28176, 0, 0, 0, 0, 'Warlock - Fel Armor'),
(18790, 0, 0, 0, 'Warlock - Fel Stamina'), (18790, 0, 0, 0, 0, 'Warlock - Fel Stamina'),
(54181, 0, 0, 0, 'Warlock - Fel Synergy'), (54181, 0, 0, 0, 0, 'Warlock - Fel Synergy'),
(48181, 0.4729, 0, 0, 'Warlock - Haunt'), (48181, 0.4729, 0, 0, 0, 'Warlock - Haunt'),
(755 , 0, 0.4485, 0, 'Warlock - Health Funnel'), (755 , 0, 0.4485, 0, 0, 'Warlock - Health Funnel'),
(1949, 0, 0.0946, 0, 'Warlock - Hellfire'), (1949, 0, 0.0946, 0, 0, 'Warlock - Hellfire'),
(5857, 0.1428, 0, 0, 'Warlock - Hellfire Effect on Enemy'), (5857, 0.1428, 0, 0, 0, 'Warlock - Hellfire Effect on Enemy'),
(348, 0.2, 0.2, 0, 'Warlock - Immolate'), (348, 0.2, 0.2, 0, 0, 'Warlock - Immolate'),
(42223, 0.285714,0, 0, 'Warlock - Rain of Fire Triggered'), (42223, 0.285714,0, 0, 0, 'Warlock - Rain of Fire Triggered'),
(27243, 0.2129, 0.25, 0, 'Warlock - Seed of Corruption'), (27243, 0.2129, 0.25, 0, 0, 'Warlock - Seed of Corruption'),
(6229, 0.3, 0, 0, 'Warlock - Shadow Ward'), (6229, 0.3, 0, 0, 0, 'Warlock - Shadow Ward'),
(47960, 0, 0.06666, 0, 'Warlock - Shadowflame DoT'), (47960, 0, 0.06666, 0, 0, 'Warlock - Shadowflame DoT'),
(47897, 0.1064, 0, 0, 'Warlock - Shadowflame Direct'), (47897, 0.1064, 0, 0, 0, 'Warlock - Shadowflame Direct'),
(63106, 0, 0, 0, 'Warlock - Siphon Life Triggered'), (63106, 0, 0, 0, 0, 'Warlock - Siphon Life Triggered'),
(6353, 1.15, 0, 0, 'Warlock - Soul Fire'), (6353, 1.15, 0, 0, 0, 'Warlock - Soul Fire'),
(30294, 0, 0, 0, 'Warlock - Soul Leech'), (30294, 0, 0, 0, 0, 'Warlock - Soul Leech'),
(31117, 1.8, 0, 0, 'Warlock - Unstable Affliction Dispell'), (31117, 1.8, 0, 0, 0, 'Warlock - Unstable Affliction Dispell'),
/* Item */ /* Item */
(56131, 0, 0, 0, 'Item - Glyph of Dispel Magic'), (56131, 0, 0, 0, 0, 'Item - Glyph of Dispel Magic'),
(56160, 0, 0, 0, 'Item - Glyph of Power Word: Shield'), (56160, 0, 0, 0, 0, 'Item - Glyph of Power Word: Shield'),
(46567, 0, 0, 0, 'Item - Goblin Rocket Launcher'), (46567, 0, 0, 0, 0, 'Item - Goblin Rocket Launcher'),
(31024, 0, 0, 0, 'Item - Living Ruby Pedant'), (31024, 0, 0, 0, 0, 'Item - Living Ruby Pedant'),
(17712, 0, 0, 0, 'Item - Lifestone Healing'), (17712, 0, 0, 0, 0, 'Item - Lifestone Healing'),
(5707, 0, 0, 0, 'Item - Lifestone Regeneration'), (5707, 0, 0, 0, 0, 'Item - Lifestone Regeneration'),
(38395, 0, 0, 0, 'Item - Siphon Essence'), (38395, 0, 0, 0, 0, 'Item - Siphon Essence'),
(40293, 0, 0, 0, 'Item - Siphon Essence'), (40293, 0, 0, 0, 0, 'Item - Siphon Essence'),
(71824, 0, 0, 0, 'Item - Shaman T9 Elemental 4P Bonus'); (71824, 0, 0, 0, 0, 'Item - Shaman T9 Elemental 4P Bonus');
/*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */; /*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;

View file

@ -0,0 +1,9 @@
ALTER TABLE db_version CHANGE COLUMN required_10704_01_mangos_gossip_menu_option required_10742_01_mangos_spell_bonus_data bit;
ALTER TABLE spell_bonus_data
ADD COLUMN ap_dot_bonus float NOT NULL default '0' AFTER ap_bonus;
DELETE FROM spell_bonus_data WHERE entry IN (50536, 26573);
INSERT INTO spell_bonus_data VALUES
(50536, 0, 0, 0, 0.013, 'Death Knight - Unholy Blight Triggered'),
(26573, 0, 0.04, 0, 0.04, 'Paladin - Consecration');

View file

@ -118,6 +118,7 @@ pkgdata_DATA = \
10679_02_mangos_creature_template.sql \ 10679_02_mangos_creature_template.sql \
10682_01_mangos_item_convert.sql \ 10682_01_mangos_item_convert.sql \
10704_01_mangos_gossip_menu_option.sql \ 10704_01_mangos_gossip_menu_option.sql \
10742_01_mangos_spell_bonus_data.sql \
README README
## Additional files to include when running 'make dist' ## Additional files to include when running 'make dist'
@ -216,4 +217,5 @@ EXTRA_DIST = \
10679_02_mangos_creature_template.sql \ 10679_02_mangos_creature_template.sql \
10682_01_mangos_item_convert.sql \ 10682_01_mangos_item_convert.sql \
10704_01_mangos_gossip_menu_option.sql \ 10704_01_mangos_gossip_menu_option.sql \
10742_01_mangos_spell_bonus_data.sql \
README README

View file

@ -1343,7 +1343,7 @@ void SpellMgr::LoadSpellBonuses()
mSpellBonusMap.clear(); // need for reload case mSpellBonusMap.clear(); // need for reload case
uint32 count = 0; uint32 count = 0;
// 0 1 2 3 // 0 1 2 3
QueryResult *result = WorldDatabase.Query("SELECT entry, direct_bonus, dot_bonus, ap_bonus FROM spell_bonus_data"); QueryResult *result = WorldDatabase.Query("SELECT entry, direct_bonus, dot_bonus, ap_bonus, ap_dot_bonus FROM spell_bonus_data");
if( !result ) if( !result )
{ {
barGoLink bar( 1 ); barGoLink bar( 1 );
@ -1381,6 +1381,7 @@ void SpellMgr::LoadSpellBonuses()
sbe.direct_damage = fields[1].GetFloat(); sbe.direct_damage = fields[1].GetFloat();
sbe.dot_damage = fields[2].GetFloat(); sbe.dot_damage = fields[2].GetFloat();
sbe.ap_bonus = fields[3].GetFloat(); sbe.ap_bonus = fields[3].GetFloat();
sbe.ap_dot_bonus = fields[4].GetFloat();
bool need_dot = false; bool need_dot = false;
bool need_direct = false; bool need_direct = false;
@ -1455,17 +1456,17 @@ void SpellMgr::LoadSpellBonuses()
dot_diff = std::abs(sbe.dot_damage - dot_calc); dot_diff = std::abs(sbe.dot_damage - dot_calc);
} }
if (direct_diff < 0.02f && !need_dot && !sbe.ap_bonus) if (direct_diff < 0.02f && !need_dot && !sbe.ap_bonus && !sbe.ap_dot_bonus)
sLog.outErrorDb("`spell_bonus_data` entry for spell %u `direct_bonus` not needed (data from table: %f, calculated %f, difference of %f) and `dot_bonus` also not used", sLog.outErrorDb("`spell_bonus_data` entry for spell %u `direct_bonus` not needed (data from table: %f, calculated %f, difference of %f) and `dot_bonus` also not used",
entry, sbe.direct_damage, direct_calc, direct_diff); entry, sbe.direct_damage, direct_calc, direct_diff);
else if (direct_diff < 0.02f && dot_diff < 0.02f && !sbe.ap_bonus) else if (direct_diff < 0.02f && dot_diff < 0.02f && !sbe.ap_bonus && !sbe.ap_dot_bonus)
{ {
sLog.outErrorDb("`spell_bonus_data` entry for spell %u `direct_bonus` not needed (data from table: %f, calculated %f, difference of %f) and ", sLog.outErrorDb("`spell_bonus_data` entry for spell %u `direct_bonus` not needed (data from table: %f, calculated %f, difference of %f) and ",
entry, sbe.direct_damage, direct_calc, direct_diff); entry, sbe.direct_damage, direct_calc, direct_diff);
sLog.outErrorDb(" ... `dot_bonus` not needed (data from table: %f, calculated %f, difference of %f)", sLog.outErrorDb(" ... `dot_bonus` not needed (data from table: %f, calculated %f, difference of %f)",
sbe.dot_damage, dot_calc, dot_diff); sbe.dot_damage, dot_calc, dot_diff);
} }
else if (!need_direct && dot_diff < 0.02f && !sbe.ap_bonus) else if (!need_direct && dot_diff < 0.02f && !sbe.ap_bonus && !sbe.ap_dot_bonus)
sLog.outErrorDb("`spell_bonus_data` entry for spell %u `dot_bonus` not needed (data from table: %f, calculated %f, difference of %f) and direct also not used", sLog.outErrorDb("`spell_bonus_data` entry for spell %u `dot_bonus` not needed (data from table: %f, calculated %f, difference of %f) and direct also not used",
entry, sbe.dot_damage, dot_calc, dot_diff); entry, sbe.dot_damage, dot_calc, dot_diff);
else if (!need_direct && sbe.direct_damage) else if (!need_direct && sbe.direct_damage)
@ -1473,6 +1474,11 @@ void SpellMgr::LoadSpellBonuses()
else if (!need_dot && sbe.dot_damage) else if (!need_dot && sbe.dot_damage)
sLog.outErrorDb("`spell_bonus_data` entry for spell %u `dot_bonus` not used (spell not have periodic affects)", entry); sLog.outErrorDb("`spell_bonus_data` entry for spell %u `dot_bonus` not used (spell not have periodic affects)", entry);
if (!need_direct && sbe.ap_bonus)
sLog.outErrorDb("`spell_bonus_data` entry for spell %u `ap_bonus` not used (spell not have non-periodic affects)", entry);
else if (!need_dot && sbe.ap_dot_bonus)
sLog.outErrorDb("`spell_bonus_data` entry for spell %u `ap_dot_bonus` not used (spell not have periodic affects)", entry);
mSpellBonusMap[entry] = sbe; mSpellBonusMap[entry] = sbe;
// also add to high ranks // also add to high ranks

View file

@ -453,6 +453,11 @@ inline bool IsAutoRepeatRangedSpell(SpellEntry const* spellInfo)
return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG); return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG);
} }
inline bool IsSpellRequiresRangedAP(SpellEntry const* spellInfo)
{
return (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MELEE);
}
SpellCastResult GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form); SpellCastResult GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form);
inline bool IsChanneledSpell(SpellEntry const* spellInfo) inline bool IsChanneledSpell(SpellEntry const* spellInfo)
@ -616,6 +621,7 @@ struct SpellBonusEntry
float direct_damage; float direct_damage;
float dot_damage; float dot_damage;
float ap_bonus; float ap_bonus;
float ap_dot_bonus;
}; };
typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap; typedef UNORDERED_MAP<uint32, SpellProcEventEntry> SpellProcEventMap;

View file

@ -6092,9 +6092,9 @@ int32 Unit::SpellBonusWithCoeffs(SpellEntry const *spellProto, int32 total, int3
coeff = damagetype == DOT ? bonus->dot_damage : bonus->direct_damage; coeff = damagetype == DOT ? bonus->dot_damage : bonus->direct_damage;
// apply ap bonus at done part calculation only (it flat total mod so common with taken) // apply ap bonus at done part calculation only (it flat total mod so common with taken)
if (donePart && bonus->ap_bonus) if (donePart && (bonus->ap_bonus || bonus->ap_dot_bonus))
{ {
float ap_bonus = bonus->ap_bonus; float ap_bonus = damagetype == DOT ? bonus->ap_dot_bonus : bonus->ap_bonus;
// Impurity // Impurity
if (GetTypeId() == TYPEID_PLAYER && spellProto->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT) if (GetTypeId() == TYPEID_PLAYER && spellProto->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT)
@ -6103,7 +6103,7 @@ int32 Unit::SpellBonusWithCoeffs(SpellEntry const *spellProto, int32 total, int3
ap_bonus += ((spell->CalculateSimpleValue(EFFECT_INDEX_0) * ap_bonus) / 100.0f); ap_bonus += ((spell->CalculateSimpleValue(EFFECT_INDEX_0) * ap_bonus) / 100.0f);
} }
total += int32(ap_bonus * (GetTotalAttackPowerValue(BASE_ATTACK) + ap_benefit)); total += int32(ap_bonus * (GetTotalAttackPowerValue(IsSpellRequiresRangedAP(spellProto) ? RANGED_ATTACK : BASE_ATTACK) + ap_benefit));
} }
} }
// Default calculation // Default calculation

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 "10741" #define REVISION_NR "10742"
#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_10664_01_characters_arena_team_stats" #define REVISION_DB_CHARACTERS "required_10664_01_characters_arena_team_stats"
#define REVISION_DB_MANGOS "required_10704_01_mangos_gossip_menu_option" #define REVISION_DB_MANGOS "required_10742_01_mangos_spell_bonus_data"
#define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version" #define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
#endif // __REVISION_SQL_H__ #endif // __REVISION_SQL_H__