aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2012_08_29_00_world_blood_furnace.sql290
-rwxr-xr-xsrc/server/authserver/Main.cpp6
-rwxr-xr-xsrc/server/game/Entities/Creature/TemporarySummon.h2
-rwxr-xr-xsrc/server/game/Entities/Totem/Totem.cpp14
-rwxr-xr-xsrc/server/game/Entities/Totem/Totem.h6
-rwxr-xr-xsrc/server/game/Handlers/SpellHandler.cpp4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h4
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp61
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp19
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp224
-rwxr-xr-xsrc/server/worldserver/Main.cpp14
11 files changed, 580 insertions, 64 deletions
diff --git a/sql/updates/world/2012_08_29_00_world_blood_furnace.sql b/sql/updates/world/2012_08_29_00_world_blood_furnace.sql
new file mode 100644
index 00000000000..85b493da202
--- /dev/null
+++ b/sql/updates/world/2012_08_29_00_world_blood_furnace.sql
@@ -0,0 +1,290 @@
+SET @GUID := 138106; -- 149
+
+-- Delete old data before inserting new data. This could make trouble later on.
+DELETE `creature_addon` FROM `creature_addon` INNER JOIN `creature` ON `creature`.`guid`=`creature_addon`.`guid` WHERE `map`=542;
+DELETE `creature_formations` FROM `creature_formations` INNER JOIN `creature` ON `creature`.`guid`=`creature_formations`.`memberGUID` OR `creature`.`guid`=`creature_formations`.`leaderGUID` WHERE `map`=542;
+DELETE `linked_respawn` FROM `linked_respawn` INNER JOIN `creature` ON `creature`.`guid`=`linked_respawn`.`linkedGuid` WHERE `map`=542;
+
+
+-- CREATURE_TEMPLATE
+-- Trash
+UPDATE `creature_template` SET `speed_walk`=1.1 WHERE `entry`=17624;
+UPDATE `creature_template` SET `AIName`='' WHERE `entry`=17398;
+-- Broggok
+UPDATE `creature_template` SET `unit_flags`=`unit_flags`|256|512|2 WHERE `entry` IN(17380,18601);
+
+-- CREATURE
+DELETE FROM `creature` WHERE `guid` BETWEEN @GUID AND @GUID+148 OR `map`=542;
+INSERT INTO `creature`(`guid`,`id`,`map`,`spawnMask`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`curhealth`,`curmana`,`MovementType`) VALUES
+(@GUID+88,17414,542,3,317.15,189.009,10.0509,1.88412,7200,10472,5875,0),
+(@GUID+92,17414,542,3,436.311,198.522,11.4389,1.34468,7200,10472,5875,0),
+(@GUID+91,17414,542,3,345.706,198.519,11.139,1.6879,7200,10472,5875,0),
+(@GUID+96,17398,542,3,379.741,192.233,9.59787,3.36158,7200,7210,0,0),
+(@GUID+103,17414,542,3,448.428,190.764,9.6054,1.01795,7200,10472,5875,0),
+(@GUID+97,17395,542,3,373.636,184.777,9.59848,1.15697,7200,10472,17625,0),
+(@GUID+95,17371,542,3,371.98,194.243,9.59956,5.36434,7200,10472,5875,0),
+(@GUID+94,17491,542,3,480.502,180.017,9.61526,3.42991,7200,7479,0,0),
+(@GUID+26,17398,542,3,412.728,85.7323,9.65141,0.141552,7200,6963,0,0),
+(@GUID+125,17477,542,3,485.76,8.63405,9.54898,1.43024,7200,4126,9944,0),
+(@GUID+68,17371,542,3,327.262,30.5611,9.61686,4.68833,7200,10472,5875,2),
+(@GUID+124,17477,542,3,490.168,11.6964,9.54898,1.13336,7200,4126,9944,0),
+(@GUID+123,17477,542,3,489.518,5.51373,9.54353,1.96038,7200,4126,9944,0),
+(@GUID+122,17371,542,3,494.46,7.58925,9.54249,2.87616,7200,10472,5875,0),
+(@GUID+112,17414,542,3,479.898,98.2961,9.62183,6.09707,7200,10472,5875,0),
+(@GUID+120,17491,542,3,433.6,-18.2301,9.55216,0.450845,7200,7479,0,0),
+(@GUID+126,17477,542,3,484.202,13.9732,9.5505,6.25258,7200,4126,9944,0),
+(@GUID+128,17371,542,3,465.905,-19.9126,9.55319,5.19624,7200,10472,5875,2),
+(@GUID+129,17371,542,3,476.506,-63.3028,9.54636,0,7200,10472,5875,2),
+(@GUID+131,17491,542,3,495.566,-43.8895,9.5591,2.9343,7200,7479,0,0),
+(@GUID+46,17477,542,3,-10.8822,-85.2033,-41.3341,2.09342,7200,4126,9944,0),
+(@GUID+55,17397,542,3,224.587,-96.0037,9.61879,0.647748,7200,11965,2486,0),
+(@GUID+54,17397,542,3,231.512,-91.5716,9.62435,3.65189,7200,11965,2486,0),
+(@GUID+56,17477,542,3,227.94,-93.8952,9.61879,0.561355,7200,4126,9944,0),
+(@GUID+53,17491,542,3,234.022,-106.406,9.61037,1.88867,7200,7479,0,0),
+(@GUID+52,17477,542,3,28.2572,-85.4531,-41.0542,4.63284,7200,4126,9944,0),
+(@GUID+59,17477,542,3,241.827,-68.3783,9.61987,1.82585,7200,4126,9944,0),
+(@GUID+58,17397,542,3,242.883,-72.4289,9.61514,1.81799,7200,11965,2486,0),
+(@GUID+57,17397,542,3,240.674,-64.4904,9.62484,5.05383,7200,11965,2486,0),
+(@GUID+14,21174,542,3,320.912,-83.0625,-133.307,3.00197,7200,8338000,0,0),
+(@GUID+136,17477,542,3,412.944,-83.971,9.61695,5.1156,7200,4126,9944,0),
+(@GUID+137,17477,542,3,420.081,-88.5245,9.62061,0.206074,7200,4126,9944,0),
+(@GUID+139,17491,542,3,404.193,-62.5071,9.61827,5.54913,7200,7479,0,0),
+(@GUID+134,17477,542,3,432.656,-78.7667,9.62296,1.5821,7200,4126,9944,0),
+(@GUID+140,17477,542,3,419.961,-76.9838,9.62318,5.67087,7200,4126,9944,0),
+(@GUID+135,17477,542,3,427.911,-69.9011,9.61668,4.99622,7200,4126,9944,0),
+(@GUID+142,18894,542,3,355.194,-175.571,-25.5497,0.0701911,7200,14958,0,0),
+(@GUID+144,18894,542,3,325.278,-191.535,-25.5078,1.49412,7200,14958,0,0),
+(@GUID+145,17371,542,3,312.396,-174.925,-25.5082,6.21829,7200,10472,5875,0),
+(@GUID+146,18894,542,3,312.116,-179.382,-25.5071,6.20258,7200,14958,0,0),
+(@GUID+147,18894,542,3,313.392,-170.618,-25.5086,6.20651,7200,14958,0,0),
+(@GUID+78,17371,542,3,331.268,69.7599,9.61402,1.77024,7200,10472,5875,0),
+(@GUID+70,17397,542,3,313.949,13.7401,9.61652,4.38997,7200,11965,2486,0),
+(@GUID+69,17395,542,3,311.261,7.92634,9.62195,0.656179,7200,10472,17625,0),
+(@GUID+71,17397,542,3,317.184,8.72084,9.6192,2.67896,7200,11965,2486,0),
+(@GUID+75,17491,542,3,314.564,-7.67602,9.6169,2.30511,7200,7479,0,0),
+(@GUID+77,17370,542,3,331.076,28.8939,9.62118,4.2576,7200,14958,0,0),
+(@GUID+73,17395,542,3,338.84,8.10661,9.61679,5.05086,7200,10472,17625,0),
+(@GUID+72,17395,542,3,338.242,1.09978,9.61664,1.01391,7200,10472,17625,0),
+(@GUID+25,17398,542,3,413.285,81.8238,9.65038,0.154642,7200,6963,0,0),
+(@GUID+24,17398,542,3,500.076,84.7778,9.65474,3.08941,7200,6963,0,0),
+(@GUID+23,17398,542,3,502.724,82.8731,9.65935,3.08941,7200,6963,0,0),
+(@GUID+22,17398,542,3,498.962,83.0695,9.6524,3.08941,7200,6963,0,0),
+(@GUID+21,17398,542,3,498.393,86.641,9.65219,3.19309,7200,6963,0,0),
+(@GUID+104,17414,542,3,327.172,188.393,9.61882,1.09492,7200,10472,5875,0),
+(@GUID+27,17398,542,3,409.226,83.2983,9.65786,0.141552,7200,6963,0,0),
+(@GUID+28,17398,542,3,412.081,112.626,9.65613,6.1865,7200,6963,0,0),
+(@GUID+29,17398,542,3,412.462,116.555,9.65317,6.1865,7200,6963,0,0),
+(@GUID+30,17398,542,3,411.735,114.446,9.65571,0.00803471,7200,6963,0,0),
+(@GUID+31,17398,542,3,409.699,113.048,9.65731,0.0185067,7200,6963,0,0),
+(@GUID+32,17398,542,3,407.17,115.172,9.66061,0.0185067,7200,6963,0,0),
+(@GUID+33,17398,542,3,495.677,116.285,9.64388,3.14963,7200,6963,0,0),
+(@GUID+34,17398,542,3,495.696,113.877,9.64425,3.14963,7200,6963,0,0),
+(@GUID+35,17398,542,3,499.774,112.283,9.65334,3.14963,7200,6963,0,0),
+(@GUID+36,17398,542,3,503.042,114.321,9.65788,3.14963,7200,6963,0,0),
+(@GUID+37,17398,542,3,503.024,116.589,9.65788,3.14963,7200,6963,0,0),
+(@GUID+38,17398,542,3,499.499,118.085,9.65347,3.14963,7200,6963,0,0),
+(@GUID+111,17414,542,3,482.454,103.335,9.61156,5.27398,7200,10472,5875,0),
+(@GUID+110,17414,542,3,458.068,92.7015,9.61519,1.89206,7200,10472,5875,0),
+(@GUID+109,17414,542,3,452.317,94.5807,9.61519,0.545102,7200,10843,6015,0),
+(@GUID+108,17395,542,3,457.121,99.2828,9.61496,4.44777,7200,10472,17625,0),
+(@GUID+102,17370,542,3,466.171,176.663,9.6201,2.8927,7200,14958,0,2),
+(@GUID+98,17371,542,3,412.814,195.493,9.60144,3.55951,7200,10472,5875,0),
+(@GUID+100,17395,542,3,403.447,190.68,9.59739,0.0770466,7200,10472,17625,0),
+(@GUID+99,17398,542,3,411.319,185.388,9.60154,2.28952,7200,6963,0,0),
+(@GUID+101,17370,542,3,466.657,179.674,9.61915,2.88877,7200,14958,0,2),
+(@GUID+76,17370,542,3,323.216,28.6452,9.62206,4.92205,7200,14958,0,0),
+(@GUID+74,17397,542,3,344.219,5.00403,9.62297,3.2955,7200,11965,2486,0),
+(@GUID+67,17370,542,3,286.75,-7.12364,9.33158,3.50552,7200,14958,0,0),
+(@GUID+65,17370,542,3,258.511,-30.4009,6.95261,4.07258,7200,14958,0,0),
+(@GUID+63,17371,542,3,246.377,-85.311,9.61661,3.04947,7200,10472,5875,2),
+(@GUID+62,17477,542,3,226.371,-71.3008,9.61766,2.01394,7200,4126,9944,0),
+(@GUID+60,17397,542,3,224.497,-68.0896,9.62108,5.19786,7200,11965,2486,0),
+(@GUID+61,17397,542,3,227.979,-74.6894,9.61909,1.96987,7200,11965,2486,0),
+(@GUID+106,17626,542,3,458.614,116.989,9.61455,3.07559,7200,14958,0,0),
+(@GUID+43,17491,542,3,182.461,-68.9882,9.62108,3.98337,7200,7479,0,0),
+(@GUID+42,17491,542,3,107.083,-96.6171,-14.2289,0.930522,7200,7479,0,0),
+(@GUID+51,17397,542,3,27.6779,-90.5785,-40.7088,1.48496,7200,11965,2486,0),
+(@GUID+82,17414,542,3,304.249,103.356,9.62076,5.61477,7200,10843,6015,0),
+(@GUID+83,17371,542,3,308.919,100.519,9.62138,2.61455,7200,10472,5875,0),
+(@GUID+86,17626,542,3,356.154,108.175,9.62332,4.06125,7200,14958,0,0),
+(@GUID+85,17371,542,3,343.419,102.651,9.6201,5.16709,7200,10472,5875,0),
+(@GUID+93,17414,542,3,346.912,193.875,9.60419,1.74602,7200,10472,5875,0),
+(@GUID+115,17414,542,3,476.291,65.9018,9.60985,3.98357,7200,10472,5875,0),
+(@GUID+114,17414,542,3,469.409,65.9985,9.61271,5.036,7200,10843,6015,0),
+(@GUID+116,17371,542,3,472.66,59.4292,9.6097,1.58025,7200,10472,5875,0),
+(@GUID+105,17624,542,3,456.429,118.903,9.61496,3.16198,7200,16023,0,0),
+(@GUID+107,17626,542,3,458.704,120.842,9.61456,3.1619,7200,14958,0,2),
+(@GUID+127,18894,542,3,462.905,-19.9126,9.55215,5.18053,7200,14958,0,0),
+(@GUID+41,17377,542,3,325.862,-87.2087,-24.6512,5.87314,43200,34830,6156,0),
+(@GUID+143,18894,542,3,333.631,-192.252,-25.5027,1.51768,7200,14958,0,0),
+(@GUID+148,17371,542,3,329.584,-189.111,-25.5067,1.50511,7200,10472,5875,0),
+(@GUID+132,17371,542,3,424.675,-83.9057,9.6166,0.059993,7200,10472,5875,0),
+(@GUID+130,18894,542,3,475.417,-66.3289,9.54527,0,7200,14958,0,0),
+(@GUID+40,18894,542,3,455.566,-79.108,9.61164,0.09548,7200,14958,0,0),
+(@GUID+39,18894,542,3,455.793,-89.9999,9.60743,0.09548,7200,14958,0,0),
+(@GUID+121,17371,542,3,487.933,17.2848,9.55353,4.54905,7200,10472,5875,0),
+(@GUID+119,17414,542,3,445.422,63.6577,9.61209,3.54218,7200,10472,5875,0),
+(@GUID+118,17371,542,3,442.237,56.965,9.61104,1.84965,7200,10472,5875,0),
+(@GUID+117,17371,542,3,437.232,64.7644,9.60927,5.1656,7200,10472,5875,0),
+(@GUID+113,17414,542,3,483.48,91.8948,9.62303,1.14828,7200,10472,5875,0),
+(@GUID+20,17398,542,3,437.158,201.984,11.6815,4.639,7200,6963,0,0),
+(@GUID+19,17398,542,3,345.078,202.309,11.6826,4.90708,7200,6963,0,0),
+(@GUID+18,17398,542,3,314.478,195.642,11.6815,5.01966,7200,6963,0,0),
+(@GUID+17,17381,542,3,327.17,137.816,9.61546,4.72121,43200,38722,0,0),
+(@GUID+90,17370,542,3,372.443,187.252,9.59815,3.08144,7200,14958,0,2),
+(@GUID+87,17491,542,3,301.987,172.031,9.61921,0.398146,7200,7479,0,0),
+(@GUID+89,17370,542,3,372.443,191.252,9.59815,3.3214,7200,14958,0,2),
+(@GUID+80,17626,542,3,343.075,57.8455,9.6156,0,7200,14958,0,0),
+(@GUID+81,17624,542,3,327.255,54.8455,9.61645,0,7200,16023,0,2),
+(@GUID+15,17414,542,3,352.426,85.7746,9.6222,6.27838,7200,10472,5875,0),
+(@GUID+84,17414,542,3,346.54,96.449,9.6201,2.21792,7200,10472,5875,0),
+(@GUID+16,17414,542,3,302.425,61.1739,9.61642,3.14962,7200,10472,5875,0),
+(@GUID+79,17414,542,3,328.075,76.9842,9.61402,5.19851,7200,10472,5875,0),
+(@GUID+133,17477,542,3,433.797,-90.9604,9.62448,1.93317,7200,4126,9944,0),
+(@GUID+141,18894,542,3,355.299,-163.451,-25.5338,6.16881,7200,14958,0,0),
+(@GUID+138,17477,542,3,423.255,-96.3954,9.61869,1.21688,7200,4126,9944,0),
+(@GUID+66,17626,542,3,279.674,1.44232,8.11077,3.8723,7200,14958,0,0),
+(@GUID+64,17626,542,3,250.468,-24.7817,6.95538,4.23202,7200,14958,0,0),
+(@GUID+50,17397,542,3,29.672,-80.5135,-40.787,4.36738,7200,11965,2486,0),
+(@GUID+44,17397,542,3,-12.9018,-81.3588,-41.3358,5.36252,7200,11965,2486,0),
+(@GUID+47,17397,542,3,6.99569,-89.3037,-41.3305,1.28394,7200,11965,2486,0),
+(@GUID+45,17397,542,3,-9.04048,-88.5931,-41.3341,1.99081,7200,11965,2486,0),
+(@GUID+49,17477,542,3,8.90866,-85.0585,-41.3294,1.02944,7200,4126,9944,0),
+(@GUID+48,17397,542,3,10.3856,-81.342,-41.3294,4.24882,7200,11965,2486,0),
+(@GUID+9,17380,542,3,455.336,-1.82919,9.6299,1.43117,43200,30960,18468,0),
+(@GUID+8,17370,542,3,7.83757,-54.6224,-41.258,1.62316,7200,14958,0,0),
+(@GUID+7,17370,542,3,-4.06964,-56.7616,-41.258,1.41372,7200,14958,0,0),
+(@GUID+6,17370,542,3,49.3209,-93.3478,-40.1855,2.86234,7200,14958,0,0),
+(@GUID+5,17370,542,3,49.2232,-75.6242,-40.1856,2.98451,7200,14958,0,0),
+(@GUID+4,17256,542,3,369.461,-118.757,-137.368,2.54818,604800,152964,1016100,0),
+(@GUID+3,17256,542,3,369.15,-55.5658,-137.368,3.71755,604800,152964,1016100,0),
+(@GUID+2,17256,542,3,307.784,-31.8502,-137.368,4.95674,604800,152964,1016100,0),
+(@GUID+1,17256,542,3,274.133,-87.1647,-137.368,0.017453,604800,152964,1016100,0),
+(@GUID+0,17256,542,3,308.203,-141.769,-137.368,1.36136,604800,152964,1016100,0);
+
+-- GAMEOBJECT_TEMPLATE
+UPDATE `gameobject_template` SET `ScriptName`='go_broggok_lever' WHERE `entry`=181982;
+
+-- CREATURE_MODEL_INFO
+-- Old modelid_other_gender 12471. Need to do this because modelid in creature uses creature_model_info, too... so it would still bug.
+UPDATE `creature_model_info` SET `modelid_other_gender`=0 WHERE `modelid`=16332;
+
+-- CREATURE_ADDON
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @GUID AND @GUID+144;
+INSERT INTO `creature_addon`(`guid`,`path_id`,`bytes2`) VALUES
+(@GUID+0,0,4097),
+(@GUID+1,0,4097),
+(@GUID+2,0,4097),
+(@GUID+3,0,4097),
+(@GUID+4,0,4097),
+(@GUID+15,856820,0),
+(@GUID+63,(@GUID+63)*10,0),
+(@GUID+68,(@GUID+68)*10,0),
+(@GUID+81,(@GUID+81)*10,0),
+(@GUID+89,(@GUID+89)*10,0),
+(@GUID+90,(@GUID+90)*10,0),
+(@GUID+101,(@GUID+101)*10,0),
+(@GUID+102,(@GUID+102)*10,0),
+(@GUID+107,(@GUID+107)*10,0),
+(@GUID+128,(@GUID+128)*10,0),
+(@GUID+129,(@GUID+129)*10,0);
+
+-- CREATURE_FORMATIONS
+DELETE FROM `creature_formations` WHERE `leaderGUID` BETWEEN @GUID AND @GUID+148 OR `memberGUID` BETWEEN @GUID AND @GUID+148;
+INSERT INTO `creature_formations`(`leaderGUID`,`memberGUID`,`dist`,`angle`,`groupAI`) VALUES
+(@GUID+81,@GUID+81,0,0,2),
+(@GUID+81,@GUID+80,3,290,2),
+(@GUID+107,@GUID+107,0,0,2),
+(@GUID+107,@GUID+105,4,220,2),
+(@GUID+107,@GUID+106,3,285,2),
+(@GUID+129,@GUID+129,0,0,2),
+(@GUID+129,@GUID+130,3,90,2),
+(@GUID+143,@GUID+143,0,0,2),
+(@GUID+143,@GUID+148,3,120,2),
+(@GUID+143,@GUID+144,3,240,2),
+(@GUID+146,@GUID+146,0,0,2),
+(@GUID+146,@GUID+145,3,120,2),
+(@GUID+146,@GUID+147,3,240,2),
+(@GUID+128,@GUID+128,0,0,2),
+(@GUID+128,@GUID+127,4,45,2);
+
+-- WAYPOINT_DATA
+DELETE FROM `waypoint_data` WHERE `id` BETWEEN @GUID*10 AND (@GUID+148)*10;
+INSERT INTO `waypoint_data`(`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES
+((@GUID+63 )*10,1,247.229,-66.59,9.62258),
+((@GUID+63 )*10,2,246.245,-85.1909,9.61548),
+((@GUID+63 )*10,3,219.765,-84.577,9.58612),
+((@GUID+63 )*10,4,246.377,-85.311,9.61661),
+((@GUID+68 )*10,1,328.417,-4.58593,9.61603),
+((@GUID+68 )*10,2,327.28,24.0565,9.61603),
+((@GUID+81 )*10,1,327.255,54.8455,9.61346),
+((@GUID+81 )*10,18,322.72,55.3961,9.6137),
+((@GUID+81 )*10,17,317.328,58.7127,9.6137),
+((@GUID+81 )*10,16,315.042,62.5956,9.61509),
+((@GUID+81 )*10,15,312.513,72.6059,9.6179),
+((@GUID+81 )*10,14,311.755,83.2112,9.6179),
+((@GUID+81 )*10,13,312.519,89.5342,9.6179),
+((@GUID+81 )*10,12,313.959,93.8532,9.61756),
+((@GUID+81 )*10,11,317.588,98.5635,9.61631),
+((@GUID+81 )*10,10,322.28,101.14,9.61572),
+((@GUID+81 )*10,9,328.8,102.991,9.61528),
+((@GUID+81 )*10,8,334.164,102.162,9.61808),
+((@GUID+81 )*10,7,339.203,99.0606,9.61948),
+((@GUID+81 )*10,6,342.812,94.2829,9.61948),
+((@GUID+81 )*10,5,345.611,85.8321,9.61948),
+((@GUID+81 )*10,4,344.882,74.8707,9.61869),
+((@GUID+81 )*10,3,343.069,64.3213,9.61614),
+((@GUID+81 )*10,2,340.959,59.932,9.61435),
+((@GUID+89 )*10,1,372.443,191.252,9.59815),
+((@GUID+89 )*10,2,329.021,185.273,9.61524),
+((@GUID+90 )*10,1,372.443,187.252,9.59815),
+((@GUID+90 )*10,2,329.021,181.273,9.61524),
+((@GUID+101)*10,1,416.026,191.714,9.59825),
+((@GUID+101)*10,2,466.657,179.674,9.61915),
+((@GUID+102)*10,1,415.314,187.668,9.59825),
+((@GUID+102)*10,2,466.171,176.663,9.6201),
+((@GUID+107)*10,18,464.47,117.962,9.62),
+((@GUID+107)*10,17,471.688,113.794,9.62),
+((@GUID+107)*10,16,477.046,107.409,9.62),
+((@GUID+107)*10,15,479.897,99.5768,9.62),
+((@GUID+107)*10,14,479.897,91.2417,9.62),
+((@GUID+107)*10,13,477.046,83.4093,9.62),
+((@GUID+107)*10,12,471.688,77.0242,9.62),
+((@GUID+107)*10,11,464.47,72.8567,9.62),
+((@GUID+107)*10,10,456.261,71.4093,9.62),
+((@GUID+107)*10,9,448.053,72.8567,9.62),
+((@GUID+107)*10,8,440.834,77.0242,9.62),
+((@GUID+107)*10,7,435.477,83.4093,9.62),
+((@GUID+107)*10,6,432.626,91.2417,9.62),
+((@GUID+107)*10,5,432.626,99.5768,9.62),
+((@GUID+107)*10,4,435.477,107.409,9.62),
+((@GUID+107)*10,3,440.834,113.794,9.62),
+((@GUID+107)*10,2,448.053,117.962,9.62),
+((@GUID+107)*10,1,456.261,119.409,9.62),
+((@GUID+128)*10,1,475.83,-58.5353,9.5419),
+((@GUID+128)*10,2,474.83,-54.6723,9.5419),
+((@GUID+128)*10,3,465.9,-19.9126,9.55319),
+((@GUID+128)*10,4,466.89,-23.7756,9.55319),
+((@GUID+129)*10,1,482.43,-67.1466,9.56),
+((@GUID+129)*10,2,486.942,-69.7513,9.56),
+((@GUID+129)*10,3,490.29,-73.742,9.56),
+((@GUID+129)*10,4,492.072,-78.6373,9.56),
+((@GUID+129)*10,5,492.072,-83.8467,9.56),
+((@GUID+129)*10,6,490.29,-88.742,9.56),
+((@GUID+129)*10,7,486.942,-92.7327,9.56),
+((@GUID+129)*10,8,482.43,-95.3374,9.56),
+((@GUID+129)*10,9,477.3,-96.242,9.56),
+((@GUID+129)*10,10,472.17,-95.3374,9.56),
+((@GUID+129)*10,11,467.658,-92.7327,9.56),
+((@GUID+129)*10,12,464.31,-88.742,9.56),
+((@GUID+129)*10,13,462.528,-83.8467,9.56),
+((@GUID+129)*10,14,462.528,-78.6373,9.56),
+((@GUID+129)*10,15,464.31,-73.742,9.56),
+((@GUID+129)*10,16,467.658,-69.7513,9.56),
+((@GUID+129)*10,17,472.17,-67.1466,9.56),
+((@GUID+129)*10,18,477.3,-66.242,9.56);
+
+-- Revert a previous bad fix
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=17398;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-85712,-85717,-85719,-85724) AND `source_type`=0;
+DELETE FROM `gameobject_scripts` WHERE `id`=150441;
diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp
index b938706a0be..ed0fa9ab06a 100755
--- a/src/server/authserver/Main.cpp
+++ b/src/server/authserver/Main.cpp
@@ -80,7 +80,7 @@ extern int main(int argc, char **argv)
{
if (++c >= argc)
{
- sLog->outError(LOG_FILTER_AUTHSERVER, "Runtime-Error: -c option requires an input argument");
+ printf("Runtime-Error: -c option requires an input argument");
usage(argv[0]);
return 1;
}
@@ -92,8 +92,8 @@ extern int main(int argc, char **argv)
if (!ConfigMgr::Load(cfg_file))
{
- sLog->outError(LOG_FILTER_AUTHSERVER, "Invalid or missing configuration file : %s", cfg_file);
- sLog->outError(LOG_FILTER_AUTHSERVER, "Verify that the file exists and has \'[authserver]\' written in the top of the file!");
+ printf("Invalid or missing configuration file : %s", cfg_file);
+ printf("Verify that the file exists and has \'[authserver]\' written in the top of the file!");
return 1;
}
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index 537bbd9c099..ba7faf60ddf 100755
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -29,7 +29,7 @@ class TempSummon : public Creature
void Update(uint32 time);
virtual void InitStats(uint32 lifetime);
virtual void InitSummon();
- void UnSummon(uint32 msTime = 0);
+ virtual void UnSummon(uint32 msTime = 0);
void RemoveFromWorld();
void SetTempSummonType(TempSummonType type);
void SaveToDB(uint32 /*mapid*/, uint8 /*spawnMask*/, uint32 /*phaseMask*/) {}
diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp
index 80c5de35e59..a9a0484a4ea 100755
--- a/src/server/game/Entities/Totem/Totem.cpp
+++ b/src/server/game/Entities/Totem/Totem.cpp
@@ -86,7 +86,7 @@ void Totem::InitStats(uint32 duration)
void Totem::InitSummon()
{
- if (m_type == TOTEM_PASSIVE)
+ if (m_type == TOTEM_PASSIVE && GetSpell())
{
CastSpell(this, GetSpell(), true);
}
@@ -96,10 +96,10 @@ void Totem::InitSummon()
CastSpell(this, GetSpell(1), true);
}
-void Totem::UnSummon()
+void Totem::UnSummon(uint32 msTime)
{
CombatStop();
- RemoveAurasDueToSpell(GetSpell());
+ RemoveAurasDueToSpell(GetSpell(), GetGUID());
// clear owner's totem slot
for (int i = SUMMON_SLOT_TOTEM; i < MAX_TOTEM_SLOT; ++i)
@@ -111,7 +111,11 @@ void Totem::UnSummon()
}
}
- m_owner->RemoveAurasDueToSpell(GetSpell());
+ m_owner->RemoveAurasDueToSpell(GetSpell(), GetGUID());
+
+ // Remove Sentry Totem Aura
+ if (GetEntry() == SENTRY_TOTEM_ENTRY)
+ m_owner->RemoveAurasDueToSpell(SENTRY_TOTEM_SPELLID);
//remove aura all party members too
if (Player* owner = m_owner->ToPlayer())
@@ -127,7 +131,7 @@ void Totem::UnSummon()
{
Player* target = itr->getSource();
if (target && group->SameSubGroup(owner, target))
- target->RemoveAurasDueToSpell(GetSpell());
+ target->RemoveAurasDueToSpell(GetSpell(), GetGUID());
}
}
}
diff --git a/src/server/game/Entities/Totem/Totem.h b/src/server/game/Entities/Totem/Totem.h
index c33b8776660..6271253498d 100755
--- a/src/server/game/Entities/Totem/Totem.h
+++ b/src/server/game/Entities/Totem/Totem.h
@@ -27,8 +27,10 @@ enum TotemType
TOTEM_ACTIVE = 1,
TOTEM_STATUE = 2 // copied straight from MaNGOS, may need more implementation to work
};
+// Some Totems cast spells that are not in creature DB
+#define SENTRY_TOTEM_SPELLID 6495
-#define SENTRY_TOTEM_ENTRY 3968
+#define SENTRY_TOTEM_ENTRY 3968
class Totem : public Minion
{
@@ -38,7 +40,7 @@ class Totem : public Minion
void Update(uint32 time);
void InitStats(uint32 duration);
void InitSummon();
- void UnSummon();
+ void UnSummon(uint32 msTime = 0);
uint32 GetSpell(uint8 slot = 0) const { return m_spells[slot]; }
uint32 GetTotemDuration() const { return m_duration; }
void SetTotemDuration(uint32 duration) { m_duration = duration; }
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index d7bb10e8ba3..b9e5523fd23 100755
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -514,8 +514,8 @@ void WorldSession::HandleTotemDestroyed(WorldPacket& recvPacket)
return;
Creature* totem = GetPlayer()->GetMap()->GetCreature(_player->m_SummonSlot[slotId]);
- // Don't unsummon sentry totem
- if (totem && totem->isTotem() && totem->GetEntry() != SENTRY_TOTEM_ENTRY)
+
+ if (totem && totem->isTotem())
totem->ToTotem()->UnSummon();
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
index e34e86c16a7..ed8c5351493 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
@@ -39,5 +39,9 @@
#define DATA_PRISON_CELL6 18
#define DATA_PRISON_CELL7 19
#define DATA_PRISON_CELL8 20
+#define DATA_BROGGOK_LEVER 21
+#define ACTION_ACTIVATE_BROGGOK 22
+#define ACTION_RESET_BROGGOK 23
+#define ACTION_PREPARE_BROGGOK 24
#endif
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
index 3a2e0834fed..84d292e1fe4 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -47,9 +47,9 @@ class boss_broggok : public CreatureScript
{
}
- struct boss_broggokAI : public ScriptedAI
+ struct boss_broggokAI : public BossAI
{
- boss_broggokAI(Creature* creature) : ScriptedAI(creature)
+ boss_broggokAI(Creature* creature) : BossAI(creature, DATA_BROGGOK)
{
instance = creature->GetInstanceScript();
}
@@ -59,27 +59,21 @@ class boss_broggok : public CreatureScript
uint32 AcidSpray_Timer;
uint32 PoisonSpawn_Timer;
uint32 PoisonBolt_Timer;
+ bool canAttack;
void Reset()
{
+ _Reset();
AcidSpray_Timer = 10000;
PoisonSpawn_Timer = 5000;
PoisonBolt_Timer = 7000;
- if (instance)
- {
- instance->SetData(TYPE_BROGGOK_EVENT, NOT_STARTED);
- instance->HandleGameObject(instance->GetData64(DATA_DOOR4), true);
- }
+ DoAction(ACTION_RESET_BROGGOK);
+ instance->SetData(TYPE_BROGGOK_EVENT, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/)
{
DoScriptText(SAY_AGGRO, me);
- if (instance)
- {
- instance->SetData(TYPE_BROGGOK_EVENT, IN_PROGRESS);
- instance->HandleGameObject(instance->GetData64(DATA_DOOR4), false);
- }
}
void JustSummoned(Creature* summoned)
@@ -94,7 +88,8 @@ class boss_broggok : public CreatureScript
{
if (!UpdateVictim())
return;
-
+ if (!canAttack)
+ return;
if (AcidSpray_Timer <= diff)
{
DoCast(me->getVictim(), SPELL_SLIME_SPRAY);
@@ -132,6 +127,26 @@ class boss_broggok : public CreatureScript
}
}
+ void DoAction(int32 const action)
+ {
+ switch (action)
+ {
+ case ACTION_PREPARE_BROGGOK:
+ me->SetInCombatWithZone();
+ break;
+ case ACTION_ACTIVATE_BROGGOK:
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ canAttack = true;
+ break;
+ case ACTION_RESET_BROGGOK:
+ me->SetReactState(REACT_PASSIVE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ canAttack = false;
+ break;
+ }
+ }
+
};
CreatureAI* GetAI(Creature* creature) const
@@ -140,7 +155,27 @@ class boss_broggok : public CreatureScript
}
};
+class go_broggok_lever : public GameObjectScript
+{
+ public:
+ go_broggok_lever() : GameObjectScript("go_broggok_lever") {}
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ if (InstanceScript* instance = go->GetInstanceScript())
+ if (instance->GetData(TYPE_BROGGOK_EVENT) != DONE && instance->GetData(TYPE_BROGGOK_EVENT) != IN_PROGRESS)
+ {
+ instance->SetData(TYPE_BROGGOK_EVENT, IN_PROGRESS);
+ if (Creature* broggok = Creature::GetCreature(*go, instance->GetData64(DATA_BROGGOK)))
+ broggok->AI()->DoAction(ACTION_PREPARE_BROGGOK);
+ }
+ go->UseDoorOrButton();
+ return false;
+ }
+};
+
void AddSC_boss_broggok()
{
new boss_broggok();
+ new go_broggok_lever();
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
index a0bcc396fdb..3c07862e0f6 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp
@@ -57,7 +57,9 @@ enum eKelidan
SPELL_VORTEX = 37370,
ENTRY_KELIDAN = 17377,
- ENTRY_CHANNELER = 17653
+ ENTRY_CHANNELER = 17653,
+
+ ACTION_ACTIVATE_ADDS = 92
};
const float ShadowmoonChannelers[5][4]=
@@ -107,6 +109,8 @@ class boss_kelidan_the_breaker : public CreatureScript
Firenova = false;
addYell = false;
SummonChannelers();
+ me->SetReactState(REACT_PASSIVE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
if (instance)
instance->SetData(TYPE_KELIDAN_THE_BREAKER_EVENT, NOT_STARTED);
}
@@ -152,7 +156,8 @@ class boss_kelidan_the_breaker : public CreatureScript
if (channeler && channeler->isAlive())
return;
}
-
+ me->SetReactState(REACT_AGGRESSIVE);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
if (killer)
me->AI()->AttackStart(killer);
}
@@ -269,7 +274,6 @@ class boss_kelidan_the_breaker : public CreatureScript
DoMeleeAttackIfReady();
}
-
};
CreatureAI* GetAI(Creature* creature) const
@@ -295,16 +299,11 @@ class mob_shadowmoon_channeler : public CreatureScript
{
public:
- mob_shadowmoon_channeler()
- : CreatureScript("mob_shadowmoon_channeler")
- {
- }
+ mob_shadowmoon_channeler() : CreatureScript("mob_shadowmoon_channeler") {}
struct mob_shadowmoon_channelerAI : public ScriptedAI
{
- mob_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature)
- {
- }
+ mob_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature){}
uint32 ShadowBolt_Timer;
uint32 MarkOfShadow_Timer;
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
index 4c434feb4ec..893f97fe711 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp
@@ -26,6 +26,7 @@ EndScriptData */
#include "ScriptMgr.h"
#include "InstanceScript.h"
#include "blood_furnace.h"
+#include "CreatureAI.h"
#define ENTRY_SEWER1 181823
#define ENTRY_SEWER2 181766
@@ -35,9 +36,7 @@ class instance_blood_furnace : public InstanceMapScript
{
public:
instance_blood_furnace()
- : InstanceMapScript("instance_blood_furnace", 542)
- {
- }
+ : InstanceMapScript("instance_blood_furnace", 542) {}
struct instance_blood_furnace_InstanceMapScript : public InstanceScript
{
@@ -63,6 +62,18 @@ class instance_blood_furnace : public InstanceMapScript
uint64 PrisonCell7GUID;
uint64 PrisonCell8GUID;
+ std::set<uint64> PrisonersCell5;
+ std::set<uint64> PrisonersCell6;
+ std::set<uint64> PrisonersCell7;
+ std::set<uint64> PrisonersCell8;
+
+ uint8 PrisonerCounter5;
+ uint8 PrisonerCounter6;
+ uint8 PrisonerCounter7;
+ uint8 PrisonerCounter8;
+
+ uint64 BroggokLeverGUID;
+
uint32 m_auiEncounter[MAX_ENCOUNTER];
std::string str_data;
@@ -89,24 +100,45 @@ class instance_blood_furnace : public InstanceMapScript
PrisonCell6GUID = 0;
PrisonCell7GUID = 0;
PrisonCell8GUID = 0;
+
+ PrisonersCell5.clear();
+ PrisonersCell6.clear();
+ PrisonersCell7.clear();
+ PrisonersCell8.clear();
+
+ PrisonerCounter5 = 0;
+ PrisonerCounter6 = 0;
+ PrisonerCounter7 = 0;
+ PrisonerCounter8 = 0;
+
+ BroggokLeverGUID = 0;
}
void OnCreatureCreate(Creature* creature)
{
switch (creature->GetEntry())
{
- case 17381:
- The_MakerGUID = creature->GetGUID();
- break;
- case 17380:
- BroggokGUID = creature->GetGUID();
- break;
- case 17377:
- Kelidan_The_BreakerGUID = creature->GetGUID();
- break;
+ case 17381:
+ The_MakerGUID = creature->GetGUID();
+ break;
+ case 17380:
+ BroggokGUID = creature->GetGUID();
+ break;
+ case 17377:
+ Kelidan_The_BreakerGUID = creature->GetGUID();
+ break;
+ case 17398:
+ StorePrisoner(creature);
+ break;
}
}
+ void OnCreatureDeath(Creature* unit)
+ {
+ if (unit && unit->GetTypeId() == TYPEID_UNIT && unit->GetEntry() == 17398)
+ PrisonerDied(unit->GetGUID());
+ }
+
void OnGameObjectCreate(GameObject* go)
{
if (go->GetEntry() == 181766) //Final exit door
@@ -138,6 +170,9 @@ class instance_blood_furnace : public InstanceMapScript
PrisonCell7GUID = go->GetGUID();
if (go->GetEntry() == 181817) //Broggok prison cell back left
PrisonCell8GUID = go->GetGUID();
+
+ if (go->GetEntry() == 181982)
+ BroggokLeverGUID = go->GetGUID(); //Broggok lever
}
uint64 GetData64(uint32 data)
@@ -161,18 +196,25 @@ class instance_blood_furnace : public InstanceMapScript
case DATA_PRISON_CELL6: return PrisonCell6GUID;
case DATA_PRISON_CELL7: return PrisonCell7GUID;
case DATA_PRISON_CELL8: return PrisonCell8GUID;
+ case DATA_BROGGOK_LEVER: return BroggokLeverGUID;
}
-
return 0;
}
- void SetData(uint32 /*type*/, uint32 data)
+ void SetData(uint32 type, uint32 data)
{
- switch (data)
+ switch (type)
{
- case TYPE_THE_MAKER_EVENT: m_auiEncounter[0] = data; break;
- case TYPE_BROGGOK_EVENT: m_auiEncounter[1] = data; break;
- case TYPE_KELIDAN_THE_BREAKER_EVENT: m_auiEncounter[2] = data; break;
+ case TYPE_THE_MAKER_EVENT:
+ m_auiEncounter[0] = data;
+ break;
+ case TYPE_BROGGOK_EVENT:
+ m_auiEncounter[1] = data;
+ UpdateBroggokEvent(data);
+ break;
+ case TYPE_KELIDAN_THE_BREAKER_EVENT:
+ m_auiEncounter[2] = data;
+ break;
}
if (data == DONE)
@@ -189,15 +231,14 @@ class instance_blood_furnace : public InstanceMapScript
}
}
- uint32 GetData(uint32 data)
+ uint32 GetData(uint32 type)
{
- switch (data)
+ switch (type)
{
case TYPE_THE_MAKER_EVENT: return m_auiEncounter[0];
case TYPE_BROGGOK_EVENT: return m_auiEncounter[1];
case TYPE_KELIDAN_THE_BREAKER_EVENT: return m_auiEncounter[2];
}
-
return 0;
}
@@ -225,6 +266,147 @@ class instance_blood_furnace : public InstanceMapScript
OUT_LOAD_INST_DATA_COMPLETE;
}
+
+ void UpdateBroggokEvent(uint32 data)
+ {
+ switch (data)
+ {
+ case IN_PROGRESS:
+ ActivateCell(DATA_PRISON_CELL5);
+ HandleGameObject(Door4GUID, false);
+ break;
+ case NOT_STARTED:
+ ResetPrisons();
+ HandleGameObject(Door5GUID, false);
+ HandleGameObject(Door4GUID, true);
+ if (GameObject* lever = instance->GetGameObject(BroggokLeverGUID))
+ lever->Respawn();
+ break;
+ }
+ }
+
+ void ResetPrisons()
+ {
+ PrisonerCounter5 = PrisonersCell5.size();
+ ResetPrisoners(PrisonersCell5);
+ HandleGameObject(PrisonCell5GUID, false);
+
+ PrisonerCounter6 = PrisonersCell6.size();
+ ResetPrisoners(PrisonersCell6);
+ HandleGameObject(PrisonCell6GUID, false);
+
+ PrisonerCounter7 = PrisonersCell7.size();
+ ResetPrisoners(PrisonersCell7);
+ HandleGameObject(PrisonCell7GUID, false);
+
+ PrisonerCounter8 = PrisonersCell8.size();
+ ResetPrisoners(PrisonersCell8);
+ HandleGameObject(PrisonCell8GUID, false);
+ }
+
+ void ResetPrisoners(std::set<uint64> prisoners)
+ {
+ for (std::set<uint64>::iterator i = prisoners.begin(); i != prisoners.end(); ++i)
+ if (Creature* prisoner = instance->GetCreature(*i))
+ ResetPrisoner(prisoner);
+ }
+
+ void ResetPrisoner(Creature* prisoner)
+ {
+ if (!prisoner->isAlive())
+ prisoner->Respawn(true);
+ prisoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ }
+
+ void StorePrisoner(Creature* creature)
+ {
+ float posX = creature->GetPositionX();
+ float posY = creature->GetPositionY();
+
+ if (posX >= 405.0f && posX <= 423.0f)
+ {
+ if (posY >= 106.0f && posY <= 123.0f)
+ {
+ PrisonersCell5.insert(creature->GetGUID());
+ ++PrisonerCounter5;
+ }
+ else if (posY >= 76.0f && posY <= 91.0f)
+ {
+ PrisonersCell6.insert(creature->GetGUID());
+ ++PrisonerCounter6;
+ }
+ else return;
+ }
+ else if (posX >= 490.0f && posX <= 506.0f)
+ {
+ if (posY >= 106.0f && posY <= 123.0f)
+ {
+ PrisonersCell7.insert(creature->GetGUID());
+ ++PrisonerCounter7;
+ }
+ else if (posY >= 76.0f && posY <= 91.0f)
+ {
+ PrisonersCell8.insert(creature->GetGUID());
+ ++PrisonerCounter8;
+ }
+ else
+ return;
+ }
+ else
+ return;
+
+ ResetPrisoner(creature);
+ }
+
+ void PrisonerDied(uint64 guid)
+ {
+ if (PrisonersCell5.find(guid) != PrisonersCell5.end() && --PrisonerCounter5 <= 0)
+ ActivateCell(DATA_PRISON_CELL6);
+ else if (PrisonersCell6.find(guid) != PrisonersCell6.end() && --PrisonerCounter6 <= 0)
+ ActivateCell(DATA_PRISON_CELL7);
+ else if (PrisonersCell7.find(guid) != PrisonersCell7.end() && --PrisonerCounter7 <= 0)
+ ActivateCell(DATA_PRISON_CELL8);
+ else if (PrisonersCell8.find(guid) != PrisonersCell8.end() && --PrisonerCounter8 <= 0)
+ ActivateCell(DATA_DOOR5);
+ }
+
+ void ActivateCell(uint8 id)
+ {
+ switch (id)
+ {
+ case DATA_PRISON_CELL5:
+ HandleGameObject(PrisonCell5GUID,true);
+ ActivatePrisoners(PrisonersCell5);
+ break;
+ case DATA_PRISON_CELL6:
+ HandleGameObject(PrisonCell6GUID,true);
+ ActivatePrisoners(PrisonersCell6);
+ break;
+ case DATA_PRISON_CELL7:
+ HandleGameObject(PrisonCell7GUID,true);
+ ActivatePrisoners(PrisonersCell7);
+ break;
+ case DATA_PRISON_CELL8:
+ HandleGameObject(PrisonCell8GUID,true);
+ ActivatePrisoners(PrisonersCell8);
+ break;
+ case DATA_DOOR5:
+ HandleGameObject(Door5GUID,true);
+ if (Creature* broggok = instance->GetCreature(BroggokGUID))
+ broggok->AI()->DoAction(ACTION_ACTIVATE_BROGGOK);
+ break;
+ }
+ }
+
+ void ActivatePrisoners(std::set<uint64> prisoners)
+ {
+ for (std::set<uint64>::iterator i = prisoners.begin(); i != prisoners.end(); ++i)
+ if (Creature* prisoner = instance->GetCreature(*i))
+ {
+ prisoner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
+ prisoner->SetInCombatWithZone();
+ }
+ }
};
InstanceScript* GetInstanceScript(InstanceMap* map) const
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index 862ed28f2d3..7e43cf87dfc 100755
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -81,7 +81,7 @@ extern int main(int argc, char **argv)
{
if (++c >= argc)
{
- sLog->outError(LOG_FILTER_WORLDSERVER, "Runtime-Error: -c option requires an input argument");
+ printf("Runtime-Error: -c option requires an input argument");
usage(argv[0]);
return 1;
}
@@ -97,25 +97,25 @@ extern int main(int argc, char **argv)
{
if (++c >= argc)
{
- sLog->outError(LOG_FILTER_WORLDSERVER, "Runtime-Error: -s option requires an input argument");
+ printf("Runtime-Error: -s option requires an input argument");
usage(argv[0]);
return 1;
}
if (strcmp(argv[c], "install") == 0)
{
if (WinServiceInstall())
- sLog->outInfo(LOG_FILTER_WORLDSERVER, "Installing service");
+ printf("Installing service");
return 1;
}
else if (strcmp(argv[c], "uninstall") == 0)
{
if (WinServiceUninstall())
- sLog->outInfo(LOG_FILTER_WORLDSERVER, "Uninstalling service");
+ printf("Uninstalling service");
return 1;
}
else
{
- sLog->outError(LOG_FILTER_WORLDSERVER, "Runtime-Error: unsupported option %s", argv[c]);
+ printf("Runtime-Error: unsupported option %s", argv[c]);
usage(argv[0]);
return 1;
}
@@ -131,8 +131,8 @@ extern int main(int argc, char **argv)
if (!ConfigMgr::Load(cfg_file))
{
- sLog->outError(LOG_FILTER_WORLDSERVER, "Invalid or missing configuration file : %s", cfg_file);
- sLog->outError(LOG_FILTER_WORLDSERVER, "Verify that the file exists and has \'[worldserver]' written in the top of the file!");
+ printf("Invalid or missing configuration file : %s", cfg_file);
+ printf("Verify that the file exists and has \'[worldserver]' written in the top of the file!");
return 1;
}
sLog->outInfo(LOG_FILTER_WORLDSERVER, "Using configuration file %s.", cfg_file);