diff --git a/sql/mangos.sql b/sql/mangos.sql index 5ff84226b..695de74c8 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -22,7 +22,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `version` varchar(120) default NULL, - `required_7026_01_mangos_battleground_template` bit(1) default NULL + `required_7033_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16707,7 +16707,26 @@ INSERT INTO `spell_proc_event` VALUES (60572, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), (60617, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), (60826, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(61324, 0x00000000, 10, 0x0002000000000000, 0x00000000, 0x00000000, 0, 0, 0); +(61324, 0x00000000, 10, 0x0002000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(48516, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), +(48521, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), +(48525, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), +(48496, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), +(48499, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), +(48500, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), +(53228, 0x00000000, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(53232, 0x00000000, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(55440, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(52795, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52797, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52798, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52799, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52800, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55677, 0x00000000, 6, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(55680, 0x00000000, 6, 0x0000000000000200, 0x00000000, 0x00000000, 0, 0, 0), +(47572, 0x00000000, 6, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(48159, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(48160, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0); /*!40000 ALTER TABLE `spell_proc_event` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7031_01_mangos_spell_proc_event.sql b/sql/updates/7031_01_mangos_spell_proc_event.sql index 2bd182a3a..d10f099fb 100644 --- a/sql/updates/7031_01_mangos_spell_proc_event.sql +++ b/sql/updates/7031_01_mangos_spell_proc_event.sql @@ -1,3 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_7026_01_mangos_battleground_template required_7031_01_mangos_spell_proc_event bit; + -- (44445) Hot Streak (Rank 1) DELETE FROM `spell_proc_event` WHERE `entry` IN (44445); INSERT INTO `spell_proc_event` VALUES (44445, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); diff --git a/sql/updates/7033_01_mangos_spell_proc_event.sql b/sql/updates/7033_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..b95cbf93f --- /dev/null +++ b/sql/updates/7033_01_mangos_spell_proc_event.sql @@ -0,0 +1,78 @@ +ALTER TABLE db_version CHANGE COLUMN required_7031_01_mangos_spell_proc_event required_7033_01_mangos_spell_proc_event bit; + +-- (48516) Eclipse (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48516); +INSERT INTO `spell_proc_event` VALUES (48516, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48521) Eclipse (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48521); +INSERT INTO `spell_proc_event` VALUES (48521, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48525) Eclipse (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48525); +INSERT INTO `spell_proc_event` VALUES (48525, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48496) Living Seed (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48496); +INSERT INTO `spell_proc_event` VALUES (48496, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (48499) Living Seed (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48499); +INSERT INTO `spell_proc_event` VALUES (48499, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (48500) Living Seed (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48500); +INSERT INTO `spell_proc_event` VALUES (48500, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (53228) Rapid Recuperation (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53228); +INSERT INTO `spell_proc_event` VALUES (53228, 0x00, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53232) Rapid Recuperation (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53232); +INSERT INTO `spell_proc_event` VALUES (53232, 0x00, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55440) Glyph of Healing Wave () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55440); +INSERT INTO `spell_proc_event` VALUES (55440, 0x00, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52795) Borrowed Time (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52795); +INSERT INTO `spell_proc_event` VALUES (52795, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52797) Borrowed Time (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52797); +INSERT INTO `spell_proc_event` VALUES (52797, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52798) Borrowed Time (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52798); +INSERT INTO `spell_proc_event` VALUES (52798, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52799) Borrowed Time (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52799); +INSERT INTO `spell_proc_event` VALUES (52799, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52800) Borrowed Time (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52800); +INSERT INTO `spell_proc_event` VALUES (52800, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55677) Glyph of Dispel Magic () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55677); +INSERT INTO `spell_proc_event` VALUES (55677, 0x00, 6, 0x0000000100000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55680) Glyph of Prayer of Healing () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55680); +INSERT INTO `spell_proc_event` VALUES (55680, 0x00, 6, 0x0000000000000200, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47572) Psychic Horror (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47572); +INSERT INTO `spell_proc_event` VALUES (47572, 0x00, 6, 0x0000000000010000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (48159) Vampiric Touch (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48159); +INSERT INTO `spell_proc_event` VALUES (48159, 0x20, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (48160) Vampiric Touch (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48160); +INSERT INTO `spell_proc_event` VALUES (48160, 0x20, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 43f6743b9..71cee61e7 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -112,6 +112,7 @@ pkgdata_DATA = \ 7024_01_mangos_spell_chain.sql \ 7026_01_mangos_battleground_template.sql \ 7031_01_mangos_spell_proc_event.sql \ + 7033_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -204,4 +205,5 @@ EXTRA_DIST = \ 7024_01_mangos_spell_chain.sql \ 7026_01_mangos_battleground_template.sql \ 7031_01_mangos_spell_proc_event.sql \ + 7033_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 309ecf9ca..438e27224 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4044,7 +4044,7 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo *damageInfo) data << (uint32)damageInfo->resist; // Resist } - data << (uint32)damageInfo->TargetState; + data << (uint8)damageInfo->TargetState; data << (uint32)0; data << (uint32)0; @@ -4554,6 +4554,14 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } return false; } + // Living Seed + case 48504: + { + triggered_spell_id = 48503; + basepoints0 = triggeredByAura->GetModifier()->m_amount; + target = this; + break; + } } break; } @@ -4941,6 +4949,39 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu break; } } + // Eclipse + if (dummySpell->SpellIconID == 2856) + { + if (!procSpell) + return false; + // Only 0 aura can proc + if (triggeredByAura->GetEffIndex()!=0) + return true; + // Wrath crit + if (procSpell->SpellFamilyFlags & 0x0000000000000001LL) + { + if (!roll_chance_i(60)) + return false; + triggered_spell_id = 48518; + target = this; + break; + } + // Starfire crit + if (procSpell->SpellFamilyFlags & 0x0000000000000004LL) + { + triggered_spell_id = 48517; + target = this; + break; + } + return false; + } + // Living Seed + else if (dummySpell->SpellIconID == 2860) + { + triggered_spell_id = 48504; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + break; + } break; } case SPELLFAMILY_ROGUE: @@ -5390,6 +5431,44 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return true; } + // Glyph of Healing Wave + case 55440: + { + // Not proc from self heals + if (this==pVictim) + return false; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + target = this; + triggered_spell_id = 55533; + break; + } + break; + } + case SPELLFAMILY_DEATHKNIGHT: + { + // Vendetta + if (dummySpell->SpellFamilyFlags & 0x0000000000010000LL) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount * GetMaxHealth() / 100; + triggered_spell_id = 50181; + target = this; + break; + } + // Necrosis + else if (dummySpell->SpellIconID == 2709) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + triggered_spell_id = 51460; + break; + } + // Butchery + else if (dummySpell->SpellIconID == 2664) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount; + triggered_spell_id = 50163; + target = this; + break; + } break; } default: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1357394b5..73e0ef9ca 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 "7032" + #define REVISION_NR "7033" #endif // __REVISION_NR_H__