diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2013-07-25 00:41:37 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2013-07-25 00:41:37 +0200 |
commit | d4d43d74106bc3666175614bc7923b8b4e03bf50 (patch) | |
tree | 54940a0817cccacbc17fd82e538d17e8dd2d3ad5 | |
parent | ef83ec8d1c3dca2ef0208de376d0315d26d44227 (diff) | |
parent | c4a1ad2810a1c2e2c2f2e2cbf26033ac3fbdc796 (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Globals/ObjectMgr.cpp
src/server/game/Spells/SpellMgr.cpp
src/server/game/Spells/SpellMgr.h
src/server/game/World/World.cpp
-rw-r--r-- | sql/updates/world/2013_07_24_01_world_spell_ranks.sql | 682 | ||||
-rw-r--r-- | sql/updates/world/2013_07_24_02_world_trinity_strings.sql | 3 | ||||
-rw-r--r-- | sql/updates/world/2013_07_24_03_world_spell_proc_event.sql | 876 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Guilds/GuildMgr.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 217 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.h | 7 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_learn.cpp | 8 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 10 | ||||
-rw-r--r-- | src/server/shared/Database/Implementation/CharacterDatabase.cpp | 2 |
11 files changed, 1749 insertions, 86 deletions
diff --git a/sql/updates/world/2013_07_24_01_world_spell_ranks.sql b/sql/updates/world/2013_07_24_01_world_spell_ranks.sql new file mode 100644 index 00000000000..db1d9803596 --- /dev/null +++ b/sql/updates/world/2013_07_24_01_world_spell_ranks.sql @@ -0,0 +1,682 @@ +DELETE FROM `spell_ranks` WHERE `first_spell_id` IN ( +5923, +5952, +9452, +9453, +9799, +11069, +11070, +11071, +11078, +11083, +11094, +11095, +11100, +11103, +11108, +11115, +11119, +11124, +11151, +11160, +11170, +11175, +11180, +11185, +11189, +11190, +11207, +11210, +11213, +11222, +11232, +11237, +11242, +11247, +11252, +11255, +12163, +12281, +12282, +12284, +12285, +12286, +12287, +12289, +12290, +12295, +12297, +12298, +12299, +12300, +12301, +12308, +12311, +12312, +12313, +12317, +12318, +12319, +12320, +12321, +12322, +12324, +12329, +12700, +12797, +12834, +12862, +13705, +13706, +13709, +13712, +13713, +13715, +13732, +13733, +13741, +13742, +13743, +13754, +13958, +13960, +13975, +13976, +13981, +13983, +14057, +14076, +14079, +14082, +14113, +14128, +14138, +14144, +14156, +14158, +14162, +14165, +14168, +14171, +14174, +14179, +14186, +14520, +14521, +14522, +14523, +14531, +14747, +14748, +14749, +14750, +14889, +14892, +14898, +14901, +14908, +14909, +14910, +14911, +14912, +14913, +15058, +15257, +15259, +15260, +15270, +15273, +15274, +15275, +15318, +15337, +15392, +16035, +16038, +16039, +16040, +16043, +16086, +16089, +16173, +16176, +16178, +16179, +16180, +16181, +16182, +16184, +16187, +16194, +16252, +16254, +16255, +16256, +16258, +16259, +16261, +16262, +16266, +16462, +16487, +16493, +16513, +16538, +16578, +16757, +16814, +16819, +16821, +16833, +16836, +16845, +16850, +16858, +16880, +16896, +16909, +16929, +16934, +16940, +16942, +16947, +16966, +16972, +16998, +17002, +17003, +17050, +17056, +17063, +17069, +17074, +17104, +17106, +17111, +17118, +17123, +17322, +17485, +17778, +17783, +17788, +17793, +17804, +17810, +17815, +17917, +17927, +17954, +17959, +18094, +18096, +18119, +18126, +18135, +18174, +18179, +18182, +18213, +18218, +18271, +18427, +18459, +18462, +18530, +18551, +18692, +18694, +18697, +18703, +18705, +18709, +18731, +18754, +18767, +18769, +18827, +19159, +19168, +19184, +19255, +19286, +19290, +19295, +19370, +19376, +19407, +19416, +19421, +19426, +19454, +19461, +19464, +19485, +19498, +19507, +19549, +19552, +19559, +19572, +19578, +19583, +19590, +19598, +19609, +19616, +19621, +20042, +20049, +20060, +20096, +20101, +20111, +20117, +20127, +20138, +20143, +20174, +20177, +20196, +20205, +20210, +20224, +20234, +20237, +20244, +20254, +20257, +20262, +20335, +20359, +20468, +20487, +20500, +20502, +20504, +23584, +23785, +24443, +24968, +25956, +26022, +27789, +27811, +27839, +27900, +28574, +28996, +28999, +29062, +29074, +29082, +29140, +29187, +29192, +29206, +29438, +29441, +29447, +29590, +29593, +29598, +29721, +29723, +29759, +29787, +29834, +29836, +29888, +30054, +30060, +30143, +30160, +30242, +30288, +30293, +30299, +30319, +30664, +30672, +30675, +30802, +30812, +30816, +30864, +30867, +30872, +30881, +30892, +30894, +30902, +30919, +31122, +31124, +31130, +31208, +31211, +31216, +31221, +31226, +31228, +31234, +31244, +31380, +31569, +31571, +31574, +31579, +31584, +31638, +31641, +31656, +31667, +31670, +31674, +31679, +31682, +31785, +31822, +31825, +31828, +31833, +31837, +31844, +31848, +31850, +31858, +31866, +31871, +31876, +31879, +32043, +32381, +32385, +32477, +33142, +33150, +33158, +33167, +33186, +33191, +33201, +33213, +33221, +33589, +33592, +33597, +33600, +33603, +33851, +33853, +33859, +33872, +33879, +33881, +33886, +34151, +34293, +34297, +34453, +34455, +34462, +34466, +34475, +34482, +34485, +34491, +34494, +34497, +34500, +34506, +34753, +34908, +34935, +34948, +34950, +35029, +35100, +35104, +35363, +35446, +35541, +35578, +35691, +37116, +44378, +44394, +44397, +44400, +44404, +44442, +44445, +44449, +44543, +44546, +44557, +44566, +44745, +45234, +46854, +46859, +46865, +46867, +46908, +46910, +46913, +46945, +46951, +47195, +47198, +47201, +47220, +47230, +47236, +47245, +47258, +47266, +47294, +47507, +47509, +47516, +47535, +47558, +47562, +47569, +47573, +47580, +47586, +48384, +48389, +48409, +48411, +48432, +48483, +48488, +48492, +48496, +48506, +48516, +48532, +48535, +48539, +48962, +48963, +48965, +48977, +48978, +48979, +48985, +48987, +48988, +48997, +49004, +49006, +49013, +49015, +49018, +49023, +49024, +49027, +49032, +49036, +49042, +49137, +49140, +49145, +49146, +49149, +49175, +49182, +49186, +49188, +49189, +49200, +49202, +49208, +49217, +49219, +49220, +49223, +49224, +49226, +49455, +49467, +49471, +49588, +50040, +50117, +50187, +50365, +50384, +50391, +50685, +50880, +51099, +51123, +51179, +51459, +51466, +51468, +51474, +51480, +51483, +51521, +51523, +51525, +51528, +51554, +51556, +51560, +51562, +51625, +51627, +51632, +51634, +51664, +51672, +51682, +51685, +51692, +51698, +51708, +51745, +51883, +52234, +52783, +52795, +53137, +53175, +53178, +53180, +53182, +53186, +53203, +53215, +53221, +53228, +53234, +53241, +53252, +53256, +53262, +53290, +53295, +53298, +53302, +53375, +53379, +53380, +53409, +53427, +53450, +53481, +53483, +53486, +53501, +53511, +53514, +53527, +53551, +53554, +53556, +53569, +53583, +53590, +53620, +53660, +53671, +53695, +53709, +53754, +54037, +54117, +54347, +54639, +54747, +55061, +55091, +55107, +55129, +55620, +55666, +56314, +56333, +56339, +56342, +56636, +56927, +57470, +57810, +57849, +57873, +57878, +58414, +58872, +59088, +61154, +61216, +61680, +61682, +61686, +61689, +62097, +62758, +62759, +62764, +62905, +63117, +63156, +63349, +63370, +63373, +63410, +63504, +63534, +63625, +63646, +63730, +64127, +64353, +65661, +66799); diff --git a/sql/updates/world/2013_07_24_02_world_trinity_strings.sql b/sql/updates/world/2013_07_24_02_world_trinity_strings.sql new file mode 100644 index 00000000000..b14e60c2c9d --- /dev/null +++ b/sql/updates/world/2013_07_24_02_world_trinity_strings.sql @@ -0,0 +1,3 @@ +DELETE FROM `trinity_string` WHERE entry = 850; +INSERT INTO `trinity_string` (entry, content_default, content_loc1, content_loc2, content_loc3, content_loc4, content_loc5, content_loc6, content_loc7, content_loc8) VALUES +(850, '├─ Rank: %s (ID: %u)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/sql/updates/world/2013_07_24_03_world_spell_proc_event.sql b/sql/updates/world/2013_07_24_03_world_spell_proc_event.sql new file mode 100644 index 00000000000..0e179e54ec8 --- /dev/null +++ b/sql/updates/world/2013_07_24_03_world_spell_proc_event.sql @@ -0,0 +1,876 @@ +ALTER TABLE `spell_proc_event` + CHANGE `entry` `entry` MEDIUMINT(8) DEFAULT 0 NOT NULL; + +DELETE FROM `spell_proc_event` WHERE `entry` IN ( +325, +905, +945, +8134, +8494, +8495, +10191, +10192, +10193, +10431, +10432, +11120, +12487, +12488, +12574, +12575, +12576, +12577, +12598, +12668, +12724, +12725, +12726, +12727, +12799, +12812, +12813, +12814, +12815, +12846, +12847, +12848, +12849, +12867, +12872, +12873, +12958, +12967, +12968, +12969, +12970, +12971, +12972, +12973, +12974, +13867, +14070, +14071, +14160, +14161, +14190, +14193, +14194, +14195, +14318, +14319, +14320, +14321, +14322, +14774, +15338, +15362, +15363, +16196, +16198, +16235, +16240, +16277, +16278, +16279, +16280, +16281, +16282, +16283, +16284, +16489, +16492, +16544, +16923, +16924, +16954, +16961, +17107, +17108, +17796, +17801, +17802, +17803, +18073, +18095, +18120, +19387, +19388, +19573, +20056, +20057, +20179, +20180, +20181, +20182, +20212, +20213, +20214, +20215, +20235, +20336, +20337, +20501, +20927, +20928, +23695, +24398, +25296, +25469, +25472, +25988, +27044, +27131, +27179, +27815, +27816, +28592, +28593, +29075, +29076, +29179, +29180, +29444, +29594, +29838, +30295, +30296, +30301, +30302, +30678, +30679, +30705, +30883, +30884, +30885, +30886, +31126, +31245, +31570, +31572, +31657, +31658, +31835, +31836, +31872, +31877, +31878, +32387, +32392, +32393, +32394, +32593, +32594, +33145, +33146, +33154, +33192, +33193, +33736, +33882, +33883, +34498, +34499, +34502, +34503, +34859, +34860, +34916, +34917, +34938, +34939, +34954, +35102, +35550, +35551, +35552, +35553, +43019, +43020, +44443, +44446, +44448, +44469, +44470, +44471, +44472, +44560, +44561, +45243, +45244, +46855, +46914, +46915, +46949, +47196, +47197, +47202, +47203, +47204, +47205, +47246, +47247, +47259, +47260, +47264, +47265, +47511, +47515, +47517, +47570, +47581, +47582, +48110, +48111, +48112, +48113, +48159, +48160, +48484, +48485, +48499, +48500, +48510, +48511, +48521, +48525, +48544, +48545, +48951, +48952, +49280, +49281, +49283, +49284, +49503, +49504, +49508, +49509, +49529, +49530, +49599, +49627, +49628, +49654, +49655, +50033, +50034, +50115, +50884, +50885, +50886, +50887, +51462, +51463, +51464, +51465, +51478, +51479, +51522, +51524, +51557, +51558, +51563, +51564, +51565, +51566, +51626, +51628, +51629, +51635, +51636, +51665, +51667, +51668, +51669, +51674, +51679, +51696, +51989, +52004, +52005, +52007, +52008, +52129, +52131, +52134, +52136, +52138, +52797, +52798, +52799, +52800, +53179, +53216, +53217, +53222, +53224, +53232, +53237, +53238, +53259, +53260, +53291, +53292, +53376, +53381, +53382, +53488, +53502, +53503, +53530, +53552, +53553, +53576, +53673, +53696, +53710, +53711, +54151, +54154, +54155, +54637, +54638, +54749, +55667, +56343, +56344, +56611, +56612, +56613, +56614, +56637, +56638, +56822, +56834, +56835, +57472, +57880, +57881, +57960, +58874, +59057, +59089, +61345, +61346, +61847, +62765, +63158, +63245, +63374, +63733, +63737, +64129, +66191, +66192, +66814, +66815, +66816, +66817); + +DELETE FROM `spell_proc_event` WHERE `entry` IN ( +324, +974, +1463, +5952, +9799, +11095, +11119, +11180, +11185, +11213, +11255, +12281, +12289, +12298, +12311, +12319, +12797, +12834, +12966, +13165, +13754, +13983, +14156, +14186, +14531, +14892, +15337, +16086, +16176, +16180, +16256, +16257, +16487, +16850, +16880, +16952, +16958, +17106, +17793, +18094, +18096, +18119, +19184, +19572, +20049, +20177, +20210, +20234, +20335, +20500, +20925, +27811, +29074, +29441, +29593, +29834, +30160, +30293, +30299, +30675, +30701, +30881, +31124, +31244, +31569, +31571, +31656, +31833, +31871, +31876, +32385, +33076, +33142, +33150, +33191, +33881, +34497, +34500, +34753, +34914, +34935, +34950, +35100, +35541, +41635, +44442, +44445, +44449, +44557, +45234, +46854, +46867, +46913, +46945, +47195, +47201, +47245, +47258, +47263, +47509, +47516, +47569, +47580, +48483, +48496, +48506, +48516, +48539, +48988, +49004, +49018, +49149, +49188, +49208, +49217, +49219, +49223, +49467, +50880, +51459, +51474, +51521, +51523, +51556, +51562, +51625, +51627, +51634, +51664, +51672, +51692, +51940, +52127, +52795, +53178, +53215, +53221, +53228, +53234, +53256, +53290, +53375, +53380, +53486, +53501, +53527, +53551, +53569, +53671, +53695, +53709, +54639, +54747, +55666, +56342, +56636, +57470, +57878, +58872, +59088, +61846, +62764, +63156, +63373, +63730, +64127, +65661, +66799, +-324, +-974, +-1463, +-5952, +-9799, +-11095, +-11119, +-11180, +-11185, +-11213, +-11255, +-12281, +-12289, +-12298, +-12311, +-12319, +-12797, +-12834, +-12966, +-13165, +-13754, +-13983, +-14156, +-14186, +-14531, +-14892, +-15337, +-16086, +-16176, +-16180, +-16256, +-16257, +-16487, +-16850, +-16880, +-16952, +-16958, +-17106, +-17793, +-18094, +-18096, +-18119, +-19184, +-19572, +-20049, +-20177, +-20210, +-20234, +-20335, +-20500, +-20925, +-27811, +-29074, +-29441, +-29593, +-29834, +-30160, +-30293, +-30299, +-30675, +-30701, +-30881, +-31124, +-31244, +-31569, +-31571, +-31656, +-31833, +-31871, +-31876, +-32385, +-33076, +-33142, +-33150, +-33191, +-33881, +-34497, +-34500, +-34753, +-34914, +-34935, +-34950, +-35100, +-35541, +-41635, +-44442, +-44445, +-44449, +-44557, +-45234, +-46854, +-46867, +-46913, +-46945, +-47195, +-47201, +-47245, +-47258, +-47263, +-47509, +-47516, +-47569, +-47580, +-48483, +-48496, +-48506, +-48516, +-48539, +-48988, +-49004, +-49018, +-49149, +-49188, +-49208, +-49217, +-49219, +-49223, +-49467, +-50880, +-51459, +-51474, +-51521, +-51523, +-51556, +-51562, +-51625, +-51627, +-51634, +-51664, +-51672, +-51692, +-51940, +-52127, +-52795, +-53178, +-53215, +-53221, +-53228, +-53234, +-53256, +-53290, +-53375, +-53380, +-53486, +-53501, +-53527, +-53551, +-53569, +-53671, +-53695, +-53709, +-54639, +-54747, +-55666, +-56342, +-56636, +-57470, +-57878, +-58872, +-59088, +-61846, +-62764, +-63156, +-63373, +-63730, +-64127, +-65661, +-66799); + +INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES +(-324,0,0,0,0,0,0,0,0,0,3), +(-974,0,0,0,0,0,139944,0,0,0,3), +(-1463,0,0,0,0,0,0,1024,0,0,0), +(-5952,0,8,0,1,0,0,0,0,0,0), +(-9799,0,0,0,0,0,0,2,0,0,0), +(-11095,0,3,16,0,0,0,0,0,0,0), +(-11119,4,3,0,0,0,0,2,0,0,0), +(-11180,16,3,0,0,0,0,0,0,0,0), +(-11185,0,3,128,0,0,327680,0,0,0,0), +(-11213,0,3,0,0,0,0,0,0,0,0), +(-11255,0,3,16384,0,0,0,0,0,0,0), +(-12281,0,4,2858419268,4194565,0,0,0,0,0,6), +(-12289,0,4,2,0,0,0,0,0,0,0), +(-12298,0,0,0,0,0,0,112,0,0,0), +(-12311,0,4,2048,1,0,0,0,0,0,0), +(-12319,0,0,0,0,0,0,2,0,0,0), +(-12797,0,4,1024,0,0,0,0,0,0,0), +(-12834,0,0,0,0,0,0,2,0,0,0), +(-12966,0,0,0,0,0,0,65536,0,0,0), +(-13165,0,0,0,0,0,64,0,0,0,0), +(-13754,0,8,16,0,0,0,0,0,0,0), +(-13983,0,0,0,0,0,0,24,0,0,0), +(-14156,0,8,4063232,8,0,0,0,0,0,0), +(-14186,0,8,1082131720,6,0,0,2,0,0,1), +(-14531,0,0,0,0,0,0,2,0,0,0), +(-14892,0,6,268443136,65540,0,0,2,0,0,0), +(-15337,0,6,8396800,2,0,0,2,0,0,0), +(-16086,4,11,0,262144,0,196608,0,0,0,0), +(-16176,0,11,448,0,16,0,2,0,0,0), +(-16180,0,11,448,0,16,0,2,0,100,0), +(-16256,0,0,0,0,0,0,2,0,0,0), +(-16257,0,0,0,0,0,0,65536,0,0,0), +(-16487,0,0,0,0,0,0,2,0,0,0), +(-16850,0,7,4,0,0,0,0,0,0,0), +(-16880,72,7,103,58720258,0,0,2,0,0,0), +(-16952,0,7,233472,1024,262144,0,2,0,0,0), +(-16958,0,0,0,0,0,0,2,0,0,0), +(-17106,0,7,524288,0,0,0,0,0,0,0), +(-17793,0,5,1,0,0,0,0,0,0,0), +(-18094,0,5,10,0,0,0,0,0,0,0), +(-18096,0,5,256,8388608,0,0,2,0,0,0), +(-18119,0,5,0,8388608,0,0,0,0,0,0), +(-19184,0,9,16,8192,0,0,0,0,0,0), +(-19572,0,9,8388608,0,0,16384,0,0,0,0), +(-20049,0,0,0,0,0,0,2,0,0,0), +(-20177,0,0,0,0,0,0,67,0,0,0), +(-20210,0,10,3221225472,65536,0,0,2,0,0,0), +(-20234,0,10,32768,0,0,0,0,0,0,0), +(-20335,0,10,8388608,0,8,16,0,0,100,0), +(-20500,0,4,268435456,0,0,0,0,0,0,0), +(-20925,0,0,0,0,0,0,64,0,0,0), +(-27811,0,0,0,0,0,0,2,0,0,0), +(-29074,20,3,0,0,0,0,2,0,0,0), +(-29441,0,0,0,0,0,0,8,0,0,1), +(-29593,0,0,0,0,0,0,112,0,0,0), +(-29834,0,0,0,0,0,0,65536,0,0,0), +(-30160,0,0,0,0,0,0,2,0,0,0), +(-30293,0,5,897,8519872,0,0,0,0,0,0), +(-30299,126,0,0,0,0,0,0,0,0,0), +(-30675,0,11,3,0,0,0,0,0,0,0), +(-30701,28,0,0,0,0,664232,0,0,100,0), +(-30881,0,0,0,0,0,0,0,0,0,30), +(-31124,0,8,16777222,0,0,0,0,0,0,0), +(-31244,0,8,4063232,9,0,0,52,0,0,0), +(-31569,0,3,65536,0,0,0,0,0,0,0), +(-31571,0,3,0,34,0,16384,0,0,0,0), +(-31656,4,3,134217728,0,0,0,0,0,0,0), +(-31833,0,10,2147483648,0,0,0,0,0,0,0), +(-31871,0,10,16,0,0,16384,0,0,0,0), +(-31876,0,10,8388608,0,0,0,262144,0,0,0), +(-32385,0,5,1,262144,0,0,0,0,0,0), +(-33076,0,0,0,0,0,664232,0,0,0,0), +(-33142,0,0,0,0,0,0,2,0,0,0), +(-33150,0,0,0,0,0,0,2,0,0,0), +(-33191,0,6,32768,1024,64,0,0,0,0,0), +(-33881,0,0,0,0,0,0,2,0,0,0), +(-34497,0,0,0,0,0,0,2,0,0,0), +(-34500,0,0,0,0,0,0,2,0,0,0), +(-34753,0,6,6144,4,4096,0,2,0,0,0), +(-34914,0,6,8192,0,0,0,0,0,0,0), +(-34935,0,0,0,0,0,0,0,0,0,8), +(-34950,0,0,0,0,0,0,2,0,0,0), +(-35100,0,9,4096,0,1,0,0,0,0,0), +(-35541,0,0,0,0,0,8388608,0,0,0,0), +(-41635,0,0,0,0,0,664232,0,0,0,0), +(-44442,0,3,8388608,64,0,0,65536,0,0,1), +(-44445,0,3,19,69632,0,0,0,0,0,0), +(-44449,0,3,551686775,102472,0,0,2,0,0,0), +(-44557,0,3,32,0,0,0,0,0,0,0), +(-45234,0,0,0,0,0,0,2,0,0,0), +(-46854,0,0,0,0,0,0,2,0,0,0), +(-46867,0,0,0,0,0,0,2,0,0,0), +(-46913,0,4,64,1028,0,0,262144,0,0,0), +(-46945,0,4,0,65536,0,0,0,0,0,0), +(-47195,0,5,2,0,0,0,0,0,0,0), +(-47201,0,5,16393,262144,0,0,0,0,0,0), +(-47245,0,5,2,0,0,0,1,0,0,0), +(-47258,0,5,0,8388608,0,0,65536,0,0,0), +(-47263,32,5,0,0,0,0,2,0,0,20), +(-47509,0,0,0,0,0,0,2,0,0,0), +(-47516,0,6,6144,65536,0,0,0,0,0,0), +(-47569,0,6,16384,0,0,16384,0,0,0,0), +(-47580,0,6,0,0,64,0,65536,0,0,0), +(-48483,0,7,34816,1088,0,0,0,0,0,0), +(-48496,0,7,96,33554434,0,0,2,0,0,0), +(-48506,0,7,5,0,0,0,0,0,0,0), +(-48516,0,7,5,0,0,0,2,0,0,30), +(-48539,0,7,16,67108864,0,262144,0,0,0,0), +(-48988,0,0,0,0,0,0,2,0,0,0), +(-49004,0,0,0,0,0,0,51,0,0,0), +(-49018,0,15,20971520,0,0,0,0,0,0,0), +(-49149,0,15,6,131074,0,0,0,0,0,0), +(-49188,0,15,0,131072,0,0,0,0,0,0), +(-49208,0,15,4194304,65536,0,0,0,0,0,0), +(-49217,0,15,0,0,2,0,0,0,0,1), +(-49219,0,0,0,0,0,4,0,0,0,0), +(-49223,0,15,17,134348800,0,0,0,0,0,0), +(-49467,0,15,16,131072,0,0,0,0,0,0), +(-50880,0,15,0,67108864,0,0,0,0,0,0), +(-51459,0,0,0,0,0,4,0,0,0,0), +(-51474,0,0,0,0,0,0,65536,0,0,0), +(-51521,0,11,0,16777216,0,0,0,0,0,0), +(-51523,0,11,0,1,0,65536,0,0,50,0), +(-51556,0,11,192,0,16,0,2,0,0,0), +(-51562,0,11,256,0,16,0,0,0,0,0), +(-51625,0,8,268476416,0,0,0,0,0,0,0), +(-51627,0,0,0,0,0,0,112,0,0,0), +(-51634,0,0,0,0,0,0,2,0,0,0), +(-51664,0,8,131072,8,0,0,0,0,0,0), +(-51672,0,0,0,0,0,0,16,0,0,1), +(-51692,0,8,516,0,0,0,0,0,0,0), +(-51940,0,0,0,0,0,0,0,0,20,0), +(-52127,0,0,0,0,0,0,0,0,0,3), +(-52795,0,6,1,0,0,0,0,0,0,0), +(-53178,0,9,0,268435456,0,65536,0,0,100,0), +(-53215,0,9,1,0,0,0,0,0,0,0), +(-53221,0,9,0,1,0,0,0,0,0,0), +(-53228,0,9,32,16777216,0,0,0,0,0,0), +(-53234,0,9,131072,1,1,0,2,0,0,0), +(-53256,0,9,2048,8388609,0,0,2,0,0,0), +(-53290,0,9,2048,1,512,0,2,0,0,0), +(-53375,0,10,0,8192,0,1024,0,0,0,6), +(-53380,0,10,8388608,163840,0,0,262146,0,0,0), +(-53486,0,10,8388608,163840,0,0,262146,0,0,0), +(-53501,0,0,0,0,0,0,2,0,0,0), +(-53527,1,10,0,0,4,1024,1,0,100,0), +(-53551,0,10,4096,0,0,0,0,0,0,0), +(-53569,0,10,1075838976,65536,0,0,0,0,0,0), +(-53671,0,10,8388608,0,0,0,0,0,0,0), +(-53695,0,10,8388608,0,8,16,0,0,0,0), +(-53709,2,10,16384,0,0,0,0,0,0,0), +(-54639,0,15,4194304,65536,0,0,0,0,0,0), +(-54747,0,0,0,0,0,0,65536,0,0,0), +(-55666,0,15,1,134217728,0,0,0,0,0,0), +(-56342,0,9,24,134217728,147456,0,0,0,0,22), +(-56636,0,4,32,0,0,0,262144,0,0,6), +(-57470,0,6,1,0,0,0,0,0,0,0), +(-57878,0,0,0,0,0,0,16,0,0,0), +(-58872,0,0,0,0,0,0,270403,0,0,0), +(-59088,0,4,0,2,0,1024,0,0,0,0), +(-61846,0,0,0,0,0,64,0,0,0,0), +(-62764,0,9,0,268435456,0,65536,0,0,100,0), +(-63156,0,5,1,192,0,0,0,0,0,0), +(-63373,0,11,2147483648,0,0,65536,0,0,0,0), +(-63730,0,6,2048,4,0,0,0,0,0,0), +(-64127,0,6,1,1,0,0,0,0,0,0), +(-65661,0,15,4194321,537001988,0,16,0,0,100,0), +(-66799,0,15,4194304,0,0,0,0,0,0,0); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 55588bf9b70..f59aa1cdb71 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4827,10 +4827,10 @@ void ObjectMgr::LoadSpellScriptNames() Field* fields = result->Fetch(); int32 spellId = fields[0].GetInt32(); - const char *scriptName = fields[1].GetCString(); + char const* scriptName = fields[1].GetCString(); bool allRanks = false; - if (spellId <= 0) + if (spellId < 0) { allRanks = true; spellId = -spellId; @@ -4839,20 +4839,18 @@ void ObjectMgr::LoadSpellScriptNames() SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (!spellInfo) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname:`%s` spell (spell_id:%d) does not exist in `Spell.dbc`.", scriptName, fields[0].GetInt32()); + TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname: `%s` spell (Id: %d) does not exist.", scriptName, spellId); continue; } if (allRanks) { - if (sSpellMgr->GetFirstSpellInChain(spellId) != uint32(spellId)) - { - TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname:`%s` spell (spell_id:%d) is not first rank of spell.", scriptName, fields[0].GetInt32()); - continue; - } - if (!sSpellMgr->GetNextSpellInChain(spellId)) + if (!spellInfo->IsRanked()) + TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname: `%s` spell (Id: %d) has no ranks of spell.", scriptName, fields[0].GetInt32()); + + if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId)) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname:`%s` spell (spell_id:%d) has no ranks of spell.", scriptName, fields[0].GetInt32()); + TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname: `%s` spell (Id: %d) is not first rank of spell.", scriptName, fields[0].GetInt32()); continue; } while (spellInfo) @@ -4862,7 +4860,13 @@ void ObjectMgr::LoadSpellScriptNames() } } else + { + if (spellInfo->IsRanked()) + TC_LOG_ERROR(LOG_FILTER_SQL, "Scriptname: `%s` spell (Id: %d) is ranked spell. Properly not all ranks are assigned to this script.", scriptName, spellId); + _spellScriptsStore.insert(SpellScriptsContainer::value_type(spellInfo->Id, GetScriptId(scriptName))); + } + ++count; } while (result->NextRow()); diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index d1646705395..f6a3304c0ec 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -223,7 +223,7 @@ void GuildMgr::LoadGuilds() } while (result->NextRow()); - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u guild members int %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u guild members in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index e0cea01a9ca..8b92526bd62 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1175,23 +1175,88 @@ bool SpellArea::IsFitToRequirements(Player const* player, uint32 newZone, uint32 return true; } -void SpellMgr::LoadSpellRanks() +void SpellMgr::UnloadSpellInfoChains() { - uint32 oldMSTime = getMSTime(); + for (SpellChainMap::iterator itr = mSpellChains.begin(); itr != mSpellChains.end(); ++itr) + mSpellInfoMap[itr->first]->ChainEntry = NULL; + + mSpellChains.clear(); +} +void SpellMgr::LoadSpellTalentRanks() +{ // cleanup core data before reload - remove reference to ChainNode from SpellInfo - for (SpellChainMap::iterator itr = mSpellChains.begin(); itr != mSpellChains.end(); ++itr) + UnloadSpellInfoChains(); + + for (uint32 i = 0; i < sTalentStore.GetNumRows(); ++i) { - mSpellInfoMap[itr->first]->ChainEntry = NULL; + TalentEntry const* talentInfo = sTalentStore.LookupEntry(i); + if (!talentInfo) + continue; + + SpellInfo const* lastSpell = NULL; + for (uint8 rank = MAX_TALENT_RANK - 1; rank > 0; --rank) + { + if (talentInfo->RankID[rank]) + { + lastSpell = GetSpellInfo(talentInfo->RankID[rank]); + break; + } + } + + if (!lastSpell) + continue; + + SpellInfo const* firstSpell = GetSpellInfo(talentInfo->RankID[0]); + if (!firstSpell) + { + TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "SpellMgr::LoadSpellTalentRanks: First Rank Spell %u for TalentEntry %u does not exist.", talentInfo->RankID[0], i); + continue; + } + + SpellInfo const* prevSpell = NULL; + for (uint8 rank = 0; rank < MAX_TALENT_RANK; ++rank) + { + uint32 spellId = talentInfo->RankID[rank]; + if (!spellId) + break; + + SpellInfo const* currentSpell = GetSpellInfo(spellId); + if (!currentSpell) + { + TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "SpellMgr::LoadSpellTalentRanks: Spell %u (Rank: %u) for TalentEntry %u does not exist.", spellId, rank + 1, i); + break; + } + + SpellChainNode node; + node.first = firstSpell; + node.last = lastSpell; + node.rank = rank + 1; + + node.prev = prevSpell; + node.next = node.rank < MAX_TALENT_RANK ? GetSpellInfo(talentInfo->RankID[rank + 1]) : NULL; + + mSpellChains[spellId] = node; + mSpellInfoMap[spellId]->ChainEntry = &mSpellChains[spellId]; + + prevSpell = currentSpell; + } } - mSpellChains.clear(); +} + +void SpellMgr::LoadSpellRanks() +{ + // cleanup data and load spell ranks for talents from dbc + LoadSpellTalentRanks(); + + uint32 oldMSTime = getMSTime(); + // 0 1 2 QueryResult result = WorldDatabase.Query("SELECT first_spell_id, spell_id, rank from spell_ranks ORDER BY first_spell_id, rank"); if (!result) { TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 spell rank records. DB table `spell_ranks` is empty."); - return; } @@ -1268,6 +1333,10 @@ void SpellMgr::LoadSpellRanks() { ++count; int32 addedSpell = itr->first; + + if (mSpellInfoMap[addedSpell]->ChainEntry) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u (rank: %u, first: %u) listed in `spell_ranks` has already ChainEntry from dbc.", addedSpell, itr->second, lastSpell); + mSpellChains[addedSpell].first = GetSpellInfo(lastSpell); mSpellChains[addedSpell].last = GetSpellInfo(rankChain.back().first); mSpellChains[addedSpell].rank = itr->second; @@ -1285,10 +1354,10 @@ void SpellMgr::LoadSpellRanks() mSpellChains[addedSpell].next = GetSpellInfo(itr->first); } while (true); - } while (!finished); + } + while (!finished); TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u spell rank records in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); - } void SpellMgr::LoadSpellRequired() @@ -1324,14 +1393,14 @@ void SpellMgr::LoadSpellRequired() continue; } - SpellInfo const* req_spell = GetSpellInfo(spell_req); - if (!req_spell) + SpellInfo const* reqSpell = GetSpellInfo(spell_req); + if (!reqSpell) { TC_LOG_ERROR(LOG_FILTER_SQL, "req_spell %u in `spell_required` table is not found in dbcs, skipped", spell_req); continue; } - if (GetFirstSpellInChain(spell_id) == GetFirstSpellInChain(spell_req)) + if (spell->IsRankOf(reqSpell)) { TC_LOG_ERROR(LOG_FILTER_SQL, "req_spell %u and spell_id %u in `spell_required` table are ranks of the same spell, entry not needed, skipped", spell_req, spell_id); continue; @@ -1794,52 +1863,76 @@ void SpellMgr::LoadSpellProcEvents() } uint32 count = 0; - uint32 customProc = 0; + do { Field* fields = result->Fetch(); - uint32 entry = fields[0].GetUInt32(); + int32 spellId = fields[0].GetInt32(); - SpellInfo const* spell = GetSpellInfo(entry); - if (!spell) + bool allRanks = false; + if (spellId < 0) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` does not exist", entry); + allRanks = true; + spellId = -spellId; + } + + SpellInfo const* spellInfo = GetSpellInfo(spellId); + if (!spellInfo) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` does not exist", spellId); continue; } - SpellProcEventEntry spe; + if (allRanks) + { + if (!spellInfo->IsRanked()) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` with all ranks, but spell has no ranks.", spellId); + + if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId)) + { + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` is not first rank of spell.", spellId); + continue; + } + } - spe.schoolMask = fields[1].GetInt8(); - spe.spellFamilyName = fields[2].GetUInt16(); - spe.spellFamilyMask[0] = fields[3].GetUInt32(); - spe.spellFamilyMask[1] = fields[4].GetUInt32(); - spe.spellFamilyMask[2] = fields[5].GetUInt32(); - spe.procFlags = fields[6].GetUInt32(); - spe.procEx = fields[7].GetUInt32(); - spe.ppmRate = fields[8].GetFloat(); - spe.customChance = fields[9].GetFloat(); - spe.cooldown = fields[10].GetUInt32(); + SpellProcEventEntry spellProcEvent; - mSpellProcEventMap[entry] = spe; + spellProcEvent.schoolMask = fields[1].GetInt8(); + spellProcEvent.spellFamilyName = fields[2].GetUInt16(); + spellProcEvent.spellFamilyMask[0] = fields[3].GetUInt32(); + spellProcEvent.spellFamilyMask[1] = fields[4].GetUInt32(); + spellProcEvent.spellFamilyMask[2] = fields[5].GetUInt32(); + spellProcEvent.procFlags = fields[6].GetUInt32(); + spellProcEvent.procEx = fields[7].GetUInt32(); + spellProcEvent.ppmRate = fields[8].GetFloat(); + spellProcEvent.customChance = fields[9].GetFloat(); + spellProcEvent.cooldown = fields[10].GetUInt32(); - if (spell->ProcFlags == 0) + while (spellInfo) { - if (spe.procFlags == 0) + if (mSpellProcEventMap.find(spellInfo->Id) != mSpellProcEventMap.end()) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` probally not triggered spell", entry); - continue; + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` already has its first rank in table.", spellInfo->Id); + break; } - customProc++; + + if (!spellInfo->ProcFlags && !spellProcEvent.procFlags) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc_event` probally not triggered spell", spellInfo->Id); + + mSpellProcEventMap[spellInfo->Id] = spellProcEvent; + + if (allRanks) + spellInfo = spellInfo->GetNextRankSpell(); + else + break; } - ++count; - } while (result->NextRow()); - if (customProc) - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u extra and %u custom spell proc event conditions in %u ms", count, customProc, GetMSTimeDiffToNow(oldMSTime)); - else - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u extra spell proc event conditions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + ++count; + } + while (result->NextRow()); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded %u extra spell proc event conditions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } void SpellMgr::LoadSpellProcs() @@ -1879,6 +1972,9 @@ void SpellMgr::LoadSpellProcs() if (allRanks) { + if (!spellInfo->IsRanked()) + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` with all ranks, but spell has no ranks.", spellId); + if (spellInfo->GetFirstRankSpell()->Id != uint32(spellId)) { TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` is not first rank of spell.", spellId); @@ -1908,9 +2004,10 @@ void SpellMgr::LoadSpellProcs() { if (mSpellProcMap.find(spellInfo->Id) != mSpellProcMap.end()) { - TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` has duplicate entry in the table", spellInfo->Id); + TC_LOG_ERROR(LOG_FILTER_SQL, "Spell %u listed in `spell_proc` already has its first rank in table.", spellInfo->Id); break; } + SpellProcEntry procEntry = SpellProcEntry(baseProcEntry); // take defaults from dbcs @@ -2676,12 +2773,12 @@ void SpellMgr::LoadSpellInfoStore() if (SpellEntry const* spellEntry = sSpellStore.LookupEntry(i)) mSpellInfoMap[i] = new SpellInfo(spellEntry, effectsBySpell[i].effects); - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded spell info store in %u ms", GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded SpellInfo store in %u ms", GetMSTimeDiffToNow(oldMSTime)); } void SpellMgr::UnloadSpellInfoStore() { - for (uint32 i = 0; i < mSpellInfoMap.size(); ++i) + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { if (mSpellInfoMap[i]) delete mSpellInfoMap[i]; @@ -2691,14 +2788,14 @@ void SpellMgr::UnloadSpellInfoStore() void SpellMgr::UnloadSpellInfoImplicitTargetConditionLists() { - for (uint32 i = 0; i < mSpellInfoMap.size(); ++i) + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { if (mSpellInfoMap[i]) mSpellInfoMap[i]->_UnloadImplicitTargetConditionLists(); } } -void SpellMgr::LoadSpellCustomAttr() +void SpellMgr::LoadSpellInfoCustomAttributes() { uint32 oldMSTime = getMSTime(); @@ -2780,7 +2877,7 @@ void SpellMgr::LoadSpellCustomAttr() if (enchant->type[s] != ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL) continue; - SpellInfo* procInfo = (SpellInfo*)GetSpellInfo(enchant->spellid[s]); + SpellInfo* procInfo = _GetSpellInfo(enchant->spellid[s]); if (!procInfo) continue; @@ -2992,7 +3089,7 @@ void SpellMgr::LoadSpellCustomAttr() CreatureAI::FillAISpellInfo(); - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded spell custom attributes in %u ms", GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded SpellInfo custom attributes in %u ms", GetMSTimeDiffToNow(oldMSTime)); } void SpellMgr::LoadSpellInfoCorrections() @@ -3000,7 +3097,7 @@ void SpellMgr::LoadSpellInfoCorrections() uint32 oldMSTime = getMSTime(); SpellInfo* spellInfo = NULL; - for (uint32 i = 0; i < mSpellInfoMap.size(); ++i) + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { spellInfo = (SpellInfo*)mSpellInfoMap[i]; if (!spellInfo) @@ -3069,7 +3166,7 @@ void SpellMgr::LoadSpellInfoCorrections() case 42821: // Headless Horseman - Wisp Flight Missile spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100 yards break; - case 36350: //They Must Burn Bomb Aura (self) + case 36350: // They Must Burn Bomb Aura (self) spellInfo->Effects[EFFECT_0].TriggerSpell = 36325; // They Must Burn Bomb Drop (DND) break; case 49838: // Stop Time @@ -3202,13 +3299,13 @@ void SpellMgr::LoadSpellInfoCorrections() case 47204: case 47205: // add corruption to affected spells - spellInfo->Effects[1].SpellClassMask[0] |= 2; + spellInfo->Effects[EFFECT_1].SpellClassMask[0] |= 2; break; case 51852: // The Eye of Acherus (no spawn in phase 2 in db) - spellInfo->Effects[0].MiscValue |= 1; + spellInfo->Effects[EFFECT_0].MiscValue |= 1; break; case 51912: // Crafty's Ultra-Advanced Proto-Typical Shortening Blaster - spellInfo->Effects[0].Amplitude = 3000; + spellInfo->Effects[EFFECT_0].Amplitude = 3000; break; case 29809: // Desecration Arm - 36 instead of 37 - typo? :/ spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_7_YARDS); @@ -3239,17 +3336,17 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_INCREASE_ENERGY_PERCENT; break; case 30421: // Nether Portal - Perseverence - spellInfo->Effects[2].BasePoints += 30000; + spellInfo->Effects[EFFECT_2].BasePoints += 30000; break; case 51735: // Ebon Plague case 51734: case 51726: spellInfo->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; spellInfo->SpellFamilyFlags[2] = 0x10; - spellInfo->Effects[1].ApplyAuraName = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN; + spellInfo->Effects[EFFECT_1].ApplyAuraName = SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN; break; case 41913: // Parasitic Shadowfiend Passive - spellInfo->Effects[0].ApplyAuraName = SPELL_AURA_DUMMY; // proc debuff, and summon infinite fiends + spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_DUMMY; // proc debuff, and summon infinite fiends break; case 27892: // To Anchor 1 case 27928: // To Anchor 1 @@ -3283,8 +3380,8 @@ void SpellMgr::LoadSpellInfoCorrections() case 5176: // Wrath case 2912: // Starfire case 78674: // Starsurge - spellInfo->Effects[1].Effect = SPELL_EFFECT_DUMMY; - spellInfo->Effects[1].TargetA = TARGET_UNIT_CASTER; + spellInfo->Effects[EFFECT_1].Effect = SPELL_EFFECT_DUMMY; + spellInfo->Effects[EFFECT_1].TargetA = TARGET_UNIT_CASTER; break; case 70728: // Exploit Weakness (needs target selection script) case 70840: // Devious Minds (needs target selection script) @@ -3322,7 +3419,7 @@ void SpellMgr::LoadSpellInfoCorrections() break; case 64745: // Item - Death Knight T8 Tank 4P Bonus case 64936: // Item - Warrior T8 Protection 4P Bonus - spellInfo->Effects[0].BasePoints = 100; // 100% chance of procc'ing, not -10% (chance calculated in PrepareTriggersExecutedOnHit) + spellInfo->Effects[EFFECT_0].BasePoints = 100; // 100% chance of procc'ing, not -10% (chance calculated in PrepareTriggersExecutedOnHit) break; case 59414: // Pulsing Shockwave Aura (Loken) // this flag breaks movement, remove it @@ -3332,7 +3429,7 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AuraInterruptFlags = AURA_INTERRUPT_FLAG_HITBYSPELL | AURA_INTERRUPT_FLAG_TAKE_DAMAGE; break; case 70650: // Death Knight T10 Tank 2P Bonus - spellInfo->Effects[0].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER; + spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_ADD_PCT_MODIFIER; break; case 71838: // Drain Life - Bryntroll Normal case 71839: // Drain Life - Bryntroll Heroic @@ -3437,10 +3534,6 @@ void SpellMgr::LoadSpellInfoCorrections() case 70861: // Sindragosa's Lair Teleport spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DB); break; - case 69055: // Saber Lash (Lord Marrowgar) - case 70814: // Saber Lash (Lord Marrowgar) - spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_8_YARDS); // 8yd - break; case 69075: // Bone Storm (Lord Marrowgar) case 70834: // Bone Storm (Lord Marrowgar) case 70835: // Bone Storm (Lord Marrowgar) diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 69eedf25186..160ae74343c 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -694,10 +694,15 @@ class SpellMgr SpellInfo const* GetSpellInfo(uint32 spellId) const { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : NULL; } uint32 GetSpellInfoStoreSize() const { return mSpellInfoMap.size(); } + private: + SpellInfo* _GetSpellInfo(uint32 spellId) { return spellId < GetSpellInfoStoreSize() ? mSpellInfoMap[spellId] : NULL; } + // Modifiers public: // Loading data at server startup + void UnloadSpellInfoChains(); + void LoadSpellTalentRanks(); void LoadSpellRanks(); void LoadSpellRequired(); void LoadSpellLearnSkills(); @@ -720,7 +725,7 @@ class SpellMgr void LoadSpellInfoStore(); void UnloadSpellInfoStore(); void UnloadSpellInfoImplicitTargetConditionLists(); - void LoadSpellCustomAttr(); + void LoadSpellInfoCustomAttributes(); void LoadSpellInfoCorrections(); private: diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index c9b90e2bf40..622ac03eac8 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1357,8 +1357,8 @@ void World::SetInitialWorldSettings() TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading SkillLineAbilityMultiMap Data..."); sSpellMgr->LoadSkillLineAbilityMap(); - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading spell custom attributes..."); - sSpellMgr->LoadSpellCustomAttr(); + TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading SpellInfo custom attributes..."); + sSpellMgr->LoadSpellInfoCustomAttributes(); TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, "Loading GameObject models..."); LoadGameObjectModelList(); diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index ddf57731864..89ea572d74b 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -116,8 +116,7 @@ public: else targetPlayer->learnSpell(spell, false); - uint32 firstSpell = sSpellMgr->GetFirstSpellInChain(spell); - if (GetTalentSpellCost(firstSpell)) + if (GetTalentSpellCost(spellInfo->GetFirstRankSpell()->Id)) targetPlayer->SendTalentsInfoData(false); return true; @@ -178,8 +177,7 @@ public: continue; // skip spells with first rank learned as talent (and all talents then also) - uint32 firstRank = sSpellMgr->GetFirstSpellInChain(spellInfo->Id); - if (GetTalentSpellCost(firstRank) > 0) + if (GetTalentSpellCost(spellInfo->GetFirstRankSpell()->Id) > 0) continue; // skip broken spells @@ -474,7 +472,7 @@ public: } if (allRanks) - spellId = sSpellMgr->GetFirstSpellInChain (spellId); + spellId = sSpellMgr->GetFirstSpellInChain(spellId); if (target->HasSpell(spellId)) target->removeSpell(spellId, false, !allRanks); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index e0047a2592f..3c18d04c9bf 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1586,6 +1586,7 @@ public: // Guild data print variables defined so that they exist, but are not necessarily used uint32 guildId = 0; + uint8 guildRankId = 0; std::string guildName; std::string guildRank; std::string note; @@ -1752,8 +1753,9 @@ public: guildId = fields[0].GetUInt32(); guildName = fields[1].GetString(); guildRank = fields[2].GetString(); - note = fields[3].GetString(); - officeNote = fields[4].GetString(); + guildRankId = fields[3].GetUInt8(); + note = fields[4].GetString(); + officeNote = fields[5].GetString(); } } } @@ -1762,7 +1764,7 @@ public: // Output I. LANG_PINFO_PLAYER handler->PSendSysMessage(LANG_PINFO_PLAYER, target ? "" : handler->GetTrinityString(LANG_OFFLINE), nameLink.c_str(), lowguid); - // Output II. LANG_PINFO_GM_ACTIVE + // Output II. LANG_PINFO_GM_ACTIVE if character is gamemaster if (target && target->IsGameMaster()) handler->PSendSysMessage(LANG_PINFO_GM_ACTIVE); @@ -1829,7 +1831,7 @@ public: if (!guildName.empty()) { handler->PSendSysMessage(LANG_PINFO_CHR_GUILD, guildName.c_str(), guildId); - handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank.c_str()); + handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_RANK, guildRank.c_str(), uint32(guildRankId)); if (!note.empty()) handler->PSendSysMessage(LANG_PINFO_CHR_GUILD_NOTE, note.c_str()); if (!officeNote.empty()) diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 23e9d09eb1d..e20334156df 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -105,7 +105,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_BOTH); - PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gm.pnote, gm.offnote " + PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gr.rname, gr.rid, gm.pnote, gm.offnote " "FROM guild g JOIN guild_member gm ON g.guildid = gm.guildid " "JOIN guild_rank gr ON g.guildid = gr.guildid AND gm.rank = gr.rid WHERE gm.guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_CHARACTER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC); |