mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 19:37:02 +00:00
Merge remote branch 'origin/master' into 330
Also move accepteble build number to src/game/SharedDefines.h as expected by new realmd code.
This commit is contained in:
commit
34d8d69e2b
42 changed files with 462 additions and 229 deletions
|
|
@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
|
|||
`version` varchar(120) default NULL,
|
||||
`creature_ai_version` varchar(120) default NULL,
|
||||
`cache_id` int(10) default '0',
|
||||
`required_8996_01_mangos_spell_proc_event` bit(1) default NULL
|
||||
`required_9007_01_mangos_spell_proc_event` bit(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||
|
||||
--
|
||||
|
|
@ -14085,7 +14085,7 @@ INSERT INTO `spell_bonus_data` VALUES
|
|||
(31803, 0, 0.0156, 0.03, 'Paladin - Holy Vengeance'),
|
||||
(2812, 0.07, 0, 0.07, 'Paladin - Holy Wrath'),
|
||||
(54158, 0.25, 0, 0, 'Paladin - Judgement'),
|
||||
(31898, 0.18, 0, 0.11, 'Paladin - Judgement of Blood Enemy'),
|
||||
(31898, 0.18, 0, 0.11, 'Paladin - Judgement of Blood Enemy'),
|
||||
(32220, 0.0594, 0, 0.0363,'Paladin - Judgement of Blood Self'),
|
||||
(20467, 0.25, 0, 0.16, 'Paladin - Judgement of Command'),
|
||||
(53733, 0, 0, 0, 'Paladin - Judgement of Corruption'),
|
||||
|
|
@ -17882,7 +17882,7 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(20234, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(20235, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(20335, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000008, 0x00000100, 0x00000000, 0.000000, 100.000000,0),
|
||||
(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0),
|
||||
(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 1),
|
||||
(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),
|
||||
(20705, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18040,6 +18040,7 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(33191, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(33192, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(33193, 0x00000000, 6, 0x00808000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(33297, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(33299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||
(33510, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0),
|
||||
(33648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18057,7 +18058,7 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(34139, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(34258, 0x00000000, 10, 0x00000400, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 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, 45),
|
||||
(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),
|
||||
|
|
@ -18125,10 +18126,11 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(38026, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0),
|
||||
(38031, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0),
|
||||
(38290, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.600000, 0.000000, 0),
|
||||
(38299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 12),
|
||||
(38326, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(38327, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(38334, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
||||
(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45),
|
||||
(38350, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(38394, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(38857, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18274,7 +18276,7 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(49530, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(49622, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
||||
(49657, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6),
|
||||
(50880, 0x00000010, 15, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(51123, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(51127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18285,6 +18287,7 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(51349, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10),
|
||||
(51352, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10),
|
||||
(51359, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10),
|
||||
(51414, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(51466, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(51470, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(51474, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18386,11 +18389,15 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(54489, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(54490, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(54646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00015400, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(54695, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(54707, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
||||
(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45),
|
||||
(54747, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||
(54749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||
(54754, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(54808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60),
|
||||
(54838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3),
|
||||
(54936, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(54937, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(54939, 0x00000000, 10, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18428,6 +18435,7 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(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),
|
||||
(56835, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(57345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 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),
|
||||
(57472, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18440,6 +18448,8 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(58364, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(58372, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(58386, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0),
|
||||
(58442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15),
|
||||
(58444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5),
|
||||
(58597, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0.000000, 100.000000,0),
|
||||
(58616, 0x00000000, 15, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(58620, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18450,19 +18460,34 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(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),
|
||||
(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, 45),
|
||||
(59057, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(59176, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(59327, 0x00000000, 15, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(59345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(59630, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0),
|
||||
(60061, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60063, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60066, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60132, 0x00000000, 15, 0x00000000, 0x08020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(60170, 0x00000000, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0),
|
||||
(60221, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60301, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60306, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60436, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60473, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15),
|
||||
(60490, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60493, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60503, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(60519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60529, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45),
|
||||
(60564, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(60571, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(60572, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
|
|
@ -18485,7 +18510,8 @@ INSERT INTO `spell_proc_event` VALUES
|
|||
(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0),
|
||||
(61345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(61346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(61356, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
(61356, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000002A8, 0x00000002, 0.000000, 0.000000, 45),
|
||||
(61618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(61846, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0),
|
||||
(61847, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0),
|
||||
(62600, 0x00000000, 7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0),
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
DROP TABLE IF EXISTS `realmd_db_version`;
|
||||
CREATE TABLE `realmd_db_version` (
|
||||
`required_8728_01_realmd_account` bit(1) default NULL
|
||||
`required_9010_01_realmd_realmlist` bit(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB';
|
||||
|
||||
--
|
||||
|
|
@ -161,6 +161,7 @@ CREATE TABLE `realmlist` (
|
|||
`timezone` tinyint(3) unsigned NOT NULL default '0',
|
||||
`allowedSecurityLevel` tinyint(3) unsigned NOT NULL default '0',
|
||||
`population` float unsigned NOT NULL default '0',
|
||||
`realmbuilds` varchar(64) NOT NULL default '',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `idx_name` (`name`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Realm System';
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8251_03_mangos_spell_proc_event required_8253_01_mangos_spell_chain bit;
|
||||
|
||||
DELETE FROM `spell_chain` WHERE `spell_id` IN (32385,32387,32392,32393,32394,51528,51529,51530,51531,51532);
|
||||
DELETE FROM `spell_chain` WHERE `spell_id` IN (32385,32387,32392,32393,32394,51528,51529,51530,51531,51532);
|
||||
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
|
||||
/*Shadow embrace*/
|
||||
(32385,0,32385,1,0),
|
||||
|
|
|
|||
|
|
@ -6,16 +6,16 @@ INSERT INTO spell_proc_event VALUES
|
|||
(60442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45);
|
||||
|
||||
/*Seal of wisdom*/
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (20166);
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (20166);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,15.000000, 0.000000, 0);
|
||||
(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,15.000000, 0.000000, 0);
|
||||
|
||||
/*Shadow embrace*/
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (32385);
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (32385);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(32385, 0x00000000, 5, 0x00000001, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||
(32385, 0x00000000, 5, 0x00000001, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0);
|
||||
|
||||
/*Maelstrom Weapon*/
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (51528);
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (51528);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(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);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8253_02_mangos_spell_proc_event required_8254_01_mangos_spell_proc_event bit;
|
||||
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (55747,60436);
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (55747,60436);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(55747, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45),
|
||||
(60436, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45);
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ INSERT INTO playercreateinfo_action VALUES
|
|||
DELETE FROM playercreateinfo_action WHERE race=2 AND class=3 AND button IN (4,9);
|
||||
INSERT INTO playercreateinfo_action VALUES (2,3,9,20572,0);
|
||||
|
||||
-- Moved Berserking to correct action bar location for Non-Heroic Troll classes
|
||||
-- Moved Berserking to correct action bar location for Non-Heroic Troll classes
|
||||
DELETE FROM playercreateinfo_action WHERE race=8 AND class IN (3,5,7,8) AND button IN (3,76);
|
||||
INSERT INTO playercreateinfo_action VALUES
|
||||
(8,3,3,20554,0),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8377_01_mangos_spell_area required_8392_01_mangos_spell_proc_event bit;
|
||||
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (47569);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(47569, 0x00000000, 6, 0x00004000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0);
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (47569);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(47569, 0x00000000, 6, 0x00004000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8392_01_mangos_spell_proc_event required_8392_02_mangos_spell_chain bit;
|
||||
|
||||
DELETE FROM `spell_chain` WHERE `spell_id` IN (47569,47570);
|
||||
DELETE FROM `spell_chain` WHERE `spell_id` IN (47569,47570);
|
||||
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
|
||||
/*Improved Shadowform*/
|
||||
(47569,0,47569,1,0),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8392_02_mangos_spell_chain required_8394_01_mangos_spell_proc_event bit;
|
||||
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (54646);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(54646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00015400, 0x00000002, 0.000000, 0.000000, 0);
|
||||
DELETE FROM `spell_proc_event` WHERE `entry` IN (54646);
|
||||
INSERT INTO `spell_proc_event` VALUES
|
||||
(54646, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00015400, 0x00000002, 0.000000, 0.000000, 0);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@ CREATE TABLE `guild_eventlog` (
|
|||
PRIMARY KEY (`guildid`, `LogGuid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'Guild Eventlog';
|
||||
|
||||
-- The reason i decided for such dramatic change is that old guild_eventlog table didn't have Primary key and
|
||||
-- The reason i decided for such dramatic change is that old guild_eventlog table didn't have Primary key and
|
||||
-- used LogGuids from 0 to infinity
|
||||
-- New system uses LogGuids from 0 to number defined in config.
|
||||
|
|
|
|||
|
|
@ -18,6 +18,6 @@ CREATE TABLE `guild_bank_eventlog` (
|
|||
KEY `guildid_key` (`guildid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- The reason i decided for such dramatic change is that old guild_bank_eventlog table used `TabId` = 0 for Money events and
|
||||
-- The reason i decided for such dramatic change is that old guild_bank_eventlog table used `TabId` = 0 for Money events and
|
||||
-- used `LogGuid` from 0 to infinity
|
||||
-- New system uses `LogGuid` from 0 to number defined in config.
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ INSERT INTO `spell_bonus_data` VALUES
|
|||
(53733, 0, 0, 0, "Paladin - Judgement of Corruption"),
|
||||
(31893, 0, 0, 0, "Paladin - Seal of Blood Proc Enemy"),
|
||||
(32221, 0, 0, 0, "Paladin - Seal of Blood Proc Self"),
|
||||
(31898, 0.18, 0, 0.11, "Paladin - Judgement of Blood Enemy"),
|
||||
(31898, 0.18, 0, 0.11, "Paladin - Judgement of Blood Enemy"),
|
||||
(32220, 0.0594, 0, 0.0363, "Paladin - Judgement of Blood Self"),
|
||||
(53719, 0, 0, 0, "Paladin - Seal of the Martyr Proc Enemy"),
|
||||
(53718, 0, 0, 0, "Paladin - Seal of the Martyr Proc Self"),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8803_01_mangos_playercreateinfo_spell required_8803_02_mangos_playercreateinfo_action bit;
|
||||
|
||||
UPDATE `playercreateinfo_action`
|
||||
UPDATE `playercreateinfo_action`
|
||||
SET `action` = 26297
|
||||
WHERE `action` IN (20554,26296,50621) AND `type` = 0;
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ ALTER TABLE locales_npc_option ADD menu_id smallint(6) unsigned NOT NULL default
|
|||
ALTER TABLE locales_npc_option DROP PRIMARY KEY;
|
||||
ALTER TABLE locales_npc_option ADD PRIMARY KEY (menu_id, id);
|
||||
|
||||
DROP TABLE IF EXISTS locales_gossip_menu_option;
|
||||
RENAME TABLE locales_npc_option TO locales_gossip_menu_option;
|
||||
|
||||
DROP TABLE IF EXISTS npc_option;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `Spell
|
|||
|
||||
/*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
|
||||
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*/
|
||||
|
|
|
|||
5
sql/updates/9001_01_mangos_spell_proc_event.sql
Normal file
5
sql/updates/9001_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_8996_01_mangos_spell_proc_event required_9001_01_mangos_spell_proc_event bit;
|
||||
|
||||
DELETE FROM spell_proc_event WHERE entry=57345;
|
||||
INSERT INTO spell_proc_event VALUES
|
||||
(57345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45);
|
||||
5
sql/updates/9005_01_mangos_spell_proc_event.sql
Normal file
5
sql/updates/9005_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_9001_01_mangos_spell_proc_event required_9005_01_mangos_spell_proc_event bit;
|
||||
|
||||
DELETE FROM spell_proc_event WHERE entry = '60487';
|
||||
INSERT INTO spell_proc_event VALUES
|
||||
(60487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15);
|
||||
41
sql/updates/9007_01_mangos_spell_proc_event.sql
Normal file
41
sql/updates/9007_01_mangos_spell_proc_event.sql
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
ALTER TABLE db_version CHANGE COLUMN required_9005_01_mangos_spell_proc_event required_9007_01_mangos_spell_proc_event bit;
|
||||
|
||||
DELETE FROM spell_proc_event WHERE entry IN (
|
||||
20375, 33297, 34320, 38299, 38347, 50781, 51414, 54695, 54707, 54738, 54808,
|
||||
54838, 54841, 58442, 58444, 58901, 59345, 59630, 60061, 60063, 60066, 60221,
|
||||
60301, 60306, 60317, 60473, 60482, 60490, 60519, 60529, 60537, 61356, 61618);
|
||||
|
||||
INSERT INTO spell_proc_event(entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, ppmRate, CustomChance, Cooldown) VALUES
|
||||
(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 1), -- Seal of Command
|
||||
(33297, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Quagmirran's Eye
|
||||
(34320, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Shiffar's Nexus-Horn
|
||||
(38299, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 12), -- Fel Reaver's Piston
|
||||
(38347, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Sextant of Unstable Currents
|
||||
(50781, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), -- Fate Rune of Primal Energy
|
||||
(51414, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Venomous Tome
|
||||
(54695, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Death Knight's Anguish
|
||||
(54707, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), -- Sonic Booster
|
||||
(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Serrah's Star
|
||||
(54808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), -- Noise Machine
|
||||
(54838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Valonforth's Remembrance
|
||||
(54841, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), -- Thunder Capacitor
|
||||
(58442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), -- Airy Pale Ale
|
||||
(58444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), -- Worg Tooth Oatmeal Stout
|
||||
(58901, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Tears of Bitter Anguish
|
||||
(59345, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Crusader's Locket
|
||||
(59630, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Black Magic
|
||||
(60061, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Scarab of the Infinite Cycle
|
||||
(60063, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Sundial of the Exiled
|
||||
(60066, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Hourglass of the Unraveller
|
||||
(60221, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Essence of Gossamer
|
||||
(60301, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Meteorite Whetstone
|
||||
(60306, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Vestige of Haldor
|
||||
(60317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Signet of Edward the Odd
|
||||
(60473, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Forge Ember
|
||||
(60482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Pendulum of Telluric Currents
|
||||
(60490, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Embrace of the Spider
|
||||
(60519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Spark of Life
|
||||
(60529, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), -- Forethought Talisman
|
||||
(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), -- Soul of the Dead
|
||||
(61356, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000002A8, 0x00000002, 0.000000, 0.000000, 45), -- Invigorating Earthsiege Diamond
|
||||
(61618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); -- Chuchu's Tiny Box of Horrors
|
||||
4
sql/updates/9010_01_realmd_realmlist.sql
Normal file
4
sql/updates/9010_01_realmd_realmlist.sql
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
ALTER TABLE realmd_db_version CHANGE COLUMN required_8728_01_realmd_account required_9010_01_realmd_realmlist bit;
|
||||
|
||||
ALTER TABLE realmlist
|
||||
ADD COLUMN realmbuilds varchar(64) NOT NULL default '' AFTER population;
|
||||
|
|
@ -208,6 +208,10 @@ pkgdata_DATA = \
|
|||
8993_01_mangos_spell_proc_event.sql \
|
||||
8995_01_mangos_spell_proc_event.sql \
|
||||
8996_01_mangos_spell_proc_event.sql \
|
||||
9001_01_mangos_spell_proc_event.sql \
|
||||
9005_01_mangos_spell_proc_event.sql \
|
||||
9007_01_mangos_spell_proc_event.sql \
|
||||
9010_01_realmd_realmlist.sql \
|
||||
README
|
||||
|
||||
## Additional files to include when running 'make dist'
|
||||
|
|
@ -396,4 +400,8 @@ EXTRA_DIST = \
|
|||
8993_01_mangos_spell_proc_event.sql \
|
||||
8995_01_mangos_spell_proc_event.sql \
|
||||
8996_01_mangos_spell_proc_event.sql \
|
||||
9001_01_mangos_spell_proc_event.sql \
|
||||
9005_01_mangos_spell_proc_event.sql \
|
||||
9007_01_mangos_spell_proc_event.sql \
|
||||
9010_01_realmd_realmlist.sql \
|
||||
README
|
||||
|
|
|
|||
|
|
@ -1491,11 +1491,11 @@ struct SpellShapeshiftEntry
|
|||
int32 creatureType; // 20 <=0 humanoid, other normal creature types
|
||||
//uint32 unk1; // 21 unused, related to next field
|
||||
uint32 attackSpeed; // 22
|
||||
//uint32 modelID; // 23 unused, alliance modelid (where horde case?)
|
||||
//uint32 unk2; // 24 unused, also modelid (single case)
|
||||
//uint32 unk3; // 25 unused, all zeros
|
||||
//uint32 unk4; // 26 unused, all zeros
|
||||
//uint32 spellids[8]; // 27-34 unused
|
||||
uint32 modelID_A; // 23 alliance modelid (0 means no model)
|
||||
uint32 modelID_H; // 24 horde modelid (but only for one form)
|
||||
//uint32 unk3; // 25 unused always 0
|
||||
//uint32 unk4; // 26 unused always 0
|
||||
//uint32 spell[8]; // 27-34 unused, spells which appear in the bar after shapeshifting
|
||||
};
|
||||
|
||||
struct SpellDurationEntry
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ const char SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX";
|
|||
const char SpellRadiusfmt[]="nfxf";
|
||||
const char SpellRangefmt[]="nffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
||||
const char SpellRuneCostfmt[]="niiii";
|
||||
const char SpellShapeshiftfmt[]="nxxxxxxxxxxxxxxxxxxiixixxxxxxxxxxxx";
|
||||
const char SpellShapeshiftfmt[]="nxxxxxxxxxxxxxxxxxxiixiiixxxxxxxxxx";
|
||||
const char StableSlotPricesfmt[] = "ni";
|
||||
const char SummonPropertiesfmt[] = "niiiii";
|
||||
const char TalentEntryfmt[]="niiiiiiiixxxxixxixxxxxx";
|
||||
|
|
|
|||
|
|
@ -914,7 +914,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32
|
|||
void MailDraft::SendMailTo(MailReceiver const& receiver, MailSender const& sender, MailCheckMask checked, uint32 deliver_delay)
|
||||
{
|
||||
Player* pReceiver = receiver.GetPlayer(); // can be NULL
|
||||
|
||||
|
||||
if (pReceiver)
|
||||
prepareItems(pReceiver); // generate mail template items
|
||||
|
||||
|
|
|
|||
|
|
@ -306,7 +306,8 @@ void WorldSession::HandleGossipSelectOptionOpcode( WorldPacket & recv_data )
|
|||
|
||||
// TODO: determine if scriptCall is needed for GO and also if scriptCall can be same as current, with modified argument WorldObject*
|
||||
|
||||
if (IS_CREATURE_GUID(guid))
|
||||
// can vehicle have gossip? If so, need check for this also.
|
||||
if (IS_CREATURE_OR_PET_GUID(guid))
|
||||
{
|
||||
Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE);
|
||||
|
||||
|
|
|
|||
|
|
@ -352,22 +352,28 @@ void WorldSession::HandlePetSetAction( WorldPacket & recv_data )
|
|||
}
|
||||
}
|
||||
|
||||
// check swap
|
||||
// check swap (at command->spell swap client remove spell first in another packet, so check only command move correctness)
|
||||
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;
|
||||
if(act_state_0 == ACT_COMMAND || act_state_0 == ACT_REACTION)
|
||||
{
|
||||
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;
|
||||
if(act_state_1 == ACT_COMMAND || act_state_1 == ACT_REACTION)
|
||||
{
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ void PoolGroup<T>::SpawnObject(uint32 limit, uint32 triggerFrom)
|
|||
int count = limit - m_SpawnedPoolAmount;
|
||||
|
||||
// If triggered from some object respawn this object is still marked as spawned
|
||||
// and also counted into m_SpawnedPoolAmount so we need increase count to be
|
||||
// and also counted into m_SpawnedPoolAmount so we need increase count to be
|
||||
// spawned by 1
|
||||
if (triggerFrom)
|
||||
++count;
|
||||
|
|
|
|||
|
|
@ -2640,4 +2640,10 @@ enum PetTameFailureReason
|
|||
PETTAME_UNKNOWNERROR = 12
|
||||
};
|
||||
|
||||
// we need to stick to 1 version or half of the stuff will work for someone
|
||||
// others will not and opposite
|
||||
// will only support WoW, WoW:TBC and WoW:WotLK 3.3.0a client build 11159...
|
||||
|
||||
#define EXPECTED_MANGOSD_CLIENT_BUILD {11159, 0}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -4320,7 +4320,7 @@ SpellCastResult Spell::CheckCast(bool strict)
|
|||
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
|
||||
Pet* target = m_caster->GetMap()->GetPet(((Player*)m_caster)->GetSelection());
|
||||
|
||||
// alive
|
||||
// alive
|
||||
if (!target || target->isDead())
|
||||
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
|
||||
// undead
|
||||
|
|
|
|||
|
|
@ -2572,7 +2572,7 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
|
|||
break;
|
||||
case SPELLFAMILY_WARLOCK:
|
||||
{
|
||||
// Haunt
|
||||
// Haunt
|
||||
if (GetSpellProto()->SpellIconID == 3172 && (GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0004000000000000)))
|
||||
{
|
||||
// NOTE: for avoid use additional field damage stored in dummy value (replace unused 100%
|
||||
|
|
@ -2923,86 +2923,68 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
|
|||
uint32 modelid = 0;
|
||||
Powers PowerType = POWER_MANA;
|
||||
ShapeshiftForm form = ShapeshiftForm(m_modifier.m_miscvalue);
|
||||
|
||||
SpellShapeshiftEntry const* ssEntry = sSpellShapeshiftStore.LookupEntry(form);
|
||||
if(ssEntry && ssEntry->modelID_A)
|
||||
{
|
||||
// i will asume that creatures will always take the defined model from the dbc
|
||||
// since no field in creature_templates describes wether an alliance or
|
||||
// horde modelid should be used at shapeshifting
|
||||
if (m_target->GetTypeId() != TYPEID_PLAYER)
|
||||
modelid = ssEntry->modelID_A;
|
||||
else
|
||||
{
|
||||
// players are a bit difficult since the dbc has seldomly an horde modelid
|
||||
// so we add hacks here to set the right model
|
||||
if (Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = ssEntry->modelID_A;
|
||||
else // 3.2.3 only the moonkin form has this information
|
||||
modelid = ssEntry->modelID_H;
|
||||
|
||||
// no model found, if player is horde we look here for our hardcoded modelids
|
||||
if (!modelid && Player::TeamForRace(m_target->getRace()) == HORDE)
|
||||
{
|
||||
|
||||
switch(form)
|
||||
{
|
||||
case FORM_CAT:
|
||||
modelid = 8571;
|
||||
break;
|
||||
case FORM_BEAR:
|
||||
case FORM_DIREBEAR:
|
||||
modelid = 2289;
|
||||
break;
|
||||
case FORM_FLIGHT:
|
||||
modelid = 20872;
|
||||
break;
|
||||
case FORM_FLIGHT_EPIC:
|
||||
modelid = 21244;
|
||||
break;
|
||||
// per default use alliance modelid
|
||||
// mostly horde and alliance share the same
|
||||
default:
|
||||
modelid = ssEntry->modelID_A;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// now only powertype must be set
|
||||
switch(form)
|
||||
{
|
||||
case FORM_CAT:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 892;
|
||||
else
|
||||
modelid = 8571;
|
||||
PowerType = POWER_ENERGY;
|
||||
break;
|
||||
case FORM_TRAVEL:
|
||||
modelid = 632;
|
||||
break;
|
||||
case FORM_AQUA:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 2428;
|
||||
else
|
||||
modelid = 2428;
|
||||
break;
|
||||
case FORM_BEAR:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 2281;
|
||||
else
|
||||
modelid = 2289;
|
||||
PowerType = POWER_RAGE;
|
||||
break;
|
||||
case FORM_GHOUL:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 10045;
|
||||
break;
|
||||
case FORM_DIREBEAR:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 2281;
|
||||
else
|
||||
modelid = 2289;
|
||||
PowerType = POWER_RAGE;
|
||||
break;
|
||||
case FORM_CREATUREBEAR:
|
||||
modelid = 902;
|
||||
break;
|
||||
case FORM_GHOSTWOLF:
|
||||
modelid = 4613;
|
||||
break;
|
||||
case FORM_FLIGHT:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 20857;
|
||||
else
|
||||
modelid = 20872;
|
||||
break;
|
||||
case FORM_MOONKIN:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 15374;
|
||||
else
|
||||
modelid = 15375;
|
||||
break;
|
||||
case FORM_FLIGHT_EPIC:
|
||||
if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
|
||||
modelid = 21243;
|
||||
else
|
||||
modelid = 21244;
|
||||
break;
|
||||
case FORM_METAMORPHOSIS:
|
||||
modelid = 25277;
|
||||
break;
|
||||
case FORM_AMBIENT:
|
||||
case FORM_SHADOW:
|
||||
case FORM_STEALTH:
|
||||
break;
|
||||
case FORM_TREE:
|
||||
modelid = 864;
|
||||
break;
|
||||
case FORM_BATTLESTANCE:
|
||||
case FORM_BERSERKERSTANCE:
|
||||
case FORM_DEFENSIVESTANCE:
|
||||
PowerType = POWER_RAGE;
|
||||
break;
|
||||
case FORM_SPIRITOFREDEMPTION:
|
||||
modelid = 16031;
|
||||
break;
|
||||
default:
|
||||
sLog.outError("Auras: Unknown Shapeshift Type: %u, SpellId %u.", m_modifier.m_miscvalue, GetId());
|
||||
break;
|
||||
}
|
||||
|
||||
// remove polymorph before changing display id to keep new display id
|
||||
|
|
@ -5915,7 +5897,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
|||
case SPELLFAMILY_MAGE:
|
||||
{
|
||||
// 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)))
|
||||
{
|
||||
|
|
@ -6010,7 +5992,7 @@ void Aura::HandleSpellSpecificBoosts(bool apply)
|
|||
for(Unit::AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr)
|
||||
{
|
||||
// Shadow Affinity
|
||||
if ((*itr)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST
|
||||
if ((*itr)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST
|
||||
&& (*itr)->GetSpellProto()->SpellIconID == 178)
|
||||
{
|
||||
// custom cast code
|
||||
|
|
|
|||
|
|
@ -3414,16 +3414,15 @@ void Spell::EffectSummonType(uint32 i)
|
|||
{
|
||||
switch(summon_prop->Type)
|
||||
{
|
||||
case SUMMON_PROP_TYPE_SIEGE_VEH:
|
||||
case SUMMON_PROP_TYPE_DRAKE_VEH:
|
||||
case SUMMON_PROP_TYPE_OTHER:
|
||||
{
|
||||
// TODO
|
||||
// EffectSummonVehicle(i);
|
||||
break;
|
||||
}
|
||||
case SUMMON_PROP_TYPE_TOTEM:
|
||||
{
|
||||
EffectSummonTotem(i, summon_prop->Slot);
|
||||
// those are classical totems - effectbasepoints is their hp and not summon ammount!
|
||||
//SUMMON_TYPE_TOTEM = 121: 23035, battlestands
|
||||
//SUMMON_TYPE_TOTEM2 = 647: 52893, Anti-Magic Zone (npc used)
|
||||
if(prop_id == 121 || prop_id == 647)
|
||||
EffectSummonTotem(i);
|
||||
else
|
||||
EffectSummonWild(i, summon_prop->FactionId);
|
||||
break;
|
||||
}
|
||||
case SUMMON_PROP_TYPE_SUMMON:
|
||||
|
|
@ -3441,25 +3440,22 @@ void Spell::EffectSummonType(uint32 i)
|
|||
EffectSummonGuardian(i, summon_prop->FactionId);
|
||||
break;
|
||||
}
|
||||
case SUMMON_PROP_TYPE_TOTEM:
|
||||
EffectSummonTotem(i, summon_prop->Slot);
|
||||
break;
|
||||
case SUMMON_PROP_TYPE_CRITTER:
|
||||
case SUMMON_PROP_TYPE_REPAIR_BOT:
|
||||
{
|
||||
EffectSummonCritter(i, summon_prop->FactionId);
|
||||
break;
|
||||
}
|
||||
case SUMMON_PROP_TYPE_OTHER:
|
||||
case SUMMON_PROP_TYPE_PHASING:
|
||||
case SUMMON_PROP_TYPE_LIGHTWELL:
|
||||
{
|
||||
// those are classical totems - effectbasepoints is their hp and not summon ammount!
|
||||
//SUMMON_TYPE_TOTEM = 121: 23035, battlestands
|
||||
//SUMMON_TYPE_TOTEM2 = 647: 52893, Anti-Magic Zone (npc used)
|
||||
if(prop_id == 121 || prop_id == 647)
|
||||
EffectSummonTotem(i);
|
||||
else
|
||||
EffectSummonWild(i, summon_prop->FactionId);
|
||||
case SUMMON_PROP_TYPE_REPAIR_BOT:
|
||||
EffectSummonWild(i, summon_prop->FactionId);
|
||||
break;
|
||||
case SUMMON_PROP_TYPE_SIEGE_VEH:
|
||||
case SUMMON_PROP_TYPE_DRAKE_VEH:
|
||||
// TODO
|
||||
// EffectSummonVehicle(i);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
sLog.outError("EffectSummonType: Unhandled summon type %u", summon_prop->Type);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -311,6 +311,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
|
|||
// not have spell in spellbook or spell passive and not casted by client
|
||||
if (!((Player*)mover)->HasActiveSpell (spellId) || IsPassiveSpell(spellId) )
|
||||
{
|
||||
sLog.outError("World: Player %u casts spell %u which he shouldn't have", mover->GetGUIDLow(), spellId);
|
||||
//cheater? kick? ban?
|
||||
recvPacket.rpos(recvPacket.wpos()); // prevent spam at ignore packet
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -6253,7 +6253,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
|
|||
break;
|
||||
}
|
||||
// Sacred Shield (talent rank)
|
||||
case 53601:
|
||||
case 53601:
|
||||
{
|
||||
triggered_spell_id = 58597;
|
||||
target = this;
|
||||
|
|
@ -7638,16 +7638,6 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, uint32 damage, Aura
|
|||
case 6953: // Warbringer
|
||||
RemoveAurasAtMechanicImmunity(IMMUNE_TO_ROOT_AND_SNARE_MASK,0,true);
|
||||
return true;
|
||||
case 8152: // Serendipity
|
||||
{
|
||||
// if heal your target over maximum health
|
||||
if (pVictim->GetHealth() + damage < pVictim->GetMaxHealth())
|
||||
return false;
|
||||
int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100;
|
||||
int32 basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100;
|
||||
CastCustomSpell(this, 47762, &basepoints0, NULL, NULL, true, NULL, triggeredByAura);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// not processed
|
||||
|
|
@ -8993,7 +8983,7 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
|
|||
// Lava Burst
|
||||
if (spellProto->SpellFamilyFlags & UI64LIT(0x0000100000000000))
|
||||
{
|
||||
// Flame Shock
|
||||
// Flame Shock
|
||||
if (Aura *flameShock = pVictim->GetAura(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, UI64LIT(0x0000000010000000), 0, GetGUID()))
|
||||
return true;
|
||||
}
|
||||
|
|
@ -10827,7 +10817,7 @@ int32 Unit::CalculateSpellDuration(SpellEntry const* spellProto, uint8 effect_in
|
|||
durationMod_always+=target->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_DURATION_OF_EFFECTS_BY_DISPEL, spellProto->Dispel);
|
||||
// Find max mod (negative bonus)
|
||||
int32 durationMod_not_stack = target->GetMaxNegativeAuraModifierByMiscValue(SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK, mechanic);
|
||||
|
||||
|
||||
if (!IsPositiveSpell(spellProto->Id))
|
||||
durationMod_always += target->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_DURATION_OF_MAGIC_EFFECTS, spellProto->DmgClass);
|
||||
|
||||
|
|
@ -13055,4 +13045,4 @@ void Unit::CleanupDeletedAuars()
|
|||
for(AuraList::const_iterator itr = m_deletedAuras.begin(); itr != m_deletedAuras.end(); ++itr)
|
||||
delete *itr;
|
||||
m_deletedAuras.clear();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -173,6 +173,11 @@ enum ShapeshiftForm
|
|||
FORM_AMBIENT = 0x06,
|
||||
FORM_GHOUL = 0x07,
|
||||
FORM_DIREBEAR = 0x08,
|
||||
FORM_STEVES_GHOUL = 0x09,
|
||||
FORM_THARONJA_SKELETON = 0x0A,
|
||||
FORM_TEST_OF_STRENGTH = 0x0B,
|
||||
FORM_BLB_PLAYER = 0x0C,
|
||||
FORM_SHADOW_DANCE = 0x0D,
|
||||
FORM_CREATUREBEAR = 0x0E,
|
||||
FORM_CREATURECAT = 0x0F,
|
||||
FORM_GHOSTWOLF = 0x10,
|
||||
|
|
@ -182,12 +187,14 @@ enum ShapeshiftForm
|
|||
FORM_TEST = 0x14,
|
||||
FORM_ZOMBIE = 0x15,
|
||||
FORM_METAMORPHOSIS = 0x16,
|
||||
FORM_UNDEAD = 0x19,
|
||||
FORM_FRENZY = 0x1A,
|
||||
FORM_FLIGHT_EPIC = 0x1B,
|
||||
FORM_SHADOW = 0x1C,
|
||||
FORM_FLIGHT = 0x1D,
|
||||
FORM_STEALTH = 0x1E,
|
||||
FORM_MOONKIN = 0x1F,
|
||||
FORM_SPIRITOFREDEMPTION = 0x20
|
||||
FORM_SPIRITOFREDEMPTION = 0x20,
|
||||
};
|
||||
|
||||
// low byte ( 0 from 0..3 ) of UNIT_FIELD_BYTES_2
|
||||
|
|
|
|||
|
|
@ -745,7 +745,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
BigNumber K;
|
||||
|
||||
// Read the content of the packet
|
||||
recvPacket >> ClientBuild; // for now no use
|
||||
recvPacket >> ClientBuild;
|
||||
recvPacket >> unk2;
|
||||
recvPacket >> account;
|
||||
recvPacket >> unk3;
|
||||
|
|
@ -760,6 +760,29 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
unk3,
|
||||
clientSeed);
|
||||
|
||||
// Check the version of client trying to connect
|
||||
bool valid_version = false;
|
||||
int accepted_versions[] = EXPECTED_MANGOSD_CLIENT_BUILD;
|
||||
for(int i = 0; accepted_versions[i]; ++i)
|
||||
{
|
||||
if(ClientBuild == accepted_versions[i])
|
||||
{
|
||||
valid_version = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!valid_version)
|
||||
{
|
||||
packet.Initialize (SMSG_AUTH_RESPONSE, 1);
|
||||
packet << uint8 (AUTH_VERSION_MISMATCH);
|
||||
|
||||
SendPacket (packet);
|
||||
|
||||
sLog.outError ("WorldSocket::HandleAuthSession: Sent Auth Response (version mismatch).");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get the account information from the realmd database
|
||||
std::string safe_account = account; // Duplicate, else will screw the SHA hash verification below
|
||||
loginDatabase.escape_string (safe_account);
|
||||
|
|
|
|||
|
|
@ -226,9 +226,17 @@ int Master::Run()
|
|||
///- Launch WorldRunnable thread
|
||||
ACE_Based::Thread world_thread(new WorldRunnable);
|
||||
world_thread.setPriority(ACE_Based::Highest);
|
||||
|
||||
// set server online
|
||||
loginDatabase.PExecute("UPDATE realmlist SET color = 0, population = 0 WHERE id = '%d'",realmID);
|
||||
|
||||
// set realmbuilds depend on mangosd expected builds, and set server online
|
||||
{
|
||||
std::ostringstream data;
|
||||
int accepted_versions[] = EXPECTED_MANGOSD_CLIENT_BUILD;
|
||||
for(int i = 0; accepted_versions[i]; ++i)
|
||||
{
|
||||
data << accepted_versions[i] << " ";
|
||||
}
|
||||
loginDatabase.PExecute("UPDATE realmlist SET color = 0, population = 0, realmbuilds = '%s' WHERE id = '%d'", data.str().c_str(), realmID);
|
||||
}
|
||||
|
||||
ACE_Based::Thread* cliThread = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -64,11 +64,18 @@ enum LoginResult
|
|||
LOGIN_LOCKED_ENFORCED = 0x10,
|
||||
};
|
||||
|
||||
// we need to stick to 1 version or half of the stuff will work for someone
|
||||
// others will not and opposite
|
||||
// will only support WoW, WoW:TBC and WoW:WotLK 3.3.0a client build 11159...
|
||||
// will only support WoW 1.12.1/1.12.2 , WoW:TBC 2.4.3 and WoW:WotLK 3.2.2a, client builds 10505, 8606, 6005, 5875
|
||||
// if you need more from old build then add it in cases in relamd sources code
|
||||
// list sorted from high to low build and first build used as low bound for accepted by default range (any > it will accepted by realmd at least)
|
||||
|
||||
#define EXPECTED_MANGOS_CLIENT_BUILD {11159, 0}
|
||||
#define EXPECTED_REALMD_CLIENT_BUILD \
|
||||
{ \
|
||||
10505, /* 3.2.2a and higher */ \
|
||||
8606, /* 2.4.3 */ \
|
||||
6005, /* 1.12.2 */ \
|
||||
5875, /* 1.12.1 */ \
|
||||
0 \
|
||||
}
|
||||
|
||||
// At update excepted builds please update if need define DEFAULT_MAX_LEVEL
|
||||
// in DBCEnum.h to default max player level expected by build
|
||||
|
|
|
|||
|
|
@ -22,14 +22,12 @@
|
|||
|
||||
#include "Common.h"
|
||||
#include "Database/DatabaseEnv.h"
|
||||
#include "ByteBuffer.h"
|
||||
#include "Config/ConfigEnv.h"
|
||||
#include "Log.h"
|
||||
#include "RealmList.h"
|
||||
#include "AuthSocket.h"
|
||||
#include "AuthCodes.h"
|
||||
#include <openssl/md5.h>
|
||||
#include "Auth/Sha1.h"
|
||||
//#include "Util.h" -- for commented utf8ToUpperOnlyLatin
|
||||
|
||||
extern DatabaseType loginDatabase;
|
||||
|
|
@ -129,6 +127,16 @@ typedef struct AUTH_LOGON_PROOF_S
|
|||
uint16 unk3;
|
||||
} sAuthLogonProof_S;
|
||||
|
||||
typedef struct AUTH_LOGON_PROOF_S_BUILD_6005
|
||||
{
|
||||
uint8 cmd;
|
||||
uint8 error;
|
||||
uint8 M2[20];
|
||||
//uint32 unk1;
|
||||
uint32 unk2;
|
||||
//uint16 unk3;
|
||||
} sAuthLogonProof_S_BUILD_6005;
|
||||
|
||||
typedef struct AUTH_RECONNECT_PROOF_C
|
||||
{
|
||||
uint8 cmd;
|
||||
|
|
@ -321,6 +329,40 @@ void AuthSocket::_SetVSFields(const std::string& rI)
|
|||
OPENSSL_free((void*)s_hex);
|
||||
}
|
||||
|
||||
void AuthSocket::SendProof(Sha1Hash sha)
|
||||
{
|
||||
switch(_build)
|
||||
{
|
||||
case 5875: // 1.12.1
|
||||
case 6005: // 1.12.2
|
||||
{
|
||||
sAuthLogonProof_S_BUILD_6005 proof;
|
||||
memcpy(proof.M2, sha.GetDigest(), 20);
|
||||
proof.cmd = AUTH_LOGON_PROOF;
|
||||
proof.error = 0;
|
||||
proof.unk2 = 0x00;
|
||||
|
||||
SendBuf((char *)&proof, sizeof(proof));
|
||||
break;
|
||||
}
|
||||
case 8606: // 2.4.3
|
||||
case 10505: // 3.2.2a
|
||||
default: // or later
|
||||
{
|
||||
sAuthLogonProof_S proof;
|
||||
memcpy(proof.M2, sha.GetDigest(), 20);
|
||||
proof.cmd = AUTH_LOGON_PROOF;
|
||||
proof.error = 0;
|
||||
proof.unk1 = 0x00800000;
|
||||
proof.unk2 = 0x00;
|
||||
proof.unk3 = 0x00;
|
||||
|
||||
SendBuf((char *)&proof, sizeof(proof));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Logon Challenge command handler
|
||||
bool AuthSocket::_HandleLogonChallenge()
|
||||
{
|
||||
|
|
@ -536,13 +578,19 @@ bool AuthSocket::_HandleLogonProof()
|
|||
|
||||
///- Check if the client has one of the expected version numbers
|
||||
bool valid_version = false;
|
||||
int accepted_versions[] = EXPECTED_MANGOS_CLIENT_BUILD;
|
||||
for(int i = 0; accepted_versions[i]; ++i)
|
||||
int accepted_versions[] = EXPECTED_REALMD_CLIENT_BUILD;
|
||||
if (_build >= accepted_versions[0]) // first build is low bound of always accepted range
|
||||
valid_version = true;
|
||||
else
|
||||
{
|
||||
if(_build == accepted_versions[i])
|
||||
// continue from 1 with explict equal check
|
||||
for(int i = 1; accepted_versions[i]; ++i)
|
||||
{
|
||||
valid_version = true;
|
||||
break;
|
||||
if(_build == accepted_versions[i])
|
||||
{
|
||||
valid_version = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -690,16 +738,8 @@ bool AuthSocket::_HandleLogonProof()
|
|||
sha.Initialize();
|
||||
sha.UpdateBigNumbers(&A, &M, &K, NULL);
|
||||
sha.Finalize();
|
||||
|
||||
sAuthLogonProof_S proof;
|
||||
memcpy(proof.M2, sha.GetDigest(), 20);
|
||||
proof.cmd = AUTH_LOGON_PROOF;
|
||||
proof.error = 0;
|
||||
proof.unk1 = 0x00800000;
|
||||
proof.unk2 = 0x00;
|
||||
proof.unk3 = 0x00;
|
||||
|
||||
SendBuf((char *)&proof, sizeof(proof));
|
||||
|
||||
SendProof(sha);
|
||||
|
||||
///- Set _authed to true!
|
||||
_authed = true;
|
||||
|
|
@ -882,39 +922,8 @@ bool AuthSocket::_HandleRealmList()
|
|||
|
||||
///- Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm)
|
||||
ByteBuffer pkt;
|
||||
pkt << (uint32) 0;
|
||||
pkt << (uint16) sRealmList.size();
|
||||
RealmList::RealmMap::const_iterator i;
|
||||
for( i = sRealmList.begin(); i != sRealmList.end(); ++i )
|
||||
{
|
||||
uint8 AmountOfCharacters;
|
||||
|
||||
// No SQL injection. id of realm is controlled by the database.
|
||||
result = loginDatabase.PQuery( "SELECT numchars FROM realmcharacters WHERE realmid = '%d' AND acctid='%u'",i->second.m_ID,id);
|
||||
if( result )
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
AmountOfCharacters = fields[0].GetUInt8();
|
||||
delete result;
|
||||
}
|
||||
else
|
||||
AmountOfCharacters = 0;
|
||||
|
||||
uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0;
|
||||
|
||||
pkt << i->second.icon; // realm type
|
||||
pkt << lock; // if 1, then realm locked
|
||||
pkt << i->second.color; // if 2, then realm is offline
|
||||
pkt << i->first;
|
||||
pkt << i->second.address;
|
||||
pkt << i->second.populationLevel;
|
||||
pkt << AmountOfCharacters;
|
||||
pkt << i->second.timezone; // realm category
|
||||
pkt << (uint8) 0x2C; // unk, may be realm number/id?
|
||||
}
|
||||
pkt << (uint8) 0x10;
|
||||
pkt << (uint8) 0x00;
|
||||
|
||||
LoadRealmlist(pkt, id);
|
||||
|
||||
ByteBuffer hdr;
|
||||
hdr << (uint8) REALM_LIST;
|
||||
hdr << (uint16)pkt.size();
|
||||
|
|
@ -925,6 +934,95 @@ bool AuthSocket::_HandleRealmList()
|
|||
return true;
|
||||
}
|
||||
|
||||
void AuthSocket::LoadRealmlist(ByteBuffer &pkt, uint32 acctid)
|
||||
{
|
||||
switch(_build)
|
||||
{
|
||||
case 5875: // 1.12.1
|
||||
case 6005: // 1.12.2
|
||||
{
|
||||
pkt << uint32(0);
|
||||
pkt << uint8(sRealmList.size());
|
||||
|
||||
for(RealmList::RealmMap::const_iterator i = sRealmList.begin(); i != sRealmList.end(); ++i)
|
||||
{
|
||||
uint8 AmountOfCharacters;
|
||||
|
||||
// No SQL injection. id of realm is controlled by the database.
|
||||
QueryResult *result = loginDatabase.PQuery( "SELECT numchars FROM realmcharacters WHERE realmid = '%d' AND acctid='%u'", i->second.m_ID, acctid);
|
||||
if( result )
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
AmountOfCharacters = fields[0].GetUInt8();
|
||||
delete result;
|
||||
}
|
||||
else
|
||||
AmountOfCharacters = 0;
|
||||
|
||||
// Show offline state for unsupported client builds
|
||||
uint8 color = (std::find(i->second.realmbuilds.begin(), i->second.realmbuilds.end(), _build) != i->second.realmbuilds.end()) ? i->second.color : 2;
|
||||
color = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 2 : color;
|
||||
|
||||
pkt << uint32(i->second.icon); // realm type
|
||||
pkt << uint8(color); // if 2, then realm is offline
|
||||
pkt << i->first; // name
|
||||
pkt << i->second.address; // address
|
||||
pkt << float(i->second.populationLevel);
|
||||
pkt << uint8(AmountOfCharacters);
|
||||
pkt << uint8(i->second.timezone); // realm category
|
||||
pkt << uint8(0x00); // unk, may be realm number/id?
|
||||
}
|
||||
|
||||
pkt << uint8(0x00);
|
||||
pkt << uint8(0x02);
|
||||
break;
|
||||
}
|
||||
|
||||
case 8606: // 2.4.3
|
||||
case 10505: // 3.2.2a
|
||||
default: // and later
|
||||
{
|
||||
pkt << uint32(0);
|
||||
pkt << uint16(sRealmList.size());
|
||||
|
||||
for(RealmList::RealmMap::const_iterator i = sRealmList.begin(); i != sRealmList.end(); ++i)
|
||||
{
|
||||
uint8 AmountOfCharacters;
|
||||
|
||||
// No SQL injection. id of realm is controlled by the database.
|
||||
QueryResult *result = loginDatabase.PQuery( "SELECT numchars FROM realmcharacters WHERE realmid = '%d' AND acctid='%u'", i->second.m_ID, acctid);
|
||||
if( result )
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
AmountOfCharacters = fields[0].GetUInt8();
|
||||
delete result;
|
||||
}
|
||||
else
|
||||
AmountOfCharacters = 0;
|
||||
|
||||
uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0;
|
||||
|
||||
// Show offline state for unsupported client builds
|
||||
uint8 color = (std::find(i->second.realmbuilds.begin(), i->second.realmbuilds.end(), _build) != i->second.realmbuilds.end()) ? i->second.color : 2;
|
||||
|
||||
pkt << uint8(i->second.icon); // realm type
|
||||
pkt << uint8(lock); // if 1, then realm locked
|
||||
pkt << uint8(color); // if 2, then realm is offline
|
||||
pkt << i->first; // name
|
||||
pkt << i->second.address; // address
|
||||
pkt << float(i->second.populationLevel);
|
||||
pkt << uint8(AmountOfCharacters);
|
||||
pkt << uint8(i->second.timezone); // realm category
|
||||
pkt << uint8(0x2C); // unk, may be realm number/id?
|
||||
}
|
||||
|
||||
pkt << uint8(0x10);
|
||||
pkt << uint8(0x00);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Resume patch transfer
|
||||
bool AuthSocket::_HandleXferResume()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@
|
|||
#include "sockets/Utility.h"
|
||||
#include "sockets/Parse.h"
|
||||
#include "sockets/Socket.h"
|
||||
#include "Auth/Sha1.h"
|
||||
#include "ByteBuffer.h"
|
||||
|
||||
/// Handle login commands
|
||||
class AuthSocket: public TcpSocket
|
||||
|
|
@ -43,6 +45,8 @@ class AuthSocket: public TcpSocket
|
|||
|
||||
void OnAccept();
|
||||
void OnRead();
|
||||
void SendProof(Sha1Hash sha);
|
||||
void LoadRealmlist(ByteBuffer &pkt, uint32 acctid);
|
||||
|
||||
bool _HandleLogonChallenge();
|
||||
bool _HandleLogonProof();
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
#include "Common.h"
|
||||
#include "RealmList.h"
|
||||
#include "AuthCodes.h"
|
||||
#include "Util.h" // for Tokens typedef
|
||||
#include "Policies/SingletonImp.h"
|
||||
#include "Database/DatabaseEnv.h"
|
||||
|
||||
|
|
@ -48,11 +50,11 @@ void RealmList::Initialize(uint32 updateInterval)
|
|||
UpdateRealms(true);
|
||||
}
|
||||
|
||||
void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu)
|
||||
{
|
||||
void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, const char* builds)
|
||||
{
|
||||
///- Create new if not exist or update existed
|
||||
Realm& realm = m_realms[name];
|
||||
|
||||
|
||||
realm.m_ID = ID;
|
||||
realm.icon = icon;
|
||||
realm.color = color;
|
||||
|
|
@ -60,6 +62,15 @@ void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::stri
|
|||
realm.allowedSecurityLevel = allowedSecurityLevel;
|
||||
realm.populationLevel = popu;
|
||||
|
||||
Tokens tokens = StrSplit(builds, " ");
|
||||
Tokens::iterator iter;
|
||||
|
||||
for (iter = tokens.begin(); iter != tokens.end(); ++iter)
|
||||
{
|
||||
uint32 build = atol((*iter).c_str());
|
||||
realm.realmbuilds.insert(build);
|
||||
}
|
||||
|
||||
///- Append port to IP address.
|
||||
std::ostringstream ss;
|
||||
ss << address << ":" << port;
|
||||
|
|
@ -85,7 +96,8 @@ void RealmList::UpdateRealms(bool init)
|
|||
{
|
||||
sLog.outDetail("Updating Realm List...");
|
||||
|
||||
QueryResult *result = loginDatabase.Query( "SELECT id, name, address, port, icon, color, timezone, allowedSecurityLevel, population FROM realmlist WHERE color <> 3 ORDER BY name" );
|
||||
//// 0 1 2 3 4 5 6 7 8 9
|
||||
QueryResult *result = loginDatabase.Query( "SELECT id, name, address, port, icon, color, timezone, allowedSecurityLevel, population, realmbuilds FROM realmlist WHERE color <> 3 ORDER BY name" );
|
||||
|
||||
///- Circle through results and add them to the realm map
|
||||
if(result)
|
||||
|
|
@ -96,9 +108,9 @@ void RealmList::UpdateRealms(bool init)
|
|||
|
||||
uint8 allowedSecurityLevel = fields[7].GetUInt8();
|
||||
|
||||
UpdateRealm(fields[0].GetUInt32(), fields[1].GetCppString(),fields[2].GetCppString(),fields[3].GetUInt32(),fields[4].GetUInt8(), fields[5].GetUInt8(), fields[6].GetUInt8(), (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), fields[8].GetFloat() );
|
||||
UpdateRealm(fields[0].GetUInt32(), fields[1].GetCppString(),fields[2].GetCppString(),fields[3].GetUInt32(),fields[4].GetUInt8(), fields[5].GetUInt8(), fields[6].GetUInt8(), (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), fields[8].GetFloat(), fields[9].GetString() );
|
||||
if(init)
|
||||
sLog.outString("Added realm \"%s\".", fields[1].GetString());
|
||||
sLog.outString("Added realm \"%s\"", fields[1].GetString());
|
||||
} while( result->NextRow() );
|
||||
delete result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ struct Realm
|
|||
uint32 m_ID;
|
||||
AccountTypes allowedSecurityLevel;
|
||||
float populationLevel;
|
||||
std::set<uint32> realmbuilds;
|
||||
};
|
||||
|
||||
/// Storage object for the list of realms on the server
|
||||
|
|
@ -57,7 +58,7 @@ class RealmList
|
|||
uint32 size() const { return m_realms.size(); }
|
||||
private:
|
||||
void UpdateRealms(bool init);
|
||||
void UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu);
|
||||
void UpdateRealm( uint32 ID, const std::string& name, const std::string& address, uint32 port, uint8 icon, uint8 color, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, const char* builds);
|
||||
private:
|
||||
RealmMap m_realms; ///< Internal map of realms
|
||||
uint32 m_UpdateInterval;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8997"
|
||||
#define REVISION_NR "9010"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef __REVISION_SQL_H__
|
||||
#define __REVISION_SQL_H__
|
||||
#define REVISION_DB_CHARACTERS "required_8874_01_characters_character_skills"
|
||||
#define REVISION_DB_MANGOS "required_8996_01_mangos_spell_proc_event"
|
||||
#define REVISION_DB_REALMD "required_8728_01_realmd_account"
|
||||
#define REVISION_DB_MANGOS "required_9007_01_mangos_spell_proc_event"
|
||||
#define REVISION_DB_REALMD "required_9010_01_realmd_realmlist"
|
||||
#endif // __REVISION_SQL_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue