aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README34
-rw-r--r--sql/updates/world/2013_06_05_00_world_sai.sql61
-rw-r--r--sql/updates/world/2013_06_05_01_world_misc.sql240
-rw-r--r--sql/updates/world/2013_06_07_00_world_creature_ai_scripts.sql1
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp100
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Entities/Player/Player.cpp14
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp16
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp5
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Maps/Map.cpp19
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.h1
-rw-r--r--src/server/game/World/World.cpp7
-rw-r--r--src/server/game/World/World.h5
-rw-r--r--src/server/worldserver/worldserver.conf.dist23
15 files changed, 431 insertions, 99 deletions
diff --git a/README b/README
index 3eea1dccdc5..cd3e2dc108b 100644
--- a/README
+++ b/README
@@ -41,13 +41,26 @@ project website at http://www.TrinityCore.org
Documentation including installation instructions can be found inside
the doc directory.
-SQL files to create the database can be found in the sql/create and sql/base directory.
-You need to download world database from http://www.trinitycore.org/f/files/ be sure you get the higher numbered database.
-When installing a core the 1st time you need to import also the files at sql/updates/world directory.
-To save time importing multiple files, you can use copy *.sql world_updates.sql under Windows or cat *.sql > world_updates under Linux.
-You need to update your core (recompile and overwrite binaries) when updating your database, usually you can't use one older core with a newer database or a newer core with a older database.
-When updating your core you also need to import the files at sql/updates/auth and sql/updates/characters along with sql/updates/world files.
-You can't merge all the sql files on sql/updates into a single file, because they belong to 3 different databases and they don't use database name.
+SQL files to create the databases can be found in the sql/create and
+sql/base directories.
+You need to run sql/create/create_mysql.sql 1st and then
+sql/base/auth_database.sql and sql/base/characters_database.sql
+You need to download world database from http://www.trinitycore.org/f/files/
+be sure you get the higher numbered database.
+When installing a core the 1st time you need to import also the files at
+sql/updates/world directory.
+sql/updates/auth and sql/updates/characters databases only needs to be run
+when updating one existing server.
+To save time importing multiple files, you can use copy *.sql world_updates.sql
+under Windows or cat *.sql > world_updates under Linux.
+
+You need to update your core (recompile and overwrite binaries) when updating
+your database, usually you can't use one older core with a newer database or a
+newer core with a older database.
+When updating your core you also need to import the files at sql/updates/auth
+and sql/updates/characters along with sql/updates/world files.
+You can't merge all the sql files on sql/updates into a single file, because
+they belong to 3 different databases and they don't use database name.
TrinityCore Requirements
Platform: Linux, Windows or Mac
@@ -58,3 +71,10 @@ CMake ≥ 2.8.0 (max 2.8.9 under linux)
OpenSSL ≥ 0.9.8o
GCC ≥ 4.3 (Linux only)
MS Visual Studio ≥ 9 (2008) (Windows only)
+A bit of brain, wiki can become outdated with the release of new TDB versions
+if wiki refers to TDB 50 and you see TDB 52 get the higher number.
+Some reading skills, search forum, read http://www.trinitycore.org/f/topic/1518-
+and http://www.trinitycore.org/f/topic/37- before posting a bug report or ask for
+help on forum.
+Search for existing bug reports before post your bug report, don't post multiple
+bugs on a single ticket.
diff --git a/sql/updates/world/2013_06_05_00_world_sai.sql b/sql/updates/world/2013_06_05_00_world_sai.sql
new file mode 100644
index 00000000000..9dc2b4bfcf1
--- /dev/null
+++ b/sql/updates/world/2013_06_05_00_world_sai.sql
@@ -0,0 +1,61 @@
+-- The Art of Being a Water Terror (13091)
+SET @NPC_WATER_TERROR := 30645; -- Water Terror
+SET @AURA_HEALTH := 57664; -- The Art of Being a Water Terror: Mod Health Regen %
+SET @JOT_WARRIOR := 29880; -- Jotunheim Warrior
+SET @SPEAR_SISTER := 30243; -- Njorndar Spear-Sister
+SET @VAL_VARGUL := 30250; -- Valhalas Vargul
+SET @WATER_MAGUS := 30632; -- Mjordin Water Magus
+SET @SLEEP_WATCHER := 30725; -- Jotunheim Sleep-Watcher
+
+UPDATE `creature_template` SET `speed_walk`=4,`speed_run`=2.14285707473755,`AIName`='SmartAI',`exp`=2,`spell1`=57643,`spell2`=57652,`spell3`=57665,`spell4`=57668,`VehicleId`=250,`minlevel`=80,`maxlevel`=80,`faction_A`=116,`faction_H`=116,`unit_flags`=0x8008 WHERE `entry`=@NPC_WATER_TERROR;
+
+DELETE FROM `creature_template_addon` WHERE `entry`=@NPC_WATER_TERROR;
+INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`auras`) VALUES
+(@NPC_WATER_TERROR,0,0x0,0x101,'');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@NPC_WATER_TERROR AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@NPC_WATER_TERROR,0,0,1,54,0,100,0,0,0,0,0,8,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'On Just Summoned - Set State Passive - Self'),
+(@NPC_WATER_TERROR,0,1,0,61,0,100,0,0,0,0,0,75,@AURA_HEALTH,0,0,0,0,0,1,0,0,0,0,0,0,0,'On Just Summoned - Add Aura - Self');
+
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@JOT_WARRIOR,@WATER_MAGUS,@SPEAR_SISTER);
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry` IN (@JOT_WARRIOR,@WATER_MAGUS,@SPEAR_SISTER);
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@JOT_WARRIOR,0,0,0,0,0,100,0,0,0,30000,30000,11,23262,2,0,0,0,0,2,0,0,0,0,0,0,0,'Jotunheim Warrior - IC - Cast Demoralize'),
+(@JOT_WARRIOR,0,1,0,0,0,100,0,2000,3000,5000,7000,11,43410,2,0,0,0,0,2,0,0,0,0,0,0,0,'Jotunheim Warrior - IC - Cast Chop'),
+(@JOT_WARRIOR,0,2,0,6,0,100,0,0,0,0,0,33,30644,0,0,0,0,0,7,0,0,0,0,0,0,0,'Jotunheim Warrior - On Death - Give Kill Credit credit'),
+(@SPEAR_SISTER,0,0,0,0,0,100,0,2000,3000,3000,4000,11,38029,2,0,0,0,0,2,0,0,0,0,0,0,0,'Njorndar Spear-Sister - IC - Cast Stab'),
+(@SPEAR_SISTER,0,1,0,6,0,100,0,0,0,0,0,33,30644,0,0,0,0,0,7,0,0,0,0,0,0,0,'Njorndar Spear-Sister - On Death - Give Kill Credit credit'),
+(@WATER_MAGUS,0,0,0,11,0,100,0,0,0,0,0,11,7855,0,0,0,0,0,1,0,0,0,0,0,0,0,'Mjordin Water Magus - On Spawn - Summon Water Terror (Self)'),
+(@WATER_MAGUS,0,1,0,0,0,100,0,0,0,3000,4000,11,9672,0,0,0,0,0,2,0,0,0,0,0,0,0,'Mjordin Water Magus - IC - Cast Frostbolt'),
+(@WATER_MAGUS,0,2,0,0,0,100,0,3000,3000,7000,9000,11,15532,0,0,0,0,0,1,0,0,0,0,0,0,0,'Mjordin Water Magus - IC - Cast Frost Nova'),
+(@WATER_MAGUS,0,3,0,6,0,100,0,0,0,0,0,33,30644,0,0,0,0,0,7,0,0,0,0,0,0,0,'Mjordin Water Magus - On Death - Give Kill Credit credit');
+-- Valhalas Vargul
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@VAL_VARGUL;
+DELETE FROM `smart_scripts` WHERE `entryorguid` =@VAL_VARGUL;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@VAL_VARGUL,0,0,0,9,0,100,0,0,5,3000,5000,11,15496,0,0,0,0,0,2,0,0,0,0,0,0,0,'Valhalas Vargul - IC - Cast Cleave'),
+(@VAL_VARGUL,0,1,0,6,0,100,0,0,0,0,0,33,30644,0,0,0,0,0,7,0,0,0,0,0,0,0,'Valhalas Vargul - On Death - Give Kill Credit credit');
+
+-- Jotunheim Sleep-Watcher
+UPDATE `creature_template` SET `AIName`= 'SmartAI' WHERE `entry`=@SLEEP_WATCHER;
+DELETE FROM `smart_scripts` WHERE `entryorguid` =@SLEEP_WATCHER;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@SLEEP_WATCHER,0,0,0,9,0,100,0,0,5,15000,25000,11,60870,0,0,0,0,0,2,0,0,0,0,0,0,0,'Jotunheim Sleep-Watcher - IC - Cast Bludgeoning Strike'),
+(@SLEEP_WATCHER,0,1,0,9,0,100,0,0,5000,30000,45000,11,13730,0,0,0,0,0,1,0,0,0,0,0,0,0,'Jotunheim Sleep-Watcher - IC - Cast Demoralizing Shout'),
+(@SLEEP_WATCHER,0,2,0,6,0,100,0,0,0,0,0,33,30644,0,0,0,0,0,7,0,0,0,0,0,0,0,'Jotunheim Sleep-Watcher - On Death - Give Kill Credit credit');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN(@JOT_WARRIOR,@WATER_MAGUS,@SPEAR_SISTER,@VAL_VARGUL,@SLEEP_WATCHER);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(22,3,@JOT_WARRIOR,0,0,1,0,57615,0,0,0,0,'','Only run AI if player is possessing a water terror'),
+(22,4,@WATER_MAGUS,0,0,1,0,57615,0,0,0,0,'','Only run AI if player is possessing a water terror'),
+(22,2,@SPEAR_SISTER,0,0,1,0,57615,0,0,0,0,'','Only run AI if player is possessing a water terror'),
+(22,2,@VAL_VARGUL,0,0,1,0,57615,0,0,0,0,'','Only run AI if player is possessing a water terror'),
+(22,3,@SLEEP_WATCHER,0,0,1,0,57615,0,0,0,0,'','Only run AI if player is possessing a water terror');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=16 AND `SourceEntry`=@NPC_WATER_TERROR;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(16,0,@NPC_WATER_TERROR,0,0,23,0,4526,0,0,0,0,0,'','Water Terror (Vehicle) Allowed in Njorndar Village'),
+(16,0,@NPC_WATER_TERROR,0,1,23,0,4524,0,0,0,0,0,'','Water Terror (Vehicle) Allowed in Valhalas'),
+(16,0,@NPC_WATER_TERROR,0,2,23,0,4496,0,0,0,0,0,'','Water Terror (Vehicle) Allowed in Jotunheim');
diff --git a/sql/updates/world/2013_06_05_01_world_misc.sql b/sql/updates/world/2013_06_05_01_world_misc.sql
new file mode 100644
index 00000000000..6e11d0ce0d3
--- /dev/null
+++ b/sql/updates/world/2013_06_05_01_world_misc.sql
@@ -0,0 +1,240 @@
+SET @GUID := 131282;
+
+SET @QUEST := 11705;
+SET @VARIDUS := 25618;
+SET @PRISONER := 25624;
+SET @ABERRATION := 25625;
+SET @GETRY := 25729;
+SET @NECROLORD := 25730;
+SET @SAURFANG := 25751;
+
+UPDATE `creature_template` SET `minlevel`=65, `maxlevel`=70, `exp`=2, `faction_A`=14, `faction_H`=14, `unit_flags`=33554688, `AIName`='SmartAI' WHERE `entry`=@PRISONER;
+UPDATE `creature_template` SET `faction_A`=1982, `faction_H`=1982, `unit_flags`=0, `AIName`='SmartAI' WHERE `entry`=@ABERRATION;
+UPDATE `creature_template` SET `speed_run`=2.28571, `faction_A`=1982, `faction_H`=1982, `unit_flags`=33536, `AIName`='SmartAI' WHERE `entry`=@NECROLORD;
+UPDATE `creature_template` SET `faction_A`=1982, `faction_H`=1982, `unit_flags`=768, `AIName`= 'SmartAI', `ScriptName`='' WHERE `entry`=@VARIDUS;
+UPDATE `creature_template` SET `faction_A`=1980, `faction_H`=1980, `minlevel`=70, `maxlevel`=70, `exp`=2, `unit_flags`=33024, `mindmg`=474, `maxdmg`=574, `AIName`= 'SmartAI' WHERE `entry`=@SAURFANG;
+UPDATE `creature_template` SET `unit_flags`=32768, `AIName`= 'SmartAI' WHERE `entry`=@GETRY;
+
+UPDATE `creature_model_info` SET `bounding_radius`=0.4092, `combat_reach`=1.65 WHERE `modelid`=23360;
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN(@GETRY,@PRISONER,@VARIDUS);
+INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES
+(@VARIDUS,0x1,'45908'),
+(@PRISONER,0x1,''),
+(@GETRY,0x101,'');
+
+DELETE FROM `creature` WHERE `id` IN (@PRISONER,@VARIDUS);
+INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES
+(@GUID+0, @PRISONER, 571, 1, 1, 0, 0, 3092.136, 6516.039, 82.06012, 5.183628, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+1, @PRISONER, 571, 1, 1, 0, 0, 3089.2, 6526.226, 81.77282, 1.902409, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+2, @PRISONER, 571, 1, 1, 0, 0, 3096.962, 6510.87, 82.08541, 0.5585054, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+3, @PRISONER, 571, 1, 1, 0, 0, 3093.876, 6522.219, 81.79565, 0.01745329, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+4, @PRISONER, 571, 1, 1, 0, 0, 3098.928, 6517.495, 81.77497, 3.001966, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+5, @PRISONER, 571, 1, 1, 0, 0, 3103.036, 6504.89, 82.04672, 3.944444, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+6, @PRISONER, 571, 1, 1, 0, 0, 3104.042, 6511.731, 81.80676, 3.455752, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+7, @PRISONER, 571, 1, 1, 0, 0, 3093.038, 6547.074, 80.75952, 5.899213, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+8, @PRISONER, 571, 1, 1, 0, 0, 3096.117, 6544.481, 80.7102, 1.605703, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+9, @PRISONER, 571, 1, 1, 0, 0, 3099.3, 6541.367, 80.77256, 4.799655, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+10, @PRISONER, 571, 1, 1, 0, 0, 3090.39, 6541.875, 81.06445, 3.054326, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+11, @PRISONER, 571, 1, 1, 0, 0, 3102.454, 6538.238, 80.83416, 1.58825, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+12, @PRISONER, 571, 1, 1, 0, 0, 3093.245, 6538.743, 81.06524, 3.455752, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+13, @PRISONER, 571, 1, 1, 0, 0, 3105.601, 6534.979, 80.85965, 0.1570796, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+14, @PRISONER, 571, 1, 1, 0, 0, 3096.462, 6535.528, 81.13345, 4.921828, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+15, @PRISONER, 571, 1, 1, 0, 0, 3087.603, 6536.683, 81.36699, 4.18879, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+16, @PRISONER, 571, 1, 1, 0, 0, 3108.599, 6531.898, 80.8754, 5.462881, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+17, @PRISONER, 571, 1, 1, 0, 0, 3100.571, 6532.094, 81.16553, 6.230825, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+18, @PRISONER, 571, 1, 1, 0, 0, 3122.098, 6518.814, 80.70912, 1.815142, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+19, @PRISONER, 571, 1, 1, 0, 0, 3116.981, 6515.013, 81.07998, 5.899213, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+20, @PRISONER, 571, 1, 1, 0, 0, 3126.142, 6514.962, 80.68482, 1.954769, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+21, @PRISONER, 571, 1, 1, 0, 0, 3112.065, 6511.906, 81.3951, 5.148721, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+22, @PRISONER, 571, 1, 1, 0, 0, 3129.413, 6511.592, 80.7066, 2.722714, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+23, @PRISONER, 571, 1, 1, 0, 0, 3122.214, 6510.255, 81.00794, 2.86234, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+24, @PRISONER, 571, 1, 1, 0, 0, 3116.414, 6507.338, 81.34387, 5.811946, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+25, @PRISONER, 571, 1, 1, 0, 0, 3109.384, 6506.753, 81.68826, 6.038839, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+26, @PRISONER, 571, 1, 1, 0, 0, 3126.804, 6505.612, 81.01304, 3.909538, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+27, @PRISONER, 571, 1, 1, 0, 0, 3120.997, 6502.847, 81.33372, 3.228859, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+28, @PRISONER, 571, 1, 1, 0, 0, 3114.636, 6501.495, 81.61775, 0.3490658, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+29, @PRISONER, 571, 1, 1, 0, 0, 3109.11, 6498.783, 81.92492, 2.635447, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+30, @PRISONER, 571, 1, 1, 0, 0, 3126.413, 6498.179, 81.30205, 6.248279, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+31, @PRISONER, 571, 1, 1, 0, 0, 3120.758, 6495.855, 81.59259, 2.495821, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+32, @PRISONER, 571, 1, 1, 0, 0, 3115.22, 6492.261, 81.93079, 5.5676, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+33, @PRISONER, 571, 1, 1, 0, 0, 3126.15, 6489.568, 81.65459, 2.146755, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+34, @PRISONER, 571, 1, 1, 0, 0, 3120.454, 6486.966, 81.9426, 1.902409, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+35, @PRISONER, 571, 1, 1, 0, 0, 3095.756, 6528.297, 81.4939, 4.433136, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+36, @PRISONER, 571, 1, 1, 0, 0, 3091.309, 6532.723, 81.41476, 4.502949, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+37, @PRISONER, 571, 1, 1, 0, 0, 3104.285, 6519.577, 81.50758, 6.178465, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+38, @PRISONER, 571, 1, 1, 0, 0, 3112.36, 6527.987, 80.87508, 3.630285, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+39, @PRISONER, 571, 1, 1, 0, 0, 3104.28, 6528.084, 81.18883, 3.420845, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+40, @PRISONER, 571, 1, 1, 0, 0, 3116.763, 6524.073, 80.84852, 6.021386, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+41, @PRISONER, 571, 1, 1, 0, 0, 3099.789, 6524.306, 81.51059, 3.368485, 15, 0, 0, 1848, 0, 0, 0, 0, 0),
+(@GUID+42, @VARIDUS, 571, 1, 1, 0, 0, 3126.529, 6532.781, 80.06363, 5.576992, 60, 0, 0, 0, 0, 0, 0, 0, 0);
+
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@GETRY,@VARIDUS,@NECROLORD,@PRISONER,@ABERRATION) AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@VARIDUS*100 AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
+(@VARIDUS,0,0,0,38,0,100,0,0,1,0,0,69,1,0,0,0,0,0,8,0,0,0,3119.973,6539.042,80.1591, 0, 'Varidus the Flenser - On data 0 1 set - Move to position'),
+(@VARIDUS,0,1,2,34,0,100,0,0,1,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.031711, 'Varidus the Flenser - On movement inform - Set orientation'),
+(@VARIDUS,0,2,3,61,0,100,0,0,0,0,0,1,11,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On movement inform - Say line'),
+(@VARIDUS,0,3,0,61,0,100,0,0,0,0,0,89,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On movement inform - Stop Random movement'),
+(@VARIDUS,0,4,0,38,0,100,0,0,2,0,0,1,0,3000,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On data 0 2 set - Say line'),
+(@VARIDUS,0,5,0,52,0,100,0,0,@VARIDUS,0,0,66,0,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Varidus the Flenser - On text 0 over - Turn to'),
+(@VARIDUS,0,6,7,38,0,100,0,0,3,0,0,1,1,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Varidus the Flenser - On data 0 3 set - Say line'),
+(@VARIDUS,0,7,8,61,0,100,0,0,0,0,0,12,@NECROLORD,1,300000,0,0,0,8,0,0,0,3137.506,6532.551,80.40143,2.280419, 'Varidus the Flenser - On data 0 3 set - Summon En''kilah Necrolord'),
+(@VARIDUS,0,8,0,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,19,@NECROLORD,50,0,0,0,0,0, 'Varidus the Flenser - On data 0 3 set - Send targetlist'),
+(@VARIDUS,0,9,0,38,0,100,0,0,4,0,0,80,@VARIDUS*100,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On data 0 4 set - Run script'),
+(@VARIDUS,0,10,11,52,0,100,0,10,@VARIDUS,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On text 10 over - Remove unit_flags IMMUNE_TO_PC, IMMUNE_TO_NPC'),
+(@VARIDUS,0,11,0,61,0,100,0,0,0,0,0,28,45908,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On text 10 over - Remove aura Shield of Suffering'),
+(@VARIDUS,0,12,0,9,0,100,0,0,10,5000,8000,11,32711,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On target within 10y - Spellcast Shadow Nova'),
+(@VARIDUS,0,13,0,0,0,100,0,10000,12000,10000,15000,11,50329,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On update IC - Spellcast Shied of Suffering'),
+(@VARIDUS,0,14,15,6,0,100,0,0,0,0,0,45,1,3,0,0,0,0,19,@GETRY,100,0,0,0,0,0, 'Varidus the Flenser - On death - Set data 1 3 Shadowstalker Getry'),
+(@VARIDUS,0,15,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On death - Despawn'),
+(@VARIDUS,0,16,0,11,0,100,0,0,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On spawn - Random movement'),
+
+(@PRISONER,0,0,1,6,0,100,0,0,0,0,0,11,45802,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Infested Prisoner - On death - Spellcast Summoned Aberration'),
+(@PRISONER,0,1,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Infested Prisoner - On death - Despawn'),
+
+(@ABERRATION,0,0,1,11,0,100,0,0,0,0,0,53,0,@ABERRATION,0,0,0,0,1,0,0,0,0,0,0,0, 'Warsong Aberration - On spawn - Start WP movement'),
+(@ABERRATION,0,1,0,61,0,100,0,0,0,0,0,8,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Warsong Aberration - On spawn - Set reaction aggressive'),
+(@ABERRATION,0,2,0,9,0,100,0,0,5,990,3000,11,50306,2,0,0,0,0,7,0,0,0,0,0,0,0, 'Warsong Aberration - On target within 5y - Spellcast Thrash Kick'),
+
+(@GETRY,0,0,1,19,0,100,0,@QUEST,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Shadowstalker Getry - On quest accept - Store targetlist'),
+(@GETRY,0,1,2,61,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On quest accept - Remove npcflag questgiver'),
+(@GETRY,0,2,3,61,0,100,0,0,0,0,0,1,0,3000,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On quest accept - Say line'),
+(@GETRY,0,3,4,61,0,100,0,0,0,0,0,11,45924,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On quest accept - Spellcast On Getry''s Quest'),
+(@GETRY,0,4,5,61,0,100,0,0,0,0,0,11,45924,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Shadowstalker Getry - On quest accept - Spellcast On Getry''s Quest'),
+(@GETRY,0,5,0,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,@VARIDUS,50,0,0,0,0,0, 'Shadowstalker Getry - On quest accept - Set data 0 1 Varidus the Flenser'),
+(@GETRY,0,6,7,52,0,100,0,0,@GETRY,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On text 0 over - Say line'),
+(@GETRY,0,7,0,61,0,100,0,0,0,0,0,53,0,@GETRY,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On text 0 over - Start WP'),
+(@GETRY,0,8,0,11,0,100,0,0,0,0,0,81,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On spawn - Set npcflag questgiver'),
+(@GETRY,0,9,0,40,0,100,0,8,@GETRY,0,0,11,34189,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP8 reached - Spellcast Stealth'),
+(@GETRY,0,10,11,40,0,100,0,9,@GETRY,0,0,45,0,2,0,0,0,0,19,@VARIDUS,30,0,0,0,0,0, 'Shadowstalker Getry - On WP 9 reached - Set data 0 2 Varidus the Flenser'),
+(@GETRY,0,11,0,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,19,@VARIDUS,30,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Send targetlist to Varidus the Flenser'),
+(@GETRY,0,12,13,40,0,100,0,10,@GETRY,0,0,66,0,0,0,0,0,0,19,@VARIDUS,20,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Turn to'),
+(@GETRY,0,13,14,61,0,100,0,0,0,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Set home position'),
+(@GETRY,0,14,15,61,0,100,0,0,0,0,0,28,34189,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Remove aura Stealth'),
+(@GETRY,0,15,16,61,0,100,0,0,0,0,0,11,45922,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Spellcast Shadow Prison'),
+(@GETRY,0,16,17,61,0,100,0,0,0,0,0,86,45922,0,12,1,0,0,12,1,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Crosscast Shadow Prison'),
+(@GETRY,0,17,0,61,0,100,0,0,0,0,0,45,0,3,0,0,0,0,19,@VARIDUS,20,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached - Set Data 0 3 Varidus the Flenser'),
+(@GETRY,0,18,19,38,0,100,0,1,1,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On data 1 1 set - Remove unit_flags IMMUNE_TO_PC, IMMUNE_TO_NPC'),
+(@GETRY,0,19,0,61,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,@VARIDUS,20,0,0,0,0,0, 'Shadowstalker Getry - On data 1 1 set - Start attack'),
+(@GETRY,0,20,21,38,0,100,0,1,3,0,0,15,@QUEST,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Shadowstalker Getry - On data 1 3 set - Quest credit'),
+(@GETRY,0,21,0,61,0,100,0,0,0,0,0,1,2,5000,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On data 1 3 set - Say line'),
+(@GETRY,0,22,0,52,0,100,0,2,@GETRY,0,0,1,3,5000,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On text 2 over - Say line'),
+(@GETRY,0,23,0,52,0,100,0,3,@GETRY,0,0,45,1,2,0,0,0,0,19,@SAURFANG,20,0,0,0,0,0, 'Shadowstalker Getry - On text 3 over - Set data 1 2 High Overlord Saurfang'),
+(@GETRY,0,24,0,38,0,100,0,1,4,0,0,53,0,@GETRY*100,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On data 1 4 set - Start WP movement'),
+(@GETRY,0,26,27,40,0,100,0,10,@GETRY*100,0,0,81,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached (Return) - Set npcflag questgiver'),
+(@GETRY,0,27,28,61,0,100,0,0,0,0,0,18,756,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached (Return) - Set unit_flags IMMUNE_TO_PC, IMMUNE_TO_NPC'),
+(@GETRY,0,28,0,61,0,100,0,0,0,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On WP10 reached (Return) - Set homeposition'),
+(@GETRY,0,29,30,8,0,100,0,45950,0,0,0,28,45922,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Shadowstalker Getry - On spellhit Saurfangs Rage - Remove aura Shadow Prison'),
+(@GETRY,0,30,0,61,0,100,0,0,0,0,0,28,45922,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Shadowstalker Getry - On spellhit Saurfangs Rage - Remove aura Shadow Prison'),
+
+(@NECROLORD,0,0,0,11,0,100,0,0,0,0,0,53,0,@NECROLORD,0,0,0,0,1,0,0,0,0,0,0,0, 'En''kilah Necrolord - On spawn - Start WP movement'),
+(@NECROLORD,0,1,2,40,0,100,0,2,@NECROLORD,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'En''kilah Necrolord - On reached WP1 - Set home position'),
+(@NECROLORD,0,2,0,61,0,100,0,0,0,0,0,45,0,4,0,0,0,0,19,@VARIDUS,10,0,0,0,0,0, 'En''kilah Necrolord - On reached WP1 - Set data 0 4 Varidus the Flenser'),
+(@NECROLORD,0,3,4,38,0,100,0,0,1,0,0,66,0,0,0,0,0,0,19,@VARIDUS,10,0,0,0,0,0, 'En''kilah Necrolord - On data 0 1 set - Turn to'),
+(@NECROLORD,0,4,0,61,0,100,0,0,0,0,0,36,@SAURFANG,0,0,0,0,0,1,0,0,0,0,0,0,0, 'En''kilah Necrolord - On data 0 1 set - Change entry to High Overlord Saurfang'),
+(@NECROLORD,0,5,0,38,0,100,0,0,2,0,0,1,0,2500,0,0,0,0,12,1,0,0,0,0,0,0, 'High Overlord Saurfang - On data 0 2 set - Say line'),
+(@NECROLORD,0,6,0,52,0,100,0,0,@SAURFANG,0,0,66,0,0,0,0,0,0,12,1,0,0,0,0,0,0, 'High Overlord Saurfang - On text 0 over - Turn to'),
+(@NECROLORD,0,7,0,38,0,100,0,0,3,0,0,1,1,4000,0,0,0,0,12,1,0,0,0,0,0,0, 'High Overlord Saurfang - On data 0 3 set - Say line'),
+(@NECROLORD,0,8,0,52,0,100,0,1,@SAURFANG,0,0,66,0,0,0,0,0,0,19,@VARIDUS,10,0,0,0,0,0, 'High Overlord Saurfang - On text 1 over - Turn to'),
+(@NECROLORD,0,9,0,38,0,100,0,0,4,0,0,1,2,5000,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On data 0 4 set - Say line'),
+(@NECROLORD,0,10,0,52,0,100,0,2,@SAURFANG,0,0,1,3,12000,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On text 2 over - Say line'),
+(@NECROLORD,0,11,0,52,0,100,0,3,@SAURFANG,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On text 3 over - Say line'),
+(@NECROLORD,0,13,14,38,0,100,0,1,1,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On data 1 1 set - Remove unit_flags IMMUNE_TO_NPC'),
+(@NECROLORD,0,14,15,61,0,100,0,0,0,0,0,11,45950,0,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On data 1 1 set - Spellcast Saurfang''s Rage'),
+(@NECROLORD,0,15,0,61,0,100,0,0,0,0,0,1,5,1000,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On data 1 1 set - Say line'),
+(@NECROLORD,0,16,0,52,0,100,0,5,@SAURFANG,0,0,1,6,1000,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On text 5 over - Say line'),
+(@NECROLORD,0,17,0,61,0,100,0,0,0,0,0,41,3000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On text 7 over - Despawn after 3 seconds'),
+(@NECROLORD,0,18,0,9,0,100,0,0,5,20000,25000,11,41097,0,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On target within 5y - Spellcast Whirlwind'),
+(@NECROLORD,0,19,0,0,0,100,0,3000,7000,3000,8000,11,16044,0,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On update IC - Spellcast Cleave'),
+(@NECROLORD,0,20,0,0,0,100,0,2000,7000,5000,7000,11,24573,0,0,0,0,0,2,0,0,0,0,0,0,0, 'High Overlord Saurfang - On update IC - Spellcast Mortal Strike'),
+(@NECROLORD,0,21,0,9,0,100,0,8,25,5000,5000,11,15749,0,0,0,0,0,2,0,0,0,0,0,0,0, 'High Overlord Saurfang - On target within 8-25y - Spellcast Shield Charge'),
+(@NECROLORD,0,22,0,38,0,100,0,0,5,0,0,66,0,0,0,0,0,0,12,1,0,0,0,0,0,0, 'High Overlord Saurfang - On data 0 5 set - Turn to'),
+(@NECROLORD,0,23,0,38,0,100,0,1,2,0,0,1,7,3000,0,0,0,0,1,0,0,0,0,0,0,0, 'High Overlord Saurfang - On data 1 2 set - Say line'),
+(@NECROLORD,0,24,17,52,0,100,0,7,@SAURFANG,0,0,45,1,4,0,0,0,0,19,@GETRY,20,0,0,0,0,0, 'High Overlord Saurfang - On text 7 over - Set data 1 4 Shadowstalker Getry'),
+
+(@VARIDUS*100,9,0,0,0,0,100,0,0,0,0,0,45,0,5,0,0,0,0,19,@NECROLORD,10,0,0,0,0,0, 'Varidus the Flenser script - Set data 0 5 En''kilah Necrolord'),
+(@VARIDUS*100,9,1,0,0,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,2,0,0,0,100,0,5000,5000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,3,0,0,0,100,0,3000,3000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,4,0,0,0,100,0,4000,4000,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,5,0,0,0,100,0,6000,6000,0,0,66,0,0,0,0,0,0,19,@NECROLORD,10,0,0,0,0,0, 'Varidus the Flenser script - Turn to'),
+(@VARIDUS*100,9,6,0,0,0,100,0,1000,1000,0,0,1,6,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,7,0,0,0,100,0,6000,6000,0,0,45,0,1,0,0,0,0,19,@NECROLORD,10,0,0,0,0,0, 'Varidus the Flenser script - Set data 0 1 En''kilah Necrolord'),
+(@VARIDUS*100,9,8,0,0,0,100,0,1000,1000,0,0,45,0,2,0,0,0,0,19,@SAURFANG,10,0,0,0,0,0, 'Varidus the Flenser script - Set data 0 2 High Overlord Saurfang'),
+(@VARIDUS*100,9,9,0,0,0,100,0,1500,1500,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,10,0,0,0,100,0,2000,2000,0,0,45,0,3,0,0,0,0,19,@SAURFANG,10,0,0,0,0,0, 'Varidus the Flenser script - Set data 0 3 High Overlord Saurfang'),
+(@VARIDUS*100,9,11,0,0,0,100,0,5000,5000,0,0,45,0,4,0,0,0,0,19,@SAURFANG,10,0,0,0,0,0, 'Varidus the Flenser script - Set data 0 4 High Overlord Saurfang'),
+(@VARIDUS*100,9,12,0,0,0,100,0,13000,13000,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,13,0,0,0,100,0,10000,10000,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Say line'),
+(@VARIDUS*100,9,14,0,0,0,100,0,2000,2000,0,0,1,10,2000,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser - On text 9 over - Say line'),
+(@VARIDUS*100,9,15,0,0,0,100,0,0,0,0,0,11,45949,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Varidus the Flenser script - Spellcast Release Aberration'),
+(@VARIDUS*100,9,16,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,@GETRY,20,0,0,0,0,0, 'Varidus the Flenser script - Set data 1 1 Shadowstalker Getry'),
+(@VARIDUS*100,9,17,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,19,@SAURFANG,20,0,0,0,0,0, 'Varidus the Flenser script - Set data 1 1 Saurfang');
+
+DELETE FROM `creature_text` WHERE `entry` IN (@GETRY,@VARIDUS,@SAURFANG);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@GETRY,0,0,'This is it, $N. The start of the end of the world. And you''re here to see it off...',12,1,100,1,0,0,'Shadowstalker Getry'),
+(@GETRY,1,0,'Let''s go...',12,1,100,0,0,0,'Shadowstalker Getry'),
+(@GETRY,2,0,'I... I can''t believe it... Saurfang... I... I am honored... honored to have fought along side you, sir.',12,1,100,0,0,0,'Shadowstalker Getry'),
+(@GETRY,3,0,'You should return to Warsong Hold now, friend. Hellscream will surely want to hear of what just happened here... of Saurfang...',12,1,100,0,0,0,'Shadowstalker Getry'),
+(@VARIDUS,0,0,'Is this it? Is this all the mighty Horde could muster?',12,0,100,6,0,0,'Varidus the Flenser'),
+(@VARIDUS,1,0,'Pathetic.',12,0,100,11,0,0,'Varidus the Flenser'),
+(@VARIDUS,2,0,'I''ve never understood your type. The hero...',12,0,100,1,0,0,'Varidus the Flenser'),
+(@VARIDUS,3,0,'Why won''t you just let go? Why do you fight the inevitable?',12,0,100,6,0,0,'Varidus the Flenser'),
+(@VARIDUS,4,0,'The Lich King cannot be stopped. Accept it.',12,0,100,274,0,0,'Varidus the Flenser'),
+(@VARIDUS,5,0,'This world is coming to an end. Let. It. Burn.',12,0,100,397,0,0,'Varidus the Flenser'),
+(@VARIDUS,6,0,'Take $g him:her; away and prepare $g him:her; for reanimation.',12,0,100,1,0,0,'Varidus the Flenser'),
+(@VARIDUS,7,0,'What''s this now?',12,0,100,1,0,0,'Varidus the Flenser'),
+(@VARIDUS,8,0,'Then you are a fool.',12,0,100,25,0,0,'Varidus the Flenser'),
+(@VARIDUS,9,0,'You? A lone orc? Against me and...',12,0,100,397,0,0,'Varidus the Flenser'),
+(@VARIDUS,10,0,'RISE!',14,0,100,0,0,0,'Varidus the Flenser'),
+(@VARIDUS,11,0,'I will reanimate them all as servants of the Lich King! Bring them here...',14,0,100,0,0,0,'Varidus the Flenser'),
+(@SAURFANG,0,0,'I''ll rip your shriveled heart out with my bare hands before any harm comes to $N, necromancer.',12,1,100,5,0,0,'High Overlord Saurfang'),
+(@SAURFANG,1,0,'You were never alone, $N.',12,1,100,1,0,0,'High Overlord Saurfang'),
+(@SAURFANG,2,0,'This world that you seek to destroy is our home.',12,1,100,1,0,0,'High Overlord Saurfang'),
+(@SAURFANG,3,0,'We will fight you with every fiber of our being - until we are nothing more than dust and debris. We will fight until the end.',12,1,100,1,0,0,'High Overlord Saurfang'),
+(@SAURFANG,4,0,'A fool who is about to end you, necrolord. There will be nothing left of you for the Lich King to reanimate!',12,1,100,397,0,0,'High Overlord Saurfang'),
+(@SAURFANG,5,0,'%s''s eyes glow red for a brief moment.',16,0,100,0,0,0,'High Overlord Saurfang'),
+(@SAURFANG,6,0,'Is that the best you can do?',12,1,100,0,0,0,'High Overlord Saurfang'),
+(@SAURFANG,7,0,'You''ll make no mention of me. Either of you!',12,1,100,0,0,0,'High Overlord Saurfang');
+
+DELETE FROM `waypoints` WHERE `entry` IN (@GETRY,@NECROLORD,@GETRY*100,@ABERRATION);
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(@GETRY, 1, 3109.214111,6587.148438,91.369102, 'Shadowstalker Getry'),
+(@GETRY, 2, 3115.414062,6595.680176,91.362068, 'Shadowstalker Getry'),
+(@GETRY, 3, 3125.109863,6590.983887,91.378548, 'Shadowstalker Getry'),
+(@GETRY, 4, 3123.863281,6582.144043,88.786133, 'Shadowstalker Getry'),
+(@GETRY, 5, 3117.805664,6583.018555,86.219604, 'Shadowstalker Getry'),
+(@GETRY, 6, 3118.874512,6590.157715,83.402168, 'Shadowstalker Getry'),
+(@GETRY, 7, 3127.298340,6589.030273,79.707741, 'Shadowstalker Getry'),
+(@GETRY, 8, 3122.869,6578.715,78.051, 'Shadowstalker Getry'),
+(@GETRY, 9, 3123.309,6560.647,78.61833, 'Shadowstalker Getry'),
+(@GETRY, 10, 3122.208,6549.245,79.64079, 'Shadowstalker Getry'),
+(@ABERRATION, 1, 3119.973,6539.042,80.1591, 'Warsong Aberration'),
+(@NECROLORD, 1, 3125.963,6536.96,79.93521, 'En''kilah Necrolord'),
+(@NECROLORD, 2, 3120.883,6542.995,79.95628, 'En''kilah Necrolord'),
+(@GETRY*100, 1, 3123.355957,6575.417969,78.330284, 'Shadowstalker Getry'),
+(@GETRY*100, 2, 3126.639404,6584.798828,77.656845, 'Shadowstalker Getry'),
+(@GETRY*100, 3, 3127.298340,6589.030273,79.707741, 'Shadowstalker Getry'),
+(@GETRY*100, 4, 3118.874512,6590.157715,83.402168, 'Shadowstalker Getry'),
+(@GETRY*100, 5, 3117.805664,6583.018555,86.219604, 'Shadowstalker Getry'),
+(@GETRY*100, 6, 3123.863281,6582.144043,88.786133, 'Shadowstalker Getry'),
+(@GETRY*100, 7, 3125.109863,6590.983887,91.378548, 'Shadowstalker Getry'),
+(@GETRY*100, 8, 3115.414062,6595.680176,91.362068, 'Shadowstalker Getry'),
+(@GETRY*100, 9, 3109.214111,6587.148438,91.369102, 'Shadowstalker Getry'),
+(@GETRY*100, 10, 3113.419922,6576.810059,97.090698, 'Shadowstalker Getry');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=45949;
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=@GETRY;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(13,1,45949,0,0,31,0,3,@PRISONER,0,0,0,'','Spell Release Aberration targets Infested Prisoner'),
+(22,37,@GETRY,0,0,36,1,0,0,0,0,0,'','Only execute SAI if Shadowstalker Getry alive');
+
+DELETE FROM `creature_equip_template` WHERE `entry`=@SAURFANG;
+INSERT INTO `creature_equip_template` (`entry`, `id`, `itemEntry1`, `itemEntry2`, `itemEntry3`) VALUES
+(@SAURFANG,1,21580,0,0);
+
+DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=45949;
+INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `params_0`, `params_1`, `comment`) VALUES
+(0,45949,64,'','','Ignore LOS on Release Aberration');
diff --git a/sql/updates/world/2013_06_07_00_world_creature_ai_scripts.sql b/sql/updates/world/2013_06_07_00_world_creature_ai_scripts.sql
new file mode 100644
index 00000000000..c6abfaf4039
--- /dev/null
+++ b/sql/updates/world/2013_06_07_00_world_creature_ai_scripts.sql
@@ -0,0 +1 @@
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=25730;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index b3deb7ae7de..4a2408b7f0a 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -438,27 +438,7 @@ bool Creature::UpdateEntry(uint32 Entry, uint32 team, const CreatureData* data)
ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
}
- // Set the movement flags if the creature is in that mode. (Only fly if actually in air, only swim if in water, etc)
- float ground = GetPositionZ();
- GetMap()->GetWaterOrGroundLevel(GetPositionX(), GetPositionY(), GetPositionZ(), &ground);
-
- bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZ(), ground - 0.05f); // Can be underground too, prevent the falling
-
- if (cInfo->InhabitType & INHABIT_AIR && cInfo->InhabitType & INHABIT_GROUND && isInAir)
- SetCanFly(true);
- else if (cInfo->InhabitType & INHABIT_AIR && isInAir)
- SetDisableGravity(true);
- else
- {
- SetCanFly(false);
- SetDisableGravity(false);
- }
-
- if (cInfo->InhabitType & INHABIT_WATER && IsInWater())
- AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
- else
- RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
-
+ UpdateMovementFlags();
return true;
}
@@ -472,33 +452,7 @@ void Creature::Update(uint32 diff)
m_vehicleKit->Reset();
}
- if (IsInWater())
- {
- if (canSwim())
- AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
- }
- else
- {
- if (canWalk())
- RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
- }
-
- // Set the movement flags if the creature is in that mode. (Only fly if actually in air, only swim if in water, etc)
- float ground = GetPositionZ();
- GetMap()->GetWaterOrGroundLevel(GetPositionX(), GetPositionY(), GetPositionZ(), &ground);
-
- bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZ(), ground - 0.05f); // Can be underground too, prevent the falling
- CreatureTemplate const* cinfo = GetCreatureTemplate();
-
- if (cinfo->InhabitType & INHABIT_AIR && cinfo->InhabitType & INHABIT_GROUND && isInAir)
- SetCanFly(true);
- else if (cinfo->InhabitType & INHABIT_AIR && isInAir)
- SetDisableGravity(true);
- else
- {
- SetCanFly(false);
- SetDisableGravity(false);
- }
+ UpdateMovementFlags();
switch (m_deathState)
{
@@ -1495,30 +1449,10 @@ void Creature::setDeathState(DeathState s)
SetFullHealth();
SetLootRecipient(NULL);
ResetPlayerDamageReq();
- CreatureTemplate const* cinfo = GetCreatureTemplate();
- SetWalk(true);
-
- // Set the movement flags if the creature is in that mode. (Only fly if actually in air, only swim if in water, etc)
- float ground = GetPositionZ();
- GetMap()->GetWaterOrGroundLevel(GetPositionX(), GetPositionY(), GetPositionZ(), &ground);
- bool isInAir = G3D::fuzzyGt(GetPositionZ(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZ(), ground - 0.05f); // Can be underground too, prevent the falling
-
- if (cinfo->InhabitType & INHABIT_AIR && cinfo->InhabitType & INHABIT_GROUND && isInAir)
- SetCanFly(true);
- else if (cinfo->InhabitType & INHABIT_AIR && isInAir)
- SetDisableGravity(true);
- else
- {
- SetCanFly(false);
- SetDisableGravity(false);
- }
-
- if (cinfo->InhabitType & INHABIT_WATER && IsInWater())
- AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
- else
- RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
+ UpdateMovementFlags();
+ CreatureTemplate const* cinfo = GetCreatureTemplate();
SetUInt32Value(UNIT_NPC_FLAGS, cinfo->npcflag);
ClearUnitState(uint32(UNIT_STATE_ALL_STATE));
SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool));
@@ -2588,3 +2522,29 @@ Unit* Creature::SelectNearestHostileUnitInAggroRange(bool useLOS) const
return target;
}
+
+void Creature::UpdateMovementFlags()
+{
+ // Set the movement flags if the creature is in that mode. (Only fly if actually in air, only swim if in water, etc)
+ float ground = GetMap()->GetHeight(GetPositionX(), GetPositionY(), GetPositionZMinusOffset());
+
+ bool isInAir = !IsFalling() && (G3D::fuzzyGt(GetPositionZMinusOffset(), ground + 0.05f) || G3D::fuzzyLt(GetPositionZMinusOffset(), ground - 0.05f)); // Can be underground too, prevent the falling
+
+ if (GetCreatureTemplate()->InhabitType & INHABIT_AIR && isInAir)
+ {
+ if (GetCreatureTemplate()->InhabitType & INHABIT_GROUND)
+ SetCanFly(true);
+ else
+ SetDisableGravity(true);
+ }
+ else
+ {
+ SetCanFly(false);
+ SetDisableGravity(false);
+ }
+
+ if (GetCreatureTemplate()->InhabitType & INHABIT_WATER && IsInWater())
+ AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
+ else
+ RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
+}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 6459b80a063..6b6edd7454f 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -520,6 +520,9 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
bool HasSpell(uint32 spellID) const;
bool UpdateEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
+
+ void UpdateMovementFlags();
+
bool UpdateStats(Stats stat);
bool UpdateAllStats();
void UpdateResistances(uint32 school);
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index ebd94b84079..5670f08c79f 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4524,16 +4524,16 @@ Mail* Player::GetMail(uint32 id)
void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const
{
- for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
+ if (target == this)
{
- if (m_items[i] == NULL)
- continue;
+ for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i)
+ {
+ if (m_items[i] == NULL)
+ continue;
- m_items[i]->BuildCreateUpdateBlockForPlayer(data, target);
- }
+ m_items[i]->BuildCreateUpdateBlockForPlayer(data, target);
+ }
- if (target == this)
- {
for (uint8 i = INVENTORY_SLOT_BAG_START; i < BANK_SLOT_BAG_END; ++i)
{
if (m_items[i] == NULL)
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index c30fa910f76..3538188a234 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -24,6 +24,7 @@
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
#include "SpellMgr.h"
+#include "World.h"
inline bool _ModifyUInt32(bool apply, uint32& baseValue, int32& amount)
{
@@ -575,6 +576,10 @@ void Player::UpdateBlockPercentage()
value += GetTotalAuraModifier(SPELL_AURA_MOD_BLOCK_PERCENT);
// Increase from rating
value += GetRatingBonusValue(CR_BLOCK);
+
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) : value;
+
value = value < 0.0f ? 0.0f : value;
}
SetStatFloatValue(PLAYER_BLOCK_PERCENTAGE, value);
@@ -609,6 +614,10 @@ void Player::UpdateCritPercentage(WeaponAttackType attType)
float value = GetTotalPercentageModValue(modGroup) + GetRatingBonusValue(cr);
// Modify crit from weapon skill and maximized defense skill of same level victim difference
value += (int32(GetWeaponSkillValue(attType)) - int32(GetMaxSkillValueForLevel())) * 0.04f;
+
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) : value;
+
value = value < 0.0f ? 0.0f : value;
SetStatFloatValue(index, value);
}
@@ -700,6 +709,10 @@ void Player::UpdateParryPercentage()
nondiminishing += GetTotalAuraModifier(SPELL_AURA_MOD_PARRY_PERCENT);
// apply diminishing formula to diminishing parry chance
value = nondiminishing + diminishing * parry_cap[pclass] / (diminishing + parry_cap[pclass] * m_diminishing_k[pclass]);
+
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) : value;
+
value = value < 0.0f ? 0.0f : value;
}
SetStatFloatValue(PLAYER_PARRY_PERCENTAGE, value);
@@ -735,6 +748,9 @@ void Player::UpdateDodgePercentage()
uint32 pclass = getClass()-1;
float value = nondiminishing + (diminishing * dodge_cap[pclass] / (diminishing + dodge_cap[pclass] * m_diminishing_k[pclass]));
+ if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE))
+ value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) : value;
+
value = value < 0.0f ? 0.0f : value;
SetStatFloatValue(PLAYER_DODGE_PERCENTAGE, value);
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b62b5124987..326f41b2e0e 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -17019,6 +17019,11 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const
*data << (float)m_movementInfo.splineElevation;
}
+bool Unit::IsFalling() const
+{
+ return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR) || movespline->isFalling();
+}
+
void Unit::SetCanFly(bool apply)
{
if (apply)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index c65f08ffa6f..707c42fe035 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -2113,6 +2113,7 @@ class Unit : public WorldObject
bool isTurning() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_TURNING); }
virtual bool CanFly() const = 0;
bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_DISABLE_GRAVITY); }
+ bool IsFalling() const;
void SetCanFly(bool apply);
void RewardRage(uint32 damage, uint32 weaponSpeedHitFactor, bool attacker);
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index d59f475f300..493ddc662b4 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -1934,25 +1934,14 @@ float Map::GetHeight(uint32 phasemask, float x, float y, float z, bool vmap/*=tr
bool Map::IsInWater(float x, float y, float pZ, LiquidData* data) const
{
- // Check surface in x, y point for liquid
- if (const_cast<Map*>(this)->GetGrid(x, y))
- {
- LiquidData liquid_status;
- LiquidData* liquid_ptr = data ? data : &liquid_status;
- if (getLiquidStatus(x, y, pZ, MAP_ALL_LIQUIDS, liquid_ptr))
- return true;
- }
- return false;
+ LiquidData liquid_status;
+ LiquidData* liquid_ptr = data ? data : &liquid_status;
+ return getLiquidStatus(x, y, pZ, MAP_ALL_LIQUIDS, liquid_ptr) & (LIQUID_MAP_IN_WATER | LIQUID_MAP_UNDER_WATER);
}
bool Map::IsUnderWater(float x, float y, float z) const
{
- if (const_cast<Map*>(this)->GetGrid(x, y))
- {
- if (getLiquidStatus(x, y, z, MAP_LIQUID_TYPE_WATER|MAP_LIQUID_TYPE_OCEAN)&LIQUID_MAP_UNDER_WATER)
- return true;
- }
- return false;
+ return getLiquidStatus(x, y, z, MAP_LIQUID_TYPE_WATER|MAP_LIQUID_TYPE_OCEAN) & LIQUID_MAP_UNDER_WATER;
}
bool Map::CheckGridIntegrity(Creature* c, bool moved) const
diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h
index b18166ea615..a76c552079b 100644
--- a/src/server/game/Movement/Spline/MoveSpline.h
+++ b/src/server/game/Movement/Spline/MoveSpline.h
@@ -115,6 +115,7 @@ namespace Movement
uint32 GetId() const { return m_Id; }
bool Finalized() const { return splineflags.done; }
bool isCyclic() const { return splineflags.cyclic; }
+ bool isFalling() const { return splineflags.falling; }
const Vector3 FinalDestination() const { return Initialized() ? spline.getPoint(spline.last()) : Vector3(); }
const Vector3 CurrentDestination() const { return Initialized() ? spline.getPoint(point_Idx+1) : Vector3(); }
int32 currentPathIdx() const;
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 9d2ee2eb2ba..645c14b8758 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1222,6 +1222,13 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_WINTERGRASP_NOBATTLETIME] = ConfigMgr::GetIntDefault("Wintergrasp.NoBattleTimer", 150);
m_int_configs[CONFIG_WINTERGRASP_RESTART_AFTER_CRASH] = ConfigMgr::GetIntDefault("Wintergrasp.CrashRestartTimer", 10);
+ // Stats limits
+ m_bool_configs[CONFIG_STATS_LIMITS_ENABLE] = ConfigMgr::GetBoolDefault("Stats.Limits.Enable", false);
+ m_float_configs[CONFIG_STATS_LIMITS_DODGE] = ConfigMgr::GetFloatDefault("Stats.Limits.Dodge", 95.0f);
+ m_float_configs[CONFIG_STATS_LIMITS_PARRY] = ConfigMgr::GetFloatDefault("Stats.Limits.Parry", 95.0f);
+ m_float_configs[CONFIG_STATS_LIMITS_BLOCK] = ConfigMgr::GetFloatDefault("Stats.Limits.Block", 95.0f);
+ m_float_configs[CONFIG_STATS_LIMITS_CRIT] = ConfigMgr::GetFloatDefault("Stats.Limits.Crit", 95.0f);
+
// call ScriptMgr if we're reloading the configuration
if (reload)
sScriptMgr->OnConfigLoad(reload);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 984a1709ac8..12586ed4969 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -159,6 +159,7 @@ enum WorldBoolConfigs
CONFIG_WINTERGRASP_ENABLE,
CONFIG_UI_QUESTLEVELS_IN_DIALOGS, // Should we add quest levels to the title in the NPC dialogs?
CONFIG_EVENT_ANNOUNCE,
+ CONFIG_STATS_LIMITS_ENABLE,
BOOL_CONFIG_VALUE_COUNT
};
@@ -175,6 +176,10 @@ enum WorldFloatConfigs
CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS,
CONFIG_THREAT_RADIUS,
CONFIG_CHANCE_OF_GM_SURVEY,
+ CONFIG_STATS_LIMITS_DODGE,
+ CONFIG_STATS_LIMITS_PARRY,
+ CONFIG_STATS_LIMITS_BLOCK,
+ CONFIG_STATS_LIMITS_CRIT,
FLOAT_CONFIG_VALUE_COUNT
};
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index a9b09e5d94f..9577b3d841f 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -18,6 +18,7 @@
# GAME MASTER SETTINGS
# VISIBILITY AND DISTANCES
# SERVER RATES
+# STATS LIMITS
# AUTO BROADCAST
# BATTLEGROUND CONFIG
# BATTLEFIELD CONFIG
@@ -2004,6 +2005,28 @@ Die.Command.Mode = 1
###################################################################################################
###################################################################################################
+# STATS LIMITS
+#
+# Stats.Limits.Enable
+# Description: Enable or disable stats system
+# Default: 0 - Disabled
+
+Stats.Limits.Enable = 0
+
+#
+# Stats.Limit.[STAT]
+# Description: Set percentage limit for dodge, parry, block and crit rating
+# Default: 95.0 (95%)
+
+Stats.Limits.Dodge = 95.0
+Stats.Limits.Parry = 95.0
+Stats.Limits.Block = 95.0
+Stats.Limits.Crit = 95.0
+
+#
+###################################################################################################
+
+###################################################################################################
# AUTO BROADCAST
#
# AutoBroadcast.On