mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
Merge branch 'master' into 308
Conflicts: src/game/Spell.cpp
This commit is contained in:
commit
ec744de8f0
41 changed files with 3910 additions and 3714 deletions
1691
sql/mangos.sql
1691
sql/mangos.sql
File diff suppressed because it is too large
Load diff
706
sql/updates/6958_01_mangos_spell_proc_event.sql
Normal file
706
sql/updates/6958_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -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);
|
||||
5
sql/updates/6960_01_mangos_command.sql
Normal file
5
sql/updates/6960_01_mangos_command.sql
Normal file
|
|
@ -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.');
|
||||
6
sql/updates/6960_02_mangos_string.sql
Normal file
6
sql/updates/6960_02_mangos_string.sql
Normal file
|
|
@ -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);
|
||||
3
sql/updates/6961_01_mangos_command.sql
Normal file
3
sql/updates/6961_01_mangos_command.sql
Normal file
|
|
@ -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';
|
||||
|
|
@ -100,6 +100,10 @@ pkgdata_DATA = \
|
|||
6940_01_mangos_spell_learn_spell.sql \
|
||||
6941_01_mangos_spell_learn_spell.sql \
|
||||
6944_01_mangos_mangos_string.sql \
|
||||
6958_01_mangos_spell_proc_event.sql \
|
||||
6960_01_mangos_command.sql \
|
||||
6960_02_mangos_string.sql \
|
||||
6961_01_mangos_command.sql \
|
||||
README
|
||||
|
||||
## Additional files to include when running 'make dist'
|
||||
|
|
@ -180,4 +184,8 @@ EXTRA_DIST = \
|
|||
6940_01_mangos_spell_learn_spell.sql \
|
||||
6941_01_mangos_spell_learn_spell.sql \
|
||||
6944_01_mangos_mangos_string.sql \
|
||||
6958_01_mangos_spell_proc_event.sql \
|
||||
6960_01_mangos_command.sql \
|
||||
6960_02_mangos_string.sql \
|
||||
6961_01_mangos_command.sql \
|
||||
README
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ void WorldSession::HandleArenaTeamInviteAcceptOpcode(WorldPacket & /*recv_data*/
|
|||
if(!at)
|
||||
return;
|
||||
|
||||
if(_player->GetArenaTeamIdFromDB(_player->GetGUIDLow(), at->GetType()))
|
||||
if(_player->GetArenaTeamId(at->GetType()))
|
||||
{
|
||||
SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ALREADY_IN_ARENA_TEAM); // already in arena team that size
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -108,6 +108,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 },
|
||||
|
|
@ -294,7 +295,6 @@ ChatCommand * ChatHandler::getCommandTable()
|
|||
{ "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
|
||||
{ "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
|
||||
|
||||
{ "", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
|
||||
|
|
@ -694,9 +694,9 @@ void ChatHandler::PSendSysMessage(int32 entry, ...)
|
|||
{
|
||||
const char *format = GetMangosString(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);
|
||||
}
|
||||
|
|
@ -704,9 +704,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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -156,6 +156,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);
|
||||
|
|
@ -195,7 +196,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);
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ void WorldSession::HandleGroupInviteOpcode( WorldPacket & recv_data )
|
|||
|
||||
// ok, we do it
|
||||
WorldPacket data(SMSG_GROUP_INVITE, 10); // guess size
|
||||
data << uint8(1); // ok
|
||||
data << GetPlayer()->GetName();
|
||||
player->GetSession()->SendPacket(&data);
|
||||
|
||||
|
|
|
|||
|
|
@ -1195,18 +1195,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)
|
||||
{
|
||||
|
|
@ -1229,7 +1230,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);
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket)
|
|||
data << (uint8)3;
|
||||
data << GetPlayer()->GetName();
|
||||
data << plName;
|
||||
data << guild->GetRankName(slot->RankId+1);
|
||||
data << guild->GetRankName(slot->RankId);
|
||||
guild->BroadcastPacket(&data);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -168,7 +168,9 @@ enum MangosStrings
|
|||
LANG_SOUND_NOT_EXIST = 170,
|
||||
// 171, // not used
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -827,6 +827,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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -52,14 +52,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("");
|
||||
|
|
|
|||
|
|
@ -232,8 +232,6 @@ libmangosgame_a_SOURCES = \
|
|||
TaxiHandler.cpp \
|
||||
TemporarySummon.cpp \
|
||||
TemporarySummon.h \
|
||||
tools.cpp \
|
||||
Tools.h \
|
||||
TotemAI.cpp \
|
||||
TotemAI.h \
|
||||
Totem.cpp \
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@
|
|||
#include "SpellAuras.h"
|
||||
#include "Pet.h"
|
||||
#include "SocialMgr.h"
|
||||
#include "Tools.h"
|
||||
|
||||
void WorldSession::HandleRepopRequestOpcode( WorldPacket & /*recv_data*/ )
|
||||
{
|
||||
|
|
@ -1649,7 +1648,7 @@ void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
|
|||
{
|
||||
CHECK_PACKET_SIZE(recv_data, 1);
|
||||
uint64 guid;
|
||||
if(!readGUID(recv_data, guid))
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
|
||||
Player *player = objmgr.GetPlayer(guid);
|
||||
|
|
|
|||
|
|
@ -1892,7 +1892,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;
|
||||
|
|
@ -1907,8 +1908,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);
|
||||
|
||||
|
|
@ -1920,7 +1921,7 @@ void ObjectMgr::LoadAuctionItems()
|
|||
|
||||
Item *item = NewItemOrBag(proto);
|
||||
|
||||
if(!item->LoadFromDB(item_guid,0))
|
||||
if(!item->LoadFromDB(item_guid,0, result))
|
||||
{
|
||||
delete item;
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -1179,7 +1179,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x47E*/ { "CMSG_FORCE_SAY_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x47F*/ { "SMSG_HEALTH_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x480*/ { "SMSG_POWER_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x481*/ { "CMSG_GAMEOBJ_REPORT_USE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x481*/ { "CMSG_GAMEOBJ_REPORT_USE", STATUS_LOGGEDIN, &WorldSession::HandleGameobjectReportUse },
|
||||
/*0x482*/ { "SMSG_HIGHEST_THREAT_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x483*/ { "SMSG_THREAT_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x484*/ { "SMSG_THREAT_REMOVE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ void Pet::RemoveFromWorld()
|
|||
Unit::RemoveFromWorld();
|
||||
}
|
||||
|
||||
bool Pet::LoadPetFromDB( Unit* owner, uint32 petentry, uint32 petnumber, bool current )
|
||||
bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool current )
|
||||
{
|
||||
m_loading = true;
|
||||
|
||||
|
|
@ -764,7 +764,6 @@ bool Pet::CreateBaseAtCreature(Creature* creature)
|
|||
SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0);
|
||||
SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0);
|
||||
SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32((MaNGOS::XP::xp_to_level(creature->getLevel()))/4));
|
||||
SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
||||
SetUInt32Value(UNIT_NPC_FLAGS, 0);
|
||||
|
||||
CreatureFamilyEntry const* cFamily = sCreatureFamilyStore.LookupEntry(creature->GetCreatureInfo()->family);
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ class Pet : public Creature
|
|||
|
||||
bool Create (uint32 guidlow, Map *map, uint32 Entry, uint32 pet_number);
|
||||
bool CreateBaseAtCreature(Creature* creature);
|
||||
bool LoadPetFromDB( Unit* owner,uint32 petentry = 0,uint32 petnumber = 0, bool current = false );
|
||||
bool LoadPetFromDB( Player* owner,uint32 petentry = 0,uint32 petnumber = 0, bool current = false );
|
||||
void SavePetToDB(PetSaveMode mode);
|
||||
void Remove(PetSaveMode mode, bool returnreagent = false);
|
||||
static void DeleteFromDB(uint32 guidlow);
|
||||
|
|
|
|||
|
|
@ -3521,27 +3521,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
|
|||
}
|
||||
|
||||
// remove from arena teams
|
||||
uint32 at_id = GetArenaTeamIdFromDB(playerguid,ARENA_TEAM_2v2);
|
||||
if(at_id != 0)
|
||||
{
|
||||
ArenaTeam * at = objmgr.GetArenaTeamById(at_id);
|
||||
if(at)
|
||||
at->DelMember(playerguid);
|
||||
}
|
||||
at_id = GetArenaTeamIdFromDB(playerguid,ARENA_TEAM_3v3);
|
||||
if(at_id != 0)
|
||||
{
|
||||
ArenaTeam * at = objmgr.GetArenaTeamById(at_id);
|
||||
if(at)
|
||||
at->DelMember(playerguid);
|
||||
}
|
||||
at_id = GetArenaTeamIdFromDB(playerguid,ARENA_TEAM_5v5);
|
||||
if(at_id != 0)
|
||||
{
|
||||
ArenaTeam * at = objmgr.GetArenaTeamById(at_id);
|
||||
if(at)
|
||||
at->DelMember(playerguid);
|
||||
}
|
||||
LeaveAllArenaTeams(playerguid);
|
||||
|
||||
// the player was uninvited already on logout so just remove from group
|
||||
QueryResult *resultGroup = CharacterDatabase.PQuery("SELECT leaderGuid FROM group_member WHERE memberGuid='%u'", guid);
|
||||
|
|
@ -3582,15 +3562,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)
|
||||
|
|
@ -3600,7 +3581,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 !
|
||||
|
|
@ -4858,6 +4839,7 @@ void Player::UpdateWeaponSkill (WeaponAttackType attType)
|
|||
|
||||
void Player::UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHitOutcome outcome, bool defence)
|
||||
{
|
||||
/* Not need, this checked on call this func from trigger system
|
||||
switch(outcome)
|
||||
{
|
||||
case MELEE_HIT_CRIT:
|
||||
|
|
@ -4870,7 +4852,7 @@ void Player::UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHi
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
*/
|
||||
uint32 plevel = getLevel(); // if defense than pVictim == attacker
|
||||
uint32 greylevel = MaNGOS::XP::GetGrayLevel(plevel);
|
||||
uint32 moblevel = pVictim->getLevelForTarget(this);
|
||||
|
|
@ -6053,12 +6035,7 @@ bool Player::RewardHonor(Unit *uVictim, uint32 groupsize, float honor)
|
|||
victim_guid = 0; // Don't show HK: <rank> message, only log.
|
||||
}
|
||||
|
||||
if(k_level <= 5)
|
||||
k_grey = 0;
|
||||
else if( k_level <= 39 )
|
||||
k_grey = k_level - 5 - k_level/10;
|
||||
else
|
||||
k_grey = k_level - 1 - k_level/5;
|
||||
k_grey = MaNGOS::XP::GetGrayLevel(k_level);
|
||||
|
||||
if(v_level<=k_grey)
|
||||
return false;
|
||||
|
|
@ -6144,24 +6121,18 @@ void Player::ModifyArenaPoints( int32 value )
|
|||
|
||||
uint32 Player::GetGuildIdFromDB(uint64 guid)
|
||||
{
|
||||
std::ostringstream ss;
|
||||
ss<<"SELECT guildid FROM guild_member WHERE guid='"<<guid<<"'";
|
||||
QueryResult *result = CharacterDatabase.Query( ss.str().c_str() );
|
||||
if( result )
|
||||
{
|
||||
uint32 v = result->Fetch()[0].GetUInt32();
|
||||
delete result;
|
||||
return v;
|
||||
}
|
||||
else
|
||||
QueryResult* result = CharacterDatabase.PQuery("SELECT guildid FROM guild_member WHERE guid='%u'", GUID_LOPART(guid));
|
||||
if(!result)
|
||||
return 0;
|
||||
|
||||
uint32 id = result->Fetch()[0].GetUInt32();
|
||||
delete result;
|
||||
return id;
|
||||
}
|
||||
|
||||
uint32 Player::GetRankFromDB(uint64 guid)
|
||||
{
|
||||
std::ostringstream ss;
|
||||
ss<<"SELECT rank FROM guild_member WHERE guid='"<<guid<<"'";
|
||||
QueryResult *result = CharacterDatabase.Query( ss.str().c_str() );
|
||||
QueryResult *result = CharacterDatabase.PQuery( "SELECT rank FROM guild_member WHERE guid='%u'", GUID_LOPART(guid) );
|
||||
if( result )
|
||||
{
|
||||
uint32 v = result->Fetch()[0].GetUInt32();
|
||||
|
|
@ -6185,10 +6156,8 @@ uint32 Player::GetArenaTeamIdFromDB(uint64 guid, uint8 type)
|
|||
|
||||
uint32 Player::GetZoneIdFromDB(uint64 guid)
|
||||
{
|
||||
std::ostringstream ss;
|
||||
|
||||
ss<<"SELECT zone FROM characters WHERE guid='"<<GUID_LOPART(guid)<<"'";
|
||||
QueryResult *result = CharacterDatabase.Query( ss.str().c_str() );
|
||||
uint32 guidLow = GUID_LOPART(guid);
|
||||
QueryResult *result = CharacterDatabase.PQuery( "SELECT zone FROM characters WHERE guid='%u'", guidLow );
|
||||
if (!result)
|
||||
return 0;
|
||||
Field* fields = result->Fetch();
|
||||
|
|
@ -6198,22 +6167,18 @@ uint32 Player::GetZoneIdFromDB(uint64 guid)
|
|||
if (!zone)
|
||||
{
|
||||
// stored zone is zero, use generic and slow zone detection
|
||||
ss.str("");
|
||||
ss<<"SELECT map,position_x,position_y FROM characters WHERE guid='"<<GUID_LOPART(guid)<<"'";
|
||||
result = CharacterDatabase.Query(ss.str().c_str());
|
||||
result = CharacterDatabase.PQuery("SELECT map,position_x,position_y FROM characters WHERE guid='%u'", guidLow);
|
||||
if( !result )
|
||||
return 0;
|
||||
fields = result->Fetch();
|
||||
uint32 map = fields[0].GetUInt32();
|
||||
uint32 map = fields[0].GetUInt32();
|
||||
float posx = fields[1].GetFloat();
|
||||
float posy = fields[2].GetFloat();
|
||||
delete result;
|
||||
|
||||
zone = MapManager::Instance().GetZoneId(map,posx,posy);
|
||||
|
||||
ss.str("");
|
||||
ss << "UPDATE characters SET zone='"<<zone<<"' WHERE guid='"<<GUID_LOPART(guid)<<"'";
|
||||
CharacterDatabase.Execute(ss.str().c_str());
|
||||
CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow);
|
||||
}
|
||||
|
||||
return zone;
|
||||
|
|
@ -6291,13 +6256,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
|
||||
|
|
@ -14615,15 +14580,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);
|
||||
|
||||
|
|
@ -14639,7 +14605,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);
|
||||
|
|
@ -16628,6 +16594,27 @@ void Player::RemovePetitionsAndSigns(uint64 guid, uint32 type)
|
|||
CharacterDatabase.CommitTransaction();
|
||||
}
|
||||
|
||||
void Player::LeaveAllArenaTeams(uint64 guid)
|
||||
{
|
||||
QueryResult *result = CharacterDatabase.PQuery("SELECT arena_team_member.arenateamid FROM arena_team_member JOIN arena_team ON arena_team_member.arenateamid = arena_team.arenateamid WHERE guid='%u'", GUID_LOPART(guid));
|
||||
if(!result)
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
uint32 at_id = fields[0].GetUInt32();
|
||||
if(at_id != 0)
|
||||
{
|
||||
ArenaTeam * at = objmgr.GetArenaTeamById(at_id);
|
||||
if(at)
|
||||
at->DelMember(guid);
|
||||
}
|
||||
} while (result->NextRow());
|
||||
|
||||
delete result;
|
||||
}
|
||||
|
||||
void Player::SetRestBonus (float rest_bonus_new)
|
||||
{
|
||||
// Prevent resting on max level
|
||||
|
|
@ -18471,6 +18458,26 @@ uint32 Player::GetResurrectionSpellId()
|
|||
return spell_id;
|
||||
}
|
||||
|
||||
// Used in triggers for check "Only to targets that grant experience or honor" req
|
||||
bool Player::isHonorOrXPTarget(Unit* pVictim)
|
||||
{
|
||||
uint32 v_level = pVictim->getLevel();
|
||||
uint32 k_grey = MaNGOS::XP::GetGrayLevel(getLevel());
|
||||
|
||||
// Victim level less gray level
|
||||
if(v_level<=k_grey)
|
||||
return false;
|
||||
|
||||
if(pVictim->GetTypeId() == TYPEID_UNIT)
|
||||
{
|
||||
if (((Creature*)pVictim)->isTotem() ||
|
||||
((Creature*)pVictim)->isPet() ||
|
||||
((Creature*)pVictim)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Player::RewardPlayerAndGroupAtKill(Unit* pVictim)
|
||||
{
|
||||
bool PvP = pVictim->isCharmedOwnedByPlayerOrPlayer();
|
||||
|
|
|
|||
|
|
@ -425,8 +425,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)
|
||||
};
|
||||
|
||||
|
|
@ -1598,6 +1598,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
static uint32 GetArenaTeamIdFromDB(uint64 guid, uint8 slot);
|
||||
void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }
|
||||
uint32 GetArenaTeamIdInvited() { return m_ArenaTeamIdInvited; }
|
||||
static void LeaveAllArenaTeams(uint64 guid);
|
||||
|
||||
void SetDifficulty(uint32 dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; }
|
||||
uint8 GetDifficulty() { return m_dungeonDifficulty; }
|
||||
|
|
@ -1759,6 +1760,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
|
||||
bool IsAtGroupRewardDistance(WorldObject const* pRewardSource) const;
|
||||
bool RewardPlayerAndGroupAtKill(Unit* pVictim);
|
||||
bool isHonorOrXPTarget(Unit* pVictim);
|
||||
|
||||
FactionStateList m_factions;
|
||||
ForcedReactions m_forcedReactions;
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@
|
|||
#include "CellImpl.h"
|
||||
#include "Policies/SingletonImp.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "Tools.h"
|
||||
#include "LootMgr.h"
|
||||
#include "VMapFactory.h"
|
||||
#include "BattleGround.h"
|
||||
|
|
@ -167,19 +166,19 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster )
|
|||
|
||||
// TARGET_FLAG_UNK2 is used for non-combat pets, maybe other?
|
||||
if( m_targetMask & ( TARGET_FLAG_UNIT | TARGET_FLAG_UNK2 ))
|
||||
if(!readGUID(*data, m_unitTargetGUID))
|
||||
if(!data->readPackGUID(m_unitTargetGUID))
|
||||
return false;
|
||||
|
||||
if( m_targetMask & ( TARGET_FLAG_OBJECT ))
|
||||
if(!readGUID(*data, m_GOTargetGUID))
|
||||
if(!data->readPackGUID(m_GOTargetGUID))
|
||||
return false;
|
||||
|
||||
if(( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM )) && caster->GetTypeId() == TYPEID_PLAYER)
|
||||
if(!readGUID(*data, m_itemTargetGUID))
|
||||
if(!data->readPackGUID(m_itemTargetGUID))
|
||||
return false;
|
||||
|
||||
if( m_targetMask & (TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE ) )
|
||||
if(!readGUID(*data, m_CorpseTargetGUID))
|
||||
if(!data->readPackGUID(m_CorpseTargetGUID))
|
||||
return false;
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
|
||||
|
|
@ -197,7 +196,7 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster )
|
|||
if(data->rpos()+1+4+4+4 > data->size())
|
||||
return false;
|
||||
|
||||
if(!readGUID(*data, m_unitTargetGUID))
|
||||
if(!data->readPackGUID(m_unitTargetGUID))
|
||||
return false;
|
||||
|
||||
*data >> m_destX >> m_destY >> m_destZ;
|
||||
|
|
@ -317,6 +316,8 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi
|
|||
m_spellSchoolMask = SpellSchoolMask(1 << pItem->GetProto()->Damage->DamageType);
|
||||
}
|
||||
}
|
||||
// Set health leech amount to zero
|
||||
m_healthLeech = 0;
|
||||
|
||||
if(originalCasterGUID)
|
||||
m_originalCasterGUID = originalCasterGUID;
|
||||
|
|
@ -680,6 +681,77 @@ void Spell::FillTargetMap()
|
|||
}
|
||||
}
|
||||
|
||||
void Spell::prepareDataForTriggerSystem()
|
||||
{
|
||||
//==========================================================================================
|
||||
// Now fill data for trigger system, need know:
|
||||
// Ñan spell trigger another or not ( m_canTrigger )
|
||||
// Create base triggers flags for Attacker and Victim ( m_procAttacker and m_procVictim)
|
||||
//==========================================================================================
|
||||
|
||||
// Fill flag can spell trigger or not
|
||||
if (!m_IsTriggeredSpell)
|
||||
m_canTrigger = true; // Normal cast - can trigger
|
||||
else if (!m_triggeredByAuraSpell)
|
||||
m_canTrigger = true; // Triggered from SPELL_EFFECT_TRIGGER_SPELL - can trigger
|
||||
else // Exceptions (some periodic triggers)
|
||||
{
|
||||
m_canTrigger = false; // Triggered spells can`t trigger another
|
||||
switch (m_spellInfo->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_MAGE: // Arcane Missles triggers need do it
|
||||
if (m_spellInfo->SpellFamilyFlags & 0x0000000000200000LL) m_canTrigger = true;
|
||||
break;
|
||||
case SPELLFAMILY_WARLOCK: // For Hellfire Effect / Rain of Fire / Seed of Corruption triggers need do it
|
||||
if (m_spellInfo->SpellFamilyFlags & 0x0000800000000060LL) m_canTrigger = true;
|
||||
break;
|
||||
case SPELLFAMILY_HUNTER: // Hunter Explosive Trap Effect/Immolation Trap Effect/Frost Trap Aura/Snake Trap Effect
|
||||
if (m_spellInfo->SpellFamilyFlags & 0x0000200000000014LL) m_canTrigger = true;
|
||||
break;
|
||||
case SPELLFAMILY_PALADIN: // For Holy Shock triggers need do it
|
||||
if (m_spellInfo->SpellFamilyFlags & 0x0001000000200000LL) m_canTrigger = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Do not trigger from item cast spell
|
||||
if (m_CastItem)
|
||||
m_canTrigger = false;
|
||||
|
||||
// Get data for type of attack and fill base info for trigger
|
||||
switch (m_spellInfo->DmgClass)
|
||||
{
|
||||
case SPELL_DAMAGE_CLASS_MELEE:
|
||||
m_procAttacker = PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT;
|
||||
m_procVictim = PROC_FLAG_TAKEN_MELEE_SPELL_HIT;
|
||||
break;
|
||||
case SPELL_DAMAGE_CLASS_RANGED:
|
||||
m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT;
|
||||
m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT;
|
||||
break;
|
||||
default:
|
||||
if (IsPositiveSpell(m_spellInfo->Id)) // Check for positive spell
|
||||
{
|
||||
m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL;
|
||||
m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL;
|
||||
}
|
||||
else if (m_spellInfo->Id == 5019) // Wands
|
||||
{
|
||||
m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT;
|
||||
m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_procAttacker = PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT;
|
||||
m_procVictim = PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Hunter traps spells (for Entrapment trigger)
|
||||
// Gives your Immolation Trap, Frost Trap, Explosive Trap, and Snake Trap ....
|
||||
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && m_spellInfo->SpellFamilyFlags & 0x0000200000000014LL)
|
||||
m_procAttacker |= PROC_FLAG_ON_TRAP_ACTIVATION;
|
||||
}
|
||||
|
||||
void Spell::CleanupTargetList()
|
||||
{
|
||||
m_UniqueTargetInfo.clear();
|
||||
|
|
@ -836,83 +908,6 @@ void Spell::AddItemTarget(Item* pitem, uint32 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)
|
||||
{
|
||||
if (target->processed) // Check target
|
||||
|
|
@ -928,11 +923,27 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
|
|||
if (!unit)
|
||||
return;
|
||||
|
||||
// Get original caster (if exist) and calculate damage/healing from him data
|
||||
Unit *caster = m_originalCasterGUID ? m_originalCaster : m_caster;
|
||||
|
||||
// Skip if m_originalCaster not avaiable
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
SpellMissInfo missInfo = target->missCondition;
|
||||
// Need init unitTarget by default unit (can changed in code on reflect)
|
||||
// Or on missInfo!=SPELL_MISS_NONE unitTarget undefined (but need in trigger subsystem)
|
||||
unitTarget = unit;
|
||||
|
||||
// Reset damage/healing counter
|
||||
m_damage = 0;
|
||||
m_healing = 0;
|
||||
|
||||
// Fill base trigger info
|
||||
uint32 procAttacker = m_procAttacker;
|
||||
uint32 procVictim = m_procVictim;
|
||||
uint32 procEx = PROC_EX_NONE;
|
||||
|
||||
if (missInfo==SPELL_MISS_NONE) // In case spell hit target, do all effect on that target
|
||||
DoSpellHitOnUnit(unit, mask);
|
||||
else if (missInfo == SPELL_MISS_REFLECT) // In case spell reflect from target, do all effect on caster (if hit)
|
||||
|
|
@ -941,9 +952,103 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
|
|||
DoSpellHitOnUnit(m_caster, mask);
|
||||
}
|
||||
|
||||
// Do triggers only on miss/resist/parry/dodge
|
||||
if (missInfo!=SPELL_MISS_NONE)
|
||||
doTriggers(missInfo);
|
||||
// All calculated do it!
|
||||
// Do healing and triggers
|
||||
if (m_healing)
|
||||
{
|
||||
bool crit = caster->isSpellCrit(NULL, m_spellInfo, m_spellSchoolMask);
|
||||
uint32 addhealth = m_healing;
|
||||
if (crit)
|
||||
{
|
||||
procEx |= PROC_EX_CRITICAL_HIT;
|
||||
addhealth = caster->SpellCriticalBonus(m_spellInfo, addhealth, NULL);
|
||||
}
|
||||
else
|
||||
procEx |= PROC_EX_NORMAL_HIT;
|
||||
|
||||
caster->SendHealSpellLog(unitTarget, m_spellInfo->Id, addhealth, crit);
|
||||
|
||||
// Do triggers for unit (reflect triggers passed on hit phase for correct drop charge)
|
||||
if (m_canTrigger && missInfo != SPELL_MISS_REFLECT)
|
||||
caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, addhealth, m_attackType, m_spellInfo);
|
||||
|
||||
int32 gain = unitTarget->ModifyHealth( int32(addhealth) );
|
||||
|
||||
unitTarget->getHostilRefManager().threatAssist(caster, float(gain) * 0.5f, m_spellInfo);
|
||||
if(caster->GetTypeId()==TYPEID_PLAYER)
|
||||
if(BattleGround *bg = ((Player*)caster)->GetBattleGround())
|
||||
bg->UpdatePlayerScore(((Player*)caster), SCORE_HEALING_DONE, gain);
|
||||
}
|
||||
// Do damage and triggers
|
||||
else if (m_damage)
|
||||
{
|
||||
// Fill base damage struct (unitTarget - is real spell target)
|
||||
SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask);
|
||||
|
||||
// Add bonuses and fill damageInfo struct
|
||||
caster->CalculateSpellDamage(&damageInfo, m_damage, m_spellInfo);
|
||||
|
||||
// Send log damage message to client
|
||||
caster->SendSpellNonMeleeDamageLog(&damageInfo);
|
||||
|
||||
procEx = createProcExtendMask(&damageInfo, missInfo);
|
||||
procVictim |= PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||
|
||||
// Do triggers for unit (reflect triggers passed on hit phase for correct drop charge)
|
||||
if (m_canTrigger && missInfo != SPELL_MISS_REFLECT)
|
||||
caster->ProcDamageAndSpell(unitTarget, procAttacker, procVictim, procEx, damageInfo.damage, m_attackType, m_spellInfo);
|
||||
|
||||
caster->DealSpellDamage(&damageInfo, true);
|
||||
|
||||
// Shadow Word: Death - deals damage equal to damage done to caster if victim is not killed
|
||||
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PRIEST && m_spellInfo->SpellFamilyFlags&0x0000000200000000LL &&
|
||||
caster != unitTarget && unitTarget->isAlive())
|
||||
{
|
||||
// Redirect damage to caster if victim Alive
|
||||
damageInfo.target = caster;
|
||||
damageInfo.absorb = 0;
|
||||
damageInfo.resist = 0;
|
||||
damageInfo.blocked = 0;
|
||||
// Send log damage message to client
|
||||
caster->SendSpellNonMeleeDamageLog(&damageInfo);
|
||||
caster->DealSpellDamage(&damageInfo, true);
|
||||
}
|
||||
// Judgement of Blood
|
||||
else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL && m_spellInfo->SpellIconID==153)
|
||||
{
|
||||
int32 damagePoint = damageInfo.damage * 33 / 100;
|
||||
m_caster->CastCustomSpell(m_caster, 32220, &damagePoint, NULL, NULL, true);
|
||||
}
|
||||
// Bloodthirst
|
||||
else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellInfo->SpellFamilyFlags & 0x40000000000LL)
|
||||
{
|
||||
uint32 BTAura = 0;
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
case 23881: BTAura = 23885; break;
|
||||
case 23892: BTAura = 23886; break;
|
||||
case 23893: BTAura = 23887; break;
|
||||
case 23894: BTAura = 23888; break;
|
||||
case 25251: BTAura = 25252; break;
|
||||
case 30335: BTAura = 30339; break;
|
||||
default:
|
||||
sLog.outError("Spell::EffectSchoolDMG: Spell %u not handled in BTAura",m_spellInfo->Id);
|
||||
break;
|
||||
}
|
||||
if (BTAura)
|
||||
m_caster->CastSpell(m_caster,BTAura,true);
|
||||
}
|
||||
}
|
||||
// Passive spell hits/misses or active spells only misses (only triggers)
|
||||
else
|
||||
{
|
||||
// Fill base damage struct (unitTarget - is real spell target)
|
||||
SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_spellSchoolMask);
|
||||
procEx = createProcExtendMask(&damageInfo, missInfo);
|
||||
// Do triggers for unit (reflect triggers passed on hit phase for correct drop charge)
|
||||
if (m_canTrigger && missInfo != SPELL_MISS_REFLECT)
|
||||
caster->ProcDamageAndSpell(unit, procAttacker, procVictim, procEx, 0, m_attackType, m_spellInfo);
|
||||
}
|
||||
|
||||
// Call scripted function for AI if this spell is casted upon a creature (except pets)
|
||||
if(IS_CREATURE_GUID(target->targetGUID))
|
||||
|
|
@ -1984,6 +2089,9 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura)
|
|||
return;
|
||||
}
|
||||
|
||||
// Prepare data for triggers
|
||||
prepareDataForTriggerSystem();
|
||||
|
||||
// calculate cast time (calculated after first CanCast check to prevent charge counting for first CanCast fail)
|
||||
m_casttime = GetSpellCastTime(m_spellInfo, this);
|
||||
|
||||
|
|
@ -2137,15 +2245,6 @@ void Spell::cast(bool skipCheck)
|
|||
SendCastResult(castResult);
|
||||
SendSpellGo(); // we must send smsg_spell_go packet before m_castItem delete in TakeCastItem()...
|
||||
|
||||
// Pass cast spell event to handler (not send triggered by aura spells)
|
||||
if (m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MELEE && m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_RANGED && !m_triggeredByAuraSpell)
|
||||
{
|
||||
m_caster->ProcDamageAndSpell(m_targets.getUnitTarget(), PROC_FLAG_CAST_SPELL, PROC_FLAG_NONE, 0, SPELL_SCHOOL_MASK_NONE, m_spellInfo, m_IsTriggeredSpell);
|
||||
|
||||
// update pointers base at GUIDs to prevent access to non-existed already object
|
||||
UpdatePointers(); // pointers can be invalidate at triggered spell casting
|
||||
}
|
||||
|
||||
// Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells
|
||||
if (m_spellInfo->speed > 0.0f)
|
||||
{
|
||||
|
|
@ -2557,6 +2656,13 @@ void Spell::finish(bool ok)
|
|||
}
|
||||
}
|
||||
|
||||
// Heal caster for all health leech from all targets
|
||||
if (m_healthLeech)
|
||||
{
|
||||
m_caster->ModifyHealth(m_healthLeech);
|
||||
m_caster->SendHealSpellLog(m_caster, m_spellInfo->Id, uint32(m_healthLeech));
|
||||
}
|
||||
|
||||
if (IsMeleeAttackResetSpell())
|
||||
{
|
||||
m_caster->resetAttackTimer(BASE_ATTACK);
|
||||
|
|
@ -3529,8 +3635,12 @@ uint8 Spell::CanCast(bool strict)
|
|||
//Must be behind the target.
|
||||
if( m_spellInfo->AttributesEx2 == 0x100000 && (m_spellInfo->AttributesEx & 0x200) == 0x200 && target->HasInArc(M_PI, m_caster) )
|
||||
{
|
||||
SendInterrupted(2);
|
||||
return SPELL_FAILED_NOT_BEHIND;
|
||||
//Exclusion for Pounce: Facing Limitation was removed in 2.0.1, but it still uses the same, old Ex-Flags
|
||||
if( m_spellInfo->SpellFamilyName != SPELLFAMILY_DRUID || m_spellInfo->SpellFamilyFlags != 0x0000000000020000LL )
|
||||
{
|
||||
SendInterrupted(2);
|
||||
return SPELL_FAILED_NOT_BEHIND;
|
||||
}
|
||||
}
|
||||
|
||||
//Target must be facing you.
|
||||
|
|
@ -3714,8 +3824,9 @@ uint8 Spell::CanCast(bool strict)
|
|||
}
|
||||
}
|
||||
|
||||
if(uint8 castResult = CheckRange(strict))
|
||||
return castResult;
|
||||
if(!m_triggeredByAuraSpell)
|
||||
if(uint8 castResult = CheckRange(strict))
|
||||
return castResult;
|
||||
|
||||
{
|
||||
if(uint8 castResult = CheckPower())
|
||||
|
|
|
|||
|
|
@ -480,10 +480,18 @@ class Spell
|
|||
// -------------------------------------------
|
||||
GameObject* focusObject;
|
||||
|
||||
// Damage and healing in effects need just calculate
|
||||
int32 m_damage; // Damge in effects count here
|
||||
int32 m_healing; // Healing in effects count here
|
||||
int32 m_healthLeech; // Health leech in effects for all targets count here
|
||||
|
||||
//******************************************
|
||||
// Spell trigger system
|
||||
//******************************************
|
||||
void doTriggers(SpellMissInfo missInfo, uint32 damage=0, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NONE, uint32 block=0, uint32 absorb=0, bool crit=false);
|
||||
bool m_canTrigger; // Can start trigger (m_IsTriggeredSpell can`t use for this)
|
||||
uint32 m_procAttacker; // Attacker trigger flags
|
||||
uint32 m_procVictim; // Victim trigger flags
|
||||
void prepareDataForTriggerSystem();
|
||||
|
||||
//*****************************************
|
||||
// Spell target subsystem
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@ enum AuraType
|
|||
SPELL_AURA_DETECT_STEALTH = 228,
|
||||
SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE = 229,
|
||||
SPELL_AURA_230 = 230,
|
||||
SPELL_AURA_231 = 231,
|
||||
SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE = 231,
|
||||
SPELL_AURA_MECHANIC_DURATION_MOD = 232,
|
||||
SPELL_AURA_233 = 233,
|
||||
SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK = 234,
|
||||
|
|
|
|||
|
|
@ -253,8 +253,8 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
|
|||
&Aura::HandleNoImmediateEffect, //200 SPELL_AURA_MOD_XP_PCT implemented in Player::GiveXP
|
||||
&Aura::HandleAuraAllowFlight, //201 SPELL_AURA_FLY this aura enable flight mode...
|
||||
&Aura::HandleNoImmediateEffect, //202 SPELL_AURA_CANNOT_BE_DODGED implemented in Unit::RollPhysicalOutcomeAgainst
|
||||
&Aura::HandleNoImmediateEffect, //203 SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE implemented in Unit::DoAttackDamage
|
||||
&Aura::HandleNoImmediateEffect, //204 SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE implemented in Unit::DoAttackDamage
|
||||
&Aura::HandleNoImmediateEffect, //203 SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::CalculateSpellDamage
|
||||
&Aura::HandleNoImmediateEffect, //204 SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::CalculateSpellDamage
|
||||
&Aura::HandleNULL, //205 vulnerable to school dmg?
|
||||
&Aura::HandleNULL, //206 SPELL_AURA_MOD_SPEED_MOUNTED
|
||||
&Aura::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED
|
||||
|
|
@ -281,7 +281,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
|
|||
&Aura::HandleNoImmediateEffect, //228 stealth detection
|
||||
&Aura::HandleNULL, //229 SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE
|
||||
&Aura::HandleAuraModIncreaseMaxHealth, //230 Commanding Shout
|
||||
&Aura::HandleNULL, //231
|
||||
&Aura::HandleNoImmediateEffect, //231 SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE
|
||||
&Aura::HandleNoImmediateEffect, //232 SPELL_AURA_MECHANIC_DURATION_MOD implement in Unit::CalculateSpellDuration
|
||||
&Aura::HandleNULL, //233 set model id to the one of the creature with id m_modifier.m_miscvalue
|
||||
&Aura::HandleNoImmediateEffect, //234 SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK implement in Unit::CalculateSpellDuration
|
||||
|
|
@ -1204,7 +1204,10 @@ void Aura::HandleAddModifier(bool apply, bool Real)
|
|||
{
|
||||
case 17941: // Shadow Trance
|
||||
case 22008: // Netherwind Focus
|
||||
case 31834: // Light's Grace
|
||||
case 34754: // Clearcasting
|
||||
case 34936: // Backlash
|
||||
case 48108: // Hot Streak
|
||||
m_procCharges = 1;
|
||||
break;
|
||||
}
|
||||
|
|
@ -5786,11 +5789,15 @@ void Aura::PeriodicTick()
|
|||
Unit* target = m_target; // aura can be deleted in DealDamage
|
||||
SpellEntry const* spellProto = GetSpellProto();
|
||||
|
||||
pCaster->DealDamage(m_target, (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist), &cleanDamage, DOT, GetSpellSchoolMask(GetSpellProto()), GetSpellProto(), true);
|
||||
// Set trigger flag
|
||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HARMFUL_SPELL_HIT;
|
||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;// | PROC_FLAG_TAKEN_HARMFUL_SPELL_HIT;
|
||||
pdamage = (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist);
|
||||
if (pdamage)
|
||||
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, spellProto);
|
||||
|
||||
// DO NOT ACCESS MEMBERS OF THE AURA FROM NOW ON (DealDamage can delete aura)
|
||||
|
||||
pCaster->ProcDamageAndSpell(target, PROC_FLAG_NONE, PROC_FLAG_TAKE_DAMAGE, (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist), GetSpellSchoolMask(spellProto), spellProto);
|
||||
pCaster->DealDamage(target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(spellProto), spellProto, true);
|
||||
break;
|
||||
}
|
||||
case SPELL_AURA_PERIODIC_LEECH:
|
||||
|
|
@ -5899,11 +5906,15 @@ void Aura::PeriodicTick()
|
|||
SpellEntry const* spellProto = GetSpellProto();
|
||||
float multiplier = spellProto->EffectMultipleValue[GetEffIndex()] > 0 ? spellProto->EffectMultipleValue[GetEffIndex()] : 1;
|
||||
|
||||
uint32 new_damage = pCaster->DealDamage(m_target, (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist), &cleanDamage, DOT, GetSpellSchoolMask(GetSpellProto()), GetSpellProto(), false);
|
||||
// Set trigger flag
|
||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HARMFUL_SPELL_HIT;
|
||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;// | PROC_FLAG_TAKEN_HARMFUL_SPELL_HIT;
|
||||
pdamage = (pdamage <= absorb+resist) ? 0 : (pdamage-absorb-resist);
|
||||
if (pdamage)
|
||||
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||
pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, spellProto);
|
||||
int32 new_damage = pCaster->DealDamage(target, pdamage, &cleanDamage, DOT, GetSpellSchoolMask(spellProto), spellProto, false);
|
||||
|
||||
// DO NOT ACCESS MEMBERS OF THE AURA FROM NOW ON (DealDamage can delete aura)
|
||||
|
||||
pCaster->ProcDamageAndSpell(target, PROC_FLAG_HEALED, PROC_FLAG_TAKE_DAMAGE, new_damage, GetSpellSchoolMask(spellProto), spellProto);
|
||||
if (!target->isAlive() && pCaster->IsNonMeleeSpellCasted(false))
|
||||
{
|
||||
for (uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
|
||||
|
|
@ -6005,9 +6016,11 @@ void Aura::PeriodicTick()
|
|||
}
|
||||
}
|
||||
|
||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HEAL;
|
||||
uint32 procVictim = 0;//ROC_FLAG_ON_TAKE_PERIODIC | PROC_FLAG_TAKEN_HEAL;
|
||||
// ignore item heals
|
||||
if(procSpell && !haveCastItem)
|
||||
pCaster->ProcDamageAndSpell(target,PROC_FLAG_NONE, PROC_FLAG_HEALED, pdamage, SPELL_SCHOOL_MASK_NONE, spellProto);
|
||||
// if(procSpell && !haveCastItem)
|
||||
// pCaster->ProcDamageAndSpell(target, procAttacker, procVictim, PROC_EX_NORMAL_HIT, pdamage, BASE_ATTACK, spellProto);
|
||||
break;
|
||||
}
|
||||
case SPELL_AURA_PERIODIC_MANA_LEECH:
|
||||
|
|
@ -6166,8 +6179,22 @@ void Aura::PeriodicTick()
|
|||
|
||||
gain = uint32(gain * GetSpellProto()->EffectMultipleValue[GetEffIndex()]);
|
||||
|
||||
SpellEntry const* spellProto = GetSpellProto();
|
||||
//maybe has to be sent different to client, but not by SMSG_PERIODICAURALOG
|
||||
pCaster->SpellNonMeleeDamageLog(m_target, GetId(), gain);
|
||||
SpellNonMeleeDamage damageInfo(pCaster, m_target, spellProto->Id, spellProto->SchoolMask);
|
||||
pCaster->CalculateSpellDamage(&damageInfo, gain, spellProto);
|
||||
pCaster->SendSpellNonMeleeDamageLog(&damageInfo);
|
||||
|
||||
// Set trigger flag
|
||||
uint32 procAttacker = PROC_FLAG_ON_DO_PERIODIC;// | PROC_FLAG_SUCCESSFUL_HARMFUL_SPELL_HIT;
|
||||
uint32 procVictim = PROC_FLAG_ON_TAKE_PERIODIC;// | PROC_FLAG_TAKEN_HARMFUL_SPELL_HIT;
|
||||
uint32 procEx = createProcExtendMask(&damageInfo, SPELL_MISS_NONE);
|
||||
if (damageInfo.damage)
|
||||
procVictim|=PROC_FLAG_TAKEN_ANY_DAMAGE;
|
||||
|
||||
pCaster->ProcDamageAndSpell(damageInfo.target, procAttacker, procVictim, procEx, damageInfo.damage, BASE_ATTACK, spellProto);
|
||||
|
||||
pCaster->DealSpellDamage(&damageInfo, true);
|
||||
break;
|
||||
}
|
||||
// Here tick dummy auras
|
||||
|
|
|
|||
|
|
@ -616,61 +616,7 @@ void Spell::EffectSchoolDMG(uint32 effect_idx)
|
|||
}
|
||||
|
||||
if(damage >= 0)
|
||||
{
|
||||
uint32 finalDamage;
|
||||
if(m_originalCaster) // m_caster only passive source of cast
|
||||
finalDamage = m_originalCaster->SpellNonMeleeDamageLog(unitTarget, m_spellInfo->Id, damage, m_IsTriggeredSpell, true);
|
||||
else
|
||||
finalDamage = m_caster->SpellNonMeleeDamageLog(unitTarget, m_spellInfo->Id, damage, m_IsTriggeredSpell, true);
|
||||
|
||||
// post effects
|
||||
switch(m_spellInfo->SpellFamilyName)
|
||||
{
|
||||
case SPELLFAMILY_WARRIOR:
|
||||
{
|
||||
// Bloodthirst
|
||||
if(m_spellInfo->SpellFamilyFlags & 0x40000000000LL)
|
||||
{
|
||||
uint32 BTAura = 0;
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
case 23881: BTAura = 23885; break;
|
||||
case 23892: BTAura = 23886; break;
|
||||
case 23893: BTAura = 23887; break;
|
||||
case 23894: BTAura = 23888; break;
|
||||
case 25251: BTAura = 25252; break;
|
||||
case 30335: BTAura = 30339; break;
|
||||
default:
|
||||
sLog.outError("Spell::EffectSchoolDMG: Spell %u not handled in BTAura",m_spellInfo->Id);
|
||||
break;
|
||||
}
|
||||
|
||||
if (BTAura)
|
||||
m_caster->CastSpell(m_caster,BTAura,true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_PRIEST:
|
||||
{
|
||||
// Shadow Word: Death
|
||||
if(finalDamage > 0 && (m_spellInfo->SpellFamilyFlags & 0x0000000200000000LL) && unitTarget->isAlive())
|
||||
// deals damage equal to damage done to caster if victim is not killed
|
||||
m_caster->SpellNonMeleeDamageLog( m_caster, m_spellInfo->Id, finalDamage, m_IsTriggeredSpell, false);
|
||||
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_PALADIN:
|
||||
{
|
||||
// Judgement of Blood
|
||||
if(finalDamage > 0 && (m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL) && m_spellInfo->SpellIconID==153)
|
||||
{
|
||||
int32 damagePoint = finalDamage * 33 / 100;
|
||||
m_caster->CastCustomSpell(m_caster, 32220, &damagePoint, NULL, NULL, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
m_damage+= damage;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1486,7 +1432,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
}
|
||||
|
||||
if(found)
|
||||
m_caster->SpellNonMeleeDamageLog(unitTarget, m_spellInfo->Id, damage, m_IsTriggeredSpell, true);
|
||||
m_damage+= damage;
|
||||
return;
|
||||
}
|
||||
// Kill command
|
||||
|
|
@ -2437,7 +2383,7 @@ void Spell::EffectPowerBurn(uint32 i)
|
|||
modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_MULTIPLE_VALUE, multiplier);
|
||||
|
||||
new_damage = int32(new_damage*multiplier);
|
||||
m_caster->SpellNonMeleeDamageLog(unitTarget, m_spellInfo->Id, new_damage, m_IsTriggeredSpell, true);
|
||||
m_damage+=new_damage;
|
||||
}
|
||||
|
||||
void Spell::EffectHeal( uint32 /*i*/ )
|
||||
|
|
@ -2505,27 +2451,7 @@ void Spell::EffectHeal( uint32 /*i*/ )
|
|||
else
|
||||
addhealth = caster->SpellHealingBonus(m_spellInfo, addhealth,HEAL, unitTarget);
|
||||
|
||||
bool crit = caster->isSpellCrit(unitTarget, m_spellInfo, m_spellSchoolMask, m_attackType);
|
||||
if (crit)
|
||||
addhealth = caster->SpellCriticalBonus(m_spellInfo, addhealth, unitTarget);
|
||||
caster->SendHealSpellLog(unitTarget, m_spellInfo->Id, addhealth, crit);
|
||||
|
||||
int32 gain = unitTarget->ModifyHealth( int32(addhealth) );
|
||||
unitTarget->getHostilRefManager().threatAssist(m_caster, float(gain) * 0.5f, m_spellInfo);
|
||||
|
||||
if(caster->GetTypeId()==TYPEID_PLAYER)
|
||||
if(BattleGround *bg = ((Player*)caster)->GetBattleGround())
|
||||
bg->UpdatePlayerScore(((Player*)caster), SCORE_HEALING_DONE, gain);
|
||||
|
||||
// ignore item heals
|
||||
if(m_CastItem)
|
||||
return;
|
||||
|
||||
uint32 procHealer = PROC_FLAG_HEAL;
|
||||
if (crit)
|
||||
procHealer |= PROC_FLAG_CRIT_HEAL;
|
||||
|
||||
m_caster->ProcDamageAndSpell(unitTarget,procHealer,PROC_FLAG_HEALED,addhealth,SPELL_SCHOOL_MASK_NONE,m_spellInfo,m_IsTriggeredSpell);
|
||||
m_healing+=addhealth;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2602,6 +2528,8 @@ void Spell::EffectHealthLeech(uint32 i)
|
|||
if(m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
m_caster->SendHealSpellLog(m_caster, m_spellInfo->Id, uint32(new_damage));
|
||||
}
|
||||
// m_healthLeech+=tmpvalue;
|
||||
// m_damage+=new_damage;
|
||||
}
|
||||
|
||||
void Spell::DoCreateItem(uint32 i, uint32 itemtype)
|
||||
|
|
@ -3283,7 +3211,7 @@ void Spell::EffectSummon(uint32 i)
|
|||
uint32 level = m_caster->getLevel();
|
||||
Pet* spawnCreature = new Pet(SUMMON_PET);
|
||||
|
||||
if(spawnCreature->LoadPetFromDB(m_caster,pet_entry))
|
||||
if(m_caster->GetTypeId()==TYPEID_PLAYER && spawnCreature->LoadPetFromDB((Player*)m_caster,pet_entry))
|
||||
{
|
||||
// set timer for unsummon
|
||||
int32 duration = GetSpellDuration(m_spellInfo);
|
||||
|
|
@ -4099,7 +4027,7 @@ void Spell::EffectSummonPet(uint32 i)
|
|||
Pet* NewSummon = new Pet;
|
||||
|
||||
// petentry==0 for hunter "call pet" (current pet summoned if any)
|
||||
if(NewSummon->LoadPetFromDB(m_caster,petentry))
|
||||
if(m_caster->GetTypeId() == TYPEID_PLAYER && NewSummon->LoadPetFromDB((Player*)m_caster,petentry))
|
||||
{
|
||||
if(NewSummon->getPetType()==SUMMON_PET)
|
||||
{
|
||||
|
|
@ -4184,7 +4112,8 @@ void Spell::EffectSummonPet(uint32 i)
|
|||
// this enables pet details window (Shift+P)
|
||||
|
||||
// this enables popup window (pet dismiss, cancel), hunter pet additional flags set later
|
||||
NewSummon->SetUInt32Value(UNIT_FIELD_FLAGS,UNIT_FLAG_PVP_ATTACKABLE);
|
||||
if(m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
NewSummon->SetUInt32Value(UNIT_FIELD_FLAGS,UNIT_FLAG_PVP_ATTACKABLE);
|
||||
|
||||
NewSummon->InitStatsForLevel(petlevel);
|
||||
NewSummon->InitPetCreateSpells();
|
||||
|
|
@ -4451,35 +4380,9 @@ void Spell::EffectWeaponDmg(uint32 i)
|
|||
// prevent negative damage
|
||||
uint32 eff_damage = uint32(bonus > 0 ? bonus : 0);
|
||||
|
||||
const uint32 nohitMask = HITINFO_ABSORB | HITINFO_RESIST | HITINFO_MISS;
|
||||
|
||||
uint32 hitInfo = 0;
|
||||
VictimState victimState = VICTIMSTATE_NORMAL;
|
||||
uint32 blocked_dmg = 0;
|
||||
uint32 absorbed_dmg = 0;
|
||||
uint32 resisted_dmg = 0;
|
||||
CleanDamage cleanDamage = CleanDamage(0, BASE_ATTACK, MELEE_HIT_NORMAL );
|
||||
|
||||
m_caster->DoAttackDamage(unitTarget, &eff_damage, &cleanDamage, &blocked_dmg, m_spellSchoolMask, &hitInfo, &victimState, &absorbed_dmg, &resisted_dmg, m_attackType, m_spellInfo, m_IsTriggeredSpell);
|
||||
|
||||
if ((hitInfo & nohitMask) && m_attackType != RANGED_ATTACK) // not send ranged miss/etc
|
||||
m_caster->SendAttackStateUpdate(hitInfo & nohitMask, unitTarget, 1, m_spellSchoolMask, eff_damage, absorbed_dmg, resisted_dmg, VICTIMSTATE_NORMAL, blocked_dmg);
|
||||
|
||||
bool criticalhit = (hitInfo & HITINFO_CRITICALHIT);
|
||||
m_caster->SendSpellNonMeleeDamageLog(unitTarget, m_spellInfo->Id, eff_damage, m_spellSchoolMask, absorbed_dmg, resisted_dmg, false, blocked_dmg, criticalhit);
|
||||
|
||||
if (eff_damage > (absorbed_dmg + resisted_dmg + blocked_dmg))
|
||||
{
|
||||
eff_damage -= (absorbed_dmg + resisted_dmg + blocked_dmg);
|
||||
}
|
||||
else
|
||||
{
|
||||
cleanDamage.damage += eff_damage;
|
||||
eff_damage = 0;
|
||||
}
|
||||
|
||||
// SPELL_SCHOOL_NORMAL use for weapon-like threat and rage calculation
|
||||
m_caster->DealDamage(unitTarget, eff_damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, true);
|
||||
// Add melee damage bonuses (also check for negative)
|
||||
m_caster->MeleeDamageBonus(unitTarget, &eff_damage, m_attackType, m_spellInfo);
|
||||
m_damage+= eff_damage;
|
||||
|
||||
// Hemorrhage
|
||||
if(m_spellInfo->SpellFamilyName==SPELLFAMILY_ROGUE && (m_spellInfo->SpellFamilyFlags & 0x2000000))
|
||||
|
|
@ -4543,10 +4446,7 @@ void Spell::EffectHealMaxHealth(uint32 /*i*/)
|
|||
|
||||
uint32 heal = m_caster->GetMaxHealth();
|
||||
|
||||
int32 gain = unitTarget->ModifyHealth(heal);
|
||||
unitTarget->getHostilRefManager().threatAssist(m_caster, float(gain) * 0.5f, m_spellInfo);
|
||||
|
||||
m_caster->SendHealSpellLog(unitTarget, m_spellInfo->Id, heal);
|
||||
m_healing+=heal;
|
||||
}
|
||||
|
||||
void Spell::EffectInterruptCast(uint32 /*i*/)
|
||||
|
|
@ -5337,8 +5237,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5411,7 +5309,9 @@ void Spell::EffectSummonTotem(uint32 i)
|
|||
}
|
||||
|
||||
pTotem->SetUInt32Value(UNIT_CREATED_BY_SPELL,m_spellInfo->Id);
|
||||
pTotem->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_PVP_ATTACKABLE);
|
||||
|
||||
if(m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
pTotem->SetFlag(UNIT_FIELD_FLAGS,UNIT_FLAG_PVP_ATTACKABLE);
|
||||
|
||||
pTotem->ApplySpellImmune(m_spellInfo->Id,IMMUNITY_STATE,SPELL_AURA_MOD_FEAR,true);
|
||||
pTotem->ApplySpellImmune(m_spellInfo->Id,IMMUNITY_STATE,SPELL_AURA_TRANSFORM,true);
|
||||
|
|
|
|||
|
|
@ -282,6 +282,16 @@ void WorldSession::HandleGameObjectUseOpcode( WorldPacket & recv_data )
|
|||
obj->Use(_player);
|
||||
}
|
||||
|
||||
void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket)
|
||||
{
|
||||
CHECK_PACKET_SIZE(recvPacket,8);
|
||||
|
||||
uint64 guid;
|
||||
recvPacket >> guid;
|
||||
|
||||
sLog.outDebug( "WORLD: Recvd CMSG_GAMEOBJ_REPORT_USE Message [in game guid: %u]", GUID_LOPART(guid));
|
||||
}
|
||||
|
||||
void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
CHECK_PACKET_SIZE(recvPacket,1+4+1);
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
|
|||
if (IsSealSpell(spellInfo))
|
||||
return SPELL_SEAL;
|
||||
|
||||
if (spellInfo->SpellFamilyFlags & 0x10000100LL)
|
||||
if (spellInfo->SpellFamilyFlags & 0x0000000011010002LL)
|
||||
return SPELL_BLESSING;
|
||||
|
||||
if ((spellInfo->SpellFamilyFlags & 0x00000820180400LL) && (spellInfo->AttributesEx3 & 0x200))
|
||||
|
|
@ -530,6 +530,17 @@ bool IsSingleTargetSpells(SpellEntry const *spellInfo1, SpellEntry const *spellI
|
|||
return false;
|
||||
}
|
||||
|
||||
bool IsAuraAddedBySpell(uint32 auraType, uint32 spellId)
|
||||
{
|
||||
SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId);
|
||||
if (!spellproto) return false;
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
if (spellproto->EffectApplyAuraName[i] == auraType)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8 GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form)
|
||||
{
|
||||
// talents that learn spells can have stance requirements that need ignore
|
||||
|
|
@ -805,8 +816,8 @@ void SpellMgr::LoadSpellProcEvents()
|
|||
|
||||
uint32 count = 0;
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, Category, SkillID, SpellFamilyName, SpellFamilyMask, procFlags, ppmRate, cooldown FROM spell_proc_event");
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event");
|
||||
if( !result )
|
||||
{
|
||||
|
||||
|
|
@ -820,7 +831,7 @@ void SpellMgr::LoadSpellProcEvents()
|
|||
}
|
||||
|
||||
barGoLink bar( result->GetRowCount() );
|
||||
|
||||
uint32 customProc = 0;
|
||||
do
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
|
|
@ -829,7 +840,8 @@ void SpellMgr::LoadSpellProcEvents()
|
|||
|
||||
uint16 entry = fields[0].GetUInt16();
|
||||
|
||||
if (!sSpellStore.LookupEntry(entry))
|
||||
const SpellEntry *spell = sSpellStore.LookupEntry(entry);
|
||||
if (!spell)
|
||||
{
|
||||
sLog.outErrorDb("Spell %u listed in `spell_proc_event` does not exist", entry);
|
||||
continue;
|
||||
|
|
@ -838,91 +850,101 @@ void SpellMgr::LoadSpellProcEvents()
|
|||
SpellProcEventEntry spe;
|
||||
|
||||
spe.schoolMask = fields[1].GetUInt32();
|
||||
spe.category = fields[2].GetUInt32();
|
||||
spe.skillId = fields[3].GetUInt32();
|
||||
spe.spellFamilyName = fields[4].GetUInt32();
|
||||
spe.spellFamilyMask = fields[5].GetUInt64();
|
||||
spe.procFlags = fields[6].GetUInt32();
|
||||
spe.ppmRate = fields[7].GetFloat();
|
||||
spe.spellFamilyName = fields[2].GetUInt32();
|
||||
spe.spellFamilyMask = fields[3].GetUInt64();
|
||||
spe.procFlags = fields[4].GetUInt32();
|
||||
spe.procEx = fields[5].GetUInt32();
|
||||
spe.ppmRate = fields[6].GetFloat();
|
||||
spe.customChance = fields[7].GetFloat();
|
||||
spe.cooldown = fields[8].GetUInt32();
|
||||
|
||||
mSpellProcEventMap[entry] = spe;
|
||||
|
||||
if (spell->procFlags==0)
|
||||
{
|
||||
if (spe.procFlags == 0)
|
||||
{
|
||||
sLog.outErrorDb("Spell %u listed in `spell_proc_event` probally not triggered spell", entry);
|
||||
continue;
|
||||
}
|
||||
customProc++;
|
||||
}
|
||||
++count;
|
||||
} while( result->NextRow() );
|
||||
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
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()]);
|
||||
}
|
||||
*/
|
||||
if (customProc)
|
||||
sLog.outString( ">> Loaded %u extra spell proc event conditions +%u custom", count, customProc );
|
||||
else
|
||||
sLog.outString( ">> Loaded %u extra spell proc event conditions", count );
|
||||
}
|
||||
|
||||
bool SpellMgr::IsSpellProcEventCanTriggeredBy( SpellProcEventEntry const * spellProcEvent, SpellEntry const * procSpell, uint32 procFlags )
|
||||
bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellProcEvent, uint32 EventProcFlag, SpellEntry const * procSpell, uint32 procFlags, uint32 procExtra, bool active)
|
||||
{
|
||||
if((procFlags & spellProcEvent->procFlags) == 0)
|
||||
// No extra req need
|
||||
uint32 procEvent_procEx = PROC_EX_NONE;
|
||||
|
||||
// check prockFlags for condition
|
||||
if((procFlags & EventProcFlag) == 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)
|
||||
// Always trigger for this
|
||||
if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL_AND_GET_XP))
|
||||
return true;
|
||||
|
||||
if (spellProcEvent) // Exist event data
|
||||
{
|
||||
if (!procSpell)
|
||||
return false;
|
||||
// Store extra req
|
||||
procEvent_procEx = spellProcEvent->procEx;
|
||||
|
||||
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)
|
||||
// For melee triggers
|
||||
if (procSpell == NULL)
|
||||
{
|
||||
if(_spell_idx->second->skillId == spellProcEvent->skillId)
|
||||
// Check (if set) for school (melee attack have Normal school)
|
||||
if(spellProcEvent->schoolMask && (spellProcEvent->schoolMask & SPELL_SCHOOL_MASK_NORMAL) == 0)
|
||||
return false;
|
||||
}
|
||||
else // For spells need check school/spell family/family mask
|
||||
{
|
||||
// Check (if set) for school
|
||||
if(spellProcEvent->schoolMask && (spellProcEvent->schoolMask & procSpell->SchoolMask) == 0)
|
||||
return false;
|
||||
|
||||
// Check (if set) for spellFamilyName
|
||||
if(spellProcEvent->spellFamilyName && (spellProcEvent->spellFamilyName != procSpell->SpellFamilyName))
|
||||
return false;
|
||||
|
||||
// spellFamilyName is Ok need check for spellFamilyMask if present
|
||||
if(spellProcEvent->spellFamilyMask)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags) == 0)
|
||||
return false;
|
||||
active = true; // Spell added manualy -> so its active spell
|
||||
}
|
||||
}
|
||||
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;
|
||||
// Check for extra req (if none) and hit/crit
|
||||
if (procEvent_procEx == PROC_EX_NONE)
|
||||
{
|
||||
// No extra req, so can trigger only for active (damage/healing present) and hit/crit
|
||||
if((procExtra & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) && active)
|
||||
return true;
|
||||
}
|
||||
else // Passive spells hits here only if resist/reflect/immune/evade
|
||||
{
|
||||
// Exist req for PROC_EX_EX_TRIGGER_ALWAYS
|
||||
if (procEvent_procEx & PROC_EX_EX_TRIGGER_ALWAYS)
|
||||
return true;
|
||||
// Passive spells can`t trigger if need hit
|
||||
if ((procEvent_procEx & PROC_EX_NORMAL_HIT) && !active)
|
||||
return false;
|
||||
// Check Extra Requirement like (hit/crit/miss/resist/parry/dodge/block/immune/reflect/absorb and other)
|
||||
if (procEvent_procEx & procExtra)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void SpellMgr::LoadSpellElixirs()
|
||||
|
|
@ -1728,8 +1750,10 @@ void SpellMgr::LoadSpellLearnSpells()
|
|||
if(!sSpellStore.LookupEntry(dbc_node.spell))
|
||||
continue;
|
||||
|
||||
// talent or passive spells or skill-step spells auto-casted, other required explicit dependent learning
|
||||
dbc_node.autoLearned = GetTalentSpellCost(spell) > 0 || IsPassiveSpell(spell) || IsSpellHaveEffect(entry,SPELL_EFFECT_SKILL_STEP);
|
||||
// talent or passive spells or skill-step spells auto-casted and not need dependent learning,
|
||||
// pet teaching spells don't must be dependent learning (casted)
|
||||
// other required explicit dependent learning
|
||||
dbc_node.autoLearned = entry->EffectImplicitTargetA[i]==TARGET_PET || GetTalentSpellCost(spell) > 0 || IsPassiveSpell(spell) || IsSpellHaveEffect(entry,SPELL_EFFECT_SKILL_STEP);
|
||||
|
||||
SpellLearnSpellMap::const_iterator db_node_begin = GetBeginSpellLearnSpell(spell);
|
||||
SpellLearnSpellMap::const_iterator db_node_end = GetEndSpellLearnSpell(spell);
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ inline bool IsSealSpell(SpellEntry const *spellInfo)
|
|||
{
|
||||
//Collection of all the seal family flags. No other paladin spell has any of those.
|
||||
return spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN &&
|
||||
( spellInfo->SpellFamilyFlags & 0x4000A000200LL );
|
||||
( spellInfo->SpellFamilyFlags & 0x26000C000A000000LL );
|
||||
}
|
||||
|
||||
inline bool IsElementalShield(SpellEntry const *spellInfo)
|
||||
|
|
@ -339,6 +339,8 @@ bool IsPositiveTarget(uint32 targetA, uint32 targetB);
|
|||
bool IsSingleTargetSpell(SpellEntry const *spellInfo);
|
||||
bool IsSingleTargetSpells(SpellEntry const *spellInfo1, SpellEntry const *spellInfo2);
|
||||
|
||||
bool IsAuraAddedBySpell(uint32 auraType, uint32 spellId);
|
||||
|
||||
bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id);
|
||||
|
||||
inline bool IsAreaEffectTarget( Targets target )
|
||||
|
|
@ -462,50 +464,86 @@ typedef UNORDERED_MAP<uint32, SpellAffectEntry> SpellAffectMap;
|
|||
// Spell proc event related declarations (accessed using SpellMgr functions)
|
||||
enum ProcFlags
|
||||
{
|
||||
PROC_FLAG_NONE = 0x00000000, // None
|
||||
PROC_FLAG_HIT_MELEE = 0x00000001, // On melee hit
|
||||
PROC_FLAG_STRUCK_MELEE = 0x00000002, // On being struck melee
|
||||
PROC_FLAG_KILL_XP_GIVER = 0x00000004, // On kill target giving XP or honor
|
||||
PROC_FLAG_SPECIAL_DROP = 0x00000008, //
|
||||
PROC_FLAG_DODGE = 0x00000010, // On dodge melee attack
|
||||
PROC_FLAG_PARRY = 0x00000020, // On parry melee attack
|
||||
PROC_FLAG_BLOCK = 0x00000040, // On block attack
|
||||
PROC_FLAG_TOUCH = 0x00000080, // On being touched (for bombs, probably?)
|
||||
PROC_FLAG_TARGET_LOW_HEALTH = 0x00000100, // On deal damage to enemy with 20% or less health
|
||||
PROC_FLAG_LOW_HEALTH = 0x00000200, // On health dropped below 20%
|
||||
PROC_FLAG_STRUCK_RANGED = 0x00000400, // On being struck ranged
|
||||
PROC_FLAG_HIT_SPECIAL = 0x00000800, // (!)Removed, may be reassigned in future
|
||||
PROC_FLAG_CRIT_MELEE = 0x00001000, // On crit melee
|
||||
PROC_FLAG_STRUCK_CRIT_MELEE = 0x00002000, // On being critically struck in melee
|
||||
PROC_FLAG_CAST_SPELL = 0x00004000, // On cast spell
|
||||
PROC_FLAG_TAKE_DAMAGE = 0x00008000, // On take damage
|
||||
PROC_FLAG_CRIT_SPELL = 0x00010000, // On crit spell
|
||||
PROC_FLAG_HIT_SPELL = 0x00020000, // On hit spell
|
||||
PROC_FLAG_STRUCK_CRIT_SPELL = 0x00040000, // On being critically struck by a spell
|
||||
PROC_FLAG_HIT_RANGED = 0x00080000, // On getting ranged hit
|
||||
PROC_FLAG_STRUCK_SPELL = 0x00100000, // On being struck by a spell
|
||||
PROC_FLAG_TRAP = 0x00200000, // On trap activation (?)
|
||||
PROC_FLAG_CRIT_RANGED = 0x00400000, // On getting ranged crit
|
||||
PROC_FLAG_STRUCK_CRIT_RANGED = 0x00800000, // On being critically struck by a ranged attack
|
||||
PROC_FLAG_RESIST_SPELL = 0x01000000, // On resist enemy spell
|
||||
PROC_FLAG_TARGET_RESISTS = 0x02000000, // On enemy resisted spell
|
||||
PROC_FLAG_TARGET_DODGE_OR_PARRY = 0x04000000, // On enemy dodges/parries
|
||||
PROC_FLAG_HEAL = 0x08000000, // On heal
|
||||
PROC_FLAG_CRIT_HEAL = 0x10000000, // On critical healing effect
|
||||
PROC_FLAG_HEALED = 0x20000000, // On healing
|
||||
PROC_FLAG_TARGET_BLOCK = 0x40000000, // On enemy blocks
|
||||
PROC_FLAG_MISS = 0x80000000 // On miss melee attack
|
||||
PROC_FLAG_NONE = 0x00000000,
|
||||
|
||||
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 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 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
|
||||
|
||||
PROC_FLAG_SUCCESSFUL_POSITIVE_AOE_HIT = 0x00000400, // 10 Successful AoE (not 100% shure unused)
|
||||
PROC_FLAG_TAKEN_POSITIVE_AOE = 0x00000800, // 11 Taken AoE (not 100% shure unused)
|
||||
|
||||
PROC_FLAG_SUCCESSFUL_AOE_SPELL_HIT = 0x00001000, // 12 Successful AoE damage spell hit (not 100% shure unused)
|
||||
PROC_FLAG_TAKEN_AOE_SPELL_HIT = 0x00002000, // 13 Taken AoE damage spell hit (not 100% shure unused)
|
||||
|
||||
PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL = 0x00004000, // 14 Successful cast positive spell (by default only on healing)
|
||||
PROC_FLAG_TAKEN_POSITIVE_SPELL = 0x00008000, // 15 Taken positive spell hit (by default only on healing)
|
||||
|
||||
PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT = 0x00010000, // 16 Successful negative spell cast (by default only on damage)
|
||||
PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT = 0x00020000, // 17 Taken negative spell (by default only on damage)
|
||||
|
||||
PROC_FLAG_ON_DO_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing, determined from 14-17 flags)
|
||||
PROC_FLAG_ON_TAKE_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing, determined from 14-17 flags)
|
||||
|
||||
PROC_FLAG_TAKEN_ANY_DAMAGE = 0x00100000, // 20 Taken any damage
|
||||
PROC_FLAG_ON_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation
|
||||
|
||||
PROC_FLAG_TAKEN_OFFHAND_HIT = 0x00400000, // 22 Taken off-hand melee attacks(not used)
|
||||
PROC_FLAG_SUCCESSFUL_OFFHAND_HIT = 0x00800000 // 23 Successful off-hand melee attacks
|
||||
};
|
||||
|
||||
#define MELEE_BASED_TRIGGER_MASK (PROC_FLAG_SUCCESSFUL_MILEE_HIT | \
|
||||
PROC_FLAG_TAKEN_MELEE_HIT | \
|
||||
PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT | \
|
||||
PROC_FLAG_TAKEN_MELEE_SPELL_HIT | \
|
||||
PROC_FLAG_SUCCESSFUL_RANGED_HIT | \
|
||||
PROC_FLAG_TAKEN_RANGED_HIT | \
|
||||
PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT | \
|
||||
PROC_FLAG_TAKEN_RANGED_SPELL_HIT)
|
||||
|
||||
enum ProcFlagsEx
|
||||
{
|
||||
PROC_EX_NONE = 0x0000000, // If none can tigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag)
|
||||
PROC_EX_NORMAL_HIT = 0x0000001, // If set only from normal hit (only damage spells)
|
||||
PROC_EX_CRITICAL_HIT = 0x0000002,
|
||||
PROC_EX_MISS = 0x0000004,
|
||||
PROC_EX_RESIST = 0x0000008,
|
||||
PROC_EX_DODGE = 0x0000010,
|
||||
PROC_EX_PARRY = 0x0000020,
|
||||
PROC_EX_BLOCK = 0x0000040,
|
||||
PROC_EX_EVADE = 0x0000080,
|
||||
PROC_EX_IMMUNE = 0x0000100,
|
||||
PROC_EX_DEFLECT = 0x0000200,
|
||||
PROC_EX_ABSORB = 0x0000400,
|
||||
PROC_EX_REFLECT = 0x0000800,
|
||||
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 (not used)
|
||||
};
|
||||
|
||||
struct SpellProcEventEntry
|
||||
{
|
||||
uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2
|
||||
uint32 category; // if nonzero - match proc condition based on candidate spell's category
|
||||
uint32 skillId; // if nonzero - for matching proc condition based on candidate spell's skillId from SkillLineAbility.dbc (Shadow Bolt = Destruction)
|
||||
uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value
|
||||
uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do)
|
||||
uint32 procFlags; // bitmask for matching proc event
|
||||
uint32 procEx; // proc Extend info (see ProcFlagsEx)
|
||||
float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc
|
||||
float customChance; // Owerride chance (in most cases for debug only)
|
||||
uint32 cooldown; // hidden cooldown used for some spell proc events, applied to _triggered_spell_
|
||||
};
|
||||
|
||||
|
|
@ -707,7 +745,7 @@ class SpellMgr
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static bool IsSpellProcEventCanTriggeredBy( SpellProcEventEntry const * spellProcEvent, SpellEntry const * procSpell, uint32 procFlags );
|
||||
static bool IsSpellProcEventCanTriggeredBy( SpellProcEventEntry const * spellProcEvent, uint32 EventProcFlag, SpellEntry const * procSpell, uint32 procFlags, uint32 procExtra, bool active);
|
||||
|
||||
// Spell target coordinates
|
||||
SpellTargetPosition const* GetSpellTargetPosition(uint32 spell_id) const
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef MANGOS_TOOLS_H
|
||||
#define MANGOS_TOOLS_H
|
||||
|
||||
#include "Common.h"
|
||||
#include "WorldPacket.h"
|
||||
|
||||
bool readGUID(WorldPacket & data, uint64& guid);
|
||||
void writeGUID(WorldPacket & data, uint64 & guid);
|
||||
#endif
|
||||
3901
src/game/Unit.cpp
3901
src/game/Unit.cpp
File diff suppressed because it is too large
Load diff
|
|
@ -596,6 +596,50 @@ struct CleanDamage
|
|||
MeleeHitOutcome hitOutCome;
|
||||
};
|
||||
|
||||
// Struct for use in Unit::CalculateMeleeDamage
|
||||
// Need create structure like in SMSG_ATTACKERSTATEUPDATE opcode
|
||||
struct CalcDamageInfo
|
||||
{
|
||||
Unit *attacker; // Attacker
|
||||
Unit *target; // Target for damage
|
||||
uint32 damageSchoolMask;
|
||||
uint32 damage;
|
||||
uint32 absorb;
|
||||
uint32 resist;
|
||||
uint32 blocked_amount;
|
||||
uint32 HitInfo;
|
||||
uint32 TargetState;
|
||||
// Helper
|
||||
WeaponAttackType attackType; //
|
||||
uint32 procAttacker;
|
||||
uint32 procVictim;
|
||||
uint32 procEx;
|
||||
uint32 cleanDamage; // Used only fo rage calcultion
|
||||
MeleeHitOutcome hitOutCome; // TODO: remove this field (need use TargetState)
|
||||
};
|
||||
|
||||
// Spell damage info structure based on structure sending in SMSG_SPELLNONMELEEDAMAGELOG opcode
|
||||
struct SpellNonMeleeDamage{
|
||||
SpellNonMeleeDamage(Unit *_attacker, Unit *_target, uint32 _SpellID, uint32 _schoolMask) :
|
||||
attacker(_attacker), target(_target), SpellID(_SpellID), damage(0), schoolMask(_schoolMask),
|
||||
absorb(0), resist(0), phusicalLog(false), unused(false), blocked(0), HitInfo(0), cleanDamage(0) {}
|
||||
Unit *target;
|
||||
Unit *attacker;
|
||||
uint32 SpellID;
|
||||
uint32 damage;
|
||||
uint32 schoolMask;
|
||||
uint32 absorb;
|
||||
uint32 resist;
|
||||
bool phusicalLog;
|
||||
bool unused;
|
||||
uint32 blocked;
|
||||
uint32 HitInfo;
|
||||
// Used for help
|
||||
uint32 cleanDamage;
|
||||
};
|
||||
|
||||
uint32 createProcExtendMask(SpellNonMeleeDamage *damageInfo, SpellMissInfo missCondition);
|
||||
|
||||
struct UnitActionBarEntry
|
||||
{
|
||||
union
|
||||
|
|
@ -711,6 +755,8 @@ enum ReactiveType
|
|||
// delay time next attack to prevent client attack animation problems
|
||||
#define ATTACK_DISPLAY_DELAY 200
|
||||
|
||||
struct SpellProcEventEntry; // used only privately
|
||||
|
||||
class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||
{
|
||||
public:
|
||||
|
|
@ -719,7 +765,6 @@ class MANGOS_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;
|
||||
|
||||
|
|
@ -868,15 +913,23 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
|
||||
uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; }
|
||||
uint32 DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellEntry const *spellProto, bool durabilityLoss);
|
||||
void DealFlatDamage(Unit *pVictim, SpellEntry const *spellInfo, uint32 *damage, CleanDamage *cleanDamage, bool *crit = false, bool isTriggeredSpell = false);
|
||||
void 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 = NULL, bool isTriggeredSpell = false);
|
||||
|
||||
void CastMeleeProcDamageAndSpell(Unit* pVictim, uint32 damage, SpellSchoolMask damageSchoolMask, WeaponAttackType attType, MeleeHitOutcome outcome, SpellEntry const *spellCasted = NULL, bool isTriggeredSpell = false);
|
||||
void ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 damage = 0, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NONE, SpellEntry const *procSpell = NULL, bool isTriggeredSpell = false, WeaponAttackType attType = BASE_ATTACK);
|
||||
void ProcDamageAndSpell(Unit *pVictim, uint32 procAttacker, uint32 procVictim, uint32 procEx, uint32 amount, WeaponAttackType attType = BASE_ATTACK, SpellEntry const *procSpell = NULL);
|
||||
void ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage );
|
||||
|
||||
void HandleEmoteCommand(uint32 anim_id);
|
||||
void AttackerStateUpdate (Unit *pVictim, WeaponAttackType attType = BASE_ATTACK, bool extra = false );
|
||||
|
||||
float MeleeMissChanceCalc(const Unit *pVictim, WeaponAttackType attType) const;
|
||||
|
||||
void CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *damageInfo, WeaponAttackType attackType = BASE_ATTACK);
|
||||
void DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss);
|
||||
|
||||
void CalculateSpellDamage(SpellNonMeleeDamage *damageInfo, int32 damage, SpellEntry const *spellInfo, WeaponAttackType attackType = BASE_ATTACK);
|
||||
void DealSpellDamage(SpellNonMeleeDamage *damageInfo, bool durabilityLoss);
|
||||
|
||||
float MeleeSpellMissChance(Unit *pVictim, WeaponAttackType attType, int32 skillDiff, SpellEntry const *spell);
|
||||
SpellMissInfo MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell);
|
||||
SpellMissInfo MagicSpellHitResult(Unit *pVictim, SpellEntry const *spell);
|
||||
SpellMissInfo SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool canReflect = false);
|
||||
|
||||
|
|
@ -891,7 +944,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
uint32 GetWeaponSkillValue(WeaponAttackType attType, Unit const* target = NULL) const;
|
||||
float GetWeaponProcChance() const;
|
||||
float GetPPMProcChance(uint32 WeaponSpeed, float PPM) const;
|
||||
MeleeHitOutcome RollPhysicalOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, SpellEntry const *spellInfo);
|
||||
|
||||
MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType) const;
|
||||
MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance, bool SpellCasted ) const;
|
||||
|
||||
|
|
@ -965,7 +1018,9 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
|
||||
void DeMorph();
|
||||
|
||||
void SendAttackStateUpdate(CalcDamageInfo *damageInfo);
|
||||
void SendAttackStateUpdate(uint32 HitInfo, Unit *target, uint8 SwingType, SpellSchoolMask damageSchoolMask, uint32 Damage, uint32 AbsorbDamage, uint32 Resist, VictimState TargetState, uint32 BlockedAmount);
|
||||
void SendSpellNonMeleeDamageLog(SpellNonMeleeDamage *log);
|
||||
void SendSpellNonMeleeDamageLog(Unit *target,uint32 SpellID,uint32 Damage, SpellSchoolMask damageSchoolMask,uint32 AbsorbedDamage, uint32 Resist,bool PhysicalDamage, uint32 Blocked, bool CriticalHit = false);
|
||||
void SendSpellMiss(Unit *target, uint32 spellID, SpellMissInfo missInfo);
|
||||
|
||||
|
|
@ -1241,7 +1296,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
int32 SpellBaseHealingBonusForVictim(SpellSchoolMask schoolMask, Unit *pVictim);
|
||||
uint32 SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint32 damage, DamageEffectType damagetype);
|
||||
uint32 SpellHealingBonus(SpellEntry const *spellProto, uint32 healamount, DamageEffectType damagetype, Unit *pVictim);
|
||||
bool isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType);
|
||||
bool isSpellBlocked(Unit *pVictim, SpellEntry const *spellProto, WeaponAttackType attackType = BASE_ATTACK);
|
||||
bool isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolMask schoolMask, WeaponAttackType attackType = BASE_ATTACK);
|
||||
uint32 SpellCriticalBonus(SpellEntry const *spellProto, uint32 damage, Unit *pVictim);
|
||||
|
||||
void SetLastManaUse(uint32 spellCastTime) { m_lastManaUse = spellCastTime; }
|
||||
|
|
@ -1381,12 +1437,11 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
void SendAttackStop(Unit* victim); // only from AttackStop(Unit*)
|
||||
void SendAttackStart(Unit* pVictim); // only from Unit::AttackStart(Unit*)
|
||||
|
||||
void ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, AuraTypeSet const& procAuraTypes, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage, SpellSchoolMask damageSchoolMask );
|
||||
bool IsTriggeredAtSpellProcEvent( SpellEntry const* spellProto, SpellEntry const* procSpell, uint32 procFlag, WeaponAttackType attType, bool isVictim, uint32& cooldown );
|
||||
bool HandleDummyAuraProc( Unit *pVictim, uint32 damage, Aura* triggeredByAura, SpellEntry const* procSpell, uint32 procFlag, uint32 cooldown);
|
||||
bool HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredByAura, SpellEntry const* procSpell, uint32 procFlag, WeaponAttackType attType, uint32 cooldown);
|
||||
bool HandleHasteAuraProc( Unit *pVictim, uint32 damage, Aura* triggeredByAura, SpellEntry const* procSpell, uint32 procFlag, uint32 cooldown);
|
||||
bool HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura* triggeredByAura, SpellEntry const *procSpell, uint32 cooldown);
|
||||
bool IsTriggeredAtSpellProcEvent( Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent );
|
||||
bool HandleDummyAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleHasteAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||
bool HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura* triggredByAura, SpellEntry const *procSpell, uint32 cooldown);
|
||||
bool HandleMeandingAuraProc(Aura* triggeredByAura);
|
||||
|
||||
uint32 m_state; // Even derived shouldn't modify
|
||||
|
|
|
|||
|
|
@ -324,6 +324,7 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
|
||||
void HandleGameObjectUseOpcode(WorldPacket& recPacket);
|
||||
void HandleMeetingStoneInfo(WorldPacket& recPacket);
|
||||
void HandleGameobjectReportUse(WorldPacket& recvPacket);
|
||||
|
||||
void HandleNameQueryOpcode(WorldPacket& recvPacket);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,114 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "Tools.h"
|
||||
|
||||
// THIS CAN BE A LOT FASTER
|
||||
bool readGUID(WorldPacket & data, uint64& guid)
|
||||
{
|
||||
if(data.rpos()+1 > data.size())
|
||||
return false;
|
||||
|
||||
uint8 guidmark=0;
|
||||
uint8 bit;
|
||||
uint8 shiftdata=0x1;
|
||||
uint64 Temp=0;
|
||||
|
||||
guid = 0;
|
||||
|
||||
data >> guidmark;
|
||||
for(int i=0;i<8;i++)
|
||||
{
|
||||
if(guidmark & shiftdata)
|
||||
{
|
||||
Temp = 0;
|
||||
|
||||
if(data.rpos()+1 > data.size())
|
||||
return false;
|
||||
|
||||
data >> bit;
|
||||
Temp = bit;
|
||||
Temp <<= i*8;
|
||||
guid |= Temp;
|
||||
}
|
||||
shiftdata=shiftdata<<1;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void writeGUID(WorldPacket & data, uint64 & guid)
|
||||
{
|
||||
uint8 RAWmask = 0;
|
||||
uint8 PackedGuid[8] = {0,0,0,0,0,0,0,0};
|
||||
|
||||
int j = 1;
|
||||
uint8 * test = (uint8*)&guid;
|
||||
|
||||
if (*test)
|
||||
{
|
||||
PackedGuid[j] = *test;
|
||||
RAWmask |= 1;
|
||||
++j;
|
||||
}
|
||||
if (*(test+1))
|
||||
{
|
||||
PackedGuid[j] = *(test+1);
|
||||
RAWmask |= 2;
|
||||
++j;
|
||||
}
|
||||
if (*(test+2))
|
||||
{
|
||||
PackedGuid[j] = *(test+2);
|
||||
RAWmask |= 4;
|
||||
++j;
|
||||
}
|
||||
if (*(test+3))
|
||||
{
|
||||
PackedGuid[j] = *(test+3);
|
||||
RAWmask |= 8;
|
||||
++j;
|
||||
}
|
||||
if (*(test+4))
|
||||
{
|
||||
PackedGuid[j] = *(test+4);
|
||||
RAWmask |= 16;
|
||||
++j;
|
||||
}
|
||||
if (*(test+5))
|
||||
{
|
||||
PackedGuid[j] = *(test+5);
|
||||
RAWmask |= 32;
|
||||
++j;
|
||||
}
|
||||
if (*(test+6))
|
||||
{
|
||||
PackedGuid[j] = *(test+6);
|
||||
RAWmask |= 64;
|
||||
++j;
|
||||
}
|
||||
if (*(test+7))
|
||||
{
|
||||
PackedGuid[j] = *(test+7);
|
||||
RAWmask |= 128;
|
||||
++j;
|
||||
}
|
||||
PackedGuid[0] = RAWmask;
|
||||
|
||||
data.append(PackedGuid,j);
|
||||
}
|
||||
|
|
@ -241,6 +241,32 @@ class ByteBuffer
|
|||
_rpos += len;
|
||||
}
|
||||
|
||||
bool readPackGUID(uint64& guid)
|
||||
{
|
||||
if(rpos()+1 > size())
|
||||
return false;
|
||||
|
||||
guid = 0;
|
||||
|
||||
uint8 guidmark=0;
|
||||
(*this) >> guidmark;
|
||||
|
||||
for(int i=0;i<8;i++)
|
||||
{
|
||||
if(guidmark & (uint8(1) << i))
|
||||
{
|
||||
if(rpos()+1 > size())
|
||||
return false;
|
||||
|
||||
uint8 bit;
|
||||
(*this) >> bit;
|
||||
guid |= (uint64(bit) << (i*8));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const uint8 *contents() const { return &_storage[0]; }
|
||||
|
||||
size_t size() const { return _storage.size(); }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "6947"
|
||||
#define REVISION_NR "6967"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
|
|
@ -842,12 +842,6 @@
|
|||
<File
|
||||
RelativePath="..\..\src\game\PlayerDump.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\game\tools.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\game\Tools.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="References"
|
||||
|
|
|
|||
|
|
@ -1294,14 +1294,6 @@
|
|||
RelativePath="..\..\src\game\PlayerDump.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\game\tools.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\game\Tools.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="References"
|
||||
|
|
|
|||
|
|
@ -1296,14 +1296,6 @@
|
|||
RelativePath="..\..\src\game\PlayerDump.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\game\tools.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\src\game\Tools.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="References"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue