mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
Merge remote branch 'origin/master' into 330
This commit is contained in:
commit
c745c5072f
31 changed files with 1000 additions and 760 deletions
|
|
@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`creature_ai_version` varchar(120) default NULL,
|
`creature_ai_version` varchar(120) default NULL,
|
||||||
`cache_id` int(10) default '0',
|
`cache_id` int(10) default '0',
|
||||||
`required_8965_02_mangos_command` bit(1) default NULL
|
`required_8996_01_mangos_spell_proc_event` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -14174,6 +14174,7 @@ INSERT INTO `spell_bonus_data` VALUES
|
||||||
(30294, 0, 0, 0, 'Warlock - Soul Leech'),
|
(30294, 0, 0, 0, 'Warlock - Soul Leech'),
|
||||||
(31117, 1.8, 0, 0, 'Warlock - Unstable Affliction Dispell'),
|
(31117, 1.8, 0, 0, 'Warlock - Unstable Affliction Dispell'),
|
||||||
/* Item */
|
/* Item */
|
||||||
|
(56160, 0, 0, 0, 'Item - Glyph of Power Word: Shield'),
|
||||||
(40293, 0, 0, 0, 'Item - Siphon Essence');
|
(40293, 0, 0, 0, 'Item - Siphon Essence');
|
||||||
/*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `spell_bonus_data` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
@ -14633,6 +14634,10 @@ INSERT INTO spell_chain VALUES
|
||||||
(27067,20910,19306,4,0),
|
(27067,20910,19306,4,0),
|
||||||
(48998,27067,19306,5,0),
|
(48998,27067,19306,5,0),
|
||||||
(48999,48998,19306,6,0),
|
(48999,48998,19306,6,0),
|
||||||
|
/*Entrapment*/
|
||||||
|
(19184,0,19184,1,0),
|
||||||
|
(19387,19184,19184,2,0),
|
||||||
|
(19388,19387,19184,3,0),
|
||||||
/*ExplosiveShot*/
|
/*ExplosiveShot*/
|
||||||
(53301,0,53301,1,0),
|
(53301,0,53301,1,0),
|
||||||
(60051,53301,53301,2,0),
|
(60051,53301,53301,2,0),
|
||||||
|
|
@ -14649,6 +14654,10 @@ INSERT INTO spell_chain VALUES
|
||||||
(1499,0,1499,1,0),
|
(1499,0,1499,1,0),
|
||||||
(14310,1499,1499,2,0),
|
(14310,1499,1499,2,0),
|
||||||
(14311,14310,1499,3,0),
|
(14311,14310,1499,3,0),
|
||||||
|
/*Hunting Party*/
|
||||||
|
(53290,0,53290,1,0),
|
||||||
|
(53291,53290,53290,2,0),
|
||||||
|
(53292,53291,53290,3,0),
|
||||||
/*ImmolationTrap*/
|
/*ImmolationTrap*/
|
||||||
(13795,0,13795,1,0),
|
(13795,0,13795,1,0),
|
||||||
(14302,13795,13795,2,0),
|
(14302,13795,13795,2,0),
|
||||||
|
|
@ -14658,6 +14667,12 @@ INSERT INTO spell_chain VALUES
|
||||||
(27023,14305,13795,6,0),
|
(27023,14305,13795,6,0),
|
||||||
(49055,27023,13795,7,0),
|
(49055,27023,13795,7,0),
|
||||||
(49056,49055,13795,8,0),
|
(49056,49055,13795,8,0),
|
||||||
|
/**Master Tactician*/
|
||||||
|
(34506,0,34506,1,0),
|
||||||
|
(34507,34506,34506,2,0),
|
||||||
|
(34508,34507,34506,3,0),
|
||||||
|
(34838,34508,34506,4,0),
|
||||||
|
(34839,34838,34506,5,0),
|
||||||
/*MongooseBite*/
|
/*MongooseBite*/
|
||||||
(1495,0,1495,1,0),
|
(1495,0,1495,1,0),
|
||||||
(14269,1495,1495,2,0),
|
(14269,1495,1495,2,0),
|
||||||
|
|
@ -15088,7 +15103,7 @@ INSERT INTO spell_chain VALUES
|
||||||
/*------------------
|
/*------------------
|
||||||
--(163)Marksmanship
|
--(163)Marksmanship
|
||||||
------------------*/
|
------------------*/
|
||||||
/*AimedShot*/
|
/*Aimed Shot*/
|
||||||
(19434,0,19434,1,0),
|
(19434,0,19434,1,0),
|
||||||
(20900,19434,19434,2,0),
|
(20900,19434,19434,2,0),
|
||||||
(20901,20900,19434,3,0),
|
(20901,20900,19434,3,0),
|
||||||
|
|
@ -15098,7 +15113,7 @@ INSERT INTO spell_chain VALUES
|
||||||
(27065,20904,19434,7,0),
|
(27065,20904,19434,7,0),
|
||||||
(49049,27065,19434,8,0),
|
(49049,27065,19434,8,0),
|
||||||
(49050,49049,19434,9,0),
|
(49050,49049,19434,9,0),
|
||||||
/*ArcaneShot*/
|
/*Arcane Shot*/
|
||||||
(3044,0,3044,1,0),
|
(3044,0,3044,1,0),
|
||||||
(14281,3044,3044,2,0),
|
(14281,3044,3044,2,0),
|
||||||
(14282,14281,3044,3,0),
|
(14282,14281,3044,3,0),
|
||||||
|
|
@ -15110,13 +15125,16 @@ INSERT INTO spell_chain VALUES
|
||||||
(27019,14287,3044,9,0),
|
(27019,14287,3044,9,0),
|
||||||
(49044,27019,3044,10,0),
|
(49044,27019,3044,10,0),
|
||||||
(49045,49044,3044,11,0),
|
(49045,49044,3044,11,0),
|
||||||
/*Hunter'sMark*/
|
/*Concussive Barrage*/
|
||||||
|
(35100,0,35100,1,0),
|
||||||
|
(35102,35100,35100,2,0),
|
||||||
|
/*Hunter's Mark*/
|
||||||
(1130,0,1130,1,0),
|
(1130,0,1130,1,0),
|
||||||
(14323,1130,1130,2,0),
|
(14323,1130,1130,2,0),
|
||||||
(14324,14323,1130,3,0),
|
(14324,14323,1130,3,0),
|
||||||
(14325,14324,1130,4,0),
|
(14325,14324,1130,4,0),
|
||||||
(53338,14325,1130,5,0),
|
(53338,14325,1130,5,0),
|
||||||
/*KillShot*/
|
/*Kill Shot*/
|
||||||
(53351,0,53351,1,0),
|
(53351,0,53351,1,0),
|
||||||
(61005,53351,53351,2,0),
|
(61005,53351,53351,2,0),
|
||||||
(61006,61005,53351,3,0),
|
(61006,61005,53351,3,0),
|
||||||
|
|
@ -15771,6 +15789,10 @@ INSERT INTO spell_chain VALUES
|
||||||
(25289,11551,6673,7,0),
|
(25289,11551,6673,7,0),
|
||||||
(2048,25289,6673,8,0),
|
(2048,25289,6673,8,0),
|
||||||
(47436,2048,6673,9,0),
|
(47436,2048,6673,9,0),
|
||||||
|
/*Bloodsurge*/
|
||||||
|
(46913,0,46913,1,0),
|
||||||
|
(46914,46913,46913,2,0),
|
||||||
|
(46915,46914,46913,3,0),
|
||||||
/*Cleave*/
|
/*Cleave*/
|
||||||
(845,0,845,1,0),
|
(845,0,845,1,0),
|
||||||
(7369,845,845,2,0),
|
(7369,845,845,2,0),
|
||||||
|
|
@ -16208,6 +16230,9 @@ INSERT INTO spell_chain VALUES
|
||||||
/*Frozen Power*/
|
/*Frozen Power*/
|
||||||
(63373,0,63373,1,0),
|
(63373,0,63373,1,0),
|
||||||
(63374,63373,63373,2,0),
|
(63374,63373,63373,2,0),
|
||||||
|
/*Improved Stormstrike*/
|
||||||
|
(51521,0,51521,1,0),
|
||||||
|
(51522,51521,51521,2,0),
|
||||||
/*Life Tap*/
|
/*Life Tap*/
|
||||||
(1454,0,1454,1,0),
|
(1454,0,1454,1,0),
|
||||||
(1455,1454,1454,2,0),
|
(1455,1454,1454,2,0),
|
||||||
|
|
@ -17836,9 +17861,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(18119, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(18119, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(18120, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(18120, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(18820, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
(18820, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||||
(19184, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(19184, 0x00000000, 9, 0x00000010, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(19387, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
|
||||||
(19388, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
|
||||||
(19572, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
(19572, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(19573, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
(19573, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(20049, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(20049, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -17863,6 +17886,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(20500, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(20500, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(20501, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(20501, 0x00000000, 4, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(20705, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(20705, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
|
(20784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(20911, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0),
|
(20911, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0),
|
||||||
(20925, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
(20925, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
||||||
(21185, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10),
|
(21185, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10),
|
||||||
|
|
@ -18035,12 +18059,14 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(34262, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
(34262, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||||
(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3),
|
(34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3),
|
||||||
|
(34457, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34499, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34499, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34500, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34500, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34502, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34502, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(34503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(34503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
|
(34506, 0x00000000, 9, 0x0007FA01, 0x00801081, 0x08000201, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(34584, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30),
|
(34584, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30),
|
||||||
(34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0),
|
(34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0),
|
||||||
(34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
(34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||||
|
|
@ -18061,8 +18087,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(35080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 60),
|
(35080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 60),
|
||||||
(35083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
(35083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
||||||
(35086, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
(35086, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
||||||
(35100, 0x00000000, 9, 0x00003001, 0x00000000, 0x00000000, 0x00010140, 0x00000000, 0.000000, 0.000000, 0),
|
(35100, 0x00000000, 9, 0x00001000, 0x00000000, 0x00000001, 0x00000100, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(35102, 0x00000000, 9, 0x00003001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
|
||||||
(35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0),
|
(36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0),
|
||||||
(36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18189,9 +18214,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(46854, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(46854, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(46855, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(46855, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(46867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(46867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(46913, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(46913, 0x00000000, 4, 0x00000040, 0x00000404, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(46914, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
|
||||||
(46915, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
|
||||||
(46916, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(46916, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(46951, 0x00000000, 4, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(46951, 0x00000000, 4, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(46952, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(46952, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18270,6 +18293,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(51483, 0x00000001, 11, 0x20000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
(51483, 0x00000001, 11, 0x20000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(51485, 0x00000001, 11, 0x20000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
(51485, 0x00000001, 11, 0x20000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(51486, 0x00000001, 11, 0x20000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
(51486, 0x00000001, 11, 0x20000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
(51521, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 1),
|
||||||
(51528, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,12.500000, 0.000000, 0),
|
(51528, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,12.500000, 0.000000, 0),
|
||||||
(51556, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(51556, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(51557, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(51557, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18332,9 +18356,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53290, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53290, 0x00000000, 9, 0x00000800, 0x00000001, 0x00000200, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53291, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
|
||||||
(53292, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
|
||||||
(53380, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53380, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53381, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53381, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53382, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53382, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18353,6 +18375,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(53646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(53646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(53671, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(53671, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(53673, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(53673, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
(53817, 0x00000000, 11, 0x000001C3, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(54149, 0x00000000, 10, 0x00200000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(54149, 0x00000000, 10, 0x00200000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
(54151, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(54151, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(54154, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(54154, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18405,7 +18428,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(56822, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(56822, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(56834, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(56834, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(56835, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(56835, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(57352, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00010154, 0x00000003, 0.000000, 0.000000, 45),
|
(57352, 0x00000000, 0, 0x00000001, 0x00000040, 0x00000000, 0x00010154, 0x00000003, 0.000000, 0.000000, 45),
|
||||||
(57470, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(57470, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(57472, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(57472, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(57499, 0x00000000, 4, 0x40000001, 0x00010000, 0x00000000, 0x00014000, 0x00000000, 0.000000, 0.000000, 0),
|
(57499, 0x00000000, 4, 0x40000001, 0x00010000, 0x00000000, 0x00014000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18424,7 +18447,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(58631, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(58631, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(58644, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(58644, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(58647, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(58647, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(58872, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
(58872, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
||||||
(58874, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
(58874, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
||||||
(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||||
|
|
@ -18456,6 +18479,7 @@ INSERT INTO `spell_proc_event` VALUES
|
||||||
(60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
(61062, 0x00000000, 3, 0x00000000, 0x00000100, 0x00000000, 0x00004000, 0x00010000, 0.000000, 0.000000, 0),
|
||||||
(61188, 0x00000000, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(61188, 0x00000000, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
(61257, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000202A8, 0x00010000, 0.000000, 0.000000, 0),
|
(61257, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000202A8, 0x00010000, 0.000000, 0.000000, 0),
|
||||||
(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||||
|
|
|
||||||
5
sql/updates/8980_01_mangos_spell_bonus_data.sql
Normal file
5
sql/updates/8980_01_mangos_spell_bonus_data.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8965_02_mangos_command required_8980_01_mangos_spell_bonus_data bit;
|
||||||
|
|
||||||
|
DELETE FROM spell_bonus_data WHERE entry = 56160;
|
||||||
|
INSERT INTO spell_bonus_data (entry, direct_bonus, dot_bonus, ap_bonus, comments) VALUES
|
||||||
|
(56160, 0, 0, 0, 'Item - Glyph of Power Word: Shield');
|
||||||
5
sql/updates/8981_01_mangos_spell_proc_event.sql
Normal file
5
sql/updates/8981_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8980_01_mangos_spell_bonus_data required_8981_01_mangos_spell_proc_event bit;
|
||||||
|
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` = 57352;
|
||||||
|
INSERT INTO `spell_proc_event` VALUES
|
||||||
|
(57352, 0x00000000, 0, 0x00000001, 0x00000040, 0x00000000, 0x00010154, 0x00000003, 0.000000, 0.000000, 45);
|
||||||
5
sql/updates/8988_01_mangos_spell_proc_event.sql
Normal file
5
sql/updates/8988_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8981_01_mangos_spell_proc_event required_8988_01_mangos_spell_proc_event bit;
|
||||||
|
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (53817);
|
||||||
|
INSERT INTO `spell_proc_event` VALUES
|
||||||
|
(53817, 0x00000000, 11, 0x00000143, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000,0);
|
||||||
41
sql/updates/8992_01_mangos_spell_proc_event.sql
Normal file
41
sql/updates/8992_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8988_01_mangos_spell_proc_event required_8992_01_mangos_spell_proc_event bit;
|
||||||
|
|
||||||
|
/*Ferocious Inspiration*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (34457);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
|
||||||
|
(34457, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Frenzy*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (20784);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry` ,`SchoolMask` ,`SpellFamilyName` ,`SpellFamilyMask0` ,`SpellFamilyMask1` ,`SpellFamilyMask2` ,`procFlags` ,`procEx` ,`ppmRate` ,`CustomChance` ,`Cooldown`)VALUES
|
||||||
|
(20784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Master Tactician*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (34506, 34507, 34508, 34838, 34839);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
|
||||||
|
(34506, 0x00000000, 9, 0x0007FA01, 0x00801081, 0x08000201, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Hunting Party*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE entry IN (53290, 53291, 53292);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
|
||||||
|
(53290, 0x00000000, 9, 0x00000800, 0x00000001, 0x00000200, 0x00000000, 0x00000002, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Bloodsurge*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (46913, 46914, 46915);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `cooldown`) VALUES
|
||||||
|
(46913, 0x00000000, 4, 0x00000040, 0x00000404, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Entrapment*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (19184, 19387, 19388);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
|
||||||
|
(19184, 0x00000000, 9, 0x00000010, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Concussive Barrage*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (35100, 35102);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
|
||||||
|
(35100, 0x00000000, 9, 0x00001000, 0x00000000, 0x00000001, 0x00000100, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
/*Improved Stormstrike*/
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (51521, 51522);
|
||||||
|
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
|
||||||
|
(51521, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 1);
|
||||||
43
sql/updates/8992_02_mangos_spell_chain.sql
Normal file
43
sql/updates/8992_02_mangos_spell_chain.sql
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8992_01_mangos_spell_proc_event required_8992_02_mangos_spell_chain bit;
|
||||||
|
|
||||||
|
/*Master Tactician*/
|
||||||
|
DELETE FROM spell_chain WHERE first_spell = 34506;
|
||||||
|
INSERT INTO spell_chain VALUES
|
||||||
|
(34506, 0, 34506, 1, 0),
|
||||||
|
(34507, 34506, 34506, 2, 0),
|
||||||
|
(34508, 34507, 34506, 3, 0),
|
||||||
|
(34838, 34508, 34506, 4, 0),
|
||||||
|
(34839, 34838, 34506, 5, 0);
|
||||||
|
|
||||||
|
/*Hunting Party*/
|
||||||
|
DELETE FROM spell_chain WHERE first_spell = 53290;
|
||||||
|
INSERT INTO spell_chain VALUES
|
||||||
|
(53290, 0, 53290, 1, 0),
|
||||||
|
(53291, 53290, 53290, 2, 0),
|
||||||
|
(53292, 53291, 53290, 3, 0);
|
||||||
|
|
||||||
|
/*Bloodsurge*/
|
||||||
|
DELETE FROM spell_chain WHERE first_spell = 46913;
|
||||||
|
INSERT INTO spell_chain VALUES
|
||||||
|
(46913, 0, 46913, 1, 0),
|
||||||
|
(46914, 46913, 46913, 2, 0),
|
||||||
|
(46915, 46914, 46913, 3, 0);
|
||||||
|
|
||||||
|
/*Entrapment*/
|
||||||
|
DELETE FROM spell_chain WHERE first_spell = 19184;
|
||||||
|
INSERT INTO spell_chain VALUES
|
||||||
|
(19184, 0, 19184, 1, 0),
|
||||||
|
(19387, 19184, 19184, 2, 0),
|
||||||
|
(19388, 19387, 19184, 3, 0);
|
||||||
|
|
||||||
|
/*Concussive Barrage*/
|
||||||
|
DELETE FROM spell_chain WHERE first_spell = 35100;
|
||||||
|
INSERT INTO spell_chain VALUES
|
||||||
|
(35100, 0, 35100, 1, 0),
|
||||||
|
(35102, 35100, 35100, 2, 0);
|
||||||
|
|
||||||
|
/*Improved Stormstrike*/
|
||||||
|
DELETE FROM spell_chain WHERE first_spell = 51521;
|
||||||
|
INSERT INTO spell_chain VALUES
|
||||||
|
(51521, 0, 51521, 1, 0),
|
||||||
|
(51522, 51521, 51521, 2, 0);
|
||||||
5
sql/updates/8993_01_mangos_spell_proc_event.sql
Normal file
5
sql/updates/8993_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8992_02_mangos_spell_chain required_8993_01_mangos_spell_proc_event bit;
|
||||||
|
|
||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (53817);
|
||||||
|
INSERT INTO `spell_proc_event` VALUES
|
||||||
|
(53817, 0x00000000, 11, 0x000001C3, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000,0);
|
||||||
5
sql/updates/8995_01_mangos_spell_proc_event.sql
Normal file
5
sql/updates/8995_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8993_01_mangos_spell_proc_event required_8995_01_mangos_spell_proc_event bit;
|
||||||
|
|
||||||
|
DELETE FROM spell_proc_event WHERE entry=58677;
|
||||||
|
INSERT INTO spell_proc_event VALUES
|
||||||
|
(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0);
|
||||||
6
sql/updates/8996_01_mangos_spell_proc_event.sql
Normal file
6
sql/updates/8996_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_8995_01_mangos_spell_proc_event required_8996_01_mangos_spell_proc_event bit;
|
||||||
|
|
||||||
|
DELETE FROM spell_proc_event WHERE entry=61062;
|
||||||
|
INSERT INTO spell_proc_event VALUES
|
||||||
|
(61062, 0x00000000, 3, 0x00000000, 0x00000100, 0x00000000, 0x00004000, 0x00010000, 0.000000, 0.000000, 0);
|
||||||
|
|
||||||
|
|
@ -200,6 +200,14 @@ pkgdata_DATA = \
|
||||||
8950_01_mangos_spell_proc_event.sql \
|
8950_01_mangos_spell_proc_event.sql \
|
||||||
8965_01_mangos_mangos_string.sql \
|
8965_01_mangos_mangos_string.sql \
|
||||||
8965_02_mangos_command.sql \
|
8965_02_mangos_command.sql \
|
||||||
|
8980_01_mangos_spell_bonus_data.sql \
|
||||||
|
8981_01_mangos_spell_proc_event.sql \
|
||||||
|
8988_01_mangos_spell_proc_event.sql \
|
||||||
|
8992_01_mangos_spell_proc_event.sql \
|
||||||
|
8992_02_mangos_spell_chain.sql \
|
||||||
|
8993_01_mangos_spell_proc_event.sql \
|
||||||
|
8995_01_mangos_spell_proc_event.sql \
|
||||||
|
8996_01_mangos_spell_proc_event.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -380,4 +388,12 @@ EXTRA_DIST = \
|
||||||
8950_01_mangos_spell_proc_event.sql \
|
8950_01_mangos_spell_proc_event.sql \
|
||||||
8965_01_mangos_mangos_string.sql \
|
8965_01_mangos_mangos_string.sql \
|
||||||
8965_02_mangos_command.sql \
|
8965_02_mangos_command.sql \
|
||||||
|
8980_01_mangos_spell_bonus_data.sql \
|
||||||
|
8981_01_mangos_spell_proc_event.sql \
|
||||||
|
8988_01_mangos_spell_proc_event.sql \
|
||||||
|
8992_01_mangos_spell_proc_event.sql \
|
||||||
|
8992_02_mangos_spell_chain.sql \
|
||||||
|
8993_01_mangos_spell_proc_event.sql \
|
||||||
|
8995_01_mangos_spell_proc_event.sql \
|
||||||
|
8996_01_mangos_spell_proc_event.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -348,7 +348,8 @@ enum SummonPropType
|
||||||
SUMMON_PROP_TYPE_PHASING = 8, // something todo with DK prequest line, 2 spells in 3.0.3 "%s's Opponent"
|
SUMMON_PROP_TYPE_PHASING = 8, // something todo with DK prequest line, 2 spells in 3.0.3 "%s's Opponent"
|
||||||
SUMMON_PROP_TYPE_SIEGE_VEH = 9, // summon different vehicles, 14 spells in 3.0.3 "%s's Vehicle"
|
SUMMON_PROP_TYPE_SIEGE_VEH = 9, // summon different vehicles, 14 spells in 3.0.3 "%s's Vehicle"
|
||||||
SUMMON_PROP_TYPE_DRAKE_VEH = 10, // summon drake (vehicle), 3 spells
|
SUMMON_PROP_TYPE_DRAKE_VEH = 10, // summon drake (vehicle), 3 spells
|
||||||
SUMMON_PROP_TYPE_LIGHTWELL = 11 // summon lightwell, 6 spells in 3.0.3
|
SUMMON_PROP_TYPE_LIGHTWELL = 11, // summon lightwell, 6 spells in 3.0.3
|
||||||
|
SUMMON_PROP_TYPE_REPAIR_BOT = 12 // summon repir bot, 1 spells in 3.2.2a
|
||||||
};
|
};
|
||||||
|
|
||||||
// SummonProperties.dbc, col 5
|
// SummonProperties.dbc, col 5
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ enum GossipOptionIcon
|
||||||
//POI icons. Many more exist, list not complete.
|
//POI icons. Many more exist, list not complete.
|
||||||
enum Poi_Icon
|
enum Poi_Icon
|
||||||
{
|
{
|
||||||
ICON_POI_BLANK = 0, // Blank (not visible)
|
ICON_POI_BLANK = 0, // Blank (not visible), in 2.4.3 have value 15 with 1..15 values in 0..14 range
|
||||||
ICON_POI_GREY_AV_MINE = 1, // Grey mine lorry
|
ICON_POI_GREY_AV_MINE = 1, // Grey mine lorry
|
||||||
ICON_POI_RED_AV_MINE = 2, // Red mine lorry
|
ICON_POI_RED_AV_MINE = 2, // Red mine lorry
|
||||||
ICON_POI_BLUE_AV_MINE = 3, // Blue mine lorry
|
ICON_POI_BLUE_AV_MINE = 3, // Blue mine lorry
|
||||||
|
|
|
||||||
|
|
@ -1026,9 +1026,12 @@ void WorldSession::HandleMoveTimeSkippedOpcode( WorldPacket & recv_data )
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleFeatherFallAck(WorldPacket &/*recv_data*/)
|
void WorldSession::HandleFeatherFallAck(WorldPacket &recv_data)
|
||||||
{
|
{
|
||||||
DEBUG_LOG("WORLD: CMSG_MOVE_FEATHER_FALL_ACK");
|
DEBUG_LOG("WORLD: CMSG_MOVE_FEATHER_FALL_ACK");
|
||||||
|
|
||||||
|
// no used
|
||||||
|
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleMoveUnRootAck(WorldPacket& recv_data)
|
void WorldSession::HandleMoveUnRootAck(WorldPacket& recv_data)
|
||||||
|
|
|
||||||
|
|
@ -248,8 +248,8 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
||||||
if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
|
if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
|
||||||
{
|
{
|
||||||
// transports size limited
|
// transports size limited
|
||||||
// (also received at zeppelin leave by some reason with t_* as absolute in continent coordinates, can be safely skipped)
|
// (also received at zeppelin/lift leave by some reason with t_* as absolute in continent coordinates, can be safely skipped)
|
||||||
if( movementInfo.t_x > 50 || movementInfo.t_y > 50 || movementInfo.t_z > 50 )
|
if( movementInfo.t_x > 50 || movementInfo.t_y > 50 || movementInfo.t_z > 100 )
|
||||||
{
|
{
|
||||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -667,6 +667,12 @@ void Object::BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *
|
||||||
if (!((Creature*)this)->isCanTrainingOf(target, false))
|
if (!((Creature*)this)->isCanTrainingOf(target, false))
|
||||||
appendValue &= ~(UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_TRAINER_CLASS | UNIT_NPC_FLAG_TRAINER_PROFESSION);
|
appendValue &= ~(UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_TRAINER_CLASS | UNIT_NPC_FLAG_TRAINER_PROFESSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (appendValue & UNIT_NPC_FLAG_STABLEMASTER)
|
||||||
|
{
|
||||||
|
if (target->getClass() != CLASS_HUNTER)
|
||||||
|
appendValue &= ~UNIT_NPC_FLAG_STABLEMASTER;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*data << uint32(appendValue);
|
*data << uint32(appendValue);
|
||||||
|
|
|
||||||
|
|
@ -7315,6 +7315,10 @@ bool PlayerCondition::Meets(Player const * player) const
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
case CONDITION_RACE_CLASS:
|
||||||
|
if ((!value1 || (player->getRaceMask() & value1)) && (!value2 || (player->getClassMask() & value2)))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -7468,6 +7472,27 @@ bool PlayerCondition::IsValid(ConditionType condition, uint32 value1, uint32 val
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CONDITION_RACE_CLASS:
|
||||||
|
{
|
||||||
|
if (!value1 && !value2)
|
||||||
|
{
|
||||||
|
sLog.outErrorDb("Race_class condition has both values like 0, skipped");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value1 && !(value1 & RACEMASK_ALL_PLAYABLE))
|
||||||
|
{
|
||||||
|
sLog.outErrorDb("Race_class condition has invalid player class %u, skipped", value1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value2 && !(value2 & CLASSMASK_ALL_PLAYABLE))
|
||||||
|
{
|
||||||
|
sLog.outErrorDb("Race_class condition has invalid race mask %u, skipped", value2);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case CONDITION_NONE:
|
case CONDITION_NONE:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -319,11 +319,12 @@ enum ConditionType
|
||||||
CONDITION_QUESTTAKEN = 9, // quest_id 0, for condition true while quest active.
|
CONDITION_QUESTTAKEN = 9, // quest_id 0, for condition true while quest active.
|
||||||
CONDITION_AD_COMMISSION_AURA = 10, // 0 0, for condition true while one from AD commission aura active
|
CONDITION_AD_COMMISSION_AURA = 10, // 0 0, for condition true while one from AD commission aura active
|
||||||
CONDITION_NO_AURA = 11, // spell_id effindex
|
CONDITION_NO_AURA = 11, // spell_id effindex
|
||||||
CONDITION_ACTIVE_EVENT = 12, // event_id
|
CONDITION_ACTIVE_EVENT = 12, // event_id 0
|
||||||
CONDITION_AREA_FLAG = 13 // area_flag area_flag_not
|
CONDITION_AREA_FLAG = 13, // area_flag area_flag_not
|
||||||
|
CONDITION_RACE_CLASS = 14, // race_mask class_mask
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_CONDITION 14 // maximum value in ConditionType enum
|
#define MAX_CONDITION 15 // maximum value in ConditionType enum
|
||||||
|
|
||||||
struct PlayerCondition
|
struct PlayerCondition
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -414,8 +414,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
||||||
<< curmana << ", "
|
<< curmana << ", "
|
||||||
<< GetPower(POWER_HAPPINESS) << ", '";
|
<< GetPower(POWER_HAPPINESS) << ", '";
|
||||||
|
|
||||||
// save only spell slots from action bar
|
for(uint32 i = ACTION_BAR_INDEX_START; i < ACTION_BAR_INDEX_END; ++i)
|
||||||
for(uint32 i = ACTION_BAR_INDEX_PET_SPELL_START; i < ACTION_BAR_INDEX_PET_SPELL_END; ++i)
|
|
||||||
{
|
{
|
||||||
ss << uint32(m_charmInfo->GetActionBarEntry(i)->GetType()) << " "
|
ss << uint32(m_charmInfo->GetActionBarEntry(i)->GetType()) << " "
|
||||||
<< uint32(m_charmInfo->GetActionBarEntry(i)->GetAction()) << " ";
|
<< uint32(m_charmInfo->GetActionBarEntry(i)->GetAction()) << " ";
|
||||||
|
|
|
||||||
|
|
@ -324,23 +324,59 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data )
|
||||||
}
|
}
|
||||||
|
|
||||||
count = (recv_data.size() == 24) ? 2 : 1;
|
count = (recv_data.size() == 24) ? 2 : 1;
|
||||||
|
|
||||||
|
uint32 position[2];
|
||||||
|
uint32 data[2];
|
||||||
|
bool move_command = false;
|
||||||
|
|
||||||
for(uint8 i = 0; i < count; ++i)
|
for(uint8 i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
uint32 position;
|
recv_data >> position[i];
|
||||||
uint32 data;
|
recv_data >> data[i];
|
||||||
|
|
||||||
recv_data >> position;
|
uint8 act_state = UNIT_ACTION_BUTTON_TYPE(data[i]);
|
||||||
recv_data >> data;
|
|
||||||
|
|
||||||
uint32 spell_id = UNIT_ACTION_BUTTON_ACTION(data);
|
|
||||||
uint8 act_state = UNIT_ACTION_BUTTON_TYPE(data);
|
|
||||||
|
|
||||||
sLog.outDetail( "Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X", _player->GetName(), position, spell_id, uint32(act_state));
|
|
||||||
|
|
||||||
//ignore invalid position
|
//ignore invalid position
|
||||||
if(position >= MAX_UNIT_ACTION_BAR_INDEX)
|
if(position[i] >= MAX_UNIT_ACTION_BAR_INDEX)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// in the normal case, command and reaction buttons can only be moved, not removed
|
||||||
|
// at moving count ==2, at removing count == 1
|
||||||
|
// ignore attempt to remove command|reaction buttons (not possible at normal case)
|
||||||
|
if (act_state == ACT_COMMAND || act_state == ACT_REACTION)
|
||||||
|
{
|
||||||
|
if (count == 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
move_command = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check swap
|
||||||
|
if (move_command)
|
||||||
|
{
|
||||||
|
uint8 act_state_0 = UNIT_ACTION_BUTTON_TYPE(data[0]);
|
||||||
|
uint32 spell_id_0 = UNIT_ACTION_BUTTON_ACTION(data[0]);
|
||||||
|
UnitActionBarEntry const* actionEntry_1 = charmInfo->GetActionBarEntry(position[1]);
|
||||||
|
if (!actionEntry_1 || spell_id_0 != actionEntry_1->GetAction() ||
|
||||||
|
act_state_0 != actionEntry_1->GetType())
|
||||||
|
return;
|
||||||
|
|
||||||
|
uint8 act_state_1 = UNIT_ACTION_BUTTON_TYPE(data[1]);
|
||||||
|
uint32 spell_id_1 = UNIT_ACTION_BUTTON_ACTION(data[1]);
|
||||||
|
UnitActionBarEntry const* actionEntry_0 = charmInfo->GetActionBarEntry(position[0]);
|
||||||
|
if (!actionEntry_0 || spell_id_1 != actionEntry_0->GetAction() ||
|
||||||
|
act_state_1 != actionEntry_0->GetType())
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(uint8 i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
uint32 spell_id = UNIT_ACTION_BUTTON_ACTION(data[i]);
|
||||||
|
uint8 act_state = UNIT_ACTION_BUTTON_TYPE(data[i]);
|
||||||
|
|
||||||
|
sLog.outDetail( "Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X", _player->GetName(), position[i], spell_id, uint32(act_state));
|
||||||
|
|
||||||
//if it's act for spell (en/disable/cast) and there is a spell given (0 = remove spell) which pet doesn't know, don't add
|
//if it's act for spell (en/disable/cast) and there is a spell given (0 = remove spell) which pet doesn't know, don't add
|
||||||
if(!((act_state == ACT_ENABLED || act_state == ACT_DISABLED || act_state == ACT_PASSIVE) && spell_id && !pet->HasSpell(spell_id)))
|
if(!((act_state == ACT_ENABLED || act_state == ACT_DISABLED || act_state == ACT_PASSIVE) && spell_id && !pet->HasSpell(spell_id)))
|
||||||
{
|
{
|
||||||
|
|
@ -361,7 +397,7 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data )
|
||||||
((Pet*)pet)->ToggleAutocast(spell_id, false);
|
((Pet*)pet)->ToggleAutocast(spell_id, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
charmInfo->SetActionBar(position,spell_id,ActiveStates(act_state));
|
charmInfo->SetActionBar(position[i],spell_id,ActiveStates(act_state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2088,6 +2088,12 @@ Creature* Player::GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask)
|
||||||
if (npcflagmask && !unit->HasFlag( UNIT_NPC_FLAGS, npcflagmask ))
|
if (npcflagmask && !unit->HasFlag( UNIT_NPC_FLAGS, npcflagmask ))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (npcflagmask == UNIT_NPC_FLAG_STABLEMASTER)
|
||||||
|
{
|
||||||
|
if (getClass() != CLASS_HUNTER)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// if a dead unit should be able to talk - the creature must be alive and have special flags
|
// if a dead unit should be able to talk - the creature must be alive and have special flags
|
||||||
if (!unit->isAlive())
|
if (!unit->isAlive())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -5008,8 +5014,8 @@ void Player::SetRegularAttackTime()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < MAX_ATTACK; ++i)
|
for(int i = 0; i < MAX_ATTACK; ++i)
|
||||||
{
|
{
|
||||||
Item *tmpitem = GetWeaponForAttack(WeaponAttackType(i));
|
Item *tmpitem = GetWeaponForAttack(WeaponAttackType(i),true,false);
|
||||||
if(tmpitem && !tmpitem->IsBroken())
|
if (tmpitem)
|
||||||
{
|
{
|
||||||
ItemPrototype const *proto = tmpitem->GetProto();
|
ItemPrototype const *proto = tmpitem->GetProto();
|
||||||
if(proto->Delay)
|
if(proto->Delay)
|
||||||
|
|
@ -5215,7 +5221,7 @@ void Player::UpdateWeaponSkill (WeaponAttackType attType)
|
||||||
{
|
{
|
||||||
case BASE_ATTACK:
|
case BASE_ATTACK:
|
||||||
{
|
{
|
||||||
Item *tmpitem = GetWeaponForAttack(attType,true);
|
Item *tmpitem = GetWeaponForAttack(attType,true,true);
|
||||||
|
|
||||||
if (!tmpitem)
|
if (!tmpitem)
|
||||||
UpdateSkill(SKILL_UNARMED,weapon_skill_gain);
|
UpdateSkill(SKILL_UNARMED,weapon_skill_gain);
|
||||||
|
|
@ -5226,7 +5232,7 @@ void Player::UpdateWeaponSkill (WeaponAttackType attType)
|
||||||
case OFF_ATTACK:
|
case OFF_ATTACK:
|
||||||
case RANGED_ATTACK:
|
case RANGED_ATTACK:
|
||||||
{
|
{
|
||||||
Item *tmpitem = GetWeaponForAttack(attType,true);
|
Item *tmpitem = GetWeaponForAttack(attType,true,true);
|
||||||
if (tmpitem)
|
if (tmpitem)
|
||||||
UpdateSkill(tmpitem->GetSkill(),weapon_skill_gain);
|
UpdateSkill(tmpitem->GetSkill(),weapon_skill_gain);
|
||||||
break;
|
break;
|
||||||
|
|
@ -7034,8 +7040,8 @@ void Player::UpdateEquipSpellsAtFormChange()
|
||||||
|
|
||||||
void Player::CastItemCombatSpell(Unit* Target, WeaponAttackType attType)
|
void Player::CastItemCombatSpell(Unit* Target, WeaponAttackType attType)
|
||||||
{
|
{
|
||||||
Item *item = GetWeaponForAttack(attType, false);
|
Item *item = GetWeaponForAttack(attType, true, false);
|
||||||
if(!item || item->IsBroken())
|
if(!item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ItemPrototype const *proto = item->GetProto();
|
ItemPrototype const *proto = item->GetProto();
|
||||||
|
|
@ -7355,8 +7361,8 @@ bool Player::CheckAmmoCompatibility(const ItemPrototype *ammo_proto) const
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// check ranged weapon
|
// check ranged weapon
|
||||||
Item *weapon = GetWeaponForAttack( RANGED_ATTACK );
|
Item *weapon = GetWeaponForAttack( RANGED_ATTACK, true, false );
|
||||||
if(!weapon || weapon->IsBroken() )
|
if (!weapon)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ItemPrototype const* weapon_proto = weapon->GetProto();
|
ItemPrototype const* weapon_proto = weapon->GetProto();
|
||||||
|
|
@ -8173,14 +8179,14 @@ void Player::SetSheath( SheathState sheathed )
|
||||||
break;
|
break;
|
||||||
case SHEATH_STATE_MELEE: // prepared melee weapon
|
case SHEATH_STATE_MELEE: // prepared melee weapon
|
||||||
{
|
{
|
||||||
SetVirtualItemSlot(0,GetWeaponForAttack(BASE_ATTACK,true));
|
SetVirtualItemSlot(0,GetWeaponForAttack(BASE_ATTACK,true,true));
|
||||||
SetVirtualItemSlot(1,GetWeaponForAttack(OFF_ATTACK,true));
|
SetVirtualItemSlot(1,GetWeaponForAttack(OFF_ATTACK,true,true));
|
||||||
SetVirtualItemSlot(2,NULL);
|
SetVirtualItemSlot(2,NULL);
|
||||||
}; break;
|
}; break;
|
||||||
case SHEATH_STATE_RANGED: // prepared ranged weapon
|
case SHEATH_STATE_RANGED: // prepared ranged weapon
|
||||||
SetVirtualItemSlot(0,NULL);
|
SetVirtualItemSlot(0,NULL);
|
||||||
SetVirtualItemSlot(1,NULL);
|
SetVirtualItemSlot(1,NULL);
|
||||||
SetVirtualItemSlot(2,GetWeaponForAttack(RANGED_ATTACK,true));
|
SetVirtualItemSlot(2,GetWeaponForAttack(RANGED_ATTACK,true,true));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SetVirtualItemSlot(0,NULL);
|
SetVirtualItemSlot(0,NULL);
|
||||||
|
|
@ -8551,7 +8557,7 @@ Item* Player::GetItemByPos( uint8 bag, uint8 slot ) const
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Item* Player::GetWeaponForAttack(WeaponAttackType attackType, bool useable) const
|
Item* Player::GetWeaponForAttack(WeaponAttackType attackType, bool nonbroken, bool useable) const
|
||||||
{
|
{
|
||||||
uint16 slot;
|
uint16 slot;
|
||||||
switch (attackType)
|
switch (attackType)
|
||||||
|
|
@ -8566,10 +8572,10 @@ Item* Player::GetWeaponForAttack(WeaponAttackType attackType, bool useable) cons
|
||||||
if (!item || item->GetProto()->Class != ITEM_CLASS_WEAPON)
|
if (!item || item->GetProto()->Class != ITEM_CLASS_WEAPON)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if(!useable)
|
if (useable && !IsUseEquipedWeapon(attackType==BASE_ATTACK))
|
||||||
return item;
|
return NULL;
|
||||||
|
|
||||||
if( item->IsBroken() || !IsUseEquipedWeapon(attackType==BASE_ATTACK) )
|
if (nonbroken && item->IsBroken())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
|
@ -12491,7 +12497,7 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me
|
||||||
uint32 Player::GetGossipTextId(WorldObject *pSource)
|
uint32 Player::GetGossipTextId(WorldObject *pSource)
|
||||||
{
|
{
|
||||||
if (!pSource || pSource->GetTypeId() != TYPEID_UNIT || !((Creature*)pSource)->GetDBTableGUIDLow())
|
if (!pSource || pSource->GetTypeId() != TYPEID_UNIT || !((Creature*)pSource)->GetDBTableGUIDLow())
|
||||||
return 0;
|
return DEFAULT_GOSSIP_MESSAGE;
|
||||||
|
|
||||||
if (uint32 pos = sObjectMgr.GetNpcGossip(((Creature*)pSource)->GetDBTableGUIDLow()))
|
if (uint32 pos = sObjectMgr.GetNpcGossip(((Creature*)pSource)->GetDBTableGUIDLow()))
|
||||||
return pos;
|
return pos;
|
||||||
|
|
@ -19638,7 +19644,7 @@ bool Player::IsAtGroupRewardDistance(WorldObject const* pRewardSource) const
|
||||||
|
|
||||||
uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const
|
uint32 Player::GetBaseWeaponSkillValue (WeaponAttackType attType) const
|
||||||
{
|
{
|
||||||
Item* item = GetWeaponForAttack(attType,true);
|
Item* item = GetWeaponForAttack(attType,true,true);
|
||||||
|
|
||||||
// unarmed only with base attack
|
// unarmed only with base attack
|
||||||
if(attType != BASE_ATTACK && !item)
|
if(attType != BASE_ATTACK && !item)
|
||||||
|
|
|
||||||
|
|
@ -1163,7 +1163,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
Item* GetItemByGuid( uint64 guid ) const;
|
Item* GetItemByGuid( uint64 guid ) const;
|
||||||
Item* GetItemByPos( uint16 pos ) const;
|
Item* GetItemByPos( uint16 pos ) const;
|
||||||
Item* GetItemByPos( uint8 bag, uint8 slot ) const;
|
Item* GetItemByPos( uint8 bag, uint8 slot ) const;
|
||||||
Item* GetWeaponForAttack(WeaponAttackType attackType, bool useable = false) const;
|
Item* GetWeaponForAttack(WeaponAttackType attackType) const { return GetWeaponForAttack(attackType,false,false); }
|
||||||
|
Item* GetWeaponForAttack(WeaponAttackType attackType, bool nonbroken, bool useable) const;
|
||||||
Item* GetShield(bool useable = false) const;
|
Item* GetShield(bool useable = false) const;
|
||||||
static uint32 GetAttackBySlot( uint8 slot ); // MAX_ATTACK if not weapon slot
|
static uint32 GetAttackBySlot( uint8 slot ); // MAX_ATTACK if not weapon slot
|
||||||
std::vector<Item *> &GetItemUpdateQueue() { return m_itemUpdateQueue; }
|
std::vector<Item *> &GetItemUpdateQueue() { return m_itemUpdateQueue; }
|
||||||
|
|
|
||||||
|
|
@ -686,6 +686,9 @@ void Spell::prepareDataForTriggerSystem()
|
||||||
// Clearcasting trigger need do it
|
// Clearcasting trigger need do it
|
||||||
else if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000200000000) && m_spellInfo->SpellFamilyFlags2 & 0x8)
|
else if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000200000000) && m_spellInfo->SpellFamilyFlags2 & 0x8)
|
||||||
m_canTrigger = true;
|
m_canTrigger = true;
|
||||||
|
// Replenish Mana, item spell with triggered cases (Mana Agate, etc mana gems)
|
||||||
|
else if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000010000000000))
|
||||||
|
m_canTrigger = true;
|
||||||
break;
|
break;
|
||||||
case SPELLFAMILY_WARLOCK: // For Hellfire Effect / Rain of Fire / Seed of Corruption triggers need do it
|
case SPELLFAMILY_WARLOCK: // For Hellfire Effect / Rain of Fire / Seed of Corruption triggers need do it
|
||||||
if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000800000000060))
|
if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000800000000060))
|
||||||
|
|
@ -2417,11 +2420,10 @@ void Spell::cancel()
|
||||||
{
|
{
|
||||||
Unit* unit = m_caster->GetGUID()==(*ihit).targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID);
|
Unit* unit = m_caster->GetGUID()==(*ihit).targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID);
|
||||||
if( unit && unit->isAlive() )
|
if( unit && unit->isAlive() )
|
||||||
unit->RemoveAurasDueToSpell(m_spellInfo->Id);
|
unit->RemoveAurasByCasterSpell(m_spellInfo->Id,m_caster->GetGUID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_caster->RemoveAurasDueToSpell(m_spellInfo->Id);
|
|
||||||
SendChannelUpdate(0);
|
SendChannelUpdate(0);
|
||||||
SendInterrupted(0);
|
SendInterrupted(0);
|
||||||
SendCastResult(SPELL_FAILED_INTERRUPTED);
|
SendCastResult(SPELL_FAILED_INTERRUPTED);
|
||||||
|
|
@ -3441,6 +3443,13 @@ void Spell::SendChannelUpdate(uint32 time)
|
||||||
{
|
{
|
||||||
if(time == 0)
|
if(time == 0)
|
||||||
{
|
{
|
||||||
|
m_caster->RemoveAurasByCasterSpell(m_spellInfo->Id,m_caster->GetGUID());
|
||||||
|
|
||||||
|
if(uint64 target_guid = m_caster->GetChannelObjectGUID())
|
||||||
|
if(target_guid != m_caster->GetGUID() && IS_UNIT_GUID(target_guid))
|
||||||
|
if(Unit* target = ObjectAccessor::GetUnit(*m_caster, target_guid))
|
||||||
|
target->RemoveAurasByCasterSpell(m_spellInfo->Id,m_caster->GetGUID());
|
||||||
|
|
||||||
m_caster->SetChannelObjectGUID(0);
|
m_caster->SetChannelObjectGUID(0);
|
||||||
m_caster->SetUInt32Value(UNIT_CHANNEL_SPELL, 0);
|
m_caster->SetUInt32Value(UNIT_CHANNEL_SPELL, 0);
|
||||||
}
|
}
|
||||||
|
|
@ -5563,8 +5572,8 @@ SpellCastResult Spell::CheckItems()
|
||||||
if(m_caster->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_TARGET_NOT_PLAYER;
|
if(m_caster->GetTypeId() != TYPEID_PLAYER) return SPELL_FAILED_TARGET_NOT_PLAYER;
|
||||||
if( m_attackType != RANGED_ATTACK )
|
if( m_attackType != RANGED_ATTACK )
|
||||||
break;
|
break;
|
||||||
Item *pItem = ((Player*)m_caster)->GetWeaponForAttack(m_attackType);
|
Item *pItem = ((Player*)m_caster)->GetWeaponForAttack(m_attackType,true,false);
|
||||||
if(!pItem || pItem->IsBroken())
|
if (!pItem)
|
||||||
return SPELL_FAILED_EQUIPPED_ITEM;
|
return SPELL_FAILED_EQUIPPED_ITEM;
|
||||||
|
|
||||||
switch(pItem->GetProto()->SubClass)
|
switch(pItem->GetProto()->SubClass)
|
||||||
|
|
|
||||||
|
|
@ -628,27 +628,20 @@ void Aura::Update(uint32 diff)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get spell range
|
// need check distance for channeled target only
|
||||||
float radius;
|
if (caster->GetChannelObjectGUID() == m_target->GetGUID())
|
||||||
SpellModOp mod;
|
|
||||||
if (m_spellProto->EffectRadiusIndex[GetEffIndex()])
|
|
||||||
{
|
{
|
||||||
radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellProto->EffectRadiusIndex[GetEffIndex()]));
|
// Get spell range
|
||||||
mod = SPELLMOD_RADIUS;
|
float max_range = GetSpellMaxRange(sSpellRangeStore.LookupEntry(m_spellProto->rangeIndex));
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
radius = GetSpellMaxRange(sSpellRangeStore.LookupEntry(m_spellProto->rangeIndex));
|
|
||||||
mod = SPELLMOD_RANGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Player* modOwner = caster->GetSpellModOwner())
|
if(Player* modOwner = caster->GetSpellModOwner())
|
||||||
modOwner->ApplySpellMod(GetId(), mod, radius, NULL);
|
modOwner->ApplySpellMod(GetId(), SPELLMOD_RANGE, max_range, NULL);
|
||||||
|
|
||||||
if(!caster->IsWithinDistInMap(m_target, radius))
|
if(!caster->IsWithinDistInMap(m_target, max_range))
|
||||||
{
|
{
|
||||||
m_target->RemoveAura(GetId(), GetEffIndex());
|
m_target->RemoveAura(GetId(), GetEffIndex());
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1331,7 +1324,7 @@ bool Aura::isAffectedOnSpell(SpellEntry const *spell) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aura::ReapplyAffectedPassiveAuras( Unit* target )
|
void Aura::ReapplyAffectedPassiveAuras( Unit* target, bool owner_mode )
|
||||||
{
|
{
|
||||||
std::set<uint32> affectedSelf;
|
std::set<uint32> affectedSelf;
|
||||||
std::set<uint32> affectedAuraCaster;
|
std::set<uint32> affectedAuraCaster;
|
||||||
|
|
@ -1339,16 +1332,17 @@ void Aura::ReapplyAffectedPassiveAuras( Unit* target )
|
||||||
for(Unit::AuraMap::const_iterator itr = target->GetAuras().begin(); itr != target->GetAuras().end(); ++itr)
|
for(Unit::AuraMap::const_iterator itr = target->GetAuras().begin(); itr != target->GetAuras().end(); ++itr)
|
||||||
{
|
{
|
||||||
// permanent passive or permanent area aura
|
// permanent passive or permanent area aura
|
||||||
if (itr->second->IsPermanent() && (itr->second->IsPassive() || itr->second->IsAreaAura()) &&
|
// passive spells can be affected only by own or owner spell mods)
|
||||||
|
if (itr->second->IsPermanent() && (owner_mode && itr->second->IsPassive() || itr->second->IsAreaAura()) &&
|
||||||
// non deleted and not same aura (any with same spell id)
|
// non deleted and not same aura (any with same spell id)
|
||||||
!itr->second->IsDeleted() && itr->second->GetId() != GetId() &&
|
!itr->second->IsDeleted() && itr->second->GetId() != GetId() &&
|
||||||
// and affected by aura
|
// and affected by aura
|
||||||
isAffectedOnSpell(itr->second->GetSpellProto()))
|
isAffectedOnSpell(itr->second->GetSpellProto()))
|
||||||
{
|
{
|
||||||
// only applied by self or aura caster
|
// only applied by self or aura caster
|
||||||
if(itr->second->GetCasterGUID() == target->GetGUID())
|
if (itr->second->GetCasterGUID() == target->GetGUID())
|
||||||
affectedSelf.insert(itr->second->GetId());
|
affectedSelf.insert(itr->second->GetId());
|
||||||
else if(itr->second->GetCasterGUID() == GetCasterGUID())
|
else if (itr->second->GetCasterGUID() == GetCasterGUID())
|
||||||
affectedAuraCaster.insert(itr->second->GetId());
|
affectedAuraCaster.insert(itr->second->GetId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1429,25 +1423,26 @@ void Aura::HandleAddModifier(bool apply, bool Real)
|
||||||
((Player*)m_target)->AddSpellMod(m_spellmod, apply);
|
((Player*)m_target)->AddSpellMod(m_spellmod, apply);
|
||||||
|
|
||||||
// reapply talents to own passive persistent auras
|
// reapply talents to own passive persistent auras
|
||||||
ReapplyAffectedPassiveAuras(m_target);
|
ReapplyAffectedPassiveAuras(m_target, true);
|
||||||
|
|
||||||
// re-apply talents/passives/area auras applied to pet (it affected by player spellmods)
|
// re-apply talents/passives/area auras applied to pet (it affected by player spellmods)
|
||||||
if(Pet* pet = m_target->GetPet())
|
if(Pet* pet = m_target->GetPet())
|
||||||
ReapplyAffectedPassiveAuras(pet);
|
ReapplyAffectedPassiveAuras(pet, true);
|
||||||
|
|
||||||
// re-apply talents/passives/area auras applied to totems (it affected by player spellmods)
|
// re-apply talents/passives/area auras applied to totems (it affected by player spellmods)
|
||||||
for(int i = 0; i < MAX_TOTEM; ++i)
|
for(int i = 0; i < MAX_TOTEM; ++i)
|
||||||
if(m_target->m_TotemSlot[i])
|
if(m_target->m_TotemSlot[i])
|
||||||
if(Creature* totem = m_target->GetMap()->GetCreature(m_target->m_TotemSlot[i]))
|
if(Creature* totem = m_target->GetMap()->GetCreature(m_target->m_TotemSlot[i]))
|
||||||
ReapplyAffectedPassiveAuras(totem);
|
ReapplyAffectedPassiveAuras(totem, true);
|
||||||
|
|
||||||
// re-apply talents/passives/area auras applied to group members (it affected by player spellmods)
|
// re-apply talents/passives/area auras applied to group members (it affected by player spellmods)
|
||||||
if (Group* group = ((Player*)m_target)->GetGroup())
|
if (Group* group = ((Player*)m_target)->GetGroup())
|
||||||
for(GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
|
for(GroupReference *itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||||
if (Player* member = itr->getSource())
|
if (Player* member = itr->getSource())
|
||||||
if (member != m_target && member->IsInMap(m_target))
|
if (member != m_target && member->IsInMap(m_target))
|
||||||
ReapplyAffectedPassiveAuras(member);
|
ReapplyAffectedPassiveAuras(member, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aura::HandleAddTargetTrigger(bool apply, bool /*Real*/)
|
void Aura::HandleAddTargetTrigger(bool apply, bool /*Real*/)
|
||||||
{
|
{
|
||||||
// Use SpellModifier structure for check
|
// Use SpellModifier structure for check
|
||||||
|
|
@ -5295,7 +5290,7 @@ void Aura::HandleAuraModCritPercent(bool apply, bool Real)
|
||||||
if(Real)
|
if(Real)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < MAX_ATTACK; ++i)
|
for(int i = 0; i < MAX_ATTACK; ++i)
|
||||||
if(Item* pItem = ((Player*)m_target)->GetWeaponForAttack(WeaponAttackType(i)))
|
if(Item* pItem = ((Player*)m_target)->GetWeaponForAttack(WeaponAttackType(i),true,false))
|
||||||
((Player*)m_target)->_ApplyWeaponDependentAuraCritMod(pItem, WeaponAttackType(i), this, apply);
|
((Player*)m_target)->_ApplyWeaponDependentAuraCritMod(pItem, WeaponAttackType(i), this, apply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5495,7 +5490,7 @@ void Aura::HandleModDamageDone(bool apply, bool Real)
|
||||||
if(Real && m_target->GetTypeId() == TYPEID_PLAYER)
|
if(Real && m_target->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < MAX_ATTACK; ++i)
|
for(int i = 0; i < MAX_ATTACK; ++i)
|
||||||
if(Item* pItem = ((Player*)m_target)->GetWeaponForAttack(WeaponAttackType(i)))
|
if(Item* pItem = ((Player*)m_target)->GetWeaponForAttack(WeaponAttackType(i),true,false))
|
||||||
((Player*)m_target)->_ApplyWeaponDependentAuraDamageMod(pItem, WeaponAttackType(i), this, apply);
|
((Player*)m_target)->_ApplyWeaponDependentAuraDamageMod(pItem, WeaponAttackType(i), this, apply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5578,7 +5573,7 @@ void Aura::HandleModDamagePercentDone(bool apply, bool Real)
|
||||||
if(Real && m_target->GetTypeId() == TYPEID_PLAYER)
|
if(Real && m_target->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < MAX_ATTACK; ++i)
|
for(int i = 0; i < MAX_ATTACK; ++i)
|
||||||
if(Item* pItem = ((Player*)m_target)->GetWeaponForAttack(WeaponAttackType(i)))
|
if(Item* pItem = ((Player*)m_target)->GetWeaponForAttack(WeaponAttackType(i),true,false))
|
||||||
((Player*)m_target)->_ApplyWeaponDependentAuraDamageMod(pItem, WeaponAttackType(i), this, apply);
|
((Player*)m_target)->_ApplyWeaponDependentAuraDamageMod(pItem, WeaponAttackType(i), this, apply);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5897,7 +5892,7 @@ void Aura::HandleShapeshiftBoosts(bool apply)
|
||||||
|
|
||||||
void Aura::HandleSpellSpecificBoosts(bool apply)
|
void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
{
|
{
|
||||||
bool cast_at_remove = false; // if spell must be casted at aura remove
|
bool cast_at_remove = false; // if spell must be casted at last aura from stack remove
|
||||||
uint32 spellId1 = 0;
|
uint32 spellId1 = 0;
|
||||||
uint32 spellId2 = 0;
|
uint32 spellId2 = 0;
|
||||||
uint32 spellId3 = 0;
|
uint32 spellId3 = 0;
|
||||||
|
|
@ -5905,9 +5900,21 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
|
|
||||||
switch(GetSpellProto()->SpellFamilyName)
|
switch(GetSpellProto()->SpellFamilyName)
|
||||||
{
|
{
|
||||||
|
case SPELLFAMILY_GENERIC:
|
||||||
|
{
|
||||||
|
// Illusionary Barrier
|
||||||
|
if(GetId() == 57350 && !apply && m_target->getPowerType() == POWER_MANA)
|
||||||
|
{
|
||||||
|
cast_at_remove = true;
|
||||||
|
spellId1 = 60242; // Darkmoon Card: Illusion
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case SPELLFAMILY_MAGE:
|
case SPELLFAMILY_MAGE:
|
||||||
{
|
{
|
||||||
// Ice Barrier
|
// Ice Barrier (non stacking from one caster)
|
||||||
if (m_spellProto->SpellIconID == 32)
|
if (m_spellProto->SpellIconID == 32)
|
||||||
{
|
{
|
||||||
if (!apply && (m_removeMode == AURA_REMOVE_BY_DISPEL || (m_removeMode == AURA_REMOVE_BY_DEFAULT && !GetModifier()->m_amount)))
|
if (!apply && (m_removeMode == AURA_REMOVE_BY_DISPEL || (m_removeMode == AURA_REMOVE_BY_DEFAULT && !GetModifier()->m_amount)))
|
||||||
|
|
@ -5954,7 +5961,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELLFAMILY_WARLOCK:
|
case SPELLFAMILY_WARLOCK:
|
||||||
// Fear
|
// Fear (non stacking)
|
||||||
if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000040000000000))
|
if (m_spellProto->SpellFamilyFlags & UI64LIT(0x0000040000000000))
|
||||||
{
|
{
|
||||||
if(!apply)
|
if(!apply)
|
||||||
|
|
@ -6632,7 +6639,11 @@ void Aura::PeriodicTick()
|
||||||
|
|
||||||
// send critical in hit info for threat calculation
|
// send critical in hit info for threat calculation
|
||||||
if (isCrit)
|
if (isCrit)
|
||||||
|
{
|
||||||
cleanDamage.hitOutCome = MELEE_HIT_CRIT;
|
cleanDamage.hitOutCome = MELEE_HIT_CRIT;
|
||||||
|
// Resilience - reduce crit damage
|
||||||
|
pdamage -= m_target->GetSpellCritDamageReduction(pdamage);
|
||||||
|
}
|
||||||
|
|
||||||
// only from players
|
// only from players
|
||||||
// FIXME: need use SpellDamageBonus instead?
|
// FIXME: need use SpellDamageBonus instead?
|
||||||
|
|
|
||||||
|
|
@ -352,7 +352,7 @@ class MANGOS_DLL_SPEC Aura
|
||||||
void PeriodicDummyTick();
|
void PeriodicDummyTick();
|
||||||
|
|
||||||
bool IsCritFromAbilityAura(Unit* caster, uint32& damage);
|
bool IsCritFromAbilityAura(Unit* caster, uint32& damage);
|
||||||
void ReapplyAffectedPassiveAuras(Unit* target);
|
void ReapplyAffectedPassiveAuras(Unit* target, bool owner_mode);
|
||||||
|
|
||||||
Modifier m_modifier;
|
Modifier m_modifier;
|
||||||
SpellModifier *m_spellmod;
|
SpellModifier *m_spellmod;
|
||||||
|
|
|
||||||
|
|
@ -2223,10 +2223,10 @@ void Spell::EffectTriggerSpell(uint32 effIndex)
|
||||||
// main hand weapon required
|
// main hand weapon required
|
||||||
if (spellInfo->AttributesEx3 & SPELL_ATTR_EX3_MAIN_HAND)
|
if (spellInfo->AttributesEx3 & SPELL_ATTR_EX3_MAIN_HAND)
|
||||||
{
|
{
|
||||||
Item* item = ((Player*)m_caster)->GetWeaponForAttack(BASE_ATTACK);
|
Item* item = ((Player*)m_caster)->GetWeaponForAttack(BASE_ATTACK, true, false);
|
||||||
|
|
||||||
// skip spell if no weapon in slot or broken
|
// skip spell if no weapon in slot or broken
|
||||||
if (!item || item->IsBroken() )
|
if (!item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// skip spell if weapon not fit to triggered spell
|
// skip spell if weapon not fit to triggered spell
|
||||||
|
|
@ -2237,10 +2237,10 @@ void Spell::EffectTriggerSpell(uint32 effIndex)
|
||||||
// offhand hand weapon required
|
// offhand hand weapon required
|
||||||
if (spellInfo->AttributesEx3 & SPELL_ATTR_EX3_REQ_OFFHAND)
|
if (spellInfo->AttributesEx3 & SPELL_ATTR_EX3_REQ_OFFHAND)
|
||||||
{
|
{
|
||||||
Item* item = ((Player*)m_caster)->GetWeaponForAttack(OFF_ATTACK);
|
Item* item = ((Player*)m_caster)->GetWeaponForAttack(OFF_ATTACK, true, false);
|
||||||
|
|
||||||
// skip spell if no weapon in slot or broken
|
// skip spell if no weapon in slot or broken
|
||||||
if (!item || item->IsBroken() )
|
if (!item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// skip spell if weapon not fit to triggered spell
|
// skip spell if weapon not fit to triggered spell
|
||||||
|
|
@ -3442,6 +3442,7 @@ void Spell::EffectSummonType(uint32 i)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SUMMON_PROP_TYPE_CRITTER:
|
case SUMMON_PROP_TYPE_CRITTER:
|
||||||
|
case SUMMON_PROP_TYPE_REPAIR_BOT:
|
||||||
{
|
{
|
||||||
EffectSummonCritter(i, summon_prop->FactionId);
|
EffectSummonCritter(i, summon_prop->FactionId);
|
||||||
break;
|
break;
|
||||||
|
|
@ -4586,7 +4587,7 @@ void Spell::EffectWeaponDmg(uint32 i)
|
||||||
// Whirlwind, single only spell with 2 weapon white damage apply if have
|
// Whirlwind, single only spell with 2 weapon white damage apply if have
|
||||||
if(m_caster->GetTypeId()==TYPEID_PLAYER && (m_spellInfo->SpellFamilyFlags & UI64LIT(0x00000400000000)))
|
if(m_caster->GetTypeId()==TYPEID_PLAYER && (m_spellInfo->SpellFamilyFlags & UI64LIT(0x00000400000000)))
|
||||||
{
|
{
|
||||||
if(((Player*)m_caster)->GetWeaponForAttack(OFF_ATTACK,true))
|
if(((Player*)m_caster)->GetWeaponForAttack(OFF_ATTACK, true, true))
|
||||||
spell_bonus += m_caster->CalculateDamage (OFF_ATTACK, normalized);
|
spell_bonus += m_caster->CalculateDamage (OFF_ATTACK, normalized);
|
||||||
}
|
}
|
||||||
// Devastate bonus and sunder armor refresh
|
// Devastate bonus and sunder armor refresh
|
||||||
|
|
@ -4646,7 +4647,7 @@ void Spell::EffectWeaponDmg(uint32 i)
|
||||||
// Fan of Knives
|
// Fan of Knives
|
||||||
else if (m_caster->GetTypeId()==TYPEID_PLAYER && (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0004000000000000)))
|
else if (m_caster->GetTypeId()==TYPEID_PLAYER && (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0004000000000000)))
|
||||||
{
|
{
|
||||||
Item* weapon = ((Player*)m_caster)->GetWeaponForAttack(m_attackType,true);
|
Item* weapon = ((Player*)m_caster)->GetWeaponForAttack(m_attackType,true,true);
|
||||||
if (weapon && weapon->GetProto()->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER)
|
if (weapon && weapon->GetProto()->SubClass == ITEM_SUBCLASS_WEAPON_DAGGER)
|
||||||
totalDamagePercentMod *= 1.5f; // 150% to daggers
|
totalDamagePercentMod *= 1.5f; // 150% to daggers
|
||||||
}
|
}
|
||||||
|
|
@ -4821,13 +4822,13 @@ void Spell::EffectWeaponDmg(uint32 i)
|
||||||
// take ammo
|
// take ammo
|
||||||
if(m_attackType == RANGED_ATTACK && m_caster->GetTypeId() == TYPEID_PLAYER)
|
if(m_attackType == RANGED_ATTACK && m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
Item *pItem = ((Player*)m_caster)->GetWeaponForAttack( RANGED_ATTACK );
|
Item *pItem = ((Player*)m_caster)->GetWeaponForAttack(RANGED_ATTACK, true, false);
|
||||||
|
|
||||||
// wands don't have ammo
|
// wands don't have ammo
|
||||||
if(!pItem || pItem->IsBroken() || pItem->GetProto()->SubClass == ITEM_SUBCLASS_WEAPON_WAND)
|
if (!pItem || pItem->GetProto()->SubClass == ITEM_SUBCLASS_WEAPON_WAND)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( pItem->GetProto()->InventoryType == INVTYPE_THROWN )
|
if (pItem->GetProto()->InventoryType == INVTYPE_THROWN)
|
||||||
{
|
{
|
||||||
if(pItem->GetMaxStackCount()==1)
|
if(pItem->GetMaxStackCount()==1)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -483,7 +483,7 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case SPELL_AURA_MOD_DAMAGE_DONE: // dependent from bas point sign (negative -> negative)
|
case SPELL_AURA_MOD_DAMAGE_DONE: // dependent from base point sign (negative -> negative)
|
||||||
case SPELL_AURA_MOD_STAT:
|
case SPELL_AURA_MOD_STAT:
|
||||||
case SPELL_AURA_MOD_SKILL:
|
case SPELL_AURA_MOD_SKILL:
|
||||||
case SPELL_AURA_MOD_HEALING_PCT:
|
case SPELL_AURA_MOD_HEALING_PCT:
|
||||||
|
|
@ -496,8 +496,10 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
|
case SPELL_AURA_MOD_SPELL_CRIT_CHANCE:
|
||||||
|
case SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT:
|
||||||
|
case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE:
|
||||||
if(spellproto->CalculateSimpleValue(effIndex) > 0)
|
if(spellproto->CalculateSimpleValue(effIndex) > 0)
|
||||||
return true; // some expected positive spells have SPELL_ATTR_EX_NEGATIVE
|
return true; // some expected positive spells have SPELL_ATTR_EX_NEGATIVE or unclear target modes
|
||||||
break;
|
break;
|
||||||
case SPELL_AURA_ADD_TARGET_TRIGGER:
|
case SPELL_AURA_ADD_TARGET_TRIGGER:
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -573,6 +575,8 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex)
|
||||||
// some spells negative
|
// some spells negative
|
||||||
switch(spellproto->Id)
|
switch(spellproto->Id)
|
||||||
{
|
{
|
||||||
|
case 802: // Mutate Bug, wrongly negative by target modes
|
||||||
|
return true;
|
||||||
case 36900: // Soul Split: Evil!
|
case 36900: // Soul Split: Evil!
|
||||||
case 36901: // Soul Split: Good
|
case 36901: // Soul Split: Good
|
||||||
case 36893: // Transporter Malfunction (decrease size case)
|
case 36893: // Transporter Malfunction (decrease size case)
|
||||||
|
|
|
||||||
1192
src/game/Unit.cpp
1192
src/game/Unit.cpp
File diff suppressed because it is too large
Load diff
|
|
@ -1247,7 +1247,6 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
void RemoveAurasByCasterSpell(uint32 spellId, uint32 effindex, uint64 casterGUID);
|
void RemoveAurasByCasterSpell(uint32 spellId, uint32 effindex, uint64 casterGUID);
|
||||||
void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit *stealer);
|
void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit *stealer);
|
||||||
void RemoveAurasDueToSpellByCancel(uint32 spellId);
|
void RemoveAurasDueToSpellByCancel(uint32 spellId);
|
||||||
void RemoveAurasAtChanneledTarget(SpellEntry const* spellInfo);
|
|
||||||
|
|
||||||
// removing unknown aura stacks by diff reasons and selections
|
// removing unknown aura stacks by diff reasons and selections
|
||||||
void RemoveNotOwnSingleTargetAuras(uint32 newPhase = 0x0);
|
void RemoveNotOwnSingleTargetAuras(uint32 newPhase = 0x0);
|
||||||
|
|
@ -1618,6 +1617,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
uint32 m_lastManaUseTimer;
|
uint32 m_lastManaUseTimer;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void CleanupDeletedAuars();
|
||||||
|
|
||||||
bool IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent );
|
bool IsTriggeredAtSpellProcEvent(Unit *pVictim, 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 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 HandleHasteAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown);
|
||||||
|
|
|
||||||
|
|
@ -45,18 +45,20 @@ alter table creature_movement add `wpguid` int(11) default '0';
|
||||||
//-----------------------------------------------//
|
//-----------------------------------------------//
|
||||||
void WaypointMovementGenerator<Creature>::LoadPath(Creature &c)
|
void WaypointMovementGenerator<Creature>::LoadPath(Creature &c)
|
||||||
{
|
{
|
||||||
sLog.outDetail("LoadPath: loading waypoint path for creature %d,%d", c.GetGUIDLow(), c.GetDBTableGUIDLow());
|
sLog.outDetail("LoadPath: loading waypoint path for creature %u, %u", c.GetGUIDLow(), c.GetDBTableGUIDLow());
|
||||||
|
|
||||||
i_path = sWaypointMgr.GetPath(c.GetDBTableGUIDLow());
|
i_path = sWaypointMgr.GetPath(c.GetDBTableGUIDLow());
|
||||||
if(!i_path)
|
|
||||||
|
if (!i_path)
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %d) doesn't have waypoint path",
|
sLog.outErrorDb("WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u) doesn't have waypoint path",
|
||||||
c.GetName(), c.GetEntry(), c.GetDBTableGUIDLow());
|
c.GetName(), c.GetEntry(), c.GetDBTableGUIDLow());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 node_count = i_path->size();
|
uint32 node_count = i_path->size();
|
||||||
i_hasDone.resize(node_count);
|
i_hasDone.resize(node_count);
|
||||||
|
|
||||||
for(uint32 i = 0; i < node_count-1; ++i)
|
for(uint32 i = 0; i < node_count-1; ++i)
|
||||||
i_hasDone[i] = false;
|
i_hasDone[i] = false;
|
||||||
|
|
||||||
|
|
@ -78,22 +80,23 @@ void WaypointMovementGenerator<Creature>::Initialize()
|
||||||
|
|
||||||
bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint32 &diff)
|
bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint32 &diff)
|
||||||
{
|
{
|
||||||
if(!&creature)
|
if (!&creature)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Waypoint movement can be switched on/off
|
// Waypoint movement can be switched on/off
|
||||||
// This is quite handy for escort quests and other stuff
|
// This is quite handy for escort quests and other stuff
|
||||||
if(creature.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED | UNIT_STAT_DIED))
|
if (creature.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED | UNIT_STAT_DIED))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// prevent a crash at empty waypoint path.
|
// prevent a crash at empty waypoint path.
|
||||||
if(!i_path || i_path->empty())
|
if (!i_path || i_path->empty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// i_path was modified by chat commands for example
|
// i_path was modified by chat commands for example
|
||||||
if(i_path->size() != i_hasDone.size())
|
if (i_path->size() != i_hasDone.size())
|
||||||
i_hasDone.resize(i_path->size());
|
i_hasDone.resize(i_path->size());
|
||||||
if(i_currentNode >= i_path->size())
|
|
||||||
|
if (i_currentNode >= i_path->size())
|
||||||
i_currentNode = 0;
|
i_currentNode = 0;
|
||||||
|
|
||||||
CreatureTraveller traveller(creature);
|
CreatureTraveller traveller(creature);
|
||||||
|
|
@ -104,56 +107,67 @@ bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint3
|
||||||
// creature has been stopped in middle of the waypoint segment
|
// creature has been stopped in middle of the waypoint segment
|
||||||
if (!i_destinationHolder.HasArrived() && creature.IsStopped())
|
if (!i_destinationHolder.HasArrived() && creature.IsStopped())
|
||||||
{
|
{
|
||||||
if( i_nextMoveTime.Passed()) // Timer has elapsed, meaning this part controlled it
|
// Timer has elapsed, meaning this part controlled it
|
||||||
|
if (i_nextMoveTime.Passed())
|
||||||
{
|
{
|
||||||
SetStoppedByPlayer(false);
|
SetStoppedByPlayer(false);
|
||||||
// Now we re-set destination to same node and start travel
|
|
||||||
creature.addUnitState(UNIT_STAT_ROAMING);
|
creature.addUnitState(UNIT_STAT_ROAMING);
|
||||||
|
|
||||||
if (creature.canFly())
|
if (creature.canFly())
|
||||||
creature.AddMonsterMoveFlag(MONSTER_MOVE_FLY);
|
creature.AddMonsterMoveFlag(MONSTER_MOVE_FLY);
|
||||||
|
|
||||||
|
// Now we re-set destination to same node and start travel
|
||||||
const WaypointNode &node = i_path->at(i_currentNode);
|
const WaypointNode &node = i_path->at(i_currentNode);
|
||||||
i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z);
|
i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z);
|
||||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||||
}
|
}
|
||||||
else // if( !i_nextMoveTime.Passed())
|
else // if( !i_nextMoveTime.Passed())
|
||||||
{ // unexpected end of timer && creature stopped && not at end of segment
|
{
|
||||||
|
// unexpected end of timer && creature stopped && not at end of segment
|
||||||
if (!IsStoppedByPlayer())
|
if (!IsStoppedByPlayer())
|
||||||
{ // Put 30 seconds delay
|
{
|
||||||
|
// Put 30 seconds delay
|
||||||
i_destinationHolder.IncreaseTravelTime(STOP_TIME_FOR_PLAYER);
|
i_destinationHolder.IncreaseTravelTime(STOP_TIME_FOR_PLAYER);
|
||||||
i_nextMoveTime.Reset(STOP_TIME_FOR_PLAYER);
|
i_nextMoveTime.Reset(STOP_TIME_FOR_PLAYER);
|
||||||
SetStoppedByPlayer(true); // Mark we did it
|
SetStoppedByPlayer(true); // Mark we did it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true; // Abort here this update
|
return true; // Abort here this update
|
||||||
}
|
}
|
||||||
|
|
||||||
if( creature.IsStopped())
|
if (creature.IsStopped())
|
||||||
{
|
{
|
||||||
uint32 idx = i_currentNode > 0 ? i_currentNode-1 : i_path->size()-1;
|
uint32 idx = i_currentNode > 0 ? i_currentNode-1 : i_path->size()-1;
|
||||||
|
|
||||||
if (!i_hasDone[idx])
|
if (!i_hasDone[idx])
|
||||||
{
|
{
|
||||||
if (i_path->at(idx).orientation !=100)
|
if (i_path->at(idx).orientation != 100)
|
||||||
creature.SetOrientation(i_path->at(idx).orientation);
|
creature.SetOrientation(i_path->at(idx).orientation);
|
||||||
|
|
||||||
if(WaypointBehavior *behavior = i_path->at(idx).behavior)
|
if (WaypointBehavior *behavior = i_path->at(idx).behavior)
|
||||||
{
|
{
|
||||||
if(behavior->emote != 0)
|
if (behavior->emote != 0)
|
||||||
creature.SetUInt32Value(UNIT_NPC_EMOTESTATE,behavior->emote);
|
creature.SetUInt32Value(UNIT_NPC_EMOTESTATE, behavior->emote);
|
||||||
if(behavior->spell != 0)
|
|
||||||
creature.CastSpell(&creature,behavior->spell, false);
|
if (behavior->spell != 0)
|
||||||
if(behavior->model1 != 0)
|
creature.CastSpell(&creature, behavior->spell, false);
|
||||||
|
|
||||||
|
if (behavior->model1 != 0)
|
||||||
creature.SetDisplayId(behavior->model1);
|
creature.SetDisplayId(behavior->model1);
|
||||||
if(behavior->textid[0])
|
|
||||||
|
if (behavior->textid[0])
|
||||||
{
|
{
|
||||||
// Not only one text is set
|
// Not only one text is set
|
||||||
if( behavior->textid[1] )
|
if (behavior->textid[1])
|
||||||
{
|
{
|
||||||
// Select one from max 5 texts (0 and 1 laready checked)
|
// Select one from max 5 texts (0 and 1 already checked)
|
||||||
int i = 2;
|
int i = 2;
|
||||||
for( ; i < MAX_WAYPOINT_TEXT; ++i )
|
for(; i < MAX_WAYPOINT_TEXT; ++i)
|
||||||
if( !behavior->textid[i] )
|
{
|
||||||
|
if (!behavior->textid[i])
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
creature.Say(behavior->textid[rand() % i], 0, 0);
|
creature.Say(behavior->textid[rand() % i], 0, 0);
|
||||||
}
|
}
|
||||||
|
|
@ -167,37 +181,46 @@ bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint3
|
||||||
} // HasDone == false
|
} // HasDone == false
|
||||||
} // i_creature.IsStopped()
|
} // i_creature.IsStopped()
|
||||||
|
|
||||||
if( i_nextMoveTime.Passed() ) // This is at the end of waypoint segment or has been stopped by player
|
// This is at the end of waypoint segment or has been stopped by player
|
||||||
|
if (i_nextMoveTime.Passed())
|
||||||
{
|
{
|
||||||
if( creature.IsStopped() ) // If stopped then begin a new move segment
|
// If stopped then begin a new move segment
|
||||||
|
if (creature.IsStopped())
|
||||||
{
|
{
|
||||||
creature.addUnitState(UNIT_STAT_ROAMING);
|
creature.addUnitState(UNIT_STAT_ROAMING);
|
||||||
|
|
||||||
if (creature.canFly())
|
if (creature.canFly())
|
||||||
creature.AddMonsterMoveFlag(MONSTER_MOVE_FLY);
|
creature.AddMonsterMoveFlag(MONSTER_MOVE_FLY);
|
||||||
|
|
||||||
const WaypointNode &node = i_path->at(i_currentNode);
|
const WaypointNode &node = i_path->at(i_currentNode);
|
||||||
i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z);
|
i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z);
|
||||||
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
|
||||||
|
|
||||||
uint32 idx = i_currentNode > 0 ? i_currentNode-1 : i_path->size()-1;
|
uint32 idx = i_currentNode > 0 ? i_currentNode-1 : i_path->size()-1;
|
||||||
|
|
||||||
if (i_path->at(idx).orientation !=100)
|
if (i_path->at(idx).orientation != 100)
|
||||||
creature.SetOrientation(i_path->at(idx).orientation);
|
creature.SetOrientation(i_path->at(idx).orientation);
|
||||||
|
|
||||||
if(WaypointBehavior *behavior = i_path->at(idx).behavior )
|
if (WaypointBehavior *behavior = i_path->at(idx).behavior)
|
||||||
{
|
{
|
||||||
i_hasDone[idx] = false;
|
i_hasDone[idx] = false;
|
||||||
if(behavior->model2 != 0)
|
|
||||||
|
if (behavior->model2 != 0)
|
||||||
creature.SetDisplayId(behavior->model2);
|
creature.SetDisplayId(behavior->model2);
|
||||||
|
|
||||||
creature.SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
creature.SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // If not stopped then stop it and set the reset of TimeTracker to waittime
|
else
|
||||||
{
|
{
|
||||||
|
// If not stopped then stop it and set the reset of TimeTracker to waittime
|
||||||
creature.StopMoving();
|
creature.StopMoving();
|
||||||
SetStoppedByPlayer(false);
|
SetStoppedByPlayer(false);
|
||||||
|
|
||||||
i_nextMoveTime.Reset(i_path->at(i_currentNode).delay);
|
i_nextMoveTime.Reset(i_path->at(i_currentNode).delay);
|
||||||
++i_currentNode;
|
++i_currentNode;
|
||||||
if( i_currentNode >= i_path->size() )
|
|
||||||
|
if (i_currentNode >= i_path->size())
|
||||||
i_currentNode = 0;
|
i_currentNode = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +229,7 @@ bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint3
|
||||||
|
|
||||||
void WaypointMovementGenerator<Creature>::MovementInform(Creature &unit)
|
void WaypointMovementGenerator<Creature>::MovementInform(Creature &unit)
|
||||||
{
|
{
|
||||||
if(unit.AI())
|
if (unit.AI())
|
||||||
unit.AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode);
|
unit.AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8971"
|
#define REVISION_NR "8997"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef __REVISION_SQL_H__
|
#ifndef __REVISION_SQL_H__
|
||||||
#define __REVISION_SQL_H__
|
#define __REVISION_SQL_H__
|
||||||
#define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills"
|
#define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills"
|
||||||
#define REVISION_DB_MANGOS "required_8965_02_mangos_command"
|
#define REVISION_DB_MANGOS "required_8996_01_mangos_spell_proc_event"
|
||||||
#define REVISION_DB_REALMD "required_8728_01_realmd_account"
|
#define REVISION_DB_REALMD "required_8728_01_realmd_account"
|
||||||
#endif // __REVISION_SQL_H__
|
#endif // __REVISION_SQL_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue