diff options
-rw-r--r-- | sql/updates/6958_01_mangos_spell_proc_event.sql | 706 | ||||
-rw-r--r-- | sql/updates/6960_01_mangos_command.sql | 5 | ||||
-rw-r--r-- | sql/updates/6960_02_mangos_string.sql | 6 | ||||
-rw-r--r-- | sql/updates/6961_01_mangos_command.sql | 3 | ||||
-rw-r--r-- | sql/updates/TBC-WLK_world.sql | 724 | ||||
-rw-r--r-- | src/game/Chat.cpp | 10 | ||||
-rw-r--r-- | src/game/Chat.h | 2 | ||||
-rw-r--r-- | src/game/Guild.cpp | 15 | ||||
-rw-r--r-- | src/game/Language.h | 4 | ||||
-rw-r--r-- | src/game/Level1.cpp | 34 | ||||
-rw-r--r-- | src/game/Level3.cpp | 8 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 9 | ||||
-rw-r--r-- | src/game/Player.cpp | 22 | ||||
-rw-r--r-- | src/game/Player.h | 4 | ||||
-rw-r--r-- | src/game/Spell.cpp | 77 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 2 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 74 | ||||
-rw-r--r-- | src/game/SpellMgr.h | 12 | ||||
-rw-r--r-- | src/game/Unit.cpp | 2671 | ||||
-rw-r--r-- | src/game/Unit.h | 1 | ||||
-rw-r--r-- | src/shared/revision_nr.h | 2 |
21 files changed, 2041 insertions, 2350 deletions
diff --git a/sql/updates/6958_01_mangos_spell_proc_event.sql b/sql/updates/6958_01_mangos_spell_proc_event.sql new file mode 100644 index 00000000000..06304a19e0e --- /dev/null +++ b/sql/updates/6958_01_mangos_spell_proc_event.sql @@ -0,0 +1,706 @@ +ALTER TABLE db_version CHANGE COLUMN required_6944_01_mangos_mangos_string required_6958_01_mangos_spell_proc_event bit; + +DROP TABLE IF EXISTS `spell_proc_event`; + +SET FOREIGN_KEY_CHECKS=0; +-- ---------------------------- +-- Table structure for spell_proc_event +-- ---------------------------- +CREATE TABLE `spell_proc_event` ( + `entry` smallint(6) unsigned NOT NULL default '0', + `SchoolMask` tinyint(4) NOT NULL default '0', + `SpellFamilyName` smallint(6) unsigned NOT NULL default '0', + `SpellFamilyMask` bigint(40) unsigned NOT NULL default '0', + `procFlags` int(10) unsigned NOT NULL default '0', + `procEx` int(10) unsigned NOT NULL default '0', + `ppmRate` float NOT NULL default '0', + `CustomChance` float NOT NULL default '0', + `Cooldown` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Records +-- ---------------------------- +INSERT INTO `spell_proc_event` VALUES +(324, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(325, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(945, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(1463, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(3232, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(5952, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), +(6346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(7383, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(7434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(8134, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(8178, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(8494, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(8495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(9452, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(9782, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(9784, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(9799, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(10191, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(10192, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(10193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(10431, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(10432, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(11095, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(11103, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(11119, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(11120, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(11129, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), +(11180, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(11185, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), +(11255, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(12169, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12289, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(12298, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12311, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), +(12317, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12319, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12322, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(12357, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(12358, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(12487, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), +(12488, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), +(12598, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(12668, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(12724, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12726, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12727, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12797, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(12799, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(12812, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12813, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12814, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12846, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12847, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12848, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12849, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12872, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(12873, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(12958, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), +(12966, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12967, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12968, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12969, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12970, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12971, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12972, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12973, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12999, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), +(13000, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(13001, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 8, 0, 0), +(13002, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10, 0, 0), +(13045, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13046, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13047, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13048, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13165, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(13754, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(13867, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(13983, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), +(14070, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), +(14071, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), +(14156, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(14160, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(14161, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(14186, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14190, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14193, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14194, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14195, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14318, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14319, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14320, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14321, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14322, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14531, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(14774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(14892, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), +(15088, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(15128, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(15268, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(15286, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(15323, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15324, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15325, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15326, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15337, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), +(15338, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), +(15346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(15362, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), +(15363, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), +(15600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), +(16164, 0x00000000, 11, 0x0000000090100003, 0x00000000, 0x00000002, 0, 0, 0), +(16176, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), +(16180, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), +(16196, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), +(16198, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), +(16235, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), +(16240, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), +(16256, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16257, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16278, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16279, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16282, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16487, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16489, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16492, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16550, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16620, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(16624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(16850, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(16864, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(16880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16923, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(16924, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(16952, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), +(16954, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), +(16958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16961, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(17106, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), +(17107, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), +(17108, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), +(17364, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(17793, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17794, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), +(17796, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17797, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17798, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17799, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17800, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17801, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17802, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17803, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(18073, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), +(18094, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), +(18095, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), +(18096, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), +(18119, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), +(18120, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), +(18820, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(19184, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), +(19228, 0x00000000, 0, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(19232, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(19233, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(19387, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), +(19388, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), +(19572, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), +(19573, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), +(20049, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20056, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20132, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20164, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), +(20165, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), +(20166, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), +(20182, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20210, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20212, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20213, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20214, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20215, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20234, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), +(20235, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), +(20375, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(20500, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), +(20501, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), +(20705, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20911, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(20925, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20927, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20928, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(21185, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(21882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(21890, 0x00000000, 4, 0x0000036C2A764EEF, 0x00000000, 0x00000000, 0, 0, 0), +(22007, 0x00000000, 3, 0x0000000000200021, 0x00000000, 0x00010000, 0, 0, 0), +(22618, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(22648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(23547, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(23548, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(23551, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), +(23552, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(23572, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), +(23578, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(23581, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(23602, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(23686, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(23688, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(23689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), +(23695, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(23721, 0x00000000, 9, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), +(23920, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(24353, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(24389, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), +(24398, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(24658, 0x00000000, 0, 0x0000000000000000, 0x00014110, 0x00000000, 0, 0, 0), +(24905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 15, 0, 0), +(24932, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 6), +(25050, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(25296, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(25469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(25472, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(25669, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), +(25899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(25988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(26016, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(26107, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000064, 0, 0, 0), +(26119, 0x00000000, 10, 0x0000000090100003, 0x00000000, 0x00010000, 0, 0, 0), +(26128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), +(26135, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), +(26480, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(26605, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(27044, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(27131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(27179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(27419, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27521, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(27656, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(27787, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(27815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(27816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(28592, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(28593, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(28716, 0x00000000, 7, 0x0000000000000010, 0x00048000, 0x00000000, 0, 0, 0), +(28719, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000002, 0, 0, 0), +(28744, 0x00000000, 7, 0x0000000000000040, 0x00044000, 0x00000000, 0, 0, 0), +(28752, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(28789, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000000, 0, 0, 0), +(28802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(28809, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000002, 0, 0, 0), +(28812, 0x00000000, 8, 0x0000000002000006, 0x00000000, 0x00000002, 0, 0, 0), +(28816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(28823, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), +(28847, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(28849, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(29074, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29075, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29076, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29180, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29385, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(29441, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), +(29444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), +(29455, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(29501, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(29594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(29624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29625, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29626, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29632, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29633, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29637, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(29838, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(29977, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), +(30003, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(30160, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30293, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), +(30295, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), +(30296, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), +(30299, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30301, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30302, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30675, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30678, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30679, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30680, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30681, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30701, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30705, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30803, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30804, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30805, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30806, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30807, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30808, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30809, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30810, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30823, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10.5, 0, 0), +(30881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30884, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30886, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30937, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(31124, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), +(31126, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), +(31244, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), +(31245, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), +(31394, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(31569, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(31570, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(31785, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), +(31794, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(31801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), +(31833, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(31835, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(31836, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(31904, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32385, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32387, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32392, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32393, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32394, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32587, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(32594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(32642, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32734, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(32748, 0x00000000, 8, 0x0000000100000000, 0x00000140, 0x00000000, 0, 0, 0), +(32776, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32777, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32837, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), +(32844, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(32885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33076, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), +(33089, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(33127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(33142, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33145, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33146, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33151, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33154, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33191, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), +(33192, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), +(33193, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), +(33299, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(33510, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), +(33648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33719, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(33736, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(33746, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(33757, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(33759, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(33776, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), +(33881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), +(34138, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(34139, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(34258, 0x00000000, 10, 0x0000000800000400, 0x00000000, 0x00000000, 0, 0, 0), +(34262, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), +(34320, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34355, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(34497, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34499, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34500, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34502, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34584, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(34586, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 0), +(34598, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(34749, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), +(34753, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), +(34774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 20), +(34783, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(34827, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(34859, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), +(34860, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), +(34914, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(34916, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(34917, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(34935, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), +(34938, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), +(34939, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), +(34950, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34954, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(35077, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(35080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 60), +(35083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(35086, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(35100, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(35102, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(35103, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(35121, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(36096, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(36111, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(37165, 0x00000000, 8, 0x0000000000200400, 0x00000000, 0x00000000, 0, 0, 0), +(37168, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(37170, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), +(37173, 0x00000000, 8, 0x000001062CBC0598, 0x00000000, 0x00000000, 0, 0, 30), +(37189, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000002, 0, 0, 60), +(37193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(37195, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00000000, 0, 0, 0), +(37197, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), +(37213, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(37214, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37227, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 60), +(37237, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(37247, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), +(37377, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37384, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(37443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(37514, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(37516, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(37519, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000030, 0, 0, 0), +(37523, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(37528, 0x00000000, 4, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(37536, 0x00000000, 4, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(37568, 0x00000000, 6, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), +(37594, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000000, 0, 0, 0), +(37600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37601, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37603, 0x00000000, 6, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), +(37655, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(37657, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 3), +(38026, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(38031, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(38290, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.6, 0, 0), +(38326, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38327, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38334, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(38347, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38350, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38394, 0x00000000, 5, 0x0000000000000006, 0x00000000, 0x00000000, 0, 0, 0), +(38857, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(39027, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(39372, 0x00000030, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(39437, 0x00000004, 5, 0x000000C000001364, 0x00000000, 0x00010000, 0, 0, 0), +(39442, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), +(39443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(39530, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(39958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.7, 0, 40), +(40407, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(40438, 0x00000000, 6, 0x0000000000008040, 0x00000000, 0x00000000, 0, 0, 0), +(40442, 0x00000000, 7, 0x0000044000000014, 0x00000000, 0x00000000, 0, 0, 0), +(40444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(40458, 0x00000000, 4, 0x0000060102000000, 0x00000000, 0x00000000, 0, 0, 0), +(40463, 0x00000000, 11, 0x0000001000000081, 0x00000000, 0x00000000, 0, 0, 0), +(40470, 0x00000000, 10, 0x00000000C0800000, 0x00000000, 0x00000000, 0, 0, 0), +(40475, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(40478, 0x00000000, 5, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(40482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(40485, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(40899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(41034, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(41260, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(41262, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(41381, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(41393, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(41434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 45), +(41469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(41635, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), +(41989, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.5, 0, 0), +(42083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 45), +(42135, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), +(42136, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), +(42368, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(42370, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(43019, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(43020, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(43338, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(43443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(43726, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(43728, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(43737, 0x00000000, 7, 0x0000044000000000, 0x00000000, 0x00000000, 0, 0, 10), +(43739, 0x00000000, 7, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(43741, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(43745, 0x00000000, 10, 0x0000020000000000, 0x00000000, 0x00000000, 0, 0, 0), +(43748, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), +(43750, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(43819, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(44404, 0x00000000, 3, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(44835, 0x00000000, 7, 0x0000008000000000, 0x00000010, 0x00000000, 0, 0, 0), +(45054, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 15), +(45057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(45234, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(45243, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(45244, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(45354, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45481, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45483, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45484, 0x00000000, 0, 0x0000000000000000, 0x00004000, 0x00000000, 0, 0, 45), +(46025, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(46092, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(46098, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(46569, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(46662, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 20), +(46832, 0x00000000, 7, 0x0000000000000001, 0x00000000, 0x00010000, 0, 0, 0), +(46854, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46855, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46913, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46914, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46915, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46916, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46951, 0x00000000, 4, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), +(46952, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), +(46953, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), +(47509, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(47511, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(47515, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(48835, 0x00000000, 10, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), +(48837, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), +(48951, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(48952, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(48988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(49018, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49137, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), +(49188, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(49208, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), +(49222, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(49504, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(49529, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49530, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49531, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49532, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49657, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), +(50781, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51123, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51129, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51130, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51349, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51352, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51359, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51466, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51470, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51625, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), +(51626, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), +(51627, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(51628, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(51629, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(51634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51664, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51665, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51667, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51668, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51669, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51672, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), +(51674, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), +(51679, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), +(51692, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), +(51696, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), +(51698, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), +(51700, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), +(51701, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), +(52420, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(52423, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(52898, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(53137, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(53138, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(53215, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(53216, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(53217, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(53221, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(53222, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(53224, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(53256, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53259, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53260, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53290, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53291, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53292, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53293, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53294, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53380, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53381, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53382, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53383, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53384, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53486, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53488, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53569, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), +(53576, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), +(54149, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), +(54486, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54488, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54489, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54490, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54738, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(54841, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(55620, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55623, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55666, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55667, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55668, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55669, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55670, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56342, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(56343, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(56344, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(56451, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(56611, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56612, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56613, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56614, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56636, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(56637, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(56638, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(56821, 0x00000000, 8, 0x0000000000000002, 0x00000000, 0x00000002, 0, 0, 0), +(56822, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(56834, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), +(56835, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), +(57878, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), +(57880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), +(57881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), +(58357, 0x00000000, 4, 0x0000000000000040, 0x00000000, 0x00000002, 0, 0, 0), +(58364, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(58372, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(58386, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(58616, 0x00000000, 15, 0x0000000000040000, 0x00000000, 0x00000000, 0, 0, 0), +(58620, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), +(58626, 0x00000000, 15, 0x0000000002000000, 0x00000000, 0x00000000, 0, 0, 0), +(58631, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(58642, 0x00000000, 15, 0x0800000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(58644, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), +(58647, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), +(58676, 0x00000000, 15, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), +(58677, 0x00000000, 15, 0x0000000000002000, 0x00000000, 0x00000000, 0, 0, 0), +(58872, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(58874, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(58901, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(59057, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(59176, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(59327, 0x00000000, 15, 0x0000000008000000, 0x00000000, 0x00000000, 0, 0, 0), +(59725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(60537, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(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);
\ No newline at end of file diff --git a/sql/updates/6960_01_mangos_command.sql b/sql/updates/6960_01_mangos_command.sql new file mode 100644 index 00000000000..a67862f9af0 --- /dev/null +++ b/sql/updates/6960_01_mangos_command.sql @@ -0,0 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_6958_01_mangos_spell_proc_event required_6960_01_mangos_command bit; + +DELETE FROM `command` WHERE `name` = 'modify runicpower'; +INSERT INTO `command` VALUES +('modify runicpower',1,'Syntax: .modify runicpower #newrunicpower\r\n\r\nModify the runic power of the selected player. If no player is selected, modify your runic power.'); diff --git a/sql/updates/6960_02_mangos_string.sql b/sql/updates/6960_02_mangos_string.sql new file mode 100644 index 00000000000..c99fe5db0d6 --- /dev/null +++ b/sql/updates/6960_02_mangos_string.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_6960_01_mangos_command required_6960_02_mangos_string bit; + +DELETE FROM `mangos_string` WHERE `entry` IN (173,174); +INSERT INTO `mangos_string` VALUES +(173,'You changed runic power of %s to %i/%i.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(174,'%s changed your runic power to %i/%i.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); diff --git a/sql/updates/6961_01_mangos_command.sql b/sql/updates/6961_01_mangos_command.sql new file mode 100644 index 00000000000..60cb686f68e --- /dev/null +++ b/sql/updates/6961_01_mangos_command.sql @@ -0,0 +1,3 @@ +ALTER TABLE db_version CHANGE COLUMN required_6960_02_mangos_string required_6961_01_mangos_command bit; + +DELETE FROM `command` WHERE name = 'reload'; diff --git a/sql/updates/TBC-WLK_world.sql b/sql/updates/TBC-WLK_world.sql index 8c3cf1ffed3..7d2d6bb695a 100644 --- a/sql/updates/TBC-WLK_world.sql +++ b/sql/updates/TBC-WLK_world.sql @@ -1,4 +1,4 @@ --- TRUNCATE creature_equip_template; +TRUNCATE creature_equip_template; alter table `creature_equip_template` drop column `equipinfo1`, drop column `equipinfo2`, @@ -49,6 +49,16 @@ CREATE TABLE `spell_affect` ( PRIMARY KEY (`entry`,`effectId`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- command +DELETE FROM `command` WHERE `name` = 'modify runicpower'; +INSERT INTO `command` VALUES +('modify runicpower',1,'Syntax: .modify runicpower #newrunicpower\r\n\r\nModify the runic power of the selected player. If no player is selected, modify your runic power.'); + +DELETE FROM `command` WHERE name = 'reload'; + + +-- string DELETE FROM trinity_string WHERE entry in (345,346); INSERT INTO `trinity_string` VALUES (345,'Forced customize for player %s will be requested at next login.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), @@ -83,7 +93,13 @@ INSERT INTO trinity_string VALUES DELETE FROM trinity_string WHERE entry in (1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138); +DELETE FROM `trinity_string` WHERE `entry` IN (173,174); +INSERT INTO `trinity_string` VALUES +(173,'You changed runic power of %s to %i/%i.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(174,'%s changed your runic power to %i/%i.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); + +-- data DELETE FROM `player_classlevelstats` WHERE class = 6 OR level > 70; INSERT INTO `player_classlevelstats` VALUES (1,71,4720,0), @@ -6090,7 +6106,707 @@ INSERT INTO spell_learn_spell VALUES (53428,53341), (53428,53343); - - +DROP TABLE IF EXISTS `spell_proc_event`; + +SET FOREIGN_KEY_CHECKS=0; +-- ---------------------------- +-- Table structure for spell_proc_event +-- ---------------------------- +CREATE TABLE `spell_proc_event` ( + `entry` smallint(6) unsigned NOT NULL default '0', + `SchoolMask` tinyint(4) NOT NULL default '0', + `SpellFamilyName` smallint(6) unsigned NOT NULL default '0', + `SpellFamilyMask` bigint(40) unsigned NOT NULL default '0', + `procFlags` int(10) unsigned NOT NULL default '0', + `procEx` int(10) unsigned NOT NULL default '0', + `ppmRate` float NOT NULL default '0', + `CustomChance` float NOT NULL default '0', + `Cooldown` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -
\ No newline at end of file +-- ---------------------------- +-- Records +-- ---------------------------- +INSERT INTO `spell_proc_event` VALUES +(324, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(325, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(945, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(1463, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(3232, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(5952, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), +(6346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(7383, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(7434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(8134, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(8178, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(8494, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(8495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(9452, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(9782, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(9784, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(9799, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(10191, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(10192, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(10193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(10431, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(10432, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(11095, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(11103, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(11119, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(11120, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(11129, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), +(11180, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(11185, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), +(11255, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(12169, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12289, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(12298, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12311, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), +(12317, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12319, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12322, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(12357, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(12358, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(12487, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), +(12488, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), +(12598, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(12668, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(12724, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12726, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12727, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(12797, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(12799, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(12812, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12813, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12814, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), +(12834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12846, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12847, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12848, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12849, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12872, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(12873, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(12958, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), +(12966, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12967, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12968, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12969, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12970, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(12971, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12972, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12973, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(12999, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), +(13000, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(13001, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 8, 0, 0), +(13002, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10, 0, 0), +(13045, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13046, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13047, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13048, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(13165, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(13754, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(13867, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), +(13983, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), +(14070, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), +(14071, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), +(14156, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(14160, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(14161, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(14186, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14190, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14193, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14194, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14195, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), +(14318, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14319, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14320, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14321, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14322, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(14531, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(14774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(14892, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), +(15088, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(15128, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(15268, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(15286, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(15323, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15324, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15325, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15326, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), +(15337, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), +(15338, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), +(15346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(15362, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), +(15363, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), +(15600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), +(16164, 0x00000000, 11, 0x0000000090100003, 0x00000000, 0x00000002, 0, 0, 0), +(16176, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), +(16180, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), +(16196, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), +(16198, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), +(16235, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), +(16240, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), +(16256, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16257, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16278, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16279, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(16281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16282, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16487, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16489, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16492, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16550, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16620, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(16624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(16850, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(16864, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(16880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16923, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(16924, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(16952, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), +(16954, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), +(16958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(16961, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(17106, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), +(17107, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), +(17108, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), +(17364, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(17793, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17794, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), +(17796, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17797, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17798, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17799, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17800, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(17801, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17802, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(17803, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(18073, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), +(18094, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), +(18095, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), +(18096, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), +(18119, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), +(18120, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), +(18820, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(19184, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), +(19228, 0x00000000, 0, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(19232, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(19233, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(19387, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), +(19388, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), +(19572, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), +(19573, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), +(20049, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20056, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20132, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20164, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), +(20165, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), +(20166, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), +(20182, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20210, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20212, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20213, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20214, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20215, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), +(20234, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), +(20235, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), +(20375, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(20500, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), +(20501, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), +(20705, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(20911, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(20925, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20927, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(20928, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(21185, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(21882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(21890, 0x00000000, 4, 0x0000036C2A764EEF, 0x00000000, 0x00000000, 0, 0, 0), +(22007, 0x00000000, 3, 0x0000000000200021, 0x00000000, 0x00010000, 0, 0, 0), +(22618, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(22648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(23547, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(23548, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(23551, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), +(23552, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(23572, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), +(23578, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(23581, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(23602, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(23686, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(23688, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(23689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), +(23695, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(23721, 0x00000000, 9, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), +(23920, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(24353, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(24389, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), +(24398, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(24658, 0x00000000, 0, 0x0000000000000000, 0x00014110, 0x00000000, 0, 0, 0), +(24905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 15, 0, 0), +(24932, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 6), +(25050, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(25296, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(25469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(25472, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(25669, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), +(25899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(25988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(26016, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(26107, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000064, 0, 0, 0), +(26119, 0x00000000, 10, 0x0000000090100003, 0x00000000, 0x00010000, 0, 0, 0), +(26128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), +(26135, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), +(26480, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(26605, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(27044, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(27131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(27179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(27419, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27521, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(27656, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(27787, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(27811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(27815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(27816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(28592, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(28593, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(28716, 0x00000000, 7, 0x0000000000000010, 0x00048000, 0x00000000, 0, 0, 0), +(28719, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000002, 0, 0, 0), +(28744, 0x00000000, 7, 0x0000000000000040, 0x00044000, 0x00000000, 0, 0, 0), +(28752, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(28789, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000000, 0, 0, 0), +(28802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(28809, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000002, 0, 0, 0), +(28812, 0x00000000, 8, 0x0000000002000006, 0x00000000, 0x00000002, 0, 0, 0), +(28816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(28823, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), +(28847, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(28849, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(29074, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29075, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29076, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29180, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29385, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(29441, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), +(29444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), +(29455, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(29501, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(29594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(29624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29625, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29626, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29632, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29633, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29637, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(29801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(29834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(29838, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(29977, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), +(30003, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(30160, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30293, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), +(30295, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), +(30296, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), +(30299, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30301, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30302, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30675, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30678, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30679, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30680, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30681, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), +(30701, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30705, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(30802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30803, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30804, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30805, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30806, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30807, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30808, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30809, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30810, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(30823, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10.5, 0, 0), +(30881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30884, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30886, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), +(30937, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(31124, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), +(31126, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), +(31244, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), +(31245, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), +(31394, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(31569, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(31570, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(31785, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), +(31794, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(31801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), +(31833, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(31835, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(31836, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(31904, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32385, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32387, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32392, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32393, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32394, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), +(32587, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(32594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(32642, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32734, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(32748, 0x00000000, 8, 0x0000000100000000, 0x00000140, 0x00000000, 0, 0, 0), +(32776, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32777, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(32837, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), +(32844, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), +(32885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33076, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), +(33089, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(33127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(33142, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33145, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33146, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33151, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33154, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33191, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), +(33192, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), +(33193, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), +(33299, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(33510, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), +(33648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33719, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(33736, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(33746, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(33757, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(33759, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(33776, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), +(33881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(33883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), +(34138, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(34139, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(34258, 0x00000000, 10, 0x0000000800000400, 0x00000000, 0x00000000, 0, 0, 0), +(34262, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), +(34320, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34355, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(34497, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34499, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34500, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34502, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34584, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(34586, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 0), +(34598, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(34749, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), +(34753, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), +(34774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 20), +(34783, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(34827, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(34859, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), +(34860, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), +(34914, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(34916, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(34917, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(34935, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), +(34938, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), +(34939, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), +(34950, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(34954, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(35077, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(35080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 60), +(35083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(35086, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(35100, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(35102, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(35103, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(35121, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(36096, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(36111, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(37165, 0x00000000, 8, 0x0000000000200400, 0x00000000, 0x00000000, 0, 0, 0), +(37168, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000000, 0, 0, 0), +(37170, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), +(37173, 0x00000000, 8, 0x000001062CBC0598, 0x00000000, 0x00000000, 0, 0, 30), +(37189, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000002, 0, 0, 60), +(37193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(37195, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00000000, 0, 0, 0), +(37197, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), +(37213, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(37214, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37227, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 60), +(37237, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), +(37247, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), +(37377, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37384, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(37443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(37514, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(37516, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(37519, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000030, 0, 0, 0), +(37523, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(37528, 0x00000000, 4, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), +(37536, 0x00000000, 4, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(37568, 0x00000000, 6, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), +(37594, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000000, 0, 0, 0), +(37600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37601, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(37603, 0x00000000, 6, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), +(37655, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(37657, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 3), +(38026, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(38031, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(38290, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.6, 0, 0), +(38326, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38327, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38334, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), +(38347, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38350, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(38394, 0x00000000, 5, 0x0000000000000006, 0x00000000, 0x00000000, 0, 0, 0), +(38857, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(39027, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(39372, 0x00000030, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(39437, 0x00000004, 5, 0x000000C000001364, 0x00000000, 0x00010000, 0, 0, 0), +(39442, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), +(39443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(39530, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(39958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.7, 0, 40), +(40407, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), +(40438, 0x00000000, 6, 0x0000000000008040, 0x00000000, 0x00000000, 0, 0, 0), +(40442, 0x00000000, 7, 0x0000044000000014, 0x00000000, 0x00000000, 0, 0, 0), +(40444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(40458, 0x00000000, 4, 0x0000060102000000, 0x00000000, 0x00000000, 0, 0, 0), +(40463, 0x00000000, 11, 0x0000001000000081, 0x00000000, 0x00000000, 0, 0, 0), +(40470, 0x00000000, 10, 0x00000000C0800000, 0x00000000, 0x00000000, 0, 0, 0), +(40475, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), +(40478, 0x00000000, 5, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(40482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(40485, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(40899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(41034, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(41260, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(41262, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(41381, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), +(41393, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(41434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 45), +(41469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), +(41635, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), +(41989, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.5, 0, 0), +(42083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 45), +(42135, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), +(42136, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), +(42368, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(42370, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(43019, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(43020, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), +(43338, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(43443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(43726, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(43728, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(43737, 0x00000000, 7, 0x0000044000000000, 0x00000000, 0x00000000, 0, 0, 10), +(43739, 0x00000000, 7, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(43741, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(43745, 0x00000000, 10, 0x0000020000000000, 0x00000000, 0x00000000, 0, 0, 0), +(43748, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), +(43750, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(43819, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), +(44404, 0x00000000, 3, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(44835, 0x00000000, 7, 0x0000008000000000, 0x00000010, 0x00000000, 0, 0, 0), +(45054, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 15), +(45057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(45234, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(45243, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(45244, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(45354, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45481, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45483, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(45484, 0x00000000, 0, 0x0000000000000000, 0x00004000, 0x00000000, 0, 0, 45), +(46025, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(46092, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(46098, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), +(46569, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), +(46662, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 20), +(46832, 0x00000000, 7, 0x0000000000000001, 0x00000000, 0x00010000, 0, 0, 0), +(46854, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46855, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46913, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46914, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46915, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46916, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), +(46951, 0x00000000, 4, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), +(46952, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), +(46953, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), +(47509, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(47511, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(47515, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(48835, 0x00000000, 10, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), +(48837, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), +(48951, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(48952, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(48988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(49018, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49137, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), +(49188, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(49208, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), +(49222, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(49503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(49504, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(49529, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49530, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49531, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49532, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(49657, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), +(50781, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51123, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51129, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51130, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51349, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51352, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51359, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), +(51466, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51470, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51625, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), +(51626, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), +(51627, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(51628, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(51629, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), +(51634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(51664, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51665, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51667, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51668, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51669, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), +(51672, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), +(51674, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), +(51679, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), +(51692, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), +(51696, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), +(51698, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), +(51700, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), +(51701, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), +(52420, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), +(52423, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(52898, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(53137, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(53138, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), +(53215, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(53216, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(53217, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(53221, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(53222, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(53224, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(53256, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53259, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53260, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53290, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53291, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53292, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53293, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53294, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), +(53380, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53381, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53382, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53383, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53384, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53486, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53488, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), +(53569, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), +(53576, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), +(54149, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), +(54486, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54488, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54489, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54490, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(54738, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(54841, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(55620, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55623, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55666, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55667, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55668, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55669, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55670, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56342, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(56343, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(56344, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), +(56451, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), +(56611, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56612, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56613, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56614, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(56636, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(56637, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(56638, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(56821, 0x00000000, 8, 0x0000000000000002, 0x00000000, 0x00000002, 0, 0, 0), +(56822, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(56834, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), +(56835, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), +(57878, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), +(57880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), +(57881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), +(58357, 0x00000000, 4, 0x0000000000000040, 0x00000000, 0x00000002, 0, 0, 0), +(58364, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), +(58372, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(58386, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), +(58616, 0x00000000, 15, 0x0000000000040000, 0x00000000, 0x00000000, 0, 0, 0), +(58620, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), +(58626, 0x00000000, 15, 0x0000000002000000, 0x00000000, 0x00000000, 0, 0, 0), +(58631, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(58642, 0x00000000, 15, 0x0800000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(58644, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), +(58647, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), +(58676, 0x00000000, 15, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), +(58677, 0x00000000, 15, 0x0000000000002000, 0x00000000, 0x00000000, 0, 0, 0), +(58872, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(58874, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), +(58901, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(59057, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), +(59176, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(59327, 0x00000000, 15, 0x0000000008000000, 0x00000000, 0x00000000, 0, 0, 0), +(59725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), +(60537, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(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);
\ No newline at end of file diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index c05fd2b35c6..1f352a16cba 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -110,6 +110,7 @@ ChatCommand * ChatHandler::getCommandTable() { "hp", SEC_MODERATOR, false, &ChatHandler::HandleModifyHPCommand, "", NULL }, { "mana", SEC_MODERATOR, false, &ChatHandler::HandleModifyManaCommand, "", NULL }, { "rage", SEC_MODERATOR, false, &ChatHandler::HandleModifyRageCommand, "", NULL }, + { "runicpower", SEC_MODERATOR, false, &ChatHandler::HandleModifyRunicPowerCommand, "", NULL }, { "energy", SEC_MODERATOR, false, &ChatHandler::HandleModifyEnergyCommand, "", NULL }, { "money", SEC_MODERATOR, false, &ChatHandler::HandleModifyMoneyCommand, "", NULL }, { "speed", SEC_MODERATOR, false, &ChatHandler::HandleModifySpeedCommand, "", NULL }, @@ -301,7 +302,6 @@ ChatCommand * ChatHandler::getCommandTable() { "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL }, { "waypoint_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadWpScriptsCommand, "", NULL }, - { "", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; @@ -753,9 +753,9 @@ void ChatHandler::PSendSysMessage(int32 entry, ...) { const char *format = GetTrinityString(entry); va_list ap; - char str [1024]; + char str [2048]; va_start(ap, entry); - vsnprintf(str,1024,format, ap ); + vsnprintf(str,2048,format, ap ); va_end(ap); SendSysMessage(str); } @@ -763,9 +763,9 @@ void ChatHandler::PSendSysMessage(int32 entry, ...) void ChatHandler::PSendSysMessage(const char *format, ...) { va_list ap; - char str [1024]; + char str [2048]; va_start(ap, format); - vsnprintf(str,1024,format, ap ); + vsnprintf(str,2048,format, ap ); va_end(ap); SendSysMessage(str); } diff --git a/src/game/Chat.h b/src/game/Chat.h index b324d2d5f5e..b5d9de4faf7 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -163,6 +163,7 @@ class ChatHandler bool HandleModifyHPCommand(const char* args); bool HandleModifyManaCommand(const char* args); bool HandleModifyRageCommand(const char* args); + bool HandleModifyRunicPowerCommand(const char* args); bool HandleModifyEnergyCommand(const char* args); bool HandleModifyMoneyCommand(const char* args); bool HandleModifyASpeedCommand(const char* args); @@ -202,7 +203,6 @@ class ChatHandler bool HandleNpcWhisperCommand(const char* args); bool HandleNpcYellCommand(const char* args); - bool HandleReloadCommand(const char* args); bool HandleReloadAllCommand(const char* args); bool HandleReloadAllAreaCommand(const char* args); bool HandleReloadAllItemCommand(const char* args); diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index 55ad071a74b..a34d4bee524 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -1213,18 +1213,19 @@ void Guild::LoadGuildBankFromDB() delete result; - // 0 1 2 3 - result = CharacterDatabase.PQuery("SELECT TabId, SlotId, item_guid, item_entry FROM guild_bank_item WHERE guildid='%u' ORDER BY TabId", Id); + // data needs to be at first place for Item::LoadFromDB + // 0 1 2 3 4 + result = CharacterDatabase.PQuery("SELECT data, TabId, SlotId, item_guid, item_entry FROM guild_bank_item JOIN item_instance ON item_guid = guid WHERE guildid='%u' ORDER BY TabId", Id); if(!result) return; do { Field *fields = result->Fetch(); - uint8 TabId = fields[0].GetUInt8(); - uint8 SlotId = fields[1].GetUInt8(); - uint32 ItemGuid = fields[2].GetUInt32(); - uint32 ItemEntry = fields[3].GetUInt32(); + uint8 TabId = fields[1].GetUInt8(); + uint8 SlotId = fields[2].GetUInt8(); + uint32 ItemGuid = fields[3].GetUInt32(); + uint32 ItemEntry = fields[4].GetUInt32(); if (TabId >= purchased_tabs || TabId >= GUILD_BANK_MAX_TABS) { @@ -1247,7 +1248,7 @@ void Guild::LoadGuildBankFromDB() } Item *pItem = NewItemOrBag(proto); - if(!pItem->LoadFromDB(ItemGuid, 0)) + if(!pItem->LoadFromDB(ItemGuid, 0, result)) { CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE guildid='%u' AND TabId='%u' AND SlotId='%u'", Id, uint32(TabId), uint32(SlotId)); sLog.outError("Item GUID %u not found in item_instance, deleting from Guild Bank!", ItemGuid); diff --git a/src/game/Language.h b/src/game/Language.h index c7115ce9248..06f9d0b1ed1 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -170,7 +170,9 @@ enum TrinityStrings LANG_SOUND_NOT_EXIST = 170, LANG_TELEPORTED_TO_BY_CONSOLE = 171, LANG_CONSOLE_COMMAND = 172, - // Room for more level 1 173-199 not used + LANG_YOU_CHANGE_RUNIC_POWER = 173, + LANG_YOURS_RUNIC_POWER_CHANGED = 174, + // Room for more level 1 175-199 not used // level 2 chat LANG_NO_SELECTION = 200, diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index e1373d8e8fb..462d2864621 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -874,6 +874,40 @@ bool ChatHandler::HandleModifyRageCommand(const char* args) return true; } +// Edit Player Runic Power +bool ChatHandler::HandleModifyRunicPowerCommand(const char* args) +{ + if(!*args) + return false; + + int32 rune = atoi((char*)args)*10; + int32 runem = atoi((char*)args)*10; + + if (rune <= 0 || runem <= 0 || runem < rune) + { + SendSysMessage(LANG_BAD_VALUE); + SetSentErrorMessage(true); + return false; + } + + Player *chr = getSelectedPlayer(); + if (chr == NULL) + { + SendSysMessage(LANG_NO_CHAR_SELECTED); + SetSentErrorMessage(true); + return false; + } + + PSendSysMessage(LANG_YOU_CHANGE_RUNIC_POWER, chr->GetName(), rune/10, runem/10); + if (needReportToTarget(chr)) + ChatHandler(chr).PSendSysMessage(LANG_YOURS_RUNIC_POWER_CHANGED, GetName(), rune/10, runem/10); + + chr->SetMaxPower(POWER_RUNIC_POWER,runem ); + chr->SetPower(POWER_RUNIC_POWER, rune ); + + return true; +} + //Edit Player Faction bool ChatHandler::HandleModifyFactionCommand(const char* args) { diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index ae0ea508308..aef91bf1e9c 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -54,14 +54,6 @@ #include "InstanceData.h" //reload commands -bool ChatHandler::HandleReloadCommand(const char* arg) -{ - // this is error catcher for wrong table name in .reload commands - PSendSysMessage("Db table with name starting from '%s' not found and can't be reloaded.",arg); - SetSentErrorMessage(true); - return false; -} - bool ChatHandler::HandleReloadAllCommand(const char*) { HandleReloadAreaTriggerTeleportCommand(""); diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index add9fa793af..5ae6b5b63e0 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1987,7 +1987,8 @@ void ObjectMgr::LoadItemPrototypes() void ObjectMgr::LoadAuctionItems() { - QueryResult *result = CharacterDatabase.Query( "SELECT itemguid,item_template FROM auctionhouse" ); + // data needs to be at first place for Item::LoadFromDB + QueryResult *result = CharacterDatabase.Query( "SELECT data,itemguid,item_template FROM auctionhouse JOIN item_instance ON itemguid = guid" ); if( !result ) return; @@ -2002,8 +2003,8 @@ void ObjectMgr::LoadAuctionItems() bar.step(); fields = result->Fetch(); - uint32 item_guid = fields[0].GetUInt32(); - uint32 item_template = fields[1].GetUInt32(); + uint32 item_guid = fields[1].GetUInt32(); + uint32 item_template = fields[2].GetUInt32(); ItemPrototype const *proto = GetItemPrototype(item_template); @@ -2015,7 +2016,7 @@ void ObjectMgr::LoadAuctionItems() Item *item = NewItemOrBag(proto); - if(!item->LoadFromDB(item_guid,0)) + if(!item->LoadFromDB(item_guid,0, result)) { delete item; continue; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 8fbc26ed9eb..adf5a5ab167 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -3666,15 +3666,16 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC MailItemsInfo mi; if(has_items) { - QueryResult *resultItems = CharacterDatabase.PQuery("SELECT item_guid,item_template FROM mail_items WHERE mail_id='%u'", mail_id); + // data needs to be at first place for Item::LoadFromDB + QueryResult *resultItems = CharacterDatabase.PQuery("SELECT data,item_guid,item_template FROM mail_items JOIN item_instance ON item_guid = guid WHERE mail_id='%u'", mail_id); if(resultItems) { do { Field *fields2 = resultItems->Fetch(); - uint32 item_guidlow = fields2[0].GetUInt32(); - uint32 item_template = fields2[1].GetUInt32(); + uint32 item_guidlow = fields2[1].GetUInt32(); + uint32 item_template = fields2[2].GetUInt32(); ItemPrototype const* itemProto = objmgr.GetItemPrototype(item_template); if(!itemProto) @@ -3684,7 +3685,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC } Item *pItem = NewItemOrBag(itemProto); - if(!pItem->LoadFromDB(item_guidlow, MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER))) + if(!pItem->LoadFromDB(item_guidlow, MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER),resultItems)) { pItem->FSetState(ITEM_REMOVED); pItem->SaveToDB(); // it also deletes item object ! @@ -6416,13 +6417,13 @@ void Player::UpdateZone(uint32 newZone) if(zone->flags & AREA_FLAG_SANCTUARY) // in sanctuary { - SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_SANCTUARY); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY); if(sWorld.IsFFAPvPRealm()) RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); } else { - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_SANCTUARY); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY); } if(zone->flags & AREA_FLAG_CAPITAL) // in capital city @@ -14979,15 +14980,16 @@ void Player::_LoadInventory(QueryResult *result, uint32 timediff) // load mailed item which should receive current player void Player::_LoadMailedItems(Mail *mail) { - QueryResult* result = CharacterDatabase.PQuery("SELECT item_guid, item_template FROM mail_items WHERE mail_id='%u'", mail->messageID); + // data needs to be at first place for Item::LoadFromDB + QueryResult* result = CharacterDatabase.PQuery("SELECT data, item_guid, item_template FROM mail_items JOIN item_instance ON item_guid = guid WHERE mail_id='%u'", mail->messageID); if(!result) return; do { Field *fields = result->Fetch(); - uint32 item_guid_low = fields[0].GetUInt32(); - uint32 item_template = fields[1].GetUInt32(); + uint32 item_guid_low = fields[1].GetUInt32(); + uint32 item_template = fields[2].GetUInt32(); mail->AddItem(item_guid_low, item_template); @@ -15003,7 +15005,7 @@ void Player::_LoadMailedItems(Mail *mail) Item *item = NewItemOrBag(proto); - if(!item->LoadFromDB(item_guid_low, 0)) + if(!item->LoadFromDB(item_guid_low, 0, result)) { sLog.outError( "Player::_LoadMailedItems - Item in mail (%u) doesn't exist !!!! - item guid: %u, deleted from mail", mail->messageID, item_guid_low); CharacterDatabase.PExecute("DELETE FROM mail_items WHERE item_guid = '%u'", item_guid_low); diff --git a/src/game/Player.h b/src/game/Player.h index ef111762efa..e40e3859bdc 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -428,8 +428,8 @@ enum PlayerFlags PLAYER_FLAGS_UNK1 = 0x00001000, // played long time PLAYER_FLAGS_UNK2 = 0x00002000, // played too long time PLAYER_FLAGS_UNK3 = 0x00008000, // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag - PLAYER_FLAGS_SANCTUARY = 0x00010000, // player entered sanctuary - PLAYER_FLAGS_UNK4 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) + PLAYER_FLAGS_UNK4 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary + PLAYER_FLAGS_UNK5 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) PLAYER_FLAGS_PVP_TIMER = 0x00040000, // 3.0.2, pvp timer active (after you disable pvp manually) }; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index e515c592c50..d78db70b653 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -850,83 +850,6 @@ void Spell::AddItemTarget(Item* pitem, uint32 effIndex) target.effectMask = 1<<effIndex; m_UniqueItemInfo.push_back(target); } -/* -void Spell::doTriggers(SpellMissInfo missInfo, uint32 damage, SpellSchoolMask damageSchoolMask, uint32 block, uint32 absorb, bool crit) -{ - // Do triggers depends from hit result (triggers on hit do in effects) - // Set aura states depends from hit result - if (missInfo!=SPELL_MISS_NONE) - { - // Miss/dodge/parry/block only for melee based spells - // Resist only for magic based spells - switch (missInfo) - { - case SPELL_MISS_MISS: - if(m_caster->GetTypeId()== TYPEID_PLAYER) - ((Player*)m_caster)->UpdateWeaponSkill(BASE_ATTACK); - - m_caster->CastMeleeProcDamageAndSpell(unitTarget, 0, damageSchoolMask, m_attackType, MELEE_HIT_MISS, m_spellInfo, m_IsTriggeredSpell); - break; - case SPELL_MISS_RESIST: - m_caster->ProcDamageAndSpell(unitTarget, PROC_FLAG_TARGET_RESISTS, PROC_FLAG_RESIST_SPELL, 0, damageSchoolMask, m_spellInfo, m_IsTriggeredSpell); - break; - case SPELL_MISS_DODGE: - if(unitTarget->GetTypeId() == TYPEID_PLAYER) - ((Player*)unitTarget)->UpdateDefense(); - - // Overpower - if (m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->getClass() == CLASS_WARRIOR) - { - ((Player*) m_caster)->AddComboPoints(unitTarget, 1); - m_caster->StartReactiveTimer( REACTIVE_OVERPOWER ); - } - - // Riposte - if (unitTarget->getClass() != CLASS_ROGUE) - { - unitTarget->ModifyAuraState(AURA_STATE_DEFENSE, true); - unitTarget->StartReactiveTimer( REACTIVE_DEFENSE ); - } - - m_caster->CastMeleeProcDamageAndSpell(unitTarget, 0, damageSchoolMask, m_attackType, MELEE_HIT_DODGE, m_spellInfo, m_IsTriggeredSpell); - break; - case SPELL_MISS_PARRY: - // Update victim defense ? - if(unitTarget->GetTypeId() == TYPEID_PLAYER) - ((Player*)unitTarget)->UpdateDefense(); - // Mongoose bite - set only Counterattack here - if (unitTarget->getClass() == CLASS_HUNTER) - { - unitTarget->ModifyAuraState(AURA_STATE_HUNTER_PARRY,true); - unitTarget->StartReactiveTimer( REACTIVE_HUNTER_PARRY ); - } - else - { - unitTarget->ModifyAuraState(AURA_STATE_DEFENSE, true); - unitTarget->StartReactiveTimer( REACTIVE_DEFENSE ); - } - m_caster->CastMeleeProcDamageAndSpell(unitTarget, 0, damageSchoolMask, m_attackType, MELEE_HIT_PARRY, m_spellInfo, m_IsTriggeredSpell); - break; - case SPELL_MISS_BLOCK: - unitTarget->ModifyAuraState(AURA_STATE_DEFENSE, true); - unitTarget->StartReactiveTimer( REACTIVE_DEFENSE ); - - m_caster->CastMeleeProcDamageAndSpell(unitTarget, 0, damageSchoolMask, m_attackType, MELEE_HIT_BLOCK, m_spellInfo, m_IsTriggeredSpell); - break; - // Trigger from this events not supported - case SPELL_MISS_EVADE: - case SPELL_MISS_IMMUNE: - case SPELL_MISS_IMMUNE2: - case SPELL_MISS_DEFLECT: - case SPELL_MISS_ABSORB: - // Trigger from reflects need do after get reflect result - case SPELL_MISS_REFLECT: - break; - default: - break; - } - } -}*/ void Spell::DoAllEffectOnTarget(TargetInfo *target) { diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index af17bf0f97e..20924d1ef56 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -5398,8 +5398,6 @@ void Spell::EffectApplyGlyph(uint32 i) player->CastSpell(m_caster, gp->SpellId, true); player->SetGlyph(m_glyphIndex, glyph); - if(m_CastItem) - player->DestroyItemCount(m_CastItem->GetEntry(), 1, true); } } } diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 12689654310..2e0d25d4c6a 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1073,80 +1073,10 @@ void SpellMgr::LoadSpellProcEvents() sLog.outString(); if (customProc) - sLog.outString( ">> Loaded %u custom spell proc event conditions +%u custom", count, customProc ); + sLog.outString( ">> Loaded %u extra spell proc event conditions +%u custom", count, customProc ); else - sLog.outString( ">> Loaded %u spell proc event conditions", count ); - - /* - // Commented for now, as it still produces many errors (still quite many spells miss spell_proc_event) - for (uint32 id = 0; id < sSpellStore.GetNumRows(); ++id) - { - SpellEntry const* spellInfo = sSpellStore.LookupEntry(id); - if (!spellInfo) - continue; - - bool found = false; - for (int effectId = 0; effectId < 3; ++effectId) - { - // at this moment check only SPELL_AURA_PROC_TRIGGER_SPELL - if( spellInfo->EffectApplyAuraName[effectId] == SPELL_AURA_PROC_TRIGGER_SPELL ) - { - found = true; - break; - } - } - - if(!found) - continue; - - if(GetSpellProcEvent(id)) - continue; - - sLog.outErrorDb("Spell %u (%s) misses spell_proc_event",id,spellInfo->SpellName[sWorld.GetDBClang()]); - } - */ -} - -/* -bool SpellMgr::IsSpellProcEventCanTriggeredBy( SpellProcEventEntry const * spellProcEvent, SpellEntry const * procSpell, uint32 procFlags ) -{ - if((procFlags & spellProcEvent->procFlags) == 0) - return false; - - // Additional checks in case spell cast/hit/crit is the event - // Check (if set) school, category, skill line, spell talent mask - if(spellProcEvent->schoolMask && (!procSpell || (GetSpellSchoolMask(procSpell) & spellProcEvent->schoolMask) == 0)) - return false; - if(spellProcEvent->category && (!procSpell || procSpell->Category != spellProcEvent->category)) - return false; - if(spellProcEvent->skillId) - { - if (!procSpell) - return false; - - SkillLineAbilityMap::const_iterator lower = spellmgr.GetBeginSkillLineAbilityMap(procSpell->Id); - SkillLineAbilityMap::const_iterator upper = spellmgr.GetEndSkillLineAbilityMap(procSpell->Id); - - bool found = false; - for(SkillLineAbilityMap::const_iterator _spell_idx = lower; _spell_idx != upper; ++_spell_idx) - { - if(_spell_idx->second->skillId == spellProcEvent->skillId) - { - found = true; - break; - } - } - if (!found) - return false; - } - if(spellProcEvent->spellFamilyName && (!procSpell || spellProcEvent->spellFamilyName != procSpell->SpellFamilyName)) - return false; - if(spellProcEvent->spellFamilyMask && (!procSpell || (spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags) == 0)) - return false; - - return true; + sLog.outString( ">> Loaded %u extra spell proc event conditions", count ); } -*/ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellProcEvent, uint32 EventProcFlag, SpellEntry const * procSpell, uint32 procFlags, uint32 procExtra, bool active) { diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 5322f3fa16d..a37d219743f 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -482,14 +482,14 @@ enum ProcFlags PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor PROC_FLAG_KILL_AND_GET_XP = 0x00000002, // 01 Kill that yields experience or honor - PROC_FLAG_SUCCESSFUL_MILEE_HIT = 0x00000004, // 02 Successful melee attack - PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee strike hit + PROC_FLAG_SUCCESSFUL_MILEE_HIT = 0x00000004, // 02 Successful melee auto attack + PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee auto attack hit PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT = 0x00000010, // 04 Successful attack by Spell that use melee weapon PROC_FLAG_TAKEN_MELEE_SPELL_HIT = 0x00000020, // 05 Taken damage by Spell that use melee weapon - PROC_FLAG_SUCCESSFUL_RANGED_HIT = 0x00000040, // 06 Successful Ranged attack (all ranged attack deal as spell so newer set :( ) - PROC_FLAG_TAKEN_RANGED_HIT = 0x00000080, // 07 Taken damage from ranged attack (all ranged attack deal as spell so newer set :( ) + PROC_FLAG_SUCCESSFUL_RANGED_HIT = 0x00000040, // 06 Successful Ranged auto attack + PROC_FLAG_TAKEN_RANGED_HIT = 0x00000080, // 07 Taken damage from ranged auto attack PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT = 0x00000100, // 08 Successful Ranged attack by Spell that use ranged weapon PROC_FLAG_TAKEN_RANGED_SPELL_HIT = 0x00000200, // 09 Taken damage by Spell that use ranged weapon @@ -540,12 +540,12 @@ enum ProcFlagsEx PROC_EX_DEFLECT = 0x0000200, PROC_EX_ABSORB = 0x0000400, PROC_EX_REFLECT = 0x0000800, - PROC_EX_INTERRUPT = 0x0001000, // Melle hit result can be Interrupt (not used) + PROC_EX_INTERRUPT = 0x0001000, // Melee hit result can be Interrupt (not used) PROC_EX_RESERVED1 = 0x0002000, PROC_EX_RESERVED2 = 0x0004000, PROC_EX_RESERVED3 = 0x0008000, PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000, // If set trigger always ( no matter another flags) used for drop charges - PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000 // If set trigger always but only one time + PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000 // If set trigger always but only one time (not used) }; struct SpellProcEventEntry diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 5a2503f99fe..289bfb963ad 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -63,72 +63,14 @@ float baseMoveSpeed[MAX_MOVE_TYPE] = 3.14f // MOVE_PITCH_RATE }; -void InitTriggerAuraData(); - -// auraTypes contains attacker auras capable of proc'ing cast auras -static Unit::AuraTypeSet GenerateAttakerProcCastAuraTypes() -{ - static Unit::AuraTypeSet auraTypes; - auraTypes.insert(SPELL_AURA_DUMMY); - auraTypes.insert(SPELL_AURA_PROC_TRIGGER_SPELL); - auraTypes.insert(SPELL_AURA_MOD_HASTE); - auraTypes.insert(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - return auraTypes; -} - -// auraTypes contains victim auras capable of proc'ing cast auras -static Unit::AuraTypeSet GenerateVictimProcCastAuraTypes() -{ - static Unit::AuraTypeSet auraTypes; - auraTypes.insert(SPELL_AURA_DUMMY); - auraTypes.insert(SPELL_AURA_PRAYER_OF_MENDING); - auraTypes.insert(SPELL_AURA_PROC_TRIGGER_SPELL); - return auraTypes; -} - -// auraTypes contains auras capable of proc effect/damage (but not cast) for attacker -static Unit::AuraTypeSet GenerateAttakerProcEffectAuraTypes() -{ - static Unit::AuraTypeSet auraTypes; - auraTypes.insert(SPELL_AURA_MOD_DAMAGE_DONE); - auraTypes.insert(SPELL_AURA_PROC_TRIGGER_DAMAGE); - auraTypes.insert(SPELL_AURA_MOD_CASTING_SPEED); - auraTypes.insert(SPELL_AURA_MOD_RATING); - return auraTypes; -} - -// auraTypes contains auras capable of proc effect/damage (but not cast) for victim -static Unit::AuraTypeSet GenerateVictimProcEffectAuraTypes() -{ - static Unit::AuraTypeSet auraTypes; - auraTypes.insert(SPELL_AURA_MOD_RESISTANCE); - auraTypes.insert(SPELL_AURA_PROC_TRIGGER_DAMAGE); - auraTypes.insert(SPELL_AURA_MOD_PARRY_PERCENT); - auraTypes.insert(SPELL_AURA_MOD_BLOCK_PERCENT); - auraTypes.insert(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN); - return auraTypes; -} - -static Unit::AuraTypeSet attackerProcCastAuraTypes = GenerateAttakerProcCastAuraTypes(); -static Unit::AuraTypeSet attackerProcEffectAuraTypes = GenerateAttakerProcEffectAuraTypes(); - -static Unit::AuraTypeSet victimProcCastAuraTypes = GenerateVictimProcCastAuraTypes(); -static Unit::AuraTypeSet victimProcEffectAuraTypes = GenerateVictimProcEffectAuraTypes(); - -// auraTypes contains auras capable of proc'ing for attacker and victim -static Unit::AuraTypeSet GenerateProcAuraTypes() -{ - InitTriggerAuraData(); - - Unit::AuraTypeSet auraTypes; - auraTypes.insert(attackerProcCastAuraTypes.begin(),attackerProcCastAuraTypes.end()); - auraTypes.insert(attackerProcEffectAuraTypes.begin(),attackerProcEffectAuraTypes.end()); - auraTypes.insert(victimProcCastAuraTypes.begin(),victimProcCastAuraTypes.end()); - auraTypes.insert(victimProcEffectAuraTypes.begin(),victimProcEffectAuraTypes.end()); - return auraTypes; -} - -static Unit::AuraTypeSet procAuraTypes = GenerateProcAuraTypes(); +// Used for prepare can/can`t triggr aura +static bool InitTriggerAuraData(); +// Define can trigger auras +static bool isTriggerAura[TOTAL_AURAS]; +// Define can`t trigger auras (need for disable second trigger) +static bool isNonTriggerAura[TOTAL_AURAS]; +// Prepare lists +static bool procPrepared = InitTriggerAuraData(); bool IsPassiveStackableSpell( uint32 spellId ) { @@ -138,12 +80,8 @@ bool IsPassiveStackableSpell( uint32 spellId ) SpellEntry const* spellProto = sSpellStore.LookupEntry(spellId); if(!spellProto) return false; - - for(int j = 0; j < 3; ++j) - { - if(std::find(procAuraTypes.begin(),procAuraTypes.end(),spellProto->EffectApplyAuraName[j])!=procAuraTypes.end()) - return false; - } + if (spellProto->procFlags) + return false; return true; } @@ -722,6 +660,169 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa { DEBUG_LOG("DealDamage: victim just died"); Kill(pVictim, durabilityLoss); + + /*// find player: owner of controlled `this` or `this` itself maybe + Player *player = GetCharmerOrOwnerPlayerOrPlayerItself(); + + if(pVictim->GetTypeId() == TYPEID_UNIT && ((Creature*)pVictim)->GetLootRecipient()) + player = ((Creature*)pVictim)->GetLootRecipient(); + // Reward player, his pets, and group/raid members + // call kill spell proc event (before real die and combat stop to triggering auras removed at death/combat stop) + if(player && player!=pVictim) + { + if(player->RewardPlayerAndGroupAtKill(pVictim)) + player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL_AND_GET_XP, PROC_FLAG_KILLED, PROC_EX_NONE, 0); + else + player->ProcDamageAndSpell(pVictim, PROC_FLAG_NONE, PROC_FLAG_KILLED,PROC_EX_NONE, 0); + } + + DEBUG_LOG("DealDamageAttackStop"); + + // stop combat + pVictim->CombatStop(); + pVictim->getHostilRefManager().deleteReferences(); + + bool damageFromSpiritOfRedemtionTalent = spellProto && spellProto->Id == 27795; + + // if talent known but not triggered (check priest class for speedup check) + Aura* spiritOfRedemtionTalentReady = NULL; + if( !damageFromSpiritOfRedemtionTalent && // not called from SPELL_AURA_SPIRIT_OF_REDEMPTION + pVictim->GetTypeId()==TYPEID_PLAYER && pVictim->getClass()==CLASS_PRIEST ) + { + AuraList const& vDummyAuras = pVictim->GetAurasByType(SPELL_AURA_DUMMY); + for(AuraList::const_iterator itr = vDummyAuras.begin(); itr != vDummyAuras.end(); ++itr) + { + if((*itr)->GetSpellProto()->SpellIconID==1654) + { + spiritOfRedemtionTalentReady = *itr; + break; + } + } + } + + DEBUG_LOG("SET JUST_DIED"); + if(!spiritOfRedemtionTalentReady) + pVictim->setDeathState(JUST_DIED); + + DEBUG_LOG("DealDamageHealth1"); + + if(spiritOfRedemtionTalentReady) + { + // save value before aura remove + uint32 ressSpellId = pVictim->GetUInt32Value(PLAYER_SELF_RES_SPELL); + if(!ressSpellId) + ressSpellId = ((Player*)pVictim)->GetResurrectionSpellId(); + + //Remove all expected to remove at death auras (most important negative case like DoT or periodic triggers) + pVictim->RemoveAllAurasOnDeath(); + + // restore for use at real death + pVictim->SetUInt32Value(PLAYER_SELF_RES_SPELL,ressSpellId); + + // FORM_SPIRITOFREDEMPTION and related auras + pVictim->CastSpell(pVictim,27827,true,NULL,spiritOfRedemtionTalentReady); + } + else + pVictim->SetHealth(0); + + // remember victim PvP death for corpse type and corpse reclaim delay + // at original death (not at SpiritOfRedemtionTalent timeout) + if( pVictim->GetTypeId()==TYPEID_PLAYER && !damageFromSpiritOfRedemtionTalent ) + ((Player*)pVictim)->SetPvPDeath(player!=NULL); + + // Call KilledUnit for creatures + if (GetTypeId() == TYPEID_UNIT && ((Creature*)this)->AI()) + ((Creature*)this)->AI()->KilledUnit(pVictim); + + // achievement stuff + if ( pVictim->GetTypeId() == TYPEID_PLAYER) + { + if(GetTypeId() == TYPEID_UNIT) + ((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE, GetEntry()); + else if(GetTypeId() == TYPEID_PLAYER) + ((Player*)pVictim)->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_PLAYER, 1); + } + + // 10% durability loss on death + // clean InHateListOf + if (pVictim->GetTypeId() == TYPEID_PLAYER) + { + // only if not player and not controlled by player pet. And not at BG + if (durabilityLoss && !player && !((Player*)pVictim)->InBattleGround()) + { + DEBUG_LOG("We are dead, loosing 10 percents durability"); + ((Player*)pVictim)->DurabilityLossAll(0.10f,false); + // durability lost message + WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0); + ((Player*)pVictim)->GetSession()->SendPacket(&data); + } + } + else // creature died + { + DEBUG_LOG("DealDamageNotPlayer"); + Creature *cVictim = (Creature*)pVictim; + + if(!cVictim->isPet()) + { + cVictim->DeleteThreatList(); + cVictim->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + } + // Call creature just died function + if (cVictim->AI()) + cVictim->AI()->JustDied(this); + + // Dungeon specific stuff, only applies to players killing creatures + if(cVictim->GetInstanceId()) + { + Map *m = cVictim->GetMap(); + Player *creditedPlayer = GetCharmerOrOwnerPlayerOrPlayerItself(); + // TODO: do instance binding anyway if the charmer/owner is offline + + if(m->IsDungeon() && creditedPlayer) + { + if(m->IsRaid() || m->IsHeroic()) + { + if(cVictim->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND) + ((InstanceMap *)m)->PermBindAllPlayers(creditedPlayer); + } + else + { + // the reset time is set but not added to the scheduler + // until the players leave the instance + time_t resettime = cVictim->GetRespawnTimeEx() + 2 * HOUR; + if(InstanceSave *save = sInstanceSaveManager.GetInstanceSave(cVictim->GetInstanceId())) + if(save->GetResetTime() < resettime) save->SetResetTime(resettime); + } + } + } + } + + // last damage from non duel opponent or opponent controlled creature + if(duel_hasEnded) + { + assert(pVictim->GetTypeId()==TYPEID_PLAYER); + Player *he = (Player*)pVictim; + + assert(he->duel); + + he->duel->opponent->CombatStopWithPets(true); + he->CombatStopWithPets(true); + + he->DuelComplete(DUEL_INTERUPTED); + } + + // battleground things (do this at the end, so the death state flag will be properly set to handle in the bg->handlekill) + if(pVictim->GetTypeId() == TYPEID_PLAYER && ((Player*)pVictim)->InBattleGround()) + { + Player *killed = ((Player*)pVictim); + if(BattleGround *bg = killed->GetBattleGround()) + if(player) + bg->HandleKillPlayer(killed, player); + //later we can add support for creature->player kills here i'm + //not sure, but i guess those kills also get counted in av + //else if(GetTypeId() == TYPEID_UNIT) + // bg->HandleKillPlayer(killed,(Creature*)this); + }*/ } else // if (health <= damage) { @@ -752,7 +853,6 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa //if (!spellProto || !(spellProto->AuraInterruptFlags&AURA_INTERRUPT_FLAG_DIRECT_DAMAGE)) pVictim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_DIRECT_DAMAGE, spellProto ? spellProto->Id : 0); } - if (pVictim->GetTypeId() != TYPEID_PLAYER) { if(spellProto && IsDamageToThreatSpell(spellProto)) @@ -1061,419 +1161,6 @@ void Unit::CastSpell(GameObject *go, uint32 spellId, bool triggered, Item *castI spell->prepare(&targets, triggeredByAura); } -/* -void Unit::DealFlatDamage(Unit *pVictim, SpellEntry const *spellInfo, uint32 *damage, CleanDamage *cleanDamage, bool *crit, bool isTriggeredSpell) -{ - // TODO this in only generic way, check for exceptions - DEBUG_LOG("DealFlatDamage (BEFORE) >> DMG:%u", *damage); - - // Per-damage class calculation - switch (spellInfo->DmgClass) - { - // Melee and Ranged Spells - case SPELL_DAMAGE_CLASS_RANGED: - case SPELL_DAMAGE_CLASS_MELEE: - { - // Calculate physical outcome - MeleeHitOutcome outcome = RollPhysicalOutcomeAgainst(pVictim, BASE_ATTACK, spellInfo); - - //Used to store the Hit Outcome - cleanDamage->hitOutCome = outcome; - - // Return miss/evade first (sends miss message) - switch(outcome) - { - case MELEE_HIT_EVADE: - { - SendAttackStateUpdate(HITINFO_MISS, pVictim, 1, GetSpellSchoolMask(spellInfo), 0, 0,0,VICTIMSTATE_EVADES,0); - *damage = 0; - return; - } - case MELEE_HIT_MISS: - { - SendAttackStateUpdate(HITINFO_MISS, pVictim, 1, GetSpellSchoolMask(spellInfo), 0, 0,0,VICTIMSTATE_NORMAL,0); - *damage = 0; - - if(GetTypeId()== TYPEID_PLAYER) - ((Player*)this)->UpdateWeaponSkill(BASE_ATTACK); - - CastMeleeProcDamageAndSpell(pVictim,0,GetSpellSchoolMask(spellInfo),BASE_ATTACK,MELEE_HIT_MISS,spellInfo,isTriggeredSpell); - return; - } - } - - // Hitinfo, Victimstate - uint32 hitInfo = HITINFO_NORMALSWING; - VictimState victimState = VICTIMSTATE_NORMAL; - - // Physical Damage - if ( GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_NORMAL ) - { - // apply spellmod to Done damage - if(Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_DAMAGE, *damage); - - //Calculate armor mitigation - uint32 damageAfterArmor = CalcArmorReducedDamage(pVictim, *damage); - - // random durability for main hand weapon (ABSORB) - if(damageAfterArmor < *damage) - if(pVictim->GetTypeId() == TYPEID_PLAYER) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_ABSORB))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EquipmentSlots(urand(EQUIPMENT_SLOT_START,EQUIPMENT_SLOT_BACK))); - - cleanDamage->damage += *damage - damageAfterArmor; - *damage = damageAfterArmor; - } - // Magical Damage - else - { - // Calculate damage bonus - *damage = SpellDamageBonus(pVictim, spellInfo, *damage, SPELL_DIRECT_DAMAGE); - } - - // Classify outcome - switch (outcome) - { - case MELEE_HIT_BLOCK_CRIT: - case MELEE_HIT_CRIT: - { - uint32 bonusDmg = *damage; - - // Apply crit_damage bonus - if(Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRIT_DAMAGE_BONUS, bonusDmg); - - uint32 creatureTypeMask = pVictim->GetCreatureTypeMask(); - AuraList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS); - for(AuraList::const_iterator i = mDamageDoneVersus.begin();i != mDamageDoneVersus.end(); ++i) - if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue)) - bonusDmg = uint32(bonusDmg * ((*i)->GetModifierValue()+100.0f)/100.0f); - - *damage += bonusDmg; - - // Resilience - reduce crit damage - if (pVictim->GetTypeId()==TYPEID_PLAYER) - { - uint32 resilienceReduction = ((Player*)pVictim)->GetMeleeCritDamageReduction(*damage); - cleanDamage->damage += resilienceReduction; - *damage -= resilienceReduction; - } - - *crit = true; - hitInfo |= HITINFO_CRITICALHIT; - - ModifyAuraState(AURA_STATE_CRIT, true); - StartReactiveTimer( REACTIVE_CRIT ); - - if(getClass()==CLASS_HUNTER) - { - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, true); - StartReactiveTimer( REACTIVE_HUNTER_CRIT ); - } - - if ( outcome == MELEE_HIT_BLOCK_CRIT ) - { - uint32 blocked_amount = uint32(pVictim->GetShieldBlockValue()); - if (blocked_amount >= *damage) - { - hitInfo |= HITINFO_SWINGNOHITSOUND; - victimState = VICTIMSTATE_BLOCKS; - cleanDamage->damage += *damage; // To Help Calculate Rage - *damage = 0; - } - else - { - // To Help Calculate Rage - cleanDamage->damage += blocked_amount; - *damage = *damage - blocked_amount; - } - - pVictim->ModifyAuraState(AURA_STATE_DEFENSE, true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - { - // Update defense - ((Player*)pVictim)->UpdateDefense(); - - // random durability for main hand weapon (BLOCK) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_BLOCK))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_OFFHAND); - } - } - break; - } - case MELEE_HIT_PARRY: - { - cleanDamage->damage += *damage; // To Help Calculate Rage - *damage = 0; - victimState = VICTIMSTATE_PARRY; - - // Counter-attack ( explained in Unit::DoAttackDamage() ) - if(pVictim->GetTypeId()==TYPEID_PLAYER || !(((Creature*)pVictim)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN) ) - { - // Get attack timers - float offtime = float(pVictim->getAttackTimer(OFF_ATTACK)); - float basetime = float(pVictim->getAttackTimer(BASE_ATTACK)); - - // Reduce attack time - if (pVictim->haveOffhandWeapon() && offtime < basetime) - { - float percent20 = pVictim->GetAttackTime(OFF_ATTACK) * 0.20; - float percent60 = 3 * percent20; - if(offtime > percent20 && offtime <= percent60) - { - pVictim->setAttackTimer(OFF_ATTACK, uint32(percent20)); - } - else if(offtime > percent60) - { - offtime -= 2 * percent20; - pVictim->setAttackTimer(OFF_ATTACK, uint32(offtime)); - } - } - else - { - float percent20 = pVictim->GetAttackTime(BASE_ATTACK) * 0.20; - float percent60 = 3 * percent20; - if(basetime > percent20 && basetime <= percent60) - { - pVictim->setAttackTimer(BASE_ATTACK, uint32(percent20)); - } - else if(basetime > percent60) - { - basetime -= 2 * percent20; - pVictim->setAttackTimer(BASE_ATTACK, uint32(basetime)); - } - } - } - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - { - // Update victim defense ? - ((Player*)pVictim)->UpdateDefense(); - - // random durability for main hand weapon (PARRY) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_PARRY))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_MAINHAND); - } - - // Set parry flags - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYUNARMED); - - // Mongoose bite - set only Counterattack here - if (pVictim->getClass() == CLASS_HUNTER) - { - pVictim->ModifyAuraState(AURA_STATE_HUNTER_PARRY,true); - pVictim->StartReactiveTimer( REACTIVE_HUNTER_PARRY ); - } - else - { - pVictim->ModifyAuraState(AURA_STATE_DEFENSE, true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - } - break; - } - case MELEE_HIT_DODGE: - { - if(pVictim->GetTypeId() == TYPEID_PLAYER) - ((Player*)pVictim)->UpdateDefense(); - - cleanDamage->damage += *damage; // To Help Calculate Rage - *damage = 0; - hitInfo |= HITINFO_SWINGNOHITSOUND; - victimState = VICTIMSTATE_DODGE; - - // Set dodge flags - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYUNARMED); - - // Overpower - if (GetTypeId() == TYPEID_PLAYER && getClass() == CLASS_WARRIOR) - { - ((Player*)this)->AddComboPoints(pVictim, 1); - StartReactiveTimer( REACTIVE_OVERPOWER ); - } - - // Riposte - if (pVictim->getClass() != CLASS_ROGUE) - { - pVictim->ModifyAuraState(AURA_STATE_DEFENSE, true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - } - break; - } - case MELEE_HIT_BLOCK: - { - uint32 blocked_amount = uint32(pVictim->GetShieldBlockValue()); - if (blocked_amount >= *damage) - { - hitInfo |= HITINFO_SWINGNOHITSOUND; - victimState = VICTIMSTATE_BLOCKS; - cleanDamage->damage += *damage; // To Help Calculate Rage - *damage = 0; - } - else - { - // To Help Calculate Rage - cleanDamage->damage += blocked_amount; - *damage = *damage - blocked_amount; - } - - pVictim->ModifyAuraState(AURA_STATE_DEFENSE, true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - { - // Update defense - ((Player*)pVictim)->UpdateDefense(); - - // random durability for main hand weapon (BLOCK) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_BLOCK))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_OFFHAND); - } - break; - } - case MELEE_HIT_EVADE: // already processed early - case MELEE_HIT_MISS: // already processed early - case MELEE_HIT_GLANCING: - case MELEE_HIT_CRUSHING: - case MELEE_HIT_NORMAL: - break; - } - - // do all damage=0 cases here - if(*damage == 0) - CastMeleeProcDamageAndSpell(pVictim,0,GetSpellSchoolMask(spellInfo),BASE_ATTACK,outcome,spellInfo,isTriggeredSpell); - - break; - } - // Magical Attacks - case SPELL_DAMAGE_CLASS_NONE: - case SPELL_DAMAGE_CLASS_MAGIC: - { - // Calculate damage bonus - *damage = SpellDamageBonus(pVictim, spellInfo, *damage, SPELL_DIRECT_DAMAGE); - - *crit = isSpellCrit(pVictim, spellInfo, GetSpellSchoolMask(spellInfo), BASE_ATTACK); - if (*crit) - { - *damage = SpellCriticalBonus(spellInfo, *damage, pVictim); - - // Resilience - reduce crit damage - if (pVictim && pVictim->GetTypeId()==TYPEID_PLAYER) - { - uint32 damage_reduction = ((Player *)pVictim)->GetSpellCritDamageReduction(*damage); - if(*damage > damage_reduction) - *damage -= damage_reduction; - else - *damage = 0; - } - - cleanDamage->hitOutCome = MELEE_HIT_CRIT; - } - // spell proc all magic damage==0 case in this function - if(*damage == 0) - { - // Procflags - uint32 procAttacker = PROC_FLAG_HIT_SPELL; - uint32 procVictim = (PROC_FLAG_STRUCK_SPELL|PROC_FLAG_TAKE_DAMAGE); - - ProcDamageAndSpell(pVictim, procAttacker, procVictim, 0, GetSpellSchoolMask(spellInfo), spellInfo, isTriggeredSpell); - } - - break; - } - } - - // TODO this in only generic way, check for exceptions - DEBUG_LOG("DealFlatDamage (AFTER) >> DMG:%u", *damage); -} - -uint32 Unit::SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage, bool isTriggeredSpell, bool useSpellDamage) -{ - if(!this || !pVictim) - return 0; - if(!isAlive() || !pVictim->isAlive()) - return 0; - - SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellID); - if(!spellInfo) - return 0; - - CleanDamage cleanDamage = CleanDamage(0, BASE_ATTACK, MELEE_HIT_NORMAL); - bool crit = false; - - if (useSpellDamage) - DealFlatDamage(pVictim, spellInfo, &damage, &cleanDamage, &crit, isTriggeredSpell); - - // If we actually dealt some damage (spell proc's for 0 damage (normal and magic) called in DealFlatDamage) - if(damage > 0) - { - // Calculate absorb & resists - uint32 absorb = 0; - uint32 resist = 0; - - CalcAbsorbResist(pVictim,GetSpellSchoolMask(spellInfo), SPELL_DIRECT_DAMAGE, damage, &absorb, &resist); - - //No more damage left, target absorbed and/or resisted all damage - if (damage > absorb + resist) - damage -= absorb + resist; //Remove Absorbed and Resisted from damage actually dealt - else - { - uint32 HitInfo = HITINFO_SWINGNOHITSOUND; - - if (absorb) - HitInfo |= HITINFO_ABSORB; - if (resist) - { - HitInfo |= HITINFO_RESIST; - ProcDamageAndSpell(pVictim, PROC_FLAG_TARGET_RESISTS, PROC_FLAG_RESIST_SPELL, 0, GetSpellSchoolMask(spellInfo), spellInfo,isTriggeredSpell); - } - - //Send resist - SendAttackStateUpdate(HitInfo, pVictim, 1, GetSpellSchoolMask(spellInfo), damage, absorb,resist,VICTIMSTATE_NORMAL,0); - return 0; - } - - // Deal damage done - damage = DealDamage(pVictim, damage, &cleanDamage, SPELL_DIRECT_DAMAGE, GetSpellSchoolMask(spellInfo), spellInfo, true); - - // Send damage log - sLog.outDetail("SpellNonMeleeDamageLog: %u (TypeId: %u) attacked %u (TypeId: %u) for %u dmg inflicted by %u,absorb is %u,resist is %u", - GetGUIDLow(), GetTypeId(), pVictim->GetGUIDLow(), pVictim->GetTypeId(), damage, spellID, absorb,resist); - - // Actual log sent to client - SendSpellNonMeleeDamageLog(pVictim, spellID, damage + resist, GetSpellSchoolMask(spellInfo), absorb, resist, false, 0, crit); - - // Procflags - uint32 procAttacker = PROC_FLAG_HIT_SPELL; - uint32 procVictim = (PROC_FLAG_STRUCK_SPELL|PROC_FLAG_TAKE_DAMAGE); - - if (crit) - { - procAttacker |= PROC_FLAG_CRIT_SPELL; - procVictim |= PROC_FLAG_STRUCK_CRIT_SPELL; - } - - ProcDamageAndSpell(pVictim, procAttacker, procVictim, damage, GetSpellSchoolMask(spellInfo), spellInfo, isTriggeredSpell); - - return damage; - } - else - { - // all spell proc for 0 normal and magic damage called in DealFlatDamage - - //Check for rage - if(cleanDamage.damage) - // Rage from damage received. - if(pVictim->GetTypeId() == TYPEID_PLAYER && (pVictim->getPowerType() == POWER_RAGE)) - ((Player*)pVictim)->RewardRage(cleanDamage.damage, 0, false); - - return 0; - } -} -*/ - // Obsolete func need remove, here only for comotability vs another patches uint32 Unit::SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage, bool isTriggeredSpell, bool useSpellDamage) { @@ -1791,6 +1478,7 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da case MELEE_HIT_BLOCK: { damageInfo->TargetState = VICTIMSTATE_NORMAL; + damageInfo->HitInfo |= HITINFO_BLOCK; damageInfo->procEx|=PROC_EX_BLOCK; damageInfo->blocked_amount = damageInfo->target->GetShieldBlockValue(); if (damageInfo->blocked_amount >= damageInfo->damage) @@ -1982,11 +1670,13 @@ void Unit::DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss) //CalcAbsorbResist(pVictim, SpellSchools(spellProto->School), SPELL_DIRECT_DAMAGE, damage, &absorb, &resist); //damage-=absorb + resist; - WorldPacket data(SMSG_SPELLDAMAGESHIELD,(8+8+4+4)); + WorldPacket data(SMSG_SPELLDAMAGESHIELD,(8+8+4+4+4+4)); data << uint64(pVictim->GetGUID()); data << uint64(GetGUID()); + data << uint32(spellProto->Id); + data << uint32(damage); // Damage + data << uint32(0); // Overkill data << uint32(spellProto->SchoolMask); - data << uint32(damage); pVictim->SendMessageToSet(&data, true ); pVictim->DealDamage(this, damage, 0, SPELL_DIRECT_DAMAGE, GetSpellSchoolMask(spellProto), spellProto, true); @@ -2005,9 +1695,8 @@ void Unit::DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss) void Unit::HandleEmoteCommand(uint32 anim_id) { WorldPacket data( SMSG_EMOTE, 12 ); - data << anim_id << GetGUID(); - WPAssert(data.size() == 12); - + data << uint32(anim_id); + data << uint64(GetGUID()); SendMessageToSet(&data, true); } @@ -2116,7 +1805,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe int32 currentAbsorb; - //Reflective Shield + // Reflective Shield if ((pVictim != this) && (*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST && (*i)->GetSpellProto()->SpellFamilyFlags == 0x1) { if(Unit* caster = (*i)->GetCaster()) @@ -2262,457 +1951,6 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe *absorb = damage - RemainingDamage - *resist; } -/* -void Unit::DoAttackDamage (Unit *pVictim, uint32 *damage, CleanDamage *cleanDamage, uint32 *blocked_amount, SpellSchoolMask damageSchoolMask, uint32 *hitInfo, VictimState *victimState, uint32 *absorbDamage, uint32 *resistDamage, WeaponAttackType attType, SpellEntry const *spellCasted, bool isTriggeredSpell) -{ - MeleeHitOutcome outcome; - - // If is casted Melee spell, calculate like physical - if(!spellCasted) - outcome = RollMeleeOutcomeAgainst (pVictim, attType); - else - outcome = RollPhysicalOutcomeAgainst (pVictim, attType, spellCasted); - - if(outcome == MELEE_HIT_MISS ||outcome == MELEE_HIT_DODGE ||outcome == MELEE_HIT_BLOCK ||outcome == MELEE_HIT_PARRY) - pVictim->AddThreat(this, 0.0f); - switch(outcome) - { - case MELEE_HIT_EVADE: - { - *hitInfo |= HITINFO_MISS; - *damage = 0; - cleanDamage->damage = 0; - return; - } - case MELEE_HIT_MISS: - { - *hitInfo |= HITINFO_MISS; - *damage = 0; - cleanDamage->damage = 0; - if(GetTypeId()== TYPEID_PLAYER) - ((Player*)this)->UpdateWeaponSkill(attType); - return; - } - } - - /// If this is a creature and it attacks from behind it has a probability to daze it's victim - if( (outcome==MELEE_HIT_CRIT || outcome==MELEE_HIT_CRUSHING || outcome==MELEE_HIT_NORMAL || outcome==MELEE_HIT_GLANCING) && - GetTypeId() != TYPEID_PLAYER && !((Creature*)this)->GetCharmerOrOwnerGUID() && !pVictim->HasInArc(M_PI, this) - && pVictim->GetTypeId() == TYPEID_PLAYER) - { - // -probability is between 0% and 40% - // 20% base chance - float Probability = 20; - - //there is a newbie protection, at level 10 just 7% base chance; assuming linear function - if( pVictim->getLevel() < 30 ) - Probability = 0.65f*pVictim->getLevel()+0.5; - - uint32 VictimDefense=pVictim->GetDefenseSkillValue(this); - uint32 AttackerMeleeSkill=GetUnitMeleeSkill(pVictim); - - Probability *= AttackerMeleeSkill/(float)VictimDefense; - - if(Probability > 40.0f) - Probability = 40.0f; - - if(roll_chance_f(Probability)) - CastSpell(pVictim, 1604, true); - } - - //Calculate the damage after armor mitigation if SPELL_SCHOOL_NORMAL - if (damageSchoolMask & SPELL_SCHOOL_MASK_NORMAL) - { - uint32 damageAfterArmor = CalcArmorReducedDamage(pVictim, *damage); - - // random durability for main hand weapon (ABSORB) - if(damageAfterArmor < *damage) - if(pVictim->GetTypeId() == TYPEID_PLAYER) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_ABSORB))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EquipmentSlots(urand(EQUIPMENT_SLOT_START,EQUIPMENT_SLOT_BACK))); - - cleanDamage->damage += *damage - damageAfterArmor; - *damage = damageAfterArmor; - } - - if(GetTypeId() == TYPEID_PLAYER && pVictim->GetTypeId() != TYPEID_PLAYER && pVictim->GetCreatureType() != CREATURE_TYPE_CRITTER ) - ((Player*)this)->UpdateCombatSkills(pVictim, attType, outcome, false); - - if(GetTypeId() != TYPEID_PLAYER && pVictim->GetTypeId() == TYPEID_PLAYER) - ((Player*)pVictim)->UpdateCombatSkills(this, attType, outcome, true); - - switch (outcome) - { - case MELEE_HIT_BLOCK_CRIT: - case MELEE_HIT_CRIT: - { - *hitInfo = HITINFO_CRITICALHIT | HITINFO_NORMALSWING2 | HITINFO_UNK2; - - // Crit bonus calc - uint32 crit_bonus; - crit_bonus = *damage; - - // Apply crit_damage bonus for melee spells - if (spellCasted) - { - if(Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellCasted->Id, SPELLMOD_CRIT_DAMAGE_BONUS, crit_bonus); - - uint32 creatureTypeMask = pVictim->GetCreatureTypeMask(); - AuraList const& mDamageDoneVersus = GetAurasByType(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS); - for(AuraList::const_iterator i = mDamageDoneVersus.begin();i != mDamageDoneVersus.end(); ++i) - if(creatureTypeMask & uint32((*i)->GetModifier()->m_miscvalue)) - crit_bonus = uint32(crit_bonus * ((*i)->GetModifierValue()+100.0f)/100.0f); - } - - *damage += crit_bonus; - - uint32 resilienceReduction = 0; - - if(attType == RANGED_ATTACK) - { - int32 mod = pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE); - *damage = int32((*damage) * float((100.0f + mod)/100.0f)); - // Resilience - reduce crit damage - if (pVictim->GetTypeId()==TYPEID_PLAYER) - resilienceReduction = ((Player*)pVictim)->GetRangedCritDamageReduction(*damage); - } - else - { - int32 mod = pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE); - mod += GetTotalAuraModifier(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS_MELEE); - *damage = int32((*damage) * float((100.0f + mod)/100.0f)); - // Resilience - reduce crit damage - if (pVictim->GetTypeId()==TYPEID_PLAYER) - resilienceReduction = ((Player*)pVictim)->GetMeleeCritDamageReduction(*damage); - } - - *damage -= resilienceReduction; - cleanDamage->damage += resilienceReduction; - - if(GetTypeId() == TYPEID_PLAYER && pVictim->GetTypeId() != TYPEID_PLAYER && pVictim->GetCreatureType() != CREATURE_TYPE_CRITTER ) - ((Player*)this)->UpdateWeaponSkill(attType); - - ModifyAuraState(AURA_STATE_CRIT, true); - StartReactiveTimer( REACTIVE_CRIT ); - - if(getClass()==CLASS_HUNTER) - { - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, true); - StartReactiveTimer( REACTIVE_HUNTER_CRIT ); - } - - if ( outcome == MELEE_HIT_BLOCK_CRIT ) - { - *blocked_amount = pVictim->GetShieldBlockValue(); - - if (pVictim->GetUnitBlockChance()) - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYSHIELD); - else - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYUNARMED); - - //Only set VICTIMSTATE_BLOCK on a full block - if (*blocked_amount >= uint32(*damage)) - { - *victimState = VICTIMSTATE_BLOCKS; - *blocked_amount = uint32(*damage); - } - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - { - // Update defense - ((Player*)pVictim)->UpdateDefense(); - - // random durability for main hand weapon (BLOCK) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_BLOCK))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_OFFHAND); - } - - pVictim->ModifyAuraState(AURA_STATE_DEFENSE,true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - break; - } - - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_WOUNDCRITICAL); - break; - } - case MELEE_HIT_PARRY: - { - if(attType == RANGED_ATTACK) //range attack - no parry - { - outcome = MELEE_HIT_NORMAL; - break; - } - - cleanDamage->damage += *damage; - *damage = 0; - *victimState = VICTIMSTATE_PARRY; - - // instant (maybe with small delay) counter attack - { - float offtime = float(pVictim->getAttackTimer(OFF_ATTACK)); - float basetime = float(pVictim->getAttackTimer(BASE_ATTACK)); - - // after parry nearest next attack time will reduced at %40 from full attack time. - // The delay cannot be reduced to less than 20% of your weapon base swing delay. - if (pVictim->haveOffhandWeapon() && offtime < basetime) - { - float percent20 = pVictim->GetAttackTime(OFF_ATTACK)*0.20; - float percent60 = 3*percent20; - // set to 20% if in range 20%...20+40% of full time - if(offtime > percent20 && offtime <= percent60) - { - pVictim->setAttackTimer(OFF_ATTACK,uint32(percent20)); - } - // decrease at %40 from full time - else if(offtime > percent60) - { - offtime -= 2*percent20; - pVictim->setAttackTimer(OFF_ATTACK,uint32(offtime)); - } - // ELSE not changed - } - else - { - float percent20 = pVictim->GetAttackTime(BASE_ATTACK)*0.20; - float percent60 = 3*percent20; - // set to 20% if in range 20%...20+40% of full time - if(basetime > percent20 && basetime <= percent60) - { - pVictim->setAttackTimer(BASE_ATTACK,uint32(percent20)); - } - // decrease at %40 from full time - else if(basetime > percent60) - { - basetime -= 2*percent20; - pVictim->setAttackTimer(BASE_ATTACK,uint32(basetime)); - } - // ELSE not changed - } - } - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - { - // Update victim defense ? - ((Player*)pVictim)->UpdateDefense(); - - // random durability for main hand weapon (PARRY) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_PARRY))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_MAINHAND); - } - - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYUNARMED); - - if (pVictim->getClass() == CLASS_HUNTER) - { - pVictim->ModifyAuraState(AURA_STATE_HUNTER_PARRY,true); - pVictim->StartReactiveTimer( REACTIVE_HUNTER_PARRY ); - } - else - { - pVictim->ModifyAuraState(AURA_STATE_DEFENSE, true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - } - - CastMeleeProcDamageAndSpell(pVictim, 0, damageSchoolMask, attType, outcome, spellCasted, isTriggeredSpell); - return; - } - case MELEE_HIT_DODGE: - { - if(attType == RANGED_ATTACK) //range attack - no dodge - { - outcome = MELEE_HIT_NORMAL; - break; - } - - cleanDamage->damage += *damage; - *damage = 0; - *victimState = VICTIMSTATE_DODGE; - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - ((Player*)pVictim)->UpdateDefense(); - - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYUNARMED); - - if (pVictim->getClass() != CLASS_ROGUE) // Riposte - { - pVictim->ModifyAuraState(AURA_STATE_DEFENSE, true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - } - - // Overpower - if (GetTypeId() == TYPEID_PLAYER && getClass() == CLASS_WARRIOR) - { - ((Player*)this)->AddComboPoints(pVictim, 1); - StartReactiveTimer( REACTIVE_OVERPOWER ); - } - - CastMeleeProcDamageAndSpell(pVictim, 0, damageSchoolMask, attType, outcome, spellCasted, isTriggeredSpell); - return; - } - case MELEE_HIT_BLOCK: - { - *blocked_amount = pVictim->GetShieldBlockValue(); - - if (pVictim->GetUnitBlockChance()) - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYSHIELD); - else - pVictim->HandleEmoteCommand(EMOTE_ONESHOT_PARRYUNARMED); - - //Only set VICTIMSTATE_BLOCK on a full block - if (*blocked_amount >= uint32(*damage)) - { - *victimState = VICTIMSTATE_BLOCKS; - *blocked_amount = uint32(*damage); - } - - if(pVictim->GetTypeId() == TYPEID_PLAYER) - { - // Update defense - ((Player*)pVictim)->UpdateDefense(); - - // random durability for main hand weapon (BLOCK) - if (roll_chance_f(sWorld.getRate(RATE_DURABILITY_LOSS_BLOCK))) - ((Player*)pVictim)->DurabilityPointLossForEquipSlot(EQUIPMENT_SLOT_OFFHAND); - } - - pVictim->ModifyAuraState(AURA_STATE_DEFENSE,true); - pVictim->StartReactiveTimer( REACTIVE_DEFENSE ); - - break; - } - case MELEE_HIT_GLANCING: - { -<<<<<<< HEAD:src/game/Unit.cpp - int32 leveldif = int32(pVictim->getLevel()) - int32(getLevel()); - if (leveldif > 3) leveldif = 3; - *damage *= (1 - leveldif * 0.1f); - cleanDamage->damage = *damage; -======= - float reducePercent = 1.0f; //damage factor - - // calculate base values and mods - float baseLowEnd = 1.3; - float baseHighEnd = 1.2; - switch(getClass()) // lowering base values for casters - { - case CLASS_SHAMAN: - case CLASS_PRIEST: - case CLASS_MAGE: - case CLASS_WARLOCK: - case CLASS_DRUID: - baseLowEnd -= 0.7; - baseHighEnd -= 0.3; - break; - } - - float maxLowEnd = 0.6; - switch(getClass()) // upper for melee classes - { - case CLASS_WARRIOR: - case CLASS_ROGUE: - case CLASS_DEATH_KNIGHT: - maxLowEnd = 0.91; //If the attacker is a melee class then instead the lower value of 0.91 - } - - // calculate values - int32 diff = int32(pVictim->GetDefenseSkillValue(this)) - int32(GetWeaponSkillValue(attType,pVictim)); - float lowEnd = baseLowEnd - ( 0.05f * diff ); - float highEnd = baseHighEnd - ( 0.03f * diff ); - - // apply max/min bounds - if ( lowEnd < 0.01f ) //the low end must not go bellow 0.01f - lowEnd = 0.01f; - else if ( lowEnd > maxLowEnd ) //the smaller value of this and 0.6 is kept as the low end - lowEnd = maxLowEnd; - - if ( highEnd < 0.2f ) //high end limits - highEnd = 0.2f; - if ( highEnd > 0.99f ) - highEnd = 0.99f; - - if(lowEnd > highEnd) // prevent negative range size - lowEnd = highEnd; - - reducePercent = lowEnd + rand_norm() * ( highEnd - lowEnd ); - - *damage = uint32(reducePercent * *damage); - cleanDamage->damage += *damage; ->>>>>>> upstream/master:src/game/Unit.cpp - *hitInfo |= HITINFO_GLANCING; - break; - } - case MELEE_HIT_CRUSHING: - { - // 150% normal damage - *damage += (*damage / 2); - cleanDamage->damage = *damage; - *hitInfo |= HITINFO_CRUSHING; - // TODO: victimState, victim animation? - break; - } - default: - break; - } - - // apply melee damage bonus and absorb only if base damage not fully blocked to prevent negative damage or damage with full block - if(*victimState != VICTIMSTATE_BLOCKS) - { - MeleeDamageBonus(pVictim, damage,attType,spellCasted); - CalcAbsorbResist(pVictim, damageSchoolMask, DIRECT_DAMAGE, *damage-*blocked_amount, absorbDamage, resistDamage); - } - - if (*absorbDamage) *hitInfo |= HITINFO_ABSORB; - if (*resistDamage) *hitInfo |= HITINFO_RESIST; - - cleanDamage->damage += *blocked_amount; - - if (*damage <= *absorbDamage + *resistDamage + *blocked_amount) - { - //*hitInfo = 0x00010020; - //*hitInfo |= HITINFO_SWINGNOHITSOUND; - //*damageType = 0; - CastMeleeProcDamageAndSpell(pVictim, 0, damageSchoolMask, attType, outcome, spellCasted, isTriggeredSpell); - return; - } - - // update at damage Judgement aura duration that applied by attacker at victim - if(*damage) - { - AuraMap const& vAuras = pVictim->GetAuras(); - for(AuraMap::const_iterator itr = vAuras.begin(); itr != vAuras.end(); ++itr) - { - SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); - if( (spellInfo->AttributesEx3 & 0x40000) && spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && - ((*itr).second->GetCasterGUID() == GetGUID() && (!spellCasted || spellCasted->Id == 35395)) ) - { - (*itr).second->SetAuraDuration((*itr).second->GetAuraMaxDuration()); - (*itr).second->SendAuraUpdate(false); - } - } - } - - CastMeleeProcDamageAndSpell(pVictim, (*damage - *absorbDamage pVictim->SpellNonMeleeDamageLog(this, (*i)->GetId(), (*i)->GetModifier()->m_amount, false, false);eld - // yet another hack to fix crashes related to the aura getting removed during iteration - std::set<Aura*> alreadyDone; - uint32 removedAuras = pVictim->m_removedAuras; - AuraList const& vDamageShields = pVictim->GetAurasByType(SPELL_AURA_DAMAGE_SHIELD); - for(AuraList::const_iterator i = vDamageShields.begin(), next = vDamageShields.begin(); i != vDamageShields.end(); i = next) - { - ++next; - if (alreadyDone.find(*i) == alreadyDone.end()) - { - alreadyDone.insert(*i); - pVictim->SpellNonMeleeDamageLog(this, (*i)->GetId(), (*i)->GetModifierValue(), false, false); - if (pVictim->m_removedAuras > removedAuras) - { - removedAuras = pVictim->m_removedAuras; - next = vDamageShields.begin(); - } - } - } -}*/ - void Unit::AttackerStateUpdate (Unit *pVictim, WeaponAttackType attType, bool extra ) { if(hasUnitState(UNIT_STAT_CANNOT_AUTOATTACK) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED) ) @@ -2779,66 +2017,6 @@ void Unit::AttackerStateUpdate (Unit *pVictim, WeaponAttackType attType, bool ex } } -/* -MeleeHitOutcome Unit::RollPhysicalOutcomeAgainst (Unit const *pVictim, WeaponAttackType attType, SpellEntry const *spellInfo) -{ - // Miss chance based on melee - float miss_chance = MeleeMissChanceCalc(pVictim, attType); - - // Critical hit chance - float crit_chance = GetUnitCriticalChance(attType, pVictim); - // this is to avoid compiler issue when declaring variables inside if - float block_chance, parry_chance, dodge_chance; - - // cannot be dodged/parried/blocked - if(spellInfo->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK) - { - block_chance = 0.0f; - parry_chance = 0.0f; - dodge_chance = 0.0f; - } - else - { - // parry can be avoided only by some abilities - parry_chance = pVictim->GetUnitParryChance(); - // block might be bypassed by it as well - block_chance = pVictim->GetUnitBlockChance(); - // stunned target cannot dodge and this is check in GetUnitDodgeChance() - dodge_chance = pVictim->GetUnitDodgeChance(); - } - - // Only players can have Talent&Spell bonuses - if (GetTypeId() == TYPEID_PLAYER) - { - // Increase from SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL aura - crit_chance += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, spellInfo->SchoolMask); - // Ignore combat result aura - AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); - for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) - { - if (!(*i)->isAffectedOnSpell(spellInfo)) - continue; - switch((*i)->GetModifier()->m_miscvalue) - { - case MELEE_HIT_DODGE: dodge_chance = 0.0f; break; - case MELEE_HIT_BLOCK: block_chance = 0.0f; break; - case MELEE_HIT_PARRY: parry_chance = 0.0f; break; - default: - DEBUG_LOG("Spell %u SPELL_AURA_IGNORE_COMBAT_RESULT have unhandled state %d", (*i)->GetId(), (*i)->GetModifier()->m_miscvalue); - break; - } - } - } - - // Spellmods - if(Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CRITICAL_CHANCE, crit_chance); - - DEBUG_LOG("PHYSICAL OUTCOME: miss %f crit %f dodge %f parry %f block %f",miss_chance,crit_chance,dodge_chance,parry_chance, block_chance); - - return RollMeleeOutcomeAgainst(pVictim, attType, int32(crit_chance*100), int32(miss_chance*100),int32(dodge_chance*100),int32(parry_chance*100),int32(block_chance*100), true); -}*/ - MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(const Unit *pVictim, WeaponAttackType attType) const { // This is only wrapper @@ -3113,6 +2291,15 @@ bool Unit::isSpellBlocked(Unit *pVictim, SpellEntry const *spellProto, WeaponAtt { if (pVictim->HasInArc(M_PI,this)) { + // Ignore combat result aura (parry/dodge check on prepare) + AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); + for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) + { + if (!(*i)->isAffectedOnSpell(spellProto)) + continue; + if ((*i)->GetModifier()->m_miscvalue == MELEE_HIT_BLOCK) + return false; + } float blockChance = GetUnitBlockChance(); blockChance += (GetWeaponSkillValue(attackType) - pVictim->GetMaxSkillValueForLevel() )*0.04; if (roll_chance_f(blockChance)) @@ -3123,22 +2310,18 @@ bool Unit::isSpellBlocked(Unit *pVictim, SpellEntry const *spellProto, WeaponAtt // Melee based spells can be miss, parry or dodge on this step // Crit or block - determined on damage calculation phase! (and can be both in some time) -float Unit::MeleeSpellMissChance(const Unit *pVictim, WeaponAttackType attType, int32 skillDiff, uint32 spellId) const +/*float Unit::MeleeSpellMissChance(Unit *pVictim, WeaponAttackType attType, int32 skillDiff, SpellEntry const *spell) { // Calculate hit chance (more correct for chance mod) int32 HitChance; // PvP - PvE melee chances - /*int32 lchance = pVictim->GetTypeId() == TYPEID_PLAYER ? 5 : 7; + int32 lchance = pVictim->GetTypeId() == TYPEID_PLAYER ? 5 : 7; int32 leveldif = pVictim->getLevelForTarget(this) - getLevelForTarget(pVictim); if(leveldif < 3) HitChance = 95 - leveldif; else - HitChance = 93 - (leveldif - 2) * lchance;*/ - if (spellId || attType == RANGED_ATTACK || !haveOffhandWeapon()) - HitChance = 95.0f; - else - HitChance = 76.0f; + HitChance = 93 - (leveldif - 2) * lchance; // Hit chance depends from victim auras if(attType == RANGED_ATTACK) @@ -3147,11 +2330,8 @@ float Unit::MeleeSpellMissChance(const Unit *pVictim, WeaponAttackType attType, HitChance += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE); // Spellmod from SPELLMOD_RESIST_MISS_CHANCE - if(spellId) - { - if(Player *modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellId, SPELLMOD_RESIST_MISS_CHANCE, HitChance); - } + if(Player *modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spell->Id, SPELLMOD_RESIST_MISS_CHANCE, HitChance); // Miss = 100 - hit float miss_chance= 100.0f - HitChance; @@ -3163,12 +2343,7 @@ float Unit::MeleeSpellMissChance(const Unit *pVictim, WeaponAttackType attType, miss_chance -= m_modMeleeHitChance; // bonus from skills is 0.04% - //miss_chance -= skillDiff * 0.04f; - int32 diff = -skillDiff; - if(pVictim->GetTypeId()==TYPEID_PLAYER) - miss_chance += diff > 0 ? diff * 0.04 : diff * 0.02; - else - miss_chance += diff > 10 ? 2 + (diff - 10) * 0.4 : diff * 0.1; + miss_chance -= skillDiff * 0.04f; // Limit miss chance from 0 to 60% if (miss_chance < 0.0f) @@ -3176,7 +2351,7 @@ float Unit::MeleeSpellMissChance(const Unit *pVictim, WeaponAttackType attType, if (miss_chance > 60.0f) return 60.0f; return miss_chance; -} +}*/ // Melee based spells hit result calculations SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell) @@ -3192,68 +2367,82 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell) int32 fullSkillDiff = attackerWeaponSkill - int32(pVictim->GetDefenseSkillValue(this)); uint32 roll = urand (0, 10000); - uint32 missChance = uint32(MeleeSpellMissChance(pVictim, attType, fullSkillDiff, spell->Id)*100.0f); + uint32 missChance = uint32(MeleeSpellMissChance(pVictim, attType, fullSkillDiff, spell->Id)*100.0f); // Roll miss uint32 tmp = missChance; if (roll < tmp) return SPELL_MISS_MISS; + bool canDodge = true; + bool canParry = true; + // Same spells cannot be parry/dodge if (spell->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK) return SPELL_MISS_NONE; - // Ranged attack can`t miss too + // Ranged attack cannot be parry/dodge if (attType == RANGED_ATTACK) return SPELL_MISS_NONE; - bool attackFromBehind = !pVictim->HasInArc(M_PI,this); - - // Roll dodge - int32 dodgeChance = int32(pVictim->GetUnitDodgeChance()*100.0f) - skillDiff * 4; - // Reduce enemy dodge chance by SPELL_AURA_MOD_COMBAT_RESULT_CHANCE - dodgeChance+= GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_COMBAT_RESULT_CHANCE, VICTIMSTATE_DODGE); - - // Reduce dodge chance by attacker expertise rating - if (GetTypeId() == TYPEID_PLAYER) - dodgeChance-=int32(((Player*)this)->GetExpertiseDodgeOrParryReduction(attType) * 100.0f); - if (dodgeChance < 0) - dodgeChance = 0; - - // Can`t dodge from behind in PvP (but its possible in PvE) - if (GetTypeId() == TYPEID_PLAYER && pVictim->GetTypeId() == TYPEID_PLAYER && attackFromBehind) - dodgeChance = 0; + // Check for attack from behind + if (!pVictim->HasInArc(M_PI,this)) + { + // Can`t dodge from behind in PvP (but its possible in PvE) + if (GetTypeId() == TYPEID_PLAYER && pVictim->GetTypeId() == TYPEID_PLAYER) + canDodge = false; + // Can`t parry + canParry = false; + } - // Rogue talent`s cant be dodged - AuraList const& mCanNotBeDodge = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); - for(AuraList::const_iterator i = mCanNotBeDodge.begin(); i != mCanNotBeDodge.end(); ++i) + // Ignore combat result aura + AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); + for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) { - if((*i)->GetModifier()->m_miscvalue == VICTIMSTATE_DODGE) // can't be dodged rogue finishing move + if (!(*i)->isAffectedOnSpell(spell)) + continue; + switch((*i)->GetModifier()->m_miscvalue) { - if(spell->SpellFamilyName==SPELLFAMILY_ROGUE && (spell->SpellFamilyFlags & SPELLFAMILYFLAG_ROGUE__FINISHING_MOVE)) - { - dodgeChance = 0; + case MELEE_HIT_DODGE: canDodge = false; break; + case MELEE_HIT_BLOCK: break; // Block check in hit step + case MELEE_HIT_PARRY: canParry = false; break; + default: + DEBUG_LOG("Spell %u SPELL_AURA_IGNORE_COMBAT_RESULT have unhandled state %d", (*i)->GetId(), (*i)->GetModifier()->m_miscvalue); break; - } } } - tmp += dodgeChance; - if (roll < tmp) - return SPELL_MISS_DODGE; + if (canDodge) + { + // Roll dodge + int32 dodgeChance = int32(pVictim->GetUnitDodgeChance()*100.0f) - skillDiff * 4; + // Reduce enemy dodge chance by SPELL_AURA_MOD_COMBAT_RESULT_CHANCE + dodgeChance+= GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_COMBAT_RESULT_CHANCE, VICTIMSTATE_DODGE); + // Reduce dodge chance by attacker expertise rating + if (GetTypeId() == TYPEID_PLAYER) + dodgeChance-=int32(((Player*)this)->GetExpertiseDodgeOrParryReduction(attType) * 100.0f); + if (dodgeChance < 0) + dodgeChance = 0; - // Roll parry - int32 parryChance = int32(pVictim->GetUnitParryChance()*100.0f) - skillDiff * 4; - // Reduce parry chance by attacker expertise rating - if (GetTypeId() == TYPEID_PLAYER) - parryChance-=int32(((Player*)this)->GetExpertiseDodgeOrParryReduction(attType) * 100.0f); - // Can`t parry from behind - if (parryChance < 0 || attackFromBehind) - parryChance = 0; + tmp += dodgeChance; + if (roll < tmp) + return SPELL_MISS_DODGE; + } - tmp += parryChance; - if (roll < tmp) - return SPELL_MISS_PARRY; + if (canParry) + { + // Roll parry + int32 parryChance = int32(pVictim->GetUnitParryChance()*100.0f) - skillDiff * 4; + // Reduce parry chance by attacker expertise rating + if (GetTypeId() == TYPEID_PLAYER) + parryChance-=int32(((Player*)this)->GetExpertiseDodgeOrParryReduction(attType) * 100.0f); + if (parryChance < 0) + parryChance = 0; + + tmp += parryChance; + if (roll < tmp) + return SPELL_MISS_PARRY; + } return SPELL_MISS_NONE; } @@ -4964,6 +4153,7 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage *log) data.append(log->attacker->GetPackGUID()); data << uint32(log->SpellID); data << uint32(log->damage); //damage amount + data << uint32(0); data << uint8 (log->schoolMask); //damage school data << uint32(log->absorb); //AbsorbedDamage data << uint32(log->resist); //resist @@ -5022,25 +4212,65 @@ void Unit::SendSpellMiss(Unit *target, uint32 spellID, SpellMissInfo missInfo) void Unit::SendAttackStateUpdate(CalcDamageInfo *damageInfo) { - WorldPacket data(SMSG_ATTACKERSTATEUPDATE, (16+84)); // we guess size + uint32 count = 1; + WorldPacket data(SMSG_ATTACKERSTATEUPDATE, (16+45)); // we guess size data << (uint32)damageInfo->HitInfo; data.append(GetPackGUID()); data.append(damageInfo->target->GetPackGUID()); data << (uint32)(damageInfo->damage); // Full damage + data << uint32(0); // overkill value + + data << (uint8)count; // Sub damage count + + for(int i = 0; i < count; ++i) + { + data << (uint32)(damageInfo->damageSchoolMask); // School of sub damage + data << (float)damageInfo->damage; // sub damage + data << (uint32)damageInfo->damage; // Sub Damage + } + + if(damageInfo->HitInfo & (HITINFO_ABSORB | HITINFO_ABSORB2)) + { + for(int i = 0; i < count; ++i) + data << (uint32)damageInfo->absorb; // Absorb + } + + if(damageInfo->HitInfo & (HITINFO_RESIST | HITINFO_RESIST2)) + { + for(int i = 0; i < count; ++i) + data << (uint32)damageInfo->resist; // Resist + } - data << (uint8)1; // Sub damage count - //=== Sub damage description - data << (uint32)(damageInfo->damageSchoolMask); // School of sub damage - data << (float)damageInfo->damage; // sub damage - data << (uint32)damageInfo->damage; // Sub Damage - data << (uint32)damageInfo->absorb; // Absorb - data << (uint32)damageInfo->resist; // Resist - //================================================= data << (uint32)damageInfo->TargetState; data << (uint32)0; data << (uint32)0; - data << (uint32)damageInfo->blocked_amount; - SendMessageToSet( &data, true );/**/ + + if(damageInfo->HitInfo & HITINFO_BLOCK) + data << (uint32)damageInfo->blocked_amount; + + if(damageInfo->HitInfo & HITINFO_UNK3) + data << uint32(0); + + if(damageInfo->HitInfo & HITINFO_UNK1) + { + data << uint32(0); + data << float(0); + data << float(0); + data << float(0); + data << float(0); + data << float(0); + data << float(0); + data << float(0); + data << float(0); + for(uint8 i = 0; i < 5; ++i) + { + data << float(0); + data << float(0); + } + data << uint32(0); + } + + SendMessageToSet( &data, true ); } void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit *target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount) @@ -5111,141 +4341,6 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit *target, uint8 SwingType, SendMessageToSet( &data, true ); } -/* -void Unit::ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 damage, SpellSchoolMask damageSchoolMask, SpellEntry const *procSpell, bool isTriggeredSpell, WeaponAttackType attType) -{ - sLog.outDebug("ProcDamageAndSpell: attacker flags are 0x%x, victim flags 0x%x", procAttacker, procVictim); - if(procSpell) - sLog.outDebug("ProcDamageAndSpell: invoked due to spell id %u %s", procSpell->Id, (isTriggeredSpell?"(triggered)":"")); - - // Assign melee/ranged proc flags for magic attacks, that are actually melee/ranged abilities - // not assign for spell proc triggered spell to prevent infinity (or unexpected 2-3 times) melee damage spell proc call with melee damage effect - // That is the question though if it's fully correct - if(procSpell && !isTriggeredSpell) - { - if(procSpell->DmgClass == SPELL_DAMAGE_CLASS_MELEE) - { - if(procAttacker & PROC_FLAG_HIT_SPELL) procAttacker |= PROC_FLAG_HIT_MELEE; - if(procAttacker & PROC_FLAG_CRIT_SPELL) procAttacker |= PROC_FLAG_CRIT_MELEE; - if(procVictim & PROC_FLAG_STRUCK_SPELL) procVictim |= PROC_FLAG_STRUCK_MELEE; - if(procVictim & PROC_FLAG_STRUCK_CRIT_SPELL) procVictim |= PROC_FLAG_STRUCK_CRIT_MELEE; - attType = BASE_ATTACK; // Melee abilities are assumed to be dealt with mainhand weapon - } - else if (procSpell->DmgClass == SPELL_DAMAGE_CLASS_RANGED) - { - if(procAttacker & PROC_FLAG_HIT_SPELL) procAttacker |= PROC_FLAG_HIT_RANGED; - if(procAttacker & PROC_FLAG_CRIT_SPELL) procAttacker |= PROC_FLAG_CRIT_RANGED; - if(procVictim & PROC_FLAG_STRUCK_SPELL) procVictim |= PROC_FLAG_STRUCK_RANGED; - if(procVictim & PROC_FLAG_STRUCK_CRIT_SPELL) procVictim |= PROC_FLAG_STRUCK_CRIT_RANGED; - attType = RANGED_ATTACK; - } - } - if(damage && (procVictim & (PROC_FLAG_STRUCK_MELEE|PROC_FLAG_STRUCK_RANGED|PROC_FLAG_STRUCK_SPELL))) - procVictim |= (PROC_FLAG_TAKE_DAMAGE|PROC_FLAG_TOUCH); - - // Not much to do if no flags are set. - if (procAttacker) - { - // processing auras that not generate casts at proc event before auras that generate casts to prevent proc aura added at prev. proc aura execute in set - ProcDamageAndSpellFor(false,pVictim,procAttacker,attackerProcEffectAuraTypes,attType, procSpell, damage, damageSchoolMask); - ProcDamageAndSpellFor(false,pVictim,procAttacker,attackerProcCastAuraTypes,attType, procSpell, damage, damageSchoolMask); - } - - // Now go on with a victim's events'n'auras - // Not much to do if no flags are set or there is no victim - if(pVictim && pVictim->isAlive() && procVictim) - { - // processing auras that not generate casts at proc event before auras that generate casts to prevent proc aura added at prev. proc aura execute in set - pVictim->ProcDamageAndSpellFor(true,this,procVictim,victimProcEffectAuraTypes,attType,procSpell, damage, damageSchoolMask); - pVictim->ProcDamageAndSpellFor(true,this,procVictim,victimProcCastAuraTypes,attType,procSpell, damage, damageSchoolMask); - } -} - -void Unit::CastMeleeProcDamageAndSpell(Unit* pVictim, uint32 damage, SpellSchoolMask damageSchoolMask, WeaponAttackType attType, MeleeHitOutcome outcome, SpellEntry const *spellCasted, bool isTriggeredSpell) -{ - if(!pVictim) - return; - - uint32 procAttacker = PROC_FLAG_NONE; - uint32 procVictim = PROC_FLAG_NONE; - - switch(outcome) - { - case MELEE_HIT_EVADE: - return; - case MELEE_HIT_MISS: - if(attType == BASE_ATTACK || attType == OFF_ATTACK) - { - procAttacker = PROC_FLAG_MISS; - } - break; - case MELEE_HIT_BLOCK_CRIT: - case MELEE_HIT_CRIT: - if(spellCasted && attType == BASE_ATTACK) - { - procAttacker |= PROC_FLAG_CRIT_SPELL; - procVictim |= PROC_FLAG_STRUCK_CRIT_SPELL; - if ( outcome == MELEE_HIT_BLOCK_CRIT ) - { - procVictim |= PROC_FLAG_BLOCK; - procAttacker |= PROC_FLAG_TARGET_BLOCK; - } - } - else if(attType == BASE_ATTACK || attType == OFF_ATTACK) - { - procAttacker = PROC_FLAG_HIT_MELEE | PROC_FLAG_CRIT_MELEE; - procVictim = PROC_FLAG_STRUCK_MELEE | PROC_FLAG_STRUCK_CRIT_MELEE; - } - else - { - procAttacker = PROC_FLAG_HIT_RANGED | PROC_FLAG_CRIT_RANGED; - procVictim = PROC_FLAG_STRUCK_RANGED | PROC_FLAG_STRUCK_CRIT_RANGED; - } - break; - case MELEE_HIT_PARRY: - procAttacker = PROC_FLAG_TARGET_DODGE_OR_PARRY; - procVictim = PROC_FLAG_PARRY; - break; - case MELEE_HIT_BLOCK: - procAttacker = PROC_FLAG_TARGET_BLOCK; - procVictim = PROC_FLAG_BLOCK; - break; - case MELEE_HIT_DODGE: - procAttacker = PROC_FLAG_TARGET_DODGE_OR_PARRY; - procVictim = PROC_FLAG_DODGE; - break; - case MELEE_HIT_CRUSHING: - if(attType == BASE_ATTACK || attType == OFF_ATTACK) - { - procAttacker = PROC_FLAG_HIT_MELEE | PROC_FLAG_CRIT_MELEE; - procVictim = PROC_FLAG_STRUCK_MELEE | PROC_FLAG_STRUCK_CRIT_MELEE; - } - else - { - procAttacker = PROC_FLAG_HIT_RANGED | PROC_FLAG_CRIT_RANGED; - procVictim = PROC_FLAG_STRUCK_RANGED | PROC_FLAG_STRUCK_CRIT_RANGED; - } - break; - default: - if(attType == BASE_ATTACK || attType == OFF_ATTACK) - { - procAttacker = PROC_FLAG_HIT_MELEE; - procVictim = PROC_FLAG_STRUCK_MELEE; - } - else - { - procAttacker = PROC_FLAG_HIT_RANGED; - procVictim = PROC_FLAG_STRUCK_RANGED; - } - break; - } - - if(damage > 0) - procVictim |= PROC_FLAG_TAKE_DAMAGE; - - if(procAttacker != PROC_FLAG_NONE || procVictim != PROC_FLAG_NONE) - ProcDamageAndSpell(pVictim, procAttacker, procVictim, damage, damageSchoolMask, spellCasted, isTriggeredSpell, attType); -}*/ bool Unit::HandleHasteAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAura, SpellEntry const * procSpell, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown) { @@ -6484,668 +5579,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return true; } -/* -bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredByAura, SpellEntry const *procSpell, uint32 procFlags,WeaponAttackType attackType, uint32 cooldown) -{ - SpellEntry const* auraSpellInfo = triggeredByAura->GetSpellProto(); - - Item* castItem = triggeredByAura->GetCastItemGUID() && GetTypeId()==TYPEID_PLAYER - ? ((Player*)this)->GetItemByGuid(triggeredByAura->GetCastItemGUID()) : NULL; - - uint32 triggered_spell_id = auraSpellInfo->EffectTriggerSpell[triggeredByAura->GetEffIndex()]; - Unit* target = !(procFlags & PROC_FLAG_HEAL) && IsPositiveSpell(triggered_spell_id) ? this : pVictim; - int32 basepoints0 = 0; - - switch(auraSpellInfo->SpellFamilyName) - { - case SPELLFAMILY_GENERIC: - { - switch(auraSpellInfo->Id) - { - // Aegis of Preservation - case 23780: - //Aegis Heal (instead non-existed triggered spell) - triggered_spell_id = 23781; - target = this; - break; - // Elune's Touch (moonkin mana restore) - case 24905: - { - // Elune's Touch (instead non-existed triggered spell) - triggered_spell_id = 33926; - basepoints0 = int32(0.3f * GetTotalAttackPowerValue(BASE_ATTACK)); - target = this; - break; - } - // Enlightenment - case 29601: - { - // only for cast with mana price - if(!procSpell || procSpell->powerType!=POWER_MANA || procSpell->manaCost==0 && procSpell->ManaCostPercentage==0 && procSpell->manaCostPerlevel==0) - return false; - break; // fall through to normal cast - } - // Health Restore - case 33510: - { - // at melee hit call std triggered spell - if(procFlags & PROC_FLAG_HIT_MELEE) - break; // fall through to normal cast - - // Mark of Conquest - else (at range hit) called custom case - triggered_spell_id = 39557; - target = this; - break; - } - // Shaleskin - case 36576: - return true; // nothing to do - // Forgotten Knowledge (Blade of Wizardry) - case 38319: - // only for harmful enemy targeted spell - if(!pVictim || pVictim==this || !procSpell || IsPositiveSpell(procSpell->Id)) - return false; - break; // fall through to normal cast - // Aura of Wrath (Darkmoon Card: Wrath trinket bonus) - case 39442: - { - // proc only at non-crit hits - if(procFlags & (PROC_FLAG_CRIT_MELEE|PROC_FLAG_CRIT_RANGED|PROC_FLAG_CRIT_SPELL)) - return false; - break; // fall through to normal cast - } - // Augment Pain (Timbal's Focusing Crystal trinket bonus) - case 45054: - { - if(!procSpell) - return false; - - //only periodic damage can trigger spell - bool found = false; - for(int j = 0; j < 3; ++j) - { - if( procSpell->EffectApplyAuraName[j]==SPELL_AURA_PERIODIC_DAMAGE || - procSpell->EffectApplyAuraName[j]==SPELL_AURA_PERIODIC_DAMAGE_PERCENT || - procSpell->EffectApplyAuraName[j]==SPELL_AURA_PERIODIC_LEECH ) - { - found = true; - break; - } - } - if(!found) - return false; - - break; // fall through to normal cast - } - // Evasive Maneuvers (Commendation of Kael'thas) - case 45057: - { - // damage taken that reduces below 35% health - // does NOT mean you must have been >= 35% before - if (int32(GetHealth())-int32(damage) >= int32(GetMaxHealth()*0.35f)) - return false; - break; // fall through to normal cast - } - } - - switch(triggered_spell_id) - { - // Setup - case 15250: - { - // applied only for main target - if(!pVictim || pVictim != getVictim()) - return false; - - // continue normal case - break; - } - // Shamanistic Rage triggered spell - case 30824: - basepoints0 = int32(GetTotalAttackPowerValue(BASE_ATTACK)*triggeredByAura->GetModifier()->m_amount/100); - break; - } - break; - } - case SPELLFAMILY_MAGE: - { - switch(auraSpellInfo->SpellIconID) - { - // Blazing Speed - case 2127: - //Blazing Speed (instead non-existed triggered spell) - triggered_spell_id = 31643; - target = this; - break; - } - switch(auraSpellInfo->Id) - { - // Persistent Shield (Scarab Brooch) - case 26467: - basepoints0 = int32(damage * 0.15f); - break; - } - break; - } - case SPELLFAMILY_WARRIOR: - { - //Rampage - if((auraSpellInfo->SpellFamilyFlags & 0x100000) && auraSpellInfo->SpellIconID==2006) - { - //all ranks have effect[0]==AURA (Proc Trigger Spell, non-existed) - //and effect[1]==TriggerSpell - if(auraSpellInfo->Effect[1]!=SPELL_EFFECT_TRIGGER_SPELL) - { - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u have wrong effect in RM",triggeredByAura->GetSpellProto()->Id); - return false; - } - triggered_spell_id = auraSpellInfo->EffectTriggerSpell[1]; - break; // fall through to normal cast - } - break; - } - case SPELLFAMILY_WARLOCK: - { - // Pyroclasm - if(auraSpellInfo->SpellFamilyFlags == 0x0000000000000000 && auraSpellInfo->SpellIconID==1137) - { - // last case for Hellfire that damage caster also but don't must stun caster - if( pVictim == this ) - return false; - - // custom chance - float chance = 0; - switch (triggeredByAura->GetId()) - { - case 18096: chance = 13.0f; break; - case 18073: chance = 26.0f; break; - } - if (!roll_chance_f(chance)) - return false; - - // Pyroclasm (instead non-existed triggered spell) - triggered_spell_id = 18093; - target = pVictim; - break; - } - // Drain Soul - if(auraSpellInfo->SpellFamilyFlags & 0x0000000000004000) - { - bool found = false; - Unit::AuraList const& mAddFlatModifier = GetAurasByType(SPELL_AURA_ADD_FLAT_MODIFIER); - for(Unit::AuraList::const_iterator i = mAddFlatModifier.begin(); i != mAddFlatModifier.end(); ++i) - { - //Improved Drain Soul - if ((*i)->GetModifier()->m_miscvalue == SPELLMOD_CHANCE_OF_SUCCESS && (*i)->GetSpellProto()->SpellIconID == 113) - { - int32 value2 = CalculateSpellDamage((*i)->GetSpellProto(),2,(*i)->GetSpellProto()->EffectBasePoints[2],this); - basepoints0 = value2 * GetMaxPower(POWER_MANA) / 100; - // Drain Soul - CastCustomSpell(this, 18371, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); - break; - } - } - // Not remove charge (aura removed on death in any cases) - // Need for correct work Drain Soul SPELL_AURA_CHANNEL_DEATH_ITEM aura - return false; - } - break; - } - case SPELLFAMILY_PRIEST: - { - //Blessed Recovery - if(auraSpellInfo->SpellFamilyFlags == 0x00000000LL && auraSpellInfo->SpellIconID==1875) - { - switch (triggeredByAura->GetSpellProto()->Id) - { - case 27811: triggered_spell_id = 27813; break; - case 27815: triggered_spell_id = 27817; break; - case 27816: triggered_spell_id = 27818; break; - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in BR",triggeredByAura->GetSpellProto()->Id); - return false; - } - - int32 heal_amount = damage * triggeredByAura->GetModifier()->m_amount / 100; - basepoints0 = heal_amount/3; - target = this; - break; - } - // Shadowguard - if((auraSpellInfo->SpellFamilyFlags & 0x80000000LL) && auraSpellInfo->SpellVisual[0]==7958) - { - switch(triggeredByAura->GetSpellProto()->Id) - { - case 18137: - triggered_spell_id = 28377; break; // Rank 1 - case 19308: - triggered_spell_id = 28378; break; // Rank 2 - case 19309: - triggered_spell_id = 28379; break; // Rank 3 - case 19310: - triggered_spell_id = 28380; break; // Rank 4 - case 19311: - triggered_spell_id = 28381; break; // Rank 5 - case 19312: - triggered_spell_id = 28382; break; // Rank 6 - case 25477: - triggered_spell_id = 28385; break; // Rank 7 - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in SG",triggeredByAura->GetSpellProto()->Id); - return false; - } - target = pVictim; - break; - } - break; - } - case SPELLFAMILY_DRUID: - { - switch(auraSpellInfo->Id) - { - // Leader of the Pack (triggering Improved Leader of the Pack heal) - case 24932: - { - if (triggeredByAura->GetModifier()->m_amount == 0) - return false; - basepoints0 = triggeredByAura->GetModifier()->m_amount * GetMaxHealth() / 100; - triggered_spell_id = 34299; - break; - }; - // Druid Forms Trinket (Druid Tier5 Trinket, triggers different spells per Form) - case 37336: - { - switch(m_form) - { - case FORM_BEAR: - case FORM_DIREBEAR: - triggered_spell_id=37340; break;// Ursine Blessing - case FORM_CAT: - triggered_spell_id=37341; break;// Feline Blessing - case FORM_TREE: - triggered_spell_id=37342; break;// Slyvan Blessing - case FORM_MOONKIN: - triggered_spell_id=37343; break;// Lunar Blessing - case FORM_NONE: - triggered_spell_id=37344; break;// Cenarion Blessing (for caster form, except FORM_MOONKIN) - default: - return false; - } - - target = this; - break; - } - } - break; - } - case SPELLFAMILY_ROGUE: - { - if(auraSpellInfo->SpellFamilyFlags == 0x0000000000000000LL) - { - switch(auraSpellInfo->SpellIconID) - { - // Combat Potency - case 2260: - { - // skip non offhand attacks - if(attackType!=OFF_ATTACK) - return false; - break; // fall through to normal cast - } - } - } - break; - } - case SPELLFAMILY_PALADIN: - { - if(auraSpellInfo->SpellFamilyFlags == 0x00000000LL) - { - switch(auraSpellInfo->Id) - { - // Lightning Capacitor - case 37657: - { - // trinket ProcTriggerSpell but for safe checks for player - if(!castItem || !pVictim || !pVictim->isAlive() || GetTypeId()!=TYPEID_PLAYER) - return false; - - if(((Player*)this)->HasSpellCooldown(37657)) - return false; - - // stacking - CastSpell(this, 37658, true, castItem, triggeredByAura); - // 2.5s cooldown before it can stack again, current system allow 1 sec step in cooldown - ((Player*)this)->AddSpellCooldown(37657,0,time(NULL)+(roll_chance_i(50) ? 2 : 3)); - - // counting - Aura * dummy = GetDummyAura(37658); - if (!dummy) - return false; - - // release at 3 aura in stack - if(dummy->GetStackAmount() <= 2) - return true; // main triggered spell casted anyway - - RemoveAurasDueToSpell(37658); - CastSpell(pVictim, 37661, true, castItem, triggeredByAura); - return true; - } - // Healing Discount - case 37705: - // Healing Trance (instead non-existed triggered spell) - triggered_spell_id = 37706; - target = this; - break; - // HoTs on Heals (Fel Reaver's Piston trinket) - case 38299: - { - // at direct heal effect - if(!procSpell || !IsSpellHaveEffect(procSpell,SPELL_EFFECT_HEAL)) - return false; - - // single proc at time - AuraList const& scAuras = GetSingleCastAuras(); - for(AuraList::const_iterator itr = scAuras.begin(); itr != scAuras.end(); ++itr) - if((*itr)->GetId()==triggered_spell_id) - return false; - - // positive cast at victim instead self - target = pVictim; - break; - } - } - switch(auraSpellInfo->SpellIconID) - { - case 241: - { - switch(auraSpellInfo->EffectTriggerSpell[0]) - { - //Illumination - case 18350: - { - if(!procSpell) - return false; - - // procspell is triggered spell but we need mana cost of original casted spell - uint32 originalSpellId = procSpell->Id; - - // Holy Shock - if(procSpell->SpellFamilyName == SPELLFAMILY_PALADIN) - { - if(procSpell->SpellFamilyFlags & 0x0001000000000000LL) - { - switch(procSpell->Id) - { - case 25914: originalSpellId = 20473; break; - case 25913: originalSpellId = 20929; break; - case 25903: originalSpellId = 20930; break; - case 27175: originalSpellId = 27174; break; - case 33074: originalSpellId = 33072; break; - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in HShock",procSpell->Id); - return false; - } - } - } - - SpellEntry const *originalSpell = sSpellStore.LookupEntry(originalSpellId); - if(!originalSpell) - { - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u unknown but selected as original in Illu",originalSpellId); - return false; - } - - // percent stored in effect 1 (class scripts) base points - int32 percent = auraSpellInfo->EffectBasePoints[1]+1; - - basepoints0 = originalSpell->manaCost*percent/100; - triggered_spell_id = 20272; - target = this; - break; - } - } - break; - } - } - } - if(auraSpellInfo->SpellFamilyFlags & 0x00080000) - { - switch(auraSpellInfo->SpellIconID) - { - //Judgement of Wisdom (overwrite non existing triggered spell call in spell.dbc - case 206: - { - if(!pVictim || !pVictim->isAlive()) - return false; - - switch(triggeredByAura->GetSpellProto()->Id) - { - case 20186: - triggered_spell_id = 20268; // Rank 1 - break; - case 20354: - triggered_spell_id = 20352; // Rank 2 - break; - case 20355: - triggered_spell_id = 20353; // Rank 3 - break; - case 27164: - triggered_spell_id = 27165; // Rank 4 - break; - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in JoW",triggeredByAura->GetSpellProto()->Id); - return false; - } - - pVictim->CastSpell(pVictim,triggered_spell_id,true,castItem,triggeredByAura,GetGUID()); - return true; // no hidden cooldown - } - //Judgement of Light - case 299: - { - if(!pVictim || !pVictim->isAlive()) - return false; - - // overwrite non existing triggered spell call in spell.dbc - switch(triggeredByAura->GetSpellProto()->Id) - { - case 20185: - triggered_spell_id = 20267; // Rank 1 - break; - case 20344: - triggered_spell_id = 20341; // Rank 2 - break; - case 20345: - triggered_spell_id = 20342; // Rank 3 - break; - case 20346: - triggered_spell_id = 20343; // Rank 4 - break; - case 27162: - triggered_spell_id = 27163; // Rank 5 - break; - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in JoL",triggeredByAura->GetSpellProto()->Id); - return false; - } - pVictim->CastSpell(pVictim,triggered_spell_id,true,castItem,triggeredByAura,GetGUID()); - return true; // no hidden cooldown - } - } - } - // custom check for proc spell - switch(auraSpellInfo->Id) - { - // Bonus Healing (item spell) - case 40971: - { - if(!pVictim || !pVictim->isAlive()) - return false; - - // bonus if health < 50% - if(pVictim->GetHealth() >= pVictim->GetMaxHealth()*triggeredByAura->GetModifier()->m_amount/100) - return false; - - // cast at target positive spell - target = pVictim; - break; - } - } - switch(triggered_spell_id) - { - // Seal of Command - case 20424: - // prevent chain of triggered spell from same triggered spell - if(procSpell && procSpell->Id==20424) - return false; - break; - } - break; - } - case SPELLFAMILY_SHAMAN: - { - if(auraSpellInfo->SpellFamilyFlags == 0x0000000000000000) - { - switch(auraSpellInfo->SpellIconID) - { - case 19: - { - switch(auraSpellInfo->Id) - { - case 23551: // Lightning Shield - Tier2: 8 pieces proc shield - { - // Lightning Shield (overwrite non existing triggered spell call in spell.dbc) - triggered_spell_id = 23552; - target = pVictim; - break; - } - case 23552: // Lightning Shield - trigger shield damage - { - // Lightning Shield (overwrite non existing triggered spell call in spell.dbc) - triggered_spell_id = 27635; - target = pVictim; - break; - } - } - break; - } - // Mana Surge (Shaman T1 bonus) - case 87: - { - if(!procSpell) - return false; - - basepoints0 = procSpell->manaCost * 35/100; - triggered_spell_id = 23571; - target = this; - break; - } - //Nature's Guardian - case 2013: - { - if(GetTypeId()!=TYPEID_PLAYER) - return false; - - // damage taken that reduces below 30% health - // does NOT mean you must have been >= 30% before - if (10*(int32(GetHealth())-int32(damage)) >= 3*GetMaxHealth()) - return false; - - triggered_spell_id = 31616; - - // need check cooldown now - if( cooldown && ((Player*)this)->HasSpellCooldown(triggered_spell_id)) - return false; - - basepoints0 = triggeredByAura->GetModifier()->m_amount * GetMaxHealth() / 100; - target = this; - if(pVictim && pVictim->isAlive()) - pVictim->getThreatManager().modifyThreatPercent(this,-10); - break; - } - } - } - - // Water Shield (we can't set cooldown for main spell - it's player casted spell - if((auraSpellInfo->SpellFamilyFlags & 0x0000002000000000LL) && auraSpellInfo->SpellVisual[0]==7358) - { - target = this; - break; - } - - // Lightning Shield - if((auraSpellInfo->SpellFamilyFlags & 0x00000400) && auraSpellInfo->SpellVisual[0]==37) - { - // overwrite non existing triggered spell call in spell.dbc - switch(triggeredByAura->GetSpellProto()->Id) - { - case 324: - triggered_spell_id = 26364; break; // Rank 1 - case 325: - triggered_spell_id = 26365; break; // Rank 2 - case 905: - triggered_spell_id = 26366; break; // Rank 3 - case 945: - triggered_spell_id = 26367; break; // Rank 4 - case 8134: - triggered_spell_id = 26369; break; // Rank 5 - case 10431: - triggered_spell_id = 26370; break; // Rank 6 - case 10432: - triggered_spell_id = 26363; break; // Rank 7 - case 25469: - triggered_spell_id = 26371; break; // Rank 8 - case 25472: - triggered_spell_id = 26372; break; // Rank 9 - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in LShield",triggeredByAura->GetSpellProto()->Id); - return false; - } - - target = pVictim; - break; - } - break; - } - } - - // standard non-dummy case - if(!triggered_spell_id) - { - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u have 0 in EffectTriggered[%d], not handled custom case?",auraSpellInfo->Id,triggeredByAura->GetEffIndex()); - return false; - } - - SpellEntry const* triggerEntry = sSpellStore.LookupEntry(triggered_spell_id); - - if(!triggerEntry) - { - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u have not existed EffectTriggered[%d]=%u, not handled custom case?",auraSpellInfo->Id,triggeredByAura->GetEffIndex(),triggered_spell_id); - return false; - } - - // not allow proc extra attack spell at extra attack - if( m_extraAttacks && IsSpellHaveEffect(triggerEntry,SPELL_EFFECT_ADD_EXTRA_ATTACKS) ) - return false; - - if( cooldown && GetTypeId()==TYPEID_PLAYER && ((Player*)this)->HasSpellCooldown(triggered_spell_id)) - return false; - - // default case - if(!target || target!=this && !target->isAlive()) - return false; - - if(basepoints0) - CastCustomSpell(target,triggered_spell_id,&basepoints0,NULL,NULL,true,castItem,triggeredByAura); - else - CastSpell(target,triggered_spell_id,true,castItem,triggeredByAura); - - if( cooldown && GetTypeId()==TYPEID_PLAYER ) - ((Player*)this)->AddSpellCooldown(triggered_spell_id,0,time(NULL) + cooldown); - - return true; -} -*/ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredByAura, SpellEntry const *procSpell, uint32 procFlags, uint32 procEx, uint32 cooldown) { @@ -7173,14 +5606,30 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB // ..... //===================================================================== case SPELLFAMILY_GENERIC: +// if (auraSpellInfo->Id==59532) // Abandon Passengers on Poly +// if (auraSpellInfo->Id==54775) // Abandon Vehicle on Poly // if (auraSpellInfo->Id==34082) // Advantaged State (DND) -// trigger_spell_id = ???; if (auraSpellInfo->Id == 23780) // Aegis of Preservation (Aegis of Preservation trinket) - trigger_spell_id = 23781; + trigger_spell_id = 23781; // else if (auraSpellInfo->Id==43504) // Alterac Valley OnKill Proc Aura -// trigger_spell_id = ; +// else if (auraSpellInfo->Id == 48876) // Beast's Mark +// { +// trigger_spell_id = 48877; +// } +// else if (auraSpellInfo->Id == 59237) // Beast's Mark +// { +// trigger_spell_id = 59233; +// } +// else if (auraSpellInfo->Id==46939) // Black Bow of the Betrayer +// { +// trigger_spell_id = 29471; // gain mana +// 27526; // drain mana if possible +// } +// else if (auraSpellInfo->Id==50844) // Blood Mirror +// else if (auraSpellInfo->Id==54476) // Blood Presence +// else if (auraSpellInfo->Id==50689) // Blood Presence (Rank 1) // else if (auraSpellInfo->Id==37030) // Chaotic Temperament -// trigger_spell_id = ; +// else if (auraSpellInfo->Id==52856) // Charge else if (auraSpellInfo->Id==43820) // Charm of the Witch Doctor (Amani Charm of the Witch Doctor trinket) { // Pct value stored in dummy @@ -7190,31 +5639,37 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB } // else if (auraSpellInfo->Id==41248) // Consuming Strikes // trigger_spell_id = 41249; +// else if (auraSpellInfo->Id==45205) // Copy Offhand Weapon +// else if (auraSpellInfo->Id==57594) // Copy Ranged Weapon // else if (auraSpellInfo->Id==41054) // Copy Weapon // trigger_spell_id = 41055; +// else if (auraSpellInfo->Id==45343) // Dark Flame Aura +// else if (auraSpellInfo->Id==47300) // Dark Flame Aura + else if (auraSpellInfo->Id==57345) // Darkmoon Card: Greatness + { + uint32 stat = 0; + // strength + if (GetStat(STAT_STRENGTH) > stat){trigger_spell_id = 60229;stat = GetStat(STAT_STRENGTH);} + // agility + if (GetStat(STAT_AGILITY) > stat){trigger_spell_id = 60233;stat = GetStat(STAT_AGILITY);} + // intellect + if (GetStat(STAT_INTELLECT) > stat){trigger_spell_id = 60234;stat = GetStat(STAT_INTELLECT);} + // spirit + if (GetStat(STAT_SPIRIT) > stat){trigger_spell_id = 60235;stat = GetStat(STAT_SPIRIT);} + } // else if (auraSpellInfo->Id==31255) // Deadly Swiftness (Rank 1) -// trigger_spell_id = ; // else if (auraSpellInfo->Id==5301) // Defensive State (DND) -// trigger_spell_id = ; // else if (auraSpellInfo->Id==13358) // Defensive State (DND) -// trigger_spell_id = ; // else if (auraSpellInfo->Id==16092) // Defensive State (DND) -// trigger_spell_id = ; // else if (auraSpellInfo->Id==24949) // Defensive State 2 (DND) -// trigger_spell_id = ; // else if (auraSpellInfo->Id==40329) // Demo Shout Sensor -// trigger_spell_id = ; // Desperate Defense (Stonescythe Whelp, Stonescythe Alpha, Stonescythe Ambusher) else if (auraSpellInfo->Id == 33896) trigger_spell_id = 33898; // else if (auraSpellInfo->Id==18943) // Double Attack -// trigger_spell_id = ; // else if (auraSpellInfo->Id==19194) // Double Attack -// trigger_spell_id = ; // else if (auraSpellInfo->Id==19817) // Double Attack -// trigger_spell_id = ; // else if (auraSpellInfo->Id==19818) // Double Attack -// trigger_spell_id = ; // else if (auraSpellInfo->Id==22835) // Drunken Rage // trigger_spell_id = 14822; /* @@ -7246,21 +5701,21 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; } }*/ -// else if (auraSpellInfo->Id==6542) // Enraged Defense -// trigger_spell_id = ; // else if (auraSpellInfo->Id==40364) // Entangling Roots Sensor -// trigger_spell_id = ; // else if (auraSpellInfo->Id==33207) // Gossip NPC Periodic - Fidget -// trigger_spell_id = ; +// else if (auraSpellInfo->Id==50051) // Ethereal Pet Aura // else if (auraSpellInfo->Id==35321) // Gushing Wound -// trigger_spell_id = ; // else if (auraSpellInfo->Id==38363) // Gushing Wound -// trigger_spell_id = ; // else if (auraSpellInfo->Id==39215) // Gushing Wound -// trigger_spell_id = ; +// else if (auraSpellInfo->Id==44527) // Hate Monster (Spar Buddy) (30 sec) +// else if (auraSpellInfo->Id==44819) // Hate Monster (Spar Buddy) (>30% Health) +// else if (auraSpellInfo->Id==44526) // Hate Monster (Spar) (30 sec) +// else if (auraSpellInfo->Id==44820) // Hate Monster (Spar) (<30%) +// else if (auraSpellInfo->Id==49059) // Horde, Hate Monster (Spar Buddy) (>30% Health) // else if (auraSpellInfo->Id==40250) // Improved Duration -// trigger_spell_id = ; - else if (auraSpellInfo->Id==27522) // Mana Drain Trigger +// else if (auraSpellInfo->Id==59288) // Infra-Green Shield +// else if (auraSpellInfo->Id==54072) // Knockback Ball Passive + else if (auraSpellInfo->Id==27522 || auraSpellInfo->Id==40336) // Mana Drain Trigger { // On successful melee or ranged attack gain $29471s1 mana and if possible drain $27526s1 mana from the target. if (this && this->isAlive()) @@ -7269,27 +5724,21 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB CastSpell(pVictim, 27526, true, castItem, triggeredByAura); return true; } - else if (auraSpellInfo->Id==24905) // Moonkin Form (Passive) - { - // Elune's Touch (instead non-existed triggered spell) 30% from AP - trigger_spell_id = 33926; - basepoints0 = GetTotalAttackPowerValue(BASE_ATTACK) * 30 / 100; - target = this; - } +// else if (auraSpellInfo->Id==55580) // Mana Link +// else if (auraSpellInfo->Id==45903) // Offensive State +// else if (auraSpellInfo->Id==44326) // Pure Energy Passive // else if (auraSpellInfo->Id==43453) // Rune Ward -// trigger_spell_id = ; -// else if (auraSpellInfo->Id==7137) // Shadow Charge (Rank 1) -// trigger_spell_id = ; - // Shaleskin (Shaleskin Flayer, Shaleskin Ripper) 30023 trigger -// else if (auraSpellInfo->Id==36576) -// trigger_spell_id = ; +// else if (auraSpellInfo->Id== 7137) // Shadow Charge (Rank 1) +// else if (auraSpellInfo->Id==36576) // Shaleskin (Shaleskin Flayer, Shaleskin Ripper) 30023 trigger // else if (auraSpellInfo->Id==34783) // Spell Reflection -// trigger_spell_id = ; // else if (auraSpellInfo->Id==36096) // Spell Reflection -// trigger_spell_id = ; +// else if (auraSpellInfo->Id==57587) // Steal Ranged () // else if (auraSpellInfo->Id==36207) // Steal Weapon -// trigger_spell_id = ; +// else if (auraSpellInfo->Id== 7377) // Take Immune Periodic Damage <Not Working> // else if (auraSpellInfo->Id==35205) // Vanish +// else if (auraSpellInfo->Id==42730) // Woe Strike +// else if (auraSpellInfo->Id==59735) // Woe Strike +// else if (auraSpellInfo->Id==46146) // [PH] Ahune Spanky Hands break; //===================================================================== // Mage @@ -7315,27 +5764,20 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB //===================================================================== // Warrior //===================================================================== - // Rampage (Rank 1-3) trigger = 18350 + // Scent of Blood //===================================================================== case SPELLFAMILY_WARRIOR: - // Rampage - if (auraSpellInfo->SpellIconID == 2006 && auraSpellInfo->SpellFamilyFlags==0x100000) { - switch(auraSpellInfo->Id) - { - case 29801: trigger_spell_id = 30029; break; // Rank 1 - case 30030: trigger_spell_id = 30031; break; // Rank 2 - case 30033: trigger_spell_id = 30032; break; // Rank 3 - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in Rampage",auraSpellInfo->Id); - return false; - } + // Scent of Blood + if (auraSpellInfo->Id == 50421) + trigger_spell_id = 50422; } break; //===================================================================== // Warlock //===================================================================== // Pyroclasm trigger = 18350 + // Nether Protection trigger = 1206 // Drain Soul (Rank 1-5) trigger = 0 //===================================================================== case SPELLFAMILY_WARLOCK: @@ -7379,12 +5821,33 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB if ((*i)->GetModifier()->m_miscvalue == SPELLMOD_CHANCE_OF_SUCCESS && (*i)->GetSpellProto()->SpellIconID == 113) { int32 value2 = CalculateSpellDamage((*i)->GetSpellProto(),2,(*i)->GetSpellProto()->EffectBasePoints[2],this); - basepoints0 = value2 * GetMaxPower(POWER_MANA) / 100; + // Drain Soul + CastCustomSpell(this, 18371, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); + break; } } - if ( basepoints0 == 0 ) + // Not remove charge (aura removed on death in any cases) + // Need for correct work Drain Soul SPELL_AURA_CHANNEL_DEATH_ITEM aura + return false; + } + // Nether Protection + else if (auraSpellInfo->SpellIconID == 1985) + { + if (!procSpell) return false; - trigger_spell_id = 18371; + switch(GetFirstSchoolInMask(GetSpellSchoolMask(procSpell))) + { + case SPELL_SCHOOL_NORMAL: + case SPELL_SCHOOL_HOLY: + return false; // ignore + case SPELL_SCHOOL_FIRE: trigger_spell_id = 54371; break; + case SPELL_SCHOOL_NATURE: trigger_spell_id = 54375; break; + case SPELL_SCHOOL_FROST: trigger_spell_id = 54372; break; + case SPELL_SCHOOL_SHADOW: trigger_spell_id = 54374; break; + case SPELL_SCHOOL_ARCANE: trigger_spell_id = 54373; break; + default: + return false; + } } break; } @@ -7393,30 +5856,12 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB //===================================================================== // Greater Heal Refund trigger = 18350 // Blessed Recovery (Rank 1-3) trigger = 18350 - // Shadowguard (1-7) trigger = 28376 //===================================================================== case SPELLFAMILY_PRIEST: { // Greater Heal Refund if (auraSpellInfo->Id==37594) trigger_spell_id = 37595; - // Shadowguard - else if(auraSpellInfo->SpellFamilyFlags==0x100080000000LL && auraSpellInfo->SpellVisual[0]==7958) - { - switch(auraSpellInfo->Id) - { - case 18137: trigger_spell_id = 28377; break; // Rank 1 - case 19308: trigger_spell_id = 28378; break; // Rank 2 - case 19309: trigger_spell_id = 28379; break; // Rank 3 - case 19310: trigger_spell_id = 28380; break; // Rank 4 - case 19311: trigger_spell_id = 28381; break; // Rank 5 - case 19312: trigger_spell_id = 28382; break; // Rank 6 - case 25477: trigger_spell_id = 28385; break; // Rank 7 - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in SG", auraSpellInfo->Id); - return false; - } - } // Blessed Recovery else if (auraSpellInfo->SpellIconID == 1875) { @@ -7483,9 +5928,9 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB // Blessed Life trigger = 31934 // Healing Discount trigger = 18350 // Illumination (Rank 1-5) trigger = 18350 - // Judgement of Light (Rank 1-5) trigger = 5373 - // Judgement of Wisdom (Rank 1-4) trigger = 1826 // Lightning Capacitor trigger = 18350 + // Thunder Capacitor trigger = 18350 + // Soul Preserver trigger = 18350 //===================================================================== case SPELLFAMILY_PALADIN: { @@ -7509,28 +5954,11 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB trigger_spell_id = 37706; target = this; } - // Judgement of Light and Judgement of Wisdom - else if (auraSpellInfo->SpellFamilyFlags & 0x0000000000080000LL) + // Soul Preserver + if (auraSpellInfo->Id==60510) { - switch (auraSpellInfo->Id) - { - // Judgement of Light - case 20185: trigger_spell_id = 20267;break; // Rank 1 - case 20344: trigger_spell_id = 20341;break; // Rank 2 - case 20345: trigger_spell_id = 20342;break; // Rank 3 - case 20346: trigger_spell_id = 20343;break; // Rank 4 - case 27162: trigger_spell_id = 27163;break; // Rank 5 - // Judgement of Wisdom - case 20186: trigger_spell_id = 20268;break; // Rank 1 - case 20354: trigger_spell_id = 20352;break; // Rank 2 - case 20355: trigger_spell_id = 20353;break; // Rank 3 - case 27164: trigger_spell_id = 27165;break; // Rank 4 - default: - sLog.outError("Unit::HandleProcTriggerSpell: Spell %u miss posibly Judgement of Light/Wisdom", auraSpellInfo->Id); - return false; - } - pVictim->CastSpell(pVictim, trigger_spell_id, true, castItem, triggeredByAura); - return true; // no hidden cooldown + trigger_spell_id = 60515; + target = this; } // Illumination else if (auraSpellInfo->SpellIconID==241) @@ -7577,13 +6005,34 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB if (!dummy) return false; // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if(dummy->GetStackAmount() <= 2) + if(dummy->GetStackAmount() < triggerAmount) return false; RemoveAurasDueToSpell(37658); trigger_spell_id = 37661; target = pVictim; } + // Thunder Capacitor + else if (auraSpellInfo->Id == 54841) + { + if(!pVictim || !pVictim->isAlive()) + return false; + // stacking + CastSpell(this, 54842, true, NULL, triggeredByAura); + // counting + uint32 count = 0; + AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY); + for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr) + if((*itr)->GetId()==54842) + ++count; + // release at 3 aura in stack (cont contain in basepoint of trigger aura) + if(count < triggerAmount) + return false; + + RemoveAurasDueToSpell(54842); + trigger_spell_id = 54843; + target = pVictim; + } break; } //===================================================================== @@ -7595,8 +6044,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB //===================================================================== case SPELLFAMILY_SHAMAN: { - //Lightning Shield (overwrite non existing triggered spell call in spell.dbc - if(auraSpellInfo->SpellFamilyFlags==0x00000400 && auraSpellInfo->SpellVisual[0]==37) + // Lightning Shield (overwrite non existing triggered spell call in spell.dbc + if(auraSpellInfo->SpellFamilyFlags & 0x0000000000000400) { switch(auraSpellInfo->Id) { @@ -7609,6 +6058,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB case 10432: trigger_spell_id = 26363; break; // Rank 7 case 25469: trigger_spell_id = 26371; break; // Rank 8 case 25472: trigger_spell_id = 26372; break; // Rank 9 + case 49280: trigger_spell_id = 49278; break; // Rank 10 + case 49281: trigger_spell_id = 49279; break; // Rank 11 default: sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in LShield", auraSpellInfo->Id); return false; @@ -7632,7 +6083,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB trigger_spell_id = 23571; target = this; } - else if (auraSpellInfo->SpellIconID == 2013) //Nature's Guardian + // Nature's Guardian + else if (auraSpellInfo->SpellIconID == 2013) { // Check health condition - should drop to less 30% (damage deal after this!) if (!(10*(int32(GetHealth() - damage)) < 3 * GetMaxHealth())) @@ -7647,6 +6099,45 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB } break; } + //===================================================================== + // Death Knight + //==================================================================== + // Acclimation trigger = 1206 + // Blood Presence trigger = 1206 + //===================================================================== + case SPELLFAMILY_DEATHKNIGHT: + { + // Acclimation + if (auraSpellInfo->SpellIconID == 1930) + { + if (!procSpell) + return false; + switch(GetFirstSchoolInMask(GetSpellSchoolMask(procSpell))) + { + case SPELL_SCHOOL_NORMAL: + return false; // ignore + case SPELL_SCHOOL_HOLY: trigger_spell_id = 50490; break; + case SPELL_SCHOOL_FIRE: trigger_spell_id = 50362; break; + case SPELL_SCHOOL_NATURE: trigger_spell_id = 50488; break; + case SPELL_SCHOOL_FROST: trigger_spell_id = 50485; break; + case SPELL_SCHOOL_SHADOW: trigger_spell_id = 50489; break; + case SPELL_SCHOOL_ARCANE: trigger_spell_id = 54373; break; + default: + return false; + } + } + // Blood Presence + else if (auraSpellInfo->Id == 48266) + { + if (GetTypeId() != TYPEID_PLAYER) + return false; + if (!((Player*)this)->RewardPlayerAndGroupAtKill(pVictim)) + return false; + trigger_spell_id = 50475; + basepoints0 = damage * triggerAmount / 100; + } + break; + } // default default: break; @@ -8000,7 +6491,7 @@ bool Unit::IsHostileTo(Unit const* unit) const return false; // Sanctuary - if(pTarget->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_SANCTUARY) && pTester->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_SANCTUARY)) + if(pTarget->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY) && pTester->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY)) return false; // PvP FFA state @@ -8109,7 +6600,7 @@ bool Unit::IsFriendlyTo(Unit const* unit) const return true; // Sanctuary - if(pTarget->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_SANCTUARY) && pTester->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_SANCTUARY)) + if(pTarget->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY) && pTester->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY)) return true; // PvP FFA state @@ -11394,181 +9885,6 @@ bool Unit::isFrozen() const return false; } -/* -struct ProcTriggeredData -{ - ProcTriggeredData(Aura* _triggeredByAura, uint32 _cooldown) - : triggeredByAura(_triggeredByAura), - triggeredByAura_SpellPair(Unit::spellEffectPair(triggeredByAura->GetId(),triggeredByAura->GetEffIndex())), - cooldown(_cooldown) - {} - - Aura* triggeredByAura; // triggred aura, can be invalidate at triggered aura proccessing - Unit::spellEffectPair triggeredByAura_SpellPair; // spell pair, used for re-find aura (by pointer comparison in range) - uint32 cooldown; // possible hidden cooldown -}; - -typedef std::list< ProcTriggeredData > ProcTriggeredList; - -void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, AuraTypeSet const& procAuraTypes, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage, SpellSchoolMask damageSchoolMask ) -{ - for(AuraTypeSet::const_iterator aur = procAuraTypes.begin(); aur != procAuraTypes.end(); ++aur) - { - // List of spells (effects) that proceed. Spell prototype and aura-specific value (damage for TRIGGER_DAMAGE) - ProcTriggeredList procTriggered; - - AuraList const& auras = GetAurasByType(*aur); - for(AuraList::const_iterator i = auras.begin(), next; i != auras.end(); i = next) - { - next = i; ++next; - - Aura* i_aura = *i; - - uint32 cooldown; // returned at next line - if(!IsTriggeredAtSpellProcEvent(i_aura->GetSpellProto(), procSpell, procFlag,attType,isVictim,cooldown)) - continue; - - procTriggered.push_back( ProcTriggeredData(i_aura, cooldown) ); - } - - // Handle effects proceed this time - for(ProcTriggeredList::iterator i = procTriggered.begin(); i != procTriggered.end(); ++i) - { - // Some auras can be deleted in function called in this loop (except first, ofc) - // Until storing auras in std::multimap to hard check deleting by another way - if(i != procTriggered.begin()) - { - bool found = false; - AuraMap::const_iterator lower = GetAuras().lower_bound(i->triggeredByAura_SpellPair); - AuraMap::const_iterator upper = GetAuras().upper_bound(i->triggeredByAura_SpellPair); - for(AuraMap::const_iterator itr = lower; itr!= upper; ++itr) - { - if(itr->second==i->triggeredByAura) - { - found = true; - break; - } - } - - if(!found) - { - sLog.outError("Spell aura %u (id:%u effect:%u) has been deleted before call spell proc event handler",*aur,i->triggeredByAura_SpellPair.first,i->triggeredByAura_SpellPair.second); - sLog.outError("It can be deleted one from early processed auras:"); - for(ProcTriggeredList::iterator i2 = procTriggered.begin(); i != i2; ++i2) - sLog.outError(" Spell aura %u (id:%u effect:%u)",*aur,i2->triggeredByAura_SpellPair.first,i2->triggeredByAura_SpellPair.second); - sLog.outError(" <end of list>"); - continue; - } - } - - /// this is aura triggering code call - Aura* triggeredByAura = i->triggeredByAura; - - /// save charges existence before processing to prevent crash at access to deleted triggered aura after - /// used in speedup code check before check aura existance. - bool triggeredByAuraWithCharges = triggeredByAura->m_procCharges > 0; - - /// success in event proccesing - /// used in speedup code check before check aura existance. - bool casted = false; - - /// process triggered code - switch(*aur) - { - case SPELL_AURA_PROC_TRIGGER_SPELL: - { - sLog.outDebug("ProcDamageAndSpell: casting spell (triggered by %s proc aura of spell %u)", - (isVictim?"a victim's":"an attacker's"),triggeredByAura->GetId()); - casted = HandleProcTriggerSpell(pTarget, damage, triggeredByAura, procSpell, procFlag, attType, i->cooldown); - break; - } - case SPELL_AURA_PROC_TRIGGER_DAMAGE: - { - uint32 triggered_damage = triggeredByAura->GetModifier()->m_amount; - sLog.outDebug("ProcDamageAndSpell: doing %u damage (triggered by %s aura of spell %u)", - triggered_damage, (isVictim?"a victim's":"an attacker's"),triggeredByAura->GetId()); - SpellNonMeleeDamageLog(pTarget, triggeredByAura->GetId(), triggered_damage, true, true); - casted = true; - break; - } - case SPELL_AURA_DUMMY: - { - uint32 effect = triggeredByAura->GetEffIndex(); - sLog.outDebug("ProcDamageAndSpell: casting spell (triggered by %s dummy aura of spell %u)", - (isVictim?"a victim's":"an attacker's"),triggeredByAura->GetId()); - casted = HandleDummyAuraProc(pTarget, damage, triggeredByAura, procSpell, procFlag,i->cooldown); - break; - } - case SPELL_AURA_PRAYER_OF_MENDING: - { - sLog.outDebug("ProcDamageAndSpell: casting mending (triggered by %s dummy aura of spell %u)", - (isVictim?"a victim's":"an attacker's"),triggeredByAura->GetId()); - - casted = HandleMeandingAuraProc(triggeredByAura); - break; - } - case SPELL_AURA_MOD_HASTE: - { - sLog.outDebug("ProcDamageAndSpell: casting spell (triggered by %s haste aura of spell %u)", - (isVictim?"a victim's":"an attacker's"),triggeredByAura->GetId()); - casted = HandleHasteAuraProc(pTarget, damage, triggeredByAura, procSpell, procFlag,i->cooldown); - break; - } - case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN: - { - // nothing do, just charges counter - // but count only in case appropriate school damage - casted = triggeredByAura->GetModifier()->m_miscvalue & damageSchoolMask; - break; - } - case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS: - { - sLog.outDebug("ProcDamageAndSpell: casting spell (triggered by %s class script aura of spell %u)", - (isVictim?"a victim's":"an attacker's"),triggeredByAura->GetId()); - casted = HandleOverrideClassScriptAuraProc(pTarget, triggeredByAura, procSpell,i->cooldown); - break; - } - default: - { - // nothing do, just charges counter - casted = true; - break; - } - } - - /// Update charge (aura can be removed by triggers) - if(casted && triggeredByAuraWithCharges) - { - /// need re-found aura (can be dropped by triggers) - AuraMap::const_iterator lower = GetAuras().lower_bound(i->triggeredByAura_SpellPair); - AuraMap::const_iterator upper = GetAuras().upper_bound(i->triggeredByAura_SpellPair); - for(AuraMap::const_iterator itr = lower; itr!= upper; ++itr) - { - if(itr->second == triggeredByAura) // pointer still valid - { - if(triggeredByAura->m_procCharges > 0) - triggeredByAura->m_procCharges -= 1; - - triggeredByAura->UpdateAuraCharges(); - break; - } - } - } - } - - /// Safely remove auras with zero charges - for(AuraList::const_iterator i = auras.begin(), next; i != auras.end(); i = next) - { - next = i; ++next; - if((*i)->m_procCharges == 0) - { - RemoveAurasDueToSpell((*i)->GetId()); - next = auras.begin(); - } - } - } -} -*/ struct ProcTriggeredData { ProcTriggeredData(SpellProcEventEntry const * _spellProcEvent, Aura* _triggeredByAura) @@ -11587,9 +9903,7 @@ typedef std::list< uint32> RemoveSpellList; // in most case need for drop charges // in some types of aura need do additional check // for example SPELL_AURA_MECHANIC_IMMUNITY - need check for mechanic -static bool isTriggerAura[TOTAL_AURAS]; -static bool isNonTriggerAura[TOTAL_AURAS]; -void InitTriggerAuraData() +bool InitTriggerAuraData() { for (int i=0;i<TOTAL_AURAS;i++) { @@ -11626,6 +9940,8 @@ void InitTriggerAuraData() isNonTriggerAura[SPELL_AURA_MOD_POWER_REGEN]=true; isNonTriggerAura[SPELL_AURA_RESIST_PUSHBACK]=true; + + return true; } uint32 createProcExtendMask(SpellNonMeleeDamage *damageInfo, SpellMissInfo missCondition) @@ -13168,3 +11484,60 @@ void Unit::AddAura(uint32 spellId, Unit* target) } } } + +// Melee based spells can be miss, parry or dodge on this step +// Crit or block - determined on damage calculation phase! (and can be both in some time) +float Unit::MeleeSpellMissChance(const Unit *pVictim, WeaponAttackType attType, int32 skillDiff, uint32 spellId) const +{ + // Calculate hit chance (more correct for chance mod) + int32 HitChance; + + // PvP - PvE melee chances + /*int32 lchance = pVictim->GetTypeId() == TYPEID_PLAYER ? 5 : 7; + int32 leveldif = pVictim->getLevelForTarget(this) - getLevelForTarget(pVictim); + if(leveldif < 3) + HitChance = 95 - leveldif; + else + HitChance = 93 - (leveldif - 2) * lchance;*/ + if (spellId || attType == RANGED_ATTACK || !haveOffhandWeapon()) + HitChance = 95.0f; + else + HitChance = 76.0f; + + // Hit chance depends from victim auras + if(attType == RANGED_ATTACK) + HitChance += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE); + else + HitChance += pVictim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE); + + // Spellmod from SPELLMOD_RESIST_MISS_CHANCE + if(spellId) + { + if(Player *modOwner = GetSpellModOwner()) + modOwner->ApplySpellMod(spellId, SPELLMOD_RESIST_MISS_CHANCE, HitChance); + } + + // Miss = 100 - hit + float miss_chance= 100.0f - HitChance; + + // Bonuses from attacker aura and ratings + if (attType == RANGED_ATTACK) + miss_chance -= m_modRangedHitChance; + else + miss_chance -= m_modMeleeHitChance; + + // bonus from skills is 0.04% + //miss_chance -= skillDiff * 0.04f; + int32 diff = -skillDiff; + if(pVictim->GetTypeId()==TYPEID_PLAYER) + miss_chance += diff > 0 ? diff * 0.04 : diff * 0.02; + else + miss_chance += diff > 10 ? 2 + (diff - 10) * 0.4 : diff * 0.1; + + // Limit miss chance from 0 to 60% + if (miss_chance < 0.0f) + return 0.0f; + if (miss_chance > 60.0f) + return 60.0f; + return miss_chance; +} diff --git a/src/game/Unit.h b/src/game/Unit.h index 31787663968..01eba9d0184 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -778,7 +778,6 @@ class TRINITY_DLL_SPEC Unit : public WorldObject typedef std::multimap< spellEffectPair, Aura*> AuraMap; typedef std::list<Aura *> AuraList; typedef std::list<DiminishingReturn> Diminishing; - typedef std::set<AuraType> AuraTypeSet; typedef std::set<uint32> ComboPointHolderSet; typedef std::map<uint8, uint32> VisibleAuraMap; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 08976dc2423..5d8d14cb83b 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 "6957" + #define REVISION_NR "6963" #endif // __REVISION_NR_H__ |