From 0d6b8c0d3a8141b61a2413c46131ca85fb44bf38 Mon Sep 17 00:00:00 2001 From: Rushor Date: Tue, 9 Feb 2016 18:16:11 +0100 Subject: [PATCH 01/93] Core/SmartScript: create SMART_ACTION_SET_CORPSE_DELAY by Vincent-Michael, updates #16488 New smart action SMART_ACTION_SET_CORPSE_DELAY: - Allows setting the delay of corpse decay time in SmartScript (PR opened on request from Rushor) Constructive feedback is welcome. --- src/server/game/AI/SmartScripts/SmartScript.cpp | 15 +++++++++++++++ .../game/AI/SmartScripts/SmartScriptMgr.cpp | 1 + src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 +++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 808491495a9..01f47582926 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2330,6 +2330,21 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; } } + case SMART_ACTION_SET_CORPSE_DELAY: + { + ObjectList* targets = GetTargets(e, unit); + if (!targets) + break; + + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) + { + if (IsCreature(*itr)) + (*itr)->ToCreature()->SetCorpseDelay(e.action.corpseDelay.timer); + } + + delete targets; + break; + } default: TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 977847e60c9..6f424003006 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1214,6 +1214,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_REMOVE_GO_FLAG: case SMART_ACTION_SUMMON_CREATURE_GROUP: case SMART_ACTION_RISE_UP: + case SMART_ACTION_SET_CORPSE_DELAY: break; default: TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index c0ea648462d..d60834c9fef 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -551,8 +551,9 @@ enum SMART_ACTION SMART_ACTION_START_CLOSEST_WAYPOINT = 113, // wp1, wp2, wp3, wp4, wp5, wp6, wp7 SMART_ACTION_RISE_UP = 114, // distance SMART_ACTION_RANDOM_SOUND = 115, // soundId1, soundId2, soundId3, soundId4, soundId5, onlySelf + SMART_ACTION_SET_CORPSE_DELAY = 116, // timer - SMART_ACTION_END = 116 + SMART_ACTION_END = 117 }; struct SmartAction @@ -1034,6 +1035,11 @@ struct SmartAction uint32 onlySelf; } randomSound; + struct + { + uint32 timer; + } corpseDelay; + //! Note for any new future actions //! All parameters must have type uint32 From 405917e70f45477a4b86a5f13e2d26d617a9a903 Mon Sep 17 00:00:00 2001 From: ariel- Date: Sun, 21 Feb 2016 00:38:21 -0300 Subject: [PATCH 02/93] Core/Unit: Fix typo introduced in 6f2b0860481390043a89702be4b1540f5c472dee --- src/server/game/Entities/Unit/Unit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c21301c27b2..80c5febdcc9 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12341,7 +12341,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) if (Creature* creature = ToCreature()) { uint32 immuneMask = creature->GetCreatureTemplate()->MechanicImmuneMask; - if (immuneMask & (1 << MECHANIC_SNARE) || immuneMask & (1 << MECHANIC_DAZE)) + if (immuneMask & (1 << (MECHANIC_SNARE - 1)) || immuneMask & (1 << (MECHANIC_DAZE - 1))) break; } From 2345e848559b787710abac3bb73b513a069084c9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 21 Feb 2016 14:13:00 +0100 Subject: [PATCH 03/93] Final build fix for gcc 4.7 (no longer supported in 8 days) --- src/server/shared/Networking/NetworkThread.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/shared/Networking/NetworkThread.h b/src/server/shared/Networking/NetworkThread.h index 5eb2fcb2f6a..be0e9f10176 100644 --- a/src/server/shared/Networking/NetworkThread.h +++ b/src/server/shared/Networking/NetworkThread.h @@ -147,9 +147,9 @@ protected: if (sock->IsOpen()) sock->CloseSocket(); - SocketRemoved(sock); + this->SocketRemoved(sock); - --_connections; + --this->_connections; return true; } From b53b81d8a652d4a53835138f67b3154c6b1ce689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20L=C3=B6rwald?= Date: Sun, 21 Feb 2016 21:52:31 -0300 Subject: [PATCH 04/93] cmake: use CMAKE_BUILD_TYPE instead of CONFIGURATION as BUILD_DIRECTIVE (cherry picked from commit 06391e5e9dff58a265d42a8a8093d0a57b8e2775) --- cmake/compiler/clang/settings.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/compiler/clang/settings.cmake b/cmake/compiler/clang/settings.cmake index 4dad4cb7820..261a55b285f 100644 --- a/cmake/compiler/clang/settings.cmake +++ b/cmake/compiler/clang/settings.cmake @@ -1,5 +1,5 @@ # Set build-directive (used in core to tell which buildtype we used) -add_definitions(-D_BUILD_DIRECTIVE='"$(CONFIGURATION)"') +add_definitions(-D_BUILD_DIRECTIVE='"${CMAKE_BUILD_TYPE}"') if(WITH_WARNINGS) set(WARNING_FLAGS "-W -Wall -Wextra -Winit-self -Wfatal-errors -Wno-mismatched-tags") From 9c0deaaebbbd2861e10a365e283000008a2a188f Mon Sep 17 00:00:00 2001 From: treeston Date: Mon, 22 Feb 2016 04:30:33 +0100 Subject: [PATCH 05/93] Fix Baron Geddon and Ragnaros in Molten Core to do pure fire elemental damage with their melee attacks. --- sql/updates/world/2016_02_22_00_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2016_02_22_00_world.sql diff --git a/sql/updates/world/2016_02_22_00_world.sql b/sql/updates/world/2016_02_22_00_world.sql new file mode 100644 index 00000000000..d92ea91681a --- /dev/null +++ b/sql/updates/world/2016_02_22_00_world.sql @@ -0,0 +1,2 @@ +-- baron geddon & ragnaros do pure fire elemental damage with melee attacks +UPDATE `creature_template` SET `dmgschool`=2 WHERE `entry` in (12056,11502); From 546c8a5b8ead9d198f13e9a22cb7e573317b350a Mon Sep 17 00:00:00 2001 From: Dr-J Date: Mon, 22 Feb 2016 13:20:55 +0000 Subject: [PATCH 06/93] DB/Quest: Taken in the Night CPP > SAI conversion of script for http://www.wowhead.com/quest=10873/taken-in-the-night Also closes #16098 --- sql/updates/world/2016_02_22_01_world.sql | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 sql/updates/world/2016_02_22_01_world.sql diff --git a/sql/updates/world/2016_02_22_01_world.sql b/sql/updates/world/2016_02_22_01_world.sql new file mode 100644 index 00000000000..b1345bb1aab --- /dev/null +++ b/sql/updates/world/2016_02_22_01_world.sql @@ -0,0 +1,26 @@ +UPDATE`spell_dbc` SET `Effect1`=28, `EffectMiscValueB1`=64 WHERE `Id`IN(38953,38955,38956,38957,38958,38978); +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry` =22355; +DELETE FROM `smart_scripts` WHERE `entryorguid` =22355 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` BETWEEN 2235500 AND 2235505; + +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 +(22355, 0, 0, 1, 11, 0, 100, 1, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On Respawn - Disable Combat Movement (No Repeat)'), +(22355, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 18, 2097152, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On Respawn - Set Flag Disarmed (No Repeat)'), +(22355, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On Respawn - Set Invincibility HP'), +(22355, 0, 3, 0, 4, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On Agro - Store Target List (No Repeat)'), +(22355, 0, 4, 5, 2, 0, 100, 1, 0, 0, 0, 0, 11, 38949, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On 1% HP - Cast Terokkar Free Webbed Creature (No Repeat)'), +(22355, 0, 5, 6,61, 0, 100, 1, 0, 0, 0, 0, 11, 38950, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On 1% HP - Cast Terokkar Free Webbed Creature ON QUEST (No Repeat)'), +(22355, 0, 6, 0,61, 0, 100, 1, 0, 0, 0, 0, 87, 2233500, 2233501, 2233502, 2233503, 2233504, 2233505, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - On 1% HP - Run Random Script (No Repeat)'), +(2235500, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38953, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 1 - Cast Terokkar Free Webbed Creature '), +(2235500, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 1 - Die'), +(2235501, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38955, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 2 - Cast Terokkar Free Webbed Creature '), +(2235501, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 2 - Die'), +(2235502, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38956, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 3 - Cast Terokkar Free Webbed Creature '), +(2235502, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 3 - Die'), +(2235503, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38957, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 4 - Cast Terokkar Free Webbed Creature '), +(2235503, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 4 - Die'), +(2235504, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38958, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 5 - Cast Terokkar Free Webbed Creature '), +(2235504, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 5 - Die'), +(2235505, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 33, 22459, 2, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 6 - Kill Credit'), +(2235505, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 38978, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 6 - Cast Terokkar Free Webbed Creature '), +(2235505, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Netherweb Victim - Script 6 - Die'); From c14ef8852285e71b4e1b9ddba438c9917add9a2a Mon Sep 17 00:00:00 2001 From: Dr-J Date: Mon, 22 Feb 2016 14:43:40 +0000 Subject: [PATCH 07/93] DB/Quest: Something that does not melt Spawn additional http://www.wowhead.com/object=188441/splintered-bone-chunk Closes #16642 --- sql/updates/world/2016_02_22_02_world.sql | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sql/updates/world/2016_02_22_02_world.sql diff --git a/sql/updates/world/2016_02_22_02_world.sql b/sql/updates/world/2016_02_22_02_world.sql new file mode 100644 index 00000000000..dd62e6dce29 --- /dev/null +++ b/sql/updates/world/2016_02_22_02_world.sql @@ -0,0 +1,34 @@ +SET @OGUID := 74901; + +UPDATE `gameobject` SET `spawntimesecs`=120 WHERE `id`=188441; +DELETE FROM `gameobject` WHERE `id`=188441 AND `guid` BETWEEN @OGUID+0 AND @OGUID+28; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0 , 188441, 571, 1, 1, 4599.037, 285.0833, 95.23787, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+1 , 188441, 571, 1, 1, 4556.1, 231.2934, 96.77894, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+2 , 188441, 571, 1, 1, 4499.447, 108.0523, 89.83501, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+3 , 188441, 571, 1, 1, 4481.178, 127.8052, 88.98753, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+4 , 188441, 571, 1, 1, 4518.543, 226.8698, 90.04359, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+5 , 188441, 571, 1, 1, 4476.379, 92.48655, 88.96384, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+6 , 188441, 571, 1, 1, 4599.19, 760.0677, 93.87521, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+7, 188441, 571, 1, 1, 4593.348, 741.4844, 95.79951, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+8, 188441, 571, 1, 1, 4751.073, 453.6788, 126.705, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+9, 188441, 571, 1, 1, 4682.298, 401.2016, 113.0896, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+10, 188441, 571, 1, 1, 4751.073, 453.6788, 126.705, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+11, 188441, 571, 1, 1, 4682.298, 401.2016, 113.0896, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+12, 188441, 571, 1, 1, 4607.061, 650.2381, 99.33231, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+13, 188441, 571, 1, 1, 4617.78, 647.2289, 100.198, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+14, 188441, 571, 1, 1, 4603.35, 646.6047, 99.39375, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+15, 188441, 571, 1, 1, 4599.037, 285.0833, 95.23787, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+16, 188441, 571, 1, 1, 4601.033, 262.5729, 94.59935, 3.595379, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+17, 188441, 571, 1, 1, 4578.877, 274.382, 94.57744, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+18, 188441, 571, 1, 1, 4516.654, 214.9381, 90.17368, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+19, 188441, 571, 1, 1, 4570.082, 246.2316, 90.96891, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+20, 188441, 571, 1, 1, 4553.599, 249.401, 91.1224, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+21, 188441, 571, 1, 1, 4532.682, 221.2274, 92.86555, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+22, 188441, 571, 1, 1, 4481.178, 127.8052, 88.98753, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+23, 188441, 571, 1, 1, 4499.447, 108.0523, 89.83501, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+24, 188441, 571, 1, 1, 4505.154, 59.0905, 86.1317, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+25, 188441, 571, 1, 1, 4458.161, 127.8561, 89.45293, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+26, 188441, 571, 1, 1, 4556.1, 231.2934, 96.77894, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+27, 188441, 571, 1, 1, 4556.1, 231.2934, 96.77894, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 188441 (Area: 65) +(@OGUID+28, 188441, 571, 1, 1, 4583.655, 232.1632, 95.92954, 4.729844, 0, 0, 0, 1, 120, 255, 1); -- 188441 (Area: 65) From f2233f5d1426d12d16178eced900c1be9666983f Mon Sep 17 00:00:00 2001 From: Naios Date: Sun, 21 Feb 2016 03:30:47 +0100 Subject: [PATCH 08/93] Core/Updater: Convert an assertion into a fatal error * The error is triggered when it fails to open an update for hashing * See 'https://community.trinitycore.org/topic/12352-worldserver-crashes-on-database-update/' for details * And a minor cleanup in the UpdateFetcher (cherry picked from commit c43b80866593af3e9743fb55a395508c7dfb5d71) --- src/server/database/Updater/UpdateFetcher.cpp | 29 ++++++++++++------- src/server/database/Updater/UpdateFetcher.h | 8 ++--- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/server/database/Updater/UpdateFetcher.cpp b/src/server/database/Updater/UpdateFetcher.cpp index 001fdf20610..2d60cdb92ef 100644 --- a/src/server/database/Updater/UpdateFetcher.cpp +++ b/src/server/database/Updater/UpdateFetcher.cpp @@ -137,22 +137,33 @@ UpdateFetcher::AppliedFileStorage UpdateFetcher::ReceiveAppliedFiles() const return map; } -UpdateFetcher::SQLUpdate UpdateFetcher::ReadSQLUpdate(boost::filesystem::path const& file) const +std::string UpdateFetcher::ReadSQLUpdate(boost::filesystem::path const& file) const { std::ifstream in(file.c_str()); - WPFatal(in.is_open(), "Could not read an update file."); + if (!in.is_open()) + { + TC_LOG_FATAL("sql.updates", "Failed to open the sql update \"%s\" for reading! " + "Stopping the server to keep the database integrity, " + "try to identify and solve the issue or disabled the database updater.", + file.generic_string().c_str()); + + throw UpdateException("Opening the sql update failed!"); + } auto update = [&in] { std::ostringstream ss; ss << in.rdbuf(); - return Trinity::make_unique(ss.str()); + return ss.str(); }(); in.close(); return update; } -UpdateResult UpdateFetcher::Update(bool const redundancyChecks, bool const allowRehash, bool const archivedRedundancy, int32 const cleanDeadReferencesMaxCount) const +UpdateResult UpdateFetcher::Update(bool const redundancyChecks, + bool const allowRehash, + bool const archivedRedundancy, + int32 const cleanDeadReferencesMaxCount) const { LocaleFileStorage const available = GetFileList(); AppliedFileStorage applied = ReceiveAppliedFiles(); @@ -198,11 +209,9 @@ UpdateResult UpdateFetcher::Update(bool const redundancyChecks, bool const allow } } - // Read update from file - SQLUpdate const update = ReadSQLUpdate(availableQuery.first); - // Calculate hash - std::string const hash = CalculateHash(update); + std::string const hash = + CalculateHash(ReadSQLUpdate(availableQuery.first)); UpdateMode mode = MODE_APPLY; @@ -325,11 +334,11 @@ UpdateResult UpdateFetcher::Update(bool const redundancyChecks, bool const allow return UpdateResult(importedUpdates, countRecentUpdates, countArchivedUpdates); } -std::string UpdateFetcher::CalculateHash(SQLUpdate const& query) const +std::string UpdateFetcher::CalculateHash(std::string const& query) const { // Calculate a Sha1 hash based on query content. unsigned char digest[SHA_DIGEST_LENGTH]; - SHA1((unsigned char*)query->c_str(), query->length(), (unsigned char*)&digest); + SHA1((unsigned char*)query.c_str(), query.length(), (unsigned char*)&digest); return ByteArrayToHexStr(digest, SHA_DIGEST_LENGTH); } diff --git a/src/server/database/Updater/UpdateFetcher.h b/src/server/database/Updater/UpdateFetcher.h index 32f8516413d..c87efea2b02 100644 --- a/src/server/database/Updater/UpdateFetcher.h +++ b/src/server/database/Updater/UpdateFetcher.h @@ -103,16 +103,16 @@ private: typedef std::unordered_map HashToFileNameStorage; typedef std::unordered_map AppliedFileStorage; typedef std::vector DirectoryStorage; - typedef std::unique_ptr SQLUpdate; LocaleFileStorage GetFileList() const; - void FillFileListRecursively(Path const& path, LocaleFileStorage& storage, State const state, uint32 const depth) const; + void FillFileListRecursively(Path const& path, LocaleFileStorage& storage, + State const state, uint32 const depth) const; DirectoryStorage ReceiveIncludedDirectories() const; AppliedFileStorage ReceiveAppliedFiles() const; - SQLUpdate ReadSQLUpdate(Path const& file) const; - std::string CalculateHash(SQLUpdate const& query) const; + std::string ReadSQLUpdate(Path const& file) const; + std::string CalculateHash(std::string const& query) const; uint32 Apply(Path const& path) const; From b5369b7d874c337f49051f79dba9508f21a218de Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 22 Feb 2016 16:25:47 +0100 Subject: [PATCH 09/93] Core/Common: Add a generic config helper to access built-in overwriteable paths. * Adds CMAKE_COMMAND and CMAKE_BINARY_DIR to revision_data.h * Move the source and mysql exe path handling out of the DBUpdater. * Make some Config methods const for correctness. * Remove C & CXX flags from revision_data.h (was unused and didn't capture all cxx vars) * Reorder the link order to prevent `ld` from ignoring the file * Ref #15671 (cherry picked from commit 719159e2074ac2d0902c70bdd3c7a39e0d311bbe) --- revision_data.h.in.cmake | 4 +- src/common/Configuration/BuiltInConfig.cpp | 52 +++++++++++++++++ src/common/Configuration/BuiltInConfig.h | 42 ++++++++++++++ src/common/Configuration/Config.cpp | 8 +-- src/common/Configuration/Config.h | 8 +-- src/common/GitRevision.cpp | 20 +++---- src/common/GitRevision.h | 4 +- src/server/authserver/CMakeLists.txt | 4 +- src/server/authserver/authserver.conf.dist | 40 ++++++------- src/server/database/Updater/DBUpdater.cpp | 33 ++++------- src/server/database/Updater/DBUpdater.h | 4 +- src/server/worldserver/CMakeLists.txt | 4 +- src/server/worldserver/worldserver.conf.dist | 59 +++++++++++++------- 13 files changed, 190 insertions(+), 92 deletions(-) create mode 100644 src/common/Configuration/BuiltInConfig.cpp create mode 100644 src/common/Configuration/BuiltInConfig.h diff --git a/revision_data.h.in.cmake b/revision_data.h.in.cmake index 64c754c700b..2e2fe2c318c 100644 --- a/revision_data.h.in.cmake +++ b/revision_data.h.in.cmake @@ -3,7 +3,9 @@ #define _HASH "@rev_hash@" #define _DATE "@rev_date@" #define _BRANCH "@rev_branch@" + #define _CMAKE_COMMAND "@CMAKE_COMMAND@" #define _SOURCE_DIRECTORY "@CMAKE_SOURCE_DIR@" + #define _BUILD_DIRECTORY "@BUILDDIR@" #define _MYSQL_EXECUTABLE "@MYSQL_EXECUTABLE@" #define _FULL_DATABASE "TDB_full_world_335.60_2015_11_07.sql" #define VER_COMPANYNAME_STR "TrinityCore Developers" @@ -12,6 +14,4 @@ #define VER_FILEVERSION_STR "@rev_hash@ @rev_date@ (@rev_branch@ branch)" #define VER_PRODUCTVERSION VER_FILEVERSION #define VER_PRODUCTVERSION_STR VER_FILEVERSION_STR - #define COMPILER_C_FLAGS "@CMAKE_C_FLAGS@" - #define COMPILER_CXX_FLAGS "@CMAKE_CXX_FLAGS@" #endif // __REVISION_DATA_H__ diff --git a/src/common/Configuration/BuiltInConfig.cpp b/src/common/Configuration/BuiltInConfig.cpp new file mode 100644 index 00000000000..c2fc3b91766 --- /dev/null +++ b/src/common/Configuration/BuiltInConfig.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "BuiltInConfig.h" +#include "Config.h" +#include "GitRevision.h" + +template +static std::string GetStringWithDefaultValueFromFunction( + std::string const& key, Fn getter) +{ + std::string const value = sConfigMgr->GetStringDefault(key, ""); + return value.empty() ? getter() : value; +} + +std::string BuiltInConfig::GetCMakeCommand() +{ + return GetStringWithDefaultValueFromFunction( + "CMakeCommand", GitRevision::GetCMakeCommand); +} + +std::string BuiltInConfig::GetBuildDirectory() +{ + return GetStringWithDefaultValueFromFunction( + "BuildDirectory", GitRevision::GetBuildDirectory); +} + +std::string BuiltInConfig::GetSourceDirectory() +{ + return GetStringWithDefaultValueFromFunction( + "SourceDirectory", GitRevision::GetSourceDirectory); +} + +std::string BuiltInConfig::GetMySQLExecutable() +{ + return GetStringWithDefaultValueFromFunction( + "MySQLExecutable", GitRevision::GetMySQLExecutable); +} diff --git a/src/common/Configuration/BuiltInConfig.h b/src/common/Configuration/BuiltInConfig.h new file mode 100644 index 00000000000..4ae4ed40189 --- /dev/null +++ b/src/common/Configuration/BuiltInConfig.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef BUILT_IN_CONFIG_H +#define BUILT_IN_CONFIG_H + +#include + +/// Provides helper functions to access built-in values +/// which can be overwritten in config +namespace BuiltInConfig +{ + /// Returns the CMake command when any is specified in the config, + /// returns the built-in path otherwise + std::string GetCMakeCommand(); + /// Returns the build directory path when any is specified in the config, + /// returns the built-in one otherwise + std::string GetBuildDirectory(); + /// Returns the source directory path when any is specified in the config, + /// returns the built-in one otherwise + std::string GetSourceDirectory(); + /// Returns the path to the mysql executable (`mysql`) when any is specified + /// in the config, returns the built-in one otherwise + std::string GetMySQLExecutable(); + +} // namespace BuiltInConfig + +#endif // BUILT_IN_CONFIG_H diff --git a/src/common/Configuration/Config.cpp b/src/common/Configuration/Config.cpp index 6ac04615315..5db333c8aff 100644 --- a/src/common/Configuration/Config.cpp +++ b/src/common/Configuration/Config.cpp @@ -61,7 +61,7 @@ bool ConfigMgr::Reload(std::string& error) return LoadInitial(_filename, error); } -std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def) +std::string ConfigMgr::GetStringDefault(std::string const& name, const std::string& def) const { std::string value = _config.get(ptree::path_type(name, '/'), def); @@ -70,7 +70,7 @@ std::string ConfigMgr::GetStringDefault(std::string const& name, const std::stri return value; } -bool ConfigMgr::GetBoolDefault(std::string const& name, bool def) +bool ConfigMgr::GetBoolDefault(std::string const& name, bool def) const { try { @@ -84,12 +84,12 @@ bool ConfigMgr::GetBoolDefault(std::string const& name, bool def) } } -int ConfigMgr::GetIntDefault(std::string const& name, int def) +int ConfigMgr::GetIntDefault(std::string const& name, int def) const { return _config.get(ptree::path_type(name, '/'), def); } -float ConfigMgr::GetFloatDefault(std::string const& name, float def) +float ConfigMgr::GetFloatDefault(std::string const& name, float def) const { return _config.get(ptree::path_type(name, '/'), def); } diff --git a/src/common/Configuration/Config.h b/src/common/Configuration/Config.h index 5b04212ed7c..ada910d8fcc 100644 --- a/src/common/Configuration/Config.h +++ b/src/common/Configuration/Config.h @@ -41,10 +41,10 @@ public: bool Reload(std::string& error); - std::string GetStringDefault(std::string const& name, const std::string& def); - bool GetBoolDefault(std::string const& name, bool def); - int GetIntDefault(std::string const& name, int def); - float GetFloatDefault(std::string const& name, float def); + std::string GetStringDefault(std::string const& name, const std::string& def) const; + bool GetBoolDefault(std::string const& name, bool def) const; + int GetIntDefault(std::string const& name, int def) const; + float GetFloatDefault(std::string const& name, float def) const; std::string const& GetFilename(); std::list GetKeysByString(std::string const& name); diff --git a/src/common/GitRevision.cpp b/src/common/GitRevision.cpp index d0719c09959..5343fbd6531 100644 --- a/src/common/GitRevision.cpp +++ b/src/common/GitRevision.cpp @@ -17,6 +17,16 @@ char const* GitRevision::GetBranch() return _BRANCH; } +char const* GitRevision::GetCMakeCommand() +{ + return _CMAKE_COMMAND; +} + +char const* GitRevision::GetBuildDirectory() +{ + return _BUILD_DIRECTORY; +} + char const* GitRevision::GetSourceDirectory() { return _SOURCE_DIRECTORY; @@ -66,13 +76,3 @@ char const* GitRevision::GetProductVersionStr() { return VER_PRODUCTVERSION_STR; } - -char const* GitRevision::GetCompilerCFlags() -{ - return COMPILER_C_FLAGS; -} - -char const* GitRevision::GetCompilerCXXFlags() -{ - return COMPILER_CXX_FLAGS; -} diff --git a/src/common/GitRevision.h b/src/common/GitRevision.h index 8d2764ba861..7fddcb7605a 100644 --- a/src/common/GitRevision.h +++ b/src/common/GitRevision.h @@ -25,6 +25,8 @@ namespace GitRevision char const* GetHash(); char const* GetDate(); char const* GetBranch(); + char const* GetCMakeCommand(); + char const* GetBuildDirectory(); char const* GetSourceDirectory(); char const* GetMySQLExecutable(); char const* GetFullDatabase(); @@ -33,8 +35,6 @@ namespace GitRevision char const* GetLegalCopyrightStr(); char const* GetFileVersionStr(); char const* GetProductVersionStr(); - char const* GetCompilerCFlags(); - char const* GetCompilerCXXFlags(); } #endif diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt index c11deec39bb..d87847d6740 100644 --- a/src/server/authserver/CMakeLists.txt +++ b/src/server/authserver/CMakeLists.txt @@ -79,10 +79,10 @@ if( NOT WIN32 ) endif() target_link_libraries(authserver - common shared - format database + common + format ${MYSQL_LIBRARY} ${OPENSSL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist index 82c3cd47148..a97d75b3f57 100644 --- a/src/server/authserver/authserver.conf.dist +++ b/src/server/authserver/authserver.conf.dist @@ -137,6 +137,26 @@ WrongPass.Logging = 0 BanExpiryCheckInterval = 60 +# +# SourceDirectory +# Description: The path to your TrinityCore source directory. +# If the path is left empty, the built-in CMAKE_SOURCE_DIR is used. +# Example: "../TrinityCore" +# Default: "" + +SourceDirectory = "" + +# +# MySQLExecutable +# Description: The path to your mysql cli binary. +# If the path is left empty, built-in path from cmake is used. +# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" +# "mysql.exe" +# "/usr/bin/mysql" +# Default: "" + +MySQLExecutable = "" + # ################################################################################################### @@ -180,26 +200,6 @@ LoginDatabase.WorkerThreads = 1 Updates.EnableDatabases = 0 -# -# Updates.SourcePath -# Description: The path to your TrinityCore source directory. -# If the path is left empty, built-in CMAKE_SOURCE_DIR is used. -# Example: "../TrinityCore" -# Default: "" - -Updates.SourcePath = "" - -# -# Updates.MySqlCLIPath -# Description: The path to your mysql cli binary. -# If the path is left empty, built-in path from cmake is used. -# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" -# "mysql.exe" -# "/usr/bin/mysql" -# Default: "" - -Updates.MySqlCLIPath = "" - # # Updates.AutoSetup # Description: Auto populate empty databases. diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index 170954a86f4..b18d6c67612 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -21,6 +21,7 @@ #include "UpdateFetcher.h" #include "DatabaseLoader.h" #include "Config.h" +#include "BuiltInConfig.h" #include #include @@ -35,23 +36,17 @@ using namespace boost::process; using namespace boost::process::initializers; using namespace boost::iostreams; -std::string DBUpdaterUtil::GetMySqlCli() +std::string DBUpdaterUtil::GetCorrectedMySQLExecutable() { if (!corrected_path().empty()) return corrected_path(); else - { - std::string const entry = sConfigMgr->GetStringDefault("Updates.MySqlCLIPath", ""); - if (!entry.empty()) - return entry; - else - return GitRevision::GetMySQLExecutable(); - } + return BuiltInConfig::GetMySQLExecutable(); } bool DBUpdaterUtil::CheckExecutable() { - boost::filesystem::path exe(GetMySqlCli()); + boost::filesystem::path exe(GetCorrectedMySQLExecutable()); if (!exists(exe)) { exe.clear(); @@ -85,16 +80,6 @@ std::string& DBUpdaterUtil::corrected_path() return path; } -template -std::string DBUpdater::GetSourceDirectory() -{ - std::string const entry = sConfigMgr->GetStringDefault("Updates.SourcePath", ""); - if (!entry.empty()) - return entry; - else - return GitRevision::GetSourceDirectory(); -} - // Auth Database template<> std::string DBUpdater::GetConfigEntry() @@ -111,7 +96,8 @@ std::string DBUpdater::GetTableName() template<> std::string DBUpdater::GetBaseFile() { - return DBUpdater::GetSourceDirectory() + "/sql/base/auth_database.sql"; + return BuiltInConfig::GetSourceDirectory() + + "/sql/base/auth_database.sql"; } template<> @@ -169,7 +155,8 @@ std::string DBUpdater::GetTableName() template<> std::string DBUpdater::GetBaseFile() { - return DBUpdater::GetSourceDirectory() + "/sql/base/characters_database.sql"; + return BuiltInConfig::GetSourceDirectory() + + "/sql/base/characters_database.sql"; } template<> @@ -239,7 +226,7 @@ bool DBUpdater::Update(DatabaseWorkerPool& pool) TC_LOG_INFO("sql.updates", "Updating %s database...", DBUpdater::GetTableName().c_str()); - Path const sourceDirectory(GetSourceDirectory()); + Path const sourceDirectory(BuiltInConfig::GetSourceDirectory()); if (!is_directory(sourceDirectory)) { @@ -410,7 +397,7 @@ void DBUpdater::ApplyFile(DatabaseWorkerPool& pool, std::string const& hos boost::process::pipe errPipe = create_pipe(); child c = execute(run_exe( - boost::filesystem::absolute(DBUpdaterUtil::GetMySqlCli()).generic_string()), + boost::filesystem::absolute(DBUpdaterUtil::GetCorrectedMySQLExecutable()).generic_string()), set_args(args), bind_stdin(source), throw_on_error(), bind_stdout(file_descriptor_sink(outPipe.sink, close_handle)), bind_stderr(file_descriptor_sink(errPipe.sink, close_handle))); diff --git a/src/server/database/Updater/DBUpdater.h b/src/server/database/Updater/DBUpdater.h index c9792ffe060..dbb897d2527 100644 --- a/src/server/database/Updater/DBUpdater.h +++ b/src/server/database/Updater/DBUpdater.h @@ -57,7 +57,7 @@ struct UpdateResult class DBUpdaterUtil { public: - static std::string GetMySqlCli(); + static std::string GetCorrectedMySQLExecutable(); static bool CheckExecutable(); @@ -71,8 +71,6 @@ class DBUpdater public: using Path = boost::filesystem::path; - static std::string GetSourceDirectory(); - static inline std::string GetConfigEntry(); static inline std::string GetTableName(); diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt index 535383ac605..99495986842 100644 --- a/src/server/worldserver/CMakeLists.txt +++ b/src/server/worldserver/CMakeLists.txt @@ -131,10 +131,10 @@ set_target_properties(worldserver PROPERTIES LINK_FLAGS "${worldserver_LINK_FLAG target_link_libraries(worldserver game - common + scripts shared database - scripts + common g3dlib gsoap Detour diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 0f60a71405a..05d303cfd9b 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -160,6 +160,45 @@ BindIP = "0.0.0.0" ThreadPool = 2 +# +# CMakeCommand +# Description: The path to your CMake binary. +# If the path is left empty, the built-in CMAKE_COMMAND is used. +# Example: "C:/Program Files (x86)/CMake/bin/cmake.exe" +# "/usr/bin/cmake" +# Default: "" + +CMakeCommand = "" + +# +# BuildDirectory +# Description: The path to your build directory. +# If the path is left empty, the built-in CMAKE_BINARY_DIR is used. +# Example: "../TrinityCore" +# Default: "" + +BuildDirectory = "" + +# +# SourceDirectory +# Description: The path to your TrinityCore source directory. +# If the path is left empty, the built-in CMAKE_SOURCE_DIR is used. +# Example: "../TrinityCore" +# Default: "" + +SourceDirectory = "" + +# +# MySQLExecutable +# Description: The path to your mysql cli binary. +# If the path is left empty, built-in path from cmake is used. +# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" +# "mysql.exe" +# "/usr/bin/mysql" +# Default: "" + +MySQLExecutable = "" + # ################################################################################################### @@ -1166,26 +1205,6 @@ BirthdayTime = 1222964635 Updates.EnableDatabases = 7 -# -# Updates.SourcePath -# Description: The path to your TrinityCore source directory. -# If the path is left empty, built-in CMAKE_SOURCE_DIR is used. -# Example: "../TrinityCore" -# Default: "" - -Updates.SourcePath = "" - -# -# Updates.MySqlCLIPath -# Description: The path to your mysql cli binary. -# If the path is left empty, built-in path from cmake is used. -# Example: "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe" -# "mysql.exe" -# "/usr/bin/mysql" -# Default: "" - -Updates.MySqlCLIPath = "" - # # Updates.AutoSetup # Description: Auto populate empty databases. From 9e43365b3d7817b128ecfc6bfd74f4b2b6fc7c69 Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 22 Feb 2016 16:23:41 +0100 Subject: [PATCH 10/93] Core/Scripts: Split the huge scriptloader into smaller pieces * Each subdirectory contains it's own translation unit now which is responsible for loading it's directory * Improves merging & decoupling between 3.3.5 <-> 6.x * Removes unused Battleground loader * Ref #15671 (cherry picked from commit 5534915f743c707c07cb977bca67c2ff15487597) --- src/server/game/Scripting/ScriptLoader.cpp | 1396 +---------------- src/server/game/Scripting/ScriptLoader.h | 12 - src/server/scripts/CMakeLists.txt | 32 +- src/server/scripts/Commands/CMakeLists.txt | 18 - .../scripts/Commands/cs_script_loader.cpp | 104 ++ src/server/scripts/Custom/CMakeLists.txt | 18 - .../scripts/Custom/custom_script_loader.cpp | 25 + .../scripts/EasternKingdoms/CMakeLists.txt | 204 --- .../eastern_kingdoms_script_loader.cpp | 372 +++++ src/server/scripts/Events/CMakeLists.txt | 18 - .../scripts/Events/events_script_loader.cpp | 26 + src/server/scripts/Kalimdor/CMakeLists.txt | 121 -- .../Kalimdor/kalimdor_script_loader.cpp | 206 +++ src/server/scripts/Northrend/CMakeLists.txt | 199 --- .../Northrend/northrend_script_loader.cpp | 374 +++++ src/server/scripts/OutdoorPvP/CMakeLists.txt | 27 - .../OutdoorPvP/OutdoorPvPScriptLoader.cpp | 36 + src/server/scripts/Outland/CMakeLists.txt | 128 -- .../scripts/Outland/outland_script_loader.cpp | 256 +++ src/server/scripts/Pet/CMakeLists.txt | 21 - src/server/scripts/Pet/pet_script_loader.cpp | 36 + src/server/scripts/Spells/CMakeLists.txt | 30 - .../scripts/Spells/spell_script_loader.cpp | 52 + src/server/scripts/World/CMakeLists.txt | 18 - .../scripts/World/world_script_loader.cpp | 59 + 25 files changed, 1581 insertions(+), 2207 deletions(-) delete mode 100644 src/server/scripts/Commands/CMakeLists.txt create mode 100644 src/server/scripts/Commands/cs_script_loader.cpp delete mode 100644 src/server/scripts/Custom/CMakeLists.txt create mode 100644 src/server/scripts/Custom/custom_script_loader.cpp delete mode 100644 src/server/scripts/EasternKingdoms/CMakeLists.txt create mode 100644 src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp delete mode 100644 src/server/scripts/Events/CMakeLists.txt create mode 100644 src/server/scripts/Events/events_script_loader.cpp delete mode 100644 src/server/scripts/Kalimdor/CMakeLists.txt create mode 100644 src/server/scripts/Kalimdor/kalimdor_script_loader.cpp delete mode 100644 src/server/scripts/Northrend/CMakeLists.txt create mode 100644 src/server/scripts/Northrend/northrend_script_loader.cpp delete mode 100644 src/server/scripts/OutdoorPvP/CMakeLists.txt create mode 100644 src/server/scripts/OutdoorPvP/OutdoorPvPScriptLoader.cpp delete mode 100644 src/server/scripts/Outland/CMakeLists.txt create mode 100644 src/server/scripts/Outland/outland_script_loader.cpp delete mode 100644 src/server/scripts/Pet/CMakeLists.txt create mode 100644 src/server/scripts/Pet/pet_script_loader.cpp delete mode 100644 src/server/scripts/Spells/CMakeLists.txt create mode 100644 src/server/scripts/Spells/spell_script_loader.cpp delete mode 100644 src/server/scripts/World/CMakeLists.txt create mode 100644 src/server/scripts/World/world_script_loader.cpp diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 2922e4ef58d..07ac1a2ed5b 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -18,1404 +18,36 @@ #include "ScriptLoader.h" #include "World.h" -// spells -void AddSC_deathknight_spell_scripts(); -void AddSC_druid_spell_scripts(); -void AddSC_generic_spell_scripts(); -void AddSC_hunter_spell_scripts(); -void AddSC_mage_spell_scripts(); -void AddSC_paladin_spell_scripts(); -void AddSC_priest_spell_scripts(); -void AddSC_rogue_spell_scripts(); -void AddSC_shaman_spell_scripts(); -void AddSC_warlock_spell_scripts(); -void AddSC_warrior_spell_scripts(); -void AddSC_quest_spell_scripts(); -void AddSC_item_spell_scripts(); -void AddSC_holiday_spell_scripts(); - +void AddSpellsScripts(); void AddSC_SmartScripts(); - -//Commands -void AddSC_account_commandscript(); -void AddSC_achievement_commandscript(); -void AddSC_ahbot_commandscript(); -void AddSC_arena_commandscript(); -void AddSC_ban_commandscript(); -void AddSC_bf_commandscript(); -void AddSC_cast_commandscript(); -void AddSC_character_commandscript(); -void AddSC_cheat_commandscript(); -void AddSC_debug_commandscript(); -void AddSC_deserter_commandscript(); -void AddSC_disable_commandscript(); -void AddSC_event_commandscript(); -void AddSC_gm_commandscript(); -void AddSC_go_commandscript(); -void AddSC_gobject_commandscript(); -void AddSC_group_commandscript(); -void AddSC_guild_commandscript(); -void AddSC_honor_commandscript(); -void AddSC_instance_commandscript(); -void AddSC_learn_commandscript(); -void AddSC_lfg_commandscript(); -void AddSC_list_commandscript(); -void AddSC_lookup_commandscript(); -void AddSC_message_commandscript(); -void AddSC_misc_commandscript(); -void AddSC_mmaps_commandscript(); -void AddSC_modify_commandscript(); -void AddSC_npc_commandscript(); -void AddSC_pet_commandscript(); -void AddSC_quest_commandscript(); -void AddSC_rbac_commandscript(); -void AddSC_reload_commandscript(); -void AddSC_reset_commandscript(); -void AddSC_send_commandscript(); -void AddSC_server_commandscript(); -void AddSC_tele_commandscript(); -void AddSC_ticket_commandscript(); -void AddSC_titles_commandscript(); -void AddSC_wp_commandscript(); +void AddCommandsScripts(); #ifdef SCRIPTS -//world -void AddSC_areatrigger_scripts(); -void AddSC_emerald_dragons(); -void AddSC_generic_creature(); -void AddSC_go_scripts(); -void AddSC_guards(); -void AddSC_item_scripts(); -void AddSC_npc_professions(); -void AddSC_npc_innkeeper(); -void AddSC_npcs_special(); -void AddSC_achievement_scripts(); -void AddSC_action_ip_logger(); -void AddSC_duel_reset(); - -//eastern kingdoms -void AddSC_alterac_valley(); //Alterac Valley -void AddSC_boss_balinda(); -void AddSC_boss_drekthar(); -void AddSC_boss_galvangar(); -void AddSC_boss_vanndar(); -void AddSC_blackrock_depths(); //Blackrock Depths -void AddSC_boss_ambassador_flamelash(); -void AddSC_boss_draganthaurissan(); -void AddSC_boss_general_angerforge(); -void AddSC_boss_high_interrogator_gerstahn(); -void AddSC_boss_magmus(); -void AddSC_boss_moira_bronzebeard(); -void AddSC_boss_tomb_of_seven(); -void AddSC_instance_blackrock_depths(); -void AddSC_boss_drakkisath(); //Blackrock Spire -void AddSC_boss_halycon(); -void AddSC_boss_highlordomokk(); -void AddSC_boss_mothersmolderweb(); -void AddSC_boss_overlordwyrmthalak(); -void AddSC_boss_shadowvosh(); -void AddSC_boss_thebeast(); -void AddSC_boss_warmastervoone(); -void AddSC_boss_quatermasterzigris(); -void AddSC_boss_pyroguard_emberseer(); -void AddSC_boss_gyth(); -void AddSC_boss_rend_blackhand(); -void AddSC_boss_gizrul_the_slavener(); -void AddSC_boss_urok_doomhowl(); -void AddSC_boss_lord_valthalak(); -void AddSC_instance_blackrock_spire(); -void AddSC_boss_razorgore(); //Blackwing lair -void AddSC_boss_vaelastrasz(); -void AddSC_boss_broodlord(); -void AddSC_boss_firemaw(); -void AddSC_boss_ebonroc(); -void AddSC_boss_flamegor(); -void AddSC_boss_chromaggus(); -void AddSC_boss_nefarian(); -void AddSC_instance_blackwing_lair(); -void AddSC_deadmines(); //Deadmines -void AddSC_instance_deadmines(); -void AddSC_boss_mr_smite(); -void AddSC_gnomeregan(); //Gnomeregan -void AddSC_instance_gnomeregan(); -void AddSC_boss_attumen(); //Karazhan -void AddSC_boss_curator(); -void AddSC_boss_maiden_of_virtue(); -void AddSC_boss_shade_of_aran(); -void AddSC_boss_malchezaar(); -void AddSC_boss_terestian_illhoof(); -void AddSC_boss_moroes(); -void AddSC_bosses_opera(); -void AddSC_boss_netherspite(); -void AddSC_instance_karazhan(); -void AddSC_karazhan(); -void AddSC_boss_nightbane(); -void AddSC_boss_felblood_kaelthas(); // Magister's Terrace -void AddSC_boss_selin_fireheart(); -void AddSC_boss_vexallus(); -void AddSC_boss_priestess_delrissa(); -void AddSC_instance_magisters_terrace(); -void AddSC_magisters_terrace(); -void AddSC_boss_lucifron(); //Molten core -void AddSC_boss_magmadar(); -void AddSC_boss_gehennas(); -void AddSC_boss_garr(); -void AddSC_boss_baron_geddon(); -void AddSC_boss_shazzrah(); -void AddSC_boss_golemagg(); -void AddSC_boss_sulfuron(); -void AddSC_boss_majordomo(); -void AddSC_boss_ragnaros(); -void AddSC_instance_molten_core(); -void AddSC_instance_ragefire_chasm(); //Ragefire Chasm -void AddSC_the_scarlet_enclave(); //Scarlet Enclave -void AddSC_the_scarlet_enclave_c1(); -void AddSC_the_scarlet_enclave_c2(); -void AddSC_the_scarlet_enclave_c5(); -void AddSC_boss_arcanist_doan(); //Scarlet Monastery -void AddSC_boss_azshir_the_sleepless(); -void AddSC_boss_bloodmage_thalnos(); -void AddSC_boss_headless_horseman(); -void AddSC_boss_herod(); -void AddSC_boss_high_inquisitor_fairbanks(); -void AddSC_boss_houndmaster_loksey(); -void AddSC_boss_interrogator_vishas(); -void AddSC_boss_scorn(); -void AddSC_instance_scarlet_monastery(); -void AddSC_boss_mograine_and_whitemane(); -void AddSC_boss_darkmaster_gandling(); //Scholomance -void AddSC_boss_death_knight_darkreaver(); -void AddSC_boss_theolenkrastinov(); -void AddSC_boss_illuciabarov(); -void AddSC_boss_instructormalicia(); -void AddSC_boss_jandicebarov(); -void AddSC_boss_kormok(); -void AddSC_boss_lordalexeibarov(); -void AddSC_boss_lorekeeperpolkelt(); -void AddSC_boss_rasfrost(); -void AddSC_boss_theravenian(); -void AddSC_boss_vectus(); -void AddSC_boss_kirtonos_the_herald(); -void AddSC_instance_scholomance(); -void AddSC_shadowfang_keep(); //Shadowfang keep -void AddSC_instance_shadowfang_keep(); -void AddSC_boss_magistrate_barthilas(); //Stratholme -void AddSC_boss_maleki_the_pallid(); -void AddSC_boss_nerubenkan(); -void AddSC_boss_cannon_master_willey(); -void AddSC_boss_baroness_anastari(); -void AddSC_boss_ramstein_the_gorger(); -void AddSC_boss_timmy_the_cruel(); -void AddSC_boss_postmaster_malown(); -void AddSC_boss_baron_rivendare(); -void AddSC_boss_dathrohan_balnazzar(); -void AddSC_boss_order_of_silver_hand(); -void AddSC_instance_stratholme(); -void AddSC_stratholme(); -void AddSC_sunken_temple(); // Sunken Temple -void AddSC_instance_sunken_temple(); -void AddSC_instance_sunwell_plateau(); //Sunwell Plateau -void AddSC_boss_kalecgos(); -void AddSC_boss_brutallus(); -void AddSC_boss_felmyst(); -void AddSC_boss_eredar_twins(); -void AddSC_boss_muru(); -void AddSC_boss_kiljaeden(); -void AddSC_sunwell_plateau(); -void AddSC_boss_archaedas(); //Uldaman -void AddSC_boss_ironaya(); -void AddSC_uldaman(); -void AddSC_instance_uldaman(); -void AddSC_instance_the_stockade(); //The Stockade -void AddSC_boss_akilzon(); //Zul'Aman -void AddSC_boss_halazzi(); -void AddSC_boss_hex_lord_malacrass(); -void AddSC_boss_janalai(); -void AddSC_boss_nalorakk(); -void AddSC_boss_zuljin(); -void AddSC_instance_zulaman(); -void AddSC_zulaman(); -void AddSC_boss_jeklik(); //Zul'Gurub -void AddSC_boss_venoxis(); -void AddSC_boss_marli(); -void AddSC_boss_mandokir(); -void AddSC_boss_gahzranka(); -void AddSC_boss_thekal(); -void AddSC_boss_arlokk(); -void AddSC_boss_jindo(); -void AddSC_boss_hakkar(); -void AddSC_boss_grilek(); -void AddSC_boss_hazzarah(); -void AddSC_boss_renataki(); -void AddSC_boss_wushoolay(); -void AddSC_instance_zulgurub(); - -//void AddSC_alterac_mountains(); -void AddSC_arathi_highlands(); -void AddSC_blasted_lands(); -void AddSC_burning_steppes(); -void AddSC_duskwood(); -void AddSC_eastern_plaguelands(); -void AddSC_ghostlands(); -void AddSC_hinterlands(); -void AddSC_isle_of_queldanas(); -void AddSC_loch_modan(); -void AddSC_redridge_mountains(); -void AddSC_silverpine_forest(); -void AddSC_stormwind_city(); -void AddSC_stranglethorn_vale(); -void AddSC_swamp_of_sorrows(); -void AddSC_tirisfal_glades(); -void AddSC_undercity(); -void AddSC_western_plaguelands(); -void AddSC_wetlands(); - -//kalimdor -void AddSC_blackfathom_deeps(); //Blackfathom Depths -void AddSC_boss_gelihast(); -void AddSC_boss_kelris(); -void AddSC_boss_aku_mai(); -void AddSC_instance_blackfathom_deeps(); -void AddSC_hyjal(); //CoT Battle for Mt. Hyjal -void AddSC_boss_archimonde(); -void AddSC_instance_mount_hyjal(); -void AddSC_hyjal_trash(); -void AddSC_boss_rage_winterchill(); -void AddSC_boss_anetheron(); -void AddSC_boss_kazrogal(); -void AddSC_boss_azgalor(); -void AddSC_boss_captain_skarloc(); //CoT Old Hillsbrad -void AddSC_boss_epoch_hunter(); -void AddSC_boss_lieutenant_drake(); -void AddSC_instance_old_hillsbrad(); -void AddSC_old_hillsbrad(); -void AddSC_boss_aeonus(); //CoT The Black Morass -void AddSC_boss_chrono_lord_deja(); -void AddSC_boss_temporus(); -void AddSC_the_black_morass(); -void AddSC_instance_the_black_morass(); -void AddSC_boss_epoch(); //CoT Culling Of Stratholme -void AddSC_boss_infinite_corruptor(); -void AddSC_boss_salramm(); -void AddSC_boss_mal_ganis(); -void AddSC_boss_meathook(); -void AddSC_culling_of_stratholme(); -void AddSC_instance_culling_of_stratholme(); -void AddSC_instance_dire_maul(); //Dire Maul -void AddSC_boss_celebras_the_cursed(); //Maraudon -void AddSC_boss_landslide(); -void AddSC_boss_noxxion(); -void AddSC_boss_ptheradras(); -void AddSC_instance_maraudon(); -void AddSC_boss_onyxia(); //Onyxia's Lair -void AddSC_instance_onyxias_lair(); -void AddSC_boss_tuten_kash(); //Razorfen Downs -void AddSC_boss_mordresh_fire_eye(); -void AddSC_boss_glutton(); -void AddSC_boss_amnennar_the_coldbringer(); -void AddSC_razorfen_downs(); -void AddSC_instance_razorfen_downs(); -void AddSC_razorfen_kraul(); //Razorfen Kraul -void AddSC_instance_razorfen_kraul(); -void AddSC_boss_kurinnaxx(); //Ruins of ahn'qiraj -void AddSC_boss_rajaxx(); -void AddSC_boss_moam(); -void AddSC_boss_buru(); -void AddSC_boss_ayamiss(); -void AddSC_boss_ossirian(); -void AddSC_instance_ruins_of_ahnqiraj(); -void AddSC_boss_cthun(); //Temple of ahn'qiraj -void AddSC_boss_viscidus(); -void AddSC_boss_fankriss(); -void AddSC_boss_huhuran(); -void AddSC_bug_trio(); -void AddSC_boss_sartura(); -void AddSC_boss_skeram(); -void AddSC_boss_twinemperors(); -void AddSC_boss_ouro(); -void AddSC_npc_anubisath_sentinel(); -void AddSC_instance_temple_of_ahnqiraj(); -void AddSC_wailing_caverns(); //Wailing caverns -void AddSC_instance_wailing_caverns(); -void AddSC_boss_zum_rah(); //Zul'Farrak -void AddSC_zulfarrak(); -void AddSC_instance_zulfarrak(); - -void AddSC_ashenvale(); -void AddSC_azshara(); -void AddSC_azuremyst_isle(); -void AddSC_bloodmyst_isle(); -void AddSC_boss_azuregos(); -void AddSC_darkshore(); -void AddSC_desolace(); -void AddSC_durotar(); -void AddSC_dustwallow_marsh(); -void AddSC_felwood(); -void AddSC_feralas(); -void AddSC_moonglade(); -void AddSC_orgrimmar(); -void AddSC_silithus(); -void AddSC_stonetalon_mountains(); -void AddSC_tanaris(); -void AddSC_the_barrens(); -void AddSC_thousand_needles(); -void AddSC_thunder_bluff(); -void AddSC_ungoro_crater(); -void AddSC_winterspring(); - -// Northrend - -void AddSC_boss_slad_ran(); -void AddSC_boss_moorabi(); -void AddSC_boss_drakkari_colossus(); -void AddSC_boss_gal_darah(); -void AddSC_boss_eck(); -void AddSC_instance_gundrak(); - -// Azjol-Nerub - Azjol-Nerub -void AddSC_boss_krik_thir(); -void AddSC_boss_hadronox(); -void AddSC_boss_anub_arak(); -void AddSC_instance_azjol_nerub(); - -// Azjol-Nerub - Ahn'kahet -void AddSC_boss_elder_nadox(); -void AddSC_boss_taldaram(); -void AddSC_boss_amanitar(); -void AddSC_boss_jedoga_shadowseeker(); -void AddSC_boss_volazj(); -void AddSC_instance_ahnkahet(); - -// Drak'Tharon Keep -void AddSC_boss_trollgore(); -void AddSC_boss_novos(); -void AddSC_boss_king_dred(); -void AddSC_boss_tharon_ja(); -void AddSC_instance_drak_tharon_keep(); - -void AddSC_boss_argent_challenge(); //Trial of the Champion -void AddSC_boss_black_knight(); -void AddSC_boss_grand_champions(); -void AddSC_instance_trial_of_the_champion(); -void AddSC_trial_of_the_champion(); -void AddSC_boss_anubarak_trial(); //Trial of the Crusader -void AddSC_boss_faction_champions(); -void AddSC_boss_jaraxxus(); -void AddSC_boss_northrend_beasts(); -void AddSC_boss_twin_valkyr(); -void AddSC_trial_of_the_crusader(); -void AddSC_instance_trial_of_the_crusader(); -void AddSC_boss_anubrekhan(); //Naxxramas -void AddSC_boss_maexxna(); -void AddSC_boss_patchwerk(); -void AddSC_boss_grobbulus(); -void AddSC_boss_razuvious(); -void AddSC_boss_kelthuzad(); -void AddSC_boss_loatheb(); -void AddSC_boss_noth(); -void AddSC_boss_gluth(); -void AddSC_boss_sapphiron(); -void AddSC_boss_four_horsemen(); -void AddSC_boss_faerlina(); -void AddSC_boss_heigan(); -void AddSC_boss_gothik(); -void AddSC_boss_thaddius(); -void AddSC_instance_naxxramas(); -void AddSC_boss_nexus_commanders(); // The Nexus Nexus -void AddSC_boss_magus_telestra(); -void AddSC_boss_anomalus(); -void AddSC_boss_ormorok(); -void AddSC_boss_keristrasza(); -void AddSC_instance_nexus(); -void AddSC_boss_drakos(); //The Nexus The Oculus -void AddSC_boss_urom(); -void AddSC_boss_varos(); -void AddSC_boss_eregos(); -void AddSC_instance_oculus(); -void AddSC_oculus(); -void AddSC_boss_malygos(); // The Nexus: Eye of Eternity -void AddSC_instance_eye_of_eternity(); -void AddSC_boss_sartharion(); //Obsidian Sanctum -void AddSC_obsidian_sanctum(); -void AddSC_instance_obsidian_sanctum(); -void AddSC_boss_bjarngrim(); //Ulduar Halls of Lightning -void AddSC_boss_loken(); -void AddSC_boss_ionar(); -void AddSC_boss_volkhan(); -void AddSC_instance_halls_of_lightning(); -void AddSC_boss_maiden_of_grief(); //Ulduar Halls of Stone -void AddSC_boss_krystallus(); -void AddSC_boss_sjonnir(); -void AddSC_instance_halls_of_stone(); -void AddSC_halls_of_stone(); -void AddSC_boss_auriaya(); //Ulduar Ulduar -void AddSC_boss_flame_leviathan(); -void AddSC_boss_ignis(); -void AddSC_boss_razorscale(); -void AddSC_boss_xt002(); -void AddSC_boss_kologarn(); -void AddSC_boss_assembly_of_iron(); -void AddSC_boss_general_vezax(); -void AddSC_boss_mimiron(); -void AddSC_boss_hodir(); -void AddSC_boss_freya(); -void AddSC_boss_yogg_saron(); -void AddSC_boss_algalon_the_observer(); -void AddSC_instance_ulduar(); - -// Utgarde Keep - Utgarde Keep -void AddSC_boss_keleseth(); -void AddSC_boss_skarvald_dalronn(); -void AddSC_boss_ingvar_the_plunderer(); -void AddSC_instance_utgarde_keep(); -void AddSC_utgarde_keep(); - -// Utgarde Keep - Utgarde Pinnacle -void AddSC_boss_svala(); -void AddSC_boss_palehoof(); -void AddSC_boss_skadi(); -void AddSC_boss_ymiron(); -void AddSC_instance_utgarde_pinnacle(); - -// Vault of Archavon -void AddSC_boss_archavon(); -void AddSC_boss_emalon(); -void AddSC_boss_koralon(); -void AddSC_boss_toravon(); -void AddSC_instance_vault_of_archavon(); - -void AddSC_boss_cyanigosa(); //Violet Hold -void AddSC_boss_erekem(); -void AddSC_boss_ichoron(); -void AddSC_boss_lavanthor(); -void AddSC_boss_moragg(); -void AddSC_boss_xevozz(); -void AddSC_boss_zuramat(); -void AddSC_instance_violet_hold(); -void AddSC_violet_hold(); -void AddSC_instance_forge_of_souls(); //Forge of Souls -void AddSC_forge_of_souls(); -void AddSC_boss_bronjahm(); -void AddSC_boss_devourer_of_souls(); -void AddSC_instance_pit_of_saron(); //Pit of Saron -void AddSC_pit_of_saron(); -void AddSC_boss_garfrost(); -void AddSC_boss_ick(); -void AddSC_boss_tyrannus(); -void AddSC_instance_halls_of_reflection(); // Halls of Reflection -void AddSC_halls_of_reflection(); -void AddSC_boss_falric(); -void AddSC_boss_marwyn(); -void AddSC_boss_lord_marrowgar(); // Icecrown Citadel -void AddSC_boss_lady_deathwhisper(); -void AddSC_boss_icecrown_gunship_battle(); -void AddSC_boss_deathbringer_saurfang(); -void AddSC_boss_festergut(); -void AddSC_boss_rotface(); -void AddSC_boss_professor_putricide(); -void AddSC_boss_blood_prince_council(); -void AddSC_boss_blood_queen_lana_thel(); -void AddSC_boss_valithria_dreamwalker(); -void AddSC_boss_sindragosa(); -void AddSC_boss_the_lich_king(); -void AddSC_icecrown_citadel_teleport(); -void AddSC_instance_icecrown_citadel(); -void AddSC_icecrown_citadel(); -void AddSC_instance_ruby_sanctum(); // Ruby Sanctum -void AddSC_ruby_sanctum(); -void AddSC_boss_baltharus_the_warborn(); -void AddSC_boss_saviana_ragefire(); -void AddSC_boss_general_zarithrian(); -void AddSC_boss_halion(); - -void AddSC_dalaran(); -void AddSC_borean_tundra(); -void AddSC_dragonblight(); -void AddSC_grizzly_hills(); -void AddSC_howling_fjord(); -void AddSC_icecrown(); -void AddSC_sholazar_basin(); -void AddSC_storm_peaks(); -void AddSC_wintergrasp(); -void AddSC_zuldrak(); -void AddSC_crystalsong_forest(); -void AddSC_isle_of_conquest(); - -// Outland - -// Auchindoun - Auchenai Crypts -void AddSC_boss_shirrak_the_dead_watcher(); -void AddSC_boss_exarch_maladaar(); -void AddSC_instance_auchenai_crypts(); - -// Auchindoun - Mana Tombs -void AddSC_boss_pandemonius(); -void AddSC_boss_nexusprince_shaffar(); -void AddSC_instance_mana_tombs(); - -// Auchindoun - Sekketh Halls -void AddSC_boss_darkweaver_syth(); -void AddSC_boss_talon_king_ikiss(); -void AddSC_boss_anzu(); -void AddSC_instance_sethekk_halls(); - -// Auchindoun - Shadow Labyrinth -void AddSC_boss_ambassador_hellmaw(); -void AddSC_boss_blackheart_the_inciter(); -void AddSC_boss_grandmaster_vorpil(); -void AddSC_boss_murmur(); -void AddSC_instance_shadow_labyrinth(); - -// Black Temple -void AddSC_black_temple(); -void AddSC_boss_illidan(); -void AddSC_boss_shade_of_akama(); -void AddSC_boss_supremus(); -void AddSC_boss_gurtogg_bloodboil(); -void AddSC_boss_mother_shahraz(); -void AddSC_boss_reliquary_of_souls(); -void AddSC_boss_teron_gorefiend(); -void AddSC_boss_najentus(); -void AddSC_boss_illidari_council(); -void AddSC_instance_black_temple(); - -// Coilfang Reservoir - Serpent Shrine Cavern -void AddSC_boss_fathomlord_karathress(); -void AddSC_boss_hydross_the_unstable(); -void AddSC_boss_lady_vashj(); -void AddSC_boss_leotheras_the_blind(); -void AddSC_boss_morogrim_tidewalker(); -void AddSC_instance_serpentshrine_cavern(); -void AddSC_boss_the_lurker_below(); - -// Coilfang Reservoir - The Steam Vault -void AddSC_boss_hydromancer_thespia(); -void AddSC_boss_mekgineer_steamrigger(); -void AddSC_boss_warlord_kalithresh(); -void AddSC_instance_steam_vault(); - -// Coilfang Reservoir - The Slave Pens -void AddSC_instance_the_slave_pens(); -void AddSC_boss_mennu_the_betrayer(); -void AddSC_boss_rokmar_the_crackler(); -void AddSC_boss_quagmirran(); - -// Coilfang Reservoir - The Underbog -void AddSC_instance_the_underbog(); -void AddSC_boss_hungarfen(); -void AddSC_boss_the_black_stalker(); - -// Gruul's Lair -void AddSC_boss_gruul(); -void AddSC_boss_high_king_maulgar(); -void AddSC_instance_gruuls_lair(); -void AddSC_boss_broggok(); //HC Blood Furnace -void AddSC_boss_kelidan_the_breaker(); -void AddSC_boss_the_maker(); -void AddSC_instance_blood_furnace(); -void AddSC_boss_magtheridon(); //HC Magtheridon's Lair -void AddSC_instance_magtheridons_lair(); -void AddSC_boss_grand_warlock_nethekurse(); //HC Shattered Halls -void AddSC_boss_warbringer_omrogg(); -void AddSC_boss_warchief_kargath_bladefist(); -void AddSC_shattered_halls(); -void AddSC_instance_shattered_halls(); -void AddSC_boss_watchkeeper_gargolmar(); //HC Ramparts -void AddSC_boss_omor_the_unscarred(); -void AddSC_boss_vazruden_the_herald(); -void AddSC_instance_ramparts(); -void AddSC_arcatraz(); //TK Arcatraz -void AddSC_boss_zereketh_the_unbound(); -void AddSC_boss_dalliah_the_doomsayer(); -void AddSC_boss_wrath_scryer_soccothrates(); -void AddSC_boss_harbinger_skyriss(); -void AddSC_instance_arcatraz(); -void AddSC_boss_high_botanist_freywinn(); //TK Botanica -void AddSC_boss_laj(); -void AddSC_boss_warp_splinter(); -void AddSC_boss_thorngrin_the_tender(); -void AddSC_boss_commander_sarannis(); -void AddSC_instance_the_botanica(); -void AddSC_boss_alar(); //TK The Eye -void AddSC_boss_kaelthas(); -void AddSC_boss_void_reaver(); -void AddSC_boss_high_astromancer_solarian(); -void AddSC_instance_the_eye(); -void AddSC_the_eye(); -void AddSC_boss_gatewatcher_iron_hand(); //TK The Mechanar -void AddSC_boss_gatewatcher_gyrokill(); -void AddSC_boss_nethermancer_sepethrea(); -void AddSC_boss_pathaleon_the_calculator(); -void AddSC_boss_mechano_lord_capacitus(); -void AddSC_instance_mechanar(); - -void AddSC_blades_edge_mountains(); -void AddSC_boss_doomlordkazzak(); -void AddSC_boss_doomwalker(); -void AddSC_hellfire_peninsula(); -void AddSC_nagrand(); -void AddSC_netherstorm(); -void AddSC_shadowmoon_valley(); -void AddSC_shattrath_city(); -void AddSC_terokkar_forest(); -void AddSC_zangarmarsh(); - -// Events -void AddSC_event_childrens_week(); - -// Pets -void AddSC_deathknight_pet_scripts(); -void AddSC_generic_pet_scripts(); -void AddSC_hunter_pet_scripts(); -void AddSC_mage_pet_scripts(); -void AddSC_priest_pet_scripts(); -void AddSC_shaman_pet_scripts(); - -// battlegrounds - -// outdoor pvp -void AddSC_outdoorpvp_ep(); -void AddSC_outdoorpvp_hp(); -void AddSC_outdoorpvp_na(); -void AddSC_outdoorpvp_si(); -void AddSC_outdoorpvp_tf(); -void AddSC_outdoorpvp_zm(); - -// player -void AddSC_chat_log(); -void AddSC_action_ip_logger(); - +void AddWorldScripts(); +void AddEasternKingdomsScripts(); +void AddKalimdorScripts(); +void AddOutlandScripts(); +void AddNorthrendScripts(); +void AddEventsScripts(); +void AddPetScripts(); +void AddOutdoorPvPScripts(); +void AddCustomScripts(); #endif void AddScripts() { - AddSpellScripts(); + AddSpellsScripts(); AddSC_SmartScripts(); - AddCommandScripts(); + AddCommandsScripts(); #ifdef SCRIPTS AddWorldScripts(); AddEasternKingdomsScripts(); AddKalimdorScripts(); AddOutlandScripts(); AddNorthrendScripts(); - AddEventScripts(); + AddEventsScripts(); AddPetScripts(); - AddBattlegroundScripts(); AddOutdoorPvPScripts(); AddCustomScripts(); #endif } - -void AddSpellScripts() -{ - AddSC_deathknight_spell_scripts(); - AddSC_druid_spell_scripts(); - AddSC_generic_spell_scripts(); - AddSC_hunter_spell_scripts(); - AddSC_mage_spell_scripts(); - AddSC_paladin_spell_scripts(); - AddSC_priest_spell_scripts(); - AddSC_rogue_spell_scripts(); - AddSC_shaman_spell_scripts(); - AddSC_warlock_spell_scripts(); - AddSC_warrior_spell_scripts(); - AddSC_quest_spell_scripts(); - AddSC_item_spell_scripts(); - AddSC_holiday_spell_scripts(); -} - -void AddCommandScripts() -{ - AddSC_account_commandscript(); - AddSC_achievement_commandscript(); - AddSC_ahbot_commandscript(); - AddSC_arena_commandscript(); - AddSC_ban_commandscript(); - AddSC_bf_commandscript(); - AddSC_cast_commandscript(); - AddSC_character_commandscript(); - AddSC_cheat_commandscript(); - AddSC_debug_commandscript(); - AddSC_deserter_commandscript(); - AddSC_disable_commandscript(); - AddSC_event_commandscript(); - AddSC_gm_commandscript(); - AddSC_go_commandscript(); - AddSC_gobject_commandscript(); - AddSC_group_commandscript(); - AddSC_guild_commandscript(); - AddSC_honor_commandscript(); - AddSC_instance_commandscript(); - AddSC_learn_commandscript(); - AddSC_lookup_commandscript(); - AddSC_lfg_commandscript(); - AddSC_list_commandscript(); - AddSC_message_commandscript(); - AddSC_misc_commandscript(); - AddSC_mmaps_commandscript(); - AddSC_modify_commandscript(); - AddSC_npc_commandscript(); - AddSC_quest_commandscript(); - AddSC_pet_commandscript(); - AddSC_rbac_commandscript(); - AddSC_reload_commandscript(); - AddSC_reset_commandscript(); - AddSC_send_commandscript(); - AddSC_server_commandscript(); - AddSC_tele_commandscript(); - AddSC_ticket_commandscript(); - AddSC_titles_commandscript(); - AddSC_wp_commandscript(); -} - -void AddWorldScripts() -{ -#ifdef SCRIPTS - AddSC_areatrigger_scripts(); - AddSC_emerald_dragons(); - AddSC_generic_creature(); - AddSC_go_scripts(); - AddSC_guards(); - AddSC_item_scripts(); - AddSC_npc_professions(); - AddSC_npc_innkeeper(); - AddSC_npcs_special(); - AddSC_achievement_scripts(); - AddSC_chat_log(); // location: scripts\World\chat_log.cpp - // To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not. - if (sWorld->getBoolConfig(CONFIG_IP_BASED_ACTION_LOGGING)) - AddSC_action_ip_logger(); // location: scripts\World\action_ip_logger.cpp - AddSC_duel_reset(); -#endif -} - -void AddEasternKingdomsScripts() -{ -#ifdef SCRIPTS - AddSC_alterac_valley(); //Alterac Valley - AddSC_boss_balinda(); - AddSC_boss_drekthar(); - AddSC_boss_galvangar(); - AddSC_boss_vanndar(); - AddSC_blackrock_depths(); //Blackrock Depths - AddSC_boss_ambassador_flamelash(); - AddSC_boss_draganthaurissan(); - AddSC_boss_general_angerforge(); - AddSC_boss_high_interrogator_gerstahn(); - AddSC_boss_magmus(); - AddSC_boss_moira_bronzebeard(); - AddSC_boss_tomb_of_seven(); - AddSC_instance_blackrock_depths(); - AddSC_boss_drakkisath(); //Blackrock Spire - AddSC_boss_halycon(); - AddSC_boss_highlordomokk(); - AddSC_boss_mothersmolderweb(); - AddSC_boss_overlordwyrmthalak(); - AddSC_boss_shadowvosh(); - AddSC_boss_thebeast(); - AddSC_boss_warmastervoone(); - AddSC_boss_quatermasterzigris(); - AddSC_boss_pyroguard_emberseer(); - AddSC_boss_gyth(); - AddSC_boss_rend_blackhand(); - AddSC_boss_gizrul_the_slavener(); - AddSC_boss_urok_doomhowl(); - AddSC_boss_lord_valthalak(); - AddSC_instance_blackrock_spire(); - AddSC_boss_razorgore(); //Blackwing lair - AddSC_boss_vaelastrasz(); - AddSC_boss_broodlord(); - AddSC_boss_firemaw(); - AddSC_boss_ebonroc(); - AddSC_boss_flamegor(); - AddSC_boss_chromaggus(); - AddSC_boss_nefarian(); - AddSC_instance_blackwing_lair(); - AddSC_deadmines(); //Deadmines - AddSC_boss_mr_smite(); - AddSC_instance_deadmines(); - AddSC_gnomeregan(); //Gnomeregan - AddSC_instance_gnomeregan(); - AddSC_boss_attumen(); //Karazhan - AddSC_boss_curator(); - AddSC_boss_maiden_of_virtue(); - AddSC_boss_shade_of_aran(); - AddSC_boss_malchezaar(); - AddSC_boss_terestian_illhoof(); - AddSC_boss_moroes(); - AddSC_bosses_opera(); - AddSC_boss_netherspite(); - AddSC_instance_karazhan(); - AddSC_karazhan(); - AddSC_boss_nightbane(); - AddSC_boss_felblood_kaelthas(); // Magister's Terrace - AddSC_boss_selin_fireheart(); - AddSC_boss_vexallus(); - AddSC_boss_priestess_delrissa(); - AddSC_instance_magisters_terrace(); - AddSC_magisters_terrace(); - AddSC_boss_lucifron(); //Molten core - AddSC_boss_magmadar(); - AddSC_boss_gehennas(); - AddSC_boss_garr(); - AddSC_boss_baron_geddon(); - AddSC_boss_shazzrah(); - AddSC_boss_golemagg(); - AddSC_boss_sulfuron(); - AddSC_boss_majordomo(); - AddSC_boss_ragnaros(); - AddSC_instance_molten_core(); - AddSC_instance_ragefire_chasm(); //Ragefire Chasm - AddSC_the_scarlet_enclave(); //Scarlet Enclave - AddSC_the_scarlet_enclave_c1(); - AddSC_the_scarlet_enclave_c2(); - AddSC_the_scarlet_enclave_c5(); - AddSC_boss_arcanist_doan(); //Scarlet Monastery - AddSC_boss_azshir_the_sleepless(); - AddSC_boss_bloodmage_thalnos(); - AddSC_boss_headless_horseman(); - AddSC_boss_herod(); - AddSC_boss_high_inquisitor_fairbanks(); - AddSC_boss_houndmaster_loksey(); - AddSC_boss_interrogator_vishas(); - AddSC_boss_scorn(); - AddSC_instance_scarlet_monastery(); - AddSC_boss_mograine_and_whitemane(); - AddSC_boss_darkmaster_gandling(); //Scholomance - AddSC_boss_death_knight_darkreaver(); - AddSC_boss_theolenkrastinov(); - AddSC_boss_illuciabarov(); - AddSC_boss_instructormalicia(); - AddSC_boss_jandicebarov(); - AddSC_boss_kormok(); - AddSC_boss_lordalexeibarov(); - AddSC_boss_lorekeeperpolkelt(); - AddSC_boss_rasfrost(); - AddSC_boss_theravenian(); - AddSC_boss_vectus(); - AddSC_boss_kirtonos_the_herald(); - AddSC_instance_scholomance(); - AddSC_shadowfang_keep(); //Shadowfang keep - AddSC_instance_shadowfang_keep(); - AddSC_boss_magistrate_barthilas(); //Stratholme - AddSC_boss_maleki_the_pallid(); - AddSC_boss_nerubenkan(); - AddSC_boss_cannon_master_willey(); - AddSC_boss_baroness_anastari(); - AddSC_boss_ramstein_the_gorger(); - AddSC_boss_timmy_the_cruel(); - AddSC_boss_postmaster_malown(); - AddSC_boss_baron_rivendare(); - AddSC_boss_dathrohan_balnazzar(); - AddSC_boss_order_of_silver_hand(); - AddSC_instance_stratholme(); - AddSC_stratholme(); - AddSC_sunken_temple(); // Sunken Temple - AddSC_instance_sunken_temple(); - AddSC_instance_sunwell_plateau(); //Sunwell Plateau - AddSC_boss_kalecgos(); - AddSC_boss_brutallus(); - AddSC_boss_felmyst(); - AddSC_boss_eredar_twins(); - AddSC_boss_muru(); - AddSC_boss_kiljaeden(); - AddSC_sunwell_plateau(); - AddSC_instance_the_stockade(); //The Stockade - AddSC_boss_archaedas(); //Uldaman - AddSC_boss_ironaya(); - AddSC_uldaman(); - AddSC_instance_uldaman(); - AddSC_boss_akilzon(); //Zul'Aman - AddSC_boss_halazzi(); - AddSC_boss_hex_lord_malacrass(); - AddSC_boss_janalai(); - AddSC_boss_nalorakk(); - AddSC_boss_zuljin(); - AddSC_instance_zulaman(); - AddSC_zulaman(); - AddSC_boss_jeklik(); //Zul'Gurub - AddSC_boss_venoxis(); - AddSC_boss_marli(); - AddSC_boss_mandokir(); - AddSC_boss_gahzranka(); - AddSC_boss_thekal(); - AddSC_boss_arlokk(); - AddSC_boss_jindo(); - AddSC_boss_hakkar(); - AddSC_boss_grilek(); - AddSC_boss_hazzarah(); - AddSC_boss_renataki(); - AddSC_boss_wushoolay(); - AddSC_instance_zulgurub(); - - //AddSC_alterac_mountains(); - AddSC_arathi_highlands(); - AddSC_blasted_lands(); - AddSC_burning_steppes(); - AddSC_duskwood(); - AddSC_eastern_plaguelands(); - AddSC_ghostlands(); - AddSC_hinterlands(); - AddSC_isle_of_queldanas(); - AddSC_loch_modan(); - AddSC_redridge_mountains(); - AddSC_silverpine_forest(); - AddSC_stormwind_city(); - AddSC_stranglethorn_vale(); - AddSC_swamp_of_sorrows(); - AddSC_tirisfal_glades(); - AddSC_undercity(); - AddSC_western_plaguelands(); - AddSC_wetlands(); -#endif -} - -void AddKalimdorScripts() -{ -#ifdef SCRIPTS - AddSC_blackfathom_deeps(); //Blackfathom Depths - AddSC_boss_gelihast(); - AddSC_boss_kelris(); - AddSC_boss_aku_mai(); - AddSC_instance_blackfathom_deeps(); - AddSC_hyjal(); //CoT Battle for Mt. Hyjal - AddSC_boss_archimonde(); - AddSC_instance_mount_hyjal(); - AddSC_hyjal_trash(); - AddSC_boss_rage_winterchill(); - AddSC_boss_anetheron(); - AddSC_boss_kazrogal(); - AddSC_boss_azgalor(); - AddSC_boss_captain_skarloc(); //CoT Old Hillsbrad - AddSC_boss_epoch_hunter(); - AddSC_boss_lieutenant_drake(); - AddSC_instance_old_hillsbrad(); - AddSC_old_hillsbrad(); - AddSC_boss_aeonus(); //CoT The Black Morass - AddSC_boss_chrono_lord_deja(); - AddSC_boss_temporus(); - AddSC_the_black_morass(); - AddSC_instance_the_black_morass(); - AddSC_boss_epoch(); //CoT Culling Of Stratholme - AddSC_boss_infinite_corruptor(); - AddSC_boss_salramm(); - AddSC_boss_mal_ganis(); - AddSC_boss_meathook(); - AddSC_culling_of_stratholme(); - AddSC_instance_culling_of_stratholme(); - AddSC_instance_dire_maul(); //Dire Maul - AddSC_boss_celebras_the_cursed(); //Maraudon - AddSC_boss_landslide(); - AddSC_boss_noxxion(); - AddSC_boss_ptheradras(); - AddSC_instance_maraudon(); - AddSC_boss_onyxia(); //Onyxia's Lair - AddSC_instance_onyxias_lair(); - AddSC_boss_tuten_kash(); //Razorfen Downs - AddSC_boss_mordresh_fire_eye(); - AddSC_boss_glutton(); - AddSC_boss_amnennar_the_coldbringer(); - AddSC_razorfen_downs(); - AddSC_instance_razorfen_downs(); - AddSC_razorfen_kraul(); //Razorfen Kraul - AddSC_instance_razorfen_kraul(); - AddSC_boss_kurinnaxx(); //Ruins of ahn'qiraj - AddSC_boss_rajaxx(); - AddSC_boss_moam(); - AddSC_boss_buru(); - AddSC_boss_ayamiss(); - AddSC_boss_ossirian(); - AddSC_instance_ruins_of_ahnqiraj(); - AddSC_boss_cthun(); //Temple of ahn'qiraj - AddSC_boss_viscidus(); - AddSC_boss_fankriss(); - AddSC_boss_huhuran(); - AddSC_bug_trio(); - AddSC_boss_sartura(); - AddSC_boss_skeram(); - AddSC_boss_twinemperors(); - AddSC_boss_ouro(); - AddSC_npc_anubisath_sentinel(); - AddSC_instance_temple_of_ahnqiraj(); - AddSC_wailing_caverns(); //Wailing caverns - AddSC_instance_wailing_caverns(); - AddSC_boss_zum_rah(); //Zul'Farrak - AddSC_zulfarrak(); - AddSC_instance_zulfarrak(); - - AddSC_ashenvale(); - AddSC_azshara(); - AddSC_azuremyst_isle(); - AddSC_bloodmyst_isle(); - AddSC_boss_azuregos(); - AddSC_darkshore(); - AddSC_desolace(); - AddSC_durotar(); - AddSC_dustwallow_marsh(); - AddSC_felwood(); - AddSC_feralas(); - AddSC_moonglade(); - AddSC_orgrimmar(); - AddSC_silithus(); - AddSC_stonetalon_mountains(); - AddSC_tanaris(); - AddSC_the_barrens(); - AddSC_thousand_needles(); - AddSC_thunder_bluff(); - AddSC_ungoro_crater(); - AddSC_winterspring(); -#endif -} - -void AddOutlandScripts() -{ -#ifdef SCRIPTS - // Auchindoun - Auchenai Crypts - AddSC_boss_shirrak_the_dead_watcher(); - AddSC_boss_exarch_maladaar(); - AddSC_instance_auchenai_crypts(); - - // Auchindoun - Mana Tombs - AddSC_boss_pandemonius(); - AddSC_boss_nexusprince_shaffar(); - AddSC_instance_mana_tombs(); - - // Auchindoun - Sekketh Halls - AddSC_boss_darkweaver_syth(); - AddSC_boss_talon_king_ikiss(); - AddSC_boss_anzu(); - AddSC_instance_sethekk_halls(); - - // Auchindoun - Shadow Labyrinth - AddSC_boss_ambassador_hellmaw(); - AddSC_boss_blackheart_the_inciter(); - AddSC_boss_grandmaster_vorpil(); - AddSC_boss_murmur(); - AddSC_instance_shadow_labyrinth(); - - // Black Temple - AddSC_black_temple(); - AddSC_boss_illidan(); - AddSC_boss_shade_of_akama(); - AddSC_boss_supremus(); - AddSC_boss_gurtogg_bloodboil(); - AddSC_boss_mother_shahraz(); - AddSC_boss_reliquary_of_souls(); - AddSC_boss_teron_gorefiend(); - AddSC_boss_najentus(); - AddSC_boss_illidari_council(); - AddSC_instance_black_temple(); - - // Coilfang Reservoir - Serpent Shrine Cavern - AddSC_boss_fathomlord_karathress(); - AddSC_boss_hydross_the_unstable(); - AddSC_boss_lady_vashj(); - AddSC_boss_leotheras_the_blind(); - AddSC_boss_morogrim_tidewalker(); - AddSC_instance_serpentshrine_cavern(); - AddSC_boss_the_lurker_below(); - - // Coilfang Reservoir - The Steam Vault - AddSC_instance_steam_vault(); - AddSC_boss_hydromancer_thespia(); - AddSC_boss_mekgineer_steamrigger(); - AddSC_boss_warlord_kalithresh(); - - // Coilfang Reservoir - The Slave Pens - AddSC_instance_the_slave_pens(); - AddSC_boss_mennu_the_betrayer(); - AddSC_boss_rokmar_the_crackler(); - AddSC_boss_quagmirran(); - - // Coilfang Reservoir - The Underbog - AddSC_instance_the_underbog(); - AddSC_boss_hungarfen(); - AddSC_boss_the_black_stalker(); - - // Gruul's Lair - AddSC_boss_gruul(); - AddSC_boss_high_king_maulgar(); - AddSC_instance_gruuls_lair(); - AddSC_boss_broggok(); //HC Blood Furnace - AddSC_boss_kelidan_the_breaker(); - AddSC_boss_the_maker(); - AddSC_instance_blood_furnace(); - AddSC_boss_magtheridon(); //HC Magtheridon's Lair - AddSC_instance_magtheridons_lair(); - AddSC_boss_grand_warlock_nethekurse(); //HC Shattered Halls - AddSC_boss_warbringer_omrogg(); - AddSC_boss_warchief_kargath_bladefist(); - AddSC_shattered_halls(); - AddSC_instance_shattered_halls(); - AddSC_boss_watchkeeper_gargolmar(); //HC Ramparts - AddSC_boss_omor_the_unscarred(); - AddSC_boss_vazruden_the_herald(); - AddSC_instance_ramparts(); - AddSC_arcatraz(); //TK Arcatraz - AddSC_boss_zereketh_the_unbound(); - AddSC_boss_dalliah_the_doomsayer(); - AddSC_boss_wrath_scryer_soccothrates(); - AddSC_boss_harbinger_skyriss(); - AddSC_instance_arcatraz(); - AddSC_boss_high_botanist_freywinn(); //TK Botanica - AddSC_boss_laj(); - AddSC_boss_warp_splinter(); - AddSC_boss_thorngrin_the_tender(); - AddSC_boss_commander_sarannis(); - AddSC_instance_the_botanica(); - AddSC_boss_alar(); //TK The Eye - AddSC_boss_kaelthas(); - AddSC_boss_void_reaver(); - AddSC_boss_high_astromancer_solarian(); - AddSC_instance_the_eye(); - AddSC_the_eye(); - AddSC_boss_gatewatcher_iron_hand(); //TK The Mechanar - AddSC_boss_gatewatcher_gyrokill(); - AddSC_boss_nethermancer_sepethrea(); - AddSC_boss_pathaleon_the_calculator(); - AddSC_boss_mechano_lord_capacitus(); - AddSC_instance_mechanar(); - - AddSC_blades_edge_mountains(); - AddSC_boss_doomlordkazzak(); - AddSC_boss_doomwalker(); - AddSC_hellfire_peninsula(); - AddSC_nagrand(); - AddSC_netherstorm(); - AddSC_shadowmoon_valley(); - AddSC_shattrath_city(); - AddSC_terokkar_forest(); - AddSC_zangarmarsh(); -#endif -} - -void AddNorthrendScripts() -{ -#ifdef SCRIPTS - AddSC_boss_slad_ran(); //Gundrak - AddSC_boss_moorabi(); - AddSC_boss_drakkari_colossus(); - AddSC_boss_gal_darah(); - AddSC_boss_eck(); - AddSC_instance_gundrak(); - - // Azjol-Nerub - Ahn'kahet - AddSC_boss_elder_nadox(); - AddSC_boss_taldaram(); - AddSC_boss_amanitar(); - AddSC_boss_jedoga_shadowseeker(); - AddSC_boss_volazj(); - AddSC_instance_ahnkahet(); - - // Azjol-Nerub - Azjol-Nerub - AddSC_boss_krik_thir(); - AddSC_boss_hadronox(); - AddSC_boss_anub_arak(); - AddSC_instance_azjol_nerub(); - - // Drak'Tharon Keep - AddSC_boss_trollgore(); - AddSC_boss_novos(); - AddSC_boss_king_dred(); - AddSC_boss_tharon_ja(); - AddSC_instance_drak_tharon_keep(); - - AddSC_boss_argent_challenge(); //Trial of the Champion - AddSC_boss_black_knight(); - AddSC_boss_grand_champions(); - AddSC_instance_trial_of_the_champion(); - AddSC_trial_of_the_champion(); - AddSC_boss_anubarak_trial(); //Trial of the Crusader - AddSC_boss_faction_champions(); - AddSC_boss_jaraxxus(); - AddSC_trial_of_the_crusader(); - AddSC_boss_twin_valkyr(); - AddSC_boss_northrend_beasts(); - AddSC_instance_trial_of_the_crusader(); - AddSC_boss_anubrekhan(); //Naxxramas - AddSC_boss_maexxna(); - AddSC_boss_patchwerk(); - AddSC_boss_grobbulus(); - AddSC_boss_razuvious(); - AddSC_boss_kelthuzad(); - AddSC_boss_loatheb(); - AddSC_boss_noth(); - AddSC_boss_gluth(); - AddSC_boss_sapphiron(); - AddSC_boss_four_horsemen(); - AddSC_boss_faerlina(); - AddSC_boss_heigan(); - AddSC_boss_gothik(); - AddSC_boss_thaddius(); - AddSC_instance_naxxramas(); - AddSC_boss_nexus_commanders(); // The Nexus Nexus - AddSC_boss_magus_telestra(); - AddSC_boss_anomalus(); - AddSC_boss_ormorok(); - AddSC_boss_keristrasza(); - AddSC_instance_nexus(); - AddSC_boss_drakos(); //The Nexus The Oculus - AddSC_boss_urom(); - AddSC_boss_varos(); - AddSC_boss_eregos(); - AddSC_instance_oculus(); - AddSC_oculus(); - AddSC_boss_malygos(); // The Nexus: Eye of Eternity - AddSC_instance_eye_of_eternity(); - AddSC_boss_sartharion(); //Obsidian Sanctum - AddSC_obsidian_sanctum(); - AddSC_instance_obsidian_sanctum(); - AddSC_boss_bjarngrim(); //Ulduar Halls of Lightning - AddSC_boss_loken(); - AddSC_boss_ionar(); - AddSC_boss_volkhan(); - AddSC_instance_halls_of_lightning(); - AddSC_boss_maiden_of_grief(); //Ulduar Halls of Stone - AddSC_boss_krystallus(); - AddSC_boss_sjonnir(); - AddSC_instance_halls_of_stone(); - AddSC_halls_of_stone(); - AddSC_boss_auriaya(); //Ulduar Ulduar - AddSC_boss_flame_leviathan(); - AddSC_boss_ignis(); - AddSC_boss_razorscale(); - AddSC_boss_xt002(); - AddSC_boss_general_vezax(); - AddSC_boss_assembly_of_iron(); - AddSC_boss_kologarn(); - AddSC_boss_mimiron(); - AddSC_boss_hodir(); - AddSC_boss_freya(); - AddSC_boss_yogg_saron(); - AddSC_boss_algalon_the_observer(); - AddSC_instance_ulduar(); - - // Utgarde Keep - Utgarde Keep - AddSC_boss_keleseth(); - AddSC_boss_skarvald_dalronn(); - AddSC_boss_ingvar_the_plunderer(); - AddSC_instance_utgarde_keep(); - AddSC_utgarde_keep(); - - // Utgarde Keep - Utgarde Pinnacle - AddSC_boss_svala(); - AddSC_boss_palehoof(); - AddSC_boss_skadi(); - AddSC_boss_ymiron(); - AddSC_instance_utgarde_pinnacle(); - - // Vault of Archavon - AddSC_boss_archavon(); - AddSC_boss_emalon(); - AddSC_boss_koralon(); - AddSC_boss_toravon(); - AddSC_instance_vault_of_archavon(); - - AddSC_boss_cyanigosa(); //Violet Hold - AddSC_boss_erekem(); - AddSC_boss_ichoron(); - AddSC_boss_lavanthor(); - AddSC_boss_moragg(); - AddSC_boss_xevozz(); - AddSC_boss_zuramat(); - AddSC_instance_violet_hold(); - AddSC_violet_hold(); - AddSC_instance_forge_of_souls(); //Forge of Souls - AddSC_forge_of_souls(); - AddSC_boss_bronjahm(); - AddSC_boss_devourer_of_souls(); - AddSC_instance_pit_of_saron(); //Pit of Saron - AddSC_pit_of_saron(); - AddSC_boss_garfrost(); - AddSC_boss_ick(); - AddSC_boss_tyrannus(); - AddSC_instance_halls_of_reflection(); // Halls of Reflection - AddSC_halls_of_reflection(); - AddSC_boss_falric(); - AddSC_boss_marwyn(); - AddSC_boss_lord_marrowgar(); // Icecrown Citadel - AddSC_boss_lady_deathwhisper(); - AddSC_boss_icecrown_gunship_battle(); - AddSC_boss_deathbringer_saurfang(); - AddSC_boss_festergut(); - AddSC_boss_rotface(); - AddSC_boss_professor_putricide(); - AddSC_boss_blood_prince_council(); - AddSC_boss_blood_queen_lana_thel(); - AddSC_boss_valithria_dreamwalker(); - AddSC_boss_sindragosa(); - AddSC_boss_the_lich_king(); - AddSC_icecrown_citadel_teleport(); - AddSC_instance_icecrown_citadel(); - AddSC_icecrown_citadel(); - AddSC_instance_ruby_sanctum(); // Ruby Sanctum - AddSC_ruby_sanctum(); - AddSC_boss_baltharus_the_warborn(); - AddSC_boss_saviana_ragefire(); - AddSC_boss_general_zarithrian(); - AddSC_boss_halion(); - - AddSC_dalaran(); - AddSC_borean_tundra(); - AddSC_dragonblight(); - AddSC_grizzly_hills(); - AddSC_howling_fjord(); - AddSC_icecrown(); - AddSC_sholazar_basin(); - AddSC_storm_peaks(); - AddSC_wintergrasp(); - AddSC_zuldrak(); - AddSC_crystalsong_forest(); - AddSC_isle_of_conquest(); -#endif -} - -void AddEventScripts() -{ -#ifdef SCRIPTS - AddSC_event_childrens_week(); -#endif -} - -void AddPetScripts() -{ -#ifdef SCRIPTS - AddSC_deathknight_pet_scripts(); - AddSC_generic_pet_scripts(); - AddSC_hunter_pet_scripts(); - AddSC_mage_pet_scripts(); - AddSC_priest_pet_scripts(); - AddSC_shaman_pet_scripts(); -#endif -} - -void AddOutdoorPvPScripts() -{ -#ifdef SCRIPTS - AddSC_outdoorpvp_ep(); - AddSC_outdoorpvp_hp(); - AddSC_outdoorpvp_na(); - AddSC_outdoorpvp_si(); - AddSC_outdoorpvp_tf(); - AddSC_outdoorpvp_zm(); -#endif -} - -void AddBattlegroundScripts() -{ -#ifdef SCRIPTS -#endif -} - -#ifdef SCRIPTS -/* This is where custom scripts' loading functions should be declared. */ - -#endif - -void AddCustomScripts() -{ -#ifdef SCRIPTS - /* This is where custom scripts should be added. */ - -#endif -} diff --git a/src/server/game/Scripting/ScriptLoader.h b/src/server/game/Scripting/ScriptLoader.h index 4adb215e130..57b62df22d1 100644 --- a/src/server/game/Scripting/ScriptLoader.h +++ b/src/server/game/Scripting/ScriptLoader.h @@ -19,17 +19,5 @@ #define SC_SCRIPTLOADER_H void AddScripts(); -void AddSpellScripts(); -void AddCommandScripts(); -void AddWorldScripts(); -void AddEasternKingdomsScripts(); -void AddKalimdorScripts(); -void AddOutlandScripts(); -void AddNorthrendScripts(); -void AddEventScripts(); -void AddPetScripts(); -void AddBattlegroundScripts(); -void AddOutdoorPvPScripts(); -void AddCustomScripts(); #endif diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index a15b6f8ad07..32e7421465a 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -16,9 +16,15 @@ if (USE_SCRIPTPCH) endif () message(STATUS "SCRIPT PREPARATIONS") -include(Spells/CMakeLists.txt) -include(Commands/CMakeLists.txt) +macro(PrepareScripts name out) + file(GLOB_RECURSE found + ${name}/*.h + ${name}/*.cpp + ) + list(APPEND ${out} ${found}) + message(STATUS " -> Prepared: ${name}") +endmacro(PrepareScripts) set(scripts_STAT_SRCS ${scripts_STAT_SRCS} @@ -28,16 +34,20 @@ set(scripts_STAT_SRCS ../game/Maps/AreaBoundary.cpp ) +PrepareScripts(Spells scripts_STAT_SRCS) +PrepareScripts(Commands scripts_STAT_SRCS) + if(SCRIPTS) - include(Custom/CMakeLists.txt) - include(World/CMakeLists.txt) - include(OutdoorPvP/CMakeLists.txt) - include(EasternKingdoms/CMakeLists.txt) - include(Kalimdor/CMakeLists.txt) - include(Outland/CMakeLists.txt) - include(Northrend/CMakeLists.txt) - include(Events/CMakeLists.txt) - include(Pet/CMakeLists.txt) + PrepareScripts(Commands scripts_STAT_SRCS) + PrepareScripts(Custom scripts_STAT_SRCS) + PrepareScripts(World scripts_STAT_SRCS) + PrepareScripts(OutdoorPvP scripts_STAT_SRCS) + PrepareScripts(EasternKingdoms scripts_STAT_SRCS) + PrepareScripts(Kalimdor scripts_STAT_SRCS) + PrepareScripts(Outland scripts_STAT_SRCS) + PrepareScripts(Northrend scripts_STAT_SRCS) + PrepareScripts(Events scripts_STAT_SRCS) + PrepareScripts(Pet scripts_STAT_SRCS) endif() message(STATUS "SCRIPT PREPARATION COMPLETE") diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt deleted file mode 100644 index d4d75cd175f..00000000000 --- a/src/server/scripts/Commands/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -file(GLOB_RECURSE sources_Commands Commands/*.cpp Commands/*.h) - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - ${sources_Commands} -) - -message(" -> Prepared: Commands") diff --git a/src/server/scripts/Commands/cs_script_loader.cpp b/src/server/scripts/Commands/cs_script_loader.cpp new file mode 100644 index 00000000000..449e7053942 --- /dev/null +++ b/src/server/scripts/Commands/cs_script_loader.cpp @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_account_commandscript(); +void AddSC_achievement_commandscript(); +void AddSC_ahbot_commandscript(); +void AddSC_arena_commandscript(); +void AddSC_ban_commandscript(); +void AddSC_bf_commandscript(); +void AddSC_cast_commandscript(); +void AddSC_character_commandscript(); +void AddSC_cheat_commandscript(); +void AddSC_debug_commandscript(); +void AddSC_deserter_commandscript(); +void AddSC_disable_commandscript(); +void AddSC_event_commandscript(); +void AddSC_gm_commandscript(); +void AddSC_go_commandscript(); +void AddSC_gobject_commandscript(); +void AddSC_group_commandscript(); +void AddSC_guild_commandscript(); +void AddSC_honor_commandscript(); +void AddSC_instance_commandscript(); +void AddSC_learn_commandscript(); +void AddSC_lfg_commandscript(); +void AddSC_list_commandscript(); +void AddSC_lookup_commandscript(); +void AddSC_message_commandscript(); +void AddSC_misc_commandscript(); +void AddSC_mmaps_commandscript(); +void AddSC_modify_commandscript(); +void AddSC_npc_commandscript(); +void AddSC_pet_commandscript(); +void AddSC_quest_commandscript(); +void AddSC_rbac_commandscript(); +void AddSC_reload_commandscript(); +void AddSC_reset_commandscript(); +void AddSC_send_commandscript(); +void AddSC_server_commandscript(); +void AddSC_tele_commandscript(); +void AddSC_ticket_commandscript(); +void AddSC_titles_commandscript(); +void AddSC_wp_commandscript(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddCommandsScripts() +{ + AddSC_account_commandscript(); + AddSC_achievement_commandscript(); + AddSC_ahbot_commandscript(); + AddSC_arena_commandscript(); + AddSC_ban_commandscript(); + AddSC_bf_commandscript(); + AddSC_cast_commandscript(); + AddSC_character_commandscript(); + AddSC_cheat_commandscript(); + AddSC_debug_commandscript(); + AddSC_deserter_commandscript(); + AddSC_disable_commandscript(); + AddSC_event_commandscript(); + AddSC_gm_commandscript(); + AddSC_go_commandscript(); + AddSC_gobject_commandscript(); + AddSC_group_commandscript(); + AddSC_guild_commandscript(); + AddSC_honor_commandscript(); + AddSC_instance_commandscript(); + AddSC_learn_commandscript(); + AddSC_lookup_commandscript(); + AddSC_lfg_commandscript(); + AddSC_list_commandscript(); + AddSC_message_commandscript(); + AddSC_misc_commandscript(); + AddSC_mmaps_commandscript(); + AddSC_modify_commandscript(); + AddSC_npc_commandscript(); + AddSC_quest_commandscript(); + AddSC_pet_commandscript(); + AddSC_rbac_commandscript(); + AddSC_reload_commandscript(); + AddSC_reset_commandscript(); + AddSC_send_commandscript(); + AddSC_server_commandscript(); + AddSC_tele_commandscript(); + AddSC_ticket_commandscript(); + AddSC_titles_commandscript(); + AddSC_wp_commandscript(); +} diff --git a/src/server/scripts/Custom/CMakeLists.txt b/src/server/scripts/Custom/CMakeLists.txt deleted file mode 100644 index 595ff801813..00000000000 --- a/src/server/scripts/Custom/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# file(GLOB_RECURSE sources_Custom Custom/*.cpp Custom/*.h) - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} -# ${sources_Custom} -) - -message(" -> Prepared: Custom") diff --git a/src/server/scripts/Custom/custom_script_loader.cpp b/src/server/scripts/Custom/custom_script_loader.cpp new file mode 100644 index 00000000000..dd4b5e99d77 --- /dev/null +++ b/src/server/scripts/Custom/custom_script_loader.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: + + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddCustomScripts() +{ +} diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt deleted file mode 100644 index 8e6616347f9..00000000000 --- a/src/server/scripts/EasternKingdoms/CMakeLists.txt +++ /dev/null @@ -1,204 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - EasternKingdoms/zone_ghostlands.cpp - EasternKingdoms/AlteracValley/boss_galvangar.cpp - EasternKingdoms/AlteracValley/boss_balinda.cpp - EasternKingdoms/AlteracValley/boss_drekthar.cpp - EasternKingdoms/AlteracValley/boss_vanndar.cpp - EasternKingdoms/AlteracValley/alterac_valley.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_high_interrogator_gerstahn.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_general_angerforge.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_ambassador_flamelash.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.h - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp - EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_magmus.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_firemaw.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_broodlord_lashlayer.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_ebonroc.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/boss_flamegor.cpp - EasternKingdoms/BlackrockMountain/BlackwingLair/blackwing_lair.h - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_drakkisath.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_mother_smolderweb.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_halycon.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_overlord_wyrmthalak.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_shadow_hunter_voshgajin.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_highlord_omokk.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gizrul_the_slavener.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_urok_doomhowl.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp - EasternKingdoms/BlackrockMountain/BlackrockSpire/blackrock_spire.h - EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_golemagg.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.h - EasternKingdoms/BlackrockMountain/MoltenCore/instance_molten_core.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp - EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp - EasternKingdoms/Scholomance/boss_the_ravenian.cpp - EasternKingdoms/Scholomance/boss_instructor_malicia.cpp - EasternKingdoms/Scholomance/boss_death_knight_darkreaver.cpp - EasternKingdoms/Scholomance/boss_illucia_barov.cpp - EasternKingdoms/Scholomance/scholomance.h - EasternKingdoms/Scholomance/boss_vectus.cpp - EasternKingdoms/Scholomance/boss_jandice_barov.cpp - EasternKingdoms/Scholomance/boss_kormok.cpp - EasternKingdoms/Scholomance/boss_lord_alexei_barov.cpp - EasternKingdoms/Scholomance/boss_doctor_theolen_krastinov.cpp - EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp - EasternKingdoms/Scholomance/instance_scholomance.cpp - EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp - EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp - EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp - EasternKingdoms/zone_isle_of_queldanas.cpp - EasternKingdoms/ZulGurub/boss_hakkar.cpp - EasternKingdoms/ZulGurub/boss_mandokir.cpp - EasternKingdoms/ZulGurub/boss_marli.cpp - EasternKingdoms/ZulGurub/boss_hazzarah.cpp - EasternKingdoms/ZulGurub/boss_jeklik.cpp - EasternKingdoms/ZulGurub/boss_grilek.cpp - EasternKingdoms/ZulGurub/zulgurub.h - EasternKingdoms/ZulGurub/boss_renataki.cpp - EasternKingdoms/ZulGurub/boss_arlokk.cpp - EasternKingdoms/ZulGurub/boss_gahzranka.cpp - EasternKingdoms/ZulGurub/boss_venoxis.cpp - EasternKingdoms/ZulGurub/instance_zulgurub.cpp - EasternKingdoms/ZulGurub/boss_jindo.cpp - EasternKingdoms/ZulGurub/boss_wushoolay.cpp - EasternKingdoms/ZulGurub/boss_thekal.cpp - EasternKingdoms/zone_wetlands.cpp - EasternKingdoms/zone_arathi_highlands.cpp - EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp - EasternKingdoms/Gnomeregan/gnomeregan.cpp - EasternKingdoms/Gnomeregan/gnomeregan.h - EasternKingdoms/zone_redridge_mountains.cpp - EasternKingdoms/ScarletEnclave/chapter2.cpp - EasternKingdoms/ScarletEnclave/chapter5.cpp - EasternKingdoms/ScarletEnclave/chapter1.cpp - EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp - EasternKingdoms/zone_eastern_plaguelands.cpp - EasternKingdoms/Stratholme/boss_baroness_anastari.cpp - EasternKingdoms/Stratholme/boss_nerubenkan.cpp - EasternKingdoms/Stratholme/instance_stratholme.cpp - EasternKingdoms/Stratholme/boss_dathrohan_balnazzar.cpp - EasternKingdoms/Stratholme/boss_timmy_the_cruel.cpp - EasternKingdoms/Stratholme/boss_baron_rivendare.cpp - EasternKingdoms/Stratholme/boss_magistrate_barthilas.cpp - EasternKingdoms/Stratholme/boss_order_of_silver_hand.cpp - EasternKingdoms/Stratholme/boss_ramstein_the_gorger.cpp - EasternKingdoms/Stratholme/boss_cannon_master_willey.cpp - EasternKingdoms/Stratholme/boss_maleki_the_pallid.cpp - EasternKingdoms/Stratholme/boss_postmaster_malown.cpp - EasternKingdoms/Stratholme/stratholme.h - EasternKingdoms/Stratholme/stratholme.cpp - EasternKingdoms/zone_tirisfal_glades.cpp - EasternKingdoms/SunkenTemple/sunken_temple.cpp - EasternKingdoms/SunkenTemple/sunken_temple.h - EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp - EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp - EasternKingdoms/MagistersTerrace/magisters_terrace.h - EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp - EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp - EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp - EasternKingdoms/MagistersTerrace/boss_vexallus.cpp - EasternKingdoms/MagistersTerrace/magisters_terrace.cpp - EasternKingdoms/Uldaman/uldaman.cpp - EasternKingdoms/Uldaman/boss_ironaya.cpp - EasternKingdoms/Uldaman/uldaman.h - EasternKingdoms/Uldaman/instance_uldaman.cpp - EasternKingdoms/Uldaman/boss_archaedas.cpp - EasternKingdoms/zone_swamp_of_sorrows.cpp - EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp - EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp - EasternKingdoms/SunwellPlateau/sunwell_plateau.h - EasternKingdoms/SunwellPlateau/boss_muru.cpp - EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp - EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp - EasternKingdoms/SunwellPlateau/boss_brutallus.cpp - EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp - EasternKingdoms/SunwellPlateau/boss_felmyst.cpp - EasternKingdoms/zone_stranglethorn_vale.cpp - EasternKingdoms/Deadmines/deadmines.h - EasternKingdoms/Deadmines/deadmines.cpp - EasternKingdoms/Deadmines/boss_mr_smite.cpp - EasternKingdoms/Deadmines/instance_deadmines.cpp - EasternKingdoms/zone_duskwood.cpp - EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp - EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp - EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp - EasternKingdoms/ScarletMonastery/boss_interrogator_vishas.cpp - EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp - EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp - EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp - EasternKingdoms/ScarletMonastery/scarlet_monastery.h - EasternKingdoms/ScarletMonastery/boss_high_inquisitor_fairbanks.cpp - EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp - EasternKingdoms/ScarletMonastery/boss_herod.cpp - EasternKingdoms/ScarletMonastery/boss_scorn.cpp - EasternKingdoms/zone_undercity.cpp - EasternKingdoms/zone_loch_modan.cpp - EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp - EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp - EasternKingdoms/ShadowfangKeep/shadowfang_keep.h - EasternKingdoms/zone_burning_steppes.cpp - EasternKingdoms/zone_blasted_lands.cpp - EasternKingdoms/zone_stormwind_city.cpp - EasternKingdoms/ZulAman/boss_halazzi.cpp - EasternKingdoms/ZulAman/boss_hexlord.cpp - EasternKingdoms/ZulAman/boss_zuljin.cpp - EasternKingdoms/ZulAman/boss_akilzon.cpp - EasternKingdoms/ZulAman/instance_zulaman.cpp - EasternKingdoms/ZulAman/boss_janalai.cpp - EasternKingdoms/ZulAman/boss_nalorakk.cpp - EasternKingdoms/ZulAman/zulaman.cpp - EasternKingdoms/ZulAman/zulaman.h - EasternKingdoms/zone_hinterlands.cpp - EasternKingdoms/zone_western_plaguelands.cpp - EasternKingdoms/zone_silverpine_forest.cpp - EasternKingdoms/Karazhan/instance_karazhan.cpp - EasternKingdoms/Karazhan/boss_nightbane.cpp - EasternKingdoms/Karazhan/karazhan.cpp - EasternKingdoms/Karazhan/boss_curator.cpp - EasternKingdoms/Karazhan/boss_shade_of_aran.cpp - EasternKingdoms/Karazhan/boss_netherspite.cpp - EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp - EasternKingdoms/Karazhan/boss_midnight.cpp - EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp - EasternKingdoms/Karazhan/bosses_opera.cpp - EasternKingdoms/Karazhan/boss_moroes.cpp - EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp - EasternKingdoms/Karazhan/karazhan.h - EasternKingdoms/TheStockade/instance_the_stockade.cpp -) - -message(" -> Prepared: Eastern Kingdoms") diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp new file mode 100644 index 00000000000..8c781bb9001 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp @@ -0,0 +1,372 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_alterac_valley(); //Alterac Valley +void AddSC_boss_balinda(); +void AddSC_boss_drekthar(); +void AddSC_boss_galvangar(); +void AddSC_boss_vanndar(); +void AddSC_blackrock_depths(); //Blackrock Depths +void AddSC_boss_ambassador_flamelash(); +void AddSC_boss_draganthaurissan(); +void AddSC_boss_general_angerforge(); +void AddSC_boss_high_interrogator_gerstahn(); +void AddSC_boss_magmus(); +void AddSC_boss_moira_bronzebeard(); +void AddSC_boss_tomb_of_seven(); +void AddSC_instance_blackrock_depths(); +void AddSC_boss_drakkisath(); //Blackrock Spire +void AddSC_boss_halycon(); +void AddSC_boss_highlordomokk(); +void AddSC_boss_mothersmolderweb(); +void AddSC_boss_overlordwyrmthalak(); +void AddSC_boss_shadowvosh(); +void AddSC_boss_thebeast(); +void AddSC_boss_warmastervoone(); +void AddSC_boss_quatermasterzigris(); +void AddSC_boss_pyroguard_emberseer(); +void AddSC_boss_gyth(); +void AddSC_boss_rend_blackhand(); +void AddSC_boss_gizrul_the_slavener(); +void AddSC_boss_urok_doomhowl(); +void AddSC_boss_lord_valthalak(); +void AddSC_instance_blackrock_spire(); +void AddSC_boss_razorgore(); //Blackwing lair +void AddSC_boss_vaelastrasz(); +void AddSC_boss_broodlord(); +void AddSC_boss_firemaw(); +void AddSC_boss_ebonroc(); +void AddSC_boss_flamegor(); +void AddSC_boss_chromaggus(); +void AddSC_boss_nefarian(); +void AddSC_instance_blackwing_lair(); +void AddSC_deadmines(); //Deadmines +void AddSC_instance_deadmines(); +void AddSC_boss_mr_smite(); +void AddSC_gnomeregan(); //Gnomeregan +void AddSC_instance_gnomeregan(); +void AddSC_boss_attumen(); //Karazhan +void AddSC_boss_curator(); +void AddSC_boss_maiden_of_virtue(); +void AddSC_boss_shade_of_aran(); +void AddSC_boss_malchezaar(); +void AddSC_boss_terestian_illhoof(); +void AddSC_boss_moroes(); +void AddSC_bosses_opera(); +void AddSC_boss_netherspite(); +void AddSC_instance_karazhan(); +void AddSC_karazhan(); +void AddSC_boss_nightbane(); +void AddSC_boss_felblood_kaelthas(); // Magister's Terrace +void AddSC_boss_selin_fireheart(); +void AddSC_boss_vexallus(); +void AddSC_boss_priestess_delrissa(); +void AddSC_instance_magisters_terrace(); +void AddSC_magisters_terrace(); +void AddSC_boss_lucifron(); //Molten core +void AddSC_boss_magmadar(); +void AddSC_boss_gehennas(); +void AddSC_boss_garr(); +void AddSC_boss_baron_geddon(); +void AddSC_boss_shazzrah(); +void AddSC_boss_golemagg(); +void AddSC_boss_sulfuron(); +void AddSC_boss_majordomo(); +void AddSC_boss_ragnaros(); +void AddSC_instance_molten_core(); +void AddSC_instance_ragefire_chasm(); //Ragefire Chasm +void AddSC_the_scarlet_enclave(); //Scarlet Enclave +void AddSC_the_scarlet_enclave_c1(); +void AddSC_the_scarlet_enclave_c2(); +void AddSC_the_scarlet_enclave_c5(); +void AddSC_boss_arcanist_doan(); //Scarlet Monastery +void AddSC_boss_azshir_the_sleepless(); +void AddSC_boss_bloodmage_thalnos(); +void AddSC_boss_headless_horseman(); +void AddSC_boss_herod(); +void AddSC_boss_high_inquisitor_fairbanks(); +void AddSC_boss_houndmaster_loksey(); +void AddSC_boss_interrogator_vishas(); +void AddSC_boss_scorn(); +void AddSC_instance_scarlet_monastery(); +void AddSC_boss_mograine_and_whitemane(); +void AddSC_boss_darkmaster_gandling(); //Scholomance +void AddSC_boss_death_knight_darkreaver(); +void AddSC_boss_theolenkrastinov(); +void AddSC_boss_illuciabarov(); +void AddSC_boss_instructormalicia(); +void AddSC_boss_jandicebarov(); +void AddSC_boss_kormok(); +void AddSC_boss_lordalexeibarov(); +void AddSC_boss_lorekeeperpolkelt(); +void AddSC_boss_rasfrost(); +void AddSC_boss_theravenian(); +void AddSC_boss_vectus(); +void AddSC_boss_kirtonos_the_herald(); +void AddSC_instance_scholomance(); +void AddSC_shadowfang_keep(); //Shadowfang keep +void AddSC_instance_shadowfang_keep(); +void AddSC_boss_magistrate_barthilas(); //Stratholme +void AddSC_boss_maleki_the_pallid(); +void AddSC_boss_nerubenkan(); +void AddSC_boss_cannon_master_willey(); +void AddSC_boss_baroness_anastari(); +void AddSC_boss_ramstein_the_gorger(); +void AddSC_boss_timmy_the_cruel(); +void AddSC_boss_postmaster_malown(); +void AddSC_boss_baron_rivendare(); +void AddSC_boss_dathrohan_balnazzar(); +void AddSC_boss_order_of_silver_hand(); +void AddSC_instance_stratholme(); +void AddSC_stratholme(); +void AddSC_sunken_temple(); // Sunken Temple +void AddSC_instance_sunken_temple(); +void AddSC_instance_sunwell_plateau(); //Sunwell Plateau +void AddSC_boss_kalecgos(); +void AddSC_boss_brutallus(); +void AddSC_boss_felmyst(); +void AddSC_boss_eredar_twins(); +void AddSC_boss_muru(); +void AddSC_boss_kiljaeden(); +void AddSC_sunwell_plateau(); +void AddSC_boss_archaedas(); //Uldaman +void AddSC_boss_ironaya(); +void AddSC_uldaman(); +void AddSC_instance_uldaman(); +void AddSC_instance_the_stockade(); //The Stockade +void AddSC_boss_akilzon(); //Zul'Aman +void AddSC_boss_halazzi(); +void AddSC_boss_hex_lord_malacrass(); +void AddSC_boss_janalai(); +void AddSC_boss_nalorakk(); +void AddSC_boss_zuljin(); +void AddSC_instance_zulaman(); +void AddSC_zulaman(); +void AddSC_boss_jeklik(); //Zul'Gurub +void AddSC_boss_venoxis(); +void AddSC_boss_marli(); +void AddSC_boss_mandokir(); +void AddSC_boss_gahzranka(); +void AddSC_boss_thekal(); +void AddSC_boss_arlokk(); +void AddSC_boss_jindo(); +void AddSC_boss_hakkar(); +void AddSC_boss_grilek(); +void AddSC_boss_hazzarah(); +void AddSC_boss_renataki(); +void AddSC_boss_wushoolay(); +void AddSC_instance_zulgurub(); +//void AddSC_alterac_mountains(); +void AddSC_arathi_highlands(); +void AddSC_blasted_lands(); +void AddSC_burning_steppes(); +void AddSC_duskwood(); +void AddSC_eastern_plaguelands(); +void AddSC_ghostlands(); +void AddSC_hinterlands(); +void AddSC_isle_of_queldanas(); +void AddSC_loch_modan(); +void AddSC_redridge_mountains(); +void AddSC_silverpine_forest(); +void AddSC_stormwind_city(); +void AddSC_stranglethorn_vale(); +void AddSC_swamp_of_sorrows(); +void AddSC_tirisfal_glades(); +void AddSC_undercity(); +void AddSC_western_plaguelands(); +void AddSC_wetlands(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddEasternKingdomsScripts() +{ + AddSC_alterac_valley(); //Alterac Valley + AddSC_boss_balinda(); + AddSC_boss_drekthar(); + AddSC_boss_galvangar(); + AddSC_boss_vanndar(); + AddSC_blackrock_depths(); //Blackrock Depths + AddSC_boss_ambassador_flamelash(); + AddSC_boss_draganthaurissan(); + AddSC_boss_general_angerforge(); + AddSC_boss_high_interrogator_gerstahn(); + AddSC_boss_magmus(); + AddSC_boss_moira_bronzebeard(); + AddSC_boss_tomb_of_seven(); + AddSC_instance_blackrock_depths(); + AddSC_boss_drakkisath(); //Blackrock Spire + AddSC_boss_halycon(); + AddSC_boss_highlordomokk(); + AddSC_boss_mothersmolderweb(); + AddSC_boss_overlordwyrmthalak(); + AddSC_boss_shadowvosh(); + AddSC_boss_thebeast(); + AddSC_boss_warmastervoone(); + AddSC_boss_quatermasterzigris(); + AddSC_boss_pyroguard_emberseer(); + AddSC_boss_gyth(); + AddSC_boss_rend_blackhand(); + AddSC_boss_gizrul_the_slavener(); + AddSC_boss_urok_doomhowl(); + AddSC_boss_lord_valthalak(); + AddSC_instance_blackrock_spire(); + AddSC_boss_razorgore(); //Blackwing lair + AddSC_boss_vaelastrasz(); + AddSC_boss_broodlord(); + AddSC_boss_firemaw(); + AddSC_boss_ebonroc(); + AddSC_boss_flamegor(); + AddSC_boss_chromaggus(); + AddSC_boss_nefarian(); + AddSC_instance_blackwing_lair(); + AddSC_deadmines(); //Deadmines + AddSC_boss_mr_smite(); + AddSC_instance_deadmines(); + AddSC_gnomeregan(); //Gnomeregan + AddSC_instance_gnomeregan(); + AddSC_boss_attumen(); //Karazhan + AddSC_boss_curator(); + AddSC_boss_maiden_of_virtue(); + AddSC_boss_shade_of_aran(); + AddSC_boss_malchezaar(); + AddSC_boss_terestian_illhoof(); + AddSC_boss_moroes(); + AddSC_bosses_opera(); + AddSC_boss_netherspite(); + AddSC_instance_karazhan(); + AddSC_karazhan(); + AddSC_boss_nightbane(); + AddSC_boss_felblood_kaelthas(); // Magister's Terrace + AddSC_boss_selin_fireheart(); + AddSC_boss_vexallus(); + AddSC_boss_priestess_delrissa(); + AddSC_instance_magisters_terrace(); + AddSC_magisters_terrace(); + AddSC_boss_lucifron(); //Molten core + AddSC_boss_magmadar(); + AddSC_boss_gehennas(); + AddSC_boss_garr(); + AddSC_boss_baron_geddon(); + AddSC_boss_shazzrah(); + AddSC_boss_golemagg(); + AddSC_boss_sulfuron(); + AddSC_boss_majordomo(); + AddSC_boss_ragnaros(); + AddSC_instance_molten_core(); + AddSC_instance_ragefire_chasm(); //Ragefire Chasm + AddSC_the_scarlet_enclave(); //Scarlet Enclave + AddSC_the_scarlet_enclave_c1(); + AddSC_the_scarlet_enclave_c2(); + AddSC_the_scarlet_enclave_c5(); + AddSC_boss_arcanist_doan(); //Scarlet Monastery + AddSC_boss_azshir_the_sleepless(); + AddSC_boss_bloodmage_thalnos(); + AddSC_boss_headless_horseman(); + AddSC_boss_herod(); + AddSC_boss_high_inquisitor_fairbanks(); + AddSC_boss_houndmaster_loksey(); + AddSC_boss_interrogator_vishas(); + AddSC_boss_scorn(); + AddSC_instance_scarlet_monastery(); + AddSC_boss_mograine_and_whitemane(); + AddSC_boss_darkmaster_gandling(); //Scholomance + AddSC_boss_death_knight_darkreaver(); + AddSC_boss_theolenkrastinov(); + AddSC_boss_illuciabarov(); + AddSC_boss_instructormalicia(); + AddSC_boss_jandicebarov(); + AddSC_boss_kormok(); + AddSC_boss_lordalexeibarov(); + AddSC_boss_lorekeeperpolkelt(); + AddSC_boss_rasfrost(); + AddSC_boss_theravenian(); + AddSC_boss_vectus(); + AddSC_boss_kirtonos_the_herald(); + AddSC_instance_scholomance(); + AddSC_shadowfang_keep(); //Shadowfang keep + AddSC_instance_shadowfang_keep(); + AddSC_boss_magistrate_barthilas(); //Stratholme + AddSC_boss_maleki_the_pallid(); + AddSC_boss_nerubenkan(); + AddSC_boss_cannon_master_willey(); + AddSC_boss_baroness_anastari(); + AddSC_boss_ramstein_the_gorger(); + AddSC_boss_timmy_the_cruel(); + AddSC_boss_postmaster_malown(); + AddSC_boss_baron_rivendare(); + AddSC_boss_dathrohan_balnazzar(); + AddSC_boss_order_of_silver_hand(); + AddSC_instance_stratholme(); + AddSC_stratholme(); + AddSC_sunken_temple(); // Sunken Temple + AddSC_instance_sunken_temple(); + AddSC_instance_sunwell_plateau(); //Sunwell Plateau + AddSC_boss_kalecgos(); + AddSC_boss_brutallus(); + AddSC_boss_felmyst(); + AddSC_boss_eredar_twins(); + AddSC_boss_muru(); + AddSC_boss_kiljaeden(); + AddSC_sunwell_plateau(); + AddSC_instance_the_stockade(); //The Stockade + AddSC_boss_archaedas(); //Uldaman + AddSC_boss_ironaya(); + AddSC_uldaman(); + AddSC_instance_uldaman(); + AddSC_boss_akilzon(); //Zul'Aman + AddSC_boss_halazzi(); + AddSC_boss_hex_lord_malacrass(); + AddSC_boss_janalai(); + AddSC_boss_nalorakk(); + AddSC_boss_zuljin(); + AddSC_instance_zulaman(); + AddSC_zulaman(); + AddSC_boss_jeklik(); //Zul'Gurub + AddSC_boss_venoxis(); + AddSC_boss_marli(); + AddSC_boss_mandokir(); + AddSC_boss_gahzranka(); + AddSC_boss_thekal(); + AddSC_boss_arlokk(); + AddSC_boss_jindo(); + AddSC_boss_hakkar(); + AddSC_boss_grilek(); + AddSC_boss_hazzarah(); + AddSC_boss_renataki(); + AddSC_boss_wushoolay(); + AddSC_instance_zulgurub(); + //AddSC_alterac_mountains(); + AddSC_arathi_highlands(); + AddSC_blasted_lands(); + AddSC_burning_steppes(); + AddSC_duskwood(); + AddSC_eastern_plaguelands(); + AddSC_ghostlands(); + AddSC_hinterlands(); + AddSC_isle_of_queldanas(); + AddSC_loch_modan(); + AddSC_redridge_mountains(); + AddSC_silverpine_forest(); + AddSC_stormwind_city(); + AddSC_stranglethorn_vale(); + AddSC_swamp_of_sorrows(); + AddSC_tirisfal_glades(); + AddSC_undercity(); + AddSC_western_plaguelands(); + AddSC_wetlands(); +} diff --git a/src/server/scripts/Events/CMakeLists.txt b/src/server/scripts/Events/CMakeLists.txt deleted file mode 100644 index 1c9e5cfe8e1..00000000000 --- a/src/server/scripts/Events/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -file(GLOB_RECURSE sources_Events Events/*.cpp Events/*.h) - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - ${sources_Events} -) - -message(" -> Prepared: Events") diff --git a/src/server/scripts/Events/events_script_loader.cpp b/src/server/scripts/Events/events_script_loader.cpp new file mode 100644 index 00000000000..625c08f5389 --- /dev/null +++ b/src/server/scripts/Events/events_script_loader.cpp @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_event_childrens_week(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddEventsScripts() +{ + AddSC_event_childrens_week(); +} diff --git a/src/server/scripts/Kalimdor/CMakeLists.txt b/src/server/scripts/Kalimdor/CMakeLists.txt deleted file mode 100644 index 2d1b4b49649..00000000000 --- a/src/server/scripts/Kalimdor/CMakeLists.txt +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - Kalimdor/zone_stonetalon_mountains.cpp - Kalimdor/zone_silithus.cpp - Kalimdor/zone_moonglade.cpp - Kalimdor/RazorfenDowns/razorfen_downs.cpp - Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp - Kalimdor/RazorfenDowns/boss_tuten_kash.cpp - Kalimdor/RazorfenDowns/boss_mordresh_fire_eye.cpp - Kalimdor/RazorfenDowns/boss_glutton.cpp - Kalimdor/RazorfenDowns/boss_amnennar_the_coldbringer.cpp - Kalimdor/RazorfenDowns/razorfen_downs.h - Kalimdor/ZulFarrak/zulfarrak.cpp - Kalimdor/ZulFarrak/instance_zulfarrak.cpp - Kalimdor/ZulFarrak/boss_zum_rah.cpp - Kalimdor/ZulFarrak/zulfarrak.h - Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp - Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h - Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp - Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp - Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp - Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.h - Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.h - Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.h - Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp - Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite_corruptor.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm_the_fleshcrafter.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/boss_chrono_lord_epoch.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp - Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.h - Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h - Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp - Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp - Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp - Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp - Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp - Kalimdor/BlackfathomDeeps/boss_kelris.cpp - Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp - Kalimdor/BlackfathomDeeps/boss_gelihast.cpp - Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp - Kalimdor/BlackfathomDeeps/boss_aku_mai.cpp - Kalimdor/BlackfathomDeeps/blackfathom_deeps.h - Kalimdor/zone_azuremyst_isle.cpp - Kalimdor/zone_orgrimmar.cpp - Kalimdor/zone_desolace.cpp - Kalimdor/zone_feralas.cpp - Kalimdor/Maraudon/boss_princess_theradras.cpp - Kalimdor/Maraudon/boss_landslide.cpp - Kalimdor/Maraudon/boss_celebras_the_cursed.cpp - Kalimdor/Maraudon/boss_noxxion.cpp - Kalimdor/Maraudon/instance_maraudon.cpp - Kalimdor/TempleOfAhnQiraj/boss_fankriss.cpp - Kalimdor/TempleOfAhnQiraj/boss_huhuran.cpp - Kalimdor/TempleOfAhnQiraj/instance_temple_of_ahnqiraj.cpp - Kalimdor/TempleOfAhnQiraj/mob_anubisath_sentinel.cpp - Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp - Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp - Kalimdor/TempleOfAhnQiraj/boss_sartura.cpp - Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp - Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.h - Kalimdor/TempleOfAhnQiraj/boss_skeram.cpp - Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp - Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp - Kalimdor/zone_darkshore.cpp - Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp - Kalimdor/RuinsOfAhnQiraj/instance_ruins_of_ahnqiraj.cpp - Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp - Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp - Kalimdor/RuinsOfAhnQiraj/boss_ayamiss.cpp - Kalimdor/RuinsOfAhnQiraj/boss_moam.cpp - Kalimdor/RuinsOfAhnQiraj/ruins_of_ahnqiraj.h - Kalimdor/RuinsOfAhnQiraj/boss_kurinnaxx.cpp - Kalimdor/zone_bloodmyst_isle.cpp - Kalimdor/zone_thunder_bluff.cpp - Kalimdor/zone_azshara.cpp - Kalimdor/RazorfenKraul/razorfen_kraul.h - Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp - Kalimdor/RazorfenKraul/razorfen_kraul.cpp - Kalimdor/zone_the_barrens.cpp - Kalimdor/zone_ungoro_crater.cpp - Kalimdor/WailingCaverns/wailing_caverns.h - Kalimdor/WailingCaverns/instance_wailing_caverns.cpp - Kalimdor/WailingCaverns/wailing_caverns.cpp - Kalimdor/zone_durotar.cpp - Kalimdor/zone_felwood.cpp - Kalimdor/boss_azuregos.cpp - Kalimdor/zone_tanaris.cpp - Kalimdor/zone_dustwallow_marsh.cpp - Kalimdor/zone_winterspring.cpp - Kalimdor/zone_thousand_needles.cpp - Kalimdor/zone_ashenvale.cpp - Kalimdor/OnyxiasLair/boss_onyxia.cpp - Kalimdor/OnyxiasLair/onyxias_lair.h - Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp - Kalimdor/RagefireChasm/instance_ragefire_chasm.cpp - Kalimdor/DireMaul/instance_dire_maul.cpp -) - -message(" -> Prepared: Kalimdor") diff --git a/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp b/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp new file mode 100644 index 00000000000..f1969a063d6 --- /dev/null +++ b/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp @@ -0,0 +1,206 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_blackfathom_deeps(); //Blackfathom Depths +void AddSC_boss_gelihast(); +void AddSC_boss_kelris(); +void AddSC_boss_aku_mai(); +void AddSC_instance_blackfathom_deeps(); +void AddSC_hyjal(); //CoT Battle for Mt. Hyjal +void AddSC_boss_archimonde(); +void AddSC_instance_mount_hyjal(); +void AddSC_hyjal_trash(); +void AddSC_boss_rage_winterchill(); +void AddSC_boss_anetheron(); +void AddSC_boss_kazrogal(); +void AddSC_boss_azgalor(); +void AddSC_boss_captain_skarloc(); //CoT Old Hillsbrad +void AddSC_boss_epoch_hunter(); +void AddSC_boss_lieutenant_drake(); +void AddSC_instance_old_hillsbrad(); +void AddSC_old_hillsbrad(); +void AddSC_boss_aeonus(); //CoT The Black Morass +void AddSC_boss_chrono_lord_deja(); +void AddSC_boss_temporus(); +void AddSC_the_black_morass(); +void AddSC_instance_the_black_morass(); +void AddSC_boss_epoch(); //CoT Culling Of Stratholme +void AddSC_boss_infinite_corruptor(); +void AddSC_boss_salramm(); +void AddSC_boss_mal_ganis(); +void AddSC_boss_meathook(); +void AddSC_culling_of_stratholme(); +void AddSC_instance_culling_of_stratholme(); +void AddSC_instance_dire_maul(); //Dire Maul +void AddSC_boss_celebras_the_cursed(); //Maraudon +void AddSC_boss_landslide(); +void AddSC_boss_noxxion(); +void AddSC_boss_ptheradras(); +void AddSC_instance_maraudon(); +void AddSC_boss_onyxia(); //Onyxia's Lair +void AddSC_instance_onyxias_lair(); +void AddSC_boss_tuten_kash(); //Razorfen Downs +void AddSC_boss_mordresh_fire_eye(); +void AddSC_boss_glutton(); +void AddSC_boss_amnennar_the_coldbringer(); +void AddSC_razorfen_downs(); +void AddSC_instance_razorfen_downs(); +void AddSC_razorfen_kraul(); //Razorfen Kraul +void AddSC_instance_razorfen_kraul(); +void AddSC_boss_kurinnaxx(); //Ruins of ahn'qiraj +void AddSC_boss_rajaxx(); +void AddSC_boss_moam(); +void AddSC_boss_buru(); +void AddSC_boss_ayamiss(); +void AddSC_boss_ossirian(); +void AddSC_instance_ruins_of_ahnqiraj(); +void AddSC_boss_cthun(); //Temple of ahn'qiraj +void AddSC_boss_viscidus(); +void AddSC_boss_fankriss(); +void AddSC_boss_huhuran(); +void AddSC_bug_trio(); +void AddSC_boss_sartura(); +void AddSC_boss_skeram(); +void AddSC_boss_twinemperors(); +void AddSC_boss_ouro(); +void AddSC_npc_anubisath_sentinel(); +void AddSC_instance_temple_of_ahnqiraj(); +void AddSC_wailing_caverns(); //Wailing caverns +void AddSC_instance_wailing_caverns(); +void AddSC_boss_zum_rah(); //Zul'Farrak +void AddSC_zulfarrak(); +void AddSC_instance_zulfarrak(); + +void AddSC_ashenvale(); +void AddSC_azshara(); +void AddSC_azuremyst_isle(); +void AddSC_bloodmyst_isle(); +void AddSC_boss_azuregos(); +void AddSC_darkshore(); +void AddSC_desolace(); +void AddSC_durotar(); +void AddSC_dustwallow_marsh(); +void AddSC_felwood(); +void AddSC_feralas(); +void AddSC_moonglade(); +void AddSC_orgrimmar(); +void AddSC_silithus(); +void AddSC_stonetalon_mountains(); +void AddSC_tanaris(); +void AddSC_the_barrens(); +void AddSC_thousand_needles(); +void AddSC_thunder_bluff(); +void AddSC_ungoro_crater(); +void AddSC_winterspring(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddKalimdorScripts() +{ + AddSC_blackfathom_deeps(); //Blackfathom Depths + AddSC_boss_gelihast(); + AddSC_boss_kelris(); + AddSC_boss_aku_mai(); + AddSC_instance_blackfathom_deeps(); + AddSC_hyjal(); //CoT Battle for Mt. Hyjal + AddSC_boss_archimonde(); + AddSC_instance_mount_hyjal(); + AddSC_hyjal_trash(); + AddSC_boss_rage_winterchill(); + AddSC_boss_anetheron(); + AddSC_boss_kazrogal(); + AddSC_boss_azgalor(); + AddSC_boss_captain_skarloc(); //CoT Old Hillsbrad + AddSC_boss_epoch_hunter(); + AddSC_boss_lieutenant_drake(); + AddSC_instance_old_hillsbrad(); + AddSC_old_hillsbrad(); + AddSC_boss_aeonus(); //CoT The Black Morass + AddSC_boss_chrono_lord_deja(); + AddSC_boss_temporus(); + AddSC_the_black_morass(); + AddSC_instance_the_black_morass(); + AddSC_boss_epoch(); //CoT Culling Of Stratholme + AddSC_boss_infinite_corruptor(); + AddSC_boss_salramm(); + AddSC_boss_mal_ganis(); + AddSC_boss_meathook(); + AddSC_culling_of_stratholme(); + AddSC_instance_culling_of_stratholme(); + AddSC_instance_dire_maul(); //Dire Maul + AddSC_boss_celebras_the_cursed(); //Maraudon + AddSC_boss_landslide(); + AddSC_boss_noxxion(); + AddSC_boss_ptheradras(); + AddSC_instance_maraudon(); + AddSC_boss_onyxia(); //Onyxia's Lair + AddSC_instance_onyxias_lair(); + AddSC_boss_tuten_kash(); //Razorfen Downs + AddSC_boss_mordresh_fire_eye(); + AddSC_boss_glutton(); + AddSC_boss_amnennar_the_coldbringer(); + AddSC_razorfen_downs(); + AddSC_instance_razorfen_downs(); + AddSC_razorfen_kraul(); //Razorfen Kraul + AddSC_instance_razorfen_kraul(); + AddSC_boss_kurinnaxx(); //Ruins of ahn'qiraj + AddSC_boss_rajaxx(); + AddSC_boss_moam(); + AddSC_boss_buru(); + AddSC_boss_ayamiss(); + AddSC_boss_ossirian(); + AddSC_instance_ruins_of_ahnqiraj(); + AddSC_boss_cthun(); //Temple of ahn'qiraj + AddSC_boss_viscidus(); + AddSC_boss_fankriss(); + AddSC_boss_huhuran(); + AddSC_bug_trio(); + AddSC_boss_sartura(); + AddSC_boss_skeram(); + AddSC_boss_twinemperors(); + AddSC_boss_ouro(); + AddSC_npc_anubisath_sentinel(); + AddSC_instance_temple_of_ahnqiraj(); + AddSC_wailing_caverns(); //Wailing caverns + AddSC_instance_wailing_caverns(); + AddSC_boss_zum_rah(); //Zul'Farrak + AddSC_zulfarrak(); + AddSC_instance_zulfarrak(); + + AddSC_ashenvale(); + AddSC_azshara(); + AddSC_azuremyst_isle(); + AddSC_bloodmyst_isle(); + AddSC_boss_azuregos(); + AddSC_darkshore(); + AddSC_desolace(); + AddSC_durotar(); + AddSC_dustwallow_marsh(); + AddSC_felwood(); + AddSC_feralas(); + AddSC_moonglade(); + AddSC_orgrimmar(); + AddSC_silithus(); + AddSC_stonetalon_mountains(); + AddSC_tanaris(); + AddSC_the_barrens(); + AddSC_thousand_needles(); + AddSC_thunder_bluff(); + AddSC_ungoro_crater(); + AddSC_winterspring(); +} diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt deleted file mode 100644 index 1dc453ad416..00000000000 --- a/src/server/scripts/Northrend/CMakeLists.txt +++ /dev/null @@ -1,199 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - Northrend/zone_wintergrasp.cpp - Northrend/isle_of_conquest.cpp - Northrend/zone_storm_peaks.cpp - Northrend/Ulduar/HallsOfLightning/instance_halls_of_lightning.cpp - Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp - Northrend/Ulduar/HallsOfLightning/halls_of_lightning.h - Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp - Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp - Northrend/Ulduar/HallsOfLightning/boss_loken.cpp - Northrend/Ulduar/Ulduar/boss_general_vezax.cpp - Northrend/Ulduar/Ulduar/boss_thorim.cpp - Northrend/Ulduar/Ulduar/boss_ignis.cpp - Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp - Northrend/Ulduar/Ulduar/instance_ulduar.cpp - Northrend/Ulduar/Ulduar/boss_auriaya.cpp - Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp - Northrend/Ulduar/Ulduar/boss_hodir.cpp - Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp - Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp - Northrend/Ulduar/Ulduar/boss_xt002.cpp - Northrend/Ulduar/Ulduar/boss_mimiron.cpp - Northrend/Ulduar/Ulduar/ulduar.h - Northrend/Ulduar/Ulduar/boss_freya.cpp - Northrend/Ulduar/Ulduar/boss_razorscale.cpp - Northrend/Ulduar/Ulduar/boss_kologarn.cpp - Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp - Northrend/Ulduar/HallsOfStone/halls_of_stone.h - Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp - Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp - Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp - Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp - Northrend/ChamberOfAspects/ObsidianSanctum/instance_obsidian_sanctum.cpp - Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.h - Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp - Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp - Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp - Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h - Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp - Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp - Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp - Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp - Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp - Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h - Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp - Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp - Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp - Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp - Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp - Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp - Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp - Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp - Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h - Northrend/FrozenHalls/PitOfSaron/instance_pit_of_saron.cpp - Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp - Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp - Northrend/FrozenHalls/ForgeOfSouls/instance_forge_of_souls.cpp - Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp - Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.h - Northrend/Nexus/EyeOfEternity/boss_malygos.cpp - Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp - Northrend/Nexus/EyeOfEternity/eye_of_eternity.h - Northrend/Nexus/Oculus/boss_eregos.cpp - Northrend/Nexus/Oculus/boss_drakos.cpp - Northrend/Nexus/Oculus/oculus.h - Northrend/Nexus/Oculus/boss_varos.cpp - Northrend/Nexus/Oculus/boss_urom.cpp - Northrend/Nexus/Oculus/oculus.cpp - Northrend/Nexus/Oculus/instance_oculus.cpp - Northrend/Nexus/Nexus/boss_nexus_commanders.cpp - Northrend/Nexus/Nexus/boss_ormorok.cpp - Northrend/Nexus/Nexus/boss_magus_telestra.cpp - Northrend/Nexus/Nexus/instance_nexus.cpp - Northrend/Nexus/Nexus/boss_keristrasza.cpp - Northrend/Nexus/Nexus/boss_anomalus.cpp - Northrend/Nexus/Nexus/nexus.h - Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp - Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp - Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp - Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.h - Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp - Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp - Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp - Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp - Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h - Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp - Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp - Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp - Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp - Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp - Northrend/Naxxramas/boss_loatheb.cpp - Northrend/Naxxramas/boss_anubrekhan.cpp - Northrend/Naxxramas/boss_maexxna.cpp - Northrend/Naxxramas/boss_patchwerk.cpp - Northrend/Naxxramas/boss_gothik.cpp - Northrend/Naxxramas/boss_faerlina.cpp - Northrend/Naxxramas/boss_gluth.cpp - Northrend/Naxxramas/boss_four_horsemen.cpp - Northrend/Naxxramas/naxxramas.h - Northrend/Naxxramas/boss_kelthuzad.cpp - Northrend/Naxxramas/boss_heigan.cpp - Northrend/Naxxramas/boss_thaddius.cpp - Northrend/Naxxramas/boss_razuvious.cpp - Northrend/Naxxramas/boss_sapphiron.cpp - Northrend/Naxxramas/instance_naxxramas.cpp - Northrend/Naxxramas/boss_grobbulus.cpp - Northrend/Naxxramas/boss_noth.cpp - Northrend/zone_crystalsong_forest.cpp - Northrend/VaultOfArchavon/boss_archavon.cpp - Northrend/VaultOfArchavon/boss_koralon.cpp - Northrend/VaultOfArchavon/vault_of_archavon.h - Northrend/VaultOfArchavon/instance_vault_of_archavon.cpp - Northrend/VaultOfArchavon/boss_emalon.cpp - Northrend/VaultOfArchavon/boss_toravon.cpp - Northrend/zone_sholazar_basin.cpp - Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp - Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp - Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp - Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp - Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp - Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h - Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp - Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp - Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h - Northrend/UtgardeKeep/UtgardeKeep/instance_utgarde_keep.cpp - Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp - Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp - Northrend/zone_dragonblight.cpp - Northrend/zone_grizzly_hills.cpp - Northrend/AzjolNerub/AzjolNerub/azjol_nerub.h - Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp - Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp - Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp - Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp - Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp - Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp - Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp - Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp - Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp - Northrend/AzjolNerub/Ahnkahet/boss_amanitar.cpp - Northrend/AzjolNerub/Ahnkahet/ahnkahet.h - Northrend/VioletHold/boss_zuramat.cpp - Northrend/VioletHold/instance_violet_hold.cpp - Northrend/VioletHold/boss_lavanthor.cpp - Northrend/VioletHold/boss_cyanigosa.cpp - Northrend/VioletHold/violet_hold.h - Northrend/VioletHold/boss_ichoron.cpp - Northrend/VioletHold/boss_moragg.cpp - Northrend/VioletHold/boss_xevozz.cpp - Northrend/VioletHold/boss_erekem.cpp - Northrend/VioletHold/violet_hold.cpp - Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp - Northrend/IcecrownCitadel/icecrown_citadel.cpp - Northrend/IcecrownCitadel/icecrown_citadel.h - Northrend/IcecrownCitadel/icecrown_citadel_teleport.cpp - Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp - Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp - Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp - Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp - Northrend/IcecrownCitadel/boss_festergut.cpp - Northrend/IcecrownCitadel/boss_rotface.cpp - Northrend/IcecrownCitadel/boss_professor_putricide.cpp - Northrend/IcecrownCitadel/boss_blood_prince_council.cpp - Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp - Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp - Northrend/IcecrownCitadel/boss_sindragosa.cpp - Northrend/IcecrownCitadel/boss_the_lich_king.cpp - Northrend/zone_zuldrak.cpp - Northrend/zone_icecrown.cpp - Northrend/Gundrak/boss_slad_ran.cpp - Northrend/Gundrak/instance_gundrak.cpp - Northrend/Gundrak/boss_drakkari_colossus.cpp - Northrend/Gundrak/gundrak.h - Northrend/Gundrak/boss_gal_darah.cpp - Northrend/Gundrak/boss_moorabi.cpp - Northrend/Gundrak/boss_eck.cpp - Northrend/zone_borean_tundra.cpp - Northrend/zone_howling_fjord.cpp - Northrend/zone_dalaran.cpp - Northrend/DraktharonKeep/boss_trollgore.cpp - Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp - Northrend/DraktharonKeep/boss_novos.cpp - Northrend/DraktharonKeep/drak_tharon_keep.h - Northrend/DraktharonKeep/boss_tharon_ja.cpp - Northrend/DraktharonKeep/boss_king_dred.cpp -) - -message(" -> Prepared: Northrend") diff --git a/src/server/scripts/Northrend/northrend_script_loader.cpp b/src/server/scripts/Northrend/northrend_script_loader.cpp new file mode 100644 index 00000000000..7d104b85f6d --- /dev/null +++ b/src/server/scripts/Northrend/northrend_script_loader.cpp @@ -0,0 +1,374 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_boss_slad_ran(); +void AddSC_boss_moorabi(); +void AddSC_boss_drakkari_colossus(); +void AddSC_boss_gal_darah(); +void AddSC_boss_eck(); +void AddSC_instance_gundrak(); + +// Azjol-Nerub - Azjol-Nerub +void AddSC_boss_krik_thir(); +void AddSC_boss_hadronox(); +void AddSC_boss_anub_arak(); +void AddSC_instance_azjol_nerub(); + +// Azjol-Nerub - Ahn'kahet +void AddSC_boss_elder_nadox(); +void AddSC_boss_taldaram(); +void AddSC_boss_amanitar(); +void AddSC_boss_jedoga_shadowseeker(); +void AddSC_boss_volazj(); +void AddSC_instance_ahnkahet(); + +// Drak'Tharon Keep +void AddSC_boss_trollgore(); +void AddSC_boss_novos(); +void AddSC_boss_king_dred(); +void AddSC_boss_tharon_ja(); +void AddSC_instance_drak_tharon_keep(); + +void AddSC_boss_argent_challenge(); //Trial of the Champion +void AddSC_boss_black_knight(); +void AddSC_boss_grand_champions(); +void AddSC_instance_trial_of_the_champion(); +void AddSC_trial_of_the_champion(); +void AddSC_boss_anubarak_trial(); //Trial of the Crusader +void AddSC_boss_faction_champions(); +void AddSC_boss_jaraxxus(); +void AddSC_boss_northrend_beasts(); +void AddSC_boss_twin_valkyr(); +void AddSC_trial_of_the_crusader(); +void AddSC_instance_trial_of_the_crusader(); +void AddSC_boss_anubrekhan(); //Naxxramas +void AddSC_boss_maexxna(); +void AddSC_boss_patchwerk(); +void AddSC_boss_grobbulus(); +void AddSC_boss_razuvious(); +void AddSC_boss_kelthuzad(); +void AddSC_boss_loatheb(); +void AddSC_boss_noth(); +void AddSC_boss_gluth(); +void AddSC_boss_sapphiron(); +void AddSC_boss_four_horsemen(); +void AddSC_boss_faerlina(); +void AddSC_boss_heigan(); +void AddSC_boss_gothik(); +void AddSC_boss_thaddius(); +void AddSC_instance_naxxramas(); +void AddSC_boss_nexus_commanders(); // The Nexus Nexus +void AddSC_boss_magus_telestra(); +void AddSC_boss_anomalus(); +void AddSC_boss_ormorok(); +void AddSC_boss_keristrasza(); +void AddSC_instance_nexus(); +void AddSC_boss_drakos(); //The Nexus The Oculus +void AddSC_boss_urom(); +void AddSC_boss_varos(); +void AddSC_boss_eregos(); +void AddSC_instance_oculus(); +void AddSC_oculus(); +void AddSC_boss_malygos(); // The Nexus: Eye of Eternity +void AddSC_instance_eye_of_eternity(); +void AddSC_boss_sartharion(); //Obsidian Sanctum +void AddSC_obsidian_sanctum(); +void AddSC_instance_obsidian_sanctum(); +void AddSC_boss_bjarngrim(); //Ulduar Halls of Lightning +void AddSC_boss_loken(); +void AddSC_boss_ionar(); +void AddSC_boss_volkhan(); +void AddSC_instance_halls_of_lightning(); +void AddSC_boss_maiden_of_grief(); //Ulduar Halls of Stone +void AddSC_boss_krystallus(); +void AddSC_boss_sjonnir(); +void AddSC_instance_halls_of_stone(); +void AddSC_halls_of_stone(); +void AddSC_boss_auriaya(); //Ulduar Ulduar +void AddSC_boss_flame_leviathan(); +void AddSC_boss_ignis(); +void AddSC_boss_razorscale(); +void AddSC_boss_xt002(); +void AddSC_boss_kologarn(); +void AddSC_boss_assembly_of_iron(); +void AddSC_boss_general_vezax(); +void AddSC_boss_mimiron(); +void AddSC_boss_hodir(); +void AddSC_boss_freya(); +void AddSC_boss_yogg_saron(); +void AddSC_boss_algalon_the_observer(); +void AddSC_instance_ulduar(); + +// Utgarde Keep - Utgarde Keep +void AddSC_boss_keleseth(); +void AddSC_boss_skarvald_dalronn(); +void AddSC_boss_ingvar_the_plunderer(); +void AddSC_instance_utgarde_keep(); +void AddSC_utgarde_keep(); + +// Utgarde Keep - Utgarde Pinnacle +void AddSC_boss_svala(); +void AddSC_boss_palehoof(); +void AddSC_boss_skadi(); +void AddSC_boss_ymiron(); +void AddSC_instance_utgarde_pinnacle(); + +// Vault of Archavon +void AddSC_boss_archavon(); +void AddSC_boss_emalon(); +void AddSC_boss_koralon(); +void AddSC_boss_toravon(); +void AddSC_instance_vault_of_archavon(); + +void AddSC_boss_cyanigosa(); //Violet Hold +void AddSC_boss_erekem(); +void AddSC_boss_ichoron(); +void AddSC_boss_lavanthor(); +void AddSC_boss_moragg(); +void AddSC_boss_xevozz(); +void AddSC_boss_zuramat(); +void AddSC_instance_violet_hold(); +void AddSC_violet_hold(); +void AddSC_instance_forge_of_souls(); //Forge of Souls +void AddSC_forge_of_souls(); +void AddSC_boss_bronjahm(); +void AddSC_boss_devourer_of_souls(); +void AddSC_instance_pit_of_saron(); //Pit of Saron +void AddSC_pit_of_saron(); +void AddSC_boss_garfrost(); +void AddSC_boss_ick(); +void AddSC_boss_tyrannus(); +void AddSC_instance_halls_of_reflection(); // Halls of Reflection +void AddSC_halls_of_reflection(); +void AddSC_boss_falric(); +void AddSC_boss_marwyn(); +void AddSC_boss_lord_marrowgar(); // Icecrown Citadel +void AddSC_boss_lady_deathwhisper(); +void AddSC_boss_icecrown_gunship_battle(); +void AddSC_boss_deathbringer_saurfang(); +void AddSC_boss_festergut(); +void AddSC_boss_rotface(); +void AddSC_boss_professor_putricide(); +void AddSC_boss_blood_prince_council(); +void AddSC_boss_blood_queen_lana_thel(); +void AddSC_boss_valithria_dreamwalker(); +void AddSC_boss_sindragosa(); +void AddSC_boss_the_lich_king(); +void AddSC_icecrown_citadel_teleport(); +void AddSC_instance_icecrown_citadel(); +void AddSC_icecrown_citadel(); +void AddSC_instance_ruby_sanctum(); // Ruby Sanctum +void AddSC_ruby_sanctum(); +void AddSC_boss_baltharus_the_warborn(); +void AddSC_boss_saviana_ragefire(); +void AddSC_boss_general_zarithrian(); +void AddSC_boss_halion(); + +void AddSC_dalaran(); +void AddSC_borean_tundra(); +void AddSC_dragonblight(); +void AddSC_grizzly_hills(); +void AddSC_howling_fjord(); +void AddSC_icecrown(); +void AddSC_sholazar_basin(); +void AddSC_storm_peaks(); +void AddSC_wintergrasp(); +void AddSC_zuldrak(); +void AddSC_crystalsong_forest(); +void AddSC_isle_of_conquest(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddNorthrendScripts() +{ + AddSC_boss_slad_ran(); //Gundrak + AddSC_boss_moorabi(); + AddSC_boss_drakkari_colossus(); + AddSC_boss_gal_darah(); + AddSC_boss_eck(); + AddSC_instance_gundrak(); + + // Azjol-Nerub - Ahn'kahet + AddSC_boss_elder_nadox(); + AddSC_boss_taldaram(); + AddSC_boss_amanitar(); + AddSC_boss_jedoga_shadowseeker(); + AddSC_boss_volazj(); + AddSC_instance_ahnkahet(); + + // Azjol-Nerub - Azjol-Nerub + AddSC_boss_krik_thir(); + AddSC_boss_hadronox(); + AddSC_boss_anub_arak(); + AddSC_instance_azjol_nerub(); + + // Drak'Tharon Keep + AddSC_boss_trollgore(); + AddSC_boss_novos(); + AddSC_boss_king_dred(); + AddSC_boss_tharon_ja(); + AddSC_instance_drak_tharon_keep(); + + AddSC_boss_argent_challenge(); //Trial of the Champion + AddSC_boss_black_knight(); + AddSC_boss_grand_champions(); + AddSC_instance_trial_of_the_champion(); + AddSC_trial_of_the_champion(); + AddSC_boss_anubarak_trial(); //Trial of the Crusader + AddSC_boss_faction_champions(); + AddSC_boss_jaraxxus(); + AddSC_trial_of_the_crusader(); + AddSC_boss_twin_valkyr(); + AddSC_boss_northrend_beasts(); + AddSC_instance_trial_of_the_crusader(); + AddSC_boss_anubrekhan(); //Naxxramas + AddSC_boss_maexxna(); + AddSC_boss_patchwerk(); + AddSC_boss_grobbulus(); + AddSC_boss_razuvious(); + AddSC_boss_kelthuzad(); + AddSC_boss_loatheb(); + AddSC_boss_noth(); + AddSC_boss_gluth(); + AddSC_boss_sapphiron(); + AddSC_boss_four_horsemen(); + AddSC_boss_faerlina(); + AddSC_boss_heigan(); + AddSC_boss_gothik(); + AddSC_boss_thaddius(); + AddSC_instance_naxxramas(); + AddSC_boss_nexus_commanders(); // The Nexus Nexus + AddSC_boss_magus_telestra(); + AddSC_boss_anomalus(); + AddSC_boss_ormorok(); + AddSC_boss_keristrasza(); + AddSC_instance_nexus(); + AddSC_boss_drakos(); //The Nexus The Oculus + AddSC_boss_urom(); + AddSC_boss_varos(); + AddSC_boss_eregos(); + AddSC_instance_oculus(); + AddSC_oculus(); + AddSC_boss_malygos(); // The Nexus: Eye of Eternity + AddSC_instance_eye_of_eternity(); + AddSC_boss_sartharion(); //Obsidian Sanctum + AddSC_obsidian_sanctum(); + AddSC_instance_obsidian_sanctum(); + AddSC_boss_bjarngrim(); //Ulduar Halls of Lightning + AddSC_boss_loken(); + AddSC_boss_ionar(); + AddSC_boss_volkhan(); + AddSC_instance_halls_of_lightning(); + AddSC_boss_maiden_of_grief(); //Ulduar Halls of Stone + AddSC_boss_krystallus(); + AddSC_boss_sjonnir(); + AddSC_instance_halls_of_stone(); + AddSC_halls_of_stone(); + AddSC_boss_auriaya(); //Ulduar Ulduar + AddSC_boss_flame_leviathan(); + AddSC_boss_ignis(); + AddSC_boss_razorscale(); + AddSC_boss_xt002(); + AddSC_boss_general_vezax(); + AddSC_boss_assembly_of_iron(); + AddSC_boss_kologarn(); + AddSC_boss_mimiron(); + AddSC_boss_hodir(); + AddSC_boss_freya(); + AddSC_boss_yogg_saron(); + AddSC_boss_algalon_the_observer(); + AddSC_instance_ulduar(); + + // Utgarde Keep - Utgarde Keep + AddSC_boss_keleseth(); + AddSC_boss_skarvald_dalronn(); + AddSC_boss_ingvar_the_plunderer(); + AddSC_instance_utgarde_keep(); + AddSC_utgarde_keep(); + + // Utgarde Keep - Utgarde Pinnacle + AddSC_boss_svala(); + AddSC_boss_palehoof(); + AddSC_boss_skadi(); + AddSC_boss_ymiron(); + AddSC_instance_utgarde_pinnacle(); + + // Vault of Archavon + AddSC_boss_archavon(); + AddSC_boss_emalon(); + AddSC_boss_koralon(); + AddSC_boss_toravon(); + AddSC_instance_vault_of_archavon(); + + AddSC_boss_cyanigosa(); //Violet Hold + AddSC_boss_erekem(); + AddSC_boss_ichoron(); + AddSC_boss_lavanthor(); + AddSC_boss_moragg(); + AddSC_boss_xevozz(); + AddSC_boss_zuramat(); + AddSC_instance_violet_hold(); + AddSC_violet_hold(); + AddSC_instance_forge_of_souls(); //Forge of Souls + AddSC_forge_of_souls(); + AddSC_boss_bronjahm(); + AddSC_boss_devourer_of_souls(); + AddSC_instance_pit_of_saron(); //Pit of Saron + AddSC_pit_of_saron(); + AddSC_boss_garfrost(); + AddSC_boss_ick(); + AddSC_boss_tyrannus(); + AddSC_instance_halls_of_reflection(); // Halls of Reflection + AddSC_halls_of_reflection(); + AddSC_boss_falric(); + AddSC_boss_marwyn(); + AddSC_boss_lord_marrowgar(); // Icecrown Citadel + AddSC_boss_lady_deathwhisper(); + AddSC_boss_icecrown_gunship_battle(); + AddSC_boss_deathbringer_saurfang(); + AddSC_boss_festergut(); + AddSC_boss_rotface(); + AddSC_boss_professor_putricide(); + AddSC_boss_blood_prince_council(); + AddSC_boss_blood_queen_lana_thel(); + AddSC_boss_valithria_dreamwalker(); + AddSC_boss_sindragosa(); + AddSC_boss_the_lich_king(); + AddSC_icecrown_citadel_teleport(); + AddSC_instance_icecrown_citadel(); + AddSC_icecrown_citadel(); + AddSC_instance_ruby_sanctum(); // Ruby Sanctum + AddSC_ruby_sanctum(); + AddSC_boss_baltharus_the_warborn(); + AddSC_boss_saviana_ragefire(); + AddSC_boss_general_zarithrian(); + AddSC_boss_halion(); + + AddSC_dalaran(); + AddSC_borean_tundra(); + AddSC_dragonblight(); + AddSC_grizzly_hills(); + AddSC_howling_fjord(); + AddSC_icecrown(); + AddSC_sholazar_basin(); + AddSC_storm_peaks(); + AddSC_wintergrasp(); + AddSC_zuldrak(); + AddSC_crystalsong_forest(); + AddSC_isle_of_conquest(); +} diff --git a/src/server/scripts/OutdoorPvP/CMakeLists.txt b/src/server/scripts/OutdoorPvP/CMakeLists.txt deleted file mode 100644 index 91ce4ce4186..00000000000 --- a/src/server/scripts/OutdoorPvP/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - OutdoorPvP/OutdoorPvPTF.cpp - OutdoorPvP/OutdoorPvPSI.cpp - OutdoorPvP/OutdoorPvPSI.h - OutdoorPvP/OutdoorPvPZM.cpp - OutdoorPvP/OutdoorPvPNA.cpp - OutdoorPvP/OutdoorPvPHP.cpp - OutdoorPvP/OutdoorPvPTF.h - OutdoorPvP/OutdoorPvPEP.h - OutdoorPvP/OutdoorPvPEP.cpp - OutdoorPvP/OutdoorPvPHP.h - OutdoorPvP/OutdoorPvPZM.h - OutdoorPvP/OutdoorPvPNA.h -) - -message(" -> Prepared: Outdoor PVP Zones") diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPScriptLoader.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPScriptLoader.cpp new file mode 100644 index 00000000000..ebf29910046 --- /dev/null +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPScriptLoader.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_outdoorpvp_ep(); +void AddSC_outdoorpvp_hp(); +void AddSC_outdoorpvp_na(); +void AddSC_outdoorpvp_si(); +void AddSC_outdoorpvp_tf(); +void AddSC_outdoorpvp_zm(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddOutdoorPvPScripts() +{ + AddSC_outdoorpvp_ep(); + AddSC_outdoorpvp_hp(); + AddSC_outdoorpvp_na(); + AddSC_outdoorpvp_si(); + AddSC_outdoorpvp_tf(); + AddSC_outdoorpvp_zm(); +} diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt deleted file mode 100644 index 55b0452fb0b..00000000000 --- a/src/server/scripts/Outland/CMakeLists.txt +++ /dev/null @@ -1,128 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - Outland/zone_nagrand.cpp - Outland/HellfireCitadel/MagtheridonsLair/magtheridons_lair.h - Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp - Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp - Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp - Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp - Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp - Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp - Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h - Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp - Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp - Outland/HellfireCitadel/BloodFurnace/blood_furnace.h - Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp - Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp - Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h - Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp - Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp - Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp - Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp - Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp - Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp - Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp - Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp - Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp - Outland/CoilfangReservoir/SteamVault/steam_vault.h - Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp - Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp - Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp - Outland/CoilfangReservoir/SerpentShrine/serpent_shrine.h - Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp - Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp - Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp - Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp - Outland/CoilfangReservoir/TheSlavePens/instance_the_slave_pens.cpp - Outland/CoilfangReservoir/TheSlavePens/the_slave_pens.h - Outland/CoilfangReservoir/TheSlavePens/boss_mennu_the_betrayer.cpp - Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp - Outland/CoilfangReservoir/TheSlavePens/boss_quagmirran.cpp - Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp - Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp - Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp - Outland/zone_shattrath_city.cpp - Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp - Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp - Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp - Outland/TempestKeep/Mechanar/mechanar.h - Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp - Outland/TempestKeep/Mechanar/instance_mechanar.cpp - Outland/TempestKeep/Mechanar/boss_gatewatcher_ironhand.cpp - Outland/TempestKeep/Eye/the_eye.h - Outland/TempestKeep/Eye/instance_the_eye.cpp - Outland/TempestKeep/Eye/boss_void_reaver.cpp - Outland/TempestKeep/Eye/boss_astromancer.cpp - Outland/TempestKeep/Eye/boss_alar.cpp - Outland/TempestKeep/Eye/boss_kaelthas.cpp - Outland/TempestKeep/Eye/the_eye.cpp - Outland/TempestKeep/botanica/the_botanica.h - Outland/TempestKeep/botanica/instance_the_botanica.cpp - Outland/TempestKeep/botanica/boss_commander_sarannis.cpp - Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp - Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp - Outland/TempestKeep/botanica/boss_warp_splinter.cpp - Outland/TempestKeep/botanica/boss_laj.cpp - Outland/TempestKeep/arcatraz/boss_zereketh_the_unbound.cpp - Outland/TempestKeep/arcatraz/boss_dalliah_the_doomsayer.cpp - Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp - Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp - Outland/TempestKeep/arcatraz/instance_arcatraz.cpp - Outland/TempestKeep/arcatraz/arcatraz.h - Outland/TempestKeep/arcatraz/arcatraz.cpp - Outland/Auchindoun/AuchenaiCrypts/boss_shirrak_the_dead_watcher.cpp - Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp - Outland/Auchindoun/AuchenaiCrypts/instance_auchenai_crypts.cpp - Outland/Auchindoun/AuchenaiCrypts/auchenai_crypts.h - Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp - Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp - Outland/Auchindoun/ManaTombs/instance_mana_tombs.cpp - Outland/Auchindoun/ManaTombs/mana_tombs.h - Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp - Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp - Outland/Auchindoun/SethekkHalls/boss_anzu.cpp - Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp - Outland/Auchindoun/SethekkHalls/sethekk_halls.h - Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp - Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp - Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp - Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp - Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp - Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h - Outland/boss_doomwalker.cpp - Outland/zone_terokkar_forest.cpp - Outland/zone_hellfire_peninsula.cpp - Outland/boss_doomlord_kazzak.cpp - Outland/BlackTemple/boss_teron_gorefiend.cpp - Outland/BlackTemple/black_temple.h - Outland/BlackTemple/illidari_council.cpp - Outland/BlackTemple/boss_shade_of_akama.cpp - Outland/BlackTemple/boss_supremus.cpp - Outland/BlackTemple/black_temple.cpp - Outland/BlackTemple/boss_mother_shahraz.cpp - Outland/BlackTemple/instance_black_temple.cpp - Outland/BlackTemple/boss_reliquary_of_souls.cpp - Outland/BlackTemple/boss_warlord_najentus.cpp - Outland/BlackTemple/boss_gurtogg_bloodboil.cpp - Outland/BlackTemple/boss_illidan.cpp - Outland/zone_shadowmoon_valley.cpp - Outland/zone_blades_edge_mountains.cpp - Outland/GruulsLair/boss_high_king_maulgar.cpp - Outland/GruulsLair/boss_gruul.cpp - Outland/GruulsLair/gruuls_lair.h - Outland/GruulsLair/instance_gruuls_lair.cpp - Outland/zone_netherstorm.cpp - Outland/zone_zangarmarsh.cpp -) - -message(" -> Prepared: Outland") diff --git a/src/server/scripts/Outland/outland_script_loader.cpp b/src/server/scripts/Outland/outland_script_loader.cpp new file mode 100644 index 00000000000..91ba4e5689f --- /dev/null +++ b/src/server/scripts/Outland/outland_script_loader.cpp @@ -0,0 +1,256 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +// Auchindoun - Auchenai Crypts +void AddSC_boss_shirrak_the_dead_watcher(); +void AddSC_boss_exarch_maladaar(); +void AddSC_instance_auchenai_crypts(); + +// Auchindoun - Mana Tombs +void AddSC_boss_pandemonius(); +void AddSC_boss_nexusprince_shaffar(); +void AddSC_instance_mana_tombs(); + +// Auchindoun - Sekketh Halls +void AddSC_boss_darkweaver_syth(); +void AddSC_boss_talon_king_ikiss(); +void AddSC_boss_anzu(); +void AddSC_instance_sethekk_halls(); + +// Auchindoun - Shadow Labyrinth +void AddSC_boss_ambassador_hellmaw(); +void AddSC_boss_blackheart_the_inciter(); +void AddSC_boss_grandmaster_vorpil(); +void AddSC_boss_murmur(); +void AddSC_instance_shadow_labyrinth(); + +// Black Temple +void AddSC_black_temple(); +void AddSC_boss_illidan(); +void AddSC_boss_shade_of_akama(); +void AddSC_boss_supremus(); +void AddSC_boss_gurtogg_bloodboil(); +void AddSC_boss_mother_shahraz(); +void AddSC_boss_reliquary_of_souls(); +void AddSC_boss_teron_gorefiend(); +void AddSC_boss_najentus(); +void AddSC_boss_illidari_council(); +void AddSC_instance_black_temple(); + +// Coilfang Reservoir - Serpent Shrine Cavern +void AddSC_boss_fathomlord_karathress(); +void AddSC_boss_hydross_the_unstable(); +void AddSC_boss_lady_vashj(); +void AddSC_boss_leotheras_the_blind(); +void AddSC_boss_morogrim_tidewalker(); +void AddSC_instance_serpentshrine_cavern(); +void AddSC_boss_the_lurker_below(); + +// Coilfang Reservoir - The Steam Vault +void AddSC_boss_hydromancer_thespia(); +void AddSC_boss_mekgineer_steamrigger(); +void AddSC_boss_warlord_kalithresh(); +void AddSC_instance_steam_vault(); + +// Coilfang Reservoir - The Slave Pens +void AddSC_instance_the_slave_pens(); +void AddSC_boss_mennu_the_betrayer(); +void AddSC_boss_rokmar_the_crackler(); +void AddSC_boss_quagmirran(); + +// Coilfang Reservoir - The Underbog +void AddSC_instance_the_underbog(); +void AddSC_boss_hungarfen(); +void AddSC_boss_the_black_stalker(); + +// Gruul's Lair +void AddSC_boss_gruul(); +void AddSC_boss_high_king_maulgar(); +void AddSC_instance_gruuls_lair(); +void AddSC_boss_broggok(); //HC Blood Furnace +void AddSC_boss_kelidan_the_breaker(); +void AddSC_boss_the_maker(); +void AddSC_instance_blood_furnace(); +void AddSC_boss_magtheridon(); //HC Magtheridon's Lair +void AddSC_instance_magtheridons_lair(); +void AddSC_boss_grand_warlock_nethekurse(); //HC Shattered Halls +void AddSC_boss_warbringer_omrogg(); +void AddSC_boss_warchief_kargath_bladefist(); +void AddSC_shattered_halls(); +void AddSC_instance_shattered_halls(); +void AddSC_boss_watchkeeper_gargolmar(); //HC Ramparts +void AddSC_boss_omor_the_unscarred(); +void AddSC_boss_vazruden_the_herald(); +void AddSC_instance_ramparts(); +void AddSC_arcatraz(); //TK Arcatraz +void AddSC_boss_zereketh_the_unbound(); +void AddSC_boss_dalliah_the_doomsayer(); +void AddSC_boss_wrath_scryer_soccothrates(); +void AddSC_boss_harbinger_skyriss(); +void AddSC_instance_arcatraz(); +void AddSC_boss_high_botanist_freywinn(); //TK Botanica +void AddSC_boss_laj(); +void AddSC_boss_warp_splinter(); +void AddSC_boss_thorngrin_the_tender(); +void AddSC_boss_commander_sarannis(); +void AddSC_instance_the_botanica(); +void AddSC_boss_alar(); //TK The Eye +void AddSC_boss_kaelthas(); +void AddSC_boss_void_reaver(); +void AddSC_boss_high_astromancer_solarian(); +void AddSC_instance_the_eye(); +void AddSC_the_eye(); +void AddSC_boss_gatewatcher_iron_hand(); //TK The Mechanar +void AddSC_boss_gatewatcher_gyrokill(); +void AddSC_boss_nethermancer_sepethrea(); +void AddSC_boss_pathaleon_the_calculator(); +void AddSC_boss_mechano_lord_capacitus(); +void AddSC_instance_mechanar(); + +void AddSC_blades_edge_mountains(); +void AddSC_boss_doomlordkazzak(); +void AddSC_boss_doomwalker(); +void AddSC_hellfire_peninsula(); +void AddSC_nagrand(); +void AddSC_netherstorm(); +void AddSC_shadowmoon_valley(); +void AddSC_shattrath_city(); +void AddSC_terokkar_forest(); +void AddSC_zangarmarsh(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddOutlandScripts() +{ + // Auchindoun - Auchenai Crypts + AddSC_boss_shirrak_the_dead_watcher(); + AddSC_boss_exarch_maladaar(); + AddSC_instance_auchenai_crypts(); + + // Auchindoun - Mana Tombs + AddSC_boss_pandemonius(); + AddSC_boss_nexusprince_shaffar(); + AddSC_instance_mana_tombs(); + + // Auchindoun - Sekketh Halls + AddSC_boss_darkweaver_syth(); + AddSC_boss_talon_king_ikiss(); + AddSC_boss_anzu(); + AddSC_instance_sethekk_halls(); + + // Auchindoun - Shadow Labyrinth + AddSC_boss_ambassador_hellmaw(); + AddSC_boss_blackheart_the_inciter(); + AddSC_boss_grandmaster_vorpil(); + AddSC_boss_murmur(); + AddSC_instance_shadow_labyrinth(); + + // Black Temple + AddSC_black_temple(); + AddSC_boss_illidan(); + AddSC_boss_shade_of_akama(); + AddSC_boss_supremus(); + AddSC_boss_gurtogg_bloodboil(); + AddSC_boss_mother_shahraz(); + AddSC_boss_reliquary_of_souls(); + AddSC_boss_teron_gorefiend(); + AddSC_boss_najentus(); + AddSC_boss_illidari_council(); + AddSC_instance_black_temple(); + + // Coilfang Reservoir - Serpent Shrine Cavern + AddSC_boss_fathomlord_karathress(); + AddSC_boss_hydross_the_unstable(); + AddSC_boss_lady_vashj(); + AddSC_boss_leotheras_the_blind(); + AddSC_boss_morogrim_tidewalker(); + AddSC_instance_serpentshrine_cavern(); + AddSC_boss_the_lurker_below(); + + // Coilfang Reservoir - The Steam Vault + AddSC_instance_steam_vault(); + AddSC_boss_hydromancer_thespia(); + AddSC_boss_mekgineer_steamrigger(); + AddSC_boss_warlord_kalithresh(); + + // Coilfang Reservoir - The Slave Pens + AddSC_instance_the_slave_pens(); + AddSC_boss_mennu_the_betrayer(); + AddSC_boss_rokmar_the_crackler(); + AddSC_boss_quagmirran(); + + // Coilfang Reservoir - The Underbog + AddSC_instance_the_underbog(); + AddSC_boss_hungarfen(); + AddSC_boss_the_black_stalker(); + + // Gruul's Lair + AddSC_boss_gruul(); + AddSC_boss_high_king_maulgar(); + AddSC_instance_gruuls_lair(); + AddSC_boss_broggok(); //HC Blood Furnace + AddSC_boss_kelidan_the_breaker(); + AddSC_boss_the_maker(); + AddSC_instance_blood_furnace(); + AddSC_boss_magtheridon(); //HC Magtheridon's Lair + AddSC_instance_magtheridons_lair(); + AddSC_boss_grand_warlock_nethekurse(); //HC Shattered Halls + AddSC_boss_warbringer_omrogg(); + AddSC_boss_warchief_kargath_bladefist(); + AddSC_shattered_halls(); + AddSC_instance_shattered_halls(); + AddSC_boss_watchkeeper_gargolmar(); //HC Ramparts + AddSC_boss_omor_the_unscarred(); + AddSC_boss_vazruden_the_herald(); + AddSC_instance_ramparts(); + AddSC_arcatraz(); //TK Arcatraz + AddSC_boss_zereketh_the_unbound(); + AddSC_boss_dalliah_the_doomsayer(); + AddSC_boss_wrath_scryer_soccothrates(); + AddSC_boss_harbinger_skyriss(); + AddSC_instance_arcatraz(); + AddSC_boss_high_botanist_freywinn(); //TK Botanica + AddSC_boss_laj(); + AddSC_boss_warp_splinter(); + AddSC_boss_thorngrin_the_tender(); + AddSC_boss_commander_sarannis(); + AddSC_instance_the_botanica(); + AddSC_boss_alar(); //TK The Eye + AddSC_boss_kaelthas(); + AddSC_boss_void_reaver(); + AddSC_boss_high_astromancer_solarian(); + AddSC_instance_the_eye(); + AddSC_the_eye(); + AddSC_boss_gatewatcher_iron_hand(); //TK The Mechanar + AddSC_boss_gatewatcher_gyrokill(); + AddSC_boss_nethermancer_sepethrea(); + AddSC_boss_pathaleon_the_calculator(); + AddSC_boss_mechano_lord_capacitus(); + AddSC_instance_mechanar(); + + AddSC_blades_edge_mountains(); + AddSC_boss_doomlordkazzak(); + AddSC_boss_doomwalker(); + AddSC_hellfire_peninsula(); + AddSC_nagrand(); + AddSC_netherstorm(); + AddSC_shadowmoon_valley(); + AddSC_shattrath_city(); + AddSC_terokkar_forest(); + AddSC_zangarmarsh(); +} diff --git a/src/server/scripts/Pet/CMakeLists.txt b/src/server/scripts/Pet/CMakeLists.txt deleted file mode 100644 index 9ca268a9a3f..00000000000 --- a/src/server/scripts/Pet/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - Pet/pet_dk.cpp - Pet/pet_generic.cpp - Pet/pet_hunter.cpp - Pet/pet_mage.cpp - Pet/pet_priest.cpp - Pet/pet_shaman.cpp -) - -message(" -> Prepared: Pet") diff --git a/src/server/scripts/Pet/pet_script_loader.cpp b/src/server/scripts/Pet/pet_script_loader.cpp new file mode 100644 index 00000000000..c3c0079fd46 --- /dev/null +++ b/src/server/scripts/Pet/pet_script_loader.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_deathknight_pet_scripts(); +void AddSC_generic_pet_scripts(); +void AddSC_hunter_pet_scripts(); +void AddSC_mage_pet_scripts(); +void AddSC_priest_pet_scripts(); +void AddSC_shaman_pet_scripts(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddPetScripts() +{ + AddSC_deathknight_pet_scripts(); + AddSC_generic_pet_scripts(); + AddSC_hunter_pet_scripts(); + AddSC_mage_pet_scripts(); + AddSC_priest_pet_scripts(); + AddSC_shaman_pet_scripts(); +} diff --git a/src/server/scripts/Spells/CMakeLists.txt b/src/server/scripts/Spells/CMakeLists.txt deleted file mode 100644 index 7434d98cf49..00000000000 --- a/src/server/scripts/Spells/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - Spells/spell_shaman.cpp - Spells/spell_hunter.cpp - Spells/spell_rogue.cpp - Spells/spell_druid.cpp - Spells/spell_dk.cpp - Spells/spell_quest.cpp - Spells/spell_warrior.cpp - Spells/spell_generic.cpp - Spells/spell_warlock.cpp - Spells/spell_priest.cpp - Spells/spell_mage.cpp - Spells/spell_paladin.cpp - Spells/spell_item.cpp - Spells/spell_holiday.cpp - Spells/spell_pet.cpp -) - -message(" -> Prepared: Spells") diff --git a/src/server/scripts/Spells/spell_script_loader.cpp b/src/server/scripts/Spells/spell_script_loader.cpp new file mode 100644 index 00000000000..b2c8d6663fa --- /dev/null +++ b/src/server/scripts/Spells/spell_script_loader.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +// This is where scripts' loading functions should be declared: +void AddSC_deathknight_spell_scripts(); +void AddSC_druid_spell_scripts(); +void AddSC_generic_spell_scripts(); +void AddSC_hunter_spell_scripts(); +void AddSC_mage_spell_scripts(); +void AddSC_paladin_spell_scripts(); +void AddSC_priest_spell_scripts(); +void AddSC_rogue_spell_scripts(); +void AddSC_shaman_spell_scripts(); +void AddSC_warlock_spell_scripts(); +void AddSC_warrior_spell_scripts(); +void AddSC_quest_spell_scripts(); +void AddSC_item_spell_scripts(); +void AddSC_holiday_spell_scripts(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddSpellsScripts() +{ + AddSC_deathknight_spell_scripts(); + AddSC_druid_spell_scripts(); + AddSC_generic_spell_scripts(); + AddSC_hunter_spell_scripts(); + AddSC_mage_spell_scripts(); + AddSC_paladin_spell_scripts(); + AddSC_priest_spell_scripts(); + AddSC_rogue_spell_scripts(); + AddSC_shaman_spell_scripts(); + AddSC_warlock_spell_scripts(); + AddSC_warrior_spell_scripts(); + AddSC_quest_spell_scripts(); + AddSC_item_spell_scripts(); + AddSC_holiday_spell_scripts(); +} diff --git a/src/server/scripts/World/CMakeLists.txt b/src/server/scripts/World/CMakeLists.txt deleted file mode 100644 index 17b3f2d8492..00000000000 --- a/src/server/scripts/World/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2008-2016 TrinityCore -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -file(GLOB_RECURSE sources_World World/*.cpp World/*.h) - -set(scripts_STAT_SRCS - ${scripts_STAT_SRCS} - ${sources_World} -) - -message(" -> Prepared: World") diff --git a/src/server/scripts/World/world_script_loader.cpp b/src/server/scripts/World/world_script_loader.cpp new file mode 100644 index 00000000000..0167024799f --- /dev/null +++ b/src/server/scripts/World/world_script_loader.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "World.h" + +// This is where scripts' loading functions should be declared: +// world +void AddSC_areatrigger_scripts(); +void AddSC_emerald_dragons(); +void AddSC_generic_creature(); +void AddSC_go_scripts(); +void AddSC_guards(); +void AddSC_item_scripts(); +void AddSC_npc_professions(); +void AddSC_npc_innkeeper(); +void AddSC_npcs_special(); +void AddSC_achievement_scripts(); +void AddSC_action_ip_logger(); +void AddSC_duel_reset(); +// player +void AddSC_chat_log(); +void AddSC_action_ip_logger(); + +// The name of this function should match: +// void Add${NameOfDirectory}Scripts() +void AddWorldScripts() +{ + AddSC_areatrigger_scripts(); + AddSC_emerald_dragons(); + AddSC_generic_creature(); + AddSC_go_scripts(); + AddSC_guards(); + AddSC_item_scripts(); + AddSC_npc_professions(); + AddSC_npc_innkeeper(); + AddSC_npcs_special(); + AddSC_achievement_scripts(); + AddSC_chat_log(); // location: scripts\World\chat_log.cpp + + // FIXME: This should be moved in a script validation hook. + // To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not. + if (sWorld->getBoolConfig(CONFIG_IP_BASED_ACTION_LOGGING)) + AddSC_action_ip_logger(); // location: scripts\World\action_ip_logger.cpp + AddSC_duel_reset(); +} From a974574d6e810799298e82776ccd85be0ae6d4d5 Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 7 Oct 2015 02:11:51 +0200 Subject: [PATCH 11/93] CMake: Add the possibility to pass an arbitrary count of targets to add_cxx_pch. * A PCH is still generated for every target which was passed to the macro * Resolves naming conflicts when using the same PCH header from multiple projects * Ref #15671 --- cmake/macros/FindPCHSupport.cmake | 71 ++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/cmake/macros/FindPCHSupport.cmake b/cmake/macros/FindPCHSupport.cmake index b068b69c26b..49d4be904d1 100644 --- a/cmake/macros/FindPCHSupport.cmake +++ b/cmake/macros/FindPCHSupport.cmake @@ -11,7 +11,7 @@ FUNCTION(GET_COMMON_PCH_PARAMS PCH_HEADER PCH_FE INCLUDE_PREFIX) SET(INCLUDE_FLAGS ${INCLUDE_FLAGS_LIST} PARENT_SCOPE) ENDFUNCTION(GET_COMMON_PCH_PARAMS) -FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT) +FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME_LIST INCLUDE_FLAGS IN PCH_SRC OUT) IF (CMAKE_BUILD_TYPE) STRING(TOUPPER _${CMAKE_BUILD_TYPE} CURRENT_BUILD_TYPE) ENDIF () @@ -55,50 +55,69 @@ FUNCTION(GENERATE_CXX_PCH_COMMAND TARGET_NAME INCLUDE_FLAGS IN PCH_SRC OUT) DEPENDS ${OUT} ) - ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N}) + FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) + ADD_DEPENDENCIES(${TARGET_NAME} generate_${PCH_SRC_N}) + ENDFOREACH() + ENDFUNCTION(GENERATE_CXX_PCH_COMMAND) -FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME PCH_HEADER PCH_SOURCE) +FUNCTION(ADD_CXX_PCH_GCC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) GET_COMMON_PCH_PARAMS(${PCH_HEADER} "gch" "-I") - GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT}) - SET_TARGET_PROPERTIES( - ${TARGET_NAME} PROPERTIES - COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}" - ) + GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT}) + + FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) + SET_TARGET_PROPERTIES( + ${TARGET_NAME} PROPERTIES + COMPILE_FLAGS "-include ${CMAKE_CURRENT_BINARY_DIR}/${PCH_HEADER_NAME}" + ) + ENDFOREACH() ENDFUNCTION(ADD_CXX_PCH_GCC) -FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME PCH_HEADER PCH_SOURCE) +FUNCTION(ADD_CXX_PCH_CLANG TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "-I") - GENERATE_CXX_PCH_COMMAND(${TARGET_NAME} "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT}) - SET_TARGET_PROPERTIES( - ${TARGET_NAME} PROPERTIES - COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}" - ) + GENERATE_CXX_PCH_COMMAND("${TARGET_NAME_LIST}" "${INCLUDE_FLAGS}" ${PCH_HEADER} ${PCH_SOURCE} ${PCH_HEADER_OUT}) + + FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) + SET_TARGET_PROPERTIES( + ${TARGET_NAME} PROPERTIES + COMPILE_FLAGS "-include-pch ${PCH_HEADER_OUT}" + ) + ENDFOREACH() ENDFUNCTION(ADD_CXX_PCH_CLANG) -FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME PCH_HEADER PCH_SOURCE) +FUNCTION(ADD_CXX_PCH_MSVC TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) GET_COMMON_PCH_PARAMS(${PCH_HEADER} "pch" "/I") - SET_TARGET_PROPERTIES( - ${TARGET_NAME} PROPERTIES - COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}" - ) + + FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) + SET_TARGET_PROPERTIES( + ${TARGET_NAME} PROPERTIES + COMPILE_FLAGS "/FI${PCH_HEADER_NAME} /Yu${PCH_HEADER_NAME}" + ) + ENDFOREACH() + SET_SOURCE_FILES_PROPERTIES( ${PCH_SOURCE} PROPERTIES COMPILE_FLAGS "/Yc${PCH_HEADER_NAME}" ) ENDFUNCTION(ADD_CXX_PCH_MSVC) -FUNCTION(ADD_CXX_PCH TARGET_NAME PCH_HEADER PCH_SOURCE) - IF (MSVC) - ADD_CXX_PCH_MSVC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE}) - ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode") - SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES +FUNCTION(ADD_CXX_PCH_XCODE TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) + FOREACH(TARGET_NAME ${TARGET_NAME_LIST}) + SET_TARGET_PROPERTIES("${TARGET_NAME}" PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/${PCH_HEADER}" ) + ENDFOREACH() +ENDFUNCTION(ADD_CXX_PCH_XCODE) + +FUNCTION(ADD_CXX_PCH TARGET_NAME_LIST PCH_HEADER PCH_SOURCE) + IF (MSVC) + ADD_CXX_PCH_MSVC("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE}) + ELSEIF ("${CMAKE_GENERATOR}" MATCHES "Xcode") + ADD_CXX_PCH_XCODE("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE}) ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - ADD_CXX_PCH_CLANG(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE}) + ADD_CXX_PCH_CLANG("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE}) ELSEIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") - ADD_CXX_PCH_GCC(${TARGET_NAME} ${PCH_HEADER} ${PCH_SOURCE}) + ADD_CXX_PCH_GCC("${TARGET_NAME_LIST}" ${PCH_HEADER} ${PCH_SOURCE}) ENDIF () ENDFUNCTION(ADD_CXX_PCH) From ecd74a8cccc1a28750a83d71624dc8bc32e0d965 Mon Sep 17 00:00:00 2001 From: Naios Date: Mon, 22 Feb 2016 16:47:42 +0100 Subject: [PATCH 12/93] Core/Scripts: Remove the npc_netherweb_victim script which is handled through sai now * Ref 546c8a5b8ead9d198 --- .../scripts/Outland/zone_terokkar_forest.cpp | 61 ------------------- 1 file changed, 61 deletions(-) diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 06a8af947b7..04ec1e4dc07 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -27,7 +27,6 @@ EndScriptData */ npc_unkor_the_ruthless npc_infested_root_walker npc_rotting_forest_rager -npc_netherweb_victim npc_floon npc_isla_starmane npc_slim @@ -286,65 +285,6 @@ public: }; }; -/*###### -## npc_netherweb_victim -######*/ - -enum NetherwebVictim -{ - QUEST_TARGET = 22459 - //SPELL_FREE_WEBBED = 38950 -}; - -const uint32 netherwebVictims[6] = -{ - 18470, 16805, 21242, 18452, 22482, 21285 -}; - -class npc_netherweb_victim : public CreatureScript -{ -public: - npc_netherweb_victim() : CreatureScript("npc_netherweb_victim") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_netherweb_victimAI(creature); - } - - struct npc_netherweb_victimAI : public ScriptedAI - { - npc_netherweb_victimAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override { } - void EnterCombat(Unit* /*who*/) override { } - void MoveInLineOfSight(Unit* /*who*/) override { } - - - void JustDied(Unit* killer) override - { - Player* player = killer->ToPlayer(); - if (!player) - return; - - if (player->GetQuestStatus(10873) == QUEST_STATUS_INCOMPLETE) - { - if (rand32() % 100 < 25) - { - me->SummonCreature(QUEST_TARGET, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); - player->KilledMonsterCredit(QUEST_TARGET); - } - else - me->SummonCreature(netherwebVictims[rand32() % 6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); - - if (rand32() % 100 < 75) - me->SummonCreature(netherwebVictims[rand32() % 6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); - - me->SummonCreature(netherwebVictims[rand32() % 6], 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); - } - } - }; -}; - /*###### ## npc_floon ######*/ @@ -719,7 +659,6 @@ void AddSC_terokkar_forest() new npc_unkor_the_ruthless(); new npc_infested_root_walker(); new npc_rotting_forest_rager(); - new npc_netherweb_victim(); new npc_floon(); new npc_isla_starmane(); new go_skull_pile(); From b5b7ce44cfeb98bf47eb6c9e0c926994ad53ede8 Mon Sep 17 00:00:00 2001 From: treeston Date: Mon, 22 Feb 2016 23:00:15 +0100 Subject: [PATCH 13/93] Core/Threat: Prevent bosses (and other stuff using DoZoneInCombat) from switching off of the person pulling if they are pulled without generating threat. --- src/server/game/AI/CreatureAI.cpp | 3 +++ src/server/game/Combat/ThreatManager.cpp | 5 ++++- src/server/game/Combat/ThreatManager.h | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 352ae635878..33de8b09123 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -134,7 +134,10 @@ void CreatureAI::MoveInLineOfSight(Unit* who) return; if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who, false)) + { + me->AddThreat(who, 0.0f); // ensure our initial target is the first thing added to threat list so we don't randomly switch off if DoZoneInCombat is called during the EnterCombat hook AttackStart(who); + } //else if (who->GetVictim() && me->IsFriendlyTo(who) // && me->IsWithinDistInMap(who, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS)) // && me->CanStartAttack(who->GetVictim(), true)) /// @todo if we use true, it will not attack it when it arrives diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 588e7b1a93b..9767d69e2aa 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -335,7 +335,7 @@ HostileReference* ThreatContainer::selectNextVictim(Creature* attacker, HostileR { // current victim is a second choice target, so don't compare threat with it below if (currentRef == currentVictim) - currentVictim = NULL; + currentVictim = nullptr; ++iter; continue; } @@ -437,12 +437,15 @@ void ThreatManager::_addThreat(Unit* victim, float threat) if (!ref) // there was no ref => create a new one { + bool isFirst = iThreatContainer.empty(); // threat has to be 0 here HostileReference* hostileRef = new HostileReference(victim, this, 0); iThreatContainer.addReference(hostileRef); hostileRef->addThreat(threat); // now we add the real threat if (victim->GetTypeId() == TYPEID_PLAYER && victim->ToPlayer()->IsGameMaster()) hostileRef->setOnlineOfflineState(false); // GM is always offline + else if (isFirst) + setCurrentVictim(hostileRef); } } diff --git a/src/server/game/Combat/ThreatManager.h b/src/server/game/Combat/ThreatManager.h index 7d20e99c128..0f4efdbeab9 100644 --- a/src/server/game/Combat/ThreatManager.h +++ b/src/server/game/Combat/ThreatManager.h @@ -169,7 +169,7 @@ class ThreatContainer HostileReference* getMostHated() const { - return iThreatList.empty() ? NULL : iThreatList.front(); + return iThreatList.empty() ? nullptr : iThreatList.front(); } HostileReference* getReferenceByTarget(Unit* victim) const; From c0c94d0e3179cdd336783890116f0cb7afbda5ca Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 23 Feb 2016 12:17:25 +0000 Subject: [PATCH 14/93] DB/Quest: Taken in the Night Fix a problem, previous worked for me due to have duplicated timed action lists as originally got id wrong ie 22335 instead of 22355, had corrected id but failed to update the action to call timed action lists but failed to spot this has had timed action lists with both ids. --- sql/updates/world/2016_02_23_00_world.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2016_02_23_00_world.sql diff --git a/sql/updates/world/2016_02_23_00_world.sql b/sql/updates/world/2016_02_23_00_world.sql new file mode 100644 index 00000000000..871ce608f1c --- /dev/null +++ b/sql/updates/world/2016_02_23_00_world.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `action_param1`=2235500, `action_param2`=2235501, `action_param3`=2235502, `action_param4`=2235503, `action_param5`=2235504, `action_param6`=2235505 WHERE `entryorguid`=22355 AND `source_type`=0 AND `id`=6 AND `link`=0; From 2f14664340ba486a226a0c48d285e7141a16b62f Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 19 Feb 2016 19:14:56 +0100 Subject: [PATCH 15/93] Core/UnitAI: Rework creature-controlled player behavior. - Removed hacked control mechanism, use proper PlayerAI instead - Port old hacky code to new SimpleCharmedPlayerAI class - Make adjustments to aforementioned code to fix bugs: - Properly clean up movement after charm ends - Only try to attack a target if charmer is engaged in combat --- src/server/game/AI/CoreAI/UnitAI.cpp | 30 --- src/server/game/AI/CoreAI/UnitAI.h | 17 -- src/server/game/AI/CreatureAI.h | 6 + src/server/game/AI/PlayerAI/PlayerAI.cpp | 195 ++++++++++++++++++ src/server/game/AI/PlayerAI/PlayerAI.h | 52 +++++ src/server/game/CMakeLists.txt | 1 + src/server/game/Entities/Creature/Creature.h | 2 +- src/server/game/Entities/Player/Player.cpp | 39 +--- src/server/game/Entities/Player/Player.h | 5 +- src/server/game/Entities/Unit/Unit.cpp | 32 ++- src/server/scripts/CMakeLists.txt | 1 + .../PitOfSaron/boss_scourgelord_tyrannus.cpp | 14 +- src/server/scripts/Spells/spell_dk.cpp | 12 +- 13 files changed, 304 insertions(+), 102 deletions(-) create mode 100644 src/server/game/AI/PlayerAI/PlayerAI.cpp create mode 100644 src/server/game/AI/PlayerAI/PlayerAI.h diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index a3a5e7f7663..3aadf6e59a0 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -259,36 +259,6 @@ void UnitAI::FillAISpellInfo() } } -//Enable PlayerAI when charmed -void PlayerAI::OnCharmed(bool apply) -{ - me->IsAIEnabled = apply; -} - -void SimpleCharmedAI::UpdateAI(const uint32 /*diff*/) -{ - Creature* charmer = me->GetCharmer()->ToCreature(); - - //kill self if charm aura has infinite duration - if (charmer->IsInEvadeMode()) - { - Unit::AuraEffectList const& auras = me->GetAuraEffectsByType(SPELL_AURA_MOD_CHARM); - for (Unit::AuraEffectList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter) - if ((*iter)->GetCasterGUID() == charmer->GetGUID() && (*iter)->GetBase()->IsPermanent()) - { - charmer->Kill(me); - return; - } - } - - if (!charmer->IsInCombat()) - me->GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, me->GetFollowAngle()); - - Unit* target = me->GetVictim(); - if (!target || !charmer->IsValidAttackTarget(target)) - AttackStart(charmer->SelectNearestTargetInAttackDistance()); -} - SpellTargetSelector::SpellTargetSelector(Unit* caster, uint32 spellId) : _caster(caster), _spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(sSpellMgr->GetSpellInfo(spellId), caster)) { diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 5dc5946b226..766e747d998 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -268,21 +268,4 @@ class UnitAI UnitAI& operator=(UnitAI const& right) = delete; }; -class PlayerAI : public UnitAI -{ - protected: - Player* const me; - public: - explicit PlayerAI(Player* player) : UnitAI((Unit*)player), me(player) { } - - void OnCharmed(bool apply) override; -}; - -class SimpleCharmedAI : public PlayerAI -{ - public: - void UpdateAI(uint32 diff) override; - SimpleCharmedAI(Player* player): PlayerAI(player) { } -}; - #endif diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index 239fda577a7..e009e2ed0b6 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -28,6 +28,7 @@ class WorldObject; class Unit; class Creature; class Player; +class PlayerAI; class SpellInfo; #define TIME_INTERVAL_LOOK 5000 @@ -186,6 +187,11 @@ class CreatureAI : public UnitAI virtual bool CanSeeAlways(WorldObject const* /*obj*/) { return false; } + // Called when a player is charmed by the creature + // If a PlayerAI* is returned, that AI is placed on the player instead of the default charm AI + // Object destruction is handled by Unit::RemoveCharmedBy + virtual PlayerAI* GetAIForCharmedPlayer(Player* /*who*/) { return nullptr; } + // intended for encounter design/debugging. do not use for other purposes. expensive. int32 VisualizeBoundary(uint32 duration, Unit* owner=nullptr, bool fill=false) const; virtual bool CheckInRoom(); diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp new file mode 100644 index 00000000000..65e60be8eee --- /dev/null +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -0,0 +1,195 @@ +/* +* Copyright (C) 2016-2016 TrinityCore +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along +* with this program. If not, see . +*/ + +#include "PlayerAI.h" +#include "SpellAuras.h" +#include "SpellAuraEffects.h" + +enum Spells +{ + /* Generic */ + SPELL_AUTO_SHOT = 75, + SPELL_SHOOT = 3018, + SPELL_THROW = 2764, + SPELL_SHOOT_WAND = 5019, + + /* Priest */ + SPELL_SHADOWFORM = 15473, + + /* Shaman */ + SPELL_STORMSTRIKE = 17364, + + /* Druid */ + SPELL_MOONKIN_FORM = 24858 +}; +PlayerAI::PlayerAI(Player* player) : UnitAI(static_cast(player)), me(player), _isRangedAttacker(false) +{ + switch (me->getClass()) + { + case CLASS_WARRIOR: + _isRangedAttacker = false; + break; + case CLASS_PALADIN: + _isRangedAttacker = false; + break; + case CLASS_HUNTER: + { + // check if we have a ranged weapon equipped + Item const* rangedSlot = me->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED); + if (ItemTemplate const* rangedTemplate = rangedSlot ? rangedSlot->GetTemplate() : nullptr) + if ((1 << rangedTemplate->SubClass) & ITEM_SUBCLASS_MASK_WEAPON_RANGED) + { + _isRangedAttacker = true; + break; + } + _isRangedAttacker = false; + break; + } + case CLASS_ROGUE: + _isRangedAttacker = false; + break; + case CLASS_PRIEST: + _isRangedAttacker = me->HasSpell(SPELL_SHADOWFORM); + break; + case CLASS_DEATH_KNIGHT: + _isRangedAttacker = false; + break; + case CLASS_SHAMAN: + _isRangedAttacker = !me->HasSpell(SPELL_STORMSTRIKE); + break; + case CLASS_MAGE: + _isRangedAttacker = true; + break; + case CLASS_WARLOCK: + _isRangedAttacker = true; + break; + case CLASS_DRUID: + _isRangedAttacker = me->HasAura(SPELL_MOONKIN_FORM); + break; + default: + TC_LOG_WARN("entities.unit", "Possessed player %s (possessed by %s) does not have any recognized class (class = %u).", me->GetGUID().ToString().c_str(), me->GetCharmerGUID().ToString().c_str(), me->getClass()); + break; + } +} + +void PlayerAI::DoRangedAttackIfReady() +{ + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + if (!me->isAttackReady(RANGED_ATTACK)) + return; + + Unit* victim = me->GetVictim(); + if (!victim) + return; + + uint32 rangedAttackSpell = 0; + + Item const* rangedItem = me->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED); + if (ItemTemplate const* rangedTemplate = rangedItem ? rangedItem->GetTemplate() : nullptr) + { + switch (rangedTemplate->SubClass) + { + case ITEM_SUBCLASS_WEAPON_BOW: + case ITEM_SUBCLASS_WEAPON_GUN: + case ITEM_SUBCLASS_WEAPON_CROSSBOW: + rangedAttackSpell = SPELL_SHOOT; + break; + case ITEM_SUBCLASS_WEAPON_THROWN: + rangedAttackSpell = SPELL_THROW; + break; + case ITEM_SUBCLASS_WEAPON_WAND: + rangedAttackSpell = SPELL_SHOOT_WAND; + break; + } + } + + std::cout << "Selected " << rangedAttackSpell << std::endl; + + if (!rangedAttackSpell) + return; + + me->CastSpell(victim, rangedAttackSpell, TRIGGERED_CAST_DIRECTLY); + me->resetAttackTimer(RANGED_ATTACK); +} + +void PlayerAI::DoAutoAttackIfReady() +{ + if (IsRangedAttacker()) + DoRangedAttackIfReady(); + else + DoMeleeAttackIfReady(); +} + +void SimpleCharmedPlayerAI::UpdateAI(const uint32 /*diff*/) +{ + Creature* charmer = me->GetCharmer()->ToCreature(); + + //kill self if charm aura has infinite duration + if (charmer->IsInEvadeMode()) + { + Player::AuraEffectList const& auras = me->GetAuraEffectsByType(SPELL_AURA_MOD_CHARM); + for (Player::AuraEffectList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter) + if ((*iter)->GetCasterGUID() == charmer->GetGUID() && (*iter)->GetBase()->IsPermanent()) + { + me->Kill(me); + return; + } + } + + if (charmer->IsInCombat()) + { + Unit* target = me->GetVictim(); + if (!target || !charmer->IsValidAttackTarget(target)) + { + target = charmer->SelectNearestTarget(); + if (!target) + return; + + if (IsRangedAttacker()) + AttackStartCaster(target, 28.0f); + else + AttackStart(target); + } + } + else + { + me->AttackStop(); + me->CastStop(); + me->GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + } + + DoAutoAttackIfReady(); +} + +void SimpleCharmedPlayerAI::OnCharmed(bool apply) +{ + if (apply) + { + me->CastStop(); + me->AttackStop(); + } + else + { + me->CastStop(); + me->AttackStop(); + // @todo only voluntary movement (don't cancel stuff like death grip or charge mid-animation) + me->GetMotionMaster()->Clear(); + me->StopMoving(); + } +} diff --git a/src/server/game/AI/PlayerAI/PlayerAI.h b/src/server/game/AI/PlayerAI/PlayerAI.h new file mode 100644 index 00000000000..39b04a70d67 --- /dev/null +++ b/src/server/game/AI/PlayerAI/PlayerAI.h @@ -0,0 +1,52 @@ +/* +* Copyright (C) 2016-2016 TrinityCore +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along +* with this program. If not, see . +*/ + +#ifndef TRINITY_PLAYERAI_H +#define TRINITY_PLAYERAI_H + +#include "UnitAI.h" +#include "Player.h" +#include "Creature.h" + +class PlayerAI : public UnitAI +{ + public: + explicit PlayerAI(Player* player); + + void OnCharmed(bool /*apply*/) override { } // charm AI application for players is handled by Unit::SetCharmedBy / Unit::RemoveCharmedBy + + protected: + Player* const me; + void SetIsRangedAttacker(bool state) { _isRangedAttacker = state; } + bool IsRangedAttacker() const { return _isRangedAttacker; } + + void DoRangedAttackIfReady(); + void DoAutoAttackIfReady(); + + private: + bool _isRangedAttacker; +}; + +class SimpleCharmedPlayerAI : public PlayerAI +{ + public: + SimpleCharmedPlayerAI(Player* player) : PlayerAI(player) { } + void UpdateAI(uint32 diff) override; + void OnCharmed(bool apply) override; +}; + +#endif diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index aae5b4874d8..4d41fbc32eb 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -108,6 +108,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/Addons ${CMAKE_CURRENT_SOURCE_DIR}/AI ${CMAKE_CURRENT_SOURCE_DIR}/AI/CoreAI + ${CMAKE_CURRENT_SOURCE_DIR}/AI/PlayerAI ${CMAKE_CURRENT_SOURCE_DIR}/AI/ScriptedAI ${CMAKE_CURRENT_SOURCE_DIR}/AI/SmartScripts ${CMAKE_CURRENT_SOURCE_DIR}/AuctionHouse diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 49bd854ef2f..0803345f4f0 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -479,7 +479,7 @@ class Creature : public Unit, public GridObject, public MapObject bool AIM_Initialize(CreatureAI* ai = NULL); void Motion_Initialize(); - CreatureAI* AI() const { return (CreatureAI*)i_AI; } + CreatureAI* AI() const { return reinterpret_cast(i_AI); } bool SetWalk(bool enable) override; bool SetDisableGravity(bool disable, bool packetOnly = false) override; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 464c3125ce4..e8163a7c0fb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1237,12 +1237,7 @@ void Player::Update(uint32 p_time) UpdateAfkReport(now); - if (IsCharmed()) - if (Unit* charmer = GetCharmer()) - if (charmer->GetTypeId() == TYPEID_UNIT && charmer->IsAlive()) - UpdateCharmedAI(); - - if (GetAI() && IsAIEnabled) + if (IsAIEnabled && GetAI()) GetAI()->UpdateAI(p_time); // Update items that have just a limited lifetime @@ -24129,38 +24124,6 @@ bool Player::isTotalImmunity() return false; } -void Player::UpdateCharmedAI() -{ - //This should only called in Player::Update - Creature* charmer = GetCharmer()->ToCreature(); - - //kill self if charm aura has infinite duration - if (charmer->IsInEvadeMode()) - { - AuraEffectList const& auras = GetAuraEffectsByType(SPELL_AURA_MOD_CHARM); - for (AuraEffectList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter) - if ((*iter)->GetCasterGUID() == charmer->GetGUID() && (*iter)->GetBase()->IsPermanent()) - { - charmer->DealDamage(this, GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); - return; - } - } - - if (!charmer->IsInCombat()) - GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); - - Unit* target = GetVictim(); - if (!target || !charmer->IsValidAttackTarget(target)) - { - target = charmer->SelectNearestTarget(); - if (!target) - return; - - GetMotionMaster()->MoveChase(target); - Attack(target, true); - } -} - uint32 Player::GetRuneBaseCooldown(uint8 index) { uint8 rune = GetBaseRune(index); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2388cf9d0c7..0d6d21c6b28 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -54,6 +54,7 @@ class PlayerMenu; class PlayerSocial; class SpellCastTargets; class UpdateMask; +class PlayerAI; struct CharacterCustomizeInfo; @@ -1022,6 +1023,8 @@ class Player : public Unit, public GridObject explicit Player(WorldSession* session); ~Player(); + PlayerAI* AI() const { return reinterpret_cast(i_AI); } + void CleanupsBeforeDelete(bool finalCleanup = true) override; void AddToWorld() override; @@ -2533,8 +2536,6 @@ class Player : public Unit, public GridObject MapReference m_mapRef; - void UpdateCharmedAI(); - uint32 m_lastFallTime; float m_lastFallZ; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c21301c27b2..e9033b3d05c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -45,6 +45,7 @@ #include "PetAI.h" #include "Pet.h" #include "Player.h" +#include "PlayerAI.h" #include "QuestDef.h" #include "ReputationMgr.h" #include "SpellAuraEffects.h" @@ -15902,11 +15903,21 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au ToCreature()->AI()->OnCharmed(true); GetMotionMaster()->MoveIdle(); } - else + else if (Player* player = ToPlayer()) { - Player* player = ToPlayer(); if (player->isAFK()) player->ToggleAFK(); + + if (Creature* creatureCharmer = charmer->ToCreature()) // we are charmed by a creature + { + IsAIEnabled = true; + i_disabledAI = i_AI; + // set our AI to the charmer's custom charm AI if applicable + if (PlayerAI* charmAI = creatureCharmer->AI()->GetAIForCharmedPlayer(player)) + i_AI = charmAI; + else // otherwise use the default charmed player AI + i_AI = new SimpleCharmedPlayerAI(player); + } player->SetClientControl(this, false); } @@ -16064,7 +16075,24 @@ void Unit::RemoveCharmedBy(Unit* charmer) } if (Player* player = ToPlayer()) + { + if (charmer->GetTypeId() == TYPEID_UNIT) // charmed by a creature, this means we had PlayerAI + { + if (i_AI) + { + // allow charmed player AI to clean up + i_AI->OnCharmed(false); + // then delete it + delete i_AI; + // and restore our previous playerAI (if we had one) + if ((i_AI = i_disabledAI)) + i_disabledAI = nullptr; + else + IsAIEnabled = false; + } + } player->SetClientControl(this, true); + } // a guardian should always have charminfo if (playerCharmer && this != charmer->GetFirstControlled()) diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index a15b6f8ad07..a0bbe988787 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -63,6 +63,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/game/Addons ${CMAKE_SOURCE_DIR}/src/server/game/AI ${CMAKE_SOURCE_DIR}/src/server/game/AI/CoreAI + ${CMAKE_SOURCE_DIR}/src/server/game/AI/PlayerAI ${CMAKE_SOURCE_DIR}/src/server/game/AI/ScriptedAI ${CMAKE_SOURCE_DIR}/src/server/game/AI/SmartScripts ${CMAKE_SOURCE_DIR}/src/server/game/AuctionHouse diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 96bd0aaa35e..dd3ed10f96f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -22,6 +22,7 @@ #include "pit_of_saron.h" #include "Vehicle.h" #include "Player.h" +#include "PlayerAI.h" enum Yells { @@ -438,9 +439,10 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader if (GetTarget()->GetTypeId() != TYPEID_PLAYER) return; - oldAI = GetTarget()->GetAI(); - oldAIState = GetTarget()->IsAIEnabled; - GetTarget()->SetAI(new player_overlord_brandAI(GetTarget()->ToPlayer(), GetCasterGUID())); + Player* pTarget = GetTarget()->ToPlayer(); + oldAI = pTarget->AI(); + oldAIState = pTarget->IsAIEnabled; + GetTarget()->SetAI(static_cast(new player_overlord_brandAI(pTarget, GetCasterGUID()))); GetTarget()->IsAIEnabled = true; } @@ -450,8 +452,8 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader return; GetTarget()->IsAIEnabled = oldAIState; - UnitAI* thisAI = GetTarget()->GetAI(); - GetTarget()->SetAI(oldAI); + PlayerAI* thisAI = GetTarget()->ToPlayer()->AI(); + GetTarget()->SetAI(static_cast(oldAI)); delete thisAI; } @@ -461,7 +463,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader AfterEffectRemove += AuraEffectRemoveFn(spell_tyrannus_overlord_brand_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } - UnitAI* oldAI; + PlayerAI* oldAI; bool oldAIState; }; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 3cea620559a..f1ad785c13d 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -22,7 +22,7 @@ */ #include "Player.h" -#include "UnitAI.h" +#include "PlayerAI.h" #include "ScriptMgr.h" #include "SpellScript.h" #include "SpellAuraEffects.h" @@ -1909,9 +1909,9 @@ public: if (!player || player->GetGhoulResurrectGhoulGUID().IsEmpty()) return; - oldAI = player->GetAI(); + oldAI = player->AI(); oldAIState = player->IsAIEnabled; - player->SetAI(new player_ghoulAI(player, player->GetGhoulResurrectGhoulGUID())); + player->SetAI(static_cast(new player_ghoulAI(player, player->GetGhoulResurrectGhoulGUID()))); player->IsAIEnabled = true; } @@ -1922,8 +1922,8 @@ public: return; player->IsAIEnabled = oldAIState; - UnitAI* thisAI = player->GetAI(); - player->SetAI(oldAI); + PlayerAI* thisAI = player->AI(); + player->SetAI(static_cast(oldAI)); delete thisAI; // Dismiss ghoul if necessary @@ -1943,7 +1943,7 @@ public: AfterEffectRemove += AuraEffectRemoveFn(spell_dk_raise_ally_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } - UnitAI* oldAI; + PlayerAI* oldAI; bool oldAIState; }; From 2df2f56f8c1cfdaf47e3e5853d7d9a80c217cc20 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Tue, 23 Feb 2016 17:36:31 +0100 Subject: [PATCH 16/93] Core/Weather: Fix small weather system bug https://github.com/cmangos/mangos-wotlk/commit/5ef2f17 --- src/server/game/Weather/Weather.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index f774916f4a5..7ef16e32031 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -152,7 +152,7 @@ bool Weather::ReGenerate() uint32 chance2 = chance1+ m_weatherChances->data[season].snowChance; uint32 chance3 = chance2+ m_weatherChances->data[season].stormChance; - uint32 rnd = urand(0, 99); + uint32 rnd = urand(1, 100); if (rnd <= chance1) m_type = WEATHER_TYPE_RAIN; else if (rnd <= chance2) From 6f75bf9e0b4167febf1a6ad35af51782c80c879d Mon Sep 17 00:00:00 2001 From: Kittnz Date: Tue, 23 Feb 2016 19:55:46 +0100 Subject: [PATCH 17/93] DB/Event: Add all missing Lunar Festival Objects in Exodar, Darnassus, Iron Forge --- sql/updates/world/2016_02_23_01_world.sql | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 sql/updates/world/2016_02_23_01_world.sql diff --git a/sql/updates/world/2016_02_23_01_world.sql b/sql/updates/world/2016_02_23_01_world.sql new file mode 100644 index 00000000000..0773487dbc7 --- /dev/null +++ b/sql/updates/world/2016_02_23_01_world.sql @@ -0,0 +1,119 @@ +SET @OGUID:=82948; +SET @CGUID:=85532; +SET @Event:=7; + +-- Add missing lunar objects +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+89; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0 , 180879, 530, 1, 1, -4021.671, -11847.32, 0.006294, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 180879 (Area: 0) -- exodar +(@OGUID+1 , 180777, 530, 1, 1, -4016.04, -11831.66, 0.122772, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 0) +(@OGUID+2 , 180777, 530, 1, 1, -4019.716, -11831.79, 0.095343, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 0) +(@OGUID+3 , 180880, 530, 1, 1, -4021.575, -11847.88, 1.865077, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 180880 (Area: 0) +(@OGUID+4 , 180881, 530, 1, 1, -4021.983, -11847.42, 1.806305, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180881 (Area: 0) +(@OGUID+5 , 180882, 530, 1, 1, -4021.177, -11847.73, 1.821342, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 180882 (Area: 0) +(@OGUID+6 , 180883, 530, 1, 1, -4021.107, -11847.26, 1.800923, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180883 (Area: 0) +(@OGUID+7 , 180883, 530, 1, 1, -4021.65, -11846.95, 1.829355, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180883 (Area: 0) +(@OGUID+8 , 180869, 530, 1, 1, -4023.456, -11837.75, 0.015313, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180869 (Area: 0) +(@OGUID+9 , 180869, 530, 1, 1, -4011.058, -11837.71, 0.147322, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180869 (Area: 0) +(@OGUID+10, 180766, 530, 1, 1, -4012.713, -11842.4, 0.117445, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+11, 180766, 530, 1, 1, -4020.125, -11847.21, 0.023653, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+12, 180766, 530, 1, 1, -4014.778, -11847.44, 0.082153, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+13, 180766, 530, 1, 1, -4022.487, -11842.52, 0.009148, 5.305802, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+14, 180766, 530, 1, 1, -4008.917, -11837.83, 0.170679, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+15, 180766, 530, 1, 1, -4012.804, -11831.57, 0.146643, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+16, 180766, 530, 1, 1, -4025.327, -11837.02, 0.008528, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+17, 180766, 530, 1, 1, -4023.502, -11831.39, 0.072735, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 0) +(@OGUID+18, 180878, 530, 1, 1, -4022.725, -11846.54, -0.003436, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+19, 180878, 530, 1, 1, -4023.054, -11847.33, -0.00903, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+20, 180878, 530, 1, 1, -4022.056, -11846.02, 0.005262, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+21, 180878, 530, 1, 1, -4021.267, -11845.9, 0.014263, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+22, 180878, 530, 1, 1, -4021.343, -11848.85, 0.009881, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+23, 180878, 530, 1, 1, -4022.729, -11848.02, -0.005639, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+24, 180878, 530, 1, 1, -4022.064, -11848.56, 0.00076, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 0) +(@OGUID+25, 180766, 1, 1, 1, 10147.02, 2574.3, 1320.719, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 1659) -- darnassus +(@OGUID+26, 180766, 1, 1, 1, 10149.6, 2592.33, 1330.62, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 1659) +(@OGUID+27, 180766, 1, 1, 1, 10154.62, 2593.352, 1330.546, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 1659) +(@OGUID+28, 180766, 1, 1, 1, 10148.55, 2610.374, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 1658) +(@OGUID+29, 180766, 1, 1, 1, 10159.98, 2604.604, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 1658) +(@OGUID+30, 180766, 1, 1, 1, 10141.72, 2600.144, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180766 (Area: 1658) +(@OGUID+31, 180765, 1, 1, 1, 10040.4, 2478.42, 1353.98, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 0) +(@OGUID+32, 180765, 1, 1, 1, 10050.7, 2510.37, 1353.98, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 0) +(@OGUID+33, 180765, 1, 1, 1, 10170.16, 2554.241, 1344.727, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+34, 180765, 1, 1, 1, 10088.98, 2580.349, 1341.743, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+35, 180765, 1, 1, 1, 10170.96, 2556.492, 1366.235, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+36, 180765, 1, 1, 1, 10163.1, 2568.72, 1353.59, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+37, 180765, 1, 1, 1, 10156.62, 2582.27, 1345.43, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+38, 180765, 1, 1, 1, 10107.72, 2590.667, 1341.86, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+39, 180765, 1, 1, 1, 10106.9, 2600.88, 1340.55, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+40, 180765, 1, 1, 1, 10080.89, 2586.866, 1340.509, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+41, 180765, 1, 1, 1, 10185.6, 2561.11, 1366.71, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+42, 180765, 1, 1, 1, 10165.39, 2580.426, 1361.882, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+43, 180765, 1, 1, 1, 10162.87, 2569.218, 1366.497, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1659) +(@OGUID+44, 180765, 1, 1, 1, 10180.73, 2583.701, 1364.723, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1658) +(@OGUID+45, 180765, 1, 1, 1, 10185.8, 2575.52, 1366.34, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180765 (Area: 1658) +(@OGUID+46, 180878, 1, 1, 1, 10147.58, 2574.047, 1320.637, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+47, 180878, 1, 1, 1, 10145.04, 2573.837, 1321.027, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+48, 180878, 1, 1, 1, 10146.93, 2572.094, 1320.741, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+49, 180878, 1, 1, 1, 10147.89, 2574.833, 1320.575, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+50, 180878, 1, 1, 1, 10145.3, 2572.096, 1320.981, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+51, 180878, 1, 1, 1, 10144.76, 2572.774, 1321.074, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+52, 180878, 1, 1, 1, 10148.35, 2574.187, 1320.516, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 180878 (Area: 1659) +(@OGUID+53, 180879, 1, 1, 1, 10146.29, 2573.105, 1320.675, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 180879 (Area: 1659) +(@OGUID+54, 180777, 1, 1, 1, 10155.51, 2571.573, 1320.54, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 1659) +(@OGUID+55, 180777, 1, 1, 1, 10146.33, 2574.491, 1320.823, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 1659) +(@OGUID+56, 180777, 1, 1, 1, 10148.78, 2592.293, 1330.527, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 1659) +(@OGUID+57, 180777, 1, 1, 1, 10155.43, 2593.67, 1330.43, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 1659) +(@OGUID+58, 180881, 1, 1, 1, 10146.31, 2573.473, 1322.492, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 180881 (Area: 1659) +(@OGUID+59, 180882, 1, 1, 1, 10146.49, 2573.022, 1322.495, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 180882 (Area: 1659) +(@OGUID+60, 180883, 1, 1, 1, 10145.72, 2573.401, 1322.479, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 180883 (Area: 1659) +(@OGUID+61, 180883, 1, 1, 1, 10145.87, 2572.747, 1322.489, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 180883 (Area: 1659) +(@OGUID+62, 180868, 1, 1, 1, 10148.56, 2596.947, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 1659) +(@OGUID+63, 180868, 1, 1, 1, 10154.36, 2598.172, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 1658) +(@OGUID+64, 180868, 1, 1, 1, 10152.6, 2607.9, 1330.82, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 1658) +(@OGUID+65, 180868, 1, 1, 1, 10145.24, 2600.956, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 1658) +(@OGUID+66, 180868, 1, 1, 1, 10146.67, 2607.012, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 1658) +(@OGUID+67, 180868, 1, 1, 1, 10156.24, 2603.661, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 1658) +(@OGUID+68, 180869, 1, 1, 1, 10147.5, 2600.15, 1330.82, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 180869 (Area: 1658) +(@OGUID+69, 180869, 1, 1, 1, 10153.85, 2601.112, 1330.823, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 180869 (Area: 1658) +(@OGUID+70, 180884, 0, 1, 1, -4643.956, -952.7753, 501.6609, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180884 (Area: 4679) -- ironforge +(@OGUID+71, 180777, 0, 1, 1, -4657.851, -970.8358, 502.1435, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 4679) +(@OGUID+72, 180777, 0, 1, 1, -4647.056, -954.0901, 502.1464, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 4679) +(@OGUID+73, 180777, 0, 1, 1, -4657.756, -940.899, 502.1457, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 4679) +(@OGUID+74, 180777, 0, 1, 1, -4676.447, -948.0982, 502.145, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 180777 (Area: 4679) +(@OGUID+75, 180880, 0, 1, 1, -4643.901, -952.4222, 502.6053, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 180880 (Area: 4679) +(@OGUID+76, 180880, 0, 1, 1, -4644.116, -952.0615, 502.6122, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 180880 (Area: 4679) +(@OGUID+77, 180881, 0, 1, 1, -4644.559, -952.6501, 502.5913, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180881 (Area: 4679) +(@OGUID+78, 180881, 0, 1, 1, -4644.697, -951.6542, 502.5873, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 180881 (Area: 4679) +(@OGUID+79, 180882, 0, 1, 1, -4643.973, -951.5918, 502.5915, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 180882 (Area: 4679) +(@OGUID+80, 180882, 0, 1, 1, -4643.597, -952.0538, 502.5845, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 180882 (Area: 4679) +(@OGUID+81, 180883, 0, 1, 1, -4643.862, -952.8162, 502.5914, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180883 (Area: 4679) +(@OGUID+82, 180883, 0, 1, 1, -4644.573, -952.2311, 502.5913, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 180883 (Area: 4679) +(@OGUID+83, 180868, 530, 1, 1, -4014.642, -11845.6, 0.088204, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 0) -- more exodar +(@OGUID+84, 180868, 530, 1, 1, -4020.391, -11845.43, 0.025103, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 0) +(@OGUID+85, 180868, 530, 1, 1, -4014.579, -11842.59, 0.096342, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 0) +(@OGUID+86, 180868, 530, 1, 1, -4014.198, -11835.3, 0.118586, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 0) +(@OGUID+87, 180868, 530, 1, 1, -4021.152, -11835.28, 0.0539, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 0) +(@OGUID+88, 180868, 530, 1, 1, -4020.445, -11842.34, 0.032153, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 180868 (Area: 0) +(@OGUID+89, 180868, 530, 1, 1, -4017.739, -11832.38, 0.104225, 4.729844, 0, 0, 0, 1, 120, 255, 1); -- 180868 (Area: 0) + +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+89 AND `eventEntry`=@Event; +INSERT INTO `game_event_gameobject` SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+89; + +-- Add missing lunar spawns +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+11; +INSERT INTO `creature` (`guid`, `id`, `map`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `curhealth`) VALUES +(@CGUID+0, 15892, 530, -4014.533, -11839.5, 0.1878313, 2.617994, 120, 0), -- 15892 (Area: 0) +(@CGUID+1, 15892, 530, -4017.631, -11834.3, 0.1710953, 4.747295, 120, 0), -- 15892 (Area: 0) +(@CGUID+2, 15892, 530, -4020.615, -11839.4, 0.1208633, 0.4712389, 120, 0), -- 15892 (Area: 0) +(@CGUID+3, 15892, 1, 10146.8, 2603.15, 1330.903, 6.021386, 120, 0), -- 15892 (Area: 1658) +(@CGUID+4, 15892, 1, 10151.3, 2598.93, 1330.903, 1.780236, 120, 0), -- 15892 (Area: 1658) +(@CGUID+5, 15892, 1, 10153.2, 2604.51, 1330.903, 3.961897, 120, 0), -- 15892 (Area: 1658) +(@CGUID+6, 15898, 530, -4020.056, -11848.42, 0.1050933, 4.677482, 120, 0), -- 15898 (Area: 0) (Auras: ) +(@CGUID+7, 15898, 1, 10148.03, 2572.627, 1320.697, 4.18879, 120, 0), -- 15898 (Area: 1659) (Auras: ) +(@CGUID+8, 15895, 530, -4014.714, -11848.54, 0.1634673, 4.799655, 120, 0), -- 15895 (Area: 0) (Auras: ) +(@CGUID+9, 15895, 1, 10153.6, 2593.45, 1330.843, 4.799655, 120, 0), -- 15895 (Area: 1659) (Auras: ) +(@CGUID+10, 15897, 530, -4017.511, -11837.73, 0.1593063, 4.39823, 120, 0), -- 15897 (Area: 0) (Auras: 25824 - 25824) +(@CGUID+11, 15897, 1, 10150.53, 2602.14, 1330.906, 1.570796, 120, 0); -- 15897 (Area: 1658) (Auras: 25824 - 25824) + +DELETE FROM `game_event_creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+11 AND `eventEntry`=@Event; +INSERT INTO `game_event_creature` SELECT @Event, creature.guid FROM `creature` WHERE creature.guid BETWEEN @CGUID+0 AND @CGUID+11; From dab661c8dad6016f98a0e7c190a00eae49bc58b5 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 23 Feb 2016 18:59:11 +0000 Subject: [PATCH 18/93] DB/Text: More texts More event texts --- sql/updates/world/2016_02_23_02_world.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2016_02_23_02_world.sql diff --git a/sql/updates/world/2016_02_23_02_world.sql b/sql/updates/world/2016_02_23_02_world.sql new file mode 100644 index 00000000000..9e2c550dd65 --- /dev/null +++ b/sql/updates/world/2016_02_23_02_world.sql @@ -0,0 +1,6 @@ +DELETE FROM `creature_text` WHERE `entry` IN(37671,38065) AND `id`>0; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(37671, 0, 1, 'Time is money, friend. Go go go!', 12, 0, 100, 1, 0, 0, 38022, 0, 'Crown Supply Guard'), +(38065, 0, 1, 'Time is money, friend. Go go go!', 12, 0, 100, 1, 0, 0, 38022, 0, 'Crown Supply Guard'), +(37671, 0, 2, 'The Lovely Merchant is waiting for that. Hurry it up!', 12, 0, 100, 1, 0, 0, 38023, 0, 'Crown Supply Guard'), +(38065, 0, 2, 'The Lovely Merchant is waiting for that. Hurry it up!', 12, 0, 100, 1, 0, 0, 38023, 0, 'Crown Supply Guard'); From 043ed7159ebe77f4756db9896a04419a8b96768a Mon Sep 17 00:00:00 2001 From: tkrokli Date: Wed, 24 Feb 2016 02:49:28 +0100 Subject: [PATCH 19/93] Core/Scripts: zone_terokkar_forest cleanup - moved spell, quest and gossip IDs into enum - replaced hardcoded text with DB gossip IDs - restored correct gossip option order for Skull Pile Replaces the crashed PR attempt in #16668 --- sql/updates/world/2016_02_29_29_world.sql | 5 + .../scripts/Outland/zone_terokkar_forest.cpp | 156 +++++++++++------- 2 files changed, 99 insertions(+), 62 deletions(-) create mode 100644 sql/updates/world/2016_02_29_29_world.sql diff --git a/sql/updates/world/2016_02_29_29_world.sql b/sql/updates/world/2016_02_29_29_world.sql new file mode 100644 index 00000000000..346c77bee43 --- /dev/null +++ b/sql/updates/world/2016_02_29_29_world.sql @@ -0,0 +1,5 @@ +-- Create gossip_menu_option 7731,7732 for NPC 18588 Floon in Terokkar Forest +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (7731,7732) AND `id` = 0; +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES +(7731,0,0,'He wants his "golds." Pay up or die... again...',15564,1,1,0,0,0,0,'',0), +(7732,0,0,"I have been sent by Sal'salabim to collect a debt that you owe. Pay up or I'm going to have to hurt you.",15560,1,1,0,0,0,0,'',0); diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 04ec1e4dc07..4b757544d65 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -46,13 +46,13 @@ EndContentData */ enum UnkorTheRuthless { - SAY_SUBMIT = 0, - - FACTION_HOSTILE = 45, - FACTION_FRIENDLY = 35, - QUEST_DONTKILLTHEFATONE = 9889, - - SPELL_PULVERIZE = 2676 + SAY_SUBMIT = 0, + REQUIRED_KILL_COUNT = 10, + FACTION_FRIENDLY = 35, + FACTION_HOSTILE = 45, + SPELL_PULVERIZE = 2676, + QUEST_DONTKILLTHEFATONE = 9889, + NPC_BOULDERFIST_INVADER = 18260 }; class npc_unkor_the_ruthless : public CreatureScript @@ -116,7 +116,7 @@ public: Player* groupie = itr->GetSource(); if (groupie && groupie->GetQuestStatus(QUEST_DONTKILLTHEFATONE) == QUEST_STATUS_INCOMPLETE && - groupie->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, 18260) == 10) + groupie->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, NPC_BOULDERFIST_INVADER) == REQUIRED_KILL_COUNT) { groupie->AreaExploredOrEventHappens(QUEST_DONTKILLTHEFATONE); if (!CanDoQuest) @@ -125,7 +125,7 @@ public: } } else if (player->GetQuestStatus(QUEST_DONTKILLTHEFATONE) == QUEST_STATUS_INCOMPLETE && - player->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, 18260) == 10) + player->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, NPC_BOULDERFIST_INVADER) == REQUIRED_KILL_COUNT) { player->AreaExploredOrEventHappens(QUEST_DONTKILLTHEFATONE); CanDoQuest = true; @@ -170,6 +170,11 @@ public: ## npc_infested_root_walker ######*/ +enum InfestedRootWalker +{ + SPELL_SUMMON_WOOD_MITES = 39130 +}; + class npc_infested_root_walker : public CreatureScript { public: @@ -193,7 +198,7 @@ public: if (me->GetHealth() <= damage) if (rand32() % 100 < 75) //Summon Wood Mites - DoCast(me, 39130, true); + DoCast(me, SPELL_SUMMON_WOOD_MITES, true); } }; }; @@ -201,6 +206,12 @@ public: /*###### ## npc_skywing ######*/ + +enum Skywing +{ + QUEST_SKYWING = 10898 +}; + class npc_skywing : public CreatureScript { public: @@ -225,7 +236,7 @@ public: switch (waypointId) { case 8: - player->AreaExploredOrEventHappens(10898); + player->AreaExploredOrEventHappens(QUEST_SKYWING); break; } } @@ -239,7 +250,7 @@ public: return; Player* player = who->ToPlayer(); - if (player && player->GetQuestStatus(10898) == QUEST_STATUS_INCOMPLETE) + if (player && player->GetQuestStatus(QUEST_SKYWING) == QUEST_STATUS_INCOMPLETE) if (me->IsWithinDistInMap(who, 10.0f)) Start(false, false, who->GetGUID()); } @@ -257,6 +268,11 @@ public: ## npc_rotting_forest_rager ######*/ +enum RottingForestRager +{ + SPELL_SUMMON_LOTS_OF_WOOD_MITES = 39134 +}; + class npc_rotting_forest_rager : public CreatureScript { public: @@ -279,8 +295,8 @@ public: if (done_by->GetTypeId() == TYPEID_PLAYER) if (me->GetHealth() <= damage) if (rand32() % 100 < 75) - //Summon Lots of Wood Mights - DoCast(me, 39134, true); + //Summon Lots of Wood Mites + DoCast(me, SPELL_SUMMON_LOTS_OF_WOOD_MITES, true); } }; }; @@ -289,19 +305,22 @@ public: ## npc_floon ######*/ -#define GOSSIP_FLOON1 "You owe Sim'salabim money. Hand them over or die!" -#define GOSSIP_FLOON2 "Hand over the money or die...again!" - enum Floon { - SAY_FLOON_ATTACK = 0, + SAY_FLOON_ATTACK = 0, + OPTION_ID_PAY_UP_OR_DIE = 0, + OPTION_ID_COLLECT_A_DEBT = 0, + FACTION_HOSTILE_FLOON = 1738, + MENU_ID_PAY_UP_OR_DIE = 7731, + MENU_ID_COLLECT_A_DEBT = 7732, + GOSSIP_FLOON_STRANGE_SOUNDS = 9442, + GOSSIP_HE_ALREADY_KILLED_ME = 9443, - SPELL_SILENCE = 6726, - SPELL_FROSTBOLT = 9672, - SPELL_FROST_NOVA = 11831, + SPELL_SILENCE = 6726, + SPELL_FROSTBOLT = 9672, + SPELL_FROST_NOVA = 11831, - FACTION_HOSTILE_FL = 1738, - QUEST_CRACK_SKULLS = 10009 + QUEST_CRACKIN_SOME_SKULLS = 10009 }; class npc_floon : public CreatureScript @@ -314,13 +333,13 @@ public: player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF) { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FLOON2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(9443, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(MENU_ID_PAY_UP_OR_DIE, OPTION_ID_PAY_UP_OR_DIE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + player->SEND_GOSSIP_MENU(GOSSIP_HE_ALREADY_KILLED_ME, creature->GetGUID()); } if (action == GOSSIP_ACTION_INFO_DEF+1) { player->CLOSE_GOSSIP_MENU(); - creature->setFaction(FACTION_HOSTILE_FL); + creature->setFaction(FACTION_HOSTILE_FLOON); creature->AI()->Talk(SAY_FLOON_ATTACK, player); creature->AI()->AttackStart(player); } @@ -329,10 +348,10 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FLOON1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); + if (player->GetQuestStatus(QUEST_CRACKIN_SOME_SKULLS) == QUEST_STATUS_INCOMPLETE) + player->ADD_GOSSIP_ITEM_DB(MENU_ID_COLLECT_A_DEBT, OPTION_ID_COLLECT_A_DEBT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - player->SEND_GOSSIP_MENU(9442, creature->GetGUID()); + player->SEND_GOSSIP_MENU(GOSSIP_FLOON_STRANGE_SOUNDS, creature->GetGUID()); return true; } @@ -403,15 +422,16 @@ public: ######*/ enum IslaStarmaneData { - SAY_PROGRESS_1 = 0, - SAY_PROGRESS_2 = 1, - SAY_PROGRESS_3 = 2, - SAY_PROGRESS_4 = 3, - - QUEST_EFTW_H = 10052, - QUEST_EFTW_A = 10051, - GO_CAGE = 182794, - SPELL_CAT = 32447, + SAY_PROGRESS_1 = 0, + SAY_PROGRESS_2 = 1, + SAY_PROGRESS_3 = 2, + SAY_PROGRESS_4 = 3, + GO_DISTANCE = 10, + FACTION_ESCORTEE = 113, + ESCAPE_FROM_FIREWING_POINT_A = 10051, + ESCAPE_FROM_FIREWING_POINT_H = 10052, + SPELL_TRAVEL_FORM_CAT = 32447, + GO_CAGE = 182794 }; class npc_isla_starmane : public CreatureScript @@ -432,7 +452,7 @@ public: switch (waypointId) { case 0: - if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 10)) + if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, GO_DISTANCE)) Cage->SetGoState(GO_STATE_ACTIVE); break; case 2: @@ -447,16 +467,16 @@ public: case 29: Talk(SAY_PROGRESS_4, player); if (player->GetTeam() == ALLIANCE) - player->GroupEventHappens(QUEST_EFTW_A, me); + player->GroupEventHappens(ESCAPE_FROM_FIREWING_POINT_A, me); else if (player->GetTeam() == HORDE) - player->GroupEventHappens(QUEST_EFTW_H, me); + player->GroupEventHappens(ESCAPE_FROM_FIREWING_POINT_H, me); me->SetInFront(player); break; case 30: me->HandleEmoteCommand(EMOTE_ONESHOT_WAVE); break; case 31: - DoCast(me, SPELL_CAT); + DoCast(me, SPELL_TRAVEL_FORM_CAT); me->SetWalk(false); break; } @@ -472,19 +492,19 @@ public: if (Player* player = GetPlayerForEscort()) { if (player->GetTeam() == ALLIANCE) - player->FailQuest(QUEST_EFTW_A); + player->FailQuest(ESCAPE_FROM_FIREWING_POINT_A); else if (player->GetTeam() == HORDE) - player->FailQuest(QUEST_EFTW_H); + player->FailQuest(ESCAPE_FROM_FIREWING_POINT_H); } } }; bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override { - if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A) + if (quest->GetQuestId() == ESCAPE_FROM_FIREWING_POINT_H || quest->GetQuestId() == ESCAPE_FROM_FIREWING_POINT_A) { ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); - creature->setFaction(113); + creature->setFaction(FACTION_ESCORTEE); } return true; } @@ -498,10 +518,20 @@ public: /*###### ## go_skull_pile ######*/ -#define GOSSIP_S_DARKSCREECHER_AKKARAI "Summon Darkscreecher Akkarai" -#define GOSSIP_S_KARROG "Summon Karrog" -#define GOSSIP_S_GEZZARAK_THE_HUNTRESS "Summon Gezzarak the Huntress" -#define GOSSIP_S_VAKKIZ_THE_WINDRAGER "Summon Vakkiz the Windrager" + +enum SkullPile +{ + OPTION_ID_GEZZARAK_THE_HUNTRESS = 0, + OPTION_ID_DARKSCREECHER_AKKARAI = 1, + OPTION_ID_KARROG = 2, + OPTION_ID_VAKKIZ_THE_WINDRAGER = 3, + GOSSIP_MENU_ID_SKULL_PILE = 8660, + ADVERSARIAL_BLOOD = 11885, + SUMMON_GEZZARAK_THE_HUNTRESS = 40632, + SUMMON_KARROG = 40640, + SUMMON_DARKSCREECHER_AKKARAI = 40642, + SUMMON_VAKKIZ_THE_WINDRAGER = 40644 +}; class go_skull_pile : public GameObjectScript { @@ -520,12 +550,12 @@ public: bool OnGossipHello(Player* player, GameObject* go) override { - if ((player->GetQuestStatus(11885) == QUEST_STATUS_INCOMPLETE) || player->GetQuestRewardStatus(11885)) + if ((player->GetQuestStatus(ADVERSARIAL_BLOOD) == QUEST_STATUS_INCOMPLETE) || player->GetQuestRewardStatus(ADVERSARIAL_BLOOD)) { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_S_DARKSCREECHER_AKKARAI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_S_KARROG, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_S_GEZZARAK_THE_HUNTRESS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_S_VAKKIZ_THE_WINDRAGER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_GEZZARAK_THE_HUNTRESS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_DARKSCREECHER_AKKARAI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_KARROG, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + player->ADD_GOSSIP_ITEM_DB(GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_VAKKIZ_THE_WINDRAGER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); } player->SEND_GOSSIP_MENU(go->GetGOInfo()->questgiver.gossipID, go->GetGUID()); @@ -537,16 +567,16 @@ public: switch (action) { case GOSSIP_ACTION_INFO_DEF + 1: - player->CastSpell(player, 40642, false); + player->CastSpell(player, SUMMON_GEZZARAK_THE_HUNTRESS, false); break; case GOSSIP_ACTION_INFO_DEF + 2: - player->CastSpell(player, 40640, false); + player->CastSpell(player, SUMMON_DARKSCREECHER_AKKARAI, false); break; case GOSSIP_ACTION_INFO_DEF + 3: - player->CastSpell(player, 40632, false); + player->CastSpell(player, SUMMON_KARROG, false); break; case GOSSIP_ACTION_INFO_DEF + 4: - player->CastSpell(player, 40644, false); + player->CastSpell(player, SUMMON_VAKKIZ_THE_WINDRAGER, false); break; } } @@ -558,7 +588,9 @@ public: enum Slim { - FACTION_CONSORTIUM = 933 + FACTION_CONSORTIUM = 933, + NPC_TEXT_NEITHER_SLIM_NOR_SHADY = 9895, + NPC_TEXT_I_SEE_YOU_ARE_A_FRIEND = 9896 }; class npc_slim : public CreatureScript @@ -580,10 +612,10 @@ public: if (creature->IsVendor() && player->GetReputationRank(FACTION_CONSORTIUM) >= REP_FRIENDLY) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - player->SEND_GOSSIP_MENU(9896, creature->GetGUID()); + player->SEND_GOSSIP_MENU(NPC_TEXT_I_SEE_YOU_ARE_A_FRIEND, creature->GetGUID()); } else - player->SEND_GOSSIP_MENU(9895, creature->GetGUID()); + player->SEND_GOSSIP_MENU(NPC_TEXT_NEITHER_SLIM_NOR_SHADY, creature->GetGUID()); return true; } From 1fbe7979fff0e67c6d390113f8e4a1099db8193d Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 24 Feb 2016 15:47:57 +0100 Subject: [PATCH 20/93] Nobody saw that. --- src/server/game/AI/PlayerAI/PlayerAI.cpp | 2 -- .../FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp | 4 ++-- src/server/scripts/Spells/spell_dk.cpp | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index 65e60be8eee..9d1e65701bc 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -119,8 +119,6 @@ void PlayerAI::DoRangedAttackIfReady() } } - std::cout << "Selected " << rangedAttackSpell << std::endl; - if (!rangedAttackSpell) return; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index dd3ed10f96f..5410f403ab9 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -442,7 +442,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader Player* pTarget = GetTarget()->ToPlayer(); oldAI = pTarget->AI(); oldAIState = pTarget->IsAIEnabled; - GetTarget()->SetAI(static_cast(new player_overlord_brandAI(pTarget, GetCasterGUID()))); + GetTarget()->SetAI(new player_overlord_brandAI(pTarget, GetCasterGUID())); GetTarget()->IsAIEnabled = true; } @@ -453,7 +453,7 @@ class spell_tyrannus_overlord_brand : public SpellScriptLoader GetTarget()->IsAIEnabled = oldAIState; PlayerAI* thisAI = GetTarget()->ToPlayer()->AI(); - GetTarget()->SetAI(static_cast(oldAI)); + GetTarget()->SetAI(oldAI); delete thisAI; } diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index f1ad785c13d..7c2bb0bfaa5 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -1911,7 +1911,7 @@ public: oldAI = player->AI(); oldAIState = player->IsAIEnabled; - player->SetAI(static_cast(new player_ghoulAI(player, player->GetGhoulResurrectGhoulGUID()))); + player->SetAI(new player_ghoulAI(player, player->GetGhoulResurrectGhoulGUID())); player->IsAIEnabled = true; } @@ -1923,7 +1923,7 @@ public: player->IsAIEnabled = oldAIState; PlayerAI* thisAI = player->AI(); - player->SetAI(static_cast(oldAI)); + player->SetAI(oldAI); delete thisAI; // Dismiss ghoul if necessary From 5a3a21c2d02a2e3527ef61641c62d6ad6a44926b Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 24 Feb 2016 18:21:08 +0100 Subject: [PATCH 21/93] Core/PlayerAI: More follow-up. Helper functions and some internal cleanup. --- src/server/game/AI/PlayerAI/PlayerAI.cpp | 86 ++++++++++++++---------- src/server/game/AI/PlayerAI/PlayerAI.h | 14 ++-- 2 files changed, 61 insertions(+), 39 deletions(-) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index 9d1e65701bc..1809f02f4fe 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -27,62 +27,78 @@ enum Spells SPELL_THROW = 2764, SPELL_SHOOT_WAND = 5019, + /* Paladin */ + PASSIVE_ILLUMINATION = 20215, + /* Priest */ + SPELL_SOUL_WARDING = 63574, + SPELL_SPIRIT_REDEMPTION = 20711, SPELL_SHADOWFORM = 15473, /* Shaman */ + SPELL_TIDAL_FORCE = 582, + SPELL_MANA_TIDE_TOTEM = 590, + SPELL_SHA_NATURE_SWIFT = 591, SPELL_STORMSTRIKE = 17364, /* Druid */ - SPELL_MOONKIN_FORM = 24858 + SPELL_MOONKIN_FORM = 24858, + SPELL_SWIFTMEND = 18562, + SPELL_DRU_NATURE_SWIFT = 17116, + SPELL_TREE_OF_LIFE = 33891 }; -PlayerAI::PlayerAI(Player* player) : UnitAI(static_cast(player)), me(player), _isRangedAttacker(false) + +bool PlayerAI::IsPlayerHealer(Player const* who) { - switch (me->getClass()) + switch (who->getClass()) { case CLASS_WARRIOR: - _isRangedAttacker = false; - break; + case CLASS_HUNTER: + case CLASS_ROGUE: + case CLASS_DEATH_KNIGHT: + case CLASS_MAGE: + case CLASS_WARLOCK: + default: + return false; case CLASS_PALADIN: - _isRangedAttacker = false; - break; + return who->HasSpell(PASSIVE_ILLUMINATION); + case CLASS_PRIEST: + return who->HasSpell(SPELL_SOUL_WARDING) || who->HasSpell(SPELL_SPIRIT_REDEMPTION); + case CLASS_SHAMAN: + return who->HasSpell(SPELL_MANA_TIDE_TOTEM) || who->HasSpell(SPELL_SHA_NATURE_SWIFT) || who->HasSpell(SPELL_TIDAL_FORCE); + case CLASS_DRUID: + return who->HasSpell(SPELL_SWIFTMEND) || who->HasSpell(SPELL_DRU_NATURE_SWIFT) || who->HasSpell(SPELL_TREE_OF_LIFE); + } +} + +bool PlayerAI::IsPlayerRangedAttacker(Player const* who) +{ + switch (who->getClass()) + { + case CLASS_WARRIOR: + case CLASS_PALADIN: + case CLASS_ROGUE: + case CLASS_DEATH_KNIGHT: + default: + return false; + case CLASS_MAGE: + case CLASS_WARLOCK: + return true; case CLASS_HUNTER: { // check if we have a ranged weapon equipped - Item const* rangedSlot = me->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED); + Item const* rangedSlot = who->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED); if (ItemTemplate const* rangedTemplate = rangedSlot ? rangedSlot->GetTemplate() : nullptr) if ((1 << rangedTemplate->SubClass) & ITEM_SUBCLASS_MASK_WEAPON_RANGED) - { - _isRangedAttacker = true; - break; - } - _isRangedAttacker = false; - break; + return true; + return false; } - case CLASS_ROGUE: - _isRangedAttacker = false; - break; case CLASS_PRIEST: - _isRangedAttacker = me->HasSpell(SPELL_SHADOWFORM); - break; - case CLASS_DEATH_KNIGHT: - _isRangedAttacker = false; - break; + return who->HasSpell(SPELL_SHADOWFORM); case CLASS_SHAMAN: - _isRangedAttacker = !me->HasSpell(SPELL_STORMSTRIKE); - break; - case CLASS_MAGE: - _isRangedAttacker = true; - break; - case CLASS_WARLOCK: - _isRangedAttacker = true; - break; + return !who->HasSpell(SPELL_STORMSTRIKE); case CLASS_DRUID: - _isRangedAttacker = me->HasAura(SPELL_MOONKIN_FORM); - break; - default: - TC_LOG_WARN("entities.unit", "Possessed player %s (possessed by %s) does not have any recognized class (class = %u).", me->GetGUID().ToString().c_str(), me->GetCharmerGUID().ToString().c_str(), me->getClass()); - break; + return who->HasSpell(SPELL_MOONKIN_FORM); } } diff --git a/src/server/game/AI/PlayerAI/PlayerAI.h b/src/server/game/AI/PlayerAI/PlayerAI.h index 39b04a70d67..dcc35bce934 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.h +++ b/src/server/game/AI/PlayerAI/PlayerAI.h @@ -25,20 +25,26 @@ class PlayerAI : public UnitAI { public: - explicit PlayerAI(Player* player); + explicit PlayerAI(Player* player) : UnitAI(static_cast(player)), me(player), _isSelfHealer(PlayerAI::IsPlayerHealer(player)), _isSelfRangedAttacker(PlayerAI::IsPlayerRangedAttacker(player)) { } void OnCharmed(bool /*apply*/) override { } // charm AI application for players is handled by Unit::SetCharmedBy / Unit::RemoveCharmedBy + + // helper functions to determine player info + static bool IsPlayerHealer(Player const* who); + bool IsHealer(Player const* who = nullptr) const { return (!who || who == me) ? _isSelfHealer : IsPlayerHealer(who); } + static bool IsPlayerRangedAttacker(Player const* who); + bool IsRangedAttacker(Player const* who = nullptr) const { return (!who || who == me) ? _isSelfRangedAttacker : IsPlayerRangedAttacker(who); } protected: Player* const me; - void SetIsRangedAttacker(bool state) { _isRangedAttacker = state; } - bool IsRangedAttacker() const { return _isRangedAttacker; } + void SetIsRangedAttacker(bool state) { _isSelfRangedAttacker = state; } // this allows overriding of the default ranged attacker detection void DoRangedAttackIfReady(); void DoAutoAttackIfReady(); private: - bool _isRangedAttacker; + bool _isSelfHealer; + bool _isSelfRangedAttacker; }; class SimpleCharmedPlayerAI : public PlayerAI From a8f760b69213514f16f24f7af85449c5929f2032 Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 24 Feb 2016 19:35:19 +0100 Subject: [PATCH 22/93] Core/PlayerAI: Some more helper methods added. Also, charmed players no longer break crowd control. --- src/server/game/AI/PlayerAI/PlayerAI.cpp | 25 +++++++++++++++++++----- src/server/game/AI/PlayerAI/PlayerAI.h | 2 ++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index 1809f02f4fe..1b99d0956f2 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -150,9 +150,23 @@ void PlayerAI::DoAutoAttackIfReady() DoMeleeAttackIfReady(); } +struct UncontrolledTargetSelectPredicate : public std::unary_function +{ + bool operator()(Unit const* target) const + { + return !target->HasBreakableByDamageCrowdControlAura(); + } +}; +Unit* SimpleCharmedPlayerAI::SelectAttackTarget() const +{ + if (Unit* charmer = me->GetCharmer()) + return charmer->IsAIEnabled ? charmer->GetAI()->SelectTarget(SELECT_TARGET_RANDOM, 0, UncontrolledTargetSelectPredicate()) : charmer->GetVictim(); + return nullptr; +} + void SimpleCharmedPlayerAI::UpdateAI(const uint32 /*diff*/) { - Creature* charmer = me->GetCharmer()->ToCreature(); + Creature* charmer = me->GetCharmer() ? me->GetCharmer()->ToCreature() : nullptr; //kill self if charm aura has infinite duration if (charmer->IsInEvadeMode()) @@ -169,9 +183,9 @@ void SimpleCharmedPlayerAI::UpdateAI(const uint32 /*diff*/) if (charmer->IsInCombat()) { Unit* target = me->GetVictim(); - if (!target || !charmer->IsValidAttackTarget(target)) + if (!target || !charmer->IsValidAttackTarget(target) || target->HasBreakableByDamageCrowdControlAura()) { - target = charmer->SelectNearestTarget(); + target = SelectAttackTarget(); if (!target) return; @@ -180,15 +194,16 @@ void SimpleCharmedPlayerAI::UpdateAI(const uint32 /*diff*/) else AttackStart(target); } + DoAutoAttackIfReady(); } else { me->AttackStop(); me->CastStop(); + me->StopMoving(); + me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); } - - DoAutoAttackIfReady(); } void SimpleCharmedPlayerAI::OnCharmed(bool apply) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.h b/src/server/game/AI/PlayerAI/PlayerAI.h index dcc35bce934..0ecc51ef894 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.h +++ b/src/server/game/AI/PlayerAI/PlayerAI.h @@ -39,6 +39,7 @@ class PlayerAI : public UnitAI Player* const me; void SetIsRangedAttacker(bool state) { _isSelfRangedAttacker = state; } // this allows overriding of the default ranged attacker detection + virtual Unit* SelectAttackTarget() const { return me->GetCharmer() ? me->GetCharmer()->GetVictim() : nullptr; } void DoRangedAttackIfReady(); void DoAutoAttackIfReady(); @@ -53,6 +54,7 @@ class SimpleCharmedPlayerAI : public PlayerAI SimpleCharmedPlayerAI(Player* player) : PlayerAI(player) { } void UpdateAI(uint32 diff) override; void OnCharmed(bool apply) override; + Unit* SelectAttackTarget() const; }; #endif From d10c698430af0380bffe2c2e050db2ee741ec96d Mon Sep 17 00:00:00 2001 From: treeston Date: Wed, 24 Feb 2016 19:38:14 +0100 Subject: [PATCH 23/93] build fix --- src/server/game/AI/PlayerAI/PlayerAI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.h b/src/server/game/AI/PlayerAI/PlayerAI.h index 0ecc51ef894..ebebf17c22f 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.h +++ b/src/server/game/AI/PlayerAI/PlayerAI.h @@ -54,7 +54,7 @@ class SimpleCharmedPlayerAI : public PlayerAI SimpleCharmedPlayerAI(Player* player) : PlayerAI(player) { } void UpdateAI(uint32 diff) override; void OnCharmed(bool apply) override; - Unit* SelectAttackTarget() const; + Unit* SelectAttackTarget() const override; }; #endif From 0cdea4889188e8b6823f5f1b3fe2f8914a1e9de5 Mon Sep 17 00:00:00 2001 From: Kittnz Date: Wed, 24 Feb 2016 20:52:54 +0100 Subject: [PATCH 24/93] DB/Event: Add missing objects for Love is in the Air world event - In following zones Exodar, Darnassus, Iron Forge, Stormwind, Moonglade, Outlands(includes Shattrath), Northrend (includes Dalaran) (1941 objects in total are added). - Also corrected some npc spawns & objects --- sql/updates/world/2016_02_24_00_world.sql | 1966 +++++++++++++++++++++ 1 file changed, 1966 insertions(+) create mode 100644 sql/updates/world/2016_02_24_00_world.sql diff --git a/sql/updates/world/2016_02_24_00_world.sql b/sql/updates/world/2016_02_24_00_world.sql new file mode 100644 index 00000000000..06c7c29bd72 --- /dev/null +++ b/sql/updates/world/2016_02_24_00_world.sql @@ -0,0 +1,1966 @@ +SET @OGUID:=83038; +SET @Event:=8; + +-- Add missing love is in the air objects +DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1941; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0 , 187575, 571, 1, 1, 5820.163, 557.1407, 653.0472, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4395) +(@OGUID+1 , 187575, 571, 1, 1, 5813.242, 555.0104, 653.1141, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4395) +(@OGUID+2 , 187575, 571, 1, 1, 5828.393, 518.7396, 659.42, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4395) +(@OGUID+3 , 187575, 571, 1, 1, 5619.527, 688.4839, 653.2624, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4568) +(@OGUID+4 , 187575, 571, 1, 1, 5622.715, 695.6467, 653.2054, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4568) +(@OGUID+5 , 187575, 571, 1, 1, 5625.892, 702.7949, 653.3616, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4568) +(@OGUID+6 , 187575, 571, 1, 1, 5982.965, 599.3807, 651.8081, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4618) +(@OGUID+7 , 187575, 571, 1, 1, 5988.552, 613.9961, 651.6794, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4618) +(@OGUID+8 , 187575, 571, 1, 1, 5985.754, 606.6982, 651.8865, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4618) +(@OGUID+9 , 187575, 571, 1, 1, 6193.209, -1053.005, 410.5604, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+10 , 187575, 571, 1, 1, 6111.217, -1074.599, 407.2788, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+11 , 187575, 571, 1, 1, 6122.76, -1081.095, 406.5847, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+12 , 187575, 571, 1, 1, 6139.989, -1079.811, 405.7787, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+13 , 187575, 571, 1, 1, 6122.866, -1073.905, 407.455, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+14 , 187575, 571, 1, 1, 6133.952, -1074.677, 406.6819, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+15 , 187575, 571, 1, 1, 6105.763, -1080.907, 407.3781, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+16 , 187575, 571, 1, 1, 6121.725, -1096.696, 406.5187, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4419) +(@OGUID+17 , 187575, 571, 1, 1, 5141.983, -2154.615, 244.3087, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+18 , 187575, 571, 1, 1, 5179.932, -2192.024, 239.8268, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+19 , 187575, 571, 1, 1, 5193.838, -2203.542, 239.8356, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+20 , 187575, 571, 1, 1, 5111.679, -2201.835, 243.7792, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+21 , 187575, 571, 1, 1, 5196.897, -2215.816, 243.9398, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+22 , 187575, 571, 1, 1, 5526.034, -2669.764, 304.289, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4275) +(@OGUID+23 , 187575, 571, 1, 1, 5762.96, -3526.665, 391.1757, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4324) +(@OGUID+24 , 187575, 571, 1, 1, 5746.468, -3556.428, 390.0896, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4324) +(@OGUID+25 , 187575, 571, 1, 1, 5768.534, -3620.057, 389.5159, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4324) +(@OGUID+26 , 187575, 571, 1, 1, 5778.518, -3600.462, 387.3365, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4324) +(@OGUID+27 , 187575, 571, 1, 1, 4608.65, -4233.896, 181.3112, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+28 , 187575, 571, 1, 1, 4583.46, -4214.486, 178.712, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+29 , 187575, 571, 1, 1, 4588.769, -4259.397, 183.0127, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+30 , 187575, 571, 1, 1, 4545.505, -4198.653, 174.6676, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+31 , 187575, 571, 1, 1, 4516.881, -4237.698, 172.0961, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+32 , 187575, 571, 1, 1, 4525.026, -4220.745, 171.4343, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+33 , 187575, 571, 1, 1, 4524.598, -4165.28, 174.0965, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+34 , 187575, 571, 1, 1, 4530.678, -4141.924, 175.9093, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+35 , 187575, 571, 1, 1, 4456.922, -4314.456, 160.9202, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4159) +(@OGUID+36 , 187575, 571, 1, 1, 3876.39, -4523.813, 218.0925, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4205) +(@OGUID+37 , 187575, 571, 1, 1, 3454.602, -2802.049, 202.4846, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+38 , 187575, 571, 1, 1, 3259.021, -2267.587, 114.378, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4248) +(@OGUID+39 , 187575, 571, 1, 1, 3263.253, -2264.287, 115.0179, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4248) +(@OGUID+40 , 187575, 571, 1, 1, 1420.218, -3720.073, 139.7719, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+41 , 187575, 571, 1, 1, 737.0417, -2925.07, 7.038448, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3987) +(@OGUID+42 , 187575, 571, 1, 1, 737.8021, -2929.837, 6.96212, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3987) +(@OGUID+43 , 187575, 571, 1, 1, 789.0579, -2887.322, 6.061472, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3988) +(@OGUID+44 , 187575, 571, 1, 1, 2491.536, -5071.006, 298.8146, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4003) +(@OGUID+45 , 187575, 571, 1, 1, 2472.029, -5066.281, 286.0714, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4003) +(@OGUID+46 , 187575, 571, 1, 1, 2472.168, -5058.874, 292.4872, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4003) +(@OGUID+47 , 187575, 571, 1, 1, 2474.881, -5069.709, 286.0041, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4003) +(@OGUID+48 , 187575, 571, 1, 1, 2499.964, -5059.02, 286.9637, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4003) +(@OGUID+49 , 187575, 571, 1, 1, 2653.467, -4398.361, 284.5294, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+50 , 187575, 571, 1, 1, 2645.279, -4389.678, 283.9462, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+51 , 187575, 571, 1, 1, 3644.348, -723.9233, 218.8718, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4177) +(@OGUID+52 , 187575, 571, 1, 1, 3647.875, -707.9075, 217.1875, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4177) +(@OGUID+53 , 187575, 571, 1, 1, 3658.615, -719.4378, 218.7648, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4177) +(@OGUID+54 , 187575, 571, 1, 1, 3713.571, -686.2274, 216.503, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4177) +(@OGUID+55 , 187575, 571, 1, 1, 3720.316, -705.8351, 216.0074, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4177) +(@OGUID+56 , 187575, 571, 1, 1, 3827.11, 1482.655, 95.12893, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+57 , 187575, 571, 1, 1, 3859.411, 1466.078, 94.9991, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+58 , 187575, 571, 1, 1, 3825.417, 1465.946, 95.10252, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+59 , 187575, 571, 1, 1, 3842.333, 1481.939, 97.79363, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+60 , 187575, 571, 1, 1, 3857.466, 1482.773, 96.1758, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+61 , 187575, 571, 1, 1, 3827.736, 1496.177, 95.10645, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+62 , 187575, 571, 1, 1, 3857.144, 1496.144, 95.12449, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+63 , 187575, 571, 1, 1, 3770.23, 1602.427, 95.77409, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+64 , 187575, 571, 1, 1, 3781.036, 1623.459, 95.58131, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4165) +(@OGUID+65 , 187575, 571, 1, 1, 3553.18, 1827.47, 81.077, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+66 , 187575, 571, 1, 1, 3643.384, 1884.3, 80.81538, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+67 , 187575, 571, 1, 1, 2756.815, 926.7635, 23.2116, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+68 , 187575, 571, 1, 1, 2792.32, 944.9219, 23.26566, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+69 , 187575, 571, 1, 1, 2798.089, 941.0677, 24.67208, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+70 , 187575, 571, 1, 1, 2756.885, 920.0313, 24.40833, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+71 , 187575, 571, 1, 1, 2791.102, 904.5616, 23.04511, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+72 , 187575, 571, 1, 1, 2787.111, 910.8663, 32.01936, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+73 , 187575, 571, 1, 1, 2742.9, 887.7947, 6.358366, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+74 , 187575, 571, 1, 1, 2732.103, 881.1441, 6.379679, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+75 , 187575, 571, 1, 1, 2713.987, 894.1632, 16.31461, 2.059488, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4152) +(@OGUID+76 , 187575, 571, 1, 1, 4971.71, 1267.167, 228.3888, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4170) +(@OGUID+77 , 187575, 571, 1, 1, 4967.139, 1265.599, 227.7066, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4170) +(@OGUID+78 , 187575, 571, 1, 1, 4942.589, 1170.193, 239.8133, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4170) +(@OGUID+79 , 187575, 571, 1, 1, 4951.857, 1167.702, 240.1477, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4170) +(@OGUID+80 , 187575, 571, 1, 1, 4937.846, 1158.604, 240.5038, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4170) +(@OGUID+81 , 187575, 571, 1, 1, 5009.385, 1205.95, 231.4591, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4170) +(@OGUID+82 , 187575, 571, 1, 1, 3449.408, 4085.986, 17.83682, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4042) +(@OGUID+83 , 187575, 571, 1, 1, 2980.379, 4053.99, 28.38085, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4113) +(@OGUID+84 , 187575, 571, 1, 1, 3007.164, 4071.765, 35.89487, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4113) +(@OGUID+85 , 187575, 571, 1, 1, 3026.245, 4045.878, 28.50895, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4113) +(@OGUID+86 , 187575, 571, 1, 1, 2279.208, 5188.578, 16.22224, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+87 , 187575, 571, 1, 1, 2288.109, 5196.549, 14.44638, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+88 , 187575, 571, 1, 1, 2924.559, 6242.063, 209.8437, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4129) +(@OGUID+89 , 187575, 571, 1, 1, 2924.903, 6244.5, 210.3616, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4129) +(@OGUID+90 , 187575, 571, 1, 1, 4111.603, 5303.919, 31.3832, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+91 , 187575, 571, 1, 1, 4475.266, 5707.764, 82.36211, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+92 , 187575, 571, 1, 1, 4470.285, 5710.635, 82.27143, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+93 , 187575, 571, 1, 1, 5482.611, 4728.695, -191.6311, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4290) +(@OGUID+94 , 187575, 571, 1, 1, 8473.581, -342.7954, 906.4036, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4436) +(@OGUID+95 , 187575, 571, 1, 1, 8418.453, -349.0424, 909.3304, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4436) +(@OGUID+96 , 187575, 571, 1, 1, 8433.876, -362.944, 908.5649, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 4436) +(@OGUID+97 , 187575, 571, 1, 1, 7856.078, -735.8157, 1178.389, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+98 , 187575, 530, 1, 1, -2564.838, 4432.062, 39.61848, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3683) +(@OGUID+99 , 187575, 530, 1, 1, -2560.156, 4422.9, 40.24272, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3683) +(@OGUID+100 , 187575, 530, 1, 1, -2621.607, 4461.632, 39.31939, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3683) +(@OGUID+101 , 187575, 530, 1, 1, -2618.607, 4461.301, 39.33173, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3683) +(@OGUID+102 , 187575, 530, 1, 1, -2619.96, 4462.996, 39.3169, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3683) +(@OGUID+103 , 187575, 530, 1, 1, -2620.309, 4459.896, 39.31923, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3683) +(@OGUID+104 , 187575, 530, 1, 1, -3009.571, 3998.962, 5.706537, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3684) +(@OGUID+105 , 187575, 530, 1, 1, -2991.61, 3988.035, 5.85871, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3684) +(@OGUID+106 , 187575, 530, 1, 1, -3002.449, 3997.882, 5.743727, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3684) +(@OGUID+107 , 187575, 530, 1, 1, -3026.769, 2565.998, 80.07526, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3744) +(@OGUID+108 , 187575, 530, 1, 1, -3012.218, 2548.628, 79.43921, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3744) +(@OGUID+109 , 187575, 530, 1, 1, -2979.819, 2565.84, 79.82945, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3744) +(@OGUID+110 , 187575, 530, 1, 1, -2963.231, 2558.747, 80.31774, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3744) +(@OGUID+111 , 187575, 530, 1, 1, -3977.41, 2165.698, 106.9871, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3745) +(@OGUID+112 , 187575, 530, 1, 1, -4075.49, 2189.597, 111.462, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3745) +(@OGUID+113 , 187575, 530, 1, 1, -4069.704, 2183.112, 108.5346, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3745) +(@OGUID+114 , 187575, 530, 1, 1, -4064.588, 1124.245, 43.41816, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3929) +(@OGUID+115 , 187575, 530, 1, 1, -3061.328, 737.1945, -8.771701, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3754) +(@OGUID+116 , 187575, 530, 1, 1, -154.7856, 5523.646, 31.50904, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3565) +(@OGUID+117 , 187575, 530, 1, 1, -158.5099, 5535.154, 31.47245, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3565) +(@OGUID+118 , 187575, 530, 1, 1, 225.3918, 7813.881, 22.98265, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+119 , 187575, 530, 1, 1, 221.99, 7810.066, 23.68496, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+120 , 187575, 530, 1, 1, 332.2872, 7829.961, 39.40045, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3645) +(@OGUID+121 , 187575, 530, 1, 1, 241.3687, 7913.663, 27.14164, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3645) +(@OGUID+122 , 187575, 530, 1, 1, 342.1493, 7867.583, 45.30079, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3645) +(@OGUID+123 , 187575, 530, 1, 1, 233.8486, 7910.588, 27.21144, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3645) +(@OGUID+124 , 187575, 530, 1, 1, 1044.723, 7368.755, 43.1856, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3766) +(@OGUID+125 , 187575, 530, 1, 1, 1052.611, 7359.699, 42.62963, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3766) +(@OGUID+126 , 187575, 530, 1, 1, 1989.314, 6784.465, 167.9164, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3772) +(@OGUID+127 , 187575, 530, 1, 1, 2016.857, 6885.055, 182.8496, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3772) +(@OGUID+128 , 187575, 530, 1, 1, 2944.679, 5466.702, 150.6358, 0, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3951) +(@OGUID+129 , 187575, 530, 1, 1, 3013.267, 5429.971, 148.0764, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3951) +(@OGUID+130 , 187575, 530, 1, 1, 2165.546, 4727.486, 159.5631, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3844) +(@OGUID+131 , 187575, 530, 1, 1, 2188.357, 4795.172, 158.674, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3844) +(@OGUID+132 , 187575, 530, 1, 1, 2181.066, 4706.845, 159.5976, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3844) +(@OGUID+133 , 187575, 530, 1, 1, 2045.43, 4686.257, 153.306, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3844) +(@OGUID+134 , 187575, 530, 1, 1, 2032.304, 4663.961, 153.4191, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3844) +(@OGUID+135 , 187575, 0, 1, 1, -4630.104, -928.945, 506.1224, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 5344) +(@OGUID+136 , 187575, 530, 1, 1, -4227.08, -12484.05, 47.71632, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+137 , 187575, 530, 1, 1, -4231.724, -12498.08, 47.24671, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 0) +(@OGUID+138 , 187575, 530, 1, 1, -4207.997, -12557.59, 46.31153, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3576) +(@OGUID+139 , 187575, 530, 1, 1, -4183.172, -12564.08, 45.20827, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3576) +(@OGUID+140 , 187575, 530, 1, 1, -4107.671, -12483.03, 47.42568, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3576) +(@OGUID+141 , 187575, 530, 1, 1, -4105.227, -12501.2, 47.79556, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3576) +(@OGUID+142 , 187575, 530, 1, 1, -4122.453, -12463.12, 48.0975, 3.842447, 0, 0, 0, 1, 120, 255, 1), -- 187575 (Area: 3576) +(@OGUID+143 , 187668, 571, 1, 1, 5855.43, 634.2999, 649.2884, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4395) +(@OGUID+144 , 187668, 571, 1, 1, 5858.512, 638.0903, 649.1016, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4395) +(@OGUID+145 , 187668, 571, 1, 1, 5838.521, 520.3542, 659.7874, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4395) +(@OGUID+146 , 187668, 571, 1, 1, 5819.291, 514.2288, 659.8239, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4395) +(@OGUID+147 , 187668, 571, 1, 1, 5855.882, 661.2175, 649.2011, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4395) +(@OGUID+148 , 187668, 571, 1, 1, 5852.286, 664.1205, 649.1534, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4395) +(@OGUID+149 , 187668, 571, 1, 1, 5726.839, 678.6988, 648.3967, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4739) +(@OGUID+150 , 187668, 571, 1, 1, 5730.19, 682.8389, 648.4232, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4739) +(@OGUID+151 , 187668, 571, 1, 1, 5769.932, 711.6566, 619.6014, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4739) +(@OGUID+152 , 187668, 571, 1, 1, 5766.1, 706.9418, 619.6938, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4739) +(@OGUID+153 , 187668, 571, 1, 1, 5863.507, 473.3883, 642.9924, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4613) +(@OGUID+154 , 187668, 571, 1, 1, 5904.753, 489.8196, 643.4774, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4616) +(@OGUID+155 , 187668, 571, 1, 1, 5906.59, 480.6752, 643.4434, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4616) +(@OGUID+156 , 187668, 571, 1, 1, 5864.693, 467.3737, 643.1257, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4616) +(@OGUID+157 , 187668, 571, 1, 1, 6676.186, -199.1807, 956.5273, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4428) +(@OGUID+158 , 187668, 571, 1, 1, 6124.218, -1074.936, 405.0566, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4419) +(@OGUID+159 , 187668, 571, 1, 1, 6124.213, -1076.51, 404.6239, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4419) +(@OGUID+160 , 187668, 571, 1, 1, 6120.367, -1076.484, 404.6041, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4419) +(@OGUID+161 , 187668, 571, 1, 1, 6120.694, -1074.873, 405.0674, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4419) +(@OGUID+162 , 187668, 571, 1, 1, 5796.578, -3553.885, 388.331, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4323) +(@OGUID+163 , 187668, 571, 1, 1, 3416.354, -2799.535, 203.6574, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+164 , 187668, 571, 1, 1, 3404.744, -2783.643, 203.9436, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+165 , 187668, 571, 1, 1, 3421.742, -2795.542, 203.7708, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+166 , 187668, 571, 1, 1, 3410.07, -2779.702, 203.9763, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+167 , 187668, 571, 1, 1, 1454.493, -3273.58, 168.5273, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4071) +(@OGUID+168 , 187668, 571, 1, 1, 1427.002, -3268.351, 169.1821, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3998) +(@OGUID+169 , 187668, 571, 1, 1, 1431.483, -3274.533, 169.1915, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3998) +(@OGUID+170 , 187668, 571, 1, 1, 1438.028, -3267.566, 169.513, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3998) +(@OGUID+171 , 187668, 571, 1, 1, 1437.135, -3266.915, 169.5058, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3998) +(@OGUID+172 , 187668, 571, 1, 1, 1429.582, -3265.274, 169.2192, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3998) +(@OGUID+173 , 187668, 571, 1, 1, 1445.74, -3257.578, 169.2403, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3998) +(@OGUID+174 , 187668, 571, 1, 1, 440.0521, -4547.913, 248.6341, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3991) +(@OGUID+175 , 187668, 571, 1, 1, 441.8183, -4550.703, 248.5898, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3991) +(@OGUID+176 , 187668, 571, 1, 1, 455.1633, -4536.68, 247.5673, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3991) +(@OGUID+177 , 187668, 571, 1, 1, 458.6449, -4542.124, 247.7258, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3991) +(@OGUID+178 , 187668, 571, 1, 1, 587.3395, -4934.356, 20.82388, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3981) +(@OGUID+179 , 187668, 571, 1, 1, 586.2632, -4934.662, 20.74441, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3981) +(@OGUID+180 , 187668, 571, 1, 1, 580.5126, -4939.842, 20.76777, 0.2094394, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3981) +(@OGUID+181 , 187668, 571, 1, 1, 581.4718, -4943.683, 20.63075, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3981) +(@OGUID+182 , 187668, 571, 1, 1, 1891.333, -6175.724, 26.62351, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4000) +(@OGUID+183 , 187668, 571, 1, 1, 1894.171, -6177.047, 26.61499, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4000) +(@OGUID+184 , 187668, 571, 1, 1, 1890.348, -6204.115, 26.52463, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4000) +(@OGUID+185 , 187668, 571, 1, 1, 1872.679, -6195.768, 26.33468, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4000) +(@OGUID+186 , 187668, 571, 1, 1, 2425.66, -5166.585, 282.1942, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4003) +(@OGUID+187 , 187668, 571, 1, 1, 2482.925, -5077.249, 291.7695, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4003) +(@OGUID+188 , 187668, 571, 1, 1, 2472.532, -5054.136, 292.9761, 0, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4003) +(@OGUID+189 , 187668, 571, 1, 1, 2678.708, -4395.557, 285.5654, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+190 , 187668, 571, 1, 1, 2681.623, -4397.512, 285.5597, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+191 , 187668, 571, 1, 1, 2677.323, -4386.643, 290.0943, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+192 , 187668, 571, 1, 1, 3217.361, -685.8459, 169.8989, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4232) +(@OGUID+193 , 187668, 571, 1, 1, 3219.979, -680.9132, 169.6687, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4232) +(@OGUID+194 , 187668, 571, 1, 1, 3207.445, -675.2426, 170.4363, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4232) +(@OGUID+195 , 187668, 571, 1, 1, 3205.08, -679.9858, 170.4128, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4232) +(@OGUID+196 , 187668, 571, 1, 1, 3635.864, -710.7761, 215.8188, 4.869471, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+197 , 187668, 571, 1, 1, 3640.115, -711.2604, 215.9585, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+198 , 187668, 571, 1, 1, 3651.599, -711.7225, 216.8413, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4177) +(@OGUID+199 , 187668, 571, 1, 1, 3666.347, -703.8602, 217.6456, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4177) +(@OGUID+200 , 187668, 571, 1, 1, 3665.587, -710.9298, 217.4738, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4177) +(@OGUID+201 , 187668, 571, 1, 1, 3480.165, 1977.29, 70.61582, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4158) +(@OGUID+202 , 187668, 571, 1, 1, 3472.212, 1983.86, 69.00069, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4158) +(@OGUID+203 , 187668, 571, 1, 1, 3476.039, 2008.531, 68.95277, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4158) +(@OGUID+204 , 187668, 571, 1, 1, 3484.333, 2013.51, 68.88947, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4158) +(@OGUID+205 , 187668, 571, 1, 1, 2770.71, 934.493, 25.70063, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4152) +(@OGUID+206 , 187668, 571, 1, 1, 2777.521, 938.1545, 25.58711, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4152) +(@OGUID+207 , 187668, 571, 1, 1, 2271.331, 5194.442, 14.39653, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+208 , 187668, 571, 1, 1, 2299.134, 5198.044, 13.93274, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+209 , 187668, 571, 1, 1, 2280.926, 5198.394, 14.63274, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+210 , 187668, 571, 1, 1, 2281.226, 5199.101, 14.57226, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+211 , 187668, 571, 1, 1, 2272.831, 5198.149, 14.36126, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+212 , 187668, 571, 1, 1, 2824.468, 6139.032, 88.58996, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4129) +(@OGUID+213 , 187668, 571, 1, 1, 2792.786, 6176.63, 88.45963, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4129) +(@OGUID+214 , 187668, 571, 1, 1, 2824.102, 6142.47, 88.44103, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4129) +(@OGUID+215 , 187668, 571, 1, 1, 2789.38, 6177.33, 88.61863, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4129) +(@OGUID+216 , 187668, 571, 1, 1, 4176.385, 5285.042, 28.29611, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4108) +(@OGUID+217 , 187668, 571, 1, 1, 4176.302, 5277.055, 28.09965, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4108) +(@OGUID+218 , 187668, 571, 1, 1, 4171.795, 5282.206, 41.54663, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4108) +(@OGUID+219 , 187668, 571, 1, 1, 4178.876, 5273.907, 40.73148, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 4108) +(@OGUID+220 , 187668, 530, 1, 1, -2961.582, 2546.881, 79.93132, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3744) +(@OGUID+221 , 187668, 530, 1, 1, -2963.262, 2557.669, 96.95348, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3744) +(@OGUID+222 , 187668, 530, 1, 1, -2954.958, 2567.078, 81.00614, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3744) +(@OGUID+223 , 187668, 530, 1, 1, -2961.015, 2557.951, 93.87666, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3744) +(@OGUID+224 , 187668, 530, 1, 1, -4074.347, 2162.13, 111.4437, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3745) +(@OGUID+225 , 187668, 530, 1, 1, -4072.622, 2162.176, 111.4297, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3745) +(@OGUID+226 , 187668, 530, 1, 1, -4076.15, 2162.084, 111.4253, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3745) +(@OGUID+227 , 187668, 530, 1, 1, -2979.535, 851.0223, -5.23692, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3754) +(@OGUID+228 , 187668, 530, 1, 1, -2974.166, 852.9896, -5.184109, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3754) +(@OGUID+229 , 187668, 530, 1, 1, 289.163, 6085.788, 135.125, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3644) +(@OGUID+230 , 187668, 530, 1, 1, 276.0255, 6085.296, 135.0984, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3644) +(@OGUID+231 , 187668, 530, 1, 1, 270.995, 6092.489, 133.5649, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3644) +(@OGUID+232 , 187668, 530, 1, 1, 261.8294, 6096.237, 133.3653, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3644) +(@OGUID+233 , 187668, 530, 1, 1, 266.4354, 6094.357, 133.5182, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3644) +(@OGUID+234 , 187668, 530, 1, 1, 239.3766, 7930.089, 27.83519, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3645) +(@OGUID+235 , 187668, 530, 1, 1, 223.9831, 7923.57, 27.90063, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3645) +(@OGUID+236 , 187668, 530, 1, 1, 228.6397, 7945.422, 29.25893, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3645) +(@OGUID+237 , 187668, 530, 1, 1, 3057.197, 3694.741, 145.4213, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3712) +(@OGUID+238 , 187668, 530, 1, 1, 3060.614, 3691.763, 144.8515, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3712) +(@OGUID+239 , 187668, 530, 1, 1, 3058.398, 3696.026, 144.8155, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3712) +(@OGUID+240 , 187668, 530, 1, 1, 3058.831, 3691.601, 145.45, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3712) +(@OGUID+241 , 187668, 530, 1, 1, -4207.088, -12473.58, 46.58454, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+242 , 187668, 530, 1, 1, -4192.907, -12467.66, 46.6215, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+243 , 187668, 530, 1, 1, -4216.924, -12483.89, 48.3932, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+244 , 187668, 530, 1, 1, -4216.502, -12480.64, 48.98628, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+245 , 187668, 530, 1, 1, -4212.281, -12515.08, 50.44548, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+246 , 187668, 530, 1, 1, -4212.782, -12506.34, 46.88014, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+247 , 187668, 530, 1, 1, -4208.398, -12519.56, 47.62306, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 0) +(@OGUID+248 , 187668, 530, 1, 1, -4149.234, -12485.86, 50.90091, 3.859896, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+249 , 187668, 530, 1, 1, -4164.37, -12536.8, 48.27224, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+250 , 187668, 530, 1, 1, -4160.896, -12457.07, 47.62824, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+251 , 187668, 530, 1, 1, -4167.781, -12537.14, 48.95461, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+252 , 187668, 530, 1, 1, -4144.596, -12490.33, 45.72705, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+253 , 187668, 530, 1, 1, -4152.799, -12480.7, 45.96771, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+254 , 187668, 530, 1, 1, -4163.363, -12455.46, 47.14916, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+255 , 187668, 530, 1, 1, -4153.813, -12532.33, 49.37784, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+256 , 187668, 530, 1, 1, -4150.61, -12525.97, 49.39287, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3576) +(@OGUID+257 , 187668, 530, 1, 1, -4173.694, -13729.01, 76.77699, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3526) +(@OGUID+258 , 187668, 530, 1, 1, -4050.141, -13778.29, 76.35183, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3527) +(@OGUID+259 , 187668, 530, 1, 1, -4047.493, -13771.29, 76.13934, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 187668 (Area: 3527) +(@OGUID+260 , 201940, 530, 1, 1, 9611.64, -7183.144, 14.28471, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 201940 (Area: 3487) +(@OGUID+261 , 201940, 0, 1, 1, -4918.394, -983.5625, 501.4531, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 201940 (Area: 5342) +(@OGUID+262 , 201940, 0, 1, 1, -8868.988, 637.1007, 95.78714, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 201940 (Area: 5148) Valentine Arch (x2.00) +(@OGUID+263 , 201940, 1, 1, 1, 9870.75, 2493.63, 1315.87, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 201940 (Area: 0) +(@OGUID+264 , 201940, 530, 1, 1, -4005.649, -11844.58, 0.186079, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 201940 (Area: 0) +(@OGUID+265 , 181027, 571, 1, 1, 5768.591, 693.1081, 612.2136, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+266 , 181027, 571, 1, 1, 5740.348, 662.5662, 612.2136, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+267 , 181027, 571, 1, 1, 5734.721, 656.9608, 612.2136, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+268 , 181027, 571, 1, 1, 5718.801, 654.3483, 612.2136, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+269 , 181027, 571, 1, 1, 5753.042, 707.0385, 612.2136, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+270 , 181027, 571, 1, 1, 5787.936, 719.6158, 612.2136, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+271 , 181027, 571, 1, 1, 5792.599, 725.4569, 612.2136, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+272 , 181027, 571, 1, 1, 5720.552, 681.9709, 612.2136, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4739) +(@OGUID+273 , 181027, 571, 1, 1, 2620.68, -2024.098, 0, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+274 , 181027, 571, 1, 1, 2558.805, -1994.658, 0, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+275 , 181027, 571, 1, 1, 2530.056, -2001.654, 0, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+276 , 181027, 571, 1, 1, 2571.232, -1981.536, 0, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+277 , 181027, 571, 1, 1, 2564.62, -1902.94, 0, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+278 , 181027, 571, 1, 1, 2578.922, -1926.984, 0, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+279 , 181027, 571, 1, 1, 2604.255, -1901.251, 0, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+280 , 181027, 571, 1, 1, 2600.202, -1864.442, 0, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+281 , 181027, 571, 1, 1, 2600.614, -1814.094, 0, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+282 , 181027, 571, 1, 1, 2604.877, -1833.523, 0, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+283 , 181027, 571, 1, 1, 2415.667, -1854.533, 0, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+284 , 181027, 571, 1, 1, 2407.166, -1845.278, 0, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+285 , 181027, 571, 1, 1, 2404.097, -1864.177, 0, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+286 , 181027, 571, 1, 1, 2414.991, -1875.148, 0, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4242) +(@OGUID+287 , 181027, 571, 1, 1, 754.5249, -2854.845, 0, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3988) +(@OGUID+288 , 181027, 571, 1, 1, 767.0814, -2846.513, 0, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3988) +(@OGUID+289 , 181027, 571, 1, 1, 793.7769, -2840.536, 0, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3988) +(@OGUID+290 , 181027, 571, 1, 1, 794.0623, -2848.875, 0, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3988) +(@OGUID+291 , 181027, 571, 1, 1, 796.1247, -2842.772, 0, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3988) +(@OGUID+292 , 181027, 571, 1, 1, 765.928, -2820.402, 0, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3988) +(@OGUID+293 , 181027, 571, 1, 1, 2455.453, -5133.994, 275.5138, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+294 , 181027, 571, 1, 1, 2459.948, -5130.551, 275.5138, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+295 , 181027, 571, 1, 1, 2455.139, -5131.472, 275.5138, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+296 , 181027, 571, 1, 1, 2380.471, -5088.479, 248.5613, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+297 , 181027, 571, 1, 1, 2502.854, -5015.77, 275.4288, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+298 , 181027, 571, 1, 1, 2485.411, -5004.169, 274.5456, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+299 , 181027, 571, 1, 1, 2485.646, -5000.984, 274.5577, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+300 , 181027, 571, 1, 1, 2369.498, -5004.655, 248.5613, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+301 , 181027, 571, 1, 1, 2375.392, -5002.363, 248.5613, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4003) +(@OGUID+302 , 181027, 571, 1, 1, 3496.388, 1977.59, 65.96105, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4158) +(@OGUID+303 , 181027, 571, 1, 1, 3495.364, 1981.665, 66.03764, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4158) +(@OGUID+304 , 181027, 571, 1, 1, 3490.632, 1980.51, 65.99807, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4158) +(@OGUID+305 , 181027, 571, 1, 1, 2702.725, 934.8021, 0, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+306 , 181027, 571, 1, 1, 2700.923, 919.1116, 0, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+307 , 181027, 571, 1, 1, 2717.166, 869.525, 0, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+308 , 181027, 571, 1, 1, 2717.919, 866.1157, 0, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+309 , 181027, 571, 1, 1, 2658.5, 918.8054, 0, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+310 , 181027, 571, 1, 1, 2670.15, 871.2205, 0, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+311 , 181027, 571, 1, 1, 2668.09, 872.3976, 0, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+312 , 181027, 571, 1, 1, 2666.374, 918.7291, 0, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+313 , 181027, 571, 1, 1, 2627.73, 887.0659, 0, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+314 , 181027, 571, 1, 1, 2626.058, 889.1933, 0, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+315 , 181027, 571, 1, 1, 2627.751, 895.2178, 0, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4152) +(@OGUID+316 , 181027, 571, 1, 1, 5500.563, 5787.042, -82.11499, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+317 , 181027, 571, 1, 1, 5509.842, 5766.954, -84.06371, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+318 , 181027, 571, 1, 1, 5513.78, 5795.364, -80.6015, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+319 , 181027, 571, 1, 1, 5510.346, 5761.825, -84.18658, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+320 , 181027, 571, 1, 1, 5501.959, 5802.074, -79.23232, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+321 , 181027, 571, 1, 1, 5513.074, 5766.733, -84.07557, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+322 , 181027, 571, 1, 1, 5567.791, 5826.353, -73.64291, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+323 , 181027, 571, 1, 1, 5562.381, 5829.076, -73.01419, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4285) +(@OGUID+324 , 181027, 571, 1, 1, 5469.105, 4760.201, -198.9201, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4290) +(@OGUID+325 , 181027, 571, 1, 1, 5469.406, 4742.04, -198.9063, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4290) +(@OGUID+326 , 181027, 571, 1, 1, 5478.349, 4771.299, -198.9465, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4290) +(@OGUID+327 , 181027, 571, 1, 1, 5467.913, 4754.535, -198.9201, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4290) +(@OGUID+328 , 181027, 571, 1, 1, 5450.431, 4755.577, -198.9201, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4290) +(@OGUID+329 , 181027, 571, 1, 1, 5445.94, 4761.356, -199.0263, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 4290) +(@OGUID+330 , 181027, 530, 1, 1, 1961.764, 6885.375, 162.7591, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3771) +(@OGUID+331 , 181027, 530, 1, 1, 1965.24, 6884.419, 162.7591, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+332 , 181027, 530, 1, 1, 1964.663, 6887.743, 162.7591, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+333 , 181027, 530, 1, 1, 2097.025, 6825.342, 174.8524, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+334 , 181027, 530, 1, 1, 2095.012, 6821.211, 174.8731, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+335 , 181027, 530, 1, 1, 2092.416, 6825.399, 174.8686, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+336 , 181027, 530, 1, 1, 2089.096, 6768.958, 164.8599, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+337 , 181027, 530, 1, 1, 2092.187, 6765.44, 164.8475, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+338 , 181027, 530, 1, 1, 2093.987, 6769.731, 164.8697, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3772) +(@OGUID+339 , 181027, 530, 1, 1, 2991.37, 5483.188, 144.6114, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+340 , 181027, 530, 1, 1, 2986.906, 5481.471, 144.5909, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+341 , 181027, 530, 1, 1, 2991.238, 5478.47, 144.5909, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+342 , 181027, 530, 1, 1, 3030.463, 5492.013, 147.1473, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+343 , 181027, 530, 1, 1, 3034.872, 5490.722, 147.1473, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+344 , 181027, 530, 1, 1, 3011.45, 5435.751, 147.5007, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+345 , 181027, 530, 1, 1, 3008.707, 5438.396, 147.5007, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+346 , 181027, 530, 1, 1, 3012.275, 5442.078, 147.5007, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 3951) +(@OGUID+347 , 181027, 1, 1, 1, 9880.624, 2653.088, 1313.663, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+348 , 181027, 1, 1, 1, 10019.46, 2649.182, 1313.663, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+349 , 181027, 1, 1, 1, 10017.74, 2611.615, 1313.663, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+350 , 181027, 1, 1, 1, 9854.155, 2651.854, 1313.663, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+351 , 181027, 1, 1, 1, 10020.17, 2520.957, 1313.663, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+352 , 181027, 1, 1, 1, 9810.941, 2549.63, 1313.663, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1661) +(@OGUID+353 , 181027, 1, 1, 1, 9849.217, 2418.983, 1313.663, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1661) +(@OGUID+354 , 181027, 1, 1, 1, 9825.401, 2650.506, 1313.663, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1661) +(@OGUID+355 , 181027, 1, 1, 1, 9784.707, 2649.149, 1313.663, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1661) +(@OGUID+356 , 181027, 1, 1, 1, 9715.958, 2650.025, 1313.663, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1661) +(@OGUID+357 , 181027, 1, 1, 1, 9891.688, 2416.095, 1313.663, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1661) +(@OGUID+358 , 181027, 1, 1, 1, 9819.463, 2391.367, 1313.663, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1662) +(@OGUID+359 , 181027, 1, 1, 1, 9928.718, 2391.573, 1313.663, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+360 , 181027, 1, 1, 1, 9949.143, 2370.309, 1313.663, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 0) +(@OGUID+361 , 181027, 1, 1, 1, 10056.48, 2424.052, 1313.663, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 181027 (Area: 1660) +(@OGUID+362 , 181025, 571, 1, 1, 5422.828, -2574.388, 314.5182, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4275) +(@OGUID+363 , 181025, 571, 1, 1, 5490.349, -2575.417, 313.0533, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4275) +(@OGUID+364 , 181025, 571, 1, 1, 4524.684, -4252.019, 177.0246, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4159) +(@OGUID+365 , 181025, 571, 1, 1, 4532.347, -4148.53, 182.7989, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4159) +(@OGUID+366 , 181025, 571, 1, 1, 3881.886, -4516.897, 223.7292, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4205) +(@OGUID+367 , 181025, 571, 1, 1, 3431.319, -2776.561, 215.7577, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+368 , 181025, 571, 1, 1, 3300.602, -2378.899, 117.8947, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+369 , 181025, 571, 1, 1, 3282.833, -2368.123, 117.8988, 3.42085, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+370 , 181025, 571, 1, 1, 3293.471, -2350.238, 117.6907, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+371 , 181025, 571, 1, 1, 3311.093, -2361.425, 117.9167, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+372 , 181025, 571, 1, 1, 3346.118, -2225.082, 119.375, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+373 , 181025, 571, 1, 1, 3336.534, -2207.365, 120.0341, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+374 , 181025, 571, 1, 1, 3193.161, -2253.913, 117.8538, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+375 , 181025, 571, 1, 1, 3191.496, -2233.637, 117.8115, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+376 , 181025, 571, 1, 1, 3187.294, -2198.184, 141.9457, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+377 , 181025, 571, 1, 1, 3207.165, -2204.585, 142.3003, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+378 , 181025, 571, 1, 1, 3193.716, -2178.347, 141.7413, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4206) +(@OGUID+379 , 181025, 571, 1, 1, 1390.88, -3366.663, 194.8545, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 3998) +(@OGUID+380 , 181025, 571, 1, 1, 1350.993, -3356.948, 196.8577, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 3998) +(@OGUID+381 , 181025, 571, 1, 1, 3232.417, -718.9236, 167.9964, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4232) +(@OGUID+382 , 181025, 571, 1, 1, 3557.501, -768.2603, 203.7256, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+383 , 181025, 571, 1, 1, 3599.903, -757.4666, 199.1967, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+384 , 181025, 571, 1, 1, 3628.027, -668.0167, 244.9439, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 0) +(@OGUID+385 , 181025, 571, 1, 1, 3647.813, -648.9062, 243.9453, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+386 , 181025, 571, 1, 1, 3634.617, -644.8275, 244.1315, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+387 , 181025, 571, 1, 1, 3641.374, -671.6805, 245.1112, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+388 , 181025, 571, 1, 1, 3650.591, -754.5084, 201.8451, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+389 , 181025, 571, 1, 1, 3695.235, -765.3697, 202.1208, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+390 , 181025, 571, 1, 1, 3767.403, -747.8274, 211.6567, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+391 , 181025, 571, 1, 1, 3779.269, -809.5614, 209.6387, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+392 , 181025, 571, 1, 1, 3815.78, -754.2736, 213.8814, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+393 , 181025, 571, 1, 1, 3800.189, -817.2236, 208.8302, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+394 , 181025, 571, 1, 1, 3816.917, -800.0577, 208.6812, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+395 , 181025, 571, 1, 1, 3826.977, -809.4998, 208.5766, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+396 , 181025, 571, 1, 1, 3809.892, -826.8338, 208.5438, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+397 , 181025, 571, 1, 1, 3893.759, -696.3032, 261.979, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+398 , 181025, 571, 1, 1, 3928.128, -732.9033, 262.2497, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+399 , 181025, 571, 1, 1, 3905.213, -659.3301, 257.8033, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+400 , 181025, 571, 1, 1, 3966.297, -733.6108, 257.4371, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+401 , 181025, 571, 1, 1, 3893.384, -829.6746, 205.0926, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+402 , 181025, 571, 1, 1, 3847.43, -835.5692, 200.8211, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+403 , 181025, 571, 1, 1, 3807.228, -855.2426, 203.9786, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+404 , 181025, 571, 1, 1, 3797.328, -852.065, 204.1598, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4177) +(@OGUID+405 , 181025, 571, 1, 1, 3465.233, 228.1736, 59.31886, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4161) +(@OGUID+406 , 181025, 571, 1, 1, 3635.294, 245.6354, 58.86659, 0.06981169, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4161) +(@OGUID+407 , 181025, 571, 1, 1, 3628.324, 318.184, 59.31886, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4161) +(@OGUID+408 , 181025, 571, 1, 1, 3457.301, 300.75, 59.31886, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4161) +(@OGUID+409 , 181025, 571, 1, 1, 3665.188, 265.6042, -109.3723, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4161) +(@OGUID+410 , 181025, 571, 1, 1, 3661.484, 303.9514, -109.4306, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 181025 (Area: 4161) +(@OGUID+411 , 181022, 530, 1, 1, -1982.277, 5110.882, 7.504348, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+412 , 181022, 530, 1, 1, -1964.9, 5104.314, 7.514653, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+413 , 181022, 530, 1, 1, -1873.795, 4977.795, -22.33295, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+414 , 181022, 530, 1, 1, -1857.198, 4976.8, -22.56705, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+415 , 181022, 530, 1, 1, -1546.829, 5108.851, -20.84263, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+416 , 181022, 0, 1, 1, -8430.985, 596.3506, 94.62032, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 5150) +(@OGUID+417 , 181022, 0, 1, 1, -8538.67, 470.2, 104.521, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 5150) +(@OGUID+418 , 181022, 0, 1, 1, -8554.11, 459.615, 104.693, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 5150) +(@OGUID+419 , 181022, 0, 1, 1, -8732.06, 393.212, 98.2072, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 5149) +(@OGUID+420 , 181022, 0, 1, 1, -8434.75, 987.1312, 96.96603, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+421 , 181022, 0, 1, 1, -8509.754, 1041.872, 59.36489, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+422 , 181022, 0, 1, 1, -8402.518, 1059.08, 31.63022, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+423 , 181022, 0, 1, 1, -8424.703, 1075.745, 19.67526, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+424 , 181022, 0, 1, 1, -8533.77, 1066.152, 18.98668, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+425 , 181022, 0, 1, 1, -8616.668, 1038.597, 97.02485, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+426 , 181022, 0, 1, 1, -8519.527, 1122.33, 18.91462, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+427 , 181022, 0, 1, 1, -8466.509, 1156.274, 18.6443, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 0) +(@OGUID+428 , 181022, 0, 1, 1, -8307.936, 1071.653, 57.26217, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+429 , 181022, 0, 1, 1, -8408.185, 1193.769, 5.698709, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+430 , 181022, 0, 1, 1, -8373.63, 1192.8, 5.891318, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+431 , 181022, 0, 1, 1, -8468.239, 1192.766, 6.125231, 1.640607, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+432 , 181022, 0, 1, 1, -8518.73, 1207.85, 5.42902, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+433 , 181022, 0, 1, 1, -8535.98, 1207.91, 5.46386, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+434 , 181022, 0, 1, 1, -8562.929, 1194.916, 5.592021, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+435 , 181022, 0, 1, 1, -8550.538, 1159.076, 18.65301, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+436 , 181022, 0, 1, 1, -8605.79, 1213.77, 5.11101, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+437 , 181022, 0, 1, 1, -8614.11, 1303.04, 5.750293, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+438 , 181022, 0, 1, 1, -8641.774, 1288.231, 5.232253, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+439 , 181022, 0, 1, 1, -8281.283, 1156.497, 18.09047, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+440 , 181022, 0, 1, 1, -8306.66, 1301.68, 8.51337, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+441 , 181022, 0, 1, 1, -8219.573, 1191.089, 5.684546, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+442 , 181022, 0, 1, 1, -8274.7, 1300.65, 8.51445, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181022 (Area: 4411) +(@OGUID+443 , 181021, 1, 1, 1, 7889.62, -2516.01, 494.46, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181021 (Area: 656) +(@OGUID+444 , 181020, 1, 1, 1, 7889.29, -2513.85, 492.001, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 656) +(@OGUID+445 , 181020, 1, 1, 1, 7902.82, -2485, 492.101, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 2361) +(@OGUID+446 , 181020, 1, 1, 1, 7870.19, -2488.41, 492.335, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 2361) +(@OGUID+447 , 181020, 571, 1, 1, 3281.508, -2289.553, 109.7592, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 4248) +(@OGUID+448 , 181020, 571, 1, 1, 3264.85, -2273.001, 109.3768, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 4248) +(@OGUID+449 , 181020, 571, 1, 1, 3194.855, -2292.016, 108.0624, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 4248) +(@OGUID+450 , 181020, 571, 1, 1, 3272.445, -2284.55, 109.6323, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 4248) +(@OGUID+451 , 181020, 571, 1, 1, 2309.714, 5207.694, 20.94551, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 0) +(@OGUID+452 , 181020, 571, 1, 1, 2282.703, 5218.596, 20.9829, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 0) +(@OGUID+453 , 181020, 571, 1, 1, 2264.359, 5199.473, 21.16698, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 0) +(@OGUID+454 , 181020, 571, 1, 1, 2296.557, 5212.993, 20.75707, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 0) +(@OGUID+455 , 181020, 530, 1, 1, -4063.597, 2172.937, 112.3214, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 3745) +(@OGUID+456 , 181020, 530, 1, 1, -3006.309, 859.5955, -5.977011, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 3754) +(@OGUID+457 , 181020, 530, 1, 1, 244.1061, 7939.502, 31.13577, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 3645) +(@OGUID+458 , 181020, 530, 1, 1, 237.0487, 7913.604, 30.74815, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 3645) +(@OGUID+459 , 181020, 530, 1, 1, 213.9386, 7927.577, 30.98103, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 3645) +(@OGUID+460 , 181020, 0, 1, 1, -8408.65, 635.033, 101.409, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5150) +(@OGUID+461 , 181020, 0, 1, 1, -8511.38, 527.79, 109.868, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5150) +(@OGUID+462 , 181020, 0, 1, 1, -8612.712, 504.6371, 115.3036, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5150) +(@OGUID+463 , 181020, 0, 1, 1, -8633.32, 421.481, 104.761, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5390) +(@OGUID+464 , 181020, 0, 1, 1, -8640.89, 415.503, 104.791, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5390) +(@OGUID+465 , 181020, 0, 1, 1, -8680.8, 461.089, 105.228, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5390) +(@OGUID+466 , 181020, 0, 1, 1, -8719.567, 507.9125, 107.5373, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5390) +(@OGUID+467 , 181020, 0, 1, 1, -8588.407, 706.8125, 108.9887, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5390) +(@OGUID+468 , 181020, 0, 1, 1, -8665.82, 741.175, 108.709, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 181020 (Area: 5390) +(@OGUID+469 , 181019, 571, 1, 1, 5177.153, -2180.084, 236.5424, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+470 , 181019, 571, 1, 1, 5192.435, -2209.911, 239.3982, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+471 , 181019, 571, 1, 1, 5157.259, -2201.744, 237.5309, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+472 , 181019, 571, 1, 1, 5137.096, -2201.546, 237.8019, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+473 , 181019, 571, 1, 1, 5157.712, -2215.265, 238.4418, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+474 , 181019, 571, 1, 1, 5141.539, -2211.604, 238.1585, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+475 , 181019, 571, 1, 1, 3877.073, -4546.678, 210.972, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+476 , 181019, 571, 1, 1, 3874.093, -4541.467, 210.1389, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+477 , 181019, 571, 1, 1, 3838.456, -4544.684, 209.2909, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+478 , 181019, 571, 1, 1, 3407.589, -2786.686, 202.9973, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+479 , 181019, 571, 1, 1, 3412.483, -2783.082, 202.9972, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+480 , 181019, 571, 1, 1, 3424.167, -2769.674, 201.4191, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+481 , 181019, 571, 1, 1, 1432.413, -3253.822, 166.571, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3998) +(@OGUID+482 , 181019, 571, 1, 1, 1425.667, -3261.837, 165.5927, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3998) +(@OGUID+483 , 181019, 571, 1, 1, 1422.948, -3265.153, 165.6199, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3998) +(@OGUID+484 , 181019, 571, 1, 1, 701.3621, -2933.383, -3.068485, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3987) +(@OGUID+485 , 181019, 571, 1, 1, 701.6729, -2935.085, -3.068489, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3987) +(@OGUID+486 , 181019, 571, 1, 1, 3630.212, -709.9004, 215.4509, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+487 , 181019, 571, 1, 1, 3630.091, -711.7509, 215.451, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+488 , 181019, 571, 1, 1, 3629.777, -714.9827, 215.4509, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+489 , 181019, 571, 1, 1, 3629.591, -716.7711, 215.4509, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+490 , 181019, 571, 1, 1, 3658.893, -693.3231, 223.6275, 1.413715, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+491 , 181019, 571, 1, 1, 3660.452, -698.0406, 223.6275, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+492 , 181019, 571, 1, 1, 3653.071, -692.7104, 223.6275, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+493 , 181019, 571, 1, 1, 3655.911, -710.7966, 227.4318, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+494 , 181019, 571, 1, 1, 3650.309, -697.8465, 223.6275, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+495 , 181019, 571, 1, 1, 3658.077, -721.1656, 216.2393, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+496 , 181019, 571, 1, 1, 3653.49, -720.2332, 216.2393, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+497 , 181019, 571, 1, 1, 3655.506, -720.5035, 216.2393, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+498 , 181019, 571, 1, 1, 3652.148, -720.3037, 216.2393, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4177) +(@OGUID+499 , 181019, 571, 1, 1, 3560.058, 249.0957, 45.70548, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4161) +(@OGUID+500 , 181019, 571, 1, 1, 3529.886, 252.3539, 45.7051, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4161) +(@OGUID+501 , 181019, 571, 1, 1, 3573.747, 275.6775, 45.70752, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4161) +(@OGUID+502 , 181019, 571, 1, 1, 3521.046, 280.9596, 45.70491, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4161) +(@OGUID+503 , 181019, 571, 1, 1, 3555.038, 299.0926, 45.70468, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4161) +(@OGUID+504 , 181019, 571, 1, 1, 3497.954, 1962.59, 67.00489, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4158) +(@OGUID+505 , 181019, 571, 1, 1, 3489.518, 1973.308, 66.71261, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4158) +(@OGUID+506 , 181019, 571, 1, 1, 3515.049, 1995.76, 66.57986, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4158) +(@OGUID+507 , 181019, 571, 1, 1, 3498.045, 1985.921, 66.4942, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4158) +(@OGUID+508 , 181019, 571, 1, 1, 3472.785, 1978.688, 66.46651, 1.274088, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4158) +(@OGUID+509 , 181019, 571, 1, 1, 2292.771, 5195.491, 16.54581, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+510 , 181019, 571, 1, 1, 2295.146, 5194.604, 16.54581, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+511 , 181019, 571, 1, 1, 4502.473, 5716.374, 83.2963, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 0) +(@OGUID+512 , 181019, 571, 1, 1, 5546.444, 5741.974, -75.40535, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4285) +(@OGUID+513 , 181019, 571, 1, 1, 5565.401, 5770.03, -74.08703, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4285) +(@OGUID+514 , 181019, 571, 1, 1, 5558.145, 5760.761, -76.66797, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4285) +(@OGUID+515 , 181019, 571, 1, 1, 5543.533, 5732.819, -75.00607, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4285) +(@OGUID+516 , 181019, 571, 1, 1, 5564.951, 5763.742, -74.10497, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4285) +(@OGUID+517 , 181019, 571, 1, 1, 5592.455, 5748.157, -70.19862, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 4284) +(@OGUID+518 , 181019, 530, 1, 1, -1746.561, 5164.543, -35.90803, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+519 , 181019, 530, 1, 1, -1722.684, 5148.509, -34.71685, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+520 , 181019, 530, 1, 1, -1719.891, 5141.935, -34.7064, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+521 , 181019, 530, 1, 1, -1720.093, 5141.122, -34.81209, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+522 , 181019, 530, 1, 1, -1721.997, 5148.342, -34.72364, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+523 , 181019, 530, 1, 1, -1742.537, 5152.636, -35.90804, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+524 , 181019, 530, 1, 1, -1750.601, 5150.047, -36.30908, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+525 , 181019, 530, 1, 1, -1753.868, 5159.522, -36.26046, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+526 , 181019, 530, 1, 1, -1759.773, 5151.993, -36.28824, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+527 , 181019, 530, 1, 1, -1778.798, 5125.128, -34.73267, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+528 , 181019, 530, 1, 1, -1779.195, 5124.315, -34.74682, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+529 , 181019, 530, 1, 1, -1780.604, 5132.849, -34.73998, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+530 , 181019, 530, 1, 1, -1781.082, 5132.91, -34.72391, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 181019 (Area: 3899) +(@OGUID+531 , 181018, 571, 1, 1, 5815.427, 553.2634, 653.1058, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+532 , 181018, 571, 1, 1, 5823.227, 554.9146, 653.1237, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+533 , 181018, 571, 1, 1, 5812.321, 551.391, 653.0699, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+534 , 181018, 571, 1, 1, 5819.637, 554.3771, 653.1036, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+535 , 181018, 571, 1, 1, 5827.601, 553.8232, 653.1969, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+536 , 181018, 571, 1, 1, 5808.787, 548.7609, 653.1042, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+537 , 181018, 571, 1, 1, 5855.679, 631.2502, 649.3745, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+538 , 181018, 571, 1, 1, 5853.158, 644.6632, 660.192, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+539 , 181018, 571, 1, 1, 5861.551, 637.7972, 649.4493, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+540 , 181018, 571, 1, 1, 5852.249, 653.2101, 660.2052, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+541 , 181018, 571, 1, 1, 5834.877, 510.3333, 659.3004, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+542 , 181018, 571, 1, 1, 5828.073, 508.0534, 659.3159, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+543 , 181018, 571, 1, 1, 5852.142, 667.3889, 649.5994, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+544 , 181018, 571, 1, 1, 5859.842, 660.3542, 649.3377, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+545 , 181018, 571, 1, 1, 5879.179, 527.6025, 643.5471, 1.780234, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4395) +(@OGUID+546 , 181018, 571, 1, 1, 5733.871, 670.8108, 646.9722, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4739) +(@OGUID+547 , 181018, 571, 1, 1, 5739.494, 677.6687, 646.9604, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4739) +(@OGUID+548 , 181018, 571, 1, 1, 5761.328, 717.7375, 642.4337, 4.206246, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4739) +(@OGUID+549 , 181018, 571, 1, 1, 5756.841, 712.12, 642.4337, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4739) +(@OGUID+550 , 181018, 571, 1, 1, 5888.802, 529.829, 643.4706, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4613) +(@OGUID+551 , 181018, 571, 1, 1, 5910.6, 572.0917, 642.006, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4613) +(@OGUID+552 , 181018, 571, 1, 1, 5920.077, 557.5112, 641.9263, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4613) +(@OGUID+553 , 181018, 571, 1, 1, 5668.451, 683.9045, 655.4852, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4568) +(@OGUID+554 , 181018, 571, 1, 1, 5662.25, 669.692, 655.4854, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4568) +(@OGUID+555 , 181018, 571, 1, 1, 5944.854, 630.399, 654.0372, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4613) +(@OGUID+556 , 181018, 571, 1, 1, 5939.464, 615.9524, 654.1125, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4613) +(@OGUID+557 , 181018, 571, 1, 1, 6127.377, -1046.22, 405.7823, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4419) +(@OGUID+558 , 181018, 571, 1, 1, 6113.523, -1046.297, 406.5891, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4419) +(@OGUID+559 , 181018, 571, 1, 1, 5745.579, -3534.724, 396.685, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 0) +(@OGUID+560 , 181018, 571, 1, 1, 5769.655, -3530.542, 396.8302, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4324) +(@OGUID+561 , 181018, 571, 1, 1, 3854.253, -4497.099, 208.4463, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4205) +(@OGUID+562 , 181018, 571, 1, 1, 3845.263, -4506.483, 208.0879, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 0) +(@OGUID+563 , 181018, 571, 1, 1, 3865.145, -4556.175, 211.0864, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 0) +(@OGUID+564 , 181018, 571, 1, 1, 3876.38, -4541.031, 209.7021, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 0) +(@OGUID+565 , 181018, 571, 1, 1, 3858.301, -4564.549, 210.1741, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 0) +(@OGUID+566 , 181018, 571, 1, 1, 1421.958, -3261.318, 175.9854, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3998) +(@OGUID+567 , 181018, 571, 1, 1, 724.0819, -2929.729, 7.998729, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3987) +(@OGUID+568 , 181018, 571, 1, 1, 437.3842, -4539.971, 252.3735, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3991) +(@OGUID+569 , 181018, 571, 1, 1, 438.4343, -4546.447, 249.3452, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3991) +(@OGUID+570 , 181018, 571, 1, 1, 442.4383, -4552.802, 249.542, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3991) +(@OGUID+571 , 181018, 571, 1, 1, 447.4662, -4556.945, 252.1781, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3991) +(@OGUID+572 , 181018, 571, 1, 1, 481.2321, -4523.523, 260.9968, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3991) +(@OGUID+573 , 181018, 571, 1, 1, 572.9479, -4943.799, 27.1676, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3981) +(@OGUID+574 , 181018, 571, 1, 1, 585.9739, -4954.365, 22.9537, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3981) +(@OGUID+575 , 181018, 571, 1, 1, 592.2986, -4952.793, 23.01477, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 3981) +(@OGUID+576 , 181018, 571, 1, 1, 1896.369, -6177.458, 28.25126, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4000) +(@OGUID+577 , 181018, 571, 1, 1, 1886.857, -6181.003, 26.00835, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4000) +(@OGUID+578 , 181018, 571, 1, 1, 1883.005, -6173.481, 30.73777, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4000) +(@OGUID+579 , 181018, 571, 1, 1, 1889.537, -6174.26, 27.78375, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181018 (Area: 4000) +(@OGUID+580 , 181017, 571, 1, 1, 5809.249, 576.0026, 657.8462, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+581 , 181017, 571, 1, 1, 5783.142, 561.5955, 655.6302, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+582 , 181017, 571, 1, 1, 5843.796, 569.7678, 656.4412, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+583 , 181017, 571, 1, 1, 5753.474, 616.6545, 656.3826, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+584 , 181017, 571, 1, 1, 5755.206, 632.1685, 667.4127, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+585 , 181017, 571, 1, 1, 5859.036, 634.3795, 653.5594, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+586 , 181017, 571, 1, 1, 5730.578, 607.2695, 652.4564, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+587 , 181017, 571, 1, 1, 5881.26, 611.1509, 654.602, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+588 , 181017, 571, 1, 1, 5750.088, 646.9669, 655.8947, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+589 , 181017, 571, 1, 1, 5886.485, 624.7205, 653.5937, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+590 , 181017, 571, 1, 1, 5855.724, 664.5695, 653.6199, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+591 , 181017, 571, 1, 1, 5802.563, 689.8659, 664.4053, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4395) +(@OGUID+592 , 181017, 571, 1, 1, 5786.861, 691.6611, 652.8747, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+593 , 181017, 571, 1, 1, 5817.452, 694.9246, 652.8608, 0.8726639, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+594 , 181017, 571, 1, 1, 5733.013, 677.092, 652.2612, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+595 , 181017, 571, 1, 1, 5872.592, 687.6406, 650.2322, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+596 , 181017, 571, 1, 1, 5858.502, 699.9028, 647.2755, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+597 , 181017, 571, 1, 1, 5768.054, 709.3629, 623.4171, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+598 , 181017, 571, 1, 1, 5835.142, 720.0156, 646.1909, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+599 , 181017, 571, 1, 1, 5760.299, 713.8768, 652.3187, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+600 , 181017, 571, 1, 1, 5901.187, 684.3663, 647.5936, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+601 , 181017, 571, 1, 1, 5873.009, 725.3192, 647.5492, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+602 , 181017, 571, 1, 1, 5768.548, 732.4496, 646.0042, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+603 , 181017, 571, 1, 1, 5893.215, 706.2971, 646.8101, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+604 , 181017, 571, 1, 1, 5864.956, 738.7273, 644.807, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+605 , 181017, 571, 1, 1, 5909.327, 661.7327, 649.2336, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+606 , 181017, 571, 1, 1, 5883.444, 741.7843, 644.4044, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4739) +(@OGUID+607 , 181017, 571, 1, 1, 5885.01, 524.2327, 648.1631, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+608 , 181017, 571, 1, 1, 5687.88, 620.0889, 652.0167, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+609 , 181017, 571, 1, 1, 5675.364, 631.4016, 652.0096, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4567) +(@OGUID+610 , 181017, 571, 1, 1, 5671.868, 646.4288, 651.8803, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+611 , 181017, 571, 1, 1, 5668.864, 712.5075, 647.7338, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+612 , 181017, 571, 1, 1, 5679.624, 720.0261, 647.5791, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+613 , 181017, 571, 1, 1, 5679.613, 720.0153, 659.1891, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+614 , 181017, 571, 1, 1, 5665.726, 718.7106, 647.9514, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+615 , 181017, 571, 1, 1, 5670.651, 730.9137, 647.9866, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+616 , 181017, 571, 1, 1, 5677.255, 732.9352, 647.86, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+617 , 181017, 571, 1, 1, 5666.311, 725.6754, 647.9023, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4568) +(@OGUID+618 , 181017, 571, 1, 1, 5915.079, 710.2083, 646.6064, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+619 , 181017, 571, 1, 1, 5915.948, 728.4288, 646.2543, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+620 , 181017, 571, 1, 1, 5901.741, 746.0184, 645.2678, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4613) +(@OGUID+621 , 181017, 571, 1, 1, 6654.499, -190.9763, 956.8075, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4428) +(@OGUID+622 , 181017, 571, 1, 1, 6676.616, -199.1265, 954.8306, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4428) +(@OGUID+623 , 181017, 571, 1, 1, 6653.604, -203.6228, 954.6893, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4428) +(@OGUID+624 , 181017, 571, 1, 1, 6663.807, -184.6699, 958.2155, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4428) +(@OGUID+625 , 181017, 571, 1, 1, 6685.919, -206.6383, 953.6956, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4428) +(@OGUID+626 , 181017, 571, 1, 1, 6122.517, -1074.911, 407.3852, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4419) +(@OGUID+627 , 181017, 571, 1, 1, 4596.626, -4237.616, 181.8922, 2.303831, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4159) +(@OGUID+628 , 181017, 571, 1, 1, 4551.28, -4238.457, 173.6895, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4159) +(@OGUID+629 , 181017, 571, 1, 1, 3403.195, -2797.129, 217.5549, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+630 , 181017, 571, 1, 1, 3407.778, -2803.883, 205.8443, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+631 , 181017, 571, 1, 1, 3388.071, -2808.053, 207.0942, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+632 , 181017, 571, 1, 1, 3389.364, -2800.435, 207.4506, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+633 , 181017, 571, 1, 1, 3396.49, -2809.565, 207.4137, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+634 , 181017, 571, 1, 1, 3422.459, -2783.034, 207.0113, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+635 , 181017, 571, 1, 1, 3431.648, -2776.44, 207.109, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+636 , 181017, 571, 1, 1, 3270.23, -2299.017, 105.3505, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+637 , 181017, 571, 1, 1, 3280.345, -2211.232, 127.4082, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4206) +(@OGUID+638 , 181017, 571, 1, 1, 3272.255, -2192.748, 127.4287, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4206) +(@OGUID+639 , 181017, 571, 1, 1, 3253.434, -2199.932, 127.3124, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4206) +(@OGUID+640 , 181017, 571, 1, 1, 2129.331, -2957.729, 155.2842, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4070) +(@OGUID+641 , 181017, 571, 1, 1, 2122.887, -2959.943, 155.2807, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4070) +(@OGUID+642 , 181017, 571, 1, 1, 2127.25, -2962.019, 155.3076, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4070) +(@OGUID+643 , 181017, 571, 1, 1, 2124.927, -2955.563, 154.9684, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4070) +(@OGUID+644 , 181017, 571, 1, 1, 2128.509, -2993.269, 155.7663, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+645 , 181017, 571, 1, 1, 2129.307, -3000.026, 155.8247, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+646 , 181017, 571, 1, 1, 2125.529, -2997.12, 155.7463, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+647 , 181017, 571, 1, 1, 2132.394, -2996.245, 155.8432, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+648 , 181017, 571, 1, 1, 1474.518, -3279.563, 178.9401, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4071) +(@OGUID+649 , 181017, 571, 1, 1, 1465.599, -3290.57, 178.7285, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4071) +(@OGUID+650 , 181017, 571, 1, 1, 1425.031, -3316.349, 173.5113, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4071) +(@OGUID+651 , 181017, 571, 1, 1, 1461.297, -3264.238, 183.4601, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4071) +(@OGUID+652 , 181017, 571, 1, 1, 1428.773, -3274.498, 181.0417, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3998) +(@OGUID+653 , 181017, 571, 1, 1, 1426.495, -3265.443, 172.1592, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3998) +(@OGUID+654 , 181017, 571, 1, 1, 1431.548, -3252.894, 183.7873, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3998) +(@OGUID+655 , 181017, 571, 1, 1, 1449.89, -3254.639, 183.1299, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3998) +(@OGUID+656 , 181017, 571, 1, 1, 713.499, -2931.399, 2.876178, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3987) +(@OGUID+657 , 181017, 571, 1, 1, 454.9619, -4528.652, 251.8441, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3991) +(@OGUID+658 , 181017, 571, 1, 1, 463.7049, -4534.563, 254.9479, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3991) +(@OGUID+659 , 181017, 571, 1, 1, 465.882, -4545.663, 251.8806, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3991) +(@OGUID+660 , 181017, 571, 1, 1, 445.4201, -4640.561, 253.3178, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3991) +(@OGUID+661 , 181017, 571, 1, 1, 486.4948, -4520.141, 239.7659, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3991) +(@OGUID+662 , 181017, 571, 1, 1, 587.5087, -4945.893, 32.49911, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3981) +(@OGUID+663 , 181017, 571, 1, 1, 578.7986, -4942.297, 23.31465, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3981) +(@OGUID+664 , 181017, 571, 1, 1, 597.412, -5011.138, 9.712256, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3981) +(@OGUID+665 , 181017, 571, 1, 1, 548.7562, -5021.973, 17.47475, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3981) +(@OGUID+666 , 181017, 571, 1, 1, 639.2745, -5012.341, 11.1266, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3981) +(@OGUID+667 , 181017, 571, 1, 1, 1881.401, -6201.038, 33.84504, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+668 , 181017, 571, 1, 1, 1872.579, -6219.774, 42.40208, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+669 , 181017, 571, 1, 1, 1949.33, -6147.306, 31.00299, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+670 , 181017, 571, 1, 1, 1933.835, -6188.439, 30.40494, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+671 , 181017, 571, 1, 1, 1966.471, -6119.723, 41.52581, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+672 , 181017, 571, 1, 1, 1955.997, -6111.83, 41.53107, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+673 , 181017, 571, 1, 1, 1960.26, -6117.287, 41.52031, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+674 , 181017, 571, 1, 1, 1971.802, -6102.198, 73.7106, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4000) +(@OGUID+675 , 181017, 571, 1, 1, 2469.7, -5056.41, 296.0691, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+676 , 181017, 571, 1, 1, 2496.864, -5066.933, 302.6931, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+677 , 181017, 571, 1, 1, 2477.306, -5073.561, 291.6375, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+678 , 181017, 571, 1, 1, 2475.982, -5063.151, 289.1608, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+679 , 181017, 571, 1, 1, 2483.536, -5065.366, 301.6975, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+680 , 181017, 571, 1, 1, 2501.505, -5059.525, 285.9003, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+681 , 181017, 571, 1, 1, 2485.302, -5048.401, 296.4124, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4003) +(@OGUID+682 , 181017, 571, 1, 1, 2673.549, -4383.29, 290.4919, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+683 , 181017, 571, 1, 1, 3243.007, -716.868, 174.0614, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4232) +(@OGUID+684 , 181017, 571, 1, 1, 3230.017, -756.3438, 174.0186, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4232) +(@OGUID+685 , 181017, 571, 1, 1, 3215.221, -748.2292, 173.9813, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4232) +(@OGUID+686 , 181017, 571, 1, 1, 3226.663, -687.4913, 176.1088, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4232) +(@OGUID+687 , 181017, 571, 1, 1, 3221.048, -666.5087, 175.2865, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4232) +(@OGUID+688 , 181017, 571, 1, 1, 3212.471, -667.382, 175.2803, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4232) +(@OGUID+689 , 181017, 571, 1, 1, 3203.728, -675.9549, 175.5281, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4186) +(@OGUID+690 , 181017, 571, 1, 1, 3654.854, -700.4598, 228.6396, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4177) +(@OGUID+691 , 181017, 571, 1, 1, 3663.722, -720.0434, 224.0076, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4177) +(@OGUID+692 , 181017, 571, 1, 1, 3668.486, -717.066, 218.9095, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4177) +(@OGUID+693 , 181017, 571, 1, 1, 3667.354, -727.1337, 218.3601, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4177) +(@OGUID+694 , 181017, 571, 1, 1, 3668.153, -722.3611, 218.7, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4177) +(@OGUID+695 , 181017, 571, 1, 1, 3665.362, -707.243, 221.1085, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4177) +(@OGUID+696 , 181017, 571, 1, 1, 3521.09, 240.6755, 53.60065, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4161) +(@OGUID+697 , 181017, 571, 1, 1, 3577.127, 249.5916, 53.55267, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4161) +(@OGUID+698 , 181017, 571, 1, 1, 3515.238, 299.4315, 53.53123, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4161) +(@OGUID+699 , 181017, 571, 1, 1, 3570.422, 301.9106, 53.45552, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4161) +(@OGUID+700 , 181017, 571, 1, 1, 4986.635, 1237.804, 232.5177, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4170) +(@OGUID+701 , 181017, 571, 1, 1, 5013.381, 1244.962, 238.3039, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4170) +(@OGUID+702 , 181017, 571, 1, 1, 5006.911, 1195.97, 235.5182, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4170) +(@OGUID+703 , 181017, 571, 1, 1, 5027.013, 1209.431, 233.9405, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4170) +(@OGUID+704 , 181017, 571, 1, 1, 5027.053, 1209.406, 240.235, 1.082103, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4170) +(@OGUID+705 , 181017, 571, 1, 1, 3464.886, 4177.207, 24.38719, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4037) +(@OGUID+706 , 181017, 571, 1, 1, 2314.894, 5185.276, 23.48018, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+707 , 181017, 571, 1, 1, 2274.934, 5189.169, 26.13615, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+708 , 181017, 571, 1, 1, 2303.014, 5208.549, 27.68204, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+709 , 181017, 571, 1, 1, 2320.047, 5198.47, 23.71446, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+710 , 181017, 571, 1, 1, 2270.002, 5197.174, 17.32868, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+711 , 181017, 571, 1, 1, 2288.641, 5214.336, 27.50825, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+712 , 181017, 571, 1, 1, 2270.879, 5210.542, 28.94806, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+713 , 181017, 571, 1, 1, 2769.89, 6123.314, 96.68723, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4020) +(@OGUID+714 , 181017, 571, 1, 1, 2815.303, 6165.526, 90.96311, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4129) +(@OGUID+715 , 181017, 571, 1, 1, 3624.583, 5913.436, 144.8049, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4023) +(@OGUID+716 , 181017, 571, 1, 1, 4172.988, 5271.836, 40.90479, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4108) +(@OGUID+717 , 181017, 571, 1, 1, 4173.983, 5280.55, 30.62882, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4108) +(@OGUID+718 , 181017, 571, 1, 1, 4165.883, 5280.938, 31.36931, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4108) +(@OGUID+719 , 181017, 571, 1, 1, 4174.368, 5270.975, 41.0957, 5.637414, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4108) +(@OGUID+720 , 181017, 571, 1, 1, 5543.419, 5736.716, -72.88883, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+721 , 181017, 571, 1, 1, 5562.838, 5767.768, -69.31071, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+722 , 181017, 571, 1, 1, 5549.516, 5738.056, -72.93507, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+723 , 181017, 571, 1, 1, 5577.761, 5766.71, -69.34008, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+724 , 181017, 571, 1, 1, 5544.886, 5730.654, -72.89562, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+725 , 181017, 571, 1, 1, 5550.921, 5732.03, -72.89473, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+726 , 181017, 571, 1, 1, 5569.917, 5759.858, -69.32285, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+727 , 181017, 571, 1, 1, 5570.901, 5774.635, -69.3968, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4285) +(@OGUID+728 , 181017, 571, 1, 1, 5584.953, 5748.914, -68.31659, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4284) +(@OGUID+729 , 181017, 530, 1, 1, -2176.667, 5405.86, 58.44925, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3898) +(@OGUID+730 , 181017, 530, 1, 1, -1905.432, 5771.346, 137.7419, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+731 , 181017, 530, 1, 1, -1892.362, 5766.126, 137.6966, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 0) +(@OGUID+732 , 181017, 530, 1, 1, -2659.457, 4386.914, 39.52228, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3683) +(@OGUID+733 , 181017, 530, 1, 1, -2587.3, 4469.175, 40.08729, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3683) +(@OGUID+734 , 181017, 530, 1, 1, -2671.876, 4457.92, 42.83185, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3683) +(@OGUID+735 , 181017, 530, 1, 1, -2648.931, 4478.227, 39.93041, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3683) +(@OGUID+736 , 181017, 530, 1, 1, -2967.964, 4020.805, 7.264894, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3684) +(@OGUID+737 , 181017, 530, 1, 1, -2987.704, 4030.75, 7.28573, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3684) +(@OGUID+738 , 181017, 530, 1, 1, -2923.89, 4017.942, 8.344274, 3.665196, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3684) +(@OGUID+739 , 181017, 530, 1, 1, -2982.132, 3981.363, 8.745137, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3684) +(@OGUID+740 , 181017, 530, 1, 1, -2931.291, 3931.274, 8.816035, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3684) +(@OGUID+741 , 181017, 530, 1, 1, -3022.694, 2624.565, 85.78185, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3744) +(@OGUID+742 , 181017, 530, 1, 1, -2972.565, 2562.675, 83.66947, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3744) +(@OGUID+743 , 181017, 530, 1, 1, -2955.605, 2554.495, 110.3285, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3744) +(@OGUID+744 , 181017, 530, 1, 1, -2927.35, 2650.861, 100.1286, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3744) +(@OGUID+745 , 181017, 530, 1, 1, -4010.367, 2155.552, 109.9921, 1.06465, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3745) +(@OGUID+746 , 181017, 530, 1, 1, -4058.762, 2175.685, 117.8552, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3745) +(@OGUID+747 , 181017, 530, 1, 1, -709.4097, 2704.609, 99.62894, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3538) +(@OGUID+748 , 181017, 530, 1, 1, -717.0001, 2714.823, 100.4722, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3538) +(@OGUID+749 , 181017, 530, 1, 1, -716.9244, 2718.473, 100.4844, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3538) +(@OGUID+750 , 181017, 530, 1, 1, -716.8802, 2742.702, 100.7903, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3538) +(@OGUID+751 , 181017, 530, 1, 1, -690.7932, 2724.943, 100.9289, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3538) +(@OGUID+752 , 181017, 530, 1, 1, 181.4262, 2624.335, 98.51126, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3536) +(@OGUID+753 , 181017, 530, 1, 1, -249.9205, 5495.466, 36.7147, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3565) +(@OGUID+754 , 181017, 530, 1, 1, 282.6363, 6085.975, 137.649, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3644) +(@OGUID+755 , 181017, 530, 1, 1, 237.8501, 7911.491, 30.4785, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3645) +(@OGUID+756 , 181017, 530, 1, 1, 236.9491, 7913.625, 30.50175, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3645) +(@OGUID+757 , 181017, 530, 1, 1, 223.4775, 7943.311, 30.76142, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3645) +(@OGUID+758 , 181017, 530, 1, 1, 244.0695, 7939.386, 30.92426, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3645) +(@OGUID+759 , 181017, 530, 1, 1, 214.1629, 7927.679, 30.72031, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3645) +(@OGUID+760 , 181017, 530, 1, 1, 195.0323, 8490.546, 35.5514, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3656) +(@OGUID+761 , 181017, 530, 1, 1, 264.8356, 8492.754, 34.60779, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3656) +(@OGUID+762 , 181017, 530, 1, 1, 272.1655, 8509.436, 32.72204, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3656) +(@OGUID+763 , 181017, 530, 1, 1, 219.5999, 8569.107, 33.13798, 4.677484, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3649) +(@OGUID+764 , 181017, 530, 1, 1, -2713.36, 7298.445, 51.91501, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3626) +(@OGUID+765 , 181017, 530, 1, 1, -2698.241, 7291.552, 49.91637, 5.969027, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3626) +(@OGUID+766 , 181017, 530, 1, 1, -2730.689, 7306.021, 51.7765, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3626) +(@OGUID+767 , 181017, 530, 1, 1, -2677.658, 7203.919, 32.99669, 1.204277, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3626) +(@OGUID+768 , 181017, 530, 1, 1, -2775.226, 7326.033, 51.77103, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3626) +(@OGUID+769 , 181017, 530, 1, 1, 1955.625, 6885.821, 167.1296, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3771) +(@OGUID+770 , 181017, 530, 1, 1, 2009.813, 6871.413, 188.1808, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+771 , 181017, 530, 1, 1, 2032.214, 6819.37, 181.5125, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+772 , 181017, 530, 1, 1, 2031.963, 6825.553, 181.5333, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+773 , 181017, 530, 1, 1, 2038.027, 6826.094, 181.4816, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+774 , 181017, 530, 1, 1, 2038.565, 6819.838, 181.4885, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+775 , 181017, 530, 1, 1, 2062.016, 6825.854, 184.7832, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+776 , 181017, 530, 1, 1, 2063.305, 6759.898, 173.2681, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+777 , 181017, 530, 1, 1, 2163.694, 6745.077, 172.4085, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+778 , 181017, 530, 1, 1, 2162.737, 6751.214, 172.4385, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+779 , 181017, 530, 1, 1, 2168.956, 6752.182, 172.4387, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+780 , 181017, 530, 1, 1, 2169.925, 6745.97, 172.4366, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3772) +(@OGUID+781 , 181017, 530, 1, 1, 3026.51, 5497.439, 151.5307, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3951) +(@OGUID+782 , 181017, 530, 1, 1, 3016.612, 5445.069, 151.877, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3951) +(@OGUID+783 , 181017, 530, 1, 1, 2155.25, 4720.381, 160.9449, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3844) +(@OGUID+784 , 181017, 530, 1, 1, 2154.756, 4716.656, 160.9547, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3844) +(@OGUID+785 , 181017, 530, 1, 1, 2035.05, 4693.116, 154.7217, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3844) +(@OGUID+786 , 181017, 530, 1, 1, 2031.468, 4692.11, 154.7591, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3844) +(@OGUID+787 , 181017, 530, 1, 1, 2962.525, 3697.009, 150.2677, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3712) +(@OGUID+788 , 181017, 530, 1, 1, 3061.875, 3647.259, 149.6342, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3712) +(@OGUID+789 , 181017, 530, 1, 1, 4103.79, 3058.691, 345.6179, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3738) +(@OGUID+790 , 181017, 530, 1, 1, 4125.446, 3068.064, 345.6248, 3.525572, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 3738) +(@OGUID+791 , 181016, 1, 1, 1, 7867.43, -2562.63, 486.946, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+792 , 181016, 1, 1, 1, 7942.2, -2640.05, 492.378, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+793 , 181016, 1, 1, 1, 7925.89, -2636.76, 492.584, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+794 , 181016, 1, 1, 1, 7942.56, -2571.39, 488.843, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+795 , 181016, 1, 1, 1, 7938.42, -2585.05, 488.907, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+796 , 181016, 1, 1, 1, 7910.97, -2575.69, 488.582, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+797 , 181016, 1, 1, 1, 7915.88, -2561.99, 488.201, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+798 , 181016, 1, 1, 1, 7912.61, -2504.64, 489.276, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 656) +(@OGUID+799 , 181016, 1, 1, 1, 7862.59, -2495.27, 489.275, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 2361) +(@OGUID+800 , 181016, 1, 1, 1, 7910.7, -2488.95, 489.272, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 2361) +(@OGUID+801 , 181016, 1, 1, 1, 7864, -2510.33, 489.275, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 2361) +(@OGUID+802 , 181016, 1, 1, 1, 7821.1, -2479.85, 486.84, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 2361) +(@OGUID+803 , 181016, 1, 1, 1, 7790.67, -2422.31, 488.341, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 2361) +(@OGUID+804 , 181016, 1, 1, 1, 7477.78, -2130.38, 492.102, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+805 , 181016, 571, 1, 1, 5843.04, 581.1298, 651.76, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+806 , 181016, 571, 1, 1, 5797.108, 551.8475, 661.095, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+807 , 181016, 571, 1, 1, 5763.885, 572.2188, 649.8002, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+808 , 181016, 571, 1, 1, 5803.461, 547.2244, 660.9998, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+809 , 181016, 571, 1, 1, 5789.479, 641.6511, 647.4436, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+810 , 181016, 571, 1, 1, 5864.823, 610.4653, 650.7043, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+811 , 181016, 571, 1, 1, 5745.615, 586.7101, 649.3102, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+812 , 181016, 571, 1, 1, 5839.251, 641.2769, 647.5121, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+813 , 181016, 571, 1, 1, 5761.894, 592.8934, 613.7905, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+814 , 181016, 571, 1, 1, 5776.402, 530.3011, 641.5594, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+815 , 181016, 571, 1, 1, 5807.717, 654.8577, 647.4246, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+816 , 181016, 571, 1, 1, 5846.925, 644.6152, 658.404, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+817 , 181016, 571, 1, 1, 5748.025, 626.0618, 660.9924, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+818 , 181016, 571, 1, 1, 5825.186, 655.9732, 647.5557, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+819 , 181016, 571, 1, 1, 5735.165, 606.0434, 647.9391, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+820 , 181016, 571, 1, 1, 5743.978, 624.6772, 648.4809, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+821 , 181016, 571, 1, 1, 5845.924, 652.1758, 658.404, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+822 , 181016, 571, 1, 1, 5746.787, 636.5056, 660.9924, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+823 , 181016, 571, 1, 1, 5833.373, 645.4617, 609.1575, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+824 , 181016, 571, 1, 1, 5822.227, 502.8376, 657.378, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+825 , 181016, 571, 1, 1, 5840.909, 508.295, 657.4862, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+826 , 181016, 571, 1, 1, 5898.554, 629.4965, 646.7423, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4395) +(@OGUID+827 , 181016, 571, 1, 1, 5796.696, 707.4605, 641.7041, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+828 , 181016, 571, 1, 1, 5805.41, 708.4702, 641.4802, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+829 , 181016, 571, 1, 1, 5751.683, 681.7147, 613.2468, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+830 , 181016, 571, 1, 1, 5750.272, 691.2866, 618.5539, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+831 , 181016, 571, 1, 1, 5845.667, 696.0077, 610.6929, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+832 , 181016, 571, 1, 1, 5867.476, 689.2825, 643.1117, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+833 , 181016, 571, 1, 1, 5734.079, 690.025, 646.5366, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+834 , 181016, 571, 1, 1, 5826.764, 723.2586, 641.2166, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+835 , 181016, 571, 1, 1, 5904.524, 663.1807, 643.8438, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+836 , 181016, 571, 1, 1, 5773.907, 718.0335, 618.5657, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+837 , 181016, 571, 1, 1, 5756.162, 712.4989, 618.5643, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+838 , 181016, 571, 1, 1, 5771.891, 737.5848, 641.4211, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+839 , 181016, 571, 1, 1, 5914.837, 700.7205, 641.8951, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+840 , 181016, 571, 1, 1, 5823.329, 760.0555, 640.327, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4739) +(@OGUID+841 , 181016, 571, 1, 1, 5882.65, 517.4098, 641.9064, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+842 , 181016, 571, 1, 1, 5886.956, 526.6721, 642.1017, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+843 , 181016, 571, 1, 1, 5921.778, 619.2034, 645.9958, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+844 , 181016, 571, 1, 1, 5890.065, 519.4915, 641.9147, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+845 , 181016, 571, 1, 1, 5694.438, 614.2162, 646.6755, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+846 , 181016, 571, 1, 1, 5676.881, 659.645, 647.1504, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+847 , 181016, 571, 1, 1, 5648.303, 675.3729, 651.9927, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+848 , 181016, 571, 1, 1, 5663.514, 682.673, 651.9452, 4.991644, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+849 , 181016, 571, 1, 1, 5663.002, 663.5723, 654.331, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+850 , 181016, 571, 1, 1, 5673.695, 687.83, 654.3299, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+851 , 181016, 571, 1, 1, 5685.707, 679.8306, 646.3728, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+852 , 181016, 571, 1, 1, 5659.298, 673.91, 651.942, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+853 , 181016, 571, 1, 1, 5654.433, 690.0082, 651.9927, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+854 , 181016, 571, 1, 1, 5668.66, 718.72, 653.374, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+855 , 181016, 571, 1, 1, 5677.676, 730.4684, 653.3763, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+856 , 181016, 571, 1, 1, 5630.848, 705.8953, 651.9803, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+857 , 181016, 571, 1, 1, 5620.479, 681.7556, 651.9917, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+858 , 181016, 571, 1, 1, 5704.065, 734.105, 641.7964, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+859 , 181016, 571, 1, 1, 5716.991, 723.6447, 641.6827, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+860 , 181016, 571, 1, 1, 5710.433, 728.6938, 641.7766, 0.8552105, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+861 , 181016, 571, 1, 1, 5739.42, 737.81, 656.8243, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+862 , 181016, 571, 1, 1, 5642.215, 754.7111, 641.5667, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+863 , 181016, 571, 1, 1, 5740.807, 738.6092, 641.7399, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+864 , 181016, 571, 1, 1, 5726.913, 764.369, 644.1921, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4568) +(@OGUID+865 , 181016, 571, 1, 1, 5787.012, 774.6193, 661.2783, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4740) +(@OGUID+866 , 181016, 571, 1, 1, 5803.736, 772.4315, 661.2783, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4740) +(@OGUID+867 , 181016, 571, 1, 1, 5808.237, 791.7759, 632.587, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4740) +(@OGUID+868 , 181016, 571, 1, 1, 5892.815, 743.408, 639.8414, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+869 , 181016, 571, 1, 1, 5929.599, 639.7736, 645.5601, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+870 , 181016, 571, 1, 1, 5943.547, 636.654, 652.9702, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+871 , 181016, 571, 1, 1, 5947.679, 626.1014, 650.5775, 3.438303, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+872 , 181016, 571, 1, 1, 5934.438, 611.9415, 652.9656, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+873 , 181016, 571, 1, 1, 5944.347, 617.7059, 650.5828, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+874 , 181016, 571, 1, 1, 5958.763, 626.1614, 650.6269, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+875 , 181016, 571, 1, 1, 5953.268, 610.4814, 650.6269, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4613) +(@OGUID+876 , 181016, 571, 1, 1, 5978.208, 595.1833, 650.6149, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4618) +(@OGUID+877 , 181016, 571, 1, 1, 5988.101, 621.1797, 650.6269, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4618) +(@OGUID+878 , 181016, 571, 1, 1, 5845.724, 435.9962, 657.6264, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4616) +(@OGUID+879 , 181016, 571, 1, 1, 5788.177, 425.141, 657.5775, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4564) +(@OGUID+880 , 181016, 571, 1, 1, 6675.403, -194.668, 951.2613, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4428) +(@OGUID+881 , 181016, 571, 1, 1, 6677.512, -203.657, 951.2575, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4428) +(@OGUID+882 , 181016, 571, 1, 1, 6664.053, -252.1919, 962.2114, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4428) +(@OGUID+883 , 181016, 571, 1, 1, 6195.851, -1050.231, 410.5798, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+884 , 181016, 571, 1, 1, 6128.463, -1071.167, 402.915, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+885 , 181016, 571, 1, 1, 6143.565, -1062.889, 402.4637, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+886 , 181016, 571, 1, 1, 6181.414, -1060.371, 410.6938, 1.343901, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+887 , 181016, 571, 1, 1, 6132.971, -1080.292, 402.5479, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+888 , 181016, 571, 1, 1, 6105.885, -1064.441, 403.3065, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+889 , 181016, 571, 1, 1, 6104.259, -1076.63, 403.506, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4419) +(@OGUID+890 , 181016, 571, 1, 1, 5221.921, -1337.251, 241.8586, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+891 , 181016, 571, 1, 1, 5235.554, -1320.319, 242.1471, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+892 , 181016, 571, 1, 1, 5233.944, -1309.333, 242.7248, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+893 , 181016, 571, 1, 1, 5209.904, -1336.67, 242.6071, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+894 , 181016, 571, 1, 1, 5228.022, -1298.785, 242.8026, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+895 , 181016, 571, 1, 1, 5197.744, -1301.545, 244.1698, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+896 , 181016, 571, 1, 1, 5170.655, -2175.094, 236.524, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+897 , 181016, 571, 1, 1, 5174.28, -2190.904, 236.5399, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+898 , 181016, 571, 1, 1, 5196.799, -2208.144, 239.3988, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+899 , 181016, 571, 1, 1, 5135.955, -2183.239, 236.8366, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+900 , 181016, 571, 1, 1, 5135.756, -2204.338, 236.5436, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+901 , 181016, 571, 1, 1, 5153.606, -2216.569, 236.805, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+902 , 181016, 571, 1, 1, 5190.787, -2215.081, 239.3982, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+903 , 181016, 571, 1, 1, 5382.32, -2632.782, 303.9539, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+904 , 181016, 571, 1, 1, 5408.356, -2679.761, 303.9539, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+905 , 181016, 571, 1, 1, 5406.375, -2612.042, 303.9539, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+906 , 181016, 571, 1, 1, 5436.389, -2618.382, 306.5511, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+907 , 181016, 571, 1, 1, 5464.559, -2619.046, 306.5511, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4275) +(@OGUID+908 , 181016, 571, 1, 1, 5500.086, -2657.195, 303.9539, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4275) +(@OGUID+909 , 181016, 571, 1, 1, 5526.226, -2674.84, 303.9539, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4275) +(@OGUID+910 , 181016, 571, 1, 1, 5528.214, -2651.125, 303.9539, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4275) +(@OGUID+911 , 181016, 571, 1, 1, 5527.774, -2637.863, 303.9539, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4275) +(@OGUID+912 , 181016, 571, 1, 1, 5750.8, -3535.454, 389.0267, 5.532695, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+913 , 181016, 571, 1, 1, 5764.8, -3532.155, 388.3556, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+914 , 181016, 571, 1, 1, 5789.338, -3595.79, 388.8241, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+915 , 181016, 571, 1, 1, 5783.694, -3600.81, 387.7156, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+916 , 181016, 571, 1, 1, 5758.551, -3620.203, 385.8352, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+917 , 181016, 571, 1, 1, 5774.17, -3614.33, 387.6901, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+918 , 181016, 571, 1, 1, 5794.01, -3586.305, 388.6537, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4324) +(@OGUID+919 , 181016, 571, 1, 1, 5790.555, -3548.062, 387.1112, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4323) +(@OGUID+920 , 181016, 571, 1, 1, 4604.299, -4216.11, 178.7165, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+921 , 181016, 571, 1, 1, 4578.913, -4263.682, 182.0264, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+922 , 181016, 571, 1, 1, 4585.377, -4225.431, 178.0588, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+923 , 181016, 571, 1, 1, 4574.175, -4252.902, 182.2079, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+924 , 181016, 571, 1, 1, 4544.073, -4208.386, 170.6733, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+925 , 181016, 571, 1, 1, 4554.03, -4232.887, 170.6884, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+926 , 181016, 571, 1, 1, 4550.191, -4182.836, 173.4989, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+927 , 181016, 571, 1, 1, 4549.178, -4253.708, 170.7494, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+928 , 181016, 571, 1, 1, 4531.979, -4176.561, 173.4836, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4159) +(@OGUID+929 , 181016, 571, 1, 1, 3854.53, -4499.983, 208.0386, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4205) +(@OGUID+930 , 181016, 571, 1, 1, 3883.566, -4522.057, 217.378, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4205) +(@OGUID+931 , 181016, 571, 1, 1, 3848.002, -4506.846, 207.7856, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+932 , 181016, 571, 1, 1, 3844.868, -4517.594, 210.5048, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+933 , 181016, 571, 1, 1, 3866.024, -4531.325, 209.7259, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+934 , 181016, 571, 1, 1, 3835.15, -4527.149, 210.6371, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+935 , 181016, 571, 1, 1, 3871.145, -4567.245, 207.5447, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+936 , 181016, 571, 1, 1, 3847.246, -4556.365, 210.1268, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+937 , 181016, 571, 1, 1, 3413.37, -2812.231, 200.4576, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+938 , 181016, 571, 1, 1, 3432.563, -2829.036, 201.7036, 1.97222, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+939 , 181016, 571, 1, 1, 3414.616, -2778.184, 201.5204, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+940 , 181016, 571, 1, 1, 3428.656, -2766.984, 200.3678, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+941 , 181016, 571, 1, 1, 3457.128, -2785.357, 201.2523, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+942 , 181016, 571, 1, 1, 3452.198, -2755.466, 199.3946, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4204) +(@OGUID+943 , 181016, 571, 1, 1, 3441.72, -2747.261, 199.3887, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4204) +(@OGUID+944 , 181016, 571, 1, 1, 3302.054, -2350.771, 108.8892, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+945 , 181016, 571, 1, 1, 3316.353, -2328.825, 111.0914, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+946 , 181016, 571, 1, 1, 3225.829, -2298.399, 107.2934, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+947 , 181016, 571, 1, 1, 3267.523, -2271.925, 114.2197, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4248) +(@OGUID+948 , 181016, 571, 1, 1, 3237.112, -2271.502, 113.9172, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4248) +(@OGUID+949 , 181016, 571, 1, 1, 3344.212, -2203.41, 119.4523, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+950 , 181016, 571, 1, 1, 3294.673, -2261.47, 111.9283, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+951 , 181016, 571, 1, 1, 3323.304, -2296.872, 110.1093, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+952 , 181016, 571, 1, 1, 3308.395, -2221.642, 115.808, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+953 , 181016, 571, 1, 1, 3352.523, -2221.079, 119.4523, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+954 , 181016, 571, 1, 1, 3268.585, -2230.661, 116.8297, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+955 , 181016, 571, 1, 1, 3286.429, -2201.523, 117.3726, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+956 , 181016, 571, 1, 1, 3248.892, -2223.04, 116.8297, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+957 , 181016, 571, 1, 1, 3184.458, -2253.973, 114.8628, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+958 , 181016, 571, 1, 1, 3183.712, -2235.236, 114.8628, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4206) +(@OGUID+959 , 181016, 571, 1, 1, 3093.765, -2252.836, 97.05368, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+960 , 181016, 571, 1, 1, 2549.787, -1992.145, 8.439572, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+961 , 181016, 571, 1, 1, 2538.165, -1999.59, 8.439572, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+962 , 181016, 571, 1, 1, 2554.446, -1931.769, 3.000129, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+963 , 181016, 571, 1, 1, 2493.727, -1921.882, 10.72953, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+964 , 181016, 571, 1, 1, 2503.962, -1936.449, 10.39561, 1.012289, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+965 , 181016, 571, 1, 1, 2553.7, -1912.366, 2.313859, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+966 , 181016, 571, 1, 1, 2485.413, -1882.31, 9.955285, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+967 , 181016, 571, 1, 1, 2485.737, -1895.543, 10.02251, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+968 , 181016, 571, 1, 1, 2559.23, -1828.403, 10.51216, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+969 , 181016, 571, 1, 1, 2546.487, -1837.444, 10.57294, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+970 , 181016, 571, 1, 1, 2600.053, -1802.445, 10.64246, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+971 , 181016, 571, 1, 1, 2595.78, -1789.134, 10.64246, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+972 , 181016, 571, 1, 1, 2491.829, -1845.16, 10.7064, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+973 , 181016, 571, 1, 1, 2497.92, -1838.303, 10.55219, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+974 , 181016, 571, 1, 1, 2438.875, -1853.441, 1.204814, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+975 , 181016, 571, 1, 1, 2444.651, -1838.691, 1.022343, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4242) +(@OGUID+976 , 181016, 571, 1, 1, 2117.118, -2965.382, 148.6169, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4070) +(@OGUID+977 , 181016, 571, 1, 1, 2109.816, -2988.45, 148.3804, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4070) +(@OGUID+978 , 181016, 571, 1, 1, 2140.401, -2968.399, 148.3356, 4.433136, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+979 , 181016, 571, 1, 1, 2142.096, -2984.892, 148.9165, 1.937312, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+980 , 181016, 571, 1, 1, 1435.889, -3265.063, 178.2813, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+981 , 181016, 571, 1, 1, 1394.399, -3307.07, 166.7923, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+982 , 181016, 571, 1, 1, 1428.256, -3256.8, 165.615, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+983 , 181016, 571, 1, 1, 1408.13, -3251.247, 162.0143, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+984 , 181016, 571, 1, 1, 1401.351, -3262.329, 163.0069, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+985 , 181016, 571, 1, 1, 1370.036, -3334.958, 173.685, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+986 , 181016, 571, 1, 1, 1458.753, -3200.1, 165.5917, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4380) +(@OGUID+987 , 181016, 571, 1, 1, 1341.442, -3276.221, 174.6177, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4380) +(@OGUID+988 , 181016, 571, 1, 1, 1352.596, -3284.401, 174.7101, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4380) +(@OGUID+989 , 181016, 571, 1, 1, 1349.468, -3297.907, 174.7129, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4380) +(@OGUID+990 , 181016, 571, 1, 1, 1371.299, -3185.653, 162.8225, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4380) +(@OGUID+991 , 181016, 571, 1, 1, 1355.771, -3193.905, 162.8225, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+992 , 181016, 571, 1, 1, 1400.156, -3458.59, 174.5718, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+993 , 181016, 571, 1, 1, 1351.665, -3457.366, 175.9246, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+994 , 181016, 571, 1, 1, 1431.132, -3152.292, 164.8159, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4071) +(@OGUID+995 , 181016, 571, 1, 1, 1429.037, -3131.07, 167.7346, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+996 , 181016, 571, 1, 1, 1416.06, -3120.286, 167.5702, 4.34587, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+997 , 181016, 571, 1, 1, 1389.093, -3096.109, 167.4995, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3998) +(@OGUID+998 , 181016, 571, 1, 1, 765.1684, -2962.793, 9.955372, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+999 , 181016, 571, 1, 1, 784.9827, -2956.3, 8.627842, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1000, 181016, 571, 1, 1, 731.5729, -2945.844, 9.658432, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1001, 181016, 571, 1, 1, 807.6268, -2945.674, 6.90544, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1002, 181016, 571, 1, 1, 728.2534, -2936.78, 8.08532, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1003, 181016, 571, 1, 1, 726.3077, -2921.696, 7.548036, 6.073746, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1004, 181016, 571, 1, 1, 811.6979, -2925.72, 7.491168, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1005, 181016, 571, 1, 1, 738.8159, -2917.706, 7.83575, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1006, 181016, 571, 1, 1, 708.9809, -2939.207, -3.255977, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1007, 181016, 571, 1, 1, 733.0174, -2896.646, 7.161568, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1008, 181016, 571, 1, 1, 786.5696, -2895.316, 7.331877, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1009, 181016, 571, 1, 1, 706.6024, -2924.741, -3.165701, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3987) +(@OGUID+1010, 181016, 571, 1, 1, 785.3965, -2856.019, 4.484005, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3988) +(@OGUID+1011, 181016, 571, 1, 1, 775.6638, -2854.298, 4.683801, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3988) +(@OGUID+1012, 181016, 571, 1, 1, 785.8663, -2882.146, 4.527083, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3988) +(@OGUID+1013, 181016, 571, 1, 1, 400.0066, -4535.086, 246.1532, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1014, 181016, 571, 1, 1, 404.2422, -4538.7, 245.8211, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1015, 181016, 571, 1, 1, 434.1599, -4539.468, 245.8032, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1016, 181016, 571, 1, 1, 446.3067, -4559.884, 245.5032, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1017, 181016, 571, 1, 1, 403.795, -4652.395, 243.9677, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1018, 181016, 571, 1, 1, 412.7631, -4658.49, 246.6353, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1019, 181016, 571, 1, 1, 493.6993, -4605.006, 243.6478, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3991) +(@OGUID+1020, 181016, 571, 1, 1, 584.0461, -4934.744, 29.65519, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1021, 181016, 571, 1, 1, 577.2066, -4954.415, 18.2157, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1022, 181016, 571, 1, 1, 569.7136, -4931.643, 17.79272, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1023, 181016, 571, 1, 1, 569.194, -5003.27, 11.0998, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1024, 181016, 571, 1, 1, 540.1192, -4999.92, 10.53384, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4379) +(@OGUID+1025, 181016, 571, 1, 1, 563.828, -5017.783, 11.59005, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4379) +(@OGUID+1026, 181016, 571, 1, 1, 575.377, -5101.069, 5.191134, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1027, 181016, 571, 1, 1, 641.0491, -5019.355, 4.459393, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1028, 181016, 571, 1, 1, 604.1622, -5108.14, 4.842274, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3981) +(@OGUID+1029, 181016, 571, 1, 1, 1882.581, -6170.531, 23.82956, 0.8377575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4000) +(@OGUID+1030, 181016, 571, 1, 1, 1899.31, -6178.332, 24.02914, 1.151916, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4000) +(@OGUID+1031, 181016, 571, 1, 1, 1919.915, -6182.599, 24.47692, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4000) +(@OGUID+1032, 181016, 571, 1, 1, 1927.329, -6186.836, 24.11248, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4000) +(@OGUID+1033, 181016, 571, 1, 1, 2021.995, -6214.678, 7.750907, 2.094393, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4000) +(@OGUID+1034, 181016, 571, 1, 1, 2429.847, -5168.776, 277.1109, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1035, 181016, 571, 1, 1, 2429.503, -5159.25, 277.0016, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1036, 181016, 571, 1, 1, 2417.962, -5122.142, 276.594, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1037, 181016, 571, 1, 1, 2438.945, -5120.976, 275.9086, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1038, 181016, 571, 1, 1, 2476.26, -5072.812, 283.0372, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1039, 181016, 571, 1, 1, 2422.845, -5074.851, 272.2427, 0, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1040, 181016, 571, 1, 1, 2462.827, -5023.975, 283.7139, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1041, 181016, 571, 1, 1, 2464.117, -5036.913, 283.7561, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4003) +(@OGUID+1042, 181016, 571, 1, 1, 2657.285, -4403.338, 283.9217, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1043, 181016, 571, 1, 1, 2681.398, -4378.912, 282.9612, 1.989672, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1044, 181016, 571, 1, 1, 2642.45, -4384.394, 283.2693, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1045, 181016, 571, 1, 1, 2654.31, -4365.038, 277.5075, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1046, 181016, 571, 1, 1, 2681.611, -4385.324, 284.4337, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1047, 181016, 571, 1, 1, 2675.206, -4331.749, 289.7764, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1048, 181016, 571, 1, 1, 2620.654, -4361.461, 276.4902, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1049, 181016, 571, 1, 1, 3296.599, -736.467, 176.1194, 4.031712, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1050, 181016, 571, 1, 1, 3260.281, -749.4948, 168.42, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1051, 181016, 571, 1, 1, 3309.448, -746.7072, 179.006, 3.892087, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1052, 181016, 571, 1, 1, 3274.188, -755.2222, 168.0432, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1053, 181016, 571, 1, 1, 3261.053, -755.9268, 174.2897, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1054, 181016, 571, 1, 1, 3266.31, -712.2863, 172.5281, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1055, 181016, 571, 1, 1, 3270.005, -719.1215, 168.8549, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1056, 181016, 571, 1, 1, 3281.076, -720.5919, 175.8908, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1057, 181016, 571, 1, 1, 3257.232, -695.9045, 167.3684, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1058, 181016, 571, 1, 1, 3216.764, -730.0927, 173.64, 3.700105, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1059, 181016, 571, 1, 1, 3267.798, -689.1566, 173.7582, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1060, 181016, 571, 1, 1, 3254.467, -668.7876, 174.1768, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1061, 181016, 571, 1, 1, 3235.794, -713.0104, 167.6716, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1062, 181016, 571, 1, 1, 3249.678, -674.059, 167.3249, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1063, 181016, 571, 1, 1, 3209.856, -708.0291, 173.0501, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1064, 181016, 571, 1, 1, 3215.154, -685.1657, 174.8388, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1065, 181016, 571, 1, 1, 3216.414, -654.4945, 173.1659, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4232) +(@OGUID+1066, 181016, 571, 1, 1, 3201.649, -673.1436, 172.2877, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4186) +(@OGUID+1067, 181016, 571, 1, 1, 3202.44, -689.5214, 171.9362, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4186) +(@OGUID+1068, 181016, 571, 1, 1, 3632.087, -711.0179, 214.2405, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1069, 181016, 571, 1, 1, 3658.59, -706.5002, 224.446, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1070, 181016, 571, 1, 1, 3674.527, -739.8177, 213.8958, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1071, 181016, 571, 1, 1, 3649.295, -702.2972, 215.0318, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1072, 181016, 571, 1, 1, 3676.882, -702.1511, 214.3667, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1073, 181016, 571, 1, 1, 3704.834, -687.1371, 215.5728, 5.148723, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1074, 181016, 571, 1, 1, 3698.531, -714.2257, 214.151, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1075, 181016, 571, 1, 1, 3697.376, -742.7101, 213.797, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1076, 181016, 571, 1, 1, 3716.316, -708.1945, 215.473, 2.268925, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1077, 181016, 571, 1, 1, 3749.342, -769.8768, 197.4349, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1078, 181016, 571, 1, 1, 3781.028, -803.4545, 197.2077, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1079, 181016, 571, 1, 1, 3794.07, -804.0314, 197.3381, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1080, 181016, 571, 1, 1, 3826.776, -685.0971, 223.0013, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1081, 181016, 571, 1, 1, 3803.82, -793.8429, 197.2356, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1082, 181016, 571, 1, 1, 3843.911, -763.369, 219.3806, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1083, 181016, 571, 1, 1, 3822.775, -695.2535, 223.0013, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1084, 181016, 571, 1, 1, 3858.99, -724.03, 221.2304, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1085, 181016, 571, 1, 1, 3862.428, -745.8948, 221.1198, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1086, 181016, 571, 1, 1, 3866.354, -771.1376, 220.3779, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1087, 181016, 571, 1, 1, 3951.355, -780.9128, 244.63, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4177) +(@OGUID+1088, 181016, 571, 1, 1, 3548.806, 191.4957, 52.29362, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1089, 181016, 571, 1, 1, 3562.132, 193.3676, 52.28502, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1090, 181016, 571, 1, 1, 3563.86, 208.5335, 52.2564, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1091, 181016, 571, 1, 1, 3604.824, 221.3126, -120.0548, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1092, 181016, 571, 1, 1, 3543.596, 229.0154, 116.7898, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1093, 181016, 571, 1, 1, 3539.345, 210.2894, 116.8406, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1094, 181016, 571, 1, 1, 3576.012, 201.1324, -120.133, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1095, 181016, 571, 1, 1, 3542.329, 206.0333, 52.2564, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1096, 181016, 571, 1, 1, 3532.222, 198.4992, -120.1445, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1097, 181016, 571, 1, 1, 3565.379, 213.0888, 116.8406, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1098, 181016, 571, 1, 1, 3557.755, 230.3309, 116.7897, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1099, 181016, 571, 1, 1, 3501.747, 212.1927, -120.1452, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4254) +(@OGUID+1100, 181016, 571, 1, 1, 3579.191, 264.8907, 117.1309, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1101, 181016, 571, 1, 1, 3520.52, 258.9779, 47.3175, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1102, 181016, 571, 1, 1, 3535.776, 241.7472, 117.1205, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1103, 181016, 571, 1, 1, 3538.464, 244.5366, 47.31742, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1104, 181016, 571, 1, 1, 3575.862, 264.2621, 47.31741, 2.844883, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1105, 181016, 571, 1, 1, 3565.646, 245.8031, 117.1294, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1106, 181016, 571, 1, 1, 3561.06, 247.0676, 47.31746, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1107, 181016, 571, 1, 1, 3517.434, 257.0187, 117.1313, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1108, 181016, 571, 1, 1, 3597.307, 271.0546, -120.1526, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1109, 181016, 571, 1, 1, 3573.319, 287.2054, 47.31745, 3.630291, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1110, 181016, 571, 1, 1, 3477.063, 249.0635, -120.1415, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1111, 181016, 571, 1, 1, 3613.162, 267.1122, 52.27297, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1112, 181016, 571, 1, 1, 3518.373, 281.8263, 47.31754, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1113, 181016, 571, 1, 1, 3483.588, 254.1247, 52.26856, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1114, 181016, 571, 1, 1, 3480.771, 279.4473, 52.26998, 4.939284, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1115, 181016, 571, 1, 1, 3463.682, 274.7737, 52.29326, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1116, 181016, 571, 1, 1, 3559.003, 305.3416, 117.1257, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1117, 181016, 571, 1, 1, 3576.934, 290.0081, 117.1281, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1118, 181016, 571, 1, 1, 3610.144, 292.3628, 52.27081, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1119, 181016, 571, 1, 1, 3532.95, 299.9154, 47.31733, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1120, 181016, 571, 1, 1, 3514.207, 282.3757, 117.1297, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1121, 181016, 571, 1, 1, 3527.995, 301.947, 117.1261, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1122, 181016, 571, 1, 1, 3628.7, 289.4008, 52.28633, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1123, 181016, 571, 1, 1, 3555.46, 301.8236, 47.3174, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1124, 181016, 571, 1, 1, 3466.395, 254.6163, 52.29464, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1125, 181016, 571, 1, 1, 3630.185, 272.4107, 52.28997, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1126, 181016, 571, 1, 1, 3595.918, 285.1813, -120.1526, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1127, 181016, 571, 1, 1, 3535.763, 316.0141, 116.7898, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1128, 181016, 571, 1, 1, 3646.115, 260.8871, 52.25636, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1129, 181016, 571, 1, 1, 3471.14, 281.1834, -120.1448, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1130, 181016, 571, 1, 1, 3549.406, 317.3907, 116.7898, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1131, 181016, 571, 1, 1, 3592.655, 332.8689, -120.1448, 4.310966, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1132, 181016, 571, 1, 1, 3546.336, 351.4997, 52.27733, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1133, 181016, 571, 1, 1, 3551.697, 340.1284, 52.2564, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1134, 181016, 571, 1, 1, 3562.234, 345.9385, -120.1445, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1135, 181016, 571, 1, 1, 3515.109, 342.4366, -120.1445, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1136, 181016, 571, 1, 1, 3527.488, 332.789, 116.7998, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1137, 181016, 571, 1, 1, 3531.985, 349.9049, 52.27657, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1138, 181016, 571, 1, 1, 3492.134, 322.4423, -120.1445, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1139, 181016, 571, 1, 1, 3530.838, 337.9557, 52.25639, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1140, 181016, 571, 1, 1, 3553.869, 335.9773, 116.7962, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1141, 181016, 571, 1, 1, 3656.756, 292.7126, -120.1445, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1142, 181016, 571, 1, 1, 3639.994, 308.4146, 52.25637, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1143, 181016, 571, 1, 1, 3658.891, 275.3087, -120.1445, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1144, 181016, 571, 1, 1, 3675.714, 259.1941, 52.25635, 6.126106, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4161) +(@OGUID+1145, 181016, 571, 1, 1, 3833.705, 1420.332, 90.87871, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1146, 181016, 571, 1, 1, 3838.928, 1434.694, 90.64106, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1147, 181016, 571, 1, 1, 3847.046, 1434.552, 90.64103, 4.450591, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1148, 181016, 571, 1, 1, 3852.562, 1420.469, 90.91337, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1149, 181016, 571, 1, 1, 3826.221, 1467.968, 91.71698, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1150, 181016, 571, 1, 1, 3847.981, 1459.16, 91.84016, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1151, 181016, 571, 1, 1, 3856.728, 1468.202, 92.05556, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1152, 181016, 571, 1, 1, 3837.253, 1460.372, 91.84299, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1153, 181016, 571, 1, 1, 3827.208, 1483.951, 92.06059, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1154, 181016, 571, 1, 1, 3772.201, 1518.562, 87.60015, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1155, 181016, 571, 1, 1, 3826.889, 1531.865, 95.81321, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1156, 181016, 571, 1, 1, 3805.442, 1540.334, 89.73431, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1157, 181016, 571, 1, 1, 3842.612, 1551.831, 89.72446, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1158, 181016, 571, 1, 1, 3869.433, 1563.036, 89.7524, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1159, 181016, 571, 1, 1, 3828.599, 1550.87, 89.65501, 1.448622, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1160, 181016, 571, 1, 1, 3857.379, 1532.047, 95.73104, 2.007128, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1161, 181016, 571, 1, 1, 3856.719, 1587.243, 89.60239, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1162, 181016, 571, 1, 1, 3799.489, 1569.15, 89.72446, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1163, 181016, 571, 1, 1, 3763.406, 1539.296, 87.04375, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1164, 181016, 571, 1, 1, 3807.621, 1601.288, 89.72446, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1165, 181016, 571, 1, 1, 3825.676, 1611.223, 89.72446, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1166, 181016, 571, 1, 1, 3873.578, 1603.196, 90.13206, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1167, 181016, 571, 1, 1, 3853.099, 1601.293, 89.72446, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1168, 181016, 571, 1, 1, 3804.344, 1618.123, 89.31889, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1169, 181016, 571, 1, 1, 3781.226, 1617.937, 87.15925, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4165) +(@OGUID+1170, 181016, 571, 1, 1, 3515.828, 1981.839, 64.86245, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4158) +(@OGUID+1171, 181016, 571, 1, 1, 3533.275, 2028.212, 67.83712, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4158) +(@OGUID+1172, 181016, 571, 1, 1, 3487.095, 1996.391, 64.86275, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4158) +(@OGUID+1173, 181016, 571, 1, 1, 3503.747, 2013.127, 64.86234, 3.403396, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4158) +(@OGUID+1174, 181016, 571, 1, 1, 3463.338, 1991.168, 64.61589, 0.1919852, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4158) +(@OGUID+1175, 181016, 571, 1, 1, 2795.232, 971.2288, 22.84727, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4154) +(@OGUID+1176, 181016, 571, 1, 1, 2784.236, 959.4688, 22.49838, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4154) +(@OGUID+1177, 181016, 571, 1, 1, 2793.773, 931.6573, 22.35705, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1178, 181016, 571, 1, 1, 2772.131, 928.7278, 22.78977, 0.7330382, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1179, 181016, 571, 1, 1, 2781.197, 933.6979, 22.78251, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1180, 181016, 571, 1, 1, 2731.755, 930.2222, 0.360353, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1181, 181016, 571, 1, 1, 2815.472, 918.7995, 20.88776, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1182, 181016, 571, 1, 1, 2801.712, 908.5086, 22.29059, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1183, 181016, 571, 1, 1, 2754.224, 894.7058, 5.906912, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1184, 181016, 571, 1, 1, 2771.326, 914.0045, 22.36399, 5.619962, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1185, 181016, 571, 1, 1, 2787.118, 905.9583, 22.15631, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1186, 181016, 571, 1, 1, 2802.756, 890.1584, 12.88576, 4.97419, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1187, 181016, 571, 1, 1, 2837.893, 884.1483, 15.9367, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1188, 181016, 571, 1, 1, 2720.492, 904.6319, 5.697, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1189, 181016, 571, 1, 1, 2763.372, 862.8993, 6.277842, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1190, 181016, 571, 1, 1, 2722.365, 888.5219, 5.181851, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1191, 181016, 571, 1, 1, 2743.732, 851.4514, 6.691175, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1192, 181016, 571, 1, 1, 2645.363, 884.6476, 4.748452, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1193, 181016, 571, 1, 1, 2659.202, 906.3993, 4.293646, 4.852017, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1194, 181016, 571, 1, 1, 2643.082, 897.5799, 4.501051, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1195, 181016, 571, 1, 1, 2663.845, 880.2552, 4.281791, 1.850049, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4152) +(@OGUID+1196, 181016, 571, 1, 1, 4462.361, 1266.483, 142.2847, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1197, 181016, 571, 1, 1, 4469.088, 1267.642, 141.8956, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1198, 181016, 571, 1, 1, 4528.026, 1252.006, 139.5977, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1199, 181016, 571, 1, 1, 4515.189, 1271.205, 137.7116, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1200, 181016, 571, 1, 1, 4866.249, 1289.011, 222.6894, 3.735006, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1201, 181016, 571, 1, 1, 4908.99, 1241.123, 226.8822, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1202, 181016, 571, 1, 1, 4896.076, 1252.84, 227.6416, 0.2443456, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1203, 181016, 571, 1, 1, 4925.459, 1257.523, 226.8904, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1204, 181016, 571, 1, 1, 4919.086, 1318.598, 229.563, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1205, 181016, 571, 1, 1, 4950.565, 1309.806, 235.062, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1206, 181016, 571, 1, 1, 4948.565, 1174.379, 239.7921, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1207, 181016, 571, 1, 1, 4956.751, 1164.542, 239.6501, 4.258607, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1208, 181016, 571, 1, 1, 4967.222, 1205.661, 227.3895, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1209, 181016, 571, 1, 1, 4958.919, 1196.348, 226.8051, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1210, 181016, 571, 1, 1, 4978.83, 1243.004, 227.4904, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1211, 181016, 571, 1, 1, 4980.446, 1205.421, 227.7068, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1212, 181016, 571, 1, 1, 4986.674, 1189.043, 227.4761, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1213, 181016, 571, 1, 1, 5003.663, 1190.19, 227.3823, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1214, 181016, 571, 1, 1, 4985.378, 1269.712, 229.3461, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1215, 181016, 571, 1, 1, 5019.801, 1236.83, 230.0975, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4170) +(@OGUID+1216, 181016, 571, 1, 1, 4692.931, 1529.158, 261.0022, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1217, 181016, 571, 1, 1, 4690.823, 1517.44, 261.1075, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4171) +(@OGUID+1218, 181016, 571, 1, 1, 3437.819, 4086.14, 17.09811, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4042) +(@OGUID+1219, 181016, 571, 1, 1, 3426.033, 4071.888, 18.0825, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4042) +(@OGUID+1220, 181016, 571, 1, 1, 3409.352, 4091.084, 18.57693, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4042) +(@OGUID+1221, 181016, 571, 1, 1, 3473.787, 4089.247, 17.13011, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4042) +(@OGUID+1222, 181016, 571, 1, 1, 3458.691, 4082.395, 17.32234, 0.4537851, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4042) +(@OGUID+1223, 181016, 571, 1, 1, 3469.884, 4115.7, 16.70656, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4043) +(@OGUID+1224, 181016, 571, 1, 1, 3429.658, 4124.901, 16.82856, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4043) +(@OGUID+1225, 181016, 571, 1, 1, 3419, 4110.042, 17.55773, 6.021387, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4043) +(@OGUID+1226, 181016, 571, 1, 1, 3455.853, 4140.363, 15.27709, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1227, 181016, 571, 1, 1, 3468.707, 4138.945, 15.28419, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1228, 181016, 571, 1, 1, 3484.245, 4164.788, 17.17531, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1229, 181016, 571, 1, 1, 3472.248, 4185.592, 18.24646, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1230, 181016, 571, 1, 1, 3460.45, 4186.23, 18.21275, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1231, 181016, 571, 1, 1, 3484.917, 4176.376, 17.19302, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1232, 181016, 571, 1, 1, 3445, 4178.582, 17.15816, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1233, 181016, 571, 1, 1, 3444.581, 4167.645, 17.16287, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4037) +(@OGUID+1234, 181016, 571, 1, 1, 2998.711, 4070.604, 26.91523, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1235, 181016, 571, 1, 1, 2997.857, 4049.579, 26.61824, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1236, 181016, 571, 1, 1, 3008.427, 4048.363, 26.36823, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1237, 181016, 571, 1, 1, 3017.189, 4065.652, 26.77533, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1238, 181016, 571, 1, 1, 2910.194, 4046.256, 1.670829, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1239, 181016, 571, 1, 1, 2899.832, 4067.156, 1.7923, 6.0912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1240, 181016, 571, 1, 1, 2922.883, 4037.388, 1.768461, 1.483528, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1241, 181016, 571, 1, 1, 2904.64, 4073.7, 1.964231, 4.904376, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1242, 181016, 571, 1, 1, 2927.117, 4077.872, 2.141783, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4113) +(@OGUID+1243, 181016, 571, 1, 1, 2238.36, 5132.744, 5.344914, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1244, 181016, 571, 1, 1, 2226.791, 5136.915, 5.344575, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1245, 181016, 571, 1, 1, 2352.742, 5196.42, 7.632045, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1246, 181016, 571, 1, 1, 2248.404, 5206.861, 14.71353, 0.5235979, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1247, 181016, 571, 1, 1, 2238.517, 5180.176, 14.71353, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1248, 181016, 571, 1, 1, 2207.053, 5222.542, 14.10005, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1249, 181016, 571, 1, 1, 2255.31, 5225.856, 14.71353, 5.93412, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1250, 181016, 571, 1, 1, 2302.698, 5237.8, 11.3397, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1251, 181016, 571, 1, 1, 2366.833, 5211.396, 7.632044, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1252, 181016, 571, 1, 1, 2214.695, 5241.333, 14.10005, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1253, 181016, 571, 1, 1, 2276.32, 5282.166, 15.66975, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1254, 181016, 571, 1, 1, 2234.987, 5298.379, 15.05626, 2.687807, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1255, 181016, 571, 1, 1, 2187.269, 5257.097, 23.37515, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1256, 181016, 571, 1, 1, 2192.255, 5270.982, 24.45937, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1257, 181016, 571, 1, 1, 2288.013, 5313.147, 14.71353, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1258, 181016, 571, 1, 1, 2213.95, 5333.778, 23.37515, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1259, 181016, 571, 1, 1, 2197.986, 5288.558, 24.45936, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1260, 181016, 571, 1, 1, 2202.939, 5302.733, 23.37515, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1261, 181016, 571, 1, 1, 2208.51, 5319.641, 23.37515, 2.897245, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1262, 181016, 571, 1, 1, 2151.343, 5284.071, 24.66521, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1263, 181016, 571, 1, 1, 2157.476, 5301.414, 24.66485, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1264, 181016, 571, 1, 1, 2122.561, 5320.263, 32.77589, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1265, 181016, 571, 1, 1, 2112.85, 5291.524, 32.77574, 1.239183, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4032) +(@OGUID+1266, 181016, 571, 1, 1, 2805.134, 6135.274, 84.65132, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1267, 181016, 571, 1, 1, 2788.66, 6162.68, 84.8553, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1268, 181016, 571, 1, 1, 2823.609, 6165.092, 121.9373, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1269, 181016, 571, 1, 1, 2815.305, 6174.101, 121.9518, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1270, 181016, 571, 1, 1, 2799.835, 6186.328, 84.08407, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1271, 181016, 571, 1, 1, 2876.308, 6204.336, 208.7393, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1272, 181016, 571, 1, 1, 2860.569, 6221.081, 208.7375, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1273, 181016, 571, 1, 1, 2861.186, 6199.252, 208.7366, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1274, 181016, 571, 1, 1, 2853.404, 6207.334, 208.7359, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1275, 181016, 571, 1, 1, 2888.891, 6247.602, 208.8507, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1276, 181016, 571, 1, 1, 2902.97, 6231.561, 208.8656, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1277, 181016, 571, 1, 1, 2899.378, 6242.913, 208.8885, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1278, 181016, 571, 1, 1, 2892.682, 6263.139, 209.0361, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1279, 181016, 571, 1, 1, 2922.968, 6238.53, 208.9055, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4129) +(@OGUID+1280, 181016, 571, 1, 1, 3521.802, 5957.627, 134.0744, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1281, 181016, 571, 1, 1, 3519.409, 5943.527, 134.4016, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1282, 181016, 571, 1, 1, 3584.385, 5975.644, 136.2158, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1283, 181016, 571, 1, 1, 3624.637, 5926.569, 136.2162, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1284, 181016, 571, 1, 1, 3623.188, 5947.213, 136.2162, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1285, 181016, 571, 1, 1, 3612.38, 5919.877, 136.0995, 1.954769, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1286, 181016, 571, 1, 1, 3605.886, 5989.136, 136.2162, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1287, 181016, 571, 1, 1, 3633.385, 5887.483, 140.0765, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1288, 181016, 571, 1, 1, 3647.803, 5882.226, 174.4943, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4023) +(@OGUID+1289, 181016, 571, 1, 1, 4047.685, 5298.593, 24.65438, 2.408554, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1290, 181016, 571, 1, 1, 4079.892, 5272.371, 27.84729, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1291, 181016, 571, 1, 1, 4174.55, 5310.481, 25.4746, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1292, 181016, 571, 1, 1, 4124.854, 5302.798, 29.50037, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1293, 181016, 571, 1, 1, 4166.071, 5288.284, 26.37672, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1294, 181016, 571, 1, 1, 4064.177, 5287.178, 28.33383, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1295, 181016, 571, 1, 1, 4038.373, 5295.928, 24.80445, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1296, 181016, 571, 1, 1, 4133.651, 5261.081, 25.0436, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4108) +(@OGUID+1297, 181016, 571, 1, 1, 4116.859, 5260.454, 24.72842, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4108) +(@OGUID+1298, 181016, 571, 1, 1, 4188.307, 5253.252, 26.37672, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4108) +(@OGUID+1299, 181016, 571, 1, 1, 4203.514, 5258.505, 32.30191, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4108) +(@OGUID+1300, 181016, 571, 1, 1, 4245.934, 5261.749, 70.84612, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4108) +(@OGUID+1301, 181016, 571, 1, 1, 4464.801, 5710.149, 81.19541, 0.4886912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1302, 181016, 571, 1, 1, 4474.953, 5701.296, 81.26831, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1303, 181016, 571, 1, 1, 4504.061, 5681.631, 81.48656, 3.543024, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1304, 181016, 571, 1, 1, 4496.206, 5716.174, 81.43398, 1.221729, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1305, 181016, 571, 1, 1, 4503.089, 5725.708, 81.28325, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1306, 181016, 571, 1, 1, 4518.926, 5710.135, 81.47955, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1307, 181016, 571, 1, 1, 4509.733, 5758.892, 81.67448, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4122) +(@OGUID+1308, 181016, 571, 1, 1, 5533.617, 5764.573, -78.64155, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1309, 181016, 571, 1, 1, 5538.608, 5734.042, -76.70612, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1310, 181016, 571, 1, 1, 5581.773, 5765.792, -74.64859, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1311, 181016, 571, 1, 1, 5565.491, 5758.583, -75.22591, 5.794494, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1312, 181016, 571, 1, 1, 5590.33, 5779.955, -71.88873, 5.67232, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1313, 181016, 571, 1, 1, 5591.747, 5812.308, -69.85215, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1314, 181016, 571, 1, 1, 5547.863, 5726.392, -76.03914, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4285) +(@OGUID+1315, 181016, 571, 1, 1, 5594.934, 5715.648, -72.77393, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4284) +(@OGUID+1316, 181016, 571, 1, 1, 5575.626, 5710.971, -76.69463, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4284) +(@OGUID+1317, 181016, 571, 1, 1, 5584.725, 5752.109, -72.06274, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4284) +(@OGUID+1318, 181016, 571, 1, 1, 5609.327, 5807.859, -70.49896, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4284) +(@OGUID+1319, 181016, 571, 1, 1, 5623.018, 5797.692, -71.15307, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4284) +(@OGUID+1320, 181016, 571, 1, 1, 5480.522, 4749.844, -197.1695, 5.654869, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4290) +(@OGUID+1321, 181016, 571, 1, 1, 5499.655, 4733.096, -194.545, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4290) +(@OGUID+1322, 181016, 571, 1, 1, 5480.355, 4744.158, -196.4283, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4290) +(@OGUID+1323, 181016, 571, 1, 1, 5489.249, 4730.626, -194.7575, 1.186823, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4290) +(@OGUID+1324, 181016, 571, 1, 1, 5478.019, 4730.707, -195.1084, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4290) +(@OGUID+1325, 181016, 571, 1, 1, 8436.615, -338.5281, 906.6075, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4436) +(@OGUID+1326, 181016, 571, 1, 1, 8477.151, -325.8229, 905.8746, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4436) +(@OGUID+1327, 181016, 571, 1, 1, 8442.052, -343.1962, 906.6075, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4436) +(@OGUID+1328, 181016, 571, 1, 1, 8471.394, -348.3333, 906.9317, 1.815142, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4436) +(@OGUID+1329, 181016, 571, 1, 1, 7856.442, -742.1389, 1177.688, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1330, 181016, 571, 1, 1, 7879.499, -759.5701, 1175.366, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1331, 181016, 571, 1, 1, 7850.471, -793.3299, 1183.955, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1332, 181016, 530, 1, 1, -1907.199, 5450.696, -12.42813, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1333, 181016, 530, 1, 1, -1917.352, 5455.052, -12.55365, 5.096362, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1334, 181016, 530, 1, 1, -1911.368, 5439.292, -12.42818, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1335, 181016, 530, 1, 1, -1885.166, 5386.202, -12.42817, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1336, 181016, 530, 1, 1, -1873.54, 5382.65, -12.42811, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1337, 181016, 530, 1, 1, -1815.917, 5420.624, -12.42818, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1338, 181016, 530, 1, 1, -1819.924, 5409.16, -12.42813, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1339, 181016, 530, 1, 1, -1727.312, 5487.572, -8.355326, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1340, 181016, 530, 1, 1, -1735.256, 5502.995, -8.428672, 6.19592, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1341, 181016, 530, 1, 1, -1695.612, 5498.583, -9.799444, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1342, 181016, 530, 1, 1, -1706.805, 5522.744, -9.799464, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3703) +(@OGUID+1343, 181016, 530, 1, 1, -1745.647, 5142.983, -37.22771, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3899) +(@OGUID+1344, 181016, 530, 1, 1, -1758.525, 5138.586, -37.21199, 2.809975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3899) +(@OGUID+1345, 181016, 530, 1, 1, -1775.782, 5170.78, -40.20916, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3899) +(@OGUID+1346, 181016, 530, 1, 1, -2042.056, 5233.834, -38.8555, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1347, 181016, 530, 1, 1, -2050.452, 5241.551, -38.85723, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1348, 181016, 530, 1, 1, -2061.054, 5250.36, -38.46526, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1349, 181016, 530, 1, 1, -2021.757, 5336.417, -9.350949, 0.9599299, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1350, 181016, 530, 1, 1, -2034.004, 5359.76, -9.350951, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1351, 181016, 530, 1, 1, -2001.405, 5370.284, -8.034398, 3.961899, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1352, 181016, 530, 1, 1, -2171.618, 5399.994, 50.22791, 0.6283169, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1353, 181016, 530, 1, 1, -1994.435, 5356.163, -8.067644, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1354, 181016, 530, 1, 1, -2024.566, 5470.972, 3.928363, 5.98648, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1355, 181016, 530, 1, 1, -2032.695, 5481.466, 54.53995, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1356, 181016, 530, 1, 1, -2029.916, 5490.481, 54.53994, 4.363324, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1357, 181016, 530, 1, 1, -2016.837, 5494.008, 3.808645, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1358, 181016, 530, 1, 1, -2145.284, 5497.773, 51.2669, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1359, 181016, 530, 1, 1, -2176.784, 5413.221, 50.22791, 0.4188786, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3898) +(@OGUID+1360, 181016, 530, 1, 1, -2167.578, 5441.844, 51.2669, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3898) +(@OGUID+1361, 181016, 530, 1, 1, -2185.163, 5454.922, 51.2669, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1362, 181016, 530, 1, 1, -1802.705, 5597.75, 130.8119, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1363, 181016, 530, 1, 1, -1811.717, 5600.768, 130.8119, 5.811947, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1364, 181016, 530, 1, 1, -1798.486, 5585.74, 3.878141, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1365, 181016, 530, 1, 1, -1822.766, 5593.826, 3.894919, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1366, 181016, 530, 1, 1, -1791.788, 5726.31, 129.1411, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1367, 181016, 530, 1, 1, -1780.283, 5739.229, 128.7909, 5.061456, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1368, 181016, 530, 1, 1, -1745.379, 5726.958, 128.7801, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1369, 181016, 530, 1, 1, -1743.729, 5710.51, 129.1411, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1370, 181016, 530, 1, 1, -1864.92, 5715.607, 132.2513, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1371, 181016, 530, 1, 1, -1844.504, 5746.667, 130.7976, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1372, 181016, 530, 1, 1, -1886.932, 5771.139, 129.5579, 5.881761, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1373, 181016, 530, 1, 1, -1846.261, 5773.022, 131.2068, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1374, 181016, 530, 1, 1, -1917.616, 5746.094, 131.1787, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1375, 181016, 530, 1, 1, -1893.715, 5757.046, 129.482, 0.3665176, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1376, 181016, 530, 1, 1, -1888.447, 5716.592, 132.1732, 1.117009, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1377, 181016, 530, 1, 1, -1904.28, 5729.601, 131.1909, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1378, 181016, 530, 1, 1, -1993.964, 5686.367, 117.6628, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1379, 181016, 530, 1, 1, -1990.117, 5678.112, 117.6628, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1380, 181016, 530, 1, 1, -2545.219, 4312.679, 20.62585, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1381, 181016, 530, 1, 1, -2558.318, 4305.626, 20.76239, 5.759588, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1382, 181016, 530, 1, 1, -2623.644, 4378.721, 35.27359, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1383, 181016, 530, 1, 1, -2611.685, 4383.334, 32.93204, 2.583081, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1384, 181016, 530, 1, 1, -2569.438, 4420.438, 39.15441, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1385, 181016, 530, 1, 1, -2617.922, 4427.623, 36.09334, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1386, 181016, 530, 1, 1, -2631.962, 4428.709, 36.10242, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1387, 181016, 530, 1, 1, -2614.487, 4456.502, 36.09352, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1388, 181016, 530, 1, 1, -2624.518, 4467.333, 36.14123, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1389, 181016, 530, 1, 1, -2666.818, 4443.57, 36.34382, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1390, 181016, 530, 1, 1, -2667.306, 4424.93, 37.06041, 6.230826, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3683) +(@OGUID+1391, 181016, 530, 1, 1, -2966.667, 4073.203, 2.960989, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1392, 181016, 530, 1, 1, -2924.175, 4014.802, 0.424108, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1393, 181016, 530, 1, 1, -2904.558, 4017.979, 0.378337, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1394, 181016, 530, 1, 1, -2926.811, 4019.083, 0.413682, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1395, 181016, 530, 1, 1, -2942.975, 3949.947, 0.906697, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1396, 181016, 530, 1, 1, -2987.699, 3860.738, 8.660349, 1.308995, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1397, 181016, 530, 1, 1, -2956.34, 3907.056, 3.423482, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1398, 181016, 530, 1, 1, -2943.432, 3903.176, 3.423485, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1399, 181016, 530, 1, 1, -2975.988, 3877.033, 9.545059, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3684) +(@OGUID+1400, 181016, 530, 1, 1, -3031.269, 2631.006, 76.54335, 4.485497, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1401, 181016, 530, 1, 1, -3081.042, 2598.579, 61.74963, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1402, 181016, 530, 1, 1, -2932.842, 2657.233, 94.24632, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1403, 181016, 530, 1, 1, -3065.579, 2555.547, 65.75816, 3.752462, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1404, 181016, 530, 1, 1, -3104.677, 2582.695, 61.977, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1405, 181016, 530, 1, 1, -3107.003, 2545.114, 62.05597, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1406, 181016, 530, 1, 1, -3006.598, 2549.313, 78.11643, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1407, 181016, 530, 1, 1, -3052.811, 2481.651, 66.65688, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1408, 181016, 530, 1, 1, -2979.335, 2554.049, 76.54335, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1409, 181016, 530, 1, 1, -2986.574, 2565.178, 76.54335, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1410, 181016, 530, 1, 1, -2956.544, 2554.592, 126.6191, 2.740162, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1411, 181016, 530, 1, 1, -2970.731, 2573.003, 76.54335, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1412, 181016, 530, 1, 1, -2921.617, 2644.625, 94.40192, 3.351047, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3744) +(@OGUID+1413, 181016, 530, 1, 1, -3930.809, 2115.148, 96.81004, 3.508117, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1414, 181016, 530, 1, 1, -3984.704, 2162.162, 105.4418, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1415, 181016, 530, 1, 1, -3948.719, 2165.375, 100.8409, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1416, 181016, 530, 1, 1, -3981.395, 2150.587, 105.0282, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1417, 181016, 530, 1, 1, -3966.465, 2185.426, 101.8951, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1418, 181016, 530, 1, 1, -4008.345, 2172.325, 105.0965, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1419, 181016, 530, 1, 1, -4026.63, 2188.58, 109.1173, 2.251473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1420, 181016, 530, 1, 1, -4035.944, 2238.973, 112.2723, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1421, 181016, 530, 1, 1, -4047.156, 2228.053, 112.0462, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1422, 181016, 530, 1, 1, -4062.359, 2190.83, 109.8543, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3745) +(@OGUID+1423, 181016, 530, 1, 1, -4130.572, 1173.389, 49.58154, 5.777041, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1424, 181016, 530, 1, 1, -4084.195, 1138.926, 44.43298, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1425, 181016, 530, 1, 1, -4065.08, 1138.295, 43.1756, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1426, 181016, 530, 1, 1, -4088.488, 1139.846, 44.42666, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1427, 181016, 530, 1, 1, -4135.374, 1128.675, 54.58289, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1428, 181016, 530, 1, 1, -4112.096, 1121.578, 44.54679, 5.288348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1429, 181016, 530, 1, 1, -4062.444, 1135.474, 43.18277, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1430, 181016, 530, 1, 1, -4114.819, 1116.677, 44.53127, 0.1745321, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3929) +(@OGUID+1431, 181016, 530, 1, 1, -3080.772, 825.7006, -11.35703, 1.029743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1432, 181016, 530, 1, 1, -3055.614, 812.4755, -9.506436, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1433, 181016, 530, 1, 1, -3075.424, 858.7751, -20.02081, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1434, 181016, 530, 1, 1, -3079.415, 748.1234, -10.33996, 6.248279, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1435, 181016, 530, 1, 1, -3089.802, 837.7723, -19.92381, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1436, 181016, 530, 1, 1, -3061.827, 853.1981, -11.37245, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1437, 181016, 530, 1, 1, -3040.775, 806.6836, -9.706291, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1438, 181016, 530, 1, 1, -3012.275, 861.4301, -10.48986, 4.01426, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1439, 181016, 530, 1, 1, -3007.626, 853.5888, -10.48604, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1440, 181016, 530, 1, 1, -3016.658, 795.0476, -9.916844, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1441, 181016, 530, 1, 1, -3028.215, 823.3273, -9.546359, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1442, 181016, 530, 1, 1, -3009.987, 803.8392, -10.3957, 2.722713, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1443, 181016, 530, 1, 1, -3041.075, 832.1203, -9.484895, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1444, 181016, 530, 1, 1, -2983.705, 809.1548, -6.9079, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1445, 181016, 530, 1, 1, -3010.563, 770.086, -6.933084, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1446, 181016, 530, 1, 1, -2983.507, 869.4686, -7.479865, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3754) +(@OGUID+1447, 181016, 530, 1, 1, -717.8087, 2647.749, 93.05632, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1448, 181016, 530, 1, 1, -720.9301, 2658.757, 93.7806, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1449, 181016, 530, 1, 1, -695.8323, 2638.751, 90.97626, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1450, 181016, 530, 1, 1, -708.6624, 2640.041, 91.84985, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1451, 181016, 530, 1, 1, -702.0106, 2676.552, 93.48396, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1452, 181016, 530, 1, 1, -714.3968, 2671.541, 93.92791, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1453, 181016, 530, 1, 1, -690.535, 2673.585, 92.20389, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1454, 181016, 530, 1, 1, -684.1902, 2664.04, 90.97864, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1455, 181016, 530, 1, 1, -685.2488, 2644.338, 90.4667, 5.462882, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1456, 181016, 530, 1, 1, -681.7703, 2653.848, 90.5937, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1457, 181016, 530, 1, 1, -699.3879, 2717.673, 94.73693, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3538) +(@OGUID+1458, 181016, 530, 1, 1, 41.7532, 2675.019, 78.98357, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1459, 181016, 530, 1, 1, 49.26655, 2658.362, 78.4103, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1460, 181016, 530, 1, 1, 168.2221, 2632.726, 86.68047, 2.600535, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1461, 181016, 530, 1, 1, 177.3938, 2641.12, 87.18604, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1462, 181016, 530, 1, 1, 184.4233, 2683.703, 88.28799, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1463, 181016, 530, 1, 1, 182.2488, 2695.313, 88.79645, 3.47321, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1464, 181016, 530, 1, 1, 202.2809, 2606.497, 87.28353, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1465, 181016, 530, 1, 1, 193.15, 2600.053, 87.28353, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1466, 181016, 530, 1, 1, 293.5556, 2757.308, 85.24716, 0.9773831, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1467, 181016, 530, 1, 1, 277.2957, 2769.554, 84.67036, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1468, 181016, 530, 1, 1, 123.4488, 2766.59, 102.234, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1469, 181016, 530, 1, 1, 211.9928, 2818.017, 129.8682, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1470, 181016, 530, 1, 1, 215.5181, 2828.05, 130.0014, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1471, 181016, 530, 1, 1, 223.0891, 2810.249, 129.6152, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3536) +(@OGUID+1472, 181016, 530, 1, 1, 140.73, 4269.448, 107.4208, 2.024579, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1473, 181016, 530, 1, 1, 82.60951, 4318.784, 102.0311, 0.383971, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1474, 181016, 530, 1, 1, 147.9486, 4275.235, 107.2797, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1475, 181016, 530, 1, 1, 136.032, 4345.664, 106.6182, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1476, 181016, 530, 1, 1, 152.2135, 4318.471, 106.2541, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1477, 181016, 530, 1, 1, 80.49339, 4347.601, 102.071, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1478, 181016, 530, 1, 1, 134.9947, 4319.371, 106.7541, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1479, 181016, 530, 1, 1, 151.8665, 4348.405, 107.2158, 3.071766, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1480, 181016, 530, 1, 1, 181.2025, 4317.459, 119.9638, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1481, 181016, 530, 1, 1, 181.4662, 4350.056, 119.962, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1482, 181016, 530, 1, 1, 196.4538, 4339.529, 116.9748, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1483, 181016, 530, 1, 1, 196.2876, 4328.141, 116.8841, 2.548179, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3552) +(@OGUID+1484, 181016, 530, 1, 1, -208.6328, 5388.645, 22.92735, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3521) +(@OGUID+1485, 181016, 530, 1, 1, -236.2242, 5387.014, 24.6395, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3521) +(@OGUID+1486, 181016, 530, 1, 1, -210.9873, 5433.489, 21.37882, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3521) +(@OGUID+1487, 181016, 530, 1, 1, -212.93, 5473.045, 22.87997, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1488, 181016, 530, 1, 1, -324.4565, 5466.785, 22.66969, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1489, 181016, 530, 1, 1, -306.1548, 5479.317, 22.28877, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1490, 181016, 530, 1, 1, -253.026, 5481.032, 24.94352, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1491, 181016, 530, 1, 1, -344.9888, 5492.374, 22.00702, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1492, 181016, 530, 1, 1, -196.088, 5525.092, 22.81344, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1493, 181016, 530, 1, 1, -213.9051, 5547.442, 24.07233, 3.57793, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1494, 181016, 530, 1, 1, -192.6228, 5531.502, 29.45192, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1495, 181016, 530, 1, 1, -184.6291, 5506.406, 29.47097, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1496, 181016, 530, 1, 1, -192.4105, 5510.174, 22.67085, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1497, 181016, 530, 1, 1, -87.59586, 5535.549, 22.80703, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1498, 181016, 530, 1, 1, -87.05946, 5555.918, 22.68842, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1499, 181016, 530, 1, 1, -149.7903, 5567.248, 23.00511, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1500, 181016, 530, 1, 1, -145.6747, 5545.872, 22.66767, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3565) +(@OGUID+1501, 181016, 530, 1, 1, 278.5881, 5966.778, 150.1677, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1502, 181016, 530, 1, 1, 272.3167, 5944.75, 26.52184, 5.270896, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1503, 181016, 530, 1, 1, 298.2953, 5957.52, 26.42815, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1504, 181016, 530, 1, 1, 269.9623, 5956.735, 26.43292, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1505, 181016, 530, 1, 1, 296.5285, 5941.624, 26.55748, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1506, 181016, 530, 1, 1, 280.785, 6008.137, 144.7295, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1507, 181016, 530, 1, 1, 261.4174, 5980.111, 132.9563, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1508, 181016, 530, 1, 1, 301.7136, 5979.073, 132.4598, 4.782203, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1509, 181016, 530, 1, 1, 222.1361, 6049.518, 148.3132, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1510, 181016, 530, 1, 1, 307.1656, 6055.835, 131.5718, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1511, 181016, 530, 1, 1, 208.3886, 6049.729, 148.32, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1512, 181016, 530, 1, 1, 290.4184, 6083.181, 131.5468, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1513, 181016, 530, 1, 1, 227.5588, 6070.599, 148.3118, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1514, 181016, 530, 1, 1, 275.337, 6082.517, 131.545, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1515, 181016, 530, 1, 1, 217.2829, 6078.526, 148.3125, 1.710422, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3644) +(@OGUID+1516, 181016, 530, 1, 1, 276.2028, 6122.649, 142.509, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1517, 181016, 530, 1, 1, 210.443, 7810.77, 23.8272, 1.099556, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1518, 181016, 530, 1, 1, 229.981, 7821.426, 21.9932, 3.001947, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1519, 181016, 530, 1, 1, 253.7596, 7836.7, 22.96672, 5.078908, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1520, 181016, 530, 1, 1, 293.3064, 7831.16, 24.93296, 4.415683, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1521, 181016, 530, 1, 1, 287.7669, 7842.643, 22.58914, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1522, 181016, 530, 1, 1, 238.5979, 7893.07, 21.80824, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1523, 181016, 530, 1, 1, 334.9908, 7839.56, 22.29418, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1524, 181016, 530, 1, 1, 250.3989, 7896.925, 21.68546, 4.590216, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1525, 181016, 530, 1, 1, 261.7739, 7872.234, 23.73318, 5.113817, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1526, 181016, 530, 1, 1, 210.8226, 7926.406, 25.6933, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1527, 181016, 530, 1, 1, 247.4571, 7941.143, 25.69258, 3.612838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1528, 181016, 530, 1, 1, 285.1593, 7952.144, 21.52511, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1529, 181016, 530, 1, 1, 276.1272, 7957.609, 21.57661, 4.32842, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3645) +(@OGUID+1530, 181016, 530, 1, 1, 201.9845, 8489.734, 24.44587, 0.6457717, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3656) +(@OGUID+1531, 181016, 530, 1, 1, 253.3038, 8489.067, 23.37944, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3656) +(@OGUID+1532, 181016, 530, 1, 1, 265.287, 8514.346, 23.52993, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3656) +(@OGUID+1533, 181016, 530, 1, 1, 223.5183, 8562.453, 23.26412, 4.293513, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3649) +(@OGUID+1534, 181016, 530, 1, 1, -1207.967, 7386.663, 31.42567, 2.321287, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1535, 181016, 530, 1, 1, -1220.264, 7388.16, 30.78928, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1536, 181016, 530, 1, 1, -1265.508, 7313.129, 34.21532, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1537, 181016, 530, 1, 1, -1184.679, 7246.92, 35.14313, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1538, 181016, 530, 1, 1, -1198.807, 7250.11, 35.15434, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1539, 181016, 530, 1, 1, -1273.831, 7316.673, 33.7791, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1540, 181016, 530, 1, 1, -1221.305, 7222.463, 59.25886, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1541, 181016, 530, 1, 1, -1176.216, 7200.084, 58.21382, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1542, 181016, 530, 1, 1, -1184.833, 7207.807, 57.92133, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1543, 181016, 530, 1, 1, -1201.722, 7206.649, 58.55188, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1544, 181016, 530, 1, 1, -1296.44, 7267.444, 34.61653, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1545, 181016, 530, 1, 1, -1302.753, 7271.99, 34.41439, 4.101525, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1546, 181016, 530, 1, 1, -1271.883, 7197.997, 57.89819, 2.35619, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1547, 181016, 530, 1, 1, -1282.837, 7187.43, 58.00641, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1548, 181016, 530, 1, 1, -1249.806, 7217.763, 58.32962, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1549, 181016, 530, 1, 1, -1454.16, 7165.046, 44.56573, 5.166176, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1550, 181016, 530, 1, 1, -1387.221, 7134.828, 34.03579, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1551, 181016, 530, 1, 1, -1392.476, 7140.168, 33.73893, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1552, 181016, 530, 1, 1, -1371.671, 7162.804, 33.254, 0.8203033, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1553, 181016, 530, 1, 1, -1364.813, 7156.565, 34.00505, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1554, 181016, 530, 1, 1, -1283.426, 7130.822, 59.73568, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1555, 181016, 530, 1, 1, -1254.381, 7007.266, 36.623, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1556, 181016, 530, 1, 1, -1296.558, 6953.973, 33.24513, 4.118979, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1557, 181016, 530, 1, 1, -1307.797, 6960.474, 32.26982, 4.223697, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1558, 181016, 530, 1, 1, -1241.754, 7003.594, 36.79386, 4.537859, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1559, 181016, 530, 1, 1, -1262.076, 7107.592, 58.88747, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1560, 181016, 530, 1, 1, -1209.608, 7103.708, 57.44921, 5.410522, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1561, 181016, 530, 1, 1, -1194.752, 7110.279, 58.0645, 5.044002, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1562, 181016, 530, 1, 1, -1247.801, 7101.981, 58.06834, 4.171338, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1563, 181016, 530, 1, 1, -1173.556, 7134.231, 58.11499, 5.951575, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3613) +(@OGUID+1564, 181016, 530, 1, 1, -2571.461, 7378.03, 11.05957, 0.2617982, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1565, 181016, 530, 1, 1, -2561.666, 7378.96, 10.5709, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1566, 181016, 530, 1, 1, -2573.72, 7300.305, 13.90452, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1567, 181016, 530, 1, 1, -2602.271, 7282.346, 19.39945, 3.38594, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1568, 181016, 530, 1, 1, -2528.435, 7266.286, 16.27025, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1569, 181016, 530, 1, 1, -2611.334, 7343.457, 23.60636, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1570, 181016, 530, 1, 1, -2605.266, 7291.263, 19.8158, 3.647741, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1571, 181016, 530, 1, 1, -2624.408, 7331.686, 24.46344, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1572, 181016, 530, 1, 1, -2534.468, 7256.75, 16.26636, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1573, 181016, 530, 1, 1, -2614.572, 7330.876, 24.21089, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1574, 181016, 530, 1, 1, -2570.705, 7291.29, 14.81433, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1575, 181016, 530, 1, 1, -2618.061, 7338.908, 23.65936, 4.956738, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1576, 181016, 530, 1, 1, -2614.92, 7297.726, 20.7448, 4.398232, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1577, 181016, 530, 1, 1, -2625.71, 7298.209, 21.14083, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1578, 181016, 530, 1, 1, -2720.994, 7355.896, 39.75894, 6.03884, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1579, 181016, 530, 1, 1, -2596.802, 7228.939, 13.47051, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1580, 181016, 530, 1, 1, -2697.95, 7284.061, 42.72089, 6.108654, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1581, 181016, 530, 1, 1, -2692.656, 7296.979, 42.78501, 5.427975, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1582, 181016, 530, 1, 1, -2600.806, 7237.711, 12.91722, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1583, 181016, 530, 1, 1, -2630.099, 7224.425, 19.74051, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1584, 181016, 530, 1, 1, -2702.841, 7293.721, 88.63655, 2.82743, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1585, 181016, 530, 1, 1, -2626.202, 7216.55, 20.35766, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1586, 181016, 530, 1, 1, -2670.031, 7211.863, 23.66941, 0.9948372, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1587, 181016, 530, 1, 1, -2678.989, 7214.03, 23.95701, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1588, 181016, 530, 1, 1, -2721.762, 7343.454, 39.44633, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1589, 181016, 530, 1, 1, -2755.534, 7275.691, 40.27126, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1590, 181016, 530, 1, 1, -2752.121, 7315.08, 43.48479, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1591, 181016, 530, 1, 1, -2762.166, 7267.401, 40.26734, 5.724681, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1592, 181016, 530, 1, 1, -2755.324, 7317.081, 56.35859, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3626) +(@OGUID+1593, 181016, 530, 1, 1, 937.6202, 7360.125, 26.74729, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1594, 181016, 530, 1, 1, 1006.334, 7322.549, 41.04741, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1595, 181016, 530, 1, 1, 957.7293, 7355.671, 29.15186, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1596, 181016, 530, 1, 1, 993.2974, 7345.906, 35.77085, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1597, 181016, 530, 1, 1, 964.8279, 7387.548, 28.52687, 5.393069, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1598, 181016, 530, 1, 1, 945.5008, 7392.224, 26.72158, 4.380776, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1599, 181016, 530, 1, 1, 1033.736, 7322.608, 40.50263, 4.049168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1600, 181016, 530, 1, 1, 971.3665, 7408.698, 29.54321, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1601, 181016, 530, 1, 1, 1003.335, 7429.998, 28.07676, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1602, 181016, 530, 1, 1, 1052.856, 7384.014, 39.65503, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1603, 181016, 530, 1, 1, 1058.58, 7386.76, 39.58334, 4.276057, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1604, 181016, 530, 1, 1, 1036.931, 7385.866, 40.72616, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1605, 181016, 530, 1, 1, 1021.34, 7392.521, 36.32355, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1606, 181016, 530, 1, 1, 1072.741, 7372.522, 39.58335, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1607, 181016, 530, 1, 1, 1069.436, 7366.63, 39.64074, 3.246347, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1608, 181016, 530, 1, 1, 1042.453, 7348.262, 36.65906, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1609, 181016, 530, 1, 1, 1068.558, 7349.528, 40.72983, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3766) +(@OGUID+1610, 181016, 530, 1, 1, 2007.013, 6878.822, 178.9834, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3772) +(@OGUID+1611, 181016, 530, 1, 1, 2017.319, 6873.481, 178.983, 4.24115, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3772) +(@OGUID+1612, 181016, 530, 1, 1, 2161.682, 6783.048, 183.4536, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3772) +(@OGUID+1613, 181016, 530, 1, 1, 2950.829, 5486.531, 144.1427, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3951) +(@OGUID+1614, 181016, 530, 1, 1, 2969.01, 5459.725, 144.6972, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3951) +(@OGUID+1615, 181016, 530, 1, 1, 3011.185, 5493.75, 145.0009, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3951) +(@OGUID+1616, 181016, 530, 1, 1, 2087.611, 4782.989, 157.7814, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3827) +(@OGUID+1617, 181016, 530, 1, 1, 2019.061, 4700.482, 150.2378, 0.4363316, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3844) +(@OGUID+1618, 181016, 530, 1, 1, 2945.531, 3714.857, 143.1773, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1619, 181016, 530, 1, 1, 3014.989, 3753.323, 144.3842, 1.256636, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1620, 181016, 530, 1, 1, 2984.193, 3711.066, 142.8784, 2.932139, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1621, 181016, 530, 1, 1, 3025.728, 3750.257, 144.7281, 1.326448, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1622, 181016, 530, 1, 1, 2946.058, 3725.089, 143.1839, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1623, 181016, 530, 1, 1, 3004.393, 3656.724, 143.8046, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1624, 181016, 530, 1, 1, 3058.527, 3663.685, 143.0369, 2.042035, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1625, 181016, 530, 1, 1, 2972.385, 3659.229, 144.8418, 0, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1626, 181016, 530, 1, 1, 2972.166, 3648.618, 144.8469, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1627, 181016, 530, 1, 1, 2947.035, 3659.529, 132.5782, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1628, 181016, 530, 1, 1, 2947.682, 3649.331, 132.5782, 2.949595, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1629, 181016, 530, 1, 1, 3003.333, 3637.782, 143.8042, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1630, 181016, 530, 1, 1, 3037.129, 3606.581, 144.4336, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1631, 181016, 530, 1, 1, 3115.857, 3694.574, 144.0382, 0.5061446, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1632, 181016, 530, 1, 1, 3120.857, 3684.906, 143.2626, 0.5759573, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3712) +(@OGUID+1633, 181016, 530, 1, 1, 4083.412, 3091.455, 339.3883, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1634, 181016, 530, 1, 1, 4082.152, 3077.441, 339.3883, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1635, 181016, 530, 1, 1, 4122.787, 2967.157, 352.2287, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1636, 181016, 530, 1, 1, 4092.646, 3104.921, 339.3883, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1637, 181016, 530, 1, 1, 4087.922, 3100.24, 339.3883, 2.530723, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1638, 181016, 530, 1, 1, 4099.208, 3107.681, 339.3884, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1639, 181016, 530, 1, 1, 4114.772, 2967.272, 352.1837, 1.500983, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1640, 181016, 530, 1, 1, 4113.936, 3050.741, 339.3003, 5.899214, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1641, 181016, 530, 1, 1, 4123.493, 3055.268, 339.3098, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1642, 181016, 530, 1, 1, 4105.933, 3108.072, 339.3884, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1643, 181016, 530, 1, 1, 4114.827, 3105.379, 339.3884, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1644, 181016, 530, 1, 1, 4126.727, 3096.481, 339.3884, 0.7155849, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1645, 181016, 530, 1, 1, 4177.695, 3093.462, 335.8202, 5.445428, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1646, 181016, 530, 1, 1, 4200.194, 3075.751, 335.8202, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1647, 181016, 530, 1, 1, 4177.452, 3004.381, 339.1197, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1648, 181016, 530, 1, 1, 4178.088, 3015.381, 339.1293, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3738) +(@OGUID+1649, 181016, 530, 1, 1, 9987.122, -7093.597, 47.70498, 5.253442, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3487) +(@OGUID+1650, 181016, 530, 1, 1, 9982.972, -7098.827, 47.70499, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3487) +(@OGUID+1651, 181016, 0, 1, 1, -4618.024, -925.1197, 501.0621, 0.7853968, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5344) +(@OGUID+1652, 181016, 0, 1, 1, -4623.986, -917.6334, 501.063, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5344) +(@OGUID+1653, 181016, 0, 1, 1, -8657.15, 500.306, 101.605, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5390) +(@OGUID+1654, 181016, 0, 1, 1, -8673.01, 442.396, 100.031, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5390) +(@OGUID+1655, 181016, 0, 1, 1, -8711.88, 463.47, 97.4507, 5.201083, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5390) +(@OGUID+1656, 181016, 0, 1, 1, -8746.15, 410.78, 98.2072, 6.056293, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5149) +(@OGUID+1657, 181016, 0, 1, 1, -9021.94, 883.635, 29.6565, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5154) +(@OGUID+1658, 181016, 0, 1, 1, -9013.6, 889.642, 29.6736, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5154) +(@OGUID+1659, 181016, 0, 1, 1, -9010.44, 847.085, 105.864, 5.829401, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5154) +(@OGUID+1660, 181016, 0, 1, 1, -9004.8, 854.139, 105.594, 5.218536, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5154) +(@OGUID+1661, 181016, 0, 1, 1, -8984.32, 852.349, 29.6207, 2.652894, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5154) +(@OGUID+1662, 181016, 0, 1, 1, -8992.8, 846.523, 29.6207, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5154) +(@OGUID+1663, 181016, 0, 1, 1, -8611.958, 774.5919, 97.13689, 3.979355, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5390) +(@OGUID+1664, 181016, 0, 1, 1, -8621.187, 786.2004, 97.13911, 3.68265, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5390) +(@OGUID+1665, 181016, 0, 1, 1, -8586.704, 962.4266, 98.45146, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5151) +(@OGUID+1666, 181016, 0, 1, 1, -8605.82, 983.8307, 98.57872, 4.834563, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5151) +(@OGUID+1667, 181016, 0, 1, 1, -8548.039, 997.2659, 89.73065, 1.047198, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5151) +(@OGUID+1668, 181016, 0, 1, 1, -8412.685, 1042.276, 68.38379, 2.33874, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 5346) +(@OGUID+1669, 181016, 0, 1, 1, -8562.563, 1016.086, 89.73065, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1670, 181016, 0, 1, 1, -8350.607, 1093.494, 57.26217, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1671, 181016, 0, 1, 1, -8336.738, 1109.575, 57.26216, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1672, 181016, 0, 1, 1, -8451.66, 1220.867, 5.646727, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1673, 181016, 0, 1, 1, -8439.422, 1221.072, 5.661162, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1674, 181016, 0, 1, 1, -8328.427, 1192.425, 5.818892, 1.832595, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1675, 181016, 0, 1, 1, -8396.861, 1314.031, 5.981066, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1676, 181016, 0, 1, 1, -8367.763, 1314.994, 6.094531, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1677, 181016, 0, 1, 1, -8232.368, 1236.465, 5.230234, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1678, 181016, 0, 1, 1, -8489.128, 1323.822, 5.894643, 0.087266, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1679, 181016, 0, 1, 1, -8459.286, 1323.448, 5.861743, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 4411) +(@OGUID+1680, 181016, 530, 1, 1, -4025.329, -11590.4, -138.3277, 1.762782, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1681, 181016, 530, 1, 1, -4040.372, -11581.41, -138.4519, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1682, 181016, 530, 1, 1, -4006.567, -11572.73, -138.0419, 2.670348, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1683, 181016, 530, 1, 1, -4214.633, -12476, 45.07409, 5.497789, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1684, 181016, 530, 1, 1, -4212.527, -12510.34, 45.44406, 0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1685, 181016, 530, 1, 1, -4209.379, -12517.65, 45.81722, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 0) +(@OGUID+1686, 181016, 530, 1, 1, -4185.712, -12504.83, 44.36132, 3.560473, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3576) +(@OGUID+1687, 181016, 530, 1, 1, -4176.958, -12493.97, 44.361, 1.361356, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3576) +(@OGUID+1688, 181016, 530, 1, 1, -4171.624, -12506.62, 44.36132, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3576) +(@OGUID+1689, 181016, 530, 1, 1, -4158.644, -12533.33, 45.45204, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3576) +(@OGUID+1690, 181016, 530, 1, 1, -4158.139, -12463.08, 45.08138, 3.717554, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3576) +(@OGUID+1691, 181016, 530, 1, 1, -4153.742, -12484.6, 44.51342, 3.909541, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3576) +(@OGUID+1692, 181016, 530, 1, 1, -4048.503, -13778.93, 75.01585, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 181016 (Area: 3527) +(@OGUID+1693, 181015, 530, 1, 1, -1742.215, 5135.275, -36.2613, 1.169369, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3899) +(@OGUID+1694, 181015, 530, 1, 1, -1757.831, 5131.28, -36.26131, 0.9075702, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3899) +(@OGUID+1695, 181015, 530, 1, 1, -2037.28, 5275.622, -39.58699, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1696, 181015, 530, 1, 1, -2059.588, 5316.215, -37.32355, 5.235988, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3899) +(@OGUID+1697, 181015, 530, 1, 1, 9612.646, -7184.878, 14.28442, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3487) +(@OGUID+1698, 181015, 530, 1, 1, 9611.202, -7185.08, 14.28158, 0, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3487) +(@OGUID+1699, 181015, 530, 1, 1, 9610.517, -7182.689, 14.28269, 1.797689, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3487) +(@OGUID+1700, 181015, 530, 1, 1, 9612.523, -7182.323, 14.28678, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3487) +(@OGUID+1701, 181015, 530, 1, 1, 9611.927, -7184.979, 15.52289, 4.502952, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 3487) +(@OGUID+1702, 181015, 0, 1, 1, -4916.252, -984.5313, 501.4471, 2.879789, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5342) +(@OGUID+1703, 181015, 0, 1, 1, -4917.014, -984.7448, 502.6873, 2.617989, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5342) +(@OGUID+1704, 181015, 0, 1, 1, -4918.153, -982.1979, 501.4553, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5342) +(@OGUID+1705, 181015, 0, 1, 1, -4917.79, -985.2344, 501.4486, 0, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5342) +(@OGUID+1706, 181015, 0, 1, 1, -4919.722, -983.6129, 501.4555, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5342) +(@OGUID+1707, 181015, 0, 1, 1, -8867.429, 637.0868, 95.78714, 0.6981314, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1708, 181015, 0, 1, 1, -8868.944, 638.5764, 95.78714, 4.136433, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1709, 181015, 0, 1, 1, -8870.591, 636.8524, 95.78714, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1710, 181015, 0, 1, 1, -8869.873, 636.4618, 97.00977, 0, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1711, 181015, 0, 1, 1, -8869.328, 635.8524, 95.78714, 4.625124, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1712, 181015, 0, 1, 1, -8973.23, 491.104, 97.0423, 2.076939, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1713, 181015, 0, 1, 1, -8987.81, 509.179, 97.0711, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 5148) +(@OGUID+1714, 181015, 1, 1, 1, 9871.61, 2494.44, 1315.87, 6.003934, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1715, 181015, 1, 1, 1, 9868.24, 2493.52, 1315.87, 0, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1716, 181015, 1, 1, 1, 9868.4, 2494.36, 1317.11, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1717, 181015, 1, 1, 1, 9868.74, 2495.04, 1315.87, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1718, 181015, 1, 1, 1, 9870.92, 2492.5, 1315.87, 5.916668, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1719, 181015, 530, 1, 1, -4004.693, -11842.24, 0.201654, 0, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1720, 181015, 530, 1, 1, -4004.752, -11845.42, 0.192709, 4.642576, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1721, 181015, 530, 1, 1, -4006.262, -11842.13, 0.18635, 4.153885, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1722, 181015, 530, 1, 1, -4005.507, -11842.26, 1.427111, 4.886924, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1723, 181015, 530, 1, 1, -4006.776, -11844.98, 0.173841, 4.468043, 0, 0, 0, 1, 120, 255, 1), -- 181015 (Area: 0) +(@OGUID+1724, 181014, 571, 1, 1, 5353.096, -2653.161, 310.5197, 3.857183, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 0) +(@OGUID+1725, 181014, 571, 1, 1, 5391.959, -2692.568, 310.2863, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 0) +(@OGUID+1726, 181014, 571, 1, 1, 3802.911, 1477.594, 94.39955, 3.263772, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 4165) +(@OGUID+1727, 181014, 571, 1, 1, 3771.654, 1596.684, 107.9985, 5.009095, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 4165) +(@OGUID+1728, 181014, 571, 1, 1, 3787.579, 1624.979, 107.0998, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 4165) +(@OGUID+1729, 181014, 571, 1, 1, 2754.732, 6279.374, 181.2734, 2.286379, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 4129) +(@OGUID+1730, 181014, 530, 1, 1, -2054.687, 5229.547, -21.3585, 0.7679439, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 0) +(@OGUID+1731, 181014, 530, 1, 1, 9698.271, -7053.018, 22.76448, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181014 (Area: 3487) +(@OGUID+1732, 181060, 571, 1, 1, 6676.038, -197.873, 951.159, 3.33359, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4428) +(@OGUID+1733, 181060, 571, 1, 1, 6676.64, -200.5191, 951.2183, 3.316144, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4428) +(@OGUID+1734, 181060, 571, 1, 1, 6692.196, -262.1433, 956.036, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4428) +(@OGUID+1735, 181060, 571, 1, 1, 6693.974, -261.8266, 956.4064, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4428) +(@OGUID+1736, 181060, 571, 1, 1, 5173.95, -2179.033, 236.5379, 6.143561, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1737, 181060, 571, 1, 1, 5148.001, -2198.408, 237.614, 5.707228, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1738, 181060, 571, 1, 1, 5190.736, -2212.201, 239.3978, 2.513274, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1739, 181060, 571, 1, 1, 5134.635, -2201.145, 238.8165, 0.4014249, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1740, 181060, 571, 1, 1, 5143.447, -2210.877, 237.8243, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1741, 181060, 571, 1, 1, 5380.456, -2636.633, 304.966, 3.106652, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1742, 181060, 571, 1, 1, 5407.522, -2646.742, 305.2902, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1743, 181060, 571, 1, 1, 5407.927, -2617.18, 305.2808, 2.984498, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1744, 181060, 571, 1, 1, 5410.432, -2652.655, 306.231, 2.635444, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1745, 181060, 571, 1, 1, 5465.895, -2590.533, 304.9167, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4275) +(@OGUID+1746, 181060, 571, 1, 1, 5435.949, -2590.28, 304.9167, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4275) +(@OGUID+1747, 181060, 571, 1, 1, 5492.635, -2649.156, 305.2701, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4275) +(@OGUID+1748, 181060, 571, 1, 1, 5492.885, -2617.632, 305.2991, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4275) +(@OGUID+1749, 181060, 571, 1, 1, 5500.449, -2662.013, 304.9659, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4275) +(@OGUID+1750, 181060, 571, 1, 1, 5524.156, -2679.053, 305.1702, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4275) +(@OGUID+1751, 181060, 571, 1, 1, 5759.467, -3565.396, 388.2509, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4324) +(@OGUID+1752, 181060, 571, 1, 1, 5767.891, -3581.12, 388.5618, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4324) +(@OGUID+1753, 181060, 571, 1, 1, 5771.673, -3602.202, 388.4206, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4324) +(@OGUID+1754, 181060, 571, 1, 1, 5768.993, -3564.651, 388.132, 1.675514, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4324) +(@OGUID+1755, 181060, 571, 1, 1, 5760.941, -3580.523, 388.6815, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4324) +(@OGUID+1756, 181060, 571, 1, 1, 5800.075, -3557.563, 389.7701, 0.3316107, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4323) +(@OGUID+1757, 181060, 571, 1, 1, 5796.288, -3573.157, 388.1471, 3.211419, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4323) +(@OGUID+1758, 181060, 571, 1, 1, 5794.419, -3557.554, 388.8964, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4323) +(@OGUID+1759, 181060, 571, 1, 1, 5801.048, -3572.997, 389.0887, 3.019413, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4323) +(@OGUID+1760, 181060, 571, 1, 1, 3873.443, -4541.185, 210.1433, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1761, 181060, 571, 1, 1, 3876.738, -4547.531, 210.9673, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1762, 181060, 571, 1, 1, 3862.321, -4549.055, 211.5898, 2.757613, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1763, 181060, 571, 1, 1, 3408.684, -2785.898, 202.9841, 5.323256, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1764, 181060, 571, 1, 1, 3411.444, -2783.841, 202.9332, 5.358162, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1765, 181060, 571, 1, 1, 3421.057, -2770.74, 201.4035, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1766, 181060, 571, 1, 1, 3313.647, -2337.281, 112.4452, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1767, 181060, 571, 1, 1, 3201.634, -2297.767, 109.0517, 0.2792516, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4248) +(@OGUID+1768, 181060, 571, 1, 1, 3240.247, -2236.566, 117.1561, 4.607672, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4206) +(@OGUID+1769, 181060, 571, 1, 1, 1456.939, -3279.144, 173.5854, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4071) +(@OGUID+1770, 181060, 571, 1, 1, 1454.438, -3273.762, 173.5819, 5.602507, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4071) +(@OGUID+1771, 181060, 571, 1, 1, 1458.552, -3277.082, 173.5854, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4071) +(@OGUID+1772, 181060, 571, 1, 1, 1457.29, -3270.155, 173.5816, 5.567601, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4071) +(@OGUID+1773, 181060, 571, 1, 1, 1445.745, -3269.811, 179.7056, 2.373644, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4071) +(@OGUID+1774, 181060, 571, 1, 1, 1447.377, -3267.913, 179.7009, 2.426008, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 4071) +(@OGUID+1775, 181060, 571, 1, 1, 1445.814, -3264.554, 168.441, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 3998) +(@OGUID+1776, 181060, 571, 1, 1, 1447.826, -3262.189, 168.441, 5.550147, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 3998) +(@OGUID+1777, 181060, 571, 1, 1, 606.9359, -4923.435, 24.95922, 1.919862, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1778, 181060, 571, 1, 1, 601.9346, -4924.686, 24.95571, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1779, 181060, 571, 1, 1, 600.7967, -4920.292, 24.95571, 3.368496, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1780, 181060, 571, 1, 1, 607.8849, -4925.905, 24.95922, 3.298687, 0, 0, 0, 1, 120, 255, 1), -- 181060 (Area: 0) +(@OGUID+1781, 181055, 1, 1, 1, 7862.05, -2568.29, 499.327, 0.1047193, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 656) +(@OGUID+1782, 181055, 1, 1, 1, 7958.75, -2575.71, 501.371, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 656) +(@OGUID+1783, 181055, 1, 1, 1, 8013.66, -2637.12, 523.791, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 656) +(@OGUID+1784, 181055, 1, 1, 1, 7917.81, -2496.79, 496.893, 0.122173, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 656) +(@OGUID+1785, 181055, 1, 1, 1, 7918.85, -2507.95, 496.78, 0.05235888, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 656) +(@OGUID+1786, 181055, 1, 1, 1, 7916.47, -2485.73, 496.947, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1787, 181055, 1, 1, 1, 7856.99, -2491.97, 497.065, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1788, 181055, 1, 1, 1, 7859.37, -2514.28, 496.969, 3.281239, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1789, 181055, 1, 1, 1, 7857.99, -2503.12, 496.981, 3.228859, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1790, 181055, 1, 1, 1, 7883.59, -2461.34, 503.191, 1.692969, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1791, 181055, 1, 1, 1, 7831.7, -2476.79, 502.888, 4.76475, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1792, 181055, 1, 1, 1, 7830.23, -2446.4, 503.081, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 2361) +(@OGUID+1793, 181055, 571, 1, 1, 5762.126, 588.5176, 618.8284, 0.8901166, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4395) +(@OGUID+1794, 181055, 571, 1, 1, 5659.443, 679.3284, 661.8507, 5.864307, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4568) +(@OGUID+1795, 181055, 571, 1, 1, 5948.385, 621.1386, 660.8089, 2.775069, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4613) +(@OGUID+1796, 181055, 571, 1, 1, 5418.945, -2609.535, 310.7752, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1797, 181055, 571, 1, 1, 5418.217, -2654.892, 310.6752, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1798, 181055, 571, 1, 1, 5427.37, -2617.239, 310.7862, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1799, 181055, 571, 1, 1, 5427.162, -2601.81, 310.7791, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1800, 181055, 571, 1, 1, 5426.538, -2647.546, 310.7589, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1801, 181055, 571, 1, 1, 5435.416, -2610.136, 310.76, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1802, 181055, 571, 1, 1, 5465.976, -2609.939, 310.7266, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4275) +(@OGUID+1803, 181055, 571, 1, 1, 5472.982, -2649.109, 310.3139, 1.623156, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4275) +(@OGUID+1804, 181055, 571, 1, 1, 5473.117, -2618.065, 310.7838, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4275) +(@OGUID+1805, 181055, 571, 1, 1, 5474.365, -2602.701, 310.6908, 1.553341, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4275) +(@OGUID+1806, 181055, 571, 1, 1, 5482.347, -2610.531, 310.6789, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4275) +(@OGUID+1807, 181055, 571, 1, 1, 5481.421, -2655.851, 310.4912, 0, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4275) +(@OGUID+1808, 181055, 571, 1, 1, 5779.607, -3647.157, 397.0788, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4324) +(@OGUID+1809, 181055, 571, 1, 1, 3415.612, -2804.818, 207.8745, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1810, 181055, 571, 1, 1, 3426.07, -2797.111, 207.806, 5.340709, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1811, 181055, 571, 1, 1, 3404.855, -2779.617, 207.3744, 2.216565, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1812, 181055, 571, 1, 1, 3272.992, -2376.118, 126.1801, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1813, 181055, 571, 1, 1, 3248.334, -2376.13, 125.8163, 1.570796, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1814, 181055, 571, 1, 1, 3220.808, -2360.816, 129.0979, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1815, 181055, 571, 1, 1, 3194.915, -2304.803, 131.4482, 0.157079, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1816, 181055, 571, 1, 1, 3207.483, -2339.074, 129.0386, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1817, 181055, 571, 1, 1, 3313.64, -2339.259, 135.3806, 2.460913, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1818, 181055, 571, 1, 1, 3191.102, -2279.254, 131.5012, 0.1396245, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4248) +(@OGUID+1819, 181055, 571, 1, 1, 3351.668, -2245.885, 137.426, 3.159062, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4206) +(@OGUID+1820, 181055, 571, 1, 1, 3331.027, -2305.595, 137.5376, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4206) +(@OGUID+1821, 181055, 571, 1, 1, 3342.094, -2281.307, 137.6798, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4206) +(@OGUID+1822, 181055, 571, 1, 1, 3325.675, -2187.142, 134.1245, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4206) +(@OGUID+1823, 181055, 571, 1, 1, 2495.748, -1930.493, 18.89087, 0.5934101, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4242) +(@OGUID+1824, 181055, 571, 1, 1, 2510.754, -1823.163, 18.16746, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4242) +(@OGUID+1825, 181055, 571, 1, 1, 2508.891, -1811.156, 18.57204, 0.802851, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4242) +(@OGUID+1826, 181055, 571, 1, 1, 2502.159, -1831.973, 18.18279, 5.480334, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4242) +(@OGUID+1827, 181055, 571, 1, 1, 2493.719, -1840.646, 18.18876, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4242) +(@OGUID+1828, 181055, 571, 1, 1, 2482.121, -1838.097, 19.10611, 3.926996, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4242) +(@OGUID+1829, 181055, 571, 1, 1, 4502.594, 5701.009, 86.9327, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1830, 181055, 571, 1, 1, 4520.103, 5699.374, 86.98763, 5.375615, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1831, 181055, 571, 1, 1, 4505.328, 5718.376, 87.04783, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1832, 181055, 571, 1, 1, 4522.387, 5716.762, 86.95365, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 4122) +(@OGUID+1833, 181055, 530, 1, 1, -1730.328, 5649.338, 136.299, 1.588249, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3899) +(@OGUID+1834, 181055, 530, 1, 1, -1645.066, 5192.24, -27.42542, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3899) +(@OGUID+1835, 181055, 530, 1, 1, -1759.38, 5167.662, -28.72669, 1.902409, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3899) +(@OGUID+1836, 181055, 530, 1, 1, -2056.806, 5228.367, -27.39764, 0.7504908, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1837, 181055, 530, 1, 1, -2138.824, 5148.72, -8.640973, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1838, 181055, 530, 1, 1, -1864.128, 4999.87, -8.724302, 4.66003, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1839, 181055, 530, 1, 1, -1552.944, 5125.714, -8.696525, 5.689774, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 0) +(@OGUID+1840, 181055, 530, 1, 1, -2625.937, 4419.99, 42.99473, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3683) +(@OGUID+1841, 181055, 530, 1, 1, -3080.017, 2519.666, 75.95196, 0.3490652, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1842, 181055, 530, 1, 1, -3097.624, 2522.847, 75.95374, 2.44346, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1843, 181055, 530, 1, 1, -3088.047, 2526.28, 75.9549, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1844, 181055, 530, 1, 1, -3092.005, 2502.068, 76.35168, 4.555311, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1845, 181055, 530, 1, 1, -3099.529, 2512.387, 75.96468, 3.490667, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1846, 181055, 530, 1, 1, -3081.95, 2509.127, 75.9601, 5.585054, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1847, 181055, 530, 1, 1, -2980.738, 2565.908, 97.9761, 2.705255, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1848, 181055, 530, 1, 1, -2978.653, 2545.87, 97.51945, 3.787367, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1849, 181055, 530, 1, 1, -2960.054, 2536.851, 96.74974, 4.81711, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1850, 181055, 530, 1, 1, -2944.712, 2569.651, 97.11517, 0.6108634, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1851, 181055, 530, 1, 1, -2963.106, 2578.467, 97.77729, 1.658062, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1852, 181055, 530, 1, 1, -2943.146, 2549.089, 96.68553, 5.846854, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3744) +(@OGUID+1853, 181055, 530, 1, 1, -3956.793, 2241.567, 107.9687, 4.572764, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3745) +(@OGUID+1854, 181055, 530, 1, 1, -4044.765, 2237.184, 118.0772, 5.515242, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3745) +(@OGUID+1855, 181055, 530, 1, 1, -4063.29, 2183.958, 117.962, 0.03490625, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3745) +(@OGUID+1856, 181055, 530, 1, 1, -4053.135, 2167.243, 117.8958, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3745) +(@OGUID+1857, 181055, 530, 1, 1, -4063.405, 2159.092, 117.9386, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3745) +(@OGUID+1858, 181055, 530, 1, 1, -4114.495, 1119.618, 52.38124, 5.742135, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3929) +(@OGUID+1859, 181055, 530, 1, 1, -3006.023, 795.2581, -1.891022, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3754) +(@OGUID+1860, 181055, 530, 1, 1, -716.8414, 2735.047, 100.798, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3538) +(@OGUID+1861, 181055, 530, 1, 1, -717.3152, 2750.212, 100.8153, 3.176533, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3538) +(@OGUID+1862, 181055, 530, 1, 1, -699.2603, 2709.337, 101.0987, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3538) +(@OGUID+1863, 181055, 530, 1, 1, -690.6761, 2732.448, 100.9171, 6.265733, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3538) +(@OGUID+1864, 181055, 530, 1, 1, -690.3901, 2717.364, 101.012, 0, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3538) +(@OGUID+1865, 181055, 530, 1, 1, 175.2291, 2619.424, 98.45457, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3536) +(@OGUID+1866, 181055, 530, 1, 1, 187.7007, 2628.467, 98.74133, 2.164206, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3536) +(@OGUID+1867, 181055, 530, 1, 1, 203.049, 4333.749, 125.1613, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3552) +(@OGUID+1868, 181055, 530, 1, 1, -223.1397, 5396.124, 40.32872, 1.867502, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3521) +(@OGUID+1869, 181055, 530, 1, 1, -222.4095, 5391.945, 40.32674, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3521) +(@OGUID+1870, 181055, 530, 1, 1, -341.6888, 5481.863, 37.94325, 3.054327, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1871, 181055, 530, 1, 1, -337.4103, 5481.802, 37.91649, 6.161013, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1872, 181055, 530, 1, 1, -186.2492, 5519.735, 33.73346, 3.455756, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1873, 181055, 530, 1, 1, -181.5449, 5532.257, 33.22929, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1874, 181055, 530, 1, 1, -175.3683, 5512.138, 33.37462, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1875, 181055, 530, 1, 1, -166.1566, 5537.293, 33.22692, 1.884953, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1876, 181055, 530, 1, 1, -96.04215, 5545.813, 45.60166, 3.089183, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1877, 181055, 530, 1, 1, -91.70524, 5545.659, 45.61694, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1878, 181055, 530, 1, 1, -159.9268, 5517.314, 33.24236, 5.026549, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1879, 181055, 530, 1, 1, -155.342, 5529.741, 33.96249, 0.3141584, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3565) +(@OGUID+1880, 181055, 530, 1, 1, -1260.943, 7180.634, 63.39374, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3613) +(@OGUID+1881, 181055, 530, 1, 1, 1044.882, 7361.025, 45.56539, 3.874631, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3766) +(@OGUID+1882, 181055, 530, 1, 1, 1941.395, 6838.657, 177.4772, 0.01745246, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3771) +(@OGUID+1883, 181055, 530, 1, 1, 1937.434, 6838.64, 177.4422, 3.194002, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3771) +(@OGUID+1884, 181055, 530, 1, 1, 2085.431, 6890.104, 190.4657, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3772) +(@OGUID+1885, 181055, 530, 1, 1, 2095.052, 6899.62, 190.4382, 3.944446, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3772) +(@OGUID+1886, 181055, 530, 1, 1, 2070.803, 6759.671, 173.2742, 4.694937, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3772) +(@OGUID+1887, 181055, 530, 1, 1, 2055.827, 6759.792, 173.2742, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3772) +(@OGUID+1888, 181055, 530, 1, 1, 2066.258, 6730.639, 181.5167, 1.518436, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3772) +(@OGUID+1889, 181055, 530, 1, 1, 2066.148, 6726.275, 181.5531, 4.747296, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3772) +(@OGUID+1890, 181055, 530, 1, 1, 2944.296, 5533.428, 163.821, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3828) +(@OGUID+1891, 181055, 530, 1, 1, 3085.633, 5473.628, 162.5824, 0.2967052, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3951) +(@OGUID+1892, 181055, 530, 1, 1, 2940.299, 5415.802, 165.9382, 4.084071, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3951) +(@OGUID+1893, 181055, 530, 1, 1, 2090.407, 4769.771, 175.6497, 4.921829, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3827) +(@OGUID+1894, 181055, 530, 1, 1, 2092.127, 4792.164, 175.6362, 1.134463, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3827) +(@OGUID+1895, 181055, 530, 1, 1, 2098.946, 4779.432, 175.5325, 6.178466, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3827) +(@OGUID+1896, 181055, 530, 1, 1, 2078.747, 4789.831, 175.6968, 2.391098, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3827) +(@OGUID+1897, 181055, 530, 1, 1, 3018.137, 3748.76, 151.2779, 1.291542, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3712) +(@OGUID+1898, 181055, 530, 1, 1, 2948.536, 3719.698, 150.2694, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3712) +(@OGUID+1899, 181055, 530, 1, 1, 3044.282, 3608.729, 150.461, 4.729844, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3712) +(@OGUID+1900, 181055, 530, 1, 1, 3116.458, 3688.845, 150.6044, 0.5585039, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3712) +(@OGUID+1901, 181055, 530, 1, 1, 4116.873, 3058.359, 349.9748, 5.131269, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3738) +(@OGUID+1902, 181055, 530, 1, 1, 4184.254, 3009.556, 349.8448, 3.124123, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3738) +(@OGUID+1903, 181055, 530, 1, 1, 4118.572, 2954.05, 360.3641, 1.605702, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3738) +(@OGUID+1904, 181055, 530, 1, 1, 2984.813, 1803.785, 146.0861, 0.6632232, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3728) +(@OGUID+1905, 181055, 530, 1, 1, 2969.402, 1791.448, 145.6347, 3.769912, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3724) +(@OGUID+1906, 181055, 530, 1, 1, 9954.997, -7098.571, 59.86189, 3.996807, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1907, 181055, 530, 1, 1, 9992.33, -7205.063, 44.06255, 2.18166, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1908, 181055, 530, 1, 1, 10002.23, -7202.467, 44.06782, 1.466076, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1909, 181055, 530, 1, 1, 10007.34, -7030.903, 57.97285, 4.06662, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1910, 181055, 530, 1, 1, 10010.68, -7199.167, 44.22095, 2.478367, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1911, 181055, 530, 1, 1, 9952.419, -7232.268, 43.9028, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1912, 181055, 530, 1, 1, 9945.498, -7242.049, 43.90578, 2.792518, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 3487) +(@OGUID+1913, 181055, 0, 1, 1, -8341.17, 615.349, 104.273, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5150) +(@OGUID+1914, 181055, 0, 1, 1, -8605.4, 391.313, 114.686, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1915, 181055, 0, 1, 1, -8610.86, 398.378, 114.794, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1916, 181055, 0, 1, 1, -8616.79, 405.722, 114.684, 2.234018, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1917, 181055, 0, 1, 1, -8845.916, 468.9219, 122.3519, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5148) +(@OGUID+1918, 181055, 0, 1, 1, -8892.52, 867.236, 109.002, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1919, 181055, 0, 1, 1, -8937.31, 861.234, 119.3, 6.213374, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1920, 181055, 0, 1, 1, -8914.21, 995.188, 129.577, 4.188792, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1921, 181055, 0, 1, 1, -8948.17, 861.865, 119.265, 2.967041, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5390) +(@OGUID+1922, 181055, 0, 1, 1, -8630.926, 945.2589, 136.5359, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5151) +(@OGUID+1923, 181055, 0, 1, 1, -8578.42, 986.8, 133.948, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5151) +(@OGUID+1924, 181055, 0, 1, 1, -8523.936, 930.3209, 108.977, 1.53589, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 5151) +(@OGUID+1925, 181055, 1, 1, 1, 10144.4, 2233.66, 1352.2, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 1659) +(@OGUID+1926, 181055, 1, 1, 1, 10130.9, 2224.82, 1352.22, 2.111848, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 1659) +(@OGUID+1927, 181055, 1, 1, 1, 10119.3, 2216.15, 1351.82, 2.199115, 0, 0, 0, 1, 120, 255, 1), -- 181055 (Area: 1659) +(@OGUID+1928, 181017, 0, 1, 1, -8624.95, 933.507, 125.42, 3.839725, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 5151) +(@OGUID+1929, 181017, 0, 1, 1, -8641.03, 953.563, 125.408, 3.822273, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 5151) +(@OGUID+1930, 181017, 0, 1, 1, -8568.147, 978.654, 122.7587, 3.804818, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 5151) +(@OGUID+1931, 181017, 0, 1, 1, -8584.17, 998.563, 122.819, 0.6806767, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 5151) +(@OGUID+1932, 181017, 0, 1, 1, -8504.936, 1192.633, 16.33525, 0.5410506, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1933, 181017, 0, 1, 1, -8512.316, 1200.338, 16.39689, 0.9250238, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1934, 181017, 0, 1, 1, -8520.524, 1204.205, 16.42972, 1.396262, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1935, 181017, 0, 1, 1, -8542.321, 1200.581, 16.43208, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1936, 181017, 0, 1, 1, -8534.486, 1204.204, 16.40989, 1.745327, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1937, 181017, 0, 1, 1, -8276.106, 1193.003, 16.38176, 2.495818, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1938, 181017, 0, 1, 1, -8268.55, 1200.73, 16.45654, 2.146753, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1939, 181017, 0, 1, 1, -8238.383, 1200.478, 16.38265, 0.9424766, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1940, 181017, 0, 1, 1, -8246.669, 1204.407, 16.31734, 1.378809, 0, 0, 0, 1, 120, 255, 1), -- 181017 (Area: 4411) +(@OGUID+1941, 181017, 0, 1, 1, -8260.668, 1204.398, 16.41504, 1.710422, 0, 0, 0, 1, 120, 255, 1); -- 181017 (Area: 4411) + +DELETE FROM `game_event_gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+1941 AND `eventEntry`=@Event; +INSERT INTO `game_event_gameobject` SELECT @Event, gameobject.guid FROM `gameobject` WHERE gameobject.guid BETWEEN @OGUID+0 AND @OGUID+1941; + +DELETE FROM `gameobject` WHERE `guid` IN (24399, 24400, 24401, 24402, 24405); + +UPDATE `creature` SET `position_x`=9616.942, `position_y`=-7181.332, `position_z`=14.3793, `orientation`=2.303835 WHERE `guid`=208827; +UPDATE `creature` SET `position_x`=9612.548, `position_y`=-7182.34, `position_z`=15.55145, `orientation`=1.762783 WHERE `guid`=208800; +UPDATE `creature` SET `position_x`=-4918.147, `position_y`=-982.1111, `position_z`=502.7113, `orientation`=2.234021 WHERE `guid`=208797; +UPDATE `creature` SET `position_x`=-8867.42, `position_y`=637.047, `position_z`=97.03574, `orientation`=0.8203048 WHERE `guid`=208798; +UPDATE `creature` SET `position_x`=9870.95, `position_y`=2492.47, `position_z`=1317.113, `orientation`=5.969026 WHERE `guid`=208799; +UPDATE `creature` SET `position_x`=-4006.774, `position_y`=-11844.94, `position_z`=1.430115, `orientation`=4.468043 WHERE `guid`=208796; +UPDATE `creature` SET `position_x`=9610.493, `position_y`=-7182.677, `position_z`=15.53905, `orientation`=1.850049 WHERE `guid`=208808; +UPDATE `creature` SET `position_x`=-4919.688, `position_y`=-983.6163, `position_z`=502.6961, `orientation`=2.949606 WHERE `guid`=208810; +UPDATE `creature` SET `position_x`=-8868.953, `position_y`=638.5087, `position_z`=97.03911, `orientation`=1.466077 WHERE `guid`=208806; +UPDATE `creature` SET `position_x`=9871.64, `position_y`=2494.43, `position_z`=1317.123, `orientation`=6.021386 WHERE `guid`=208807; +UPDATE `creature` SET `position_x`=-4004.755, `position_y`=-11845.5, `position_z`=1.443716, `orientation`=4.782202 WHERE `guid`=208811; +UPDATE `creature` SET `position_x`=9586.303, `position_y`=-7181.014, `position_z`=14.32427, `orientation`=0 WHERE `guid`=208833; From eee75b80ac8c44c226b950f40babf89942e8988d Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 24 Feb 2016 23:26:11 +0100 Subject: [PATCH 25/93] Core/Scripts: Prepare commands once * Thanks @joschiwald pointing this out --- src/server/scripts/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index 545902dca66..ea0b058b91d 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -38,7 +38,6 @@ PrepareScripts(Spells scripts_STAT_SRCS) PrepareScripts(Commands scripts_STAT_SRCS) if(SCRIPTS) - PrepareScripts(Commands scripts_STAT_SRCS) PrepareScripts(Custom scripts_STAT_SRCS) PrepareScripts(World scripts_STAT_SRCS) PrepareScripts(OutdoorPvP scripts_STAT_SRCS) From b1eff7c1f8f644c6201675b2574d00466cfb0de5 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 25 Feb 2016 09:33:39 +0100 Subject: [PATCH 26/93] Core/Misc: fix header --- src/server/game/AI/PlayerAI/PlayerAI.cpp | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index 1b99d0956f2..bafa1a0ecf7 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -1,19 +1,19 @@ /* -* Copyright (C) 2016-2016 TrinityCore -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 2 of the License, or (at your -* option) any later version. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along -* with this program. If not, see . -*/ + * Copyright (C) 2016-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ #include "PlayerAI.h" #include "SpellAuras.h" From 2eb9621f195995ed22f3f7e52b3a0681fd26289f Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 25 Feb 2016 09:34:24 +0100 Subject: [PATCH 27/93] Core/Misc: fix header --- src/server/game/AI/PlayerAI/PlayerAI.h | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.h b/src/server/game/AI/PlayerAI/PlayerAI.h index ebebf17c22f..1820bcf11c0 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.h +++ b/src/server/game/AI/PlayerAI/PlayerAI.h @@ -1,19 +1,19 @@ /* -* Copyright (C) 2016-2016 TrinityCore -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 2 of the License, or (at your -* option) any later version. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along -* with this program. If not, see . -*/ + * Copyright (C) 2016-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ #ifndef TRINITY_PLAYERAI_H #define TRINITY_PLAYERAI_H From ea53f79aaf036801f3229c8b8f303e42015b4bd4 Mon Sep 17 00:00:00 2001 From: treeston Date: Mon, 22 Feb 2016 23:18:15 +0100 Subject: [PATCH 28/93] DB/Conditions: Add new CONDITION_STAND_STATE (41). value1 selects the type of state check to apply, value2 specifies the particular state we are looking for. Valuing: 0,x: has exactly state x; 1,0: any standing state; 1,1: any sitting state; --- src/server/game/Conditions/ConditionMgr.cpp | 41 ++++++++++++++++++++- src/server/game/Conditions/ConditionMgr.h | 3 +- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 4215a3a5d02..81dc7894592 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -100,7 +100,8 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { "Health Value", true, true, false }, { "Health Pct", true, true, false }, { "Realm Achievement", true, false, false }, - { "In Water", false, false, false } + { "In Water", false, false, false }, + { "Sit/stand state", true, true, false } }; // Checks if object meets the condition @@ -432,6 +433,19 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const condMeets = unit->IsInWater(); break; } + case CONDITION_STAND_STATE: + { + if (Unit* unit = object->ToUnit()) + { + if (ConditionValue1 == 0) + condMeets = (unit->getStandState() == ConditionValue2); + else if (ConditionValue2 == 0) + condMeets = unit->IsStandState(); + else if (ConditionValue2 == 1) + condMeets = unit->IsSitState(); + } + break; + } default: condMeets = false; break; @@ -602,6 +616,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition() const case CONDITION_IN_WATER: mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER; break; + case CONDITION_STAND_STATE: + mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER; + break; default: ASSERT(false && "Condition::GetSearcherTypeMaskForCondition - missing condition handling!"); break; @@ -2090,6 +2107,28 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const } case CONDITION_IN_WATER: break; + case CONDITION_STAND_STATE: + { + bool valid = false; + switch (cond->ConditionValue1) + { + case 0: + valid = cond->ConditionValue2 <= UNIT_STAND_STATE_SUBMERGED; + break; + case 1: + valid = cond->ConditionValue2 <= 1; + break; + default: + valid = false; + break; + } + if (!valid) + { + TC_LOG_ERROR("sql.sql", "%s has non-existing stand state (%u,%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1, cond->ConditionValue2); + return false; + } + break; + } default: break; } diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 35096ae18ff..3123aaca86a 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -71,7 +71,8 @@ enum ConditionTypes CONDITION_HP_PCT = 38, // hpPct ComparisonType 0 true if unit's hp matches given pct CONDITION_REALM_ACHIEVEMENT = 39, // achievement_id 0 0 true if realm achievement is complete CONDITION_IN_WATER = 40, // 0 0 0 true if unit in water - CONDITION_MAX = 41 // MAX + CONDITION_STAND_STATE = 41, // stateType state 0 true if unit matches specified sitstate (0,x: has exactly state x; 1,0: any standing state; 1,1: any sitting state;) + CONDITION_MAX = 42 // MAX }; /*! Documentation on implementing a new ConditionSourceType: From 7c9a26c608e4e03d25195ffde0e4abf62f28bb7f Mon Sep 17 00:00:00 2001 From: tkrokli Date: Thu, 25 Feb 2016 20:06:16 +0100 Subject: [PATCH 29/93] Core/Scripts: move npc_tirion_fordring to DB/SAI This removes the current core script npc_tirion_fordring and replaces it with database entries in: - `conditions` 9 (quest taken) + 41 (unit_state) - `gossip_menu_option` (3502,3681,3682,3683) - `smart_scripts` (SmartAI) Gossip text / `npc_text` is already in the database. Closes #16430 (my old attempt at removing hardcoded text) --- sql/updates/world/2016_02_25_00_world_335.sql | 25 ++++++++ .../zone_eastern_plaguelands.cpp | 57 +------------------ 2 files changed, 26 insertions(+), 56 deletions(-) create mode 100644 sql/updates/world/2016_02_25_00_world_335.sql diff --git a/sql/updates/world/2016_02_25_00_world_335.sql b/sql/updates/world/2016_02_25_00_world_335.sql new file mode 100644 index 00000000000..473cbd506ce --- /dev/null +++ b/sql/updates/world/2016_02_25_00_world_335.sql @@ -0,0 +1,25 @@ +-- new gossip_menus for Quest 5742 Redemption (Tirion's Tale) +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (3502,3681,3682,3683) AND `id` = 0; +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES +(3502, 0,0, 'I am ready to hear your tale, Tirion.', 7219, 1,1, 3681, 0,0,0,'',0), +(3681, 0,0, 'Thank you, Tirion. What of your identity?', 7221, 1,1, 3682, 0,0,0,'',0), +(3682, 0,0, 'That is terrible.', 7223, 1,1, 3683, 0,0,0,'',0), +(3683, 0,0, 'I will, Tirion.', 7225, 1,1, 0, 0,0,0,'',0); + +-- update creature entry 1855 Tirion Fordring +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName`= '' WHERE `entry` = 1855; + +-- SmartAI script actions for Quest 5742 Redemption (Tirion's Tale) +DELETE FROM `smart_scripts` WHERE `entryorguid`= 1855 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 +(1855,0, 0,0, 62, 0,100,0, 3502, 0,0,0, 98, 3681, 4493, 0,0,0,0, 7,0,0,0,0,0,0,0, 'Tirion Fordring - on gossip_menu 3502 selected - Send Gossip text 4493 with menu option 3681'), +(1855,0, 1,0, 62, 0,100,0, 3681, 0,0,0, 98, 3682, 4494, 0,0,0,0, 7,0,0,0,0,0,0,0, 'Tirion Fordring - on gossip_menu 3681 selected - Send Gossip text 4494 with menu option 3682'), +(1855,0, 2,0, 62, 0,100,0, 3682, 0,0,0, 98, 3683, 4495, 0,0,0,0, 7,0,0,0,0,0,0,0, 'Tirion Fordring - on gossip_menu 3682 selected - Send Gossip text 4495 with menu option 3683'), +(1855,0, 3,4, 62, 0,100,0, 3683, 0,0,0, 15, 5742, 0, 0,0,0,0, 7,0,0,0,0,0,0,0, 'Tirion Fordring - on gossip_menu 3683 selected - Give credit for Quest 5742 Redemption'), +(1855,0, 4,0, 61, 0,100,0, 0, 0,0,0, 72, 0, 0, 0,0,0,0, 7,0,0,0,0,0,0,0, 'Tirion Fordring - on gossip_menu 3683 selected - Close Gossip'); + +-- conditions for Quest 5742 Redemption (Tirion's Tale) +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`= 15 AND `SourceGroup`= 3502; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15, 3502,0, 0,1, 9,0, 5742, 0,0,0,0,0, '', 'Show gossip menu option 3502 only if Quest 5742 is taken (active)'), +(15, 3502,0, 0,1, 41,0, 1, 1,0,0,0,0, '', 'Show gossip menu option 3502 only if player is sitting (any type)'); diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index ce0ebf4d129..4cc72715868 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -19,7 +19,7 @@ /* ScriptData SDName: Eastern_Plaguelands SD%Complete: 100 -SDComment: Quest support: 5211, 5742. Special vendor Augustus the Touched +SDComment: Quest support: 5211. Special vendor Augustus the Touched SDCategory: Eastern Plaguelands EndScriptData */ @@ -27,7 +27,6 @@ EndScriptData */ npc_ghoul_flayer npc_augustus_the_touched npc_darrowshire_spirit -npc_tirion_fordring EndContentData */ #include "ScriptMgr.h" @@ -133,63 +132,9 @@ public: }; }; -/*###### -## npc_tirion_fordring -######*/ - -#define GOSSIP_HELLO "I am ready to hear your tale, Tirion." -#define GOSSIP_SELECT1 "Thank you, Tirion. What of your identity?" -#define GOSSIP_SELECT2 "That is terrible." -#define GOSSIP_SELECT3 "I will, Tirion." - -class npc_tirion_fordring : public CreatureScript -{ -public: - npc_tirion_fordring() : CreatureScript("npc_tirion_fordring") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(4493, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - player->SEND_GOSSIP_MENU(4494, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - player->SEND_GOSSIP_MENU(4495, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+4: - player->CLOSE_GOSSIP_MENU(); - player->AreaExploredOrEventHappens(5742); - break; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(5742) == QUEST_STATUS_INCOMPLETE && player->getStandState() == UNIT_STAND_STATE_SIT) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } -}; - void AddSC_eastern_plaguelands() { new npc_ghoul_flayer(); new npc_augustus_the_touched(); new npc_darrowshire_spirit(); - new npc_tirion_fordring(); } From dff12f837f3b35ecacbca2189923e41ca4985d06 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 25 Feb 2016 20:42:15 +0100 Subject: [PATCH 30/93] Rename 2016_02_29_29_world.sql to 2016_02_25_00_world.sql --- .../world/{2016_02_29_29_world.sql => 2016_02_25_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2016_02_29_29_world.sql => 2016_02_25_00_world.sql} (100%) diff --git a/sql/updates/world/2016_02_29_29_world.sql b/sql/updates/world/2016_02_25_00_world.sql similarity index 100% rename from sql/updates/world/2016_02_29_29_world.sql rename to sql/updates/world/2016_02_25_00_world.sql From 85c912c4048287931985c98186423d2bf51fdebb Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 10 Apr 2015 00:13:44 +0200 Subject: [PATCH 31/93] Core/Misc: Added Convenience methods removing auras by predicate (cherry picked from commit 0953bcf73f01ab5d85bb8665fbf8451d0ed460b3) --- src/server/game/Entities/Unit/Unit.cpp | 71 ++++++++++++++++++++++++++ src/server/game/Entities/Unit/Unit.h | 10 ++++ 2 files changed, 81 insertions(+) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a2a3151666e..e2b0e1f01eb 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3749,6 +3749,77 @@ void Unit::RemoveAura(Aura* aura, AuraRemoveMode mode) RemoveAura(aurApp, mode); } +void Unit::RemoveAppliedAuras(std::function const& check) +{ + for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();) + { + if (check(iter->second)) + { + RemoveAura(iter); + continue; + } + ++iter; + } +} + +void Unit::RemoveOwnedAuras(std::function const& check) +{ + for (AuraMap::iterator iter = m_ownedAuras.begin(); iter != m_ownedAuras.end();) + { + if (check(iter->second)) + { + RemoveOwnedAura(iter); + continue; + } + ++iter; + } +} + +void Unit::RemoveAppliedAuras(uint32 spellId, std::function const& check) +{ + for (AuraApplicationMap::iterator iter = m_appliedAuras.lower_bound(spellId); iter != m_appliedAuras.upper_bound(spellId);) + { + if (check(iter->second)) + { + RemoveAura(iter); + continue; + } + ++iter; + } +} + +void Unit::RemoveOwnedAuras(uint32 spellId, std::function const& check) +{ + for (AuraMap::iterator iter = m_ownedAuras.lower_bound(spellId); iter != m_ownedAuras.upper_bound(spellId);) + { + if (check(iter->second)) + { + RemoveOwnedAura(iter); + continue; + } + ++iter; + } +} + +void Unit::RemoveAurasByType(AuraType auraType, std::function const& check) +{ + for (AuraEffectList::iterator iter = m_modAuras[auraType].begin(); iter != m_modAuras[auraType].end();) + { + Aura* aura = (*iter)->GetBase(); + AuraApplication * aurApp = aura->GetApplicationOfTarget(GetGUID()); + ASSERT(aurApp); + + ++iter; + if (check(aurApp)) + { + uint32 removedAuras = m_removedAurasCount; + RemoveAura(aurApp); + if (m_removedAurasCount > removedAuras + 1) + iter = m_modAuras[auraType].begin(); + } + } +} + void Unit::RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID, uint8 reqEffMask, AuraRemoveMode removeMode) { for (AuraApplicationMap::iterator iter = m_appliedAuras.lower_bound(spellId); iter != m_appliedAuras.upper_bound(spellId);) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 4565160dc93..19fd4089168 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1704,6 +1704,16 @@ class Unit : public WorldObject void RemoveAura(AuraApplication * aurApp, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT); void RemoveAura(Aura* aur, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT); + // Convenience methods removing auras by predicate + void RemoveAppliedAuras(std::function const& check); + void RemoveOwnedAuras(std::function const& check); + + // Optimized overloads taking advantage of map key + void RemoveAppliedAuras(uint32 spellId, std::function const& check); + void RemoveOwnedAuras(uint32 spellId, std::function const& check); + + void RemoveAurasByType(AuraType auraType, std::function const& check); + void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, uint8 reqEffMask = 0, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); void RemoveAuraFromStack(uint32 spellId, ObjectGuid casterGUID = ObjectGuid::Empty, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); void RemoveAurasDueToSpellByDispel(uint32 spellId, uint32 dispellerSpellId, ObjectGuid casterGUID, Unit* dispeller, uint8 chargesRemoved = 1); From a3b2144750d4824a6b3d94766e7019f940a9a470 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 25 Feb 2016 23:29:52 +0000 Subject: [PATCH 32/93] DB/Quest: Fire Upon the Waters Properly script http://www.wowhead.com/quest=12243/fire-upon-the-waters 1) Delete the kill credit npcs which do not exist in sniff 2) Spawn the proper bunnies for this quest 3) Add missing burning effect --- sql/updates/world/2016_02_25_02_world.sql | 109 ++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 sql/updates/world/2016_02_25_02_world.sql diff --git a/sql/updates/world/2016_02_25_02_world.sql b/sql/updates/world/2016_02_25_02_world.sql new file mode 100644 index 00000000000..c5355b13c29 --- /dev/null +++ b/sql/updates/world/2016_02_25_02_world.sql @@ -0,0 +1,109 @@ +SET @CGUID := 86984; + +DELETE FROM `creature` WHERE `id`=24110 AND `guid` BETWEEN @CGUID+0 AND @CGUID+31; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 24110, 571, 1, 1, 2480.52, -405.0309, 31.25292, 1.954769, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+1, 24110, 571, 1, 1, 2485.832, -406.4011, 38.64569, 1.937315, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+2, 24110, 571, 1, 1, 2483.247, -405.9387, 35.05476, 4.991642, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+3, 24110, 571, 1, 1, 2477.307, -404.4191, 27.71297, 2.530727, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+4, 24110, 571, 1, 1, 2490.05, -404.6198, 27.34736, 0, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+5, 24110, 571, 1, 1, 2486.804, -396.4983, 37.61678, 6.248279, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+6, 24110, 571, 1, 1, 2473.764, -403.68, 23.80915, 3.246312, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+7, 24110, 571, 1, 1, 2489.167, -395.6806, 28.83605, 0.01745329, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+8, 24110, 571, 1, 1, 2488.105, -403.3663, 35.30573, 2.80998, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+9, 24110, 571, 1, 1, 2457.642, -389.6918, 23.55255, 6.143559, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+10, 24110, 571, 1, 1, 2469.61, -402.5246, 21.45798, 4.08407, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+11, 24110, 571, 1, 1, 2454.252, -397.5855, 51.25713, 0.03490658, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+12, 24110, 571, 1, 1, 2457.418, -405.3847, 30.72205, 6.213372, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+13, 24110, 571, 1, 1, 2483.101, -393.8391, 43.72463, 2.897247, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+14, 24110, 571, 1, 1, 2455.441, -395.9613, 42.66463, 0.05235988, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+15, 24110, 571, 1, 1, 2454.66, -404.776, 48.54633, 6.143559, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+16, 24110, 571, 1, 1, 2458.783, -404.1076, 23.79817, 6.265732, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+17, 24110, 571, 1, 1, 2458.11, -410.4796, 22.85155, 6.195919, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+18, 24110, 571, 1, 1, 2481.292, -393.944, 40.58387, 4.171337, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+19, 24110, 571, 1, 1, 2457.773, -397.1545, 31.50192, 6.195919, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+20, 24110, 571, 1, 1, 2469.01, -396.4393, 25.475, 0.2792527, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+21, 24110, 571, 1, 1, 2478.411, -394.4479, 36.02073, 4.223697, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+22, 24110, 571, 1, 1, 2456.78, -389.8281, 32.9614, 0, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+23, 24110, 571, 1, 1, 2460.665, -399.6276, 19.7543, 3.089233, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+24, 24110, 571, 1, 1, 2476.166, -394.8342, 31.92243, 1.27409, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+25, 24110, 571, 1, 1, 2455.731, -404.8611, 40.88202, 6.213372, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+26, 24110, 571, 1, 1, 2460.889, -401.5321, 19.4641, 5.131268, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+27, 24110, 571, 1, 1, 2464.679, -397.7112, 21.8534, 5.113815, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+28, 24110, 571, 1, 1, 2464.713, -401.7634, 19.7663, 0.06981317, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+29, 24110, 571, 1, 1, 2456.293, -412.3963, 29.24669, 6.073746, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+30, 24110, 571, 1, 1, 2472.812, -395.45, 28.40558, 3.368485, 120, 0, 0), -- 24110 (Area: 4181) +(@CGUID+31, 24110, 571, 1, 1, 2458.6, -396.5036, 23.42054, 6.248279, 120, 0, 0); -- 24110 (Area: 4181) + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=28013; +UPDATE `creature_template` SET `AIName`='' WHERE `entry`=28013; +DELETE FROM `creature` WHERE `id`=28013; + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` BETWEEN -@CGUID-31 AND -@CGUID-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 +(-@CGUID-0, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-0, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-1, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-1, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-2, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-2, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-3, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-3, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-4, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-4, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-5, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-5, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-6, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-6, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-7, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-7, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-8, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-8, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-9, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-9, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-10, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-10, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-11, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-11, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-12, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-12, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-13, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-13, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-14, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-14, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-15, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-15, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-16, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-16, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-17, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-17, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-18, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-18, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-19, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-19, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-20, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-20, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-21, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-21, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-22, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-22, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-23, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-23, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-24, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-24, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-25, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-25, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-26, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-26, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-27, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-27, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-28, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-28, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-29, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-29, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-30, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-30, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''), +(-@CGUID-31, 0, 0, 1, 8, 0, 100, 0, 48455, 0, 0, 0, 11, 50290, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Fire Upon the Waters: Sail Burning Kill Credit\''), +(-@CGUID-31, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48522, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny Large - On Spellhit \'Apothecary\'s Burning Water\' - Cast \'Sinner''s Folly Fire Bunny: Periodic Fire Aura\''); + +UPDATE `conditions` SET `ConditionValue2`=24110, `Comment`='Fire Upon the Waters - spell to ELM General Purpose Bunny Large' WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=48455 AND `SourceId`=0 AND `ElseGroup`=0 AND `ConditionTypeOrReference`=31 AND `ConditionTarget`=0 AND `ConditionValue1`=3 AND `ConditionValue2`=28013 AND `ConditionValue3`=0; From 50223ea04f8216d1fe2dd588a16a1958569f3daa Mon Sep 17 00:00:00 2001 From: Dr-J Date: Fri, 26 Feb 2016 16:21:26 +0000 Subject: [PATCH 33/93] DB/Quest: Bombard the Ballistae Add missing visuals for http://www.wowhead.com/quest=12232/bombard-the-ballistae --- sql/updates/world/2016_02_26_00_world.sql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 sql/updates/world/2016_02_26_00_world.sql diff --git a/sql/updates/world/2016_02_26_00_world.sql b/sql/updates/world/2016_02_26_00_world.sql new file mode 100644 index 00000000000..d08d5055089 --- /dev/null +++ b/sql/updates/world/2016_02_26_00_world.sql @@ -0,0 +1,17 @@ +UPDATE `smart_scripts` SET `action_type`=11, `action_param1`=48351, `comment`='Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Cast Bombard the Ballistae: Ballista Bow' WHERE `entryorguid`=27331 AND `source_type`=0 AND `id`=1 AND `link`=0; +UPDATE `smart_scripts` SET `event_param3`=120000, `event_param4`=120000 WHERE `entryorguid`=27331 AND `source_type`=0 AND `id`=0 AND `link`=1; + +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=27331 AND `id`>1; +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 +(27331, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48352, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Cast Bombard the Ballistae: Ballista Frame'), +(27331, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48353, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Cast Bombard the Ballistae: Ballista Missile'), +(27331, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48354, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Cast Bombard the Ballistae: Ballista Wheel'), +(27331, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 11, 48347, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Cast Bombard the Ballistae: FX Master'), +(27331, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 11, 52687, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Cast Bombard the Ballistae: Knockback'), +(27331, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 188673, 0, 0, 0, 0, 0, 0, 'Bombard the Ballistae Kill Credit Bunny - On Spellhit \'Siegesmith Bombs\' - Despawn GO'); + +UPDATE `smart_scripts` SET `link`=2 WHERE `entryorguid`=27331 AND `source_type`=0 AND `id`=1 AND `link`=0; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=48347; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 2, 48347, 0, 0, 31, 0, 5, 188673, 0, 0, 0, 0, '', 'Bombard the Ballistae: FX Master effect #2 targets go 188673'); From 1c86d286d4f9afc365a2a64b7ed0eb2d939814b7 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Fri, 26 Feb 2016 17:54:46 -0300 Subject: [PATCH 34/93] DB/EventScripts: Clean up the Scryer's Orb no longer used event script * Ref #13208 --- sql/updates/world/2016_02_26_01_world.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2016_02_26_01_world.sql diff --git a/sql/updates/world/2016_02_26_01_world.sql b/sql/updates/world/2016_02_26_01_world.sql new file mode 100644 index 00000000000..b30b3cba35f --- /dev/null +++ b/sql/updates/world/2016_02_26_01_world.sql @@ -0,0 +1 @@ +DELETE FROM `event_scripts` WHERE `id` = 16547; From 8267e493d10ce2322d13ab30e6944673000425d4 Mon Sep 17 00:00:00 2001 From: treeston Date: Sat, 27 Feb 2016 01:22:59 +0100 Subject: [PATCH 35/93] DB/Spells: "Val'anyr, Hammer of Ancient Kings" now properly shields targets healed by Glyph of Holy Light, Earth Shield and others. Fixes & closes #16478. --- sql/updates/world/2016_02_27_00_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2016_02_27_00_world.sql diff --git a/sql/updates/world/2016_02_27_00_world.sql b/sql/updates/world/2016_02_27_00_world.sql new file mode 100644 index 00000000000..b9288b2ddfb --- /dev/null +++ b/sql/updates/world/2016_02_27_00_world.sql @@ -0,0 +1,4 @@ +-- fix "Val'anyr, Hammer of Ancient Kings" to properly provide shields from Earth Shield charges and Glyph of Holy Light heals (as well as others) +DELETE FROM `spell_proc_event` WHERE `entry`=64411; +INSERT INTO `spell_proc_event` (`entry`,`procFlags`) VALUES +(64411,0x00044400); From 31cd082833926539c56569ff6faabc139f5f3223 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 27 Feb 2016 12:02:32 +0100 Subject: [PATCH 36/93] Scripts/Ulduar: Fix crash Change an assert to a NULL check on Flame Leviathan vehicle kit, it can be NULL on map unload. Close #16662 --- .../scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 6dfc3bf01e7..98827fb3e00 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -334,7 +334,8 @@ class boss_flame_leviathan : public CreatureScript void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { if (spell->Id == SPELL_START_THE_ENGINE) - ASSERT_NOTNULL(me->GetVehicleKit())->InstallAllAccessories(false); + if (Vehicle* vehicleKit = me->GetVehicleKit()) + vehicleKit->InstallAllAccessories(false); if (spell->Id == SPELL_ELECTROSHOCK) me->InterruptSpell(CURRENT_CHANNELED_SPELL); From 75511d0e0a16ac219562f23bb0d37f82043bf2d1 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sat, 27 Feb 2016 17:32:06 +0100 Subject: [PATCH 37/93] Core/Gossips: fixed long time not seen typo in c81d6e9b4bec14a46fd4eb01ce51d874a12bf5f7 --- src/server/game/Entities/Player/Player.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index cbf29980057..4546ce72799 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14053,14 +14053,14 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool if (!optionBroadcastText) { /// Find localizations from database. - if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId))) + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, itr->second.OptionIndex))) ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, locale, strOptionText); } if (!boxBroadcastText) { /// Find localizations from database. - if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId))) + if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, itr->second.OptionIndex))) ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText); } } From 9beeca79ac0ece4fd07ccd83921a7ec93cb85efa Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sat, 27 Feb 2016 17:47:35 +0100 Subject: [PATCH 38/93] Core/Logging: fixed default logger (partial reverts 0904858624297bb6098bde7d22fd080245dd8d5a) --- src/common/Logging/Log.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common/Logging/Log.cpp b/src/common/Logging/Log.cpp index 4bd0487343d..07fb7c280f4 100644 --- a/src/common/Logging/Log.cpp +++ b/src/common/Logging/Log.cpp @@ -214,13 +214,13 @@ void Log::ReadLoggersFromConfig() AppenderConsole* appender = new AppenderConsole(NextAppenderId(), "Console", LOG_LEVEL_DEBUG, APPENDER_FLAGS_NONE, ExtraAppenderArgs()); appenders[appender->getId()] = appender; - Logger& logger = loggers[LOGGER_ROOT]; - logger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR); - logger.addAppender(appender->getId(), appender); + Logger& rootLogger = loggers[LOGGER_ROOT]; + rootLogger.Create(LOGGER_ROOT, LOG_LEVEL_ERROR); + rootLogger.addAppender(appender->getId(), appender); - logger = loggers["server"]; - logger.Create("server", LOG_LEVEL_ERROR); - logger.addAppender(appender->getId(), appender); + Logger& serverLogger = loggers["server"]; + serverLogger.Create("server", LOG_LEVEL_ERROR); + serverLogger.addAppender(appender->getId(), appender); } } From ffdf75a23316223b621793cd2b0288f394a774ff Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sat, 27 Feb 2016 17:55:43 +0100 Subject: [PATCH 39/93] Scripts/Spells: Glyph of Arcane Shot is affected by own debuffs on target only --- src/common/Logging/Log.cpp | 2 +- src/server/scripts/Spells/spell_hunter.cpp | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/common/Logging/Log.cpp b/src/common/Logging/Log.cpp index 07fb7c280f4..a80a4671822 100644 --- a/src/common/Logging/Log.cpp +++ b/src/common/Logging/Log.cpp @@ -219,7 +219,7 @@ void Log::ReadLoggersFromConfig() rootLogger.addAppender(appender->getId(), appender); Logger& serverLogger = loggers["server"]; - serverLogger.Create("server", LOG_LEVEL_ERROR); + serverLogger.Create("server", LOG_LEVEL_INFO); serverLogger.addAppender(appender->getId(), appender); } } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index c927750e968..4d7cc277ff6 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -193,8 +193,8 @@ class spell_hun_chimera_shot : public SpellScriptLoader { uint32 spellId = 0; int32 basePoint = 0; - Unit::AuraApplicationMap& Auras = unitTarget->GetAppliedAuras(); - for (Unit::AuraApplicationMap::iterator i = Auras.begin(); i != Auras.end(); ++i) + Unit::AuraApplicationMap const& auras = unitTarget->GetAppliedAuras(); + for (Unit::AuraApplicationMap::const_iterator i = auras.begin(); i != auras.end(); ++i) { Aura* aura = i->second->GetBase(); if (aura->GetCasterGUID() != caster->GetGUID()) @@ -318,12 +318,15 @@ class spell_hun_glyph_of_arcane_shot : public SpellScriptLoader { if (Unit* procTarget = eventInfo.GetProcTarget()) { - Unit::AuraApplicationMap& auras = procTarget->GetAppliedAuras(); + Unit::AuraApplicationMap const& auras = procTarget->GetAppliedAuras(); for (Unit::AuraApplicationMap::const_iterator i = auras.begin(); i != auras.end(); ++i) { - SpellInfo const* spellInfo = i->second->GetBase()->GetSpellInfo(); + Aura const* aura = i->second->GetBase(); + if (aura->GetCasterGUID() != GetTarget()->GetGUID()) + continue; // Search only Serpent Sting, Viper Sting, Scorpid Sting, Wyvern Sting - if (spellInfo->SpellFamilyFlags.HasFlag(0xC000, 0x1080) && spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER) + if (aura->GetSpellInfo()->SpellFamilyName == SPELLFAMILY_HUNTER + && aura->GetSpellInfo()->SpellFamilyFlags.HasFlag(0xC000, 0x1080)) return true; } } From 5354b585e3d8eb89b77b932986a3fbf3b53706c4 Mon Sep 17 00:00:00 2001 From: treeston Date: Sat, 27 Feb 2016 23:47:46 +0100 Subject: [PATCH 40/93] Unit/AI: Move CharmedPlayerAI logic from the SetCharmedBy/RemoveCharmedBy hooks to Player::Update -> Unit::UpdateCharmAI to guarantee thread safety and prevent race condition crashes. --- src/server/game/Entities/Player/Player.cpp | 6 ++ src/server/game/Entities/Unit/Unit.cpp | 101 +++++++++++++-------- 2 files changed, 67 insertions(+), 40 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4546ce72799..88050a1eb44 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1239,6 +1239,12 @@ void Player::Update(uint32 p_time) if (IsAIEnabled && GetAI()) GetAI()->UpdateAI(p_time); + else if (NeedChangeAI) + { + UpdateCharmAI(); + NeedChangeAI = false; + IsAIEnabled = !!GetAI(); + } // Update items that have just a limited lifetime if (now > m_Last_tick) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e2b0e1f01eb..74d043a95a8 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9299,7 +9299,7 @@ Unit* Unit::GetCharmer() const if (ObjectGuid charmerGUID = GetCharmerGUID()) return ObjectAccessor::GetUnit(*this, charmerGUID); - return NULL; + return nullptr; } Player* Unit::GetCharmerOrOwnerPlayerOrPlayerItself() const @@ -13724,28 +13724,63 @@ void Unit::CleanupsBeforeDelete(bool finalCleanup) void Unit::UpdateCharmAI() { - if (GetTypeId() == TYPEID_PLAYER) - return; - - if (i_disabledAI) // disabled AI must be primary AI + switch (GetTypeId()) { - if (!IsCharmed()) - { - delete i_AI; - i_AI = i_disabledAI; - i_disabledAI = NULL; - } - } - else - { - if (IsCharmed()) - { - i_disabledAI = i_AI; - if (isPossessed() || IsVehicle()) - i_AI = new PossessedAI(ToCreature()); + case TYPEID_UNIT: + if (i_disabledAI) // disabled AI must be primary AI + { + if (!IsCharmed()) + { + delete i_AI; + i_AI = i_disabledAI; + i_disabledAI = nullptr; + } + } else - i_AI = new PetAI(ToCreature()); + { + if (IsCharmed()) + { + i_disabledAI = i_AI; + if (isPossessed() || IsVehicle()) + i_AI = new PossessedAI(ToCreature()); + else + i_AI = new PetAI(ToCreature()); + } + } + break; + case TYPEID_PLAYER: + { + if (Unit* charmer = GetCharmer()) // if we are currently being charmed, then we should apply charm AI + { + if (Creature* creatureCharmer = charmer->ToCreature()) // this should only ever happen for creature charmers + { + i_disabledAI = i_AI; + // first, we check if the creature's own AI specifies an override playerai for its owned players + if (PlayerAI* charmAI = creatureCharmer->IsAIEnabled ? creatureCharmer->AI()->GetAIForCharmedPlayer(ToPlayer()) : nullptr) + i_AI = charmAI; + else // otherwise, we default to the generic one + i_AI = new SimpleCharmedPlayerAI(ToPlayer()); + } + else + { + TC_LOG_ERROR("misc", "Attempt to assign charm AI to player %s who is charmed by non-creature %s.", GetGUID().ToString().c_str(), charmer->GetGUID().ToString().c_str()); + } + } + else + { + // we allow the charmed PlayerAI to clean up + i_AI->OnCharmed(false); + // then delete it + delete i_AI; + // and restore our previous PlayerAI (if we had one) + i_AI = i_disabledAI; + i_disabledAI = nullptr; + // IsAIEnabled gets handled in the caller + } + break; } + default: + TC_LOG_ERROR("misc", "Attempt to update charm AI for unit %s, which is neither player nor creature.", GetGUID().ToString().c_str()); } } @@ -15979,15 +16014,11 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au if (player->isAFK()) player->ToggleAFK(); - if (Creature* creatureCharmer = charmer->ToCreature()) // we are charmed by a creature + if (charmer->GetTypeId() == TYPEID_UNIT) // we are charmed by a creature { - IsAIEnabled = true; - i_disabledAI = i_AI; - // set our AI to the charmer's custom charm AI if applicable - if (PlayerAI* charmAI = creatureCharmer->AI()->GetAIForCharmedPlayer(player)) - i_AI = charmAI; - else // otherwise use the default charmed player AI - i_AI = new SimpleCharmedPlayerAI(player); + // change AI to charmed AI on next Update tick + NeedChangeAI = true; + IsAIEnabled = false; } player->SetClientControl(this, false); } @@ -16149,18 +16180,8 @@ void Unit::RemoveCharmedBy(Unit* charmer) { if (charmer->GetTypeId() == TYPEID_UNIT) // charmed by a creature, this means we had PlayerAI { - if (i_AI) - { - // allow charmed player AI to clean up - i_AI->OnCharmed(false); - // then delete it - delete i_AI; - // and restore our previous playerAI (if we had one) - if ((i_AI = i_disabledAI)) - i_disabledAI = nullptr; - else - IsAIEnabled = false; - } + NeedChangeAI = true; + IsAIEnabled = false; } player->SetClientControl(this, true); } From bfac62c5c914efe1576d39504d5dd75f11f41237 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 28 Feb 2016 01:56:13 +0100 Subject: [PATCH 41/93] Fix some behavioral weirdness resulting from 79a945d5 - thanks ccrs. --- src/server/game/AI/CreatureAI.cpp | 3 --- src/server/game/Entities/Unit/Unit.cpp | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 33de8b09123..352ae635878 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -134,10 +134,7 @@ void CreatureAI::MoveInLineOfSight(Unit* who) return; if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who, false)) - { - me->AddThreat(who, 0.0f); // ensure our initial target is the first thing added to threat list so we don't randomly switch off if DoZoneInCombat is called during the EnterCombat hook AttackStart(who); - } //else if (who->GetVictim() && me->IsFriendlyTo(who) // && me->IsWithinDistInMap(who, sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_RADIUS)) // && me->CanStartAttack(who->GetVictim(), true)) /// @todo if we use true, it will not attack it when it arrives diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 74d043a95a8..6fcd72c4934 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9052,10 +9052,10 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) if (GetTypeId() == TYPEID_UNIT && !IsPet()) { // should not let player enter combat by right clicking target - doesn't helps + AddThreat(victim, 0.0f); SetInCombatWith(victim); if (victim->GetTypeId() == TYPEID_PLAYER) victim->SetInCombatWith(this); - AddThreat(victim, 0.0f); ToCreature()->SendAIReaction(AI_REACTION_HOSTILE); ToCreature()->CallAssistance(); From 1602be1253d4e3215622283b2d940d1d9de28453 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Fri, 26 Feb 2016 05:29:26 +0100 Subject: [PATCH 42/93] Core/Scripts/boss_headless_horseman: remove hardcoded text Remove the old `#define EMOTE_LAUGHS "Headless Horseman laughs"` No emote is ever used on retail. It would have created log spam. --- .../ScarletMonastery/boss_headless_horseman.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index dff0a66cec0..74b300919d8 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -134,8 +134,6 @@ static char const* Text[]= "Now, know demise!" }; -#define EMOTE_LAUGHS "Headless Horseman laughs" // needs assigned to db. - class npc_wisp_invis : public CreatureScript { public: @@ -347,7 +345,6 @@ public: Creature* speaker = DoSpawnCreature(HELPER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN, 1000); if (speaker) speaker->CastSpell(speaker, SPELL_HEAD_SPEAKS, false); - me->TextEmote(EMOTE_LAUGHS); } else laugh -= diff; } @@ -724,7 +721,6 @@ public: if (laugh <= diff) { laugh = urand(11000, 22000); - me->TextEmote(EMOTE_LAUGHS); DoPlaySoundToSet(me, RandomLaugh[rand32() % 3]); } else laugh -= diff; From 59d02322a78b9f58c51930e085ad6cad9dd95eb0 Mon Sep 17 00:00:00 2001 From: treeston Date: Sun, 28 Feb 2016 03:45:21 +0100 Subject: [PATCH 43/93] Unit/AI: Making Nayd happy. --- src/server/game/Entities/Player/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 88050a1eb44..f3d45b005d8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1243,7 +1243,7 @@ void Player::Update(uint32 p_time) { UpdateCharmAI(); NeedChangeAI = false; - IsAIEnabled = !!GetAI(); + IsAIEnabled = (GetAI() != nullptr); } // Update items that have just a limited lifetime From 6ffac018ddbbda70bd26148416749ac8352d1738 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Sun, 28 Feb 2016 00:49:40 +0100 Subject: [PATCH 44/93] Core/Scripts: triple zone cleanup Remove hardcoded (as well as deprecated) text in the following places: - blackrock_depths.cpp - zone_burning_steppes.cpp - zone_stormwind_city.cpp Updates https://github.com/velinath/TrinityCore/issues/2 --- .../world/2016_02_28_CLEAN-UP_world.sql | 2 + .../BlackrockDepths/blackrock_depths.cpp | 77 ++---------- .../EasternKingdoms/zone_burning_steppes.cpp | 87 ++----------- .../EasternKingdoms/zone_stormwind_city.cpp | 114 ++---------------- 4 files changed, 26 insertions(+), 254 deletions(-) create mode 100644 sql/updates/world/2016_02_28_CLEAN-UP_world.sql diff --git a/sql/updates/world/2016_02_28_CLEAN-UP_world.sql b/sql/updates/world/2016_02_28_CLEAN-UP_world.sql new file mode 100644 index 00000000000..5a5694e0320 --- /dev/null +++ b/sql/updates/world/2016_02_28_CLEAN-UP_world.sql @@ -0,0 +1,2 @@ +-- remove script from core requires removing ScriptName from creature_template +UPDATE `creature_template` SET `ScriptName`= '' WHERE `entry`IN (1749,2708); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 9cd724e5596..79709734e18 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -508,19 +508,11 @@ public: }; // npc_lokhtos_darkbargainer -enum LokhtosItems +enum Lokhtos { + QUEST_A_BINDING_CONTRACT = 7604, + ITEM_SULFURON_INGOT = 17203, ITEM_THRORIUM_BROTHERHOOD_CONTRACT = 18628, - ITEM_SULFURON_INGOT = 17203 -}; - -enum LokhtosQuests -{ - QUEST_A_BINDING_CONTRACT = 7604 -}; - -enum LokhtosSpells -{ SPELL_CREATE_THORIUM_BROTHERHOOD_CONTRACT_DND = 23059 }; @@ -570,67 +562,12 @@ public: } }; -// npc_dughal_stormwing -enum DughalQuests -{ - QUEST_JAIL_BREAK = 4322 -}; - -#define SAY_DUGHAL_FREE "Thank you, $N! I'm free!!!" -#define GOSSIP_DUGHAL "You're free, Dughal! Get out of here!" - -// npc_marshal_windsor -#define SAY_WINDSOR_AGGRO1 "You locked up the wrong Marshal. Prepare to be destroyed!" -#define SAY_WINDSOR_AGGRO2 "I bet you're sorry now, aren't you !?!!" -#define SAY_WINDSOR_AGGRO3 "You better hold me back $N or they are going to feel some prison house beatings." -#define SAY_WINDSOR_1 "Let's get a move on. My gear should be in the storage area up this way..." -#define SAY_WINDSOR_4_1 "Check that cell, $N. If someone is alive in there, we need to get them out." -#define SAY_WINDSOR_4_2 "Get him out of there!" -#define SAY_WINDSOR_4_3 "Good work! We're almost there, $N. This way." -#define SAY_WINDSOR_6 "This is it, $N. My stuff should be in that room. Cover me, I'm going in!" -#define SAY_WINDSOR_9 "Ah, there it is!" - -enum MarshalWindsor -{ - NPC_REGINALD_WINDSOR = 9682 -}; - -// npc_marshal_reginald_windsor -#define SAY_REGINALD_WINDSOR_0_1 "Can you feel the power, $N??? It's time to ROCK!" -#define SAY_REGINALD_WINDSOR_0_2 "Now we just have to free Tobias and we can get out of here. This way!" -#define SAY_REGINALD_WINDSOR_5_1 "Open it." -#define SAY_REGINALD_WINDSOR_5_2 "I never did like those two. Let's get moving." -#define SAY_REGINALD_WINDSOR_7_1 "Open it and be careful this time!" -#define SAY_REGINALD_WINDSOR_7_2 "That intolerant dirtbag finally got what was coming to him. Good riddance!" -#define SAY_REGINALD_WINDSOR_7_3 "Alright, let's go." -#define SAY_REGINALD_WINDSOR_13_1 "Open it. We need to hurry up. I can smell those Dark Irons coming a mile away and I can tell you one thing, they're COMING!" -#define SAY_REGINALD_WINDSOR_13_2 "Administering fists of fury on Crest Killer!" -#define SAY_REGINALD_WINDSOR_13_3 "He has to be in the last cell. Unless... they killed him." -#define SAY_REGINALD_WINDSOR_14_1 "Get him out of there!" -#define SAY_REGINALD_WINDSOR_14_2 "Excellent work, $N. Let's find the exit. I think I know the way. Follow me!" -#define SAY_REGINALD_WINDSOR_20_1 "We made it!" -#define SAY_REGINALD_WINDSOR_20_2 "Meet me at Maxwell's encampment. We'll go over the next stages of the plan there and figure out a way to decode my tablets without the decryption ring." - -enum MarshalReginaldWindor -{ - NPC_SHILL_DINGER = 9678, - NPC_CREST_KILLER = 9680 -}; - // npc_rocknot -enum RocknotSays +enum Rocknot { - SAY_GOT_BEER = 0 -}; - -enum RocknotSpells -{ - SPELL_DRUNKEN_RAGE = 14872 -}; - -enum RocknotQuests -{ - QUEST_ALE = 4295 + SAY_GOT_BEER = 0, + QUEST_ALE = 4295, + SPELL_DRUNKEN_RAGE = 14872 }; class npc_rocknot : public CreatureScript diff --git a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp index df61a010f84..6caf253570a 100644 --- a/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp +++ b/src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp @@ -19,7 +19,7 @@ /* ScriptData SDName: Burning_Steppes SD%Complete: 100 -SDComment: Quest support: 4224, 4866 +SDComment: Quest support: 4866 SDCategory: Burning Steppes EndScriptData */ @@ -36,25 +36,11 @@ EndContentData */ ## npc_ragged_john ######*/ -#define GOSSIP_HELLO "Official buisness, John. I need some information about Marsha Windsor. Tell me about the last time you saw him." -#define GOSSIP_SELECT1 "So what did you do?" -#define GOSSIP_SELECT2 "Start making sense, dwarf. I don't want to have anything to do with your cracker, your pappy, or any sort of 'discreditin'." -#define GOSSIP_SELECT3 "Ironfoe?" -#define GOSSIP_SELECT4 "Interesting... continue John." -#define GOSSIP_SELECT5 "So that's how Windsor died..." -#define GOSSIP_SELECT6 "So how did he die?" -#define GOSSIP_SELECT7 "Ok so where the hell is he? Wait a minute! Are you drunk?" -#define GOSSIP_SELECT8 "WHY is he in Blackrock Depths?" -#define GOSSIP_SELECT9 "300? So the Dark Irons killed him and dragged him into the Depths?" -#define GOSSIP_SELECT10 "Ahh... Ironfoe" -#define GOSSIP_SELECT11 "Thanks, Ragged John. Your story was very uplifting and informative" - enum RaggedJohn { - QUEST_THE_TRUE_MASTERS = 4224, - QUEST_MOTHERS_MILK = 4866, - SPELL_MOTHERS_MILK = 16468, - SPELL_WICKED_MILKING = 16472 + QUEST_MOTHERS_MILK = 4866, + SPELL_MOTHERS_MILK = 16468, + SPELL_WICKED_MILKING = 16472 }; class npc_ragged_john : public CreatureScript @@ -86,72 +72,13 @@ public: void EnterCombat(Unit* /*who*/) override { } }; - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(2714, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(2715, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - player->SEND_GOSSIP_MENU(2716, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - player->SEND_GOSSIP_MENU(2717, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+4: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - player->SEND_GOSSIP_MENU(2718, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+5: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - player->SEND_GOSSIP_MENU(2719, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+6: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - player->SEND_GOSSIP_MENU(2720, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+7: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT8, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - player->SEND_GOSSIP_MENU(2721, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+8: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT9, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - player->SEND_GOSSIP_MENU(2722, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+9: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT10, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - player->SEND_GOSSIP_MENU(2723, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+10: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SELECT11, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - player->SEND_GOSSIP_MENU(2725, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+11: - player->CLOSE_GOSSIP_MENU(); - player->AreaExploredOrEventHappens(QUEST_THE_TRUE_MASTERS); - break; - } - return true; - } - bool OnGossipHello(Player* player, Creature* creature) override { if (creature->IsQuestGiver()) + { player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(QUEST_THE_TRUE_MASTERS) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - player->SEND_GOSSIP_MENU(2713, creature->GetGUID()); + player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); + } return true; } diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index 2d6d4da5aef..4a585bcb267 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -19,14 +19,12 @@ /* ScriptData SDName: Stormwind_City SD%Complete: 100 -SDComment: Quest support: 1640, 1447, 4185, 11223, 434. +SDComment: Quest support: 1640, 1447, 434. SDCategory: Stormwind City EndScriptData */ /* ContentData -npc_archmage_malin npc_bartleby -npc_lady_katrana_prestor npc_tyrion npc_tyrion_spybot npc_marzon_silent_blade @@ -39,51 +37,14 @@ EndContentData */ #include "ScriptedEscortAI.h" #include "Player.h" -/*###### -## npc_archmage_malin -######*/ - -#define GOSSIP_ITEM_MALIN "Can you send me to Theramore? I have an urgent message for Lady Jaina from Highlord Bolvar." - -class npc_archmage_malin : public CreatureScript -{ -public: - npc_archmage_malin() : CreatureScript("npc_archmage_malin") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF) - { - player->CLOSE_GOSSIP_MENU(); - creature->CastSpell(player, 42711, true); - } - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(11223) == QUEST_STATUS_COMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MALIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } -}; - /*###### ## npc_bartleby ######*/ enum Bartleby { - FACTION_ENEMY = 168, - QUEST_BEAT = 1640 + FACTION_ENEMY = 168, + QUEST_BEAT = 1640 }; class npc_bartleby : public CreatureScript @@ -147,72 +108,19 @@ public: }; }; -/*###### -## npc_lady_katrana_prestor -######*/ - -#define GOSSIP_ITEM_KAT_1 "Pardon the intrusion, Lady Prestor, but Highlord Bolvar suggested that I seek your advice." -#define GOSSIP_ITEM_KAT_2 "My apologies, Lady Prestor." -#define GOSSIP_ITEM_KAT_3 "Begging your pardon, Lady Prestor. That was not my intent." -#define GOSSIP_ITEM_KAT_4 "Thank you for your time, Lady Prestor." - -class npc_lady_katrana_prestor : public CreatureScript -{ -public: - npc_lady_katrana_prestor() : CreatureScript("npc_lady_katrana_prestor") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KAT_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(2694, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KAT_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - player->SEND_GOSSIP_MENU(2695, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KAT_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - player->SEND_GOSSIP_MENU(2696, creature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - player->CLOSE_GOSSIP_MENU(); - player->AreaExploredOrEventHappens(4185); - break; - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(4185) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_KAT_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - player->SEND_GOSSIP_MENU(2693, creature->GetGUID()); - - return true; - } -}; - /*###### ## npc_lord_gregor_lescovar ######*/ enum LordGregorLescovar { - SAY_GUARD_2 = 0, - SAY_LESCOVAR_2 = 0, - SAY_LESCOVAR_3 = 1, - SAY_LESCOVAR_4 = 2, - SAY_MARZON_1 = 0, - SAY_MARZON_2 = 1, - SAY_TYRION_2 = 1, + SAY_GUARD_2 = 0, + SAY_LESCOVAR_2 = 0, + SAY_LESCOVAR_3 = 1, + SAY_LESCOVAR_4 = 2, + SAY_MARZON_1 = 0, + SAY_MARZON_2 = 1, + SAY_TYRION_2 = 1, NPC_STORMWIND_ROYAL = 1756, NPC_MARZON_BLADE = 1755, @@ -650,9 +558,7 @@ public: void AddSC_stormwind_city() { - new npc_archmage_malin(); new npc_bartleby(); - new npc_lady_katrana_prestor(); new npc_tyrion(); new npc_tyrion_spybot(); new npc_lord_gregor_lescovar(); From 3abfbeae6f73c8cf6716dc82b0e1ba163e533a15 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sun, 28 Feb 2016 13:09:15 +0100 Subject: [PATCH 45/93] Rename 2016_02_28_CLEAN-UP_world.sql to 2016_02_28_00_world.sql --- .../{2016_02_28_CLEAN-UP_world.sql => 2016_02_28_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2016_02_28_CLEAN-UP_world.sql => 2016_02_28_00_world.sql} (100%) diff --git a/sql/updates/world/2016_02_28_CLEAN-UP_world.sql b/sql/updates/world/2016_02_28_00_world.sql similarity index 100% rename from sql/updates/world/2016_02_28_CLEAN-UP_world.sql rename to sql/updates/world/2016_02_28_00_world.sql From f9eff81388b12f6f8275f892c67bf197188c3450 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Sun, 28 Feb 2016 11:49:48 -0300 Subject: [PATCH 46/93] Scripts/Karazhan: Clean up instance script Closes: #16533 --- .../Karazhan/boss_maiden_of_virtue.cpp | 17 +- .../Karazhan/boss_midnight.cpp | 10 +- .../EasternKingdoms/Karazhan/boss_moroes.cpp | 16 +- .../Karazhan/boss_nightbane.cpp | 10 +- .../Karazhan/boss_shade_of_aran.cpp | 6 +- .../Karazhan/boss_terestian_illhoof.cpp | 5 +- .../EasternKingdoms/Karazhan/bosses_opera.cpp | 31 +- .../Karazhan/instance_karazhan.cpp | 355 ++++++++---------- .../EasternKingdoms/Karazhan/karazhan.cpp | 4 +- .../EasternKingdoms/Karazhan/karazhan.h | 56 ++- 10 files changed, 239 insertions(+), 271 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp index 9f4a31fdbbc..b694c074879 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_maiden_of_virtue.cpp @@ -50,19 +50,9 @@ class boss_maiden_of_virtue : public CreatureScript public: boss_maiden_of_virtue() : CreatureScript("boss_maiden_of_virtue") { } - CreatureAI* GetAI(Creature* creature) const override - { - return new boss_maiden_of_virtueAI(creature); - } - struct boss_maiden_of_virtueAI : public BossAI { - boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, TYPE_MAIDEN) { } - - void Reset() override - { - _Reset(); - } + boss_maiden_of_virtueAI(Creature* creature) : BossAI(creature, DATA_MAIDEN_OF_VIRTUE) { } void KilledUnit(Unit* /*Victim*/) override { @@ -132,6 +122,11 @@ public: DoMeleeAttackIfReady(); } }; + + CreatureAI* GetAI(Creature* creature) const override + { + return new boss_maiden_of_virtueAI(creature); + } }; void AddSC_boss_maiden_of_virtue() diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp index ced8dd8f37e..d4de862244c 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_midnight.cpp @@ -26,6 +26,7 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "SpellInfo.h" +#include "karazhan.h" enum Midnight { @@ -109,6 +110,9 @@ public: Talk(SAY_DEATH); if (Unit* midnight = ObjectAccessor::GetUnit(*me, Midnight)) midnight->KillSelf(); + + if (InstanceScript* instance = me->GetInstanceScript()) + instance->SetBossState(DATA_ATTUMEN, DONE); } void UpdateAI(uint32 diff) override; @@ -157,7 +161,11 @@ public: me->SetVisible(true); } - void EnterCombat(Unit* /*who*/) override { } + void EnterCombat(Unit* /*who*/) override + { + if (InstanceScript* instance = me->GetInstanceScript()) + instance->SetBossState(DATA_ATTUMEN, IN_PROGRESS); + } void KilledUnit(Unit* /*victim*/) override { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp index 79e36442f4b..e667141fa29 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_moroes.cpp @@ -143,12 +143,12 @@ public: if (me->IsAlive()) SpawnAdds(); - instance->SetData(TYPE_MOROES, NOT_STARTED); + instance->SetBossState(DATA_MOROES, NOT_STARTED); } void StartEvent() { - instance->SetData(TYPE_MOROES, IN_PROGRESS); + instance->SetBossState(DATA_MOROES, IN_PROGRESS); DoZoneInCombat(); } @@ -171,7 +171,7 @@ public: { Talk(SAY_DEATH); - instance->SetData(TYPE_MOROES, DONE); + instance->SetBossState(DATA_MOROES, DONE); DeSpawnAdds(); @@ -257,12 +257,6 @@ public: if (!UpdateVictim()) return; - if (!instance->GetData(TYPE_MOROES)) - { - EnterEvadeMode(); - return; - } - if (!Enrage && HealthBelowPct(30)) { DoCast(me, SPELL_FRENZY); @@ -347,7 +341,7 @@ struct boss_moroes_guestAI : public ScriptedAI void Reset() override { - instance->SetData(TYPE_MOROES, NOT_STARTED); + instance->SetBossState(DATA_MOROES, NOT_STARTED); } void AcquireGUID() @@ -373,7 +367,7 @@ struct boss_moroes_guestAI : public ScriptedAI void UpdateAI(uint32 /*diff*/) override { - if (!instance->GetData(TYPE_MOROES)) + if (instance->GetBossState(DATA_MOROES) != IN_PROGRESS) EnterEvadeMode(); DoMeleeAttackIfReady(); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp index 6f5f2b8f65f..7d7c60ac419 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp @@ -143,10 +143,10 @@ public: me->SetWalk(false); me->setActive(true); - if (instance->GetData(TYPE_NIGHTBANE) == DONE || instance->GetData(TYPE_NIGHTBANE) == IN_PROGRESS) + if (instance->GetBossState(DATA_NIGHTBANE) == DONE || instance->GetBossState(DATA_NIGHTBANE) == IN_PROGRESS) me->DisappearAndDie(); else - instance->SetData(TYPE_NIGHTBANE, NOT_STARTED); + instance->SetBossState(DATA_NIGHTBANE, NOT_STARTED); HandleTerraceDoors(true); @@ -165,10 +165,10 @@ public: void EnterCombat(Unit* /*who*/) override { - instance->SetData(TYPE_NIGHTBANE, IN_PROGRESS); + instance->SetBossState(DATA_NIGHTBANE, IN_PROGRESS); HandleTerraceDoors(false); - Talk(YELL_AGGRO); + Talk(YELL_AGGRO); } void AttackStart(Unit* who) override @@ -179,7 +179,7 @@ public: void JustDied(Unit* /*killer*/) override { - instance->SetData(TYPE_NIGHTBANE, DONE); + instance->SetBossState(DATA_NIGHTBANE, DONE); HandleTerraceDoors(true); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index 450678a0f86..17a23a0b2e7 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -154,7 +154,7 @@ public: Initialize(); // Not in progress - instance->SetData(TYPE_ARAN, NOT_STARTED); + instance->SetBossState(DATA_ARAN, NOT_STARTED); instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), true); } @@ -167,7 +167,7 @@ public: { Talk(SAY_DEATH); - instance->SetData(TYPE_ARAN, DONE); + instance->SetBossState(DATA_ARAN, DONE); instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), true); } @@ -175,7 +175,7 @@ public: { Talk(SAY_AGGRO); - instance->SetData(TYPE_ARAN, IN_PROGRESS); + instance->SetBossState(DATA_ARAN, IN_PROGRESS); instance->HandleGameObject(instance->GetGuidData(DATA_GO_LIBRARY_DOOR), false); } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 7bc835dcced..2e33f0933e3 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -61,7 +61,6 @@ enum Creatures NPC_DEMONCHAINS = 17248, NPC_FIENDISHIMP = 17267, NPC_PORTAL = 17265, - NPC_KILREK = 17229 }; @@ -316,7 +315,7 @@ public: Initialize(); - instance->SetData(TYPE_TERESTIAN, NOT_STARTED); + instance->SetBossState(DATA_TERESTIAN, NOT_STARTED); me->RemoveAurasDueToSpell(SPELL_BROKEN_PACT); @@ -371,7 +370,7 @@ public: Talk(SAY_DEATH); - instance->SetData(TYPE_TERESTIAN, DONE); + instance->SetBossState(DATA_TERESTIAN, DONE); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index d4d0e6fa70d..0f6913b7ebc 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -708,13 +708,7 @@ public: void JustDied(Unit* /*killer*/) override { Talk(SAY_CRONE_DEATH); - - instance->SetData(TYPE_OPERA, DONE); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true); - - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void UpdateAI(uint32 diff) override @@ -908,13 +902,7 @@ public: void JustDied(Unit* /*killer*/) override { DoPlaySoundToSet(me, SOUND_WOLF_DEATH); - - instance->SetData(TYPE_OPERA, DONE); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true); - - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void UpdateAI(uint32 diff) override @@ -1158,12 +1146,7 @@ public: void JustDied(Unit* /*killer*/) override { Talk(SAY_JULIANNE_DEATH02); - - instance->SetData(TYPE_OPERA, DONE); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true); - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void KilledUnit(Unit* /*victim*/) override @@ -1316,13 +1299,7 @@ public: void JustDied(Unit* /*killer*/) override { Talk(SAY_ROMULO_DEATH); - - instance->SetData(TYPE_OPERA, DONE); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORLEFT), true); - instance->HandleGameObject(instance->GetGuidData(DATA_GO_STAGEDOORRIGHT), true); - - if (GameObject* pSideEntrance = instance->instance->GetGameObject(instance->GetGuidData(DATA_GO_SIDE_ENTRANCE_DOOR))) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + instance->SetBossState(DATA_OPERA_PERFORMANCE, DONE); } void KilledUnit(Unit* /*victim*/) override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index b725f421c8f..718d7e1ac7e 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -27,8 +27,6 @@ EndScriptData */ #include "InstanceScript.h" #include "karazhan.h" -#define MAX_ENCOUNTER 12 - /* 0 - Attumen + Midnight (optional) 1 - Moroes @@ -47,8 +45,8 @@ EndScriptData */ const Position OptionalSpawn[] = { { -10960.981445f, -1940.138428f, 46.178097f, 4.12f }, // Hyakiss the Lurker - { -10899.903320f, -2085.573730f, 49.474449f, 1.38f }, // Rokad the Ravager - { -10945.769531f, -2040.153320f, 49.474438f, 0.077f } // Shadikith the Glider + { -10945.769531f, -2040.153320f, 49.474438f, 0.077f }, // Shadikith the Glider + { -10899.903320f, -2085.573730f, 49.474449f, 1.38f } // Rokad the Ravager }; class instance_karazhan : public InstanceMapScript @@ -66,53 +64,27 @@ public: instance_karazhan_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + SetBossNumber(EncounterCount); // 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered. - m_uiOperaEvent = urand(1, 3); - m_uiOzDeathCount = 0; + OperaEvent = urand(EVENT_OZ, EVENT_RAJ); + OzDeathCount = 0; OptionalBossCount = 0; } - uint32 m_auiEncounter[MAX_ENCOUNTER]; - std::string strSaveData; - - uint32 m_uiOperaEvent; - uint32 m_uiOzDeathCount; - uint32 OptionalBossCount; - - ObjectGuid m_uiCurtainGUID; - ObjectGuid m_uiStageDoorLeftGUID; - ObjectGuid m_uiStageDoorRightGUID; - ObjectGuid m_uiKilrekGUID; - ObjectGuid m_uiTerestianGUID; - ObjectGuid m_uiMoroesGUID; - ObjectGuid m_uiLibraryDoor; // Door at Shade of Aran - ObjectGuid m_uiMassiveDoor; // Door at Netherspite - ObjectGuid m_uiSideEntranceDoor; // Side Entrance - ObjectGuid m_uiGamesmansDoor; // Door before Chess - ObjectGuid m_uiGamesmansExitDoor; // Door after Chess - ObjectGuid m_uiNetherspaceDoor; // Door at Malchezaar - ObjectGuid MastersTerraceDoor[2]; - ObjectGuid ImageGUID; - ObjectGuid DustCoveredChest; - - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - - return false; - } - void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { - case 17229: m_uiKilrekGUID = creature->GetGUID(); break; - case 15688: m_uiTerestianGUID = creature->GetGUID(); break; - case 15687: m_uiMoroesGUID = creature->GetGUID(); break; + case NPC_KILREK: + KilrekGUID = creature->GetGUID(); + break; + case NPC_TERESTIAN_ILLHOOF: + TerestianGUID = creature->GetGUID(); + break; + case NPC_MOROES: + MoroesGUID = creature->GetGUID(); + break; } } @@ -132,130 +104,129 @@ public: case NPC_PHASE_HOUND: case NPC_DREADBEAST: case NPC_SHADOWBEAST: - SetData(TYPE_OPTIONAL_BOSS, NOT_STARTED); + if (GetBossState(DATA_OPTIONAL_BOSS) == TO_BE_DECIDED) + { + ++OptionalBossCount; + if (OptionalBossCount == OPTIONAL_BOSS_REQUIRED_DEATH_COUNT) + { + switch (urand(NPC_HYAKISS_THE_LURKER, NPC_ROKAD_THE_RAVAGER)) + { + case NPC_HYAKISS_THE_LURKER: + instance->SummonCreature(NPC_HYAKISS_THE_LURKER, OptionalSpawn[0]); + break; + case NPC_SHADIKITH_THE_GLIDER: + instance->SummonCreature(NPC_SHADIKITH_THE_GLIDER, OptionalSpawn[1]); + break; + case NPC_ROKAD_THE_RAVAGER: + instance->SummonCreature(NPC_ROKAD_THE_RAVAGER, OptionalSpawn[2]); + break; + } + } + } break; default: break; } } - void SetData(uint32 type, uint32 uiData) override + void SetData(uint32 type, uint32 data) override { switch (type) { - case TYPE_ATTUMEN: m_auiEncounter[0] = uiData; break; - case TYPE_MOROES: - if (m_auiEncounter[1] == DONE) - break; - m_auiEncounter[1] = uiData; - break; - case TYPE_MAIDEN: m_auiEncounter[2] = uiData; break; - case TYPE_OPTIONAL_BOSS: - m_auiEncounter[3] = uiData; - if (uiData == NOT_STARTED) - { - ++OptionalBossCount; - if (OptionalBossCount == 50) - { - switch (urand(0, 2)) - { - case 0: - instance->SummonCreature(NPC_HYAKISS_THE_LURKER, OptionalSpawn[0]); - break; - case 1: - instance->SummonCreature(NPC_ROKAD_THE_RAVAGER, OptionalSpawn[1]); - break; - case 2: - instance->SummonCreature(NPC_SHADIKITH_THE_GLIDER, OptionalSpawn[2]); - break; - } - } - } - break; - case TYPE_OPERA: - m_auiEncounter[4] = uiData; - if (uiData == DONE) - UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, NULL); - break; - case TYPE_CURATOR: m_auiEncounter[5] = uiData; break; - case TYPE_ARAN: m_auiEncounter[6] = uiData; break; - case TYPE_TERESTIAN: m_auiEncounter[7] = uiData; break; - case TYPE_NETHERSPITE: m_auiEncounter[8] = uiData; break; - case TYPE_CHESS: - if (uiData == DONE) - DoRespawnGameObject(DustCoveredChest, DAY); - m_auiEncounter[9] = uiData; - break; - case TYPE_MALCHEZZAR: m_auiEncounter[10] = uiData; break; - case TYPE_NIGHTBANE: - if (m_auiEncounter[11] != DONE) - m_auiEncounter[11] = uiData; - break; case DATA_OPERA_OZ_DEATHCOUNT: - if (uiData == SPECIAL) - ++m_uiOzDeathCount; - else if (uiData == IN_PROGRESS) - m_uiOzDeathCount = 0; + if (data == SPECIAL) + ++OzDeathCount; + else if (data == IN_PROGRESS) + OzDeathCount = 0; break; } - - if (uiData == DONE) - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' - << m_auiEncounter[3] << ' ' << m_auiEncounter[4] << ' ' << m_auiEncounter[5] << ' ' << m_auiEncounter[6] << ' ' - << m_auiEncounter[7] << ' ' << m_auiEncounter[8] << ' ' << m_auiEncounter[9] << ' ' << m_auiEncounter[10] << ' ' << m_auiEncounter[11]; - - strSaveData = saveStream.str(); - - SaveToDB(); - OUT_SAVE_INST_DATA_COMPLETE; - } } - void SetGuidData(uint32 identifier, ObjectGuid data) override + bool SetBossState(uint32 type, EncounterState state) override + { + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_OPERA_PERFORMANCE: + if (state == DONE) + { + HandleGameObject(StageDoorLeftGUID, true); + HandleGameObject(StageDoorRightGUID, true); + if (GameObject* pSideEntrance = GetGameObject(SideEntranceDoor)) + pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, NULL); + } + break; + case DATA_CHESS: + if (state == DONE) + DoRespawnGameObject(DustCoveredChest, DAY); + break; + default: + break; + } + + return true; + } + + void SetGuidData(uint32 type, ObjectGuid data) override { - switch (identifier) - { - case DATA_IMAGE_OF_MEDIVH: ImageGUID = data; - } + if (type == DATA_IMAGE_OF_MEDIVH) + ImageGUID = data; } void OnGameObjectCreate(GameObject* go) override { switch (go->GetEntry()) { - case 183932: m_uiCurtainGUID = go->GetGUID(); break; - case 184278: - m_uiStageDoorLeftGUID = go->GetGUID(); - if (m_auiEncounter[4] == DONE) + case GO_STAGE_CURTAIN: + CurtainGUID = go->GetGUID(); + break; + case GO_STAGE_DOOR_LEFT: + StageDoorLeftGUID = go->GetGUID(); + if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE) go->SetGoState(GO_STATE_ACTIVE); break; - case 184279: - m_uiStageDoorRightGUID = go->GetGUID(); - if (m_auiEncounter[4] == DONE) + case GO_STAGE_DOOR_RIGHT: + StageDoorRightGUID = go->GetGUID(); + if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE) go->SetGoState(GO_STATE_ACTIVE); break; - case 184517: m_uiLibraryDoor = go->GetGUID(); break; - case 185521: m_uiMassiveDoor = go->GetGUID(); break; - case 184276: m_uiGamesmansDoor = go->GetGUID(); break; - case 184277: m_uiGamesmansExitDoor = go->GetGUID(); break; - case 185134: m_uiNetherspaceDoor = go->GetGUID(); break; - case 184274: MastersTerraceDoor[0] = go->GetGUID(); break; - case 184280: MastersTerraceDoor[1] = go->GetGUID(); break; - case 184275: - m_uiSideEntranceDoor = go->GetGUID(); - if (m_auiEncounter[4] == DONE) + case GO_PRIVATE_LIBRARY_DOOR: + LibraryDoor = go->GetGUID(); + break; + case GO_MASSIVE_DOOR: + MassiveDoor = go->GetGUID(); + break; + case GO_GAMESMAN_HALL_DOOR: + GamesmansDoor = go->GetGUID(); + break; + case GO_GAMESMAN_HALL_EXIT_DOOR: + GamesmansExitDoor = go->GetGUID(); + break; + case GO_NETHERSPACE_DOOR: + NetherspaceDoor = go->GetGUID(); + break; + case GO_MASTERS_TERRACE_DOOR: + MastersTerraceDoor[0] = go->GetGUID(); + break; + case GO_MASTERS_TERRACE_DOOR2: + MastersTerraceDoor[1] = go->GetGUID(); + break; + case GO_SIDE_ENTRANCE_DOOR: + SideEntranceDoor = go->GetGUID(); + if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE) go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); else go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); break; - case 185119: DustCoveredChest = go->GetGUID(); break; + case GO_DUST_COVERED_CHEST: + DustCoveredChest = go->GetGUID(); + break; } - switch (m_uiOperaEvent) + switch (OperaEvent) { /// @todo Set Object visibilities for Opera based on performance case EVENT_OZ: @@ -269,77 +240,77 @@ public: } } - std::string GetSaveData() override + uint32 GetData(uint32 type) const override { - return strSaveData; - } - - uint32 GetData(uint32 uiData) const override - { - switch (uiData) + switch (type) { - case TYPE_ATTUMEN: return m_auiEncounter[0]; - case TYPE_MOROES: return m_auiEncounter[1]; - case TYPE_MAIDEN: return m_auiEncounter[2]; - case TYPE_OPTIONAL_BOSS: return m_auiEncounter[3]; - case TYPE_OPERA: return m_auiEncounter[4]; - case TYPE_CURATOR: return m_auiEncounter[5]; - case TYPE_ARAN: return m_auiEncounter[6]; - case TYPE_TERESTIAN: return m_auiEncounter[7]; - case TYPE_NETHERSPITE: return m_auiEncounter[8]; - case TYPE_CHESS: return m_auiEncounter[9]; - case TYPE_MALCHEZZAR: return m_auiEncounter[10]; - case TYPE_NIGHTBANE: return m_auiEncounter[11]; - case DATA_OPERA_PERFORMANCE: return m_uiOperaEvent; - case DATA_OPERA_OZ_DEATHCOUNT: return m_uiOzDeathCount; + case DATA_OPERA_PERFORMANCE: + return OperaEvent; + case DATA_OPERA_OZ_DEATHCOUNT: + return OzDeathCount; } return 0; } - ObjectGuid GetGuidData(uint32 uiData) const override + ObjectGuid GetGuidData(uint32 type) const override { - switch (uiData) + switch (type) { - case DATA_KILREK: return m_uiKilrekGUID; - case DATA_TERESTIAN: return m_uiTerestianGUID; - case DATA_MOROES: return m_uiMoroesGUID; - case DATA_GO_STAGEDOORLEFT: return m_uiStageDoorLeftGUID; - case DATA_GO_STAGEDOORRIGHT: return m_uiStageDoorRightGUID; - case DATA_GO_CURTAINS: return m_uiCurtainGUID; - case DATA_GO_LIBRARY_DOOR: return m_uiLibraryDoor; - case DATA_GO_MASSIVE_DOOR: return m_uiMassiveDoor; - case DATA_GO_SIDE_ENTRANCE_DOOR: return m_uiSideEntranceDoor; - case DATA_GO_GAME_DOOR: return m_uiGamesmansDoor; - case DATA_GO_GAME_EXIT_DOOR: return m_uiGamesmansExitDoor; - case DATA_GO_NETHER_DOOR: return m_uiNetherspaceDoor; - case DATA_MASTERS_TERRACE_DOOR_1: return MastersTerraceDoor[0]; - case DATA_MASTERS_TERRACE_DOOR_2: return MastersTerraceDoor[1]; - case DATA_IMAGE_OF_MEDIVH: return ImageGUID; + case DATA_KILREK: + return KilrekGUID; + case DATA_TERESTIAN: + return TerestianGUID; + case DATA_MOROES: + return MoroesGUID; + case DATA_GO_STAGEDOORLEFT: + return StageDoorLeftGUID; + case DATA_GO_STAGEDOORRIGHT: + return StageDoorRightGUID; + case DATA_GO_CURTAINS: + return CurtainGUID; + case DATA_GO_LIBRARY_DOOR: + return LibraryDoor; + case DATA_GO_MASSIVE_DOOR: + return MassiveDoor; + case DATA_GO_SIDE_ENTRANCE_DOOR: + return SideEntranceDoor; + case DATA_GO_GAME_DOOR: + return GamesmansDoor; + case DATA_GO_GAME_EXIT_DOOR: + return GamesmansExitDoor; + case DATA_GO_NETHER_DOOR: + return NetherspaceDoor; + case DATA_MASTERS_TERRACE_DOOR_1: + return MastersTerraceDoor[0]; + case DATA_MASTERS_TERRACE_DOOR_2: + return MastersTerraceDoor[1]; + case DATA_IMAGE_OF_MEDIVH: + return ImageGUID; } return ObjectGuid::Empty; } - void Load(char const* chrIn) override - { - if (!chrIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - OUT_LOAD_INST_DATA(chrIn); - std::istringstream loadStream(chrIn); - - loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3] - >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6] >> m_auiEncounter[7] - >> m_auiEncounter[8] >> m_auiEncounter[9] >> m_auiEncounter[10] >> m_auiEncounter[11]; - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead. - m_auiEncounter[i] = NOT_STARTED; - OUT_LOAD_INST_DATA_COMPLETE; - } + private: + uint32 OperaEvent; + uint32 OzDeathCount; + uint32 OptionalBossCount; + ObjectGuid CurtainGUID; + ObjectGuid StageDoorLeftGUID; + ObjectGuid StageDoorRightGUID; + ObjectGuid KilrekGUID; + ObjectGuid TerestianGUID; + ObjectGuid MoroesGUID; + ObjectGuid LibraryDoor; // Door at Shade of Aran + ObjectGuid MassiveDoor; // Door at Netherspite + ObjectGuid SideEntranceDoor; // Side Entrance + ObjectGuid GamesmansDoor; // Door before Chess + ObjectGuid GamesmansExitDoor; // Door after Chess + ObjectGuid NetherspaceDoor; // Door at Malchezaar + ObjectGuid MastersTerraceDoor[2]; + ObjectGuid ImageGUID; + ObjectGuid DustCoveredChest; }; }; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index aa2da8cc391..4aef3c8d4a3 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -168,7 +168,7 @@ public: void StartEvent() { - instance->SetData(TYPE_OPERA, IN_PROGRESS); + instance->SetBossState(DATA_OPERA_PERFORMANCE, IN_PROGRESS); //resets count for this event, in case earlier failed if (m_uiEventId == EVENT_OZ) @@ -377,7 +377,7 @@ public: if (InstanceScript* instance = creature->GetInstanceScript()) { // Check for death of Moroes and if opera event is not done already - if (instance->GetData(TYPE_MOROES) == DONE && instance->GetData(TYPE_OPERA) != DONE) + if (instance->GetBossState(DATA_MOROES) == DONE && instance->GetBossState(DATA_OPERA_PERFORMANCE) != DONE) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, OZ_GOSSIP1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h index 4d86492257c..05de9e43a91 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h @@ -21,27 +21,26 @@ #define DataHeader "KZ" +uint32 const EncounterCount = 12; + enum DataTypes { - TYPE_ATTUMEN = 1, - TYPE_MOROES = 2, - TYPE_MAIDEN = 3, - TYPE_OPTIONAL_BOSS = 4, - TYPE_OPERA = 5, - TYPE_CURATOR = 6, - TYPE_ARAN = 7, - TYPE_TERESTIAN = 8, - TYPE_NETHERSPITE = 9, - TYPE_CHESS = 10, - TYPE_MALCHEZZAR = 11, - TYPE_NIGHTBANE = 12, + DATA_ATTUMEN = 0, + DATA_MOROES = 1, + DATA_MAIDEN_OF_VIRTUE = 2, + DATA_OPTIONAL_BOSS = 3, + DATA_OPERA_PERFORMANCE = 4, + DATA_CURATOR = 5, + DATA_ARAN = 6, + DATA_TERESTIAN = 7, + DATA_NETHERSPITE = 8, + DATA_CHESS = 9, + DATA_MALCHEZZAR = 10, + DATA_NIGHTBANE = 11, - DATA_OPERA_PERFORMANCE = 13, DATA_OPERA_OZ_DEATHCOUNT = 14, DATA_KILREK = 15, - DATA_TERESTIAN = 16, - DATA_MOROES = 17, DATA_GO_CURTAINS = 18, DATA_GO_STAGEDOORLEFT = 19, DATA_GO_STAGEDOORRIGHT = 20, @@ -69,6 +68,8 @@ enum MiscCreatures NPC_HYAKISS_THE_LURKER = 16179, NPC_ROKAD_THE_RAVAGER = 16181, NPC_SHADIKITH_THE_GLIDER = 16180, + NPC_TERESTIAN_ILLHOOF = 15688, + NPC_MOROES = 15687, // Trash NPC_COLDMIST_WIDOW = 16171, @@ -78,6 +79,29 @@ enum MiscCreatures NPC_GREATER_SHADOWBAT = 16174, NPC_PHASE_HOUND = 16178, NPC_DREADBEAST = 16177, - NPC_SHADOWBEAST = 16176 + NPC_SHADOWBEAST = 16176, + NPC_KILREK = 17229 }; + +enum GameObjectIds +{ + GO_STAGE_CURTAIN = 183932, + GO_STAGE_DOOR_LEFT = 184278, + GO_STAGE_DOOR_RIGHT = 184279, + GO_PRIVATE_LIBRARY_DOOR = 184517, + GO_MASSIVE_DOOR = 185521, + GO_GAMESMAN_HALL_DOOR = 184276, + GO_GAMESMAN_HALL_EXIT_DOOR = 184277, + GO_NETHERSPACE_DOOR = 185134, + GO_MASTERS_TERRACE_DOOR = 184274, + GO_MASTERS_TERRACE_DOOR2 = 184280, + GO_SIDE_ENTRANCE_DOOR = 184275, + GO_DUST_COVERED_CHEST = 185119 +}; + +enum Misc +{ + OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50 +}; + #endif From 9806f7812ab659aea317713a394f363635b20d32 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Mon, 29 Feb 2016 01:39:31 +0100 Subject: [PATCH 47/93] Core/Scripts: Zul'Aman boss script text cleanup Replacing more hardcoded text with DB entries. A little bit extra enum alignment and sorting. --- .../world/2016_02_29_ZULAMAN_world.sql | 27 ++++ .../EasternKingdoms/ZulAman/boss_hexlord.cpp | 139 +++++++++--------- .../EasternKingdoms/ZulAman/boss_nalorakk.cpp | 122 +++++++-------- 3 files changed, 162 insertions(+), 126 deletions(-) create mode 100644 sql/updates/world/2016_02_29_ZULAMAN_world.sql diff --git a/sql/updates/world/2016_02_29_ZULAMAN_world.sql b/sql/updates/world/2016_02_29_ZULAMAN_world.sql new file mode 100644 index 00000000000..280f2f901ef --- /dev/null +++ b/sql/updates/world/2016_02_29_ZULAMAN_world.sql @@ -0,0 +1,27 @@ +-- creature text 23576 Nalorakk + sound ID + broadcast_text ID +DELETE FROM `creature_text` WHERE `entry` = 23576 AND `type` = 14; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(23576, 0,0, "Get da move on, guards! It be killin' time!", 14,0,100,0,0, 12066, 22144, 1, 'Nalorakk - YELL_NALORAKK_WAVE1'), +(23576, 1,0, "Guards, go already! Who you more afraid of, dem... or me?", 14,0,100,0,0, 12067, 22146, 1, 'Nalorakk - YELL_NALORAKK_WAVE2'), +(23576, 2,0, "Ride now! Ride out dere and bring me back some heads!", 14,0,100,0,0, 12068, 22151, 1, 'Nalorakk - YELL_NALORAKK_WAVE3'), +(23576, 3,0, "I be losin' me patience! Go on: make dem wish dey was never born!", 14,0,100,0,0, 12069, 22155, 1, 'Nalorakk - YELL_NALORAKK_WAVE4'), +(23576, 4,0, "You be dead soon enough!", 14,0,100,0,0, 12070, 23166, 1, 'Nalorakk - YELL_AGGRO'), +(23576, 5,0, "I bring da pain!", 14,0,100,0,0, 12071, 23167, 1, 'Nalorakk - YELL_SURGE'), +(23576, 6,0, "You call on da beast, you gonna get more dan you bargain for!", 14,0,100,0,0, 12072, 23168, 1, 'Nalorakk - YELL_SHIFTEDTOBEAR '), +(23576, 7,0, "Make way for da Nalorakk!", 14,0,100,0,0, 12073, 23169, 1, 'Nalorakk - YELL_SHIFTEDTOTROLL'), +(23576, 8,0, "You had your chance; now it be too late!", 14,0,100,0,0, 12074, 23170, 1, 'Nalorakk - YELL_BERSERK'), +(23576, 9,0, "Now whatchoo got to say?", 14,0,100,0,0, 12075, 23171, 1, 'Nalorakk - YELL_KILL_ONE'), +(23576, 10,0, "Da Amani gonna rule again!", 14,0,100,0,0, 12076, 23172, 1, 'Nalorakk - YELL_KILL_TWO'), +(23576, 11,0, "I... be waitin' on da udda side....", 14,0,100,0,0, 12077, 23173, 1, 'Nalorakk - YELL_DEATH'), +(23576, 12,0, "What could be better than servin' da bear spirit for eternity? Come closer now. Bring your souls to me!", 14,0,100,0,0, 12078, 23305, 1, 'Nalorakk - YELL_NALORAKK_EVENT1'), +(23576, 13,0, "I smell you, strangers. Don't be delayin' your fate. Come to me now. I make your sacrifice quick.", 14,0,100,0,0, 12079, 23306, 1, 'Nalorakk - YELL_NALORAKK_EVENT1'); + +-- creature text 24239 Hex Lord Malacrass + sound ID + broadcast_text ID +DELETE FROM `creature_text` WHERE `entry` = 24239 AND `type` = 14; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(24239, 0,0, "Da shadow gonna fall on you....", 14,0,100,0,0, 12041, 23591, 1, 'Hex Lord Malacrass - YELL_AGGRO'), +(24239, 1,0, "Dis a nightmare ya don' wake up from!", 14,0,100,0,0, 12043, 23593, 1, 'Hex Lord Malacrass - YELL_KILL_ONE'), +(24239, 2,0, "Azzaga choogo zinn!", 14,0,100,0,0, 12044, 23594, 1, 'Hex Lord Malacrass - YELL_KILL_TWO'), +(24239, 3,0, "Darkness comin' for you....", 14,0,100,0,0, 12046, 23596, 1, 'Hex Lord Malacrass - YELL_DRAIN_POWER'), +(24239, 4,0, "Your soul gonna bleed!", 14,0,100,0,0, 12047, 23597, 1, 'Hex Lord Malacrass - YELL_SPIRIT_BOLTS'), +(24239, 5,0, "Dis not... da end for me!", 14,0,100,0,0, 12051, 23601, 1, 'Hex Lord Malacrass - YELL_DEATH'); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index cc55f758a22..a28c8c1b747 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -29,109 +29,114 @@ EndScriptData */ #include "SpellAuraEffects.h" #include "zulaman.h" -#define YELL_AGGRO "Da shadow gonna fall on you... " -#define SOUND_YELL_AGGRO 12041 -#define YELL_SPIRIT_BOLTS "Your soul gonna bleed!" -#define SOUND_YELL_SPIRIT_BOLTS 12047 -#define YELL_DRAIN_POWER "Darkness comin\' for you" -#define SOUND_YELL_DRAIN_POWER 12046 -#define YELL_KILL_ONE "Dis a nightmare ya don\' wake up from!" -#define SOUND_YELL_KILL_ONE 12043 -#define YELL_KILL_TWO "Azzaga choogo zinn!" -#define SOUND_YELL_KILL_TWO 12044 -#define YELL_DEATH "Dis not... da end of me..." -#define SOUND_YELL_DEATH 12051 +enum Yells +{ + YELL_AGGRO = 0, + YELL_KILL_ONE = 1, + YELL_KILL_TWO = 2, + YELL_DRAIN_POWER = 3, + YELL_SPIRIT_BOLTS = 4, + YELL_DEATH = 5 +}; +enum Sounds +{ + SOUND_YELL_AGGRO = 12041, + SOUND_YELL_KILL_ONE = 12043, + SOUND_YELL_KILL_TWO = 12044, + SOUND_YELL_DRAIN_POWER = 12046, + SOUND_YELL_SPIRIT_BOLTS = 12047, + SOUND_YELL_DEATH = 12051 +}; enum Creatures { - NPC_TEMP_TRIGGER = 23920 + NPC_TEMP_TRIGGER = 23920 }; enum Spells { - SPELL_SPIRIT_BOLTS = 43383, - SPELL_DRAIN_POWER = 44131, - SPELL_SIPHON_SOUL = 43501, + SPELL_SPIRIT_BOLTS = 43383, + SPELL_DRAIN_POWER = 44131, + SPELL_SIPHON_SOUL = 43501, // Druid - SPELL_DR_THORNS = 43420, - SPELL_DR_LIFEBLOOM = 43421, - SPELL_DR_MOONFIRE = 43545, + SPELL_DR_THORNS = 43420, + SPELL_DR_LIFEBLOOM = 43421, + SPELL_DR_MOONFIRE = 43545, // Hunter - SPELL_HU_EXPLOSIVE_TRAP = 43444, - SPELL_HU_FREEZING_TRAP = 43447, - SPELL_HU_SNAKE_TRAP = 43449, + SPELL_HU_EXPLOSIVE_TRAP = 43444, + SPELL_HU_FREEZING_TRAP = 43447, + SPELL_HU_SNAKE_TRAP = 43449, // Mage - SPELL_MG_FIREBALL = 41383, - SPELL_MG_FROST_NOVA = 43426, - SPELL_MG_ICE_LANCE = 43427, - SPELL_MG_FROSTBOLT = 43428, + SPELL_MG_FIREBALL = 41383, + SPELL_MG_FROST_NOVA = 43426, + SPELL_MG_ICE_LANCE = 43427, + SPELL_MG_FROSTBOLT = 43428, // Paladin - SPELL_PA_CONSECRATION = 43429, - SPELL_PA_AVENGING_WRATH = 43430, - SPELL_PA_HOLY_LIGHT = 43451, + SPELL_PA_CONSECRATION = 43429, + SPELL_PA_AVENGING_WRATH = 43430, + SPELL_PA_HOLY_LIGHT = 43451, // Priest - SPELL_PR_HEAL = 41372, - SPELL_PR_MIND_BLAST = 41374, - SPELL_PR_SW_DEATH = 41375, - SPELL_PR_PSYCHIC_SCREAM = 43432, - SPELL_PR_MIND_CONTROL = 43550, - SPELL_PR_PAIN_SUPP = 44416, + SPELL_PR_HEAL = 41372, + SPELL_PR_MIND_BLAST = 41374, + SPELL_PR_SW_DEATH = 41375, + SPELL_PR_PSYCHIC_SCREAM = 43432, + SPELL_PR_MIND_CONTROL = 43550, + SPELL_PR_PAIN_SUPP = 44416, // Rogue - SPELL_RO_BLIND = 43433, - SPELL_RO_SLICE_DICE = 43457, - SPELL_RO_WOUND_POISON = 43461, + SPELL_RO_BLIND = 43433, + SPELL_RO_SLICE_DICE = 43457, + SPELL_RO_WOUND_POISON = 43461, // Shaman - SPELL_SH_CHAIN_LIGHT = 43435, - SPELL_SH_FIRE_NOVA = 43436, - SPELL_SH_HEALING_WAVE = 43548, + SPELL_SH_CHAIN_LIGHT = 43435, + SPELL_SH_FIRE_NOVA = 43436, + SPELL_SH_HEALING_WAVE = 43548, // Warlock - SPELL_WL_CURSE_OF_DOOM = 43439, - SPELL_WL_RAIN_OF_FIRE = 43440, - SPELL_WL_UNSTABLE_AFFL = 43522, - SPELL_WL_UNSTABLE_AFFL_DISPEL = 43523, + SPELL_WL_CURSE_OF_DOOM = 43439, + SPELL_WL_RAIN_OF_FIRE = 43440, + SPELL_WL_UNSTABLE_AFFL = 43522, + SPELL_WL_UNSTABLE_AFFL_DISPEL = 43523, // Warrior - SPELL_WR_MORTAL_STRIKE = 43441, - SPELL_WR_WHIRLWIND = 43442, - SPELL_WR_SPELL_REFLECT = 43443, + SPELL_WR_MORTAL_STRIKE = 43441, + SPELL_WR_WHIRLWIND = 43442, + SPELL_WR_SPELL_REFLECT = 43443, // Thurg - SPELL_BLOODLUST = 43578, - SPELL_CLEAVE = 15496, + SPELL_BLOODLUST = 43578, + SPELL_CLEAVE = 15496, // Gazakroth - SPELL_FIREBOLT = 43584, + SPELL_FIREBOLT = 43584, // Alyson Antille - SPELL_FLASH_HEAL = 43575, - SPELL_DISPEL_MAGIC = 43577, + SPELL_FLASH_HEAL = 43575, + SPELL_DISPEL_MAGIC = 43577, // Lord Raadan - SPELL_FLAME_BREATH = 43582, - SPELL_THUNDERCLAP = 43583, + SPELL_FLAME_BREATH = 43582, + SPELL_THUNDERCLAP = 43583, // Darkheart - SPELL_PSYCHIC_WAIL = 43590, + SPELL_PSYCHIC_WAIL = 43590, // Slither - SPELL_VENOM_SPIT = 43579, + SPELL_VENOM_SPIT = 43579, // Fenstalker - SPELL_VOLATILE_INFECTION = 43586, + SPELL_VOLATILE_INFECTION = 43586, // Koragg - SPELL_COLD_STARE = 43593, - SPELL_MIGHTY_BLOW = 43592 - + SPELL_COLD_STARE = 43593, + SPELL_MIGHTY_BLOW = 43592 }; #define ORIENT 1.5696f @@ -306,7 +311,7 @@ class boss_hexlord_malacrass : public CreatureScript instance->SetData(DATA_HEXLORDEVENT, IN_PROGRESS); DoZoneInCombat(); - me->Yell(YELL_AGGRO, LANG_UNIVERSAL); + Talk(YELL_AGGRO, me); DoPlaySoundToSet(me, SOUND_YELL_AGGRO); for (uint8 i = 0; i < 4; ++i) @@ -327,11 +332,11 @@ class boss_hexlord_malacrass : public CreatureScript switch (urand(0, 1)) { case 0: - me->Yell(YELL_KILL_ONE, LANG_UNIVERSAL); + Talk(YELL_KILL_ONE, me); DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); break; case 1: - me->Yell(YELL_KILL_TWO, LANG_UNIVERSAL); + Talk(YELL_KILL_TWO, me); DoPlaySoundToSet(me, SOUND_YELL_KILL_TWO); break; } @@ -341,7 +346,7 @@ class boss_hexlord_malacrass : public CreatureScript { instance->SetData(DATA_HEXLORDEVENT, DONE); - me->Yell(YELL_DEATH, LANG_UNIVERSAL); + Talk(YELL_DEATH, me); DoPlaySoundToSet(me, SOUND_YELL_DEATH); for (uint8 i = 0; i < 4; ++i) @@ -415,7 +420,7 @@ class boss_hexlord_malacrass : public CreatureScript if (DrainPower_Timer <= diff) { DoCast(me, SPELL_DRAIN_POWER, true); - me->Yell(YELL_DRAIN_POWER, LANG_UNIVERSAL); + Talk(YELL_DRAIN_POWER, me); DoPlaySoundToSet(me, SOUND_YELL_DRAIN_POWER); DrainPower_Timer = urand(40000, 55000); // must cast in 60 sec, or buff/debuff will disappear } else DrainPower_Timer -= diff; @@ -427,7 +432,7 @@ class boss_hexlord_malacrass : public CreatureScript else { DoCast(me, SPELL_SPIRIT_BOLTS, false); - me->Yell(YELL_SPIRIT_BOLTS, LANG_UNIVERSAL); + Talk(YELL_SPIRIT_BOLTS, me); DoPlaySoundToSet(me, SOUND_YELL_SPIRIT_BOLTS); SpiritBolts_Timer = 40000; SiphonSoul_Timer = 10000; // ready to drain diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index 37505a8b74d..c7db41c47ca 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -30,21 +30,61 @@ EndScriptData */ #include "GridNotifiersImpl.h" #include "CellImpl.h" +enum Yells +{ + YELL_NALORAKK_WAVE1 = 0, + YELL_NALORAKK_WAVE2 = 1, + YELL_NALORAKK_WAVE3 = 2, + YELL_NALORAKK_WAVE4 = 3, + YELL_AGGRO = 4, + YELL_SURGE = 5, + YELL_SHIFTEDTOBEAR = 6, + YELL_SHIFTEDTOTROLL = 7, + YELL_BERSERK = 8, + YELL_KILL_ONE = 9, + YELL_KILL_TWO = 10, + YELL_DEATH = 11 + +// Not yet implemented +// YELL_NALORAKK_EVENT1 = 12, +// YELL_NALORAKK_EVENT2 = 13 +}; + +enum Sounds +{ + SOUND_NALORAKK_WAVE1 = 12066, + SOUND_NALORAKK_WAVE2 = 12067, + SOUND_NALORAKK_WAVE3 = 12068, + SOUND_NALORAKK_WAVE4 = 12069, + SOUND_YELL_AGGRO = 12070, + SOUND_YELL_SURGE = 12071, + SOUND_YELL_TOBEAR = 12072, + SOUND_YELL_TOTROLL = 12073, + SOUND_YELL_BERSERK = 12074, + SOUND_YELL_KILL_ONE = 12075, + SOUND_YELL_KILL_TWO = 12076, + SOUND_YELL_DEATH = 12077 + +// Not yet implemented +// SOUND_NALORAKK_EVENT1 = 12078, +// SOUND_NALORAKK_EVENT2 = 12079 +}; + enum Spells { - SPELL_BERSERK = 45078, - // Troll form - SPELL_BRUTALSWIPE = 42384, - SPELL_MANGLE = 42389, - SPELL_MANGLEEFFECT = 44955, - SPELL_SURGE = 42402, - SPELL_BEARFORM = 42377, + SPELL_BRUTALSWIPE = 42384, + SPELL_MANGLE = 42389, + SPELL_MANGLEEFFECT = 44955, + SPELL_SURGE = 42402, + SPELL_BEARFORM = 42377, // Bear form - SPELL_LACERATINGSLASH = 42395, - SPELL_RENDFLESH = 42397, - SPELL_DEAFENINGROAR = 42398 + SPELL_LACERATINGSLASH = 42395, + SPELL_RENDFLESH = 42397, + SPELL_DEAFENINGROAR = 42398, + + SPELL_BERSERK = 45078 }; // Trash Waves @@ -57,45 +97,9 @@ float NalorakkWay[8][3] = {-79.929f, 1395.958f, 27.31f}, {-80.072f, 1374.555f, 40.87f}, // waypoint 3 {-80.072f, 1314.398f, 40.87f}, - {-80.072f, 1295.775f, 48.60f} // waypoint 4 + {-80.072f, 1295.775f, 48.60f} // waypoint 4 }; -#define YELL_NALORAKK_WAVE1 "Get da move on, guards! It be killin' time!" -#define SOUND_NALORAKK_WAVE1 12066 -#define YELL_NALORAKK_WAVE2 "Guards, go already! Who you more afraid of, dem... or me?" -#define SOUND_NALORAKK_WAVE2 12067 -#define YELL_NALORAKK_WAVE3 "Ride now! Ride out dere and bring me back some heads!" -#define SOUND_NALORAKK_WAVE3 12068 -#define YELL_NALORAKK_WAVE4 "I be losin' me patience! Go on: make dem wish dey was never born!" -#define SOUND_NALORAKK_WAVE4 12069 - -//Unimplemented SoundIDs -/* -#define SOUND_NALORAKK_EVENT1 12078 -#define SOUND_NALORAKK_EVENT2 12079 -*/ - -//General defines -#define YELL_AGGRO "You be dead soon enough!" -#define SOUND_YELL_AGGRO 12070 -#define YELL_KILL_ONE "Mua-ha-ha! Now whatchoo got to say?" -#define SOUND_YELL_KILL_ONE 12075 -#define YELL_KILL_TWO "Da Amani gonna rule again!" -#define SOUND_YELL_KILL_TWO 12076 -#define YELL_DEATH "I... be waitin' on da udda side...." -#define SOUND_YELL_DEATH 12077 -#define YELL_BERSERK "You had your chance, now it be too late!" //Never seen this being used, so just guessing from what I hear. -#define SOUND_YELL_BERSERK 12074 -#define YELL_SURGE "I bring da pain!" -#define SOUND_YELL_SURGE 12071 - -#define YELL_SHIFTEDTOTROLL "Make way for Nalorakk!" -#define SOUND_YELL_TOTROLL 12073 - - -#define YELL_SHIFTEDTOBEAR "You call on da beast, you gonna get more dan you bargain for!" -#define SOUND_YELL_TOBEAR 12072 - class boss_nalorakk : public CreatureScript { public: @@ -227,7 +231,7 @@ class boss_nalorakk : public CreatureScript case 0: if (me->IsWithinDistInMap(who, 50)) { - me->Yell(YELL_NALORAKK_WAVE1, LANG_UNIVERSAL); + Talk(YELL_NALORAKK_WAVE1, me); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE1); (*me).GetMotionMaster()->MovePoint(1, NalorakkWay[1][0], NalorakkWay[1][1], NalorakkWay[1][2]); @@ -240,7 +244,7 @@ class boss_nalorakk : public CreatureScript case 2: if (me->IsWithinDistInMap(who, 40)) { - me->Yell(YELL_NALORAKK_WAVE2, LANG_UNIVERSAL); + Talk(YELL_NALORAKK_WAVE2, me); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE2); (*me).GetMotionMaster()->MovePoint(3, NalorakkWay[3][0], NalorakkWay[3][1], NalorakkWay[3][2]); @@ -253,7 +257,7 @@ class boss_nalorakk : public CreatureScript case 5: if (me->IsWithinDistInMap(who, 40)) { - me->Yell(YELL_NALORAKK_WAVE3, LANG_UNIVERSAL); + Talk(YELL_NALORAKK_WAVE3, me); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE3); (*me).GetMotionMaster()->MovePoint(6, NalorakkWay[6][0], NalorakkWay[6][1], NalorakkWay[6][2]); @@ -268,7 +272,7 @@ class boss_nalorakk : public CreatureScript { SendAttacker(who); - me->Yell(YELL_NALORAKK_WAVE4, LANG_UNIVERSAL); + Talk(YELL_NALORAKK_WAVE4, me); DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE4); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -287,7 +291,7 @@ class boss_nalorakk : public CreatureScript { instance->SetData(DATA_NALORAKKEVENT, IN_PROGRESS); - me->Yell(YELL_AGGRO, LANG_UNIVERSAL); + Talk(YELL_AGGRO, me); DoPlaySoundToSet(me, SOUND_YELL_AGGRO); DoZoneInCombat(); } @@ -296,7 +300,7 @@ class boss_nalorakk : public CreatureScript { instance->SetData(DATA_NALORAKKEVENT, DONE); - me->Yell(YELL_DEATH, LANG_UNIVERSAL); + Talk(YELL_DEATH, me); DoPlaySoundToSet(me, SOUND_YELL_DEATH); } @@ -305,11 +309,11 @@ class boss_nalorakk : public CreatureScript switch (urand(0, 1)) { case 0: - me->Yell(YELL_KILL_ONE, LANG_UNIVERSAL); + TAlk(YELL_KILL_ONE, me); DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); break; case 1: - me->Yell(YELL_KILL_TWO, LANG_UNIVERSAL); + Talk(YELL_KILL_TWO, me); DoPlaySoundToSet(me, SOUND_YELL_KILL_TWO); break; } @@ -373,7 +377,7 @@ class boss_nalorakk : public CreatureScript if (Berserk_Timer <= diff) { DoCast(me, SPELL_BERSERK, true); - me->Yell(YELL_BERSERK, LANG_UNIVERSAL); + Talk(YELL_BERSERK, me); DoPlaySoundToSet(me, SOUND_YELL_BERSERK); Berserk_Timer = 600000; } else Berserk_Timer -= diff; @@ -383,7 +387,7 @@ class boss_nalorakk : public CreatureScript if (inBearForm) { // me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 5122); - me->Yell(YELL_SHIFTEDTOTROLL, LANG_UNIVERSAL); + Talk(YELL_SHIFTEDTOTROLL, me); DoPlaySoundToSet(me, SOUND_YELL_TOTROLL); me->RemoveAurasDueToSpell(SPELL_BEARFORM); Surge_Timer = urand(15000, 20000); @@ -395,7 +399,7 @@ class boss_nalorakk : public CreatureScript else { // me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); - me->Yell(YELL_SHIFTEDTOBEAR, LANG_UNIVERSAL); + Talk(YELL_SHIFTEDTOBEAR, me); DoPlaySoundToSet(me, SOUND_YELL_TOBEAR); DoCast(me, SPELL_BEARFORM, true); LaceratingSlash_Timer = 2000; // dur 18s @@ -426,7 +430,7 @@ class boss_nalorakk : public CreatureScript if (Surge_Timer <= diff) { - me->Yell(YELL_SURGE, LANG_UNIVERSAL); + Talk(YELL_SURGE, me); DoPlaySoundToSet(me, SOUND_YELL_SURGE); Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 45, true); if (target) From 24e996811d339ad0b01991e2c7c0db7b6eb525e7 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 29 Feb 2016 03:43:11 +0100 Subject: [PATCH 48/93] Rename 2016_02_29_ZULAMAN_world.sql to 2016_02_29_00_world.sql --- .../{2016_02_29_ZULAMAN_world.sql => 2016_02_29_00_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2016_02_29_ZULAMAN_world.sql => 2016_02_29_00_world.sql} (100%) diff --git a/sql/updates/world/2016_02_29_ZULAMAN_world.sql b/sql/updates/world/2016_02_29_00_world.sql similarity index 100% rename from sql/updates/world/2016_02_29_ZULAMAN_world.sql rename to sql/updates/world/2016_02_29_00_world.sql From b646bcbb915ad6abcec5d349b28a74991e1c8cad Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 29 Feb 2016 03:45:14 +0100 Subject: [PATCH 49/93] Update boss_nalorakk.cpp --- src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index c7db41c47ca..bb63e297674 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -309,7 +309,7 @@ class boss_nalorakk : public CreatureScript switch (urand(0, 1)) { case 0: - TAlk(YELL_KILL_ONE, me); + Talk(YELL_KILL_ONE, me); DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); break; case 1: From 3b389b7a5c1058dcbc2c05e94c9005b3990caa4c Mon Sep 17 00:00:00 2001 From: Kittnz Date: Mon, 29 Feb 2016 17:56:25 +0100 Subject: [PATCH 50/93] DB/Event: Removed remaining gameobject that are no longer present ingame --- sql/updates/world/2016_02_29_01_world.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2016_02_29_01_world.sql diff --git a/sql/updates/world/2016_02_29_01_world.sql b/sql/updates/world/2016_02_29_01_world.sql new file mode 100644 index 00000000000..40343440d9a --- /dev/null +++ b/sql/updates/world/2016_02_29_01_world.sql @@ -0,0 +1 @@ +DELETE FROM `game_event_gameobject` WHERE `guid` IN (24399, 24400, 24401, 24402, 24405); From c897988a7eb24100d7db398e49a48f2e7982b267 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Mon, 29 Feb 2016 15:36:06 +0100 Subject: [PATCH 51/93] Core/Scripts/Zul'Aman: sound handled in creature_text - Sound playback is handled via creature_text - remove `DoPlaySoundToSet()` to avoid duplicate playback - remove redundant 'me' parameter from `Talk()` entries --- .../EasternKingdoms/ZulAman/boss_hexlord.cpp | 28 ++-------- .../EasternKingdoms/ZulAman/boss_nalorakk.cpp | 56 ++++--------------- 2 files changed, 18 insertions(+), 66 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index a28c8c1b747..5ec57fc44b6 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -39,16 +39,6 @@ enum Yells YELL_DEATH = 5 }; -enum Sounds -{ - SOUND_YELL_AGGRO = 12041, - SOUND_YELL_KILL_ONE = 12043, - SOUND_YELL_KILL_TWO = 12044, - SOUND_YELL_DRAIN_POWER = 12046, - SOUND_YELL_SPIRIT_BOLTS = 12047, - SOUND_YELL_DEATH = 12051 -}; - enum Creatures { NPC_TEMP_TRIGGER = 23920 @@ -311,8 +301,7 @@ class boss_hexlord_malacrass : public CreatureScript instance->SetData(DATA_HEXLORDEVENT, IN_PROGRESS); DoZoneInCombat(); - Talk(YELL_AGGRO, me); - DoPlaySoundToSet(me, SOUND_YELL_AGGRO); + Talk(YELL_AGGRO); for (uint8 i = 0; i < 4; ++i) { @@ -332,12 +321,10 @@ class boss_hexlord_malacrass : public CreatureScript switch (urand(0, 1)) { case 0: - Talk(YELL_KILL_ONE, me); - DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); + Talk(YELL_KILL_ONE); break; case 1: - Talk(YELL_KILL_TWO, me); - DoPlaySoundToSet(me, SOUND_YELL_KILL_TWO); + Talk(YELL_KILL_TWO); break; } } @@ -346,8 +333,7 @@ class boss_hexlord_malacrass : public CreatureScript { instance->SetData(DATA_HEXLORDEVENT, DONE); - Talk(YELL_DEATH, me); - DoPlaySoundToSet(me, SOUND_YELL_DEATH); + Talk(YELL_DEATH); for (uint8 i = 0; i < 4; ++i) { @@ -420,8 +406,7 @@ class boss_hexlord_malacrass : public CreatureScript if (DrainPower_Timer <= diff) { DoCast(me, SPELL_DRAIN_POWER, true); - Talk(YELL_DRAIN_POWER, me); - DoPlaySoundToSet(me, SOUND_YELL_DRAIN_POWER); + Talk(YELL_DRAIN_POWER); DrainPower_Timer = urand(40000, 55000); // must cast in 60 sec, or buff/debuff will disappear } else DrainPower_Timer -= diff; @@ -432,8 +417,7 @@ class boss_hexlord_malacrass : public CreatureScript else { DoCast(me, SPELL_SPIRIT_BOLTS, false); - Talk(YELL_SPIRIT_BOLTS, me); - DoPlaySoundToSet(me, SOUND_YELL_SPIRIT_BOLTS); + Talk(YELL_SPIRIT_BOLTS); SpiritBolts_Timer = 40000; SiphonSoul_Timer = 10000; // ready to drain PlayerAbility_Timer = 99999; diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp index bb63e297674..0407cb6cd7c 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_nalorakk.cpp @@ -50,26 +50,6 @@ enum Yells // YELL_NALORAKK_EVENT2 = 13 }; -enum Sounds -{ - SOUND_NALORAKK_WAVE1 = 12066, - SOUND_NALORAKK_WAVE2 = 12067, - SOUND_NALORAKK_WAVE3 = 12068, - SOUND_NALORAKK_WAVE4 = 12069, - SOUND_YELL_AGGRO = 12070, - SOUND_YELL_SURGE = 12071, - SOUND_YELL_TOBEAR = 12072, - SOUND_YELL_TOTROLL = 12073, - SOUND_YELL_BERSERK = 12074, - SOUND_YELL_KILL_ONE = 12075, - SOUND_YELL_KILL_TWO = 12076, - SOUND_YELL_DEATH = 12077 - -// Not yet implemented -// SOUND_NALORAKK_EVENT1 = 12078, -// SOUND_NALORAKK_EVENT2 = 12079 -}; - enum Spells { // Troll form @@ -231,8 +211,7 @@ class boss_nalorakk : public CreatureScript case 0: if (me->IsWithinDistInMap(who, 50)) { - Talk(YELL_NALORAKK_WAVE1, me); - DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE1); + Talk(YELL_NALORAKK_WAVE1); (*me).GetMotionMaster()->MovePoint(1, NalorakkWay[1][0], NalorakkWay[1][1], NalorakkWay[1][2]); MovePhase ++; @@ -244,8 +223,7 @@ class boss_nalorakk : public CreatureScript case 2: if (me->IsWithinDistInMap(who, 40)) { - Talk(YELL_NALORAKK_WAVE2, me); - DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE2); + Talk(YELL_NALORAKK_WAVE2); (*me).GetMotionMaster()->MovePoint(3, NalorakkWay[3][0], NalorakkWay[3][1], NalorakkWay[3][2]); MovePhase ++; @@ -257,8 +235,7 @@ class boss_nalorakk : public CreatureScript case 5: if (me->IsWithinDistInMap(who, 40)) { - Talk(YELL_NALORAKK_WAVE3, me); - DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE3); + Talk(YELL_NALORAKK_WAVE3); (*me).GetMotionMaster()->MovePoint(6, NalorakkWay[6][0], NalorakkWay[6][1], NalorakkWay[6][2]); MovePhase ++; @@ -272,8 +249,7 @@ class boss_nalorakk : public CreatureScript { SendAttacker(who); - Talk(YELL_NALORAKK_WAVE4, me); - DoPlaySoundToSet(me, SOUND_NALORAKK_WAVE4); + Talk(YELL_NALORAKK_WAVE4); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -291,8 +267,7 @@ class boss_nalorakk : public CreatureScript { instance->SetData(DATA_NALORAKKEVENT, IN_PROGRESS); - Talk(YELL_AGGRO, me); - DoPlaySoundToSet(me, SOUND_YELL_AGGRO); + Talk(YELL_AGGRO); DoZoneInCombat(); } @@ -300,8 +275,7 @@ class boss_nalorakk : public CreatureScript { instance->SetData(DATA_NALORAKKEVENT, DONE); - Talk(YELL_DEATH, me); - DoPlaySoundToSet(me, SOUND_YELL_DEATH); + Talk(YELL_DEATH); } void KilledUnit(Unit* /*victim*/) override @@ -309,12 +283,10 @@ class boss_nalorakk : public CreatureScript switch (urand(0, 1)) { case 0: - Talk(YELL_KILL_ONE, me); - DoPlaySoundToSet(me, SOUND_YELL_KILL_ONE); + Talk(YELL_KILL_ONE); break; case 1: - Talk(YELL_KILL_TWO, me); - DoPlaySoundToSet(me, SOUND_YELL_KILL_TWO); + Talk(YELL_KILL_TWO); break; } } @@ -377,8 +349,7 @@ class boss_nalorakk : public CreatureScript if (Berserk_Timer <= diff) { DoCast(me, SPELL_BERSERK, true); - Talk(YELL_BERSERK, me); - DoPlaySoundToSet(me, SOUND_YELL_BERSERK); + Talk(YELL_BERSERK); Berserk_Timer = 600000; } else Berserk_Timer -= diff; @@ -387,8 +358,7 @@ class boss_nalorakk : public CreatureScript if (inBearForm) { // me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 5122); - Talk(YELL_SHIFTEDTOTROLL, me); - DoPlaySoundToSet(me, SOUND_YELL_TOTROLL); + Talk(YELL_SHIFTEDTOTROLL); me->RemoveAurasDueToSpell(SPELL_BEARFORM); Surge_Timer = urand(15000, 20000); BrutalSwipe_Timer = urand(7000, 12000); @@ -399,8 +369,7 @@ class boss_nalorakk : public CreatureScript else { // me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, 0); - Talk(YELL_SHIFTEDTOBEAR, me); - DoPlaySoundToSet(me, SOUND_YELL_TOBEAR); + Talk(YELL_SHIFTEDTOBEAR); DoCast(me, SPELL_BEARFORM, true); LaceratingSlash_Timer = 2000; // dur 18s RendFlesh_Timer = 3000; // dur 5s @@ -430,8 +399,7 @@ class boss_nalorakk : public CreatureScript if (Surge_Timer <= diff) { - Talk(YELL_SURGE, me); - DoPlaySoundToSet(me, SOUND_YELL_SURGE); + Talk(YELL_SURGE); Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 45, true); if (target) DoCast(target, SPELL_SURGE); From ecd9dec384750cc9c3e7bb31f7d2ea42642fb6ca Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Tue, 1 Mar 2016 12:38:09 -0300 Subject: [PATCH 52/93] Scripts/Karazhan: Use the correct method to access Opera's side entrance door --- .../scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 718d7e1ac7e..ad403e6aeed 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -154,8 +154,8 @@ public: { HandleGameObject(StageDoorLeftGUID, true); HandleGameObject(StageDoorRightGUID, true); - if (GameObject* pSideEntrance = GetGameObject(SideEntranceDoor)) - pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + if (GameObject* sideEntrance = instance->GetGameObject(SideEntranceDoor)) + sideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, 16812, NULL); } break; From 89e2afb8f9f3766c6ca0e780371f5421c79064b1 Mon Sep 17 00:00:00 2001 From: treeston Date: Tue, 1 Mar 2016 20:12:46 +0100 Subject: [PATCH 53/93] Core/Creature: Prevent friendly vehicles from trying to attack their rider after dismounting. --- src/server/game/Entities/Creature/Creature.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 5d62b740947..9562f8424c1 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -578,7 +578,8 @@ void Creature::Update(uint32 diff) IsAIEnabled = true; if (!IsInEvadeMode() && LastCharmerGUID) if (Unit* charmer = ObjectAccessor::GetUnit(*this, LastCharmerGUID)) - i_AI->AttackStart(charmer); + if (CanStartAttack(charmer, true)) + i_AI->AttackStart(charmer); LastCharmerGUID.Clear(); } From 45c911ba94ab7f6f2952241191df258238c49035 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Tue, 1 Mar 2016 20:03:36 +0000 Subject: [PATCH 54/93] DB/Quest: Troll Patrol / Congratulations * Congratulations only available if a version of troll patrol is complete * Pooling for Troll Patrol quests --- sql/updates/world/2016_03_01_00_world_335.sql | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 sql/updates/world/2016_03_01_00_world_335.sql diff --git a/sql/updates/world/2016_03_01_00_world_335.sql b/sql/updates/world/2016_03_01_00_world_335.sql new file mode 100644 index 00000000000..36c48379190 --- /dev/null +++ b/sql/updates/world/2016_03_01_00_world_335.sql @@ -0,0 +1,75 @@ +SET @Pool := 370; + +UPDATE `quest_template_addon` SET `PrevQuestID`=0 WHERE `ID` IN(12604,12541,12502,12509,12519,12502,12509,12519,12588,12591,12594,12557,12597,12598,12599,12564,12568,12585); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN(19,20) AND`SourceEntry` IN(12541,12604,12502,12509,12519,12502,12509,12519,12588,12591,12594,12557,12597,12598,12599,12564,12568,12585); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(19, 0, 12604, 0, 0, 1, 0, 51573, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Congratulations!' if player has aura 51573 'On Patrol'."), +(20, 0, 12604, 0, 0, 1, 0, 51573, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Congratulations!' if player has aura 51573 'On Patrol'."), +(19, 0, 12604, 0, 0, 1, 0, 53707, 0, 0, 1, 0, 0, '', "Show quest mark 12604 'Congratulations!' if player has no aura 51573 'On Patrol Heartbeat Script'."), +(20, 0, 12604, 0, 0, 1, 0, 53707, 0, 0, 1, 0, 0, '', "Show quest mark 12604 'Congratulations!' if player has no aura 51573 'On Patrol Heartbeat Script'."), +(19, 0, 12541, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: The Alchemists Apprentice' if player has quest Troll patrol'."), +(20, 0, 12541, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: The Alchemists Apprentice' if player has quest Troll patrol'."), +(19, 0, 12541, 0, 1, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: The Alchemists Apprentice' if player has quest Troll patrol'."), +(20, 0, 12541, 0, 1, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: The Alchemists Apprentice' if player has quest Troll patrol'."), +(19, 0, 12541, 0, 2, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: The Alchemists Apprentice' if player has quest Troll patrol'."), +(20, 0, 12541, 0, 2, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: The Alchemists Apprentice' if player has quest Troll patrol'."), +(19, 0, 12509, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12509 'Troll Patrol: Intestinal Fortitude' if player has quest Troll patrol'."), +(20, 0, 12509, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12509 'Troll Patrol: Intestinal Fortitude' if player has quest Troll patrol'."), +(19, 0, 12519, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: Whatdya Want, a Medal?' if player has quest Troll patrol'."), +(20, 0, 12519, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12604 'Troll Patrol: Whatdya Want, a Medal?' if player has quest Troll patrol'."), +(19, 0, 12502, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12502 'Troll Patrol: High Standards' if player has quest Troll patrol'."), +(20, 0, 12502, 0, 0, 9, 0, 12501, 0, 0, 0, 0, 0, '', "Show quest mark 12502 'Troll Patrol: High Standards' if player has quest Troll patrol'."), +(19, 0, 12564, 0, 0, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12564 'Troll Patrol: Something for the Pain' if player has quest Troll patrol'."), +(20, 0, 12564, 0, 0, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12564 'Troll Patrol: Something for the Pain' if player has quest Troll patrol'."), +(19, 0, 12568, 0, 0, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12568 'Troll Patrol: Done to Death' if player has quest Troll patrol'."), +(20, 0, 12568, 0, 0, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12558 'Troll Patrol: Done to Death' if player has quest Troll patrol'."), +(19, 0, 12585, 0, 0, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12585 'Troll Patrol: Creature Comforts' if player has quest Troll patrol'."), +(20, 0, 12585, 0, 0, 9, 0, 12563, 0, 0, 0, 0, 0, '', "Show quest mark 12585 'Troll Patrol: Creature Comforts' if player has quest Troll patrol'."), +(19, 0, 12588, 0, 0, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12588 'Troll Patrol: Can You Dig It?' if player has quest Troll patrol'."), +(20, 0, 12588, 0, 0, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12588 'Troll Patrol: Can You Dig It?' if player has quest Troll patrol'."), +(19, 0, 12591, 0, 0, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12591 'Troll Patrol: Throwing Down' if player has quest Troll patrol'."), +(20, 0, 12591, 0, 0, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12591 'Troll Patrol: Throwing Down' if player has quest Troll patrol'."), +(19, 0, 12594, 0, 0, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12594 'Troll Patrol: Couldn't Care Less' if player has quest Troll patrol'."), +(20, 0, 12594, 0, 0, 9, 0, 12587, 0, 0, 0, 0, 0, '', "Show quest mark 12594 'Troll Patrol: Couldn't Care Less' if player has quest Troll patrol'."), +(19, 0, 12557, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12557 'Lab Work' if player has quest Pa'Troll'."), +(20, 0, 12557, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12557 'Lab Work' if player has quest Pa'Troll'."), +(19, 0, 12597, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12597 'Something for the Pain' if player has quest Pa'Troll'."), +(20, 0, 12597, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12597 'Something for the Pain' if player has quest Pa'Troll'."), +(19, 0, 12598, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12598 'Throwing Down' if player has quest Pa'Troll'."), +(20, 0, 12598, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12598 'Throwing Down' if player has quest Pa'Troll'."), +(19, 0, 12599, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12599 'Creature Comforts' if player has quest Pa'Troll'."), +(20, 0, 12599, 0, 0, 9, 0, 12596, 0, 0, 0, 0, 0, '', "Show quest mark 12599 'Creature Comforts' if player has quest Pa'Troll'."); + +UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry` =28039; +DELETE FROM `smart_scripts` WHERE `entryorguid` =28039 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 +(28039, 0, 0, 1, 19, 0, 100, 0, 12596, 0, 0, 0, 85, 51506, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Pa''Troll - Invoker Cast Clear Patrol Quests'), +(28039, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 85, 51509, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Pa''Troll - Invoker Cast Clear Patrol Quests II'), +(28039, 0, 2, 5, 19, 0, 100, 0, 12587, 0, 0, 0, 85, 51573, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast On Patrol'), +(28039, 0, 3, 5, 19, 0, 100, 0, 12501, 0, 0, 0, 85, 51573, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast On Patrol'), +(28039, 0, 4, 5, 19, 0, 100, 0, 12563, 0, 0, 0, 85, 51573, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast On Patrol'), +(28039, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 85, 53712, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast Clear DAILY Patrol SUBQuests 00'), +(28039, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 85, 53713, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast Clear DAILY Patrol SUBQuests 01'), +(28039, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 85, 53715, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast Clear DAILY Patrol SUBQuests 02'), +(28039, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 85, 53716, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast Clear DAILY Patrol SUBQuests 03'), +(28039, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 85, 53707, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Accept Troll Patrol - Invoker Cast On Patrol Heartbeat Script'), +(28039, 0, 10, 0, 20, 0, 100, 0, 12587, 0, 0, 0, 28, 51573, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Reward Congratulations - Remove Aura On Patrol'), +(28039, 0, 11, 0, 20, 0, 100, 0, 12563, 0, 0, 0, 28, 53707, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Reward Troll Patrol - Remove Aura On Patrol Heartbeat Script'), +(28039, 0, 12, 0, 20, 0, 100, 0, 12501, 0, 0, 0, 28, 53707, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Reward Troll Patrol - Remove Aura On Patrol Heartbeat Script'), +(28039, 0, 13, 0, 20, 0, 100, 0, 12604, 0, 0, 0, 28, 53707, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Commander Kunz - On Quest Reward Troll Patrol - Remove Aura On Patrol Heartbeat Script'); + +UPDATE `quest_template_addon` SET `ExclusiveGroup`=12587 WHERE `ID` IN(12501,12563,12587); + +DELETE FROM `pool_quest` WHERE `pool_entry` IN (@Pool); + +INSERT INTO `pool_quest` (`entry`, `pool_entry`, `description`) VALUES +(12587, @Pool, 'Troll Patrol'), +(12501, @Pool, 'Troll Patrol'), +(12563, @Pool, 'Troll Patrol'); + +DELETE FROM `pool_template` WHERE `entry` IN (@Pool); + +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@Pool, 1, 'Troll Patrol Daily Quests'); From 6a339ed5c91244a02fac375101f9d0d04698328b Mon Sep 17 00:00:00 2001 From: ccrs Date: Thu, 25 Feb 2016 01:44:43 +0100 Subject: [PATCH 55/93] Core/TempSummons: avoid use MoveInLineOfSight before InitSummon --- src/server/game/Entities/Creature/TemporarySummon.cpp | 5 +++++ src/server/game/Entities/Creature/TemporarySummon.h | 1 + src/server/game/Entities/Object/Object.cpp | 4 +++- src/server/game/Entities/Object/Object.h | 5 +++++ src/server/game/Maps/Map.cpp | 2 +- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 8bf3a1e2846..12e3af3c290 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -227,6 +227,11 @@ void TempSummon::InitSummon() } } +void TempSummon::UpdateObjectVisibilityOnCreate() +{ + WorldObject::UpdateObjectVisibility(true); +} + void TempSummon::SetTempSummonType(TempSummonType type) { m_type = type; diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h index 6d058f405a8..b80e7d3e2bc 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.h +++ b/src/server/game/Entities/Creature/TemporarySummon.h @@ -45,6 +45,7 @@ class TempSummon : public Creature void Update(uint32 time) override; virtual void InitStats(uint32 lifetime); virtual void InitSummon(); + void UpdateObjectVisibilityOnCreate() override; virtual void UnSummon(uint32 msTime = 0); void RemoveFromWorld() override; void SetTempSummonType(TempSummonType type); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 4877ff094e1..836a041abc3 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1878,7 +1878,9 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert AddToMap(summon->ToCreature()); summon->InitSummon(); - //ObjectAccessor::UpdateObjectVisibility(summon); + // call MoveInLineOfSight for nearby creatures + Trinity::AIRelocationNotifier notifier(*summon); + summon->VisitNearbyObject(GetVisibilityRange(), notifier); return summon; } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 419044081e3..ba03c16fa1e 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -555,6 +555,11 @@ class WorldObject : public Object, public WorldLocation void DestroyForNearbyPlayers(); virtual void UpdateObjectVisibility(bool forced = true); + virtual void UpdateObjectVisibilityOnCreate() + { + UpdateObjectVisibility(true); + } + void BuildUpdate(UpdateDataMapType&) override; void AddToObjectUpdate() override; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ccc599b6de8..2da5193b2ec 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -594,7 +594,7 @@ bool Map::AddToMap(T* obj) //something, such as vehicle, needs to be update immediately //also, trigger needs to cast spell, if not update, cannot see visual - obj->UpdateObjectVisibility(true); + obj->UpdateObjectVisibilityOnCreate(); return true; } From 224b42c53a6ae212f2d1d550903e019ab8a741d6 Mon Sep 17 00:00:00 2001 From: treeston Date: Tue, 1 Mar 2016 23:09:25 +0100 Subject: [PATCH 56/93] Util/Random: Add randtime(Milliseconds const&, Milliseconds const&) to supersede urandms(uint32,uint32) for scripts being ported to std::chrono. --- src/common/Utilities/Random.cpp | 8 ++++++++ src/common/Utilities/Random.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/common/Utilities/Random.cpp b/src/common/Utilities/Random.cpp index cc013110b01..31318e8f52d 100644 --- a/src/common/Utilities/Random.cpp +++ b/src/common/Utilities/Random.cpp @@ -61,6 +61,14 @@ float frand(float min, float max) return float(GetRng()->Random() * (max - min) + min); } +Milliseconds randtime(Milliseconds const& min, Milliseconds const& max) +{ + long long diff = max.count() - min.count(); + ASSERT(diff >= 0); + ASSERT(diff <= (uint32)-1); + return min + Milliseconds(urand(0, diff)); +} + uint32 rand32() { return GetRng()->BRandom(); diff --git a/src/common/Utilities/Random.h b/src/common/Utilities/Random.h index 5610651a83b..5dea6117f97 100644 --- a/src/common/Utilities/Random.h +++ b/src/common/Utilities/Random.h @@ -19,6 +19,7 @@ #define Random_h__ #include "Define.h" +#include "Duration.h" #include #include @@ -34,6 +35,9 @@ uint32 urandms(uint32 min, uint32 max); /* Return a random number in the range 0 .. UINT32_MAX. */ uint32 rand32(); +/* Return a random time in the range min..max (up to millisecond precision). Only works for values where millisecond difference is a valid uint32. */ +Milliseconds randtime(Milliseconds const& min, Milliseconds const& max); + /* Return a random number in the range min..max */ float frand(float min, float max); From d573bd2fe7c71db3ae866ba11955988882dc18e6 Mon Sep 17 00:00:00 2001 From: ariel- Date: Wed, 2 Mar 2016 10:48:04 -0300 Subject: [PATCH 57/93] Core/Conditions: Improved mergeability between branches --- sql/updates/world/2016_99_99_99_world_335.sql | 3 +++ src/server/game/Accounts/RBAC.h | 4 ++-- src/server/game/Conditions/ConditionMgr.cpp | 18 ++++++++++++++---- src/server/game/Conditions/ConditionMgr.h | 10 ++++++---- 4 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 sql/updates/world/2016_99_99_99_world_335.sql diff --git a/sql/updates/world/2016_99_99_99_world_335.sql b/sql/updates/world/2016_99_99_99_world_335.sql new file mode 100644 index 00000000000..e7a9f60e790 --- /dev/null +++ b/sql/updates/world/2016_99_99_99_world_335.sql @@ -0,0 +1,3 @@ +-- +-- Only for 3.3.5! +UPDATE `conditions` SET `ConditionTypeOrReference`=42 WHERE `ConditionTypeOrReference`=41; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index 4ebd3ae7042..3f5db56558b 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -670,8 +670,8 @@ enum RBACPermissions RBAC_PERM_COMMAND_WP_UNLOAD = 772, RBAC_PERM_COMMAND_WP_RELOAD = 773, RBAC_PERM_COMMAND_WP_SHOW = 774, - RBAC_PERM_COMMAND_MODIFY_CURRENCY = 775, // only 4.3.4 - RBAC_PERM_COMMAND_DEBUG_PHASE = 776, // only 4.3.4 + RBAC_PERM_COMMAND_MODIFY_CURRENCY = 775, // only 6.x + RBAC_PERM_COMMAND_DEBUG_PHASE = 776, // only 6.x RBAC_PERM_COMMAND_MAILBOX = 777, RBAC_PERM_COMMAND_AHBOT = 778, RBAC_PERM_COMMAND_AHBOT_ITEMS = 779, diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 81dc7894592..6da83aad1a8 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -55,7 +55,8 @@ char const* const ConditionMgr::StaticSourceTypeData[CONDITION_SOURCE_TYPE_MAX] "SmartScript", "Npc Vendor", "Spell Proc", - "Phase Def" + "Terrain Swap", + "Phase" }; ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[CONDITION_MAX] = @@ -101,6 +102,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { "Health Pct", true, true, false }, { "Realm Achievement", true, false, false }, { "In Water", false, false, false }, + { "Terrain Swap", false, false, false }, { "Sit/stand state", true, true, false } }; @@ -1650,9 +1652,14 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const } break; } - case CONDITION_SOURCE_TYPE_PHASE_DEFINITION: + case CONDITION_SOURCE_TYPE_TERRAIN_SWAP: { - TC_LOG_ERROR("sql.sql", "CONDITION_SOURCE_TYPE_PHASE_DEFINITION:: is only for 4.3.4 branch, skipped"); + TC_LOG_ERROR("sql.sql", "CONDITION_SOURCE_TYPE_TERRAIN_SWAP: is only for 6.x branch, skipped"); + return false; + } + case CONDITION_SOURCE_TYPE_PHASE: + { + TC_LOG_ERROR("sql.sql", "CONDITION_SOURCE_TYPE_PHASE: is only for 6.x branch, skipped"); return false; } case CONDITION_SOURCE_TYPE_GOSSIP_MENU: @@ -1670,7 +1677,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const { if (cond->ConditionType == CONDITION_NONE || cond->ConditionType >= CONDITION_MAX) { - TC_LOG_ERROR("sql.sql", "%s Invalid ConditionType in `condition` table, ignoring.", cond->ToString().c_str()); + TC_LOG_ERROR("sql.sql", "%s Invalid ConditionType in `condition` table, ignoring.", cond->ToString(true).c_str()); return false; } @@ -2107,6 +2114,9 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const } case CONDITION_IN_WATER: break; + case CONDITION_TERRAIN_SWAP: + TC_LOG_ERROR("sql.sql", "%s is not valid for this branch, skipped.", cond->ToString(true).c_str()); + return false; case CONDITION_STAND_STATE: { bool valid = false; diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 3123aaca86a..7dc4592a6a9 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -71,8 +71,9 @@ enum ConditionTypes CONDITION_HP_PCT = 38, // hpPct ComparisonType 0 true if unit's hp matches given pct CONDITION_REALM_ACHIEVEMENT = 39, // achievement_id 0 0 true if realm achievement is complete CONDITION_IN_WATER = 40, // 0 0 0 true if unit in water - CONDITION_STAND_STATE = 41, // stateType state 0 true if unit matches specified sitstate (0,x: has exactly state x; 1,0: any standing state; 1,1: any sitting state;) - CONDITION_MAX = 42 // MAX + CONDITION_TERRAIN_SWAP = 41, // only for 6.x + CONDITION_STAND_STATE = 42, // stateType state 0 true if unit matches specified sitstate (0,x: has exactly state x; 1,0: any standing state; 1,1: any sitting state;) + CONDITION_MAX = 43 // MAX }; /*! Documentation on implementing a new ConditionSourceType: @@ -129,8 +130,9 @@ enum ConditionSourceType CONDITION_SOURCE_TYPE_SMART_EVENT = 22, CONDITION_SOURCE_TYPE_NPC_VENDOR = 23, CONDITION_SOURCE_TYPE_SPELL_PROC = 24, - CONDITION_SOURCE_TYPE_PHASE_DEFINITION = 25, // only 4.3.4 - CONDITION_SOURCE_TYPE_MAX = 26 // MAX + CONDITION_SOURCE_TYPE_TERRAIN_SWAP = 25, // only 6.x + CONDITION_SOURCE_TYPE_PHASE = 26, // only 6.x + CONDITION_SOURCE_TYPE_MAX = 27 // MAX }; enum RelationType From 2f1451f1881bbdb87fc02c352efe249a0a95f779 Mon Sep 17 00:00:00 2001 From: ariel- Date: Wed, 2 Mar 2016 12:23:05 -0300 Subject: [PATCH 58/93] Rename 2016_99_99_99_world_335.sql to 2016_03_02_00_world_335.sql --- .../{2016_99_99_99_world_335.sql => 2016_03_02_00_world_335.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2016_99_99_99_world_335.sql => 2016_03_02_00_world_335.sql} (100%) diff --git a/sql/updates/world/2016_99_99_99_world_335.sql b/sql/updates/world/2016_03_02_00_world_335.sql similarity index 100% rename from sql/updates/world/2016_99_99_99_world_335.sql rename to sql/updates/world/2016_03_02_00_world_335.sql From 7d3cffc297b6a1e24faf64a19b5167609ad8abbf Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 2 Mar 2016 00:47:49 +0100 Subject: [PATCH 59/93] Core/Database: Close the databases correctly when the DBUpdater fails * Also fixes a memory leak spotted by Aokromes --- .../database/Database/DatabaseLoader.cpp | 67 ++++++++----------- src/server/database/Database/DatabaseLoader.h | 13 ++-- src/server/worldserver/Main.cpp | 4 +- 3 files changed, 39 insertions(+), 45 deletions(-) diff --git a/src/server/database/Database/DatabaseLoader.cpp b/src/server/database/Database/DatabaseLoader.cpp index 92d8730cd12..6a8e86ffca9 100644 --- a/src/server/database/Database/DatabaseLoader.cpp +++ b/src/server/database/Database/DatabaseLoader.cpp @@ -32,7 +32,7 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st { bool const updatesEnabledForThis = DBUpdater::IsEnabled(_updateFlags); - _open.push(std::make_pair([this, name, updatesEnabledForThis, &pool]() -> bool + _open.push([this, name, updatesEnabledForThis, &pool]() -> bool { std::string const dbString = sConfigMgr->GetStringDefault(name + "DatabaseInfo", ""); if (dbString.empty()) @@ -71,12 +71,13 @@ DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::st return false; } } + // Add the close operation + _close.push([&pool] + { + pool.Close(); + }); return true; - }, - [&pool]() - { - pool.Close(); - })); + }); // Populate and update only if updates are enabled for this pool if (updatesEnabledForThis) @@ -137,38 +138,7 @@ bool DatabaseLoader::Load() bool DatabaseLoader::OpenDatabases() { - while (!_open.empty()) - { - std::pair> const load = _open.top(); - if (load.first()) - _close.push(load.second); - else - { - // Close all loaded databases - while (!_close.empty()) - { - _close.top()(); - _close.pop(); - } - return false; - } - - _open.pop(); - } - return true; -} - -// Processes the elements of the given stack until a predicate returned false. -bool DatabaseLoader::Process(std::stack& stack) -{ - while (!stack.empty()) - { - if (!stack.top()()) - return false; - - stack.pop(); - } - return true; + return Process(_open); } bool DatabaseLoader::PopulateDatabases() @@ -186,6 +156,27 @@ bool DatabaseLoader::PrepareStatements() return Process(_prepare); } +bool DatabaseLoader::Process(std::queue& queue) +{ + while (!queue.empty()) + { + if (!queue.front()()) + { + // Close all open databases which have a registered close operation + while (!_close.empty()) + { + _close.top()(); + _close.pop(); + } + + return false; + } + + queue.pop(); + } + return true; +} + template DatabaseLoader& DatabaseLoader::AddDatabase(DatabaseWorkerPool& pool, std::string const& name); template diff --git a/src/server/database/Database/DatabaseLoader.h b/src/server/database/Database/DatabaseLoader.h index da92cf85a9f..ec390a427ad 100644 --- a/src/server/database/Database/DatabaseLoader.h +++ b/src/server/database/Database/DatabaseLoader.h @@ -21,8 +21,9 @@ #include "DatabaseWorkerPool.h" #include "DatabaseEnv.h" -#include #include +#include +#include // A helper class to initiate all database worker pools, // handles updating, delays preparing of statements and cleans up on failure. @@ -56,16 +57,18 @@ private: bool PrepareStatements(); using Predicate = std::function; + using Closer = std::function; - static bool Process(std::stack& stack); + // Invokes all functions in the given queue and closes the databases on errors. + // Returns false when there was an error. + bool Process(std::queue& queue); std::string const _logger; bool const _autoSetup; uint32 const _updateFlags; - std::stack>> _open; - std::stack> _close; - std::stack _populate, _update, _prepare; + std::queue _open, _populate, _update, _prepare; + std::stack _close; }; #endif // DatabaseLoader_h__ diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 53c5f250851..58ddce532c0 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -449,9 +449,9 @@ bool StartDB() // Load databases DatabaseLoader loader("server.worldserver", DatabaseLoader::DATABASE_NONE); loader - .AddDatabase(WorldDatabase, "World") + .AddDatabase(LoginDatabase, "Login") .AddDatabase(CharacterDatabase, "Character") - .AddDatabase(LoginDatabase, "Login"); + .AddDatabase(WorldDatabase, "World"); if (!loader.Load()) return false; From 5ed018099418099e23921409ff96dc6175b97062 Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 2 Mar 2016 02:17:37 +0100 Subject: [PATCH 60/93] Core/Database: Use RAII instead of raw pointers for resource management * Corrects dirty usage of vectors with array indexes * Removes _connectionCount which is now handled through the vector size * Rename magic identifier "t" to "connection" --- .../database/Database/DatabaseWorkerPool.h | 150 ++++++++---------- 1 file changed, 67 insertions(+), 83 deletions(-) diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index d5a254647eb..36e12e46f4f 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -32,6 +32,7 @@ #include #include +#include #define MIN_MYSQL_SERVER_VERSION 50100u #define MIN_MYSQL_CLIENT_VERSION 50100u @@ -62,9 +63,6 @@ class DatabaseWorkerPool DatabaseWorkerPool() : _queue(new ProducerConsumerQueue()), _async_threads(0), _synch_threads(0) { - memset(_connectionCount, 0, sizeof(_connectionCount)); - _connections.resize(IDX_SIZE); - WPFatal(mysql_thread_safe(), "Used MySQL library isn't thread-safe."); WPFatal(mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, "TrinityCore does not support MySQL versions below 5.1"); WPFatal(mysql_get_client_version() == MYSQL_VERSION_ID, "Used MySQL library version (%s) does not match the version used to compile TrinityCore (%s).", @@ -78,7 +76,7 @@ class DatabaseWorkerPool void SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads) { - _connectionInfo.reset(new MySQLConnectionInfo(infoString)); + _connectionInfo = Trinity::make_unique(infoString); _async_threads = asyncThreads; _synch_threads = synchThreads; @@ -100,8 +98,8 @@ class DatabaseWorkerPool if (!error) { - TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. %u total connections running.", GetDatabaseName(), - (_connectionCount[IDX_SYNCH] + _connectionCount[IDX_ASYNC])); + TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. %u total connections running.", + GetDatabaseName(), (_connections[IDX_SYNCH].size() + _connections[IDX_ASYNC].size())); } return error; @@ -111,11 +109,8 @@ class DatabaseWorkerPool { TC_LOG_INFO("sql.driver", "Closing down DatabasePool '%s'.", GetDatabaseName()); - for (uint8 i = 0; i < _connectionCount[IDX_ASYNC]; ++i) - { - T* t = _connections[IDX_ASYNC][i]; - t->Close(); //! Closes the actualy MySQL connection. - } + //! Closes the actualy MySQL connection. + _connections[IDX_ASYNC].clear(); TC_LOG_INFO("sql.driver", "Asynchronous connections on DatabasePool '%s' terminated. Proceeding with synchronous connections.", GetDatabaseName()); @@ -124,8 +119,7 @@ class DatabaseWorkerPool //! There's no need for locking the connection, because DatabaseWorkerPool<>::Close //! should only be called after any other thread tasks in the core have exited, //! meaning there can be no concurrent access at this point. - for (uint8 i = 0; i < _connectionCount[IDX_SYNCH]; ++i) - _connections[IDX_SYNCH][i]->Close(); + _connections[IDX_SYNCH].clear(); TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName()); } @@ -133,19 +127,18 @@ class DatabaseWorkerPool //! Prepares all prepared statements bool PrepareStatements() { - for (uint8 i = 0; i < IDX_SIZE; ++i) - for (uint32 c = 0; c < _connectionCount[i]; ++c) + for (auto& connections : _connections) + for (auto& connection : connections) { - T* t = _connections[i][c]; - t->LockIfReady(); - if (!t->PrepareStatements()) + connection->LockIfReady(); + if (!connection->PrepareStatements()) { - t->Unlock(); + connection->Unlock(); Close(); return false; } else - t->Unlock(); + connection->Unlock(); } return true; @@ -201,9 +194,9 @@ class DatabaseWorkerPool if (!sql) return; - T* t = GetFreeConnection(); - t->Execute(sql); - t->Unlock(); + T* connection = GetFreeConnection(); + connection->Execute(sql); + connection->Unlock(); } //! Directly executes a one-way SQL operation in string format -with variable args-, that will block the calling thread until finished. @@ -221,9 +214,9 @@ class DatabaseWorkerPool //! Statement must be prepared with the CONNECTION_SYNCH flag. void DirectExecute(PreparedStatement* stmt) { - T* t = GetFreeConnection(); - t->Execute(stmt); - t->Unlock(); + T* connection = GetFreeConnection(); + connection->Execute(stmt); + connection->Unlock(); //! Delete proxy-class. Not needed anymore delete stmt; @@ -235,13 +228,13 @@ class DatabaseWorkerPool //! Directly executes an SQL query in string format that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. - QueryResult Query(const char* sql, T* conn = nullptr) + QueryResult Query(const char* sql, T* connection = nullptr) { - if (!conn) - conn = GetFreeConnection(); + if (!connection) + connection = GetFreeConnection(); - ResultSet* result = conn->Query(sql); - conn->Unlock(); + ResultSet* result = connection->Query(sql); + connection->Unlock(); if (!result || !result->GetRowCount() || !result->NextRow()) { delete result; @@ -278,9 +271,9 @@ class DatabaseWorkerPool //! Statement must be prepared with CONNECTION_SYNCH flag. PreparedQueryResult Query(PreparedStatement* stmt) { - T* t = GetFreeConnection(); - PreparedResultSet* ret = t->Query(stmt); - t->Unlock(); + auto connection = GetFreeConnection(); + PreparedResultSet* ret = connection->Query(stmt); + connection->Unlock(); //! Delete proxy-class. Not needed anymore delete stmt; @@ -380,11 +373,11 @@ class DatabaseWorkerPool //! were appended to the transaction will be respected during execution. void DirectCommitTransaction(SQLTransaction& transaction) { - T* con = GetFreeConnection(); - int errorCode = con->ExecuteTransaction(transaction); + T* connection = GetFreeConnection(); + int errorCode = connection->ExecuteTransaction(transaction); if (!errorCode) { - con->Unlock(); // OK, operation succesful + connection->Unlock(); // OK, operation succesful return; } @@ -395,7 +388,7 @@ class DatabaseWorkerPool uint8 loopBreaker = 5; for (uint8 i = 0; i < loopBreaker; ++i) { - if (!con->ExecuteTransaction(transaction)) + if (!connection->ExecuteTransaction(transaction)) break; } } @@ -403,7 +396,7 @@ class DatabaseWorkerPool //! Clean up now. transaction->Cleanup(); - con->Unlock(); + connection->Unlock(); } //! Method used to execute prepared statements in a diverse context. @@ -456,63 +449,55 @@ class DatabaseWorkerPool void KeepAlive() { //! Ping synchronous connections - for (uint8 i = 0; i < _connectionCount[IDX_SYNCH]; ++i) + for (auto& connection : _connections[IDX_SYNCH]) { - T* t = _connections[IDX_SYNCH][i]; - if (t->LockIfReady()) + if (connection->LockIfReady()) { - t->Ping(); - t->Unlock(); + connection->Ping(); + connection->Unlock(); } } //! Assuming all worker threads are free, every worker thread will receive 1 ping operation request //! If one or more worker threads are busy, the ping operations will not be split evenly, but this doesn't matter //! as the sole purpose is to prevent connections from idling. - for (size_t i = 0; i < _connections[IDX_ASYNC].size(); ++i) + for (auto& connection : _connections[IDX_ASYNC]) Enqueue(new PingOperation); } private: uint32 OpenConnections(InternalIndex type, uint8 numConnections) { - _connections[type].resize(numConnections); for (uint8 i = 0; i < numConnections; ++i) { - T* t; - - if (type == IDX_ASYNC) - t = new T(_queue.get(), *_connectionInfo); - else if (type == IDX_SYNCH) - t = new T(*_connectionInfo); - else - ABORT(); - - _connections[type][i] = t; - ++_connectionCount[type]; - - uint32 error = t->Open(); - - if (!error) - { - if (mysql_get_server_version(t->GetHandle()) < MIN_MYSQL_SERVER_VERSION) + // Create the connection + auto connection = [&] { + switch (type) { - TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1"); - error = 1; + case IDX_ASYNC: + return Trinity::make_unique(_queue.get(), *_connectionInfo); + case IDX_SYNCH: + return Trinity::make_unique(*_connectionInfo); + default: + ABORT(); } - } + }(); - // Failed to open a connection or invalid version, abort and cleanup - if (error) + if (uint32 error = connection->Open()) { - while (_connectionCount[type] != 0) - { - t = _connections[type][i--]; - delete t; - --_connectionCount[type]; - } + // Failed to open a connection or invalid version, abort and cleanup + _connections[type].clear(); return error; } + else if (mysql_get_server_version(connection->GetHandle()) < MIN_MYSQL_SERVER_VERSION) + { + TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1"); + return 1; + } + else + { + _connections[type].push_back(std::move(connection)); + } } // Everything is fine @@ -524,7 +509,8 @@ class DatabaseWorkerPool if (!to || !from || !length) return 0; - return mysql_real_escape_string(_connections[IDX_SYNCH][0]->GetHandle(), to, from, length); + return mysql_real_escape_string( + _connections[IDX_SYNCH].front()->GetHandle(), to, from, length); } void Enqueue(SQLOperation* op) @@ -537,18 +523,18 @@ class DatabaseWorkerPool T* GetFreeConnection() { uint8 i = 0; - size_t num_cons = _connectionCount[IDX_SYNCH]; - T* t = NULL; + auto const num_cons = _connections[IDX_SYNCH].size(); + T* connection = nullptr; //! Block forever until a connection is free for (;;) { - t = _connections[IDX_SYNCH][++i % num_cons]; + connection = _connections[IDX_SYNCH][++i % num_cons].get(); //! Must be matched with t->Unlock() or you will get deadlocks - if (t->LockIfReady()) + if (connection->LockIfReady()) break; } - return t; + return connection; } char const* GetDatabaseName() const @@ -558,9 +544,7 @@ class DatabaseWorkerPool //! Queue shared by async worker threads. std::unique_ptr> _queue; - std::vector> _connections; - //! Counter of MySQL connections; - uint32 _connectionCount[IDX_SIZE]; + std::array>, IDX_SIZE> _connections; std::unique_ptr _connectionInfo; uint8 _async_threads, _synch_threads; }; From 09fa0ab46a487ea85d475ac0b3495724c170fe1a Mon Sep 17 00:00:00 2001 From: Naios Date: Wed, 2 Mar 2016 02:34:12 +0100 Subject: [PATCH 61/93] Core/Database: Move DatabaseWorkerPool into it's own translation unit --- .../database/Database/DatabaseWorkerPool.cpp | 322 ++++++++++++++++++ .../database/Database/DatabaseWorkerPool.h | 277 +-------------- 2 files changed, 338 insertions(+), 261 deletions(-) create mode 100644 src/server/database/Database/DatabaseWorkerPool.cpp diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp new file mode 100644 index 00000000000..5d914b6e0e8 --- /dev/null +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -0,0 +1,322 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "DatabaseWorkerPool.h" +#include "DatabaseEnv.h" + +#define MIN_MYSQL_SERVER_VERSION 50100u +#define MIN_MYSQL_CLIENT_VERSION 50100u + +template +DatabaseWorkerPool::DatabaseWorkerPool() + : _queue(new ProducerConsumerQueue()), + _async_threads(0), _synch_threads(0) +{ + WPFatal(mysql_thread_safe(), "Used MySQL library isn't thread-safe."); + WPFatal(mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, "TrinityCore does not support MySQL versions below 5.1"); + WPFatal(mysql_get_client_version() == MYSQL_VERSION_ID, "Used MySQL library version (%s) does not match the version used to compile TrinityCore (%s).", + mysql_get_client_info(), MYSQL_SERVER_VERSION); +} + +template +void DatabaseWorkerPool::SetConnectionInfo(std::string const& infoString, + uint8 const asyncThreads, uint8 const synchThreads) +{ + _connectionInfo = Trinity::make_unique(infoString); + + _async_threads = asyncThreads; + _synch_threads = synchThreads; +} + +template +uint32 DatabaseWorkerPool::Open() +{ + WPFatal(_connectionInfo.get(), "Connection info was not set!"); + + TC_LOG_INFO("sql.driver", "Opening DatabasePool '%s'. " + "Asynchronous connections: %u, synchronous connections: %u.", + GetDatabaseName(), _async_threads, _synch_threads); + + uint32 error = OpenConnections(IDX_ASYNC, _async_threads); + + if (error) + return error; + + error = OpenConnections(IDX_SYNCH, _synch_threads); + + if (!error) + { + TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. " SZFMTD + " total connections running.", GetDatabaseName(), + (_connections[IDX_SYNCH].size() + _connections[IDX_ASYNC].size())); + } + + return error; +} + +template +void DatabaseWorkerPool::Close() +{ + TC_LOG_INFO("sql.driver", "Closing down DatabasePool '%s'.", GetDatabaseName()); + + //! Closes the actualy MySQL connection. + _connections[IDX_ASYNC].clear(); + + TC_LOG_INFO("sql.driver", "Asynchronous connections on DatabasePool '%s' terminated. " + "Proceeding with synchronous connections.", + GetDatabaseName()); + + //! Shut down the synchronous connections + //! There's no need for locking the connection, because DatabaseWorkerPool<>::Close + //! should only be called after any other thread tasks in the core have exited, + //! meaning there can be no concurrent access at this point. + _connections[IDX_SYNCH].clear(); + + TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName()); +} + +template +bool DatabaseWorkerPool::PrepareStatements() +{ + for (auto& connections : _connections) + for (auto& connection : connections) + { + connection->LockIfReady(); + if (!connection->PrepareStatements()) + { + connection->Unlock(); + Close(); + return false; + } + else + connection->Unlock(); + } + + return true; +} + +template +QueryResult DatabaseWorkerPool::Query(const char* sql, T* connection /*= nullptr*/) +{ + if (!connection) + connection = GetFreeConnection(); + + ResultSet* result = connection->Query(sql); + connection->Unlock(); + if (!result || !result->GetRowCount() || !result->NextRow()) + { + delete result; + return QueryResult(NULL); + } + + return QueryResult(result); +} + +template +PreparedQueryResult DatabaseWorkerPool::Query(PreparedStatement* stmt) +{ + auto connection = GetFreeConnection(); + PreparedResultSet* ret = connection->Query(stmt); + connection->Unlock(); + + //! Delete proxy-class. Not needed anymore + delete stmt; + + if (!ret || !ret->GetRowCount()) + { + delete ret; + return PreparedQueryResult(NULL); + } + + return PreparedQueryResult(ret); +} + +template +QueryResultFuture DatabaseWorkerPool::AsyncQuery(const char* sql) +{ + BasicStatementTask* task = new BasicStatementTask(sql, true); + // Store future result before enqueueing - task might get already processed and deleted before returning from this method + QueryResultFuture result = task->GetFuture(); + Enqueue(task); + return result; +} + +template +PreparedQueryResultFuture DatabaseWorkerPool::AsyncQuery(PreparedStatement* stmt) +{ + PreparedStatementTask* task = new PreparedStatementTask(stmt, true); + // Store future result before enqueueing - task might get already processed and deleted before returning from this method + PreparedQueryResultFuture result = task->GetFuture(); + Enqueue(task); + return result; +} + +template +QueryResultHolderFuture DatabaseWorkerPool::DelayQueryHolder(SQLQueryHolder* holder) +{ + SQLQueryHolderTask* task = new SQLQueryHolderTask(holder); + // Store future result before enqueueing - task might get already processed and deleted before returning from this method + QueryResultHolderFuture result = task->GetFuture(); + Enqueue(task); + return result; +} + +template +void DatabaseWorkerPool::CommitTransaction(SQLTransaction transaction) +{ +#ifdef TRINITY_DEBUG + //! Only analyze transaction weaknesses in Debug mode. + //! Ideally we catch the faults in Debug mode and then correct them, + //! so there's no need to waste these CPU cycles in Release mode. + switch (transaction->GetSize()) + { + case 0: + TC_LOG_DEBUG("sql.driver", "Transaction contains 0 queries. Not executing."); + return; + case 1: + TC_LOG_DEBUG("sql.driver", "Warning: Transaction only holds 1 query, consider removing Transaction context in code."); + break; + default: + break; + } +#endif // TRINITY_DEBUG + + Enqueue(new TransactionTask(transaction)); +} + +template +void DatabaseWorkerPool::DirectCommitTransaction(SQLTransaction& transaction) +{ + T* connection = GetFreeConnection(); + int errorCode = connection->ExecuteTransaction(transaction); + if (!errorCode) + { + connection->Unlock(); // OK, operation succesful + return; + } + + //! Handle MySQL Errno 1213 without extending deadlock to the core itself + /// @todo More elegant way + if (errorCode == ER_LOCK_DEADLOCK) + { + uint8 loopBreaker = 5; + for (uint8 i = 0; i < loopBreaker; ++i) + { + if (!connection->ExecuteTransaction(transaction)) + break; + } + } + + //! Clean up now. + transaction->Cleanup(); + + connection->Unlock(); +} + +template +void DatabaseWorkerPool::EscapeString(std::string& str) +{ + if (str.empty()) + return; + + char* buf = new char[str.size() * 2 + 1]; + EscapeString(buf, str.c_str(), str.size()); + str = buf; + delete[] buf; +} + +template +void DatabaseWorkerPool::KeepAlive() +{ + //! Ping synchronous connections + for (auto& connection : _connections[IDX_SYNCH]) + { + if (connection->LockIfReady()) + { + connection->Ping(); + connection->Unlock(); + } + } + + //! Assuming all worker threads are free, every worker thread will receive 1 ping operation request + //! If one or more worker threads are busy, the ping operations will not be split evenly, but this doesn't matter + //! as the sole purpose is to prevent connections from idling. + auto const count = _connections[IDX_ASYNC].size(); + for (uint8 i = 0; i < count; ++i) + Enqueue(new PingOperation); +} + +template +uint32 DatabaseWorkerPool::OpenConnections(InternalIndex type, uint8 numConnections) +{ + for (uint8 i = 0; i < numConnections; ++i) + { + // Create the connection + auto connection = [&] { + switch (type) + { + case IDX_ASYNC: + return Trinity::make_unique(_queue.get(), *_connectionInfo); + case IDX_SYNCH: + return Trinity::make_unique(*_connectionInfo); + default: + ABORT(); + } + }(); + + if (uint32 error = connection->Open()) + { + // Failed to open a connection or invalid version, abort and cleanup + _connections[type].clear(); + return error; + } + else if (mysql_get_server_version(connection->GetHandle()) < MIN_MYSQL_SERVER_VERSION) + { + TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1"); + return 1; + } + else + { + _connections[type].push_back(std::move(connection)); + } + } + + // Everything is fine + return 0; +} + +template +T* DatabaseWorkerPool::GetFreeConnection() +{ + uint8 i = 0; + auto const num_cons = _connections[IDX_SYNCH].size(); + T* connection = nullptr; + //! Block forever until a connection is free + for (;;) + { + connection = _connections[IDX_SYNCH][++i % num_cons].get(); + //! Must be matched with t->Unlock() or you will get deadlocks + if (connection->LockIfReady()) + break; + } + + return connection; +} + +template class DatabaseWorkerPool; +template class DatabaseWorkerPool; +template class DatabaseWorkerPool; diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h index 36e12e46f4f..d883366237f 100644 --- a/src/server/database/Database/DatabaseWorkerPool.h +++ b/src/server/database/Database/DatabaseWorkerPool.h @@ -34,9 +34,6 @@ #include #include -#define MIN_MYSQL_SERVER_VERSION 50100u -#define MIN_MYSQL_CLIENT_VERSION 50100u - class PingOperation : public SQLOperation { //! Operation for idle delaythreads @@ -60,89 +57,21 @@ class DatabaseWorkerPool public: /* Activity state */ - DatabaseWorkerPool() : _queue(new ProducerConsumerQueue()), - _async_threads(0), _synch_threads(0) - { - WPFatal(mysql_thread_safe(), "Used MySQL library isn't thread-safe."); - WPFatal(mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, "TrinityCore does not support MySQL versions below 5.1"); - WPFatal(mysql_get_client_version() == MYSQL_VERSION_ID, "Used MySQL library version (%s) does not match the version used to compile TrinityCore (%s).", - mysql_get_client_info(), MYSQL_SERVER_VERSION); - } + DatabaseWorkerPool(); ~DatabaseWorkerPool() { _queue->Cancel(); } - void SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads) - { - _connectionInfo = Trinity::make_unique(infoString); + void SetConnectionInfo(std::string const& infoString, uint8 const asyncThreads, uint8 const synchThreads); - _async_threads = asyncThreads; - _synch_threads = synchThreads; - } + uint32 Open(); - uint32 Open() - { - WPFatal(_connectionInfo.get(), "Connection info was not set!"); - - TC_LOG_INFO("sql.driver", "Opening DatabasePool '%s'. Asynchronous connections: %u, synchronous connections: %u.", - GetDatabaseName(), _async_threads, _synch_threads); - - uint32 error = OpenConnections(IDX_ASYNC, _async_threads); - - if (error) - return error; - - error = OpenConnections(IDX_SYNCH, _synch_threads); - - if (!error) - { - TC_LOG_INFO("sql.driver", "DatabasePool '%s' opened successfully. %u total connections running.", - GetDatabaseName(), (_connections[IDX_SYNCH].size() + _connections[IDX_ASYNC].size())); - } - - return error; - } - - void Close() - { - TC_LOG_INFO("sql.driver", "Closing down DatabasePool '%s'.", GetDatabaseName()); - - //! Closes the actualy MySQL connection. - _connections[IDX_ASYNC].clear(); - - TC_LOG_INFO("sql.driver", "Asynchronous connections on DatabasePool '%s' terminated. Proceeding with synchronous connections.", - GetDatabaseName()); - - //! Shut down the synchronous connections - //! There's no need for locking the connection, because DatabaseWorkerPool<>::Close - //! should only be called after any other thread tasks in the core have exited, - //! meaning there can be no concurrent access at this point. - _connections[IDX_SYNCH].clear(); - - TC_LOG_INFO("sql.driver", "All connections on DatabasePool '%s' closed.", GetDatabaseName()); - } + void Close(); //! Prepares all prepared statements - bool PrepareStatements() - { - for (auto& connections : _connections) - for (auto& connection : connections) - { - connection->LockIfReady(); - if (!connection->PrepareStatements()) - { - connection->Unlock(); - Close(); - return false; - } - else - connection->Unlock(); - } - - return true; - } + bool PrepareStatements(); inline MySQLConnectionInfo const* GetConnectionInfo() const { @@ -228,21 +157,7 @@ class DatabaseWorkerPool //! Directly executes an SQL query in string format that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. - QueryResult Query(const char* sql, T* connection = nullptr) - { - if (!connection) - connection = GetFreeConnection(); - - ResultSet* result = connection->Query(sql); - connection->Unlock(); - if (!result || !result->GetRowCount() || !result->NextRow()) - { - delete result; - return QueryResult(NULL); - } - - return QueryResult(result); - } + QueryResult Query(const char* sql, T* connection = nullptr); //! Directly executes an SQL query in string format -with variable args- that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. @@ -269,23 +184,7 @@ class DatabaseWorkerPool //! Directly executes an SQL query in prepared format that will block the calling thread until finished. //! Returns reference counted auto pointer, no need for manual memory management in upper level code. //! Statement must be prepared with CONNECTION_SYNCH flag. - PreparedQueryResult Query(PreparedStatement* stmt) - { - auto connection = GetFreeConnection(); - PreparedResultSet* ret = connection->Query(stmt); - connection->Unlock(); - - //! Delete proxy-class. Not needed anymore - delete stmt; - - if (!ret || !ret->GetRowCount()) - { - delete ret; - return PreparedQueryResult(NULL); - } - - return PreparedQueryResult(ret); - } + PreparedQueryResult Query(PreparedStatement* stmt); /** Asynchronous query (with resultset) methods. @@ -293,14 +192,7 @@ class DatabaseWorkerPool //! Enqueues a query in string format that will set the value of the QueryResultFuture return object as soon as the query is executed. //! The return value is then processed in ProcessQueryCallback methods. - QueryResultFuture AsyncQuery(const char* sql) - { - BasicStatementTask* task = new BasicStatementTask(sql, true); - // Store future result before enqueueing - task might get already processed and deleted before returning from this method - QueryResultFuture result = task->GetFuture(); - Enqueue(task); - return result; - } + QueryResultFuture AsyncQuery(const char* sql); //! Enqueues a query in string format -with variable args- that will set the value of the QueryResultFuture return object as soon as the query is executed. //! The return value is then processed in ProcessQueryCallback methods. @@ -313,27 +205,13 @@ class DatabaseWorkerPool //! Enqueues a query in prepared format that will set the value of the PreparedQueryResultFuture return object as soon as the query is executed. //! The return value is then processed in ProcessQueryCallback methods. //! Statement must be prepared with CONNECTION_ASYNC flag. - PreparedQueryResultFuture AsyncQuery(PreparedStatement* stmt) - { - PreparedStatementTask* task = new PreparedStatementTask(stmt, true); - // Store future result before enqueueing - task might get already processed and deleted before returning from this method - PreparedQueryResultFuture result = task->GetFuture(); - Enqueue(task); - return result; - } + PreparedQueryResultFuture AsyncQuery(PreparedStatement* stmt); //! Enqueues a vector of SQL operations (can be both adhoc and prepared) that will set the value of the QueryResultHolderFuture //! return object as soon as the query is executed. //! The return value is then processed in ProcessQueryCallback methods. //! Any prepared statements added to this holder need to be prepared with the CONNECTION_ASYNC flag. - QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder) - { - SQLQueryHolderTask* task = new SQLQueryHolderTask(holder); - // Store future result before enqueueing - task might get already processed and deleted before returning from this method - QueryResultHolderFuture result = task->GetFuture(); - Enqueue(task); - return result; - } + QueryResultHolderFuture DelayQueryHolder(SQLQueryHolder* holder); /** Transaction context methods. @@ -347,57 +225,11 @@ class DatabaseWorkerPool //! Enqueues a collection of one-way SQL operations (can be both adhoc and prepared). The order in which these operations //! were appended to the transaction will be respected during execution. - void CommitTransaction(SQLTransaction transaction) - { - #ifdef TRINITY_DEBUG - //! Only analyze transaction weaknesses in Debug mode. - //! Ideally we catch the faults in Debug mode and then correct them, - //! so there's no need to waste these CPU cycles in Release mode. - switch (transaction->GetSize()) - { - case 0: - TC_LOG_DEBUG("sql.driver", "Transaction contains 0 queries. Not executing."); - return; - case 1: - TC_LOG_DEBUG("sql.driver", "Warning: Transaction only holds 1 query, consider removing Transaction context in code."); - break; - default: - break; - } - #endif // TRINITY_DEBUG - - Enqueue(new TransactionTask(transaction)); - } + void CommitTransaction(SQLTransaction transaction); //! Directly executes a collection of one-way SQL operations (can be both adhoc and prepared). The order in which these operations //! were appended to the transaction will be respected during execution. - void DirectCommitTransaction(SQLTransaction& transaction) - { - T* connection = GetFreeConnection(); - int errorCode = connection->ExecuteTransaction(transaction); - if (!errorCode) - { - connection->Unlock(); // OK, operation succesful - return; - } - - //! Handle MySQL Errno 1213 without extending deadlock to the core itself - /// @todo More elegant way - if (errorCode == ER_LOCK_DEADLOCK) - { - uint8 loopBreaker = 5; - for (uint8 i = 0; i < loopBreaker; ++i) - { - if (!connection->ExecuteTransaction(transaction)) - break; - } - } - - //! Clean up now. - transaction->Cleanup(); - - connection->Unlock(); - } + void DirectCommitTransaction(SQLTransaction& transaction); //! Method used to execute prepared statements in a diverse context. //! Will be wrapped in a transaction if valid object is present, otherwise executed standalone. @@ -434,75 +266,13 @@ class DatabaseWorkerPool } //! Apply escape string'ing for current collation. (utf8) - void EscapeString(std::string& str) - { - if (str.empty()) - return; - - char* buf = new char[str.size() * 2 + 1]; - EscapeString(buf, str.c_str(), str.size()); - str = buf; - delete[] buf; - } + void EscapeString(std::string& str); //! Keeps all our MySQL connections alive, prevent the server from disconnecting us. - void KeepAlive() - { - //! Ping synchronous connections - for (auto& connection : _connections[IDX_SYNCH]) - { - if (connection->LockIfReady()) - { - connection->Ping(); - connection->Unlock(); - } - } - - //! Assuming all worker threads are free, every worker thread will receive 1 ping operation request - //! If one or more worker threads are busy, the ping operations will not be split evenly, but this doesn't matter - //! as the sole purpose is to prevent connections from idling. - for (auto& connection : _connections[IDX_ASYNC]) - Enqueue(new PingOperation); - } + void KeepAlive(); private: - uint32 OpenConnections(InternalIndex type, uint8 numConnections) - { - for (uint8 i = 0; i < numConnections; ++i) - { - // Create the connection - auto connection = [&] { - switch (type) - { - case IDX_ASYNC: - return Trinity::make_unique(_queue.get(), *_connectionInfo); - case IDX_SYNCH: - return Trinity::make_unique(*_connectionInfo); - default: - ABORT(); - } - }(); - - if (uint32 error = connection->Open()) - { - // Failed to open a connection or invalid version, abort and cleanup - _connections[type].clear(); - return error; - } - else if (mysql_get_server_version(connection->GetHandle()) < MIN_MYSQL_SERVER_VERSION) - { - TC_LOG_ERROR("sql.driver", "TrinityCore does not support MySQL versions below 5.1"); - return 1; - } - else - { - _connections[type].push_back(std::move(connection)); - } - } - - // Everything is fine - return 0; - } + uint32 OpenConnections(InternalIndex type, uint8 numConnections); unsigned long EscapeString(char *to, const char *from, unsigned long length) { @@ -520,22 +290,7 @@ class DatabaseWorkerPool //! Gets a free connection in the synchronous connection pool. //! Caller MUST call t->Unlock() after touching the MySQL context to prevent deadlocks. - T* GetFreeConnection() - { - uint8 i = 0; - auto const num_cons = _connections[IDX_SYNCH].size(); - T* connection = nullptr; - //! Block forever until a connection is free - for (;;) - { - connection = _connections[IDX_SYNCH][++i % num_cons].get(); - //! Must be matched with t->Unlock() or you will get deadlocks - if (connection->LockIfReady()) - break; - } - - return connection; - } + T* GetFreeConnection(); char const* GetDatabaseName() const { From 62815c6e1c0427e1d0229d02b1ba70449654cded Mon Sep 17 00:00:00 2001 From: Naios Date: Thu, 3 Mar 2016 01:19:58 +0100 Subject: [PATCH 62/93] Core/Database: Use RAII for resource management in MySQLConnection * Prevents double deletion of MySQLConnection after errors * The object stays valid after an error and will wait for a reconnect * Also crash the server if 5 reconnects fail * Corrects an issue where the server was crashed after one reconnect because mysql_thread_id was invoked with an invalid handle --- .../database/Database/MySQLConnection.cpp | 87 ++++++++++++------- .../database/Database/MySQLConnection.h | 8 +- 2 files changed, 58 insertions(+), 37 deletions(-) diff --git a/src/server/database/Database/MySQLConnection.cpp b/src/server/database/Database/MySQLConnection.cpp index 41dd61d3c3a..93d2a35f310 100644 --- a/src/server/database/Database/MySQLConnection.cpp +++ b/src/server/database/Database/MySQLConnection.cpp @@ -37,7 +37,6 @@ MySQLConnection::MySQLConnection(MySQLConnectionInfo& connInfo) : m_reconnecting(false), m_prepareError(false), m_queue(NULL), -m_worker(NULL), m_Mysql(NULL), m_connectionInfo(connInfo), m_connectionFlags(CONNECTION_SYNCH) { } @@ -50,24 +49,26 @@ m_Mysql(NULL), m_connectionInfo(connInfo), m_connectionFlags(CONNECTION_ASYNC) { - m_worker = new DatabaseWorker(m_queue, this); + m_worker = Trinity::make_unique(m_queue, this); } MySQLConnection::~MySQLConnection() { - delete m_worker; - - for (size_t i = 0; i < m_stmts.size(); ++i) - delete m_stmts[i]; - - if (m_Mysql) - mysql_close(m_Mysql); + Close(); } void MySQLConnection::Close() { - /// Only close us if we're not operating - delete this; + // Stop the worker thread before the statements are cleared + m_worker.reset(); + + m_stmts.clear(); + + if (m_Mysql) + { + mysql_close(m_Mysql); + m_Mysql = nullptr; + } } uint32 MySQLConnection::Open() @@ -412,7 +413,7 @@ int MySQLConnection::ExecuteTransaction(SQLTransaction& transaction) MySQLPreparedStatement* MySQLConnection::GetPreparedStatement(uint32 index) { ASSERT(index < m_stmts.size()); - MySQLPreparedStatement* ret = m_stmts[index]; + MySQLPreparedStatement* ret = m_stmts[index].get(); if (!ret) TC_LOG_ERROR("sql.sql", "Could not fetch prepared statement %u on database `%s`, connection type: %s.", index, m_connectionInfo.database.c_str(), (m_connectionFlags & CONNECTION_ASYNC) ? "asynchronous" : "synchronous"); @@ -424,16 +425,12 @@ void MySQLConnection::PrepareStatement(uint32 index, const char* sql, Connection { m_queries.insert(PreparedStatementMap::value_type(index, std::make_pair(sql, flags))); - // For reconnection case - if (m_reconnecting) - delete m_stmts[index]; - // Check if specified query should be prepared on this connection // i.e. don't prepare async statements on synchronous connections // to save memory that will not be used. if (!(m_connectionFlags & flags)) { - m_stmts[index] = NULL; + m_stmts[index].reset(); return; } @@ -455,8 +452,7 @@ void MySQLConnection::PrepareStatement(uint32 index, const char* sql, Connection } else { - MySQLPreparedStatement* mStmt = new MySQLPreparedStatement(stmt); - m_stmts[index] = mStmt; + m_stmts[index] = Trinity::make_unique(stmt); } } } @@ -477,7 +473,7 @@ PreparedResultSet* MySQLConnection::Query(PreparedStatement* stmt) return new PreparedResultSet(stmt->m_stmt->GetSTMT(), result, rowCount, fieldCount); } -bool MySQLConnection::_HandleMySQLErrno(uint32 errNo) +bool MySQLConnection::_HandleMySQLErrno(uint32 errNo, uint8 attempts /*= 5*/) { switch (errNo) { @@ -486,9 +482,21 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo) case CR_INVALID_CONN_HANDLE: case CR_SERVER_LOST_EXTENDED: { + if (m_Mysql) + { + TC_LOG_ERROR("sql.sql", "Lost the connection to the MySQL server!"); + + mysql_close(GetHandle()); + m_Mysql = nullptr; + } + + /*no break*/ + } + case CR_CONN_HOST_ERROR: + { + TC_LOG_INFO("sql.sql", "Attempting to reconnect to the MySQL server..."); + m_reconnecting = true; - uint64 oldThreadId = mysql_thread_id(GetHandle()); - mysql_close(GetHandle()); uint32 const lErrno = Open(); if (!lErrno) @@ -496,24 +504,37 @@ bool MySQLConnection::_HandleMySQLErrno(uint32 errNo) // Don't remove 'this' pointer unless you want to skip loading all prepared statements... if (!this->PrepareStatements()) { - TC_LOG_ERROR("sql.sql", "Could not re-prepare statements!"); - Close(); - return false; + TC_LOG_FATAL("sql.sql", "Could not re-prepare statements!"); + std::this_thread::sleep_for(std::chrono::seconds(10)); + std::abort(); } - TC_LOG_INFO("sql.sql", "Connection to the MySQL server is active."); - if (oldThreadId != mysql_thread_id(GetHandle())) - TC_LOG_INFO("sql.sql", "Successfully reconnected to %s @%s:%s (%s).", - m_connectionInfo.database.c_str(), m_connectionInfo.host.c_str(), m_connectionInfo.port_or_socket.c_str(), - (m_connectionFlags & CONNECTION_ASYNC) ? "asynchronous" : "synchronous"); + TC_LOG_INFO("sql.sql", "Successfully reconnected to %s @%s:%s (%s).", + m_connectionInfo.database.c_str(), m_connectionInfo.host.c_str(), m_connectionInfo.port_or_socket.c_str(), + (m_connectionFlags & CONNECTION_ASYNC) ? "asynchronous" : "synchronous"); m_reconnecting = false; return true; } - // It's possible this attempted reconnect throws 2006 at us. To prevent crazy recursive calls, sleep here. - std::this_thread::sleep_for(std::chrono::seconds(3)); // Sleep 3 seconds - return _HandleMySQLErrno(lErrno); // Call self (recursive) + if ((--attempts) == 0) + { + // Shut down the server when the mysql server isn't + // reachable for some time + TC_LOG_FATAL("sql.sql", "Failed to reconnect to the MySQL server, " + "terminating the server to prevent data corruption!"); + + // We could also initiate a shutdown through using std::raise(SIGTERM) + std::this_thread::sleep_for(std::chrono::seconds(10)); + std::abort(); + } + else + { + // It's possible this attempted reconnect throws 2006 at us. + // To prevent crazy recursive calls, sleep here. + std::this_thread::sleep_for(std::chrono::seconds(3)); // Sleep 3 seconds + return _HandleMySQLErrno(lErrno, attempts); // Call self (recursive) + } } case ER_LOCK_DEADLOCK: diff --git a/src/server/database/Database/MySQLConnection.h b/src/server/database/Database/MySQLConnection.h index a981caa607e..a0b908593df 100644 --- a/src/server/database/Database/MySQLConnection.h +++ b/src/server/database/Database/MySQLConnection.h @@ -116,18 +116,18 @@ class MySQLConnection virtual void DoPrepareStatements() = 0; protected: - std::vector m_stmts; //! PreparedStatements storage + std::vector> m_stmts; //! PreparedStatements storage PreparedStatementMap m_queries; //! Query storage bool m_reconnecting; //! Are we reconnecting? bool m_prepareError; //! Was there any error while preparing statements? private: - bool _HandleMySQLErrno(uint32 errNo); + bool _HandleMySQLErrno(uint32 errNo, uint8 attempts = 5); private: ProducerConsumerQueue* m_queue; //! Queue shared with other asynchronous connections. - DatabaseWorker* m_worker; //! Core worker task. - MYSQL * m_Mysql; //! MySQL Handle. + std::unique_ptr m_worker; //! Core worker task. + MYSQL* m_Mysql; //! MySQL Handle. MySQLConnectionInfo& m_connectionInfo; //! Connection info (used for logging) ConnectionFlags m_connectionFlags; //! Connection flags (for preparing relevant statements) std::mutex m_Mutex; From 8aabb087f0aa3d3ed627167f5c12075bfc945720 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 3 Mar 2016 15:28:35 +0000 Subject: [PATCH 63/93] DB/Quest: Troll Patrol: Can You Dig it? Script http://www.wowhead.com/quest=12588/troll-patrol-can-you-dig-it Also fixes http://www.wowhead.com/quest=12519/troll-patrol-whatdya-want-a-medal And fixes some issues with http://www.wowhead.com/quest=12568/troll-patrol-done-to-death Also fixes run time error 'able `event_scripts` has gameobject type (175584) unsupported by command SCRIPT_COMMAND_RESPAWN_GAMEOBJECT for script id 4845' --- .../updates/world/ \t2016_03_03_00_world.sql" | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 "sql/updates/world/ \t2016_03_03_00_world.sql" diff --git "a/sql/updates/world/ \t2016_03_03_00_world.sql" "b/sql/updates/world/ \t2016_03_03_00_world.sql" new file mode 100644 index 00000000000..473bac4708a --- /dev/null +++ "b/sql/updates/world/ \t2016_03_03_00_world.sql" @@ -0,0 +1,93 @@ +SET @CGUID := 91749; +SET @OGUID := 62179; + +UPDATE `creature_template` SET `npcflag`=16777216 WHERE `entry`=28162; + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=28162; +INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES +(28162, 51026, 1, 0); +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(28162,28330,28156) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(2833000,2833001,2833002) 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 +(28162, 0, 0, 1, 8, 0, 100, 1, 51026, 0, 0, 0, 11, 61286, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Corpse - On Spellhit Create Drakkari Medallion Cover - Cast World Generic Dismount/Cancel Shapeshift'), +(28162, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 11, 50737, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Corpse - On Spellhit Create Drakkari Medallion Cover - Cast Create Drakkari Medallion'), +(28162, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Corpse - On Spellhit Create Drakkari Medallion Cover - Cast Create Drakkari Medallion'), +(28162, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 3000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Corpse - On Spellhit Create Drakkari Medallion Cover - Despawn'), +(28162, 0, 4, 0, 25, 0, 100, 0, 0, 0, 0, 0, 81, 16777216, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Corpse - On Respawn - Set NPC Flags'), +(28330, 0, 0, 1, 8, 0, 100, 0, 51333, 0, 120000, 120000, 33, 28330, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Ancient Dirt KC Bunny - On Spell Hit - Give Quest Credit'), +(28330, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 70, 120, 0, 0, 0, 0, 0, 20, 190550, 0, 0, 0, 0, 0, 0, 'Ancient Dirt KC Bunny - On Spell Hit - Despawn GO'), +(28330, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 87, 2833000, 2833001, 2833002, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Dirt KC Bunny - On Spell Hit - Run Random Script'), +(28156, 0, 0, 1, 8, 0, 100, 1, 51276, 0, 0, 0, 11, 59216, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Defeated Argent Footman - On Spellhit \'Incinerate Corpse\' - Cast \'Burning Corpse\''), +(28156, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 11, 51279, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Defeated Argent Footman - On Spellhit - Cast \'Defeated Argent Footman KC\''), +(28156, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 10000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Defeated Argent Footman - On Spellhit - Despawn'), +(2833000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 51345, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Dirt KC Bunny - Script 1 - Cast Summon Ancient Drakkari Chest'), +(2833001, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 51357, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Dirt KC Bunny - Script 2 - Cast Summon Spider'), +(2833002, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 11, 51370, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Dirt KC Bunny - Script 3 - Cast Summon Drakkari Spectre'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceGroup`=28162; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(18, 28162, 51026, 0, 0, 9, 0, 12519, 0, 0, 0, 0, 0, '', 'Required quest active for spellclick'); + +DELETE FROM `gameobject_template` WHERE `entry`=190552; +INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `faction`, `flags`, `size`, `Data0`, `Data1`, `Data2`, `Data3`, `Data4`, `Data5`, `Data6`, `Data7`, `Data8`, `Data9`, `Data10`, `Data11`, `Data12`, `Data13`, `Data14`, `Data15`, `Data16`, `Data17`, `Data18`, `Data19`, `Data20`, `Data21`, `Data22`, `Data23`, `AIName`, `ScriptName`, `VerifiedBuild`) VALUES +(190552, 3, 2450, 'Ancient Drakkari Chest', '', '', '', 94, 0, 1, 1691, 27240, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 14007); + +DELETE FROM `gameobject_loot_template` WHERE `Entry`=27240; +INSERT INTO `gameobject_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(27240, 46369, 0, 52, 0, 1, 1, 1, 1, NULL), +(27240, 46368, 0, 47, 0, 1, 1, 1, 1, NULL), +(27240, 43851, 0, 15, 0, 1, 2, 1, 1, NULL), +(27240, 43852, 0, 14, 0, 1, 2, 1, 1, NULL), +(27240, 33470, 0, 14, 0, 1, 3, 1, 4, NULL); + +DELETE FROM `creature` WHERE `id`=28330; +INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `MovementType`) VALUES +(@CGUID+0, 28330, 571, 1, 1, 4994.237, -2934.52, 289.698, 4.502949, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+1, 28330, 571, 1, 1, 4928.283, -2954.844, 289.4258, 0.3665192, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+2, 28330, 571, 1, 1, 4971.499, -2967.053, 290.4032, 6.021386, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+3, 28330, 571, 1, 1, 4934.217, -2988.888, 290.1517, 3.316126, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+4, 28330, 571, 1, 1, 4901.642, -3020.357, 290.4903, 3.577925, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+5, 28330, 571, 1, 1, 4936.192, -2911.305, 289.9935, 3.804818, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+6, 28330, 571, 1, 1, 4904.635, -2938.013, 290.041, 2.792527, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+7, 28330, 571, 1, 1, 4959.712, -2882.519, 290.1794, 2.495821, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+8, 28330, 571, 1, 1, 4903.988, -2988.983, 289.8607, 6.073746, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+9, 28330, 571, 1, 1, 4884.578, -2949.397, 291.4635, 6.248279, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+10, 28330, 571, 1, 1, 4867.053, -3032.317, 290.2768, 0.01745329, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+11, 28330, 571, 1, 1, 4875.137, -2981.573, 289.6624, 3.769911, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+12, 28330, 571, 1, 1, 4948.37, -2845.009, 289.9186, 0.2094395, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+13, 28330, 571, 1, 1, 4900.262, -2870.288, 290.5846, 2.879793, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+14, 28330, 571, 1, 1, 4889.488, -2826.498, 291.2368, 6.213372, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+15, 28330, 571, 1, 1, 4865.896, -2879.65, 291.2252, 3.124139, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+16, 28330, 571, 1, 1, 4847.792, -2933.366, 290.7986, 1.954769, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+17, 28330, 571, 1, 1, 4838.494, -2962.302, 290.7893, 5.096361, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+18, 28330, 571, 1, 1, 4834.676, -3024.518, 290.9732, 5.77704, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+19, 28330, 571, 1, 1, 4834.516, -3055.432, 292.7168, 4.223697, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+20, 28330, 571, 1, 1, 4833.344, -3086.806, 290.7325, 5.183628, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+21, 28330, 571, 1, 1, 4811.373, -3122.263, 290.908, 3.787364, 120, 0, 0), -- 28330 (Area: 66) +(@CGUID+22, 28330, 571, 1, 1, 4774.604, -3146.782, 293.9535, 4.886922, 120, 0, 0); -- 28330 (Area: 66) + +DELETE FROM `gameobject` WHERE `id`=190550; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(@OGUID+0, 190550, 571, 1, 1, 4947.931, -2845.012, 289.6788, 3.141593, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 4278) +(@OGUID+1, 190550, 571, 1, 1, 4994.241, -2934.715, 289.4844, 3.036838, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+2, 190550, 571, 1, 1, 4959.522, -2882.375, 289.9583, -0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+3, 190550, 571, 1, 1, 4935.69, -2910.847, 289.8739, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+4, 190550, 571, 1, 1, 4904.143, -2988.849, 289.7597, -2.879789, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+5, 190550, 571, 1, 1, 4901.818, -3020.541, 290.4142, 2.862335, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+6, 190550, 571, 1, 1, 4847.445, -2933.018, 290.703, 2.91469, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+7, 190550, 571, 1, 1, 4889.123, -2826.122, 291.1009, -2.670348, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+8, 190550, 571, 1, 1, 4959.522, -2882.375, 289.9583, -0.2268925, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+9, 190550, 571, 1, 1, 4904.084, -2937.728, 289.9795, -0.9250239, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+10, 190550, 571, 1, 1, 4865.544, -2879.292, 291.0988, 0.8377574, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+11, 190550, 571, 1, 1, 4935.69, -2910.847, 289.8739, 0.4712385, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+12, 190550, 571, 1, 1, 4934.223, -2988.802, 290.0577, 1.727875, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+13, 190550, 571, 1, 1, 4874.853, -2981.499, 289.5772, 5.183629, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+14, 190550, 571, 1, 1, 4837.822, -2961.738, 290.6022, 2.565632, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+15, 190550, 571, 1, 1, 4834.372, -3055.432, 292.4856, 4.799657, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+16, 190550, 571, 1, 1, 4928.226, -2954.833, 289.3405, 2.129301, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 4279) +(@OGUID+17, 190550, 571, 1, 1, 4900.326, -2870.361, 290.4038, 1.431168, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 0) +(@OGUID+18, 190550, 571, 1, 1, 4971.439, -2966.859, 290.2518, 4.520406, 0, 0, 0, 1, 120, 255, 1), -- 190550 (Area: 4278) +(@OGUID+19, 190550, 571, 1, 1, 4928.226, -2954.833, 289.3405, 2.129301, 0, 0, 0, 1, 120, 255, 1); -- 190550 (Area: 0) + +DELETE FROM `event_scripts` WHERE `id`=4845 AND `delay`=0 AND `command`=9 AND `datalong`=21207 AND `datalong2`=66 AND `dataint`=0 AND `x`=0 AND `y`=0 AND `z`=0 AND `o`=0 LIMIT 1; From c7dded13a7b1ce0340d21eec481076fe7094d6e1 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Thu, 3 Mar 2016 17:37:16 +0100 Subject: [PATCH 64/93] Rename 2016_03_03_00_world.sql to 2016_03_03_00_world.sql --- .../updates/world/2016_03_03_00_world.sql | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "sql/updates/world/ \t2016_03_03_00_world.sql" => sql/updates/world/2016_03_03_00_world.sql (100%) diff --git "a/sql/updates/world/ \t2016_03_03_00_world.sql" b/sql/updates/world/2016_03_03_00_world.sql similarity index 100% rename from "sql/updates/world/ \t2016_03_03_00_world.sql" rename to sql/updates/world/2016_03_03_00_world.sql From fe707db96f711f94a461306748274fa0bffa0226 Mon Sep 17 00:00:00 2001 From: treeston Date: Thu, 3 Mar 2016 20:57:03 +0100 Subject: [PATCH 65/93] Core/AI: Fix an edge case crash with PlayerAI. Again. Sheesh. --- src/server/game/Entities/Unit/Unit.cpp | 45 +++++++++++++++++--------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 6fcd72c4934..b6272b81693 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13750,28 +13750,41 @@ void Unit::UpdateCharmAI() break; case TYPEID_PLAYER: { - if (Unit* charmer = GetCharmer()) // if we are currently being charmed, then we should apply charm AI + if (IsCharmed()) // if we are currently being charmed, then we should apply charm AI { - if (Creature* creatureCharmer = charmer->ToCreature()) // this should only ever happen for creature charmers + i_disabledAI = i_AI; + + UnitAI* newAI = nullptr; + // first, we check if the creature's own AI specifies an override playerai for its owned players + if (Unit* charmer = GetCharmer()) { - i_disabledAI = i_AI; - // first, we check if the creature's own AI specifies an override playerai for its owned players - if (PlayerAI* charmAI = creatureCharmer->IsAIEnabled ? creatureCharmer->AI()->GetAIForCharmedPlayer(ToPlayer()) : nullptr) - i_AI = charmAI; - else // otherwise, we default to the generic one - i_AI = new SimpleCharmedPlayerAI(ToPlayer()); - } - else - { - TC_LOG_ERROR("misc", "Attempt to assign charm AI to player %s who is charmed by non-creature %s.", GetGUID().ToString().c_str(), charmer->GetGUID().ToString().c_str()); + if (Creature* creatureCharmer = charmer->ToCreature()) + { + if (PlayerAI* charmAI = creatureCharmer->IsAIEnabled ? creatureCharmer->AI()->GetAIForCharmedPlayer(ToPlayer()) : nullptr) + newAI = charmAI; + } + else + { + TC_LOG_ERROR("misc", "Attempt to assign charm AI to player %s who is charmed by non-creature %s.", GetGUID().ToString().c_str(), GetCharmerGUID().ToString().c_str()); + } } + if (!newAI) // otherwise, we default to the generic one + newAI = new SimpleCharmedPlayerAI(ToPlayer()); + i_AI = newAI; } else { - // we allow the charmed PlayerAI to clean up - i_AI->OnCharmed(false); - // then delete it - delete i_AI; + if (i_AI) + { + // we allow the charmed PlayerAI to clean up + i_AI->OnCharmed(false); + // then delete it + delete i_AI; + } + else + { + TC_LOG_ERROR("misc", "Attempt to remove charm AI from player %s who doesn't currently have charm AI.", GetGUID().ToString().c_str()); + } // and restore our previous PlayerAI (if we had one) i_AI = i_disabledAI; i_disabledAI = nullptr; From 2bbe00e5f40905db5e8672206fca26434f2ad502 Mon Sep 17 00:00:00 2001 From: tkrokli Date: Thu, 3 Mar 2016 21:40:39 +0100 Subject: [PATCH 66/93] Core/Scripts: npc_thrall_warchief hardcoded text 7 more text lines removed in the ongoing series: "Remove hardcoded text from core scripts". Core script for quest 6566, What The Wind Carries (part of the Horde Onyxia quest chain) - create new gossip_menu_option entries - link the options via the table gossip_menu - remove hardcoded text from the script --- ...16_03_03_NPC_THRALL_WARCHIEF_world_335.sql | 20 ++++++ .../scripts/Kalimdor/zone_orgrimmar.cpp | 64 +++++++++++-------- 2 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 sql/updates/world/2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql diff --git a/sql/updates/world/2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql b/sql/updates/world/2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql new file mode 100644 index 00000000000..db8ca3a9178 --- /dev/null +++ b/sql/updates/world/2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql @@ -0,0 +1,20 @@ +-- new gossip_menu_option entries for Quest 6566 What The Wind Carries +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (3664,3665,3666,3667,3668,3669,3670); +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`OptionBroadcastTextID`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`,`BoxBroadcastTextID`) VALUES +(3664,0,0,'Please share your wisdom with me, Warchief.',8308,1,1,3665,0,0,0,'',0), +(3665,0,0,'What discoveries?',8310,1,1,3666,0,0,0,'',0), +(3666,0,0,'Usurper?',8312,1,1,3667,0,0,0,'',0), +(3667,0,0,'With all due respect, Warchief - why not allow them to be destroyed? Does this not strengthen our position?',8314,1,1,3668,0,0,0,'',0), +(3668,0,0,'I... I did not think of it that way, Warchief.',8316,1,1,3669,0,0,0,'',0), +(3669,0,0,'I live only to serve, Warchief! My life is empty and meaningless without your guidance.',8318,1,1,3670,0,0,0,'',0), +(3670,0,0,'Of course, Warchief!',8320,1,1,3664,0,0,0,'',0); + +-- link gossip_menu_option menu_id to npc_text ID via gossip_menu (3664,4477 already exists) +DELETE FROM `gossip_menu` WHERE `entry` IN (3665,3666,3667,3668,3669,3670); +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES +(3665,5733), +(3666,5734), +(3667,5735), +(3668,5736), +(3669,5737), +(3670,5738); diff --git a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp index ac26aa1f811..99a5efc0a4d 100644 --- a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp +++ b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp @@ -143,20 +143,30 @@ public: enum ThrallWarchief { - QUEST_6566 = 6566, + GOSSIP_MENU_OPTION_ID_ALL = 0, - SPELL_CHAIN_LIGHTNING = 16033, - SPELL_SHOCK = 16034 + OPTION_PLEASE_SHARE_YOUR = 3664, + OPTION_WHAT_DISCOVERIES = 3665, + OPTION_USURPER = 3666, + OPTION_WITH_ALL_DUE_RESPECT = 3667, + OPTION_I_I_DID_NOT_THINK_OF = 3668, + OPTION_I_LIVE_ONLY_TO_SERVE = 3669, + OPTION_OF_COURSE_WARCHIEF = 3670, + + GOSSIP_MEMBERS_OF_THE_HORDE = 4477, + GOSSIP_THE_SHATTERED_HAND = 5733, + GOSSIP_IT_WOULD_APPEAR_AS = 5734, + GOSSIP_THE_BROOD_MOTHER = 5735, + GOSSIP_SO_MUCH_TO_LEARN = 5736, + GOSSIP_I_DO_NOT_FAULT_YOU = 5737, + GOSSIP_NOW_PAY_ATTENTION = 5738, + + QUEST_WHAT_THE_WIND_CARRIES = 6566, + + SPELL_CHAIN_LIGHTNING = 16033, + SPELL_SHOCK = 16034 }; -#define GOSSIP_HTW "Please share your wisdom with me, Warchief." -#define GOSSIP_STW1 "What discoveries?" -#define GOSSIP_STW2 "Usurper?" -#define GOSSIP_STW3 "With all due respect, Warchief - why not allow them to be destroyed? Does this not strengthen our position?" -#define GOSSIP_STW4 "I... I did not think of it that way, Warchief." -#define GOSSIP_STW5 "I live only to serve, Warchief! My life is empty and meaningless without your guidance." -#define GOSSIP_STW6 "Of course, Warchief!" - /// @todo verify abilities/timers class npc_thrall_warchief : public CreatureScript { @@ -169,32 +179,32 @@ public: switch (action) { case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_STW1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - player->SEND_GOSSIP_MENU(5733, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(OPTION_WHAT_DISCOVERIES, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); + player->SEND_GOSSIP_MENU(GOSSIP_THE_SHATTERED_HAND, creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+2: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_STW2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3); - player->SEND_GOSSIP_MENU(5734, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(OPTION_USURPER, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3); + player->SEND_GOSSIP_MENU(GOSSIP_IT_WOULD_APPEAR_AS, creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+3: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_STW3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4); - player->SEND_GOSSIP_MENU(5735, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(OPTION_WITH_ALL_DUE_RESPECT, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4); + player->SEND_GOSSIP_MENU(GOSSIP_THE_BROOD_MOTHER, creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+4: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_STW4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); - player->SEND_GOSSIP_MENU(5736, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(OPTION_I_I_DID_NOT_THINK_OF, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); + player->SEND_GOSSIP_MENU(GOSSIP_SO_MUCH_TO_LEARN, creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+5: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_STW5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); - player->SEND_GOSSIP_MENU(5737, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(OPTION_I_LIVE_ONLY_TO_SERVE, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); + player->SEND_GOSSIP_MENU(GOSSIP_I_DO_NOT_FAULT_YOU, creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+6: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_STW6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7); - player->SEND_GOSSIP_MENU(5738, creature->GetGUID()); + player->ADD_GOSSIP_ITEM_DB(OPTION_OF_COURSE_WARCHIEF, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7); + player->SEND_GOSSIP_MENU(GOSSIP_NOW_PAY_ATTENTION, creature->GetGUID()); break; case GOSSIP_ACTION_INFO_DEF+7: player->CLOSE_GOSSIP_MENU(); - player->AreaExploredOrEventHappens(QUEST_6566); + player->AreaExploredOrEventHappens(QUEST_WHAT_THE_WIND_CARRIES); break; } return true; @@ -205,10 +215,10 @@ public: if (creature->IsQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->GetQuestStatus(QUEST_6566) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HTW, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + if (player->GetQuestStatus(QUEST_WHAT_THE_WIND_CARRIES) == QUEST_STATUS_INCOMPLETE) + player->ADD_GOSSIP_ITEM_DB(OPTION_PLEASE_SHARE_YOUR, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); + player->SEND_GOSSIP_MENU(GOSSIP_MEMBERS_OF_THE_HORDE, creature->GetGUID()); return true; } From 1cb718d9e77d58a08f0f3f3fbcea863ff837f6d3 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 3 Mar 2016 21:02:51 +0000 Subject: [PATCH 67/93] DB/Quest: Killing Two Scourge with One Skeleton * script turn in event with ghostwing grabbing Olakin Sainrith * phasing at Blackwatch will also kill Table `vehicle_template_accessory`: creature template entry 31432 has no data in npc_spellclick_spells from previous commit --- sql/updates/world/2016_03_03_01_world.sql | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 sql/updates/world/2016_03_03_01_world.sql diff --git a/sql/updates/world/2016_03_03_01_world.sql b/sql/updates/world/2016_03_03_01_world.sql new file mode 100644 index 00000000000..a242d26efe1 --- /dev/null +++ b/sql/updates/world/2016_03_03_01_world.sql @@ -0,0 +1,57 @@ +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=28330; + +-- Ghostwing needs spell 59091 in relation to Crusader Olakin Sainrith in phase 64 +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`= 31432 AND `spell_id`= 59091; + +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(31432, 59091, 1, 0); + +DELETE FROM `vehicle_template_accessory` WHERE `entry`=31432 AND `seat_id`=0; + +DELETE FROM `creature` WHERE `guid`=145119; + +DELETE FROM `spell_area` WHERE `spell`=58139 AND `area`IN(4588); +INSERT INTO `spell_area` (`spell`, `area`, `quest_start`, `quest_end`, `aura_spell`, `racemask`, `gender`, `autocast`, `quest_start_status`, `quest_end_status`) VALUES +(58139, 4588, 13144, 0, 0, 0, 2, 1, 64, 11); -- Blackwatch after Killing two scourge with one skeleton +UPDATE `creature` SET `phaseMask`=65 WHERE `guid`=123657; + +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`IN(30631,31432); + +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(30631,31432) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN(31428) AND `source_type`=0 AND `id`>4; + +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 +(30631, 0, 0, 1, 20, 0, 100, 0, 13144, 0, 0, 0, 12, 31432, 1, 90000, 0, 0, 0, 8, 0, 0, 0, 6588.43, 3278.2, 818.203, 5.044, 'Darkrider Arly - On Quest Reward - Summon Ghostwing'), +(30631, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 31428, 1, 90000, 0, 0, 0, 8, 0, 0, 0, 6648.77, 3217.7, 810.501, 1.55334, 'Darkrider Arly - On Quest Reward - Summon Crusader Olakin Sainrith'), +(31428, 0, 5, 6, 54, 0, 100, 0, 0, 0, 0, 0, 71, 0, 0, 40598, 42543, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crusader Olakin Sainrith - On Just Summoned - Equip Items'), +(31428, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 44, 64, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crusader Olakin Sainrith - On Just Summoned - Set Ingame Phase 64'), +(31428, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crusader Olakin Sainrith - On Just Summoned - Dismount'), +(31428, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Crusader Olakin Sainrith - On Just Summoned - Say Line 1'), +(31428, 0, 9, 0, 38, 0, 100, 0, 2, 2, 0, 0, 11, 59091, 2, 0, 0, 0, 0, 19, 31432, 0, 0, 0, 0, 0, 0, 'Crusader Olakin Sainrith - On Data Set - Cast Ride Ghostwing'), +(31432, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 44, 64, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Just Summoned - Set Ingame Phase 64'), +(31432, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Just Summoned - Start WP'), +(31432, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 53, 1, 31432, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Just Summoned - Set Active'), +(31432, 0, 3, 4, 40, 0, 100, 0, 1, 31432, 0, 0, 54, 3000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Reached WP1 - Pause WP'), +(31432, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 31428, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Reached WP1 - Set Data on Crusader Olakin Sainrith'), +(31432, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Reached WP1 - Say Line 0'), +(31432, 0, 6, 7, 40, 0, 100, 0, 2, 31432, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 30631, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Reached WP2 - Say Line 0 on Darkrider Arly'), +(31432, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 31432, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Reached WP2 - Despawn Crusader Olakin Sainrith'), +(31432, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Ghostwing - On Reached WP2 - Despawn '); + +DELETE FROM `creature_text` WHERE `entry` IN(30631,31432); +DELETE FROM `creature_text` WHERE `entry` IN(31428) AND `groupid`=1; + + +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `comment`) VALUES +(30631, 0, 0, 'Damn it, Olakin, get your arse back here! There''s work to be done!', 12, 0, 100, 5, 0, 0, 32195, 'Darkrider Arly to Crusader Olakin Sainrith'), +(31428, 1, 0, 'Look! What''s a frostwyrm doing here? It''s coming straight for us.', 12, 0, 100, 25, 0, 0, 32173, 'Crusader Olakin Sainrith to Player'), +(31432, 0, 0, 'Destroy our raw materials, will you? Well, the master has a special plan in mind for you... ', 12, 0, 100, 460, 0, 0, 32171, 'Ghostwing to Player'); + +DELETE FROM `waypoints` WHERE `entry`=31432; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(31432, 1, 6644.43, 3222.912, 823.0705, 'Ghostwing'), +(31432, 2, 6690.65, 3177.279, 860.5705, 'Ghostwing'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=59091; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 59091, 0, 0, 31, 0, 3, 31432, 0, 0, 0, 0, '', 'Ride Ghostwing'); From 768a5cf354b447e19e7e5b12c78dc4920d8b1caa Mon Sep 17 00:00:00 2001 From: durotar Date: Sat, 23 Jan 2016 14:23:32 -0500 Subject: [PATCH 68/93] Scripts/SunkenTemple: Quest 3447 Secret of the Circle Thanks to Tkrokli, Kilyana and Nayd Closes #808 Signed-off-by: MitchesD Closes https://github.com/TrinityCore/TrinityCore/pull/16367 --- sql/updates/world/2016_03_04_00_world.sql | 32 +++++++++++++++ .../SunkenTemple/instance_sunken_temple.cpp | 39 +++++++++++-------- 2 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 sql/updates/world/2016_03_04_00_world.sql diff --git a/sql/updates/world/2016_03_04_00_world.sql b/sql/updates/world/2016_03_04_00_world.sql new file mode 100644 index 00000000000..f338d6d0043 --- /dev/null +++ b/sql/updates/world/2016_03_04_00_world.sql @@ -0,0 +1,32 @@ +/* Sunken Temple - Support for quest 3447: Secret of the Circle */ +SET @GO_GUID := 5521; +SET @ALTAR := 148836; +SET @LIGHT := 148883; +SET @ATAL_ALARION := 8580; +SET @ATALAI_IDOL := 148838; + +-- Altar of Hakkar +UPDATE `gossip_menu_option` SET `action_menu_id`=1302 WHERE `menu_id`=1288; +-- SAI: Add Pattern of lights +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ALTAR; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ALTAR AND `source_type`=1 AND `id`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ALTAR*100 AND `source_type`=9 AND `id` BETWEEN 0 AND 5; +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 +(@ALTAR,1,0,0,62,0,100,0,1288,0,0,0,80,@ALTAR*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'On gossip option select run script'), +(@ALTAR*100,9,0,0,1,0,100,0,0,0,0,0,50,@LIGHT,3,0,0,0,0,8,0,0,0,-515.553,95.25821,-148.7401,-1.500983, 'Script - Summon Temp GO'), +(@ALTAR*100,9,1,0,1,0,100,0,3000,3000,0,0,50,@LIGHT,3,0,0,0,0,8,0,0,0,-419.8487,94.48368,-148.7401,-1.500983, 'Script - Summon Temp GO'), +(@ALTAR*100,9,2,0,1,0,100,0,3000,3000,0,0,50,@LIGHT,3,0,0,0,0,8,0,0,0,-491.4003,135.9698,-148.7401,-1.500983, 'Script - Summon Temp GO'), +(@ALTAR*100,9,3,0,1,0,100,0,3000,3000,0,0,50,@LIGHT,3,0,0,0,0,8,0,0,0,-491.4909,53.48179,-148.7401,-1.500983, 'Script - Summon Temp GO'), +(@ALTAR*100,9,4,0,1,0,100,0,3000,3000,0,0,50,@LIGHT,3,0,0,0,0,8,0,0,0,-443.8549,136.1007,-148.7401,-1.500983, 'Script - Summon Temp GO'), +(@ALTAR*100,9,5,0,1,0,100,0,3000,3000,0,0,50,@LIGHT,3,0,0,0,0,8,0,0,0,-443.4171,53.83124,-148.7401,-1.500983, 'Script - Summon Temp GO'); + +-- Mini-boss Atal'alarion and GameObject Idol of Hakkar +DELETE FROM `creature` WHERE `guid`=34521 AND `id`=@ATAL_ALARION; -- spawned by script + +DELETE FROM `gameobject` WHERE `guid`=@GO_GUID AND `id`=@ATALAI_IDOL; -- spawned but hidden until creature die +INSERT INTO `gameobject` (`guid`,`id`,`map`,`zoneid`,`areaid`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`,`VerifiedBuild`) VALUES +(@GO_GUID,@ATALAI_IDOL,109,0,0,3,1,-476.2693,94.41199,-189.7297,1.588249,0,0,0,1,-1,255,1,12340); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ATAL_ALARION AND `source_type`=0 AND `id`=7; +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 +(@ATAL_ALARION,0,7,0,6,0,100,0,0,0,0,0,70,7200,0,0,0,0,0,14,@GO_GUID,@ATALAI_IDOL,0,0,0,0,0, 'Atal''alarion - On Just Died - Respawn Idol of Hakkar'); diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index 118d28e2142..612b59f7312 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -35,15 +35,24 @@ enum Gameobject GO_ATALAI_STATUE4 = 148833, GO_ATALAI_STATUE5 = 148834, GO_ATALAI_STATUE6 = 148835, - GO_ATALAI_IDOL = 148836, GO_ATALAI_LIGHT1 = 148883, GO_ATALAI_LIGHT2 = 148937 - }; enum CreatureIds { - NPC_MALFURION_STORMRAGE = 15362 + NPC_ATALALARION = 8580 +}; + +Position const StatuePositions[] +{ + { -515.553f, 95.25821f, -173.707f, 0.0f }, + { -419.8487f, 94.48368f, -173.707f, 0.0f }, + { -491.4003f, 135.9698f, -173.707f, 0.0f }, + { -491.4909f, 53.48179f, -173.707f, 0.0f }, + { -443.8549f, 136.1007f, -173.707f, 0.0f }, + { -443.4171f, 53.83124f, -173.707f, 0.0f }, + { -466.5134f, 95.19822f, -189.6463f, 0.03490658f } }; class instance_sunken_temple : public InstanceMapScript @@ -77,7 +86,6 @@ public: ObjectGuid GOAtalaiStatue4; ObjectGuid GOAtalaiStatue5; ObjectGuid GOAtalaiStatue6; - ObjectGuid GOAtalaiIdol; uint32 State; @@ -98,7 +106,6 @@ public: case GO_ATALAI_STATUE4: GOAtalaiStatue4 = go->GetGUID(); break; case GO_ATALAI_STATUE5: GOAtalaiStatue5 = go->GetGUID(); break; case GO_ATALAI_STATUE6: GOAtalaiStatue6 = go->GetGUID(); break; - case GO_ATALAI_IDOL: GOAtalaiIdol = go->GetGUID(); break; } } @@ -155,7 +162,10 @@ public: if (s1 && s2 && s3 && s4 && s5 && !s6) { if (GameObject* pAtalaiStatue6 = instance->GetGameObject(GOAtalaiStatue6)) + { UseStatue(pAtalaiStatue6); + UseLastStatue(pAtalaiStatue6); + } s6 = true; State = 0; } @@ -169,18 +179,13 @@ public: go->SetUInt32Value(GAMEOBJECT_FLAGS, 4); } - /* - void UseLastStatue(GameObject* go) - { - AtalaiStatue1->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue1->GetPositionX(), AtalaiStatue1->GetPositionY(), AtalaiStatue1->GetPositionZ(), 0, 0, 0, 0, 0, 100); - AtalaiStatue2->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue2->GetPositionX(), AtalaiStatue2->GetPositionY(), AtalaiStatue2->GetPositionZ(), 0, 0, 0, 0, 0, 100); - AtalaiStatue3->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue3->GetPositionX(), AtalaiStatue3->GetPositionY(), AtalaiStatue3->GetPositionZ(), 0, 0, 0, 0, 0, 100); - AtalaiStatue4->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue4->GetPositionX(), AtalaiStatue4->GetPositionY(), AtalaiStatue4->GetPositionZ(), 0, 0, 0, 0, 0, 100); - AtalaiStatue5->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue5->GetPositionX(), AtalaiStatue5->GetPositionY(), AtalaiStatue5->GetPositionZ(), 0, 0, 0, 0, 0, 100); - AtalaiStatue6->SummonGameObject(GO_ATALAI_LIGHT2, AtalaiStatue6->GetPositionX(), AtalaiStatue6->GetPositionY(), AtalaiStatue6->GetPositionZ(), 0, 0, 0, 0, 0, 100); - go->SummonGameObject(148838, -488.997, 96.61, -189.019, -1.52, 0, 0, 0, 0, 100); - } - */ + void UseLastStatue(GameObject* go) + { + for (uint8 i = 0; i < 6; ++i) + go->SummonGameObject(GO_ATALAI_LIGHT2, StatuePositions[i].GetPositionX(), StatuePositions[i].GetPositionY(), StatuePositions[i].GetPositionZ(), StatuePositions[i].GetOrientation(), 0, 0, 0, 0, 0); + + go->SummonCreature(NPC_ATALALARION, StatuePositions[6].GetPosition(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 7200); + } void SetData(uint32 type, uint32 data) override { From 6cdd29611bcfe837a5d9b4664d9a7013e99a2094 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 4 Mar 2016 06:10:40 +0100 Subject: [PATCH 69/93] DB/Misc: Fix startup error Closes #16721 --- sql/updates/world/016_03_04_01_world.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/016_03_04_01_world.sql diff --git a/sql/updates/world/016_03_04_01_world.sql b/sql/updates/world/016_03_04_01_world.sql new file mode 100644 index 00000000000..b02c2eb4e79 --- /dev/null +++ b/sql/updates/world/016_03_04_01_world.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject` SET `spawnMask`=1 WHERE `guid`=5521; From 361e5640ae28a3c1360b64132a644165d34ede84 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 4 Mar 2016 08:11:44 +0100 Subject: [PATCH 70/93] Rename 016_03_04_01_world.sql to 2016_03_04_01_world.sql --- .../world/{016_03_04_01_world.sql => 2016_03_04_01_world.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{016_03_04_01_world.sql => 2016_03_04_01_world.sql} (100%) diff --git a/sql/updates/world/016_03_04_01_world.sql b/sql/updates/world/2016_03_04_01_world.sql similarity index 100% rename from sql/updates/world/016_03_04_01_world.sql rename to sql/updates/world/2016_03_04_01_world.sql From a1b18a13fae069fbd9ef37320f7a59b107cbf4e4 Mon Sep 17 00:00:00 2001 From: MitchesD Date: Fri, 4 Mar 2016 10:50:31 +0100 Subject: [PATCH 71/93] Rename 2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql to 2016_03_04_02_world_335.sql --- ..._THRALL_WARCHIEF_world_335.sql => 2016_03_04_02_world_335.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql => 2016_03_04_02_world_335.sql} (100%) diff --git a/sql/updates/world/2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql b/sql/updates/world/2016_03_04_02_world_335.sql similarity index 100% rename from sql/updates/world/2016_03_03_NPC_THRALL_WARCHIEF_world_335.sql rename to sql/updates/world/2016_03_04_02_world_335.sql From d55d32fa0f7a7d86d8eae2649f7090377c777d2e Mon Sep 17 00:00:00 2001 From: Aokromes Date: Fri, 4 Mar 2016 14:58:09 +0100 Subject: [PATCH 72/93] Misc/Extractor: Add batch file for extractors You must copy it to your wow directory with the tools and run it. Linux version is welcomed. --- contrib/extractor.bat | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 contrib/extractor.bat diff --git a/contrib/extractor.bat b/contrib/extractor.bat new file mode 100644 index 00000000000..eb7c99e5c0b --- /dev/null +++ b/contrib/extractor.bat @@ -0,0 +1,51 @@ +@ECHO OFF +CLS +:MENU +ECHO. +ECHO ............................................... +ECHO Trinitycore dbc/db2, maps, vmaps, mmaps extractor +ECHO ............................................... +ECHO PRESS 1, 2, 3 OR 4 to select your task, or 5 to EXIT. +ECHO ............................................... +ECHO. +ECHO 1 - Extract dbc/db2 and maps +ECHO 2 - Extract vmaps (needs maps to be extracted before you run this) +ECHO 3 - Extract mmaps (needs vmaps to be extracted before you run this, may take hours) +ECHO 4 - Extract all (may take hours) +ECHO 5 - EXIT +ECHO. +SET /P M=Type 1, 2, 3, 4 or 5 then press ENTER: +IF %M%==1 GOTO MAPS +IF %M%==2 GOTO VMAPS +IF %M%==3 GOTO MMAPS +IF %M%==4 GOTO ALL +IF %M%==5 GOTO EOF +:MAPS +start mapextractor.exe +pause +GOTO MENU +:VMAPS +start vmap4extractor.exe +md vmaps +start vmap4assembler.exe Buildings vmaps +pause +GOTO MENU +:MMAPS +md mmaps +start mmaps_generator.exe +pause +GOTO MENU +:ALL +start mapextractor.exe +ECHO wait before mapextractor.exe closes before continue +pause +start vmap4extractor.exe +md vmaps +start vmap4assembler.exe Buildings vmaps +rmdir Buildings /s /q +ECHO wait before vmap4assembler.exe closes before continue +pause +md mmaps +start mmaps_generator.exe +pause +GOTO MENU From f46a0e7eb3ba362b5ae6f84d569b84d30173818c Mon Sep 17 00:00:00 2001 From: treeston Date: Fri, 4 Mar 2016 17:52:07 +0100 Subject: [PATCH 73/93] Instance/SunkenTemple: Some cleanup. --- .../SunkenTemple/instance_sunken_temple.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index 612b59f7312..6a6a0b0994b 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -44,15 +44,16 @@ enum CreatureIds NPC_ATALALARION = 8580 }; -Position const StatuePositions[] +static Position const atalalarianPos = { -466.5134f, 95.19822f, -189.6463f, 0.03490658f }; +static uint8 const nStatues = 6; +static Position const statuePositions[nStatues] { { -515.553f, 95.25821f, -173.707f, 0.0f }, { -419.8487f, 94.48368f, -173.707f, 0.0f }, { -491.4003f, 135.9698f, -173.707f, 0.0f }, { -491.4909f, 53.48179f, -173.707f, 0.0f }, { -443.8549f, 136.1007f, -173.707f, 0.0f }, - { -443.4171f, 53.83124f, -173.707f, 0.0f }, - { -466.5134f, 95.19822f, -189.6463f, 0.03490658f } + { -443.4171f, 53.83124f, -173.707f, 0.0f } }; class instance_sunken_temple : public InstanceMapScript @@ -181,10 +182,10 @@ public: void UseLastStatue(GameObject* go) { - for (uint8 i = 0; i < 6; ++i) - go->SummonGameObject(GO_ATALAI_LIGHT2, StatuePositions[i].GetPositionX(), StatuePositions[i].GetPositionY(), StatuePositions[i].GetPositionZ(), StatuePositions[i].GetOrientation(), 0, 0, 0, 0, 0); + for (uint8 i = 0; i < nStatues; ++i) + go->SummonGameObject(GO_ATALAI_LIGHT2, statuePositions[i].GetPositionX(), statuePositions[i].GetPositionY(), statuePositions[i].GetPositionZ(), statuePositions[i].GetOrientation(), 0, 0, 0, 0, 0); - go->SummonCreature(NPC_ATALALARION, StatuePositions[6].GetPosition(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 7200); + go->SummonCreature(NPC_ATALALARION, atalalarianPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 7200); } void SetData(uint32 type, uint32 data) override From c4e4ee3ae10b1276b214c8b1da1281aba23ae57a Mon Sep 17 00:00:00 2001 From: sirikfoll Date: Fri, 4 Mar 2016 20:45:28 +0100 Subject: [PATCH 74/93] Core/Scripts: Fixed Yogg-Saron Portals Closes #16390 Closes #16708 --- sql/updates/world/2016_03_04_03_world.sql | 4 ++++ .../Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp | 15 +++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 sql/updates/world/2016_03_04_03_world.sql diff --git a/sql/updates/world/2016_03_04_03_world.sql b/sql/updates/world/2016_03_04_03_world.sql new file mode 100644 index 00000000000..4d148adde55 --- /dev/null +++ b/sql/updates/world/2016_03_04_03_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceEntry` IN (63989,63997,63998); +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=34072; +INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES +(34072, 51347, 3, 0); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 7da67171b5c..5dd6d2508bd 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -230,6 +230,9 @@ enum Spells // Descend Into Madness SPELL_TELEPORT_PORTAL_VISUAL = 64416, + SPELL_TELEPORT_TO_STORMWIND_ILLUSION = 63989, + SPELL_TELEPORT_TO_CHAMBER_ILLUSION = 63997, + SPELL_TELEPORT_TO_ICECROWN_ILLUSION = 63998, // Illusions SPELL_GRIM_REPRISAL = 63305, @@ -395,6 +398,14 @@ enum MiscData { ACHIEV_TIMED_START_EVENT = 21001, SOUND_LUNATIC_GAZE = 15757, + MAX_ILLUSION_ROOMS = 3 +}; + +uint32 const IllusionSpells[MAX_ILLUSION_ROOMS] +{ + SPELL_TELEPORT_TO_CHAMBER_ILLUSION, + SPELL_TELEPORT_TO_ICECROWN_ILLUSION, + SPELL_TELEPORT_TO_STORMWIND_ILLUSION }; class StartAttackEvent : public BasicEvent @@ -1419,7 +1430,11 @@ class npc_descend_into_madness : public CreatureScript { if (!result) return; + clicker->RemoveAurasDueToSpell(SPELL_BRAIN_LINK); + uint32 illusion = _instance->GetData(DATA_ILLUSION); + if (illusion < MAX_ILLUSION_ROOMS) + DoCast(clicker, IllusionSpells[illusion], true); me->DespawnOrUnsummon(); } From 431da2ffc9844f7cedaa481b7765ff1cf09a4eb6 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sat, 5 Mar 2016 01:26:26 +0000 Subject: [PATCH 75/93] DB/Quest: Drag and Drop Updates my previous script from before I actually sniffed this The Aldur'thar Sentry will now actually grab the Dark Subjugator and drop of edge, --- sql/updates/world/2016_03_05_00_world.sql | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sql/updates/world/2016_03_05_00_world.sql diff --git a/sql/updates/world/2016_03_05_00_world.sql b/sql/updates/world/2016_03_05_00_world.sql new file mode 100644 index 00000000000..8dde060140d --- /dev/null +++ b/sql/updates/world/2016_03_05_00_world.sql @@ -0,0 +1,34 @@ +UPDATE `creature_template` SET `AIName`='SmartAI',`InhabitType`=4,`VehicleId`=113 WHERE `entry`=32292; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(32236,32292) AND `source_type`=0 ; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(3229200) 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 +(32292, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On Just Summoned - Store target'), +(32292, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 19, 32236, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On Just Summoned - Move to Target'), +(32292, 0, 2, 0, 1, 0, 100, 1, 1500, 1500, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 32236, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - OOC - Set Data on target'), +(32292, 0, 3, 0, 8, 0, 100, 1, 46598, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 19, 23837, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On Spellhit - Move to Target'), +(32292, 0, 4, 0, 75, 0, 100, 1, 0, 23837, 2, 15000, 80, 3229200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On Creature in Range - Run Script'), +(32236, 0, 0, 0, 0, 0, 100, 0, 0, 0, 3000, 5000, 11, 32000, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - IC - Cast Mind Seer'), +(32236, 0, 1, 0, 0, 0, 100, 0, 0, 3000, 5000, 6000, 11, 32026, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - IC - Cast Pain Spike'), +(32236, 0, 2, 3, 8, 0, 100, 0, 5513, 0, 60000, 60000, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Spellhit Orb of Illusion - Store Targetlist'), +(32236, 0, 3, 4,61, 0, 100, 0, 0, 0, 0, 0, 11, 4329, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Spellhit Orb of Illusion - Cast Drag and Drop: Dark Subjugator Transform'), +(32236, 0, 4, 5,61, 0, 100, 0, 0, 0, 0, 0, 4, 15131, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - Linked with Previous Event - Play Sound'), +(32236, 0, 5, 6,61, 0, 100, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - Linked with Previous Event - Turn random movement off'), +(32236, 0, 6, 7,61, 0, 100, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - Linked with Previous Event - Set immune'), +(32236, 0, 7, 8,61, 0, 100, 0, 0, 0, 0, 0, 11, 4328, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - Linked with Previous Event - Cast Drag and Drop: Summon Aldur''thar Sentry'), +(32236, 0, 8, 9,61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 3000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Spellhit - Say'), +(32236, 0, 9, 10,61, 0, 100, 0, 0, 0, 0, 0, 33, 32229, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - Linked with Previous Event - Kill Credit'), +(32236, 0, 10, 0,61, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - Linked with Previous Event - Evade'), +(32236, 0, 11, 0,8, 0, 100, 0, 46598, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Spellhit - Say'), +(32236, 0, 12, 13,38, 0, 100, 0, 2, 2, 0, 0, 4, 15128, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Data Set - Play Sound'), +(32236, 0, 13, 0,61, 0, 100, 0, 2, 2, 0, 0, 41, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Data Set - Despawn After 5 seconds'), +(32236, 0, 14, 0,38, 0, 100, 0, 1, 1, 0, 0, 11, 46598, 0, 0, 0, 0, 0, 19, 32292, 0, 0, 0, 0, 0, 0, 'Dark Subjugator - On Data Set - Cast Ride Vehicle Hardcoded'), +(3229200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 46, 20, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - Script - Move forward'), +(3229200, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 11, 50630, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On reached WP2 - Cast Eject All Passengers'), +(3229200, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 32236, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On reached WP2 - Set Data'), +(3229200, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Aldur''thar Sentry - On reached WP2 - Despawn After 5 seconds'); + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`= 32292; +INSERT INTO `npc_spellclick_spells` (`npc_entry`,`spell_id`,`cast_flags`,`user_type`) VALUES +(32292, 46598, 1, 0); From 49de12b1cfaca7f089a1ba2660de4a8644a72e2c Mon Sep 17 00:00:00 2001 From: treeston Date: Sat, 5 Mar 2016 13:29:49 +0100 Subject: [PATCH 76/93] Unit/PlayerAI: Yeah, we allow charmer to be null now, should probably check for that. Fixes and closes #16728. --- src/server/game/AI/PlayerAI/PlayerAI.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index bafa1a0ecf7..680ecfb9414 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -167,6 +167,8 @@ Unit* SimpleCharmedPlayerAI::SelectAttackTarget() const void SimpleCharmedPlayerAI::UpdateAI(const uint32 /*diff*/) { Creature* charmer = me->GetCharmer() ? me->GetCharmer()->ToCreature() : nullptr; + if (!charmer) + return; //kill self if charm aura has infinite duration if (charmer->IsInEvadeMode()) From e73d5a7bf4d7c0b5eded5d7f7a822cf009200ad7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 5 Mar 2016 20:14:58 +0100 Subject: [PATCH 77/93] Core/Commands: Fixed incorrect use of GetGUID instead of GetSpawnId in waypoint commands Updates #16732 --- src/server/scripts/Commands/cs_wp.cpp | 101 +++++++++++--------------- 1 file changed, 41 insertions(+), 60 deletions(-) diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index ef61c231104..59036b29186 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -565,25 +565,21 @@ public: Creature* target = handler->getSelectedCreature(); PreparedStatement* stmt = NULL; + // User did select a visual waypoint? if (!target || target->GetEntry() != VISUAL_WAYPOINT) { handler->SendSysMessage("|cffff33ffERROR: You must select a waypoint.|r"); return false; } - // The visual waypoint - wpGuid = target->GetGUID().GetCounter(); - - // User did select a visual waypoint? - // Check the creature stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_BY_WPGUID); - stmt->setUInt32(0, wpGuid); + stmt->setUInt32(0, target->GetSpawnId()); PreparedQueryResult result = WorldDatabase.Query(stmt); if (!result) { - handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetGUID().GetCounter()); + handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDSEARCH, target->GetSpawnId()); // Select waypoint number from database // Since we compare float values, we have to deal with // some difficulties. @@ -603,7 +599,7 @@ public: if (!queryResult) { - handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM, wpGuid); + handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM, target->GetSpawnId()); return true; } } @@ -631,13 +627,8 @@ public: { handler->PSendSysMessage("|cff00ff00DEBUG: wp modify del, PathID: |r|cff00ffff%u|r", pathid); - if (wpGuid != 0) - if (Creature* wpCreature = handler->GetSession()->GetPlayer()->GetMap()->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpGuid))) - { - wpCreature->CombatStop(); - wpCreature->DeleteFromDB(); - wpCreature->AddObjectToRemoveList(); - } + target->DeleteFromDB(); + target->AddObjectToRemoveList(); stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_WAYPOINT_DATA); stmt->setUInt32(0, pathid); @@ -659,51 +650,40 @@ public: Player* chr = handler->GetSession()->GetPlayer(); Map* map = chr->GetMap(); + // What to do: + // Move the visual spawnpoint + // Respawn the owner of the waypoints + target->DeleteFromDB(); + target->AddObjectToRemoveList(); + + // re-create + Creature* wpCreature = new Creature(); + if (!wpCreature->Create(map->GenerateLowGuid(), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) { - // What to do: - // Move the visual spawnpoint - // Respawn the owner of the waypoints - if (wpGuid != 0) - { - if (Creature* wpCreature = map->GetCreature(ObjectGuid(HighGuid::Unit, VISUAL_WAYPOINT, wpGuid))) - { - wpCreature->CombatStop(); - wpCreature->DeleteFromDB(); - wpCreature->AddObjectToRemoveList(); - } - // re-create - Creature* wpCreature2 = new Creature(); - if (!wpCreature2->Create(map->GenerateLowGuid(), map, chr->GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) - { - handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); - delete wpCreature2; - wpCreature2 = NULL; - return false; - } - - wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); - // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); - /// @todo Should we first use "Create" then use "LoadFromDB"? - if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetSpawnId(), map)) - { - handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); - delete wpCreature2; - wpCreature2 = NULL; - return false; - } - //sMapMgr->GetMap(npcCreature->GetMapId())->Add(wpCreature2); - } - - stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POSITION); - stmt->setFloat(0, chr->GetPositionX()); - stmt->setFloat(1, chr->GetPositionY()); - stmt->setFloat(2, chr->GetPositionZ()); - stmt->setUInt32(3, pathid); - stmt->setUInt32(4, point); - WorldDatabase.Execute(stmt); - - handler->PSendSysMessage(LANG_WAYPOINT_CHANGED); + handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); + delete wpCreature; + return false; } + + wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); + // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); + /// @todo Should we first use "Create" then use "LoadFromDB"? + if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map)) + { + handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); + delete wpCreature; + return false; + } + + stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_POSITION); + stmt->setFloat(0, chr->GetPositionX()); + stmt->setFloat(1, chr->GetPositionY()); + stmt->setFloat(2, chr->GetPositionZ()); + stmt->setUInt32(3, pathid); + stmt->setUInt32(4, point); + WorldDatabase.Execute(stmt); + + handler->PSendSysMessage(LANG_WAYPOINT_CHANGED); return true; } // move @@ -897,14 +877,15 @@ public: return false; } + wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); + // Set "wpguid" column to the visual waypoint stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID); - stmt->setInt32(0, int32(wpCreature->GetGUID().GetCounter())); + stmt->setInt32(0, int32(wpCreature->GetSpawnId())); stmt->setUInt32(1, pathid); stmt->setUInt32(2, point); WorldDatabase.Execute(stmt); - wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMaskForSpawn()); // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); if (!wpCreature->LoadCreatureFromDB(wpCreature->GetSpawnId(), map)) { From 3d0b065135d36c6496c911c7c7fa355bb6f74a58 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 5 Mar 2016 20:16:42 +0100 Subject: [PATCH 78/93] Core/Commands: Fixed a crash in .wp mod by @Magnifikator Closes #16732 --- src/server/scripts/Commands/cs_wp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 59036b29186..c5dc2c290c6 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -595,9 +595,9 @@ public: stmt->setString(3, maxDiff); stmt->setFloat(4, target->GetPositionZ()); stmt->setString(5, maxDiff); - PreparedQueryResult queryResult = WorldDatabase.Query(stmt); + result = WorldDatabase.Query(stmt); - if (!queryResult) + if (!result) { handler->PSendSysMessage(LANG_WAYPOINT_NOTFOUNDDBPROBLEM, target->GetSpawnId()); return true; From 7fe5a77f5eb01e55db9b242e444dcb69c0c23189 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 5 Mar 2016 20:17:37 +0100 Subject: [PATCH 79/93] Warning fix --- src/server/scripts/Commands/cs_wp.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index c5dc2c290c6..424f94f7385 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -561,7 +561,6 @@ public: // -> variable lowguid is filled with the GUID of the NPC uint32 pathid = 0; uint32 point = 0; - uint32 wpGuid = 0; Creature* target = handler->getSelectedCreature(); PreparedStatement* stmt = NULL; From 510bb30b2ca44f082354504b7092eee67a994ecf Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 6 Mar 2016 16:11:55 +0100 Subject: [PATCH 80/93] Scripts/Misc: Fix issues reported by static analysis --- .../scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp | 1 + .../Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp | 2 +- .../Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 2 +- src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index b827fdf7e8b..7599cf38f08 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -59,6 +59,7 @@ class instance_deadmines : public InstanceMapScript State = CANNON_NOT_USED; CannonBlast_Timer = 0; PiratesDelay_Timer = 0; + SmiteAlarmDelay_Timer = 0; } ObjectGuid FactoryDoorGUID; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index d3cf6495aa7..c6b250487d3 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -421,7 +421,7 @@ class boss_lady_deathwhisper : public CreatureScript void UpdateAI(uint32 diff) override { - if ((!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))) + if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO)) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 2db9d206a00..be475a7e145 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -562,7 +562,7 @@ class boss_professor_putricide : public CreatureScript void UpdateAI(uint32 diff) override { - if ((!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) && !UpdateVictim())) + if (!(events.IsInPhase(PHASE_ROTFACE) || events.IsInPhase(PHASE_FESTERGUT)) && !UpdateVictim()) return; events.Update(diff); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 102d567e810..56010c09897 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -289,6 +289,7 @@ class boss_alar : public CreatureScript me->SetPosition(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f); me->StopMoving(); WaitEvent = WE_LAND; + return; } else { From 2ea31027e5d5155fa88839aac38b175ec402e4ac Mon Sep 17 00:00:00 2001 From: DDuarte Date: Sun, 28 Feb 2016 03:48:28 +0000 Subject: [PATCH 81/93] Core: Backport 6.x realm changes Make acessible all the info about current realm (e.g name) anywhere, not only realm id Reduce the number of differences between the two branches Original changes by Shauren Partial port of bacc90b6baa34e6a194c93e5a7860d4041f08af7 and 63def8aa3291d0a6e5f83b289ad12c4c8a3cebd9 --- src/server/authserver/CMakeLists.txt | 1 + src/server/authserver/Main.cpp | 2 +- src/server/authserver/Realms/RealmList.cpp | 63 ++++++++------ src/server/authserver/Realms/RealmList.h | 52 +++--------- src/server/authserver/Server/AuthSession.cpp | 26 +++--- src/server/game/Accounts/AccountMgr.cpp | 2 +- .../game/AuctionHouse/AuctionHouseMgr.cpp | 2 +- src/server/game/CMakeLists.txt | 1 + src/server/game/Chat/Chat.cpp | 2 +- src/server/game/Handlers/CharacterHandler.cpp | 4 +- src/server/game/Handlers/MiscHandler.cpp | 2 +- src/server/game/Server/WorldSession.cpp | 10 +-- src/server/game/Server/WorldSocket.cpp | 4 +- src/server/game/World/World.cpp | 12 +-- src/server/game/World/World.h | 15 +--- src/server/scripts/Commands/cs_gm.cpp | 2 +- src/server/scripts/Commands/cs_misc.cpp | 2 +- src/server/scripts/Commands/cs_rbac.cpp | 2 +- src/server/scripts/Commands/cs_ticket.cpp | 6 +- src/server/shared/CMakeLists.txt | 3 + src/server/shared/Realm/Realm.cpp | 18 ++++ src/server/shared/Realm/Realm.h | 85 +++++++++++++++++++ src/server/worldserver/Main.cpp | 77 +++++++++++++++-- 23 files changed, 266 insertions(+), 127 deletions(-) create mode 100644 src/server/shared/Realm/Realm.cpp create mode 100644 src/server/shared/Realm/Realm.h diff --git a/src/server/authserver/CMakeLists.txt b/src/server/authserver/CMakeLists.txt index d87847d6740..34e7ed8a43f 100644 --- a/src/server/authserver/CMakeLists.txt +++ b/src/server/authserver/CMakeLists.txt @@ -57,6 +57,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/database ${CMAKE_SOURCE_DIR}/src/server/database/Database ${CMAKE_SOURCE_DIR}/src/server/database/Logging + ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Networking ${CMAKE_SOURCE_DIR}/src/server/shared/Packets ${CMAKE_SOURCE_DIR}/src/server/shared/Service diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index 0618ec437b6..e6156c7f622 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -134,7 +134,7 @@ int main(int argc, char** argv) // Get the list of realms for the server sRealmList->Initialize(*_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20)); - if (sRealmList->size() == 0) + if (sRealmList->GetRealms().empty()) { TC_LOG_ERROR("server.authserver", "No valid realms specified."); StopDB(); diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp index 53aeff6133b..b64ff0974f9 100644 --- a/src/server/authserver/Realms/RealmList.cpp +++ b/src/server/authserver/Realms/RealmList.cpp @@ -16,14 +16,14 @@ * with this program. If not, see . */ -#include #include "Common.h" -#include "RealmList.h" #include "Database/DatabaseEnv.h" +#include "RealmList.h" +#include namespace boost { namespace asio { namespace ip { class address; } } } -RealmList::RealmList() : m_UpdateInterval(0), m_NextUpdateTime(time(NULL)), _resolver(nullptr) { } +RealmList::RealmList() : _updateInterval(0), _nextUpdateTime(time(NULL)), _resolver(nullptr) { } RealmList::~RealmList() { delete _resolver; @@ -33,45 +33,43 @@ RealmList::~RealmList() void RealmList::Initialize(boost::asio::io_service& ioService, uint32 updateInterval) { _resolver = new boost::asio::ip::tcp::resolver(ioService); - m_UpdateInterval = updateInterval; + _updateInterval = updateInterval; // Get the content of the realmlist table in the database UpdateRealms(true); } -void RealmList::UpdateRealm(uint32 id, const std::string& name, ip::address const& address, ip::address const& localAddr, - ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population, uint32 build) +void RealmList::UpdateRealm(RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr, + ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, + float population) { // Create new if not exist or update existed - Realm& realm = m_realms[name]; - - realm.m_ID = id; - realm.name = name; - realm.icon = icon; - realm.flag = flag; - realm.timezone = timezone; - realm.allowedSecurityLevel = allowedSecurityLevel; - realm.populationLevel = population; - - // Append port to IP address. + Realm& realm = _realms[id]; + realm.Id = id; + realm.Build = build; + realm.Name = name; + realm.Type = icon; + realm.Flags = flag; + realm.Timezone = timezone; + realm.AllowedSecurityLevel = allowedSecurityLevel; + realm.PopulationLevel = population; realm.ExternalAddress = address; realm.LocalAddress = localAddr; realm.LocalSubnetMask = localSubmask; - realm.port = port; - realm.gamebuild = build; + realm.Port = port; } void RealmList::UpdateIfNeed() { // maybe disabled or updated recently - if (!m_UpdateInterval || m_NextUpdateTime > time(NULL)) + if (!_updateInterval || _nextUpdateTime > time(NULL)) return; - m_NextUpdateTime = time(NULL) + m_UpdateInterval; + _nextUpdateTime = time(NULL) + _updateInterval; // Clears Realm list - m_realms.clear(); + _realms.clear(); // Get the content of the realmlist table in the database UpdateRealms(); @@ -130,17 +128,23 @@ void RealmList::UpdateRealms(bool init) uint16 port = fields[5].GetUInt16(); uint8 icon = fields[6].GetUInt8(); + if (icon == REALM_TYPE_FFA_PVP) + icon = REALM_TYPE_PVP; + if (icon >= MAX_CLIENT_REALM_TYPE) + icon = REALM_TYPE_NORMAL; RealmFlags flag = RealmFlags(fields[7].GetUInt8()); uint8 timezone = fields[8].GetUInt8(); uint8 allowedSecurityLevel = fields[9].GetUInt8(); float pop = fields[10].GetFloat(); uint32 build = fields[11].GetUInt32(); - UpdateRealm(realmId, name, externalAddress, localAddress, localSubmask, port, icon, flag, timezone, - (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build); + RealmHandle id{ realmId }; + + UpdateRealm(id, build, name, externalAddress, localAddress, localSubmask, port, icon, flag, + timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop); if (init) - TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), m_realms[name].ExternalAddress.to_string().c_str(), port); + TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), externalAddress.to_string().c_str(), port); } catch (std::exception& ex) { @@ -151,3 +155,12 @@ void RealmList::UpdateRealms(bool init) while (result->NextRow()); } } + +Realm const* RealmList::GetRealm(RealmHandle const& id) const +{ + auto itr = _realms.find(id); + if (itr != _realms.end()) + return &itr->second; + + return NULL; +} diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h index cc5c88c01f2..e8b2c8337fa 100644 --- a/src/server/authserver/Realms/RealmList.h +++ b/src/server/authserver/Realms/RealmList.h @@ -19,48 +19,19 @@ #ifndef _REALMLIST_H #define _REALMLIST_H +#include "Common.h" +#include "Realm/Realm.h" #include #include #include -#include "Common.h" using namespace boost::asio; -enum RealmFlags -{ - REALM_FLAG_NONE = 0x00, - REALM_FLAG_INVALID = 0x01, - REALM_FLAG_OFFLINE = 0x02, - REALM_FLAG_SPECIFYBUILD = 0x04, - REALM_FLAG_UNK1 = 0x08, - REALM_FLAG_UNK2 = 0x10, - REALM_FLAG_RECOMMENDED = 0x20, - REALM_FLAG_NEW = 0x40, - REALM_FLAG_FULL = 0x80 -}; - -// Storage object for a realm -struct Realm -{ - ip::address ExternalAddress; - ip::address LocalAddress; - ip::address LocalSubnetMask; - uint16 port; - std::string name; - uint8 icon; - RealmFlags flag; - uint8 timezone; - uint32 m_ID; - AccountTypes allowedSecurityLevel; - float populationLevel; - uint32 gamebuild; -}; - /// Storage object for the list of realms on the server class RealmList { public: - typedef std::map RealmMap; + typedef std::map RealmMap; static RealmList* instance() { @@ -74,22 +45,21 @@ public: void UpdateIfNeed(); - void AddRealm(const Realm& NewRealm) { m_realms[NewRealm.name] = NewRealm; } + void AddRealm(const Realm& NewRealm) { _realms[NewRealm.Id] = NewRealm; } - RealmMap::const_iterator begin() const { return m_realms.begin(); } - RealmMap::const_iterator end() const { return m_realms.end(); } - uint32 size() const { return m_realms.size(); } + RealmMap const& GetRealms() const { return _realms; } + Realm const* GetRealm(RealmHandle const& id) const; private: RealmList(); void UpdateRealms(bool init = false); - void UpdateRealm(uint32 id, const std::string& name, ip::address const& address, ip::address const& localAddr, - ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population, uint32 build); + void UpdateRealm(RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr, + ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population); - RealmMap m_realms; - uint32 m_UpdateInterval; - time_t m_NextUpdateTime; + RealmMap _realms; + uint32 _updateInterval; + time_t _nextUpdateTime; boost::asio::ip::tcp::resolver* _resolver; }; diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp index 57e5d6682f2..bb30f4f25e4 100644 --- a/src/server/authserver/Server/AuthSession.cpp +++ b/src/server/authserver/Server/AuthSession.cpp @@ -844,7 +844,7 @@ tcp::endpoint const GetAddressForClient(Realm const& realm, ip::address const& c realmIp = realm.ExternalAddress; } - tcp::endpoint endpoint(realmIp, realm.port); + tcp::endpoint endpoint(realmIp, realm.Port); // Return external IP return endpoint; @@ -887,15 +887,15 @@ void AuthSession::RealmListCallback(PreparedQueryResult result) ByteBuffer pkt; size_t RealmListSize = 0; - for (RealmList::RealmMap::const_iterator i = sRealmList->begin(); i != sRealmList->end(); ++i) + for (RealmList::RealmMap::value_type const& i : sRealmList->GetRealms()) { - const Realm &realm = i->second; + const Realm &realm = i.second; // don't work with realms which not compatible with the client - bool okBuild = ((_expversion & POST_BC_EXP_FLAG) && realm.gamebuild == _build) || ((_expversion & PRE_BC_EXP_FLAG) && !AuthHelper::IsPreBCAcceptedClientBuild(realm.gamebuild)); + bool okBuild = ((_expversion & POST_BC_EXP_FLAG) && realm.Build == _build) || ((_expversion & PRE_BC_EXP_FLAG) && !AuthHelper::IsPreBCAcceptedClientBuild(realm.Build)); // No SQL injection. id of realm is controlled by the database. - uint32 flag = realm.flag; - RealmBuildInfo const* buildInfo = AuthHelper::GetBuildInfo(realm.gamebuild); + uint32 flag = realm.Flags; + RealmBuildInfo const* buildInfo = AuthHelper::GetBuildInfo(realm.Build); if (!okBuild) { if (!buildInfo) @@ -907,7 +907,7 @@ void AuthSession::RealmListCallback(PreparedQueryResult result) if (!buildInfo) flag &= ~REALM_FLAG_SPECIFYBUILD; - std::string name = i->first; + std::string name = realm.Name; if (_expversion & PRE_BC_EXP_FLAG && flag & REALM_FLAG_SPECIFYBUILD) { std::ostringstream ss; @@ -915,19 +915,19 @@ void AuthSession::RealmListCallback(PreparedQueryResult result) name = ss.str(); } - uint8 lock = (realm.allowedSecurityLevel > _accountInfo.SecurityLevel) ? 1 : 0; + uint8 lock = (realm.AllowedSecurityLevel > _accountInfo.SecurityLevel) ? 1 : 0; - pkt << uint8(realm.icon); // realm type + pkt << uint8(realm.Type); // realm type if (_expversion & POST_BC_EXP_FLAG) // only 2.x and 3.x clients pkt << uint8(lock); // if 1, then realm locked pkt << uint8(flag); // RealmFlags pkt << name; pkt << boost::lexical_cast(GetAddressForClient(realm, GetRemoteIpAddress())); - pkt << float(realm.populationLevel); - pkt << uint8(characterCounts[realm.m_ID]); - pkt << uint8(realm.timezone); // realm category + pkt << float(realm.PopulationLevel); + pkt << uint8(characterCounts[realm.Id.Realm]); + pkt << uint8(realm.Timezone); // realm category if (_expversion & POST_BC_EXP_FLAG) // 2.x and 3.x clients - pkt << uint8(realm.m_ID); + pkt << uint8(realm.Id.Realm); else pkt << uint8(0x0); // 1.12.1 and 1.12.2 clients diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp index 737e9f37195..a0bd6a08b2c 100644 --- a/src/server/game/Accounts/AccountMgr.cpp +++ b/src/server/game/Accounts/AccountMgr.cpp @@ -462,7 +462,7 @@ void AccountMgr::LoadRBAC() while (result->NextRow()); TC_LOG_DEBUG("rbac", "AccountMgr::LoadRBAC: Loading default permissions"); - result = LoginDatabase.PQuery("SELECT secId, permissionId FROM rbac_default_permissions WHERE (realmId = %u OR realmId = -1) ORDER BY secId ASC", realmID); + result = LoginDatabase.PQuery("SELECT secId, permissionId FROM rbac_default_permissions WHERE (realmId = %u OR realmId = -1) ORDER BY secId ASC", realm.Id.Realm); if (!result) { TC_LOG_INFO("server.loading", ">> Loaded 0 default permission definitions. DB table `rbac_default_permissions` is empty."); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 035d9af4369..01ffc9f1093 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -130,7 +130,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& else { bidderAccId = sObjectMgr->GetPlayerAccountIdByGUID(bidderGuid); - logGmTrade = AccountMgr::HasPermission(bidderAccId, rbac::RBAC_PERM_LOG_GM_TRADE, realmID); + logGmTrade = AccountMgr::HasPermission(bidderAccId, rbac::RBAC_PERM_LOG_GM_TRADE, realm.Id.Realm); if (logGmTrade && !sObjectMgr->GetPlayerNameByGUID(bidderGuid, bidderName)) bidderName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN); diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index 4d41fbc32eb..58aec3aa1cf 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -196,6 +196,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference ${CMAKE_SOURCE_DIR}/src/server/shared/Networking ${CMAKE_SOURCE_DIR}/src/server/shared/Packets + ${CMAKE_SOURCE_DIR}/src/server/shared/Realm ${MYSQL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${VALGRIND_INCLUDE_DIR} diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index aa0f6ce09fc..f0e98ee8c1f 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -108,7 +108,7 @@ bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_ac if (target) target_sec = target->GetSecurity(); else if (target_account) - target_sec = AccountMgr::GetSecurity(target_account, realmID); + target_sec = AccountMgr::GetSecurity(target_account, realm.Id.Realm); else return true; // caller must report error for (target == NULL && target_account == 0) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index e0d790312d2..7b1caffd84f 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -627,13 +627,13 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM); stmt->setUInt32(0, GetAccountId()); - stmt->setUInt32(1, realmID); + stmt->setUInt32(1, realm.Id.Realm); trans->Append(stmt); stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS); stmt->setUInt32(0, createInfo->CharCount); stmt->setUInt32(1, GetAccountId()); - stmt->setUInt32(2, realmID); + stmt->setUInt32(2, realm.Id.Realm); trans->Append(stmt); LoginDatabase.CommitTransaction(trans); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 45cee59aec9..7e25699352b 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -569,7 +569,7 @@ void WorldSession::HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std team = Player::TeamForRace(fields[1].GetUInt8()); friendAccountId = fields[2].GetUInt32(); - if (HasPermission(rbac::RBAC_PERM_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAccountId, realmID))) + if (HasPermission(rbac::RBAC_PERM_ALLOW_GM_FRIEND) || AccountMgr::IsPlayerAccount(AccountMgr::GetSecurity(friendAccountId, realm.Id.Realm))) { if (friendGuid) { diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index c380c1a5627..34ed31a7813 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1220,7 +1220,7 @@ void WorldSession::LoadPermissions() uint32 id = GetAccountId(); uint8 secLevel = GetSecurity(); - _RBACData = new rbac::RBACData(id, _accountName, realmID, secLevel); + _RBACData = new rbac::RBACData(id, _accountName, realm.Id.Realm, secLevel); _RBACData->LoadFromDB(); } @@ -1230,9 +1230,9 @@ PreparedQueryResultFuture WorldSession::LoadPermissionsAsync() uint8 secLevel = GetSecurity(); TC_LOG_DEBUG("rbac", "WorldSession::LoadPermissions [AccountId: %u, Name: %s, realmId: %d, secLevel: %u]", - id, _accountName.c_str(), realmID, secLevel); + id, _accountName.c_str(), realm.Id.Realm, secLevel); - _RBACData = new rbac::RBACData(id, _accountName, realmID, secLevel); + _RBACData = new rbac::RBACData(id, _accountName, realm.Id.Realm, secLevel); return _RBACData->LoadFromDBAsync(); } @@ -1310,7 +1310,7 @@ bool WorldSession::HasPermission(uint32 permission) bool hasPermission = _RBACData->HasPermission(permission); TC_LOG_DEBUG("rbac", "WorldSession::HasPermission [AccountId: %u, Name: %s, realmId: %d]", - _RBACData->GetId(), _RBACData->GetName().c_str(), realmID); + _RBACData->GetId(), _RBACData->GetName().c_str(), realm.Id.Realm); return hasPermission; } @@ -1318,7 +1318,7 @@ bool WorldSession::HasPermission(uint32 permission) void WorldSession::InvalidateRBACData() { TC_LOG_DEBUG("rbac", "WorldSession::Invalidaterbac::RBACData [AccountId: %u, Name: %s, realmId: %d]", - _RBACData->GetId(), _RBACData->GetName().c_str(), realmID); + _RBACData->GetId(), _RBACData->GetName().c_str(), realm.Id.Realm); delete _RBACData; _RBACData = NULL; } diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 36029113055..9447204e2b9 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -414,7 +414,7 @@ void WorldSocket::HandleAuthSession(WorldPacket& recvPacket) // Get the account information from the auth database PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME); - stmt->setInt32(0, int32(realmID)); + stmt->setInt32(0, int32(realm.Id.Realm)); stmt->setString(1, authSession->Account); _queryCallback = std::bind(&WorldSocket::HandleAuthSessionCallback, this, authSession, std::placeholders::_1); @@ -457,7 +457,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr authSes return; } - if (authSession->RealmID != realmID) + if (authSession->RealmID != realm.Id.Realm) { SendAuthResponseError(REALM_LIST_REALM_NOT_FOUND); TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Sent Auth Response (bad realm)."); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index b238b0a356d..f67930a849f 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1369,7 +1369,7 @@ void World::SetInitialWorldSettings() uint32 server_type = IsFFAPvPRealm() ? uint32(REALM_TYPE_PVP) : getIntConfig(CONFIG_GAME_TYPE); uint32 realm_zone = getIntConfig(CONFIG_REALM_ZONE); - LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realmID); // One-time query + LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realm.Id.Realm); // One-time query ///- Load the DBC files TC_LOG_INFO("server.loading", "Initialize data stores..."); @@ -1790,7 +1790,7 @@ void World::SetInitialWorldSettings() m_startTime = m_gameTime; LoginDatabase.PExecute("INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES(%u, %u, 0, '%s')", - realmID, uint32(m_startTime), GitRevision::GetFullVersion()); // One-time query + realm.Id.Realm, uint32(m_startTime), GitRevision::GetFullVersion()); // One-time query m_timers[WUPDATE_WEATHERS].SetInterval(1*IN_MILLISECONDS); m_timers[WUPDATE_AUCTIONS].SetInterval(MINUTE*IN_MILLISECONDS); @@ -2103,7 +2103,7 @@ void World::Update(uint32 diff) stmt->setUInt32(0, tmpDiff); stmt->setUInt16(1, uint16(maxOnlinePlayers)); - stmt->setUInt32(2, realmID); + stmt->setUInt32(2, realm.Id.Realm); stmt->setUInt32(3, uint32(m_startTime)); LoginDatabase.Execute(stmt); @@ -2826,13 +2826,13 @@ void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount) PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_REALM_CHARACTERS_BY_REALM); stmt->setUInt32(0, accountId); - stmt->setUInt32(1, realmID); + stmt->setUInt32(1, realm.Id.Realm); LoginDatabase.Execute(stmt); stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_REALM_CHARACTERS); stmt->setUInt8(0, charCount); stmt->setUInt32(1, accountId); - stmt->setUInt32(2, realmID); + stmt->setUInt32(2, realm.Id.Realm); LoginDatabase.Execute(stmt); } } @@ -2960,7 +2960,7 @@ void World::ResetDailyQuests() void World::LoadDBAllowedSecurityLevel() { PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL); - stmt->setInt32(0, int32(realmID)); + stmt->setInt32(0, int32(realm.Id.Realm)); PreparedQueryResult result = LoginDatabase.Query(stmt); if (result) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 2f1580d887c..bf7d2cb00f7 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -29,6 +29,7 @@ #include "SharedDefines.h" #include "QueryResult.h" #include "Callback.h" +#include "Realm/Realm.h" #include #include @@ -446,18 +447,6 @@ enum BillingPlanFlags SESSION_ENABLE_CAIS = 0x80 }; -/// Type of server, this is values from second column of Cfg_Configs.dbc -enum RealmType -{ - REALM_TYPE_NORMAL = 0, - REALM_TYPE_PVP = 1, - REALM_TYPE_NORMAL2 = 4, - REALM_TYPE_RP = 6, - REALM_TYPE_RPPVP = 8, - REALM_TYPE_FFA_PVP = 16 // custom, free for all pvp mode like arena PvP in all zones except rest activated places and sanctuaries - // replaced by REALM_PVP in realm list -}; - enum RealmZone { REALM_ZONE_UNKNOWN = 0, // any language @@ -882,7 +871,7 @@ class World std::deque> m_realmCharCallbacks; }; -extern uint32 realmID; +extern Realm realm; #define sWorld World::instance() #endif diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index e03942bc247..ffe8ea67816 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -164,7 +164,7 @@ public: ///- Get the accounts with GM Level >0 PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_GM_ACCOUNTS); stmt->setUInt8(0, uint8(SEC_MODERATOR)); - stmt->setInt32(1, int32(realmID)); + stmt->setInt32(1, int32(realm.Id.Realm)); PreparedQueryResult result = LoginDatabase.Query(stmt); if (result) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index c70246f7fb5..78eb3584908 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1588,7 +1588,7 @@ public: // Query the prepared statement for login data stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_PINFO); - stmt->setInt32(0, int32(realmID)); + stmt->setInt32(0, int32(realm.Id.Realm)); stmt->setUInt32(1, accId); PreparedQueryResult result = LoginDatabase.Query(stmt); diff --git a/src/server/scripts/Commands/cs_rbac.cpp b/src/server/scripts/Commands/cs_rbac.cpp index f7c2d21c12d..ab4bc4b631e 100644 --- a/src/server/scripts/Commands/cs_rbac.cpp +++ b/src/server/scripts/Commands/cs_rbac.cpp @@ -157,7 +157,7 @@ public: if (!rdata) { - data->rbac = new rbac::RBACData(accountId, accountName, realmID, AccountMgr::GetSecurity(accountId, realmID)); + data->rbac = new rbac::RBACData(accountId, accountName, realm.Id.Realm, AccountMgr::GetSecurity(accountId, realm.Id.Realm)); data->rbac->LoadFromDB(); data->needDelete = true; } diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index c5c85f5f3cc..899c5615206 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -95,7 +95,7 @@ public: ObjectGuid targetGuid = sObjectMgr->GetPlayerGUIDByName(target); uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); // Target must exist and have administrative rights - if (!AccountMgr::HasPermission(accountId, rbac::RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET, realmID)) + if (!AccountMgr::HasPermission(accountId, rbac::RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET, realm.Id.Realm)) { handler->SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A); return true; @@ -119,7 +119,7 @@ public: // Assign ticket SQLTransaction trans = SQLTransaction(NULL); - ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(AccountMgr::GetSecurity(accountId, realmID))); + ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(AccountMgr::GetSecurity(accountId, realm.Id.Realm))); ticket->SaveToDB(trans); sTicketMgr->UpdateLastChange(); @@ -387,7 +387,7 @@ public: { ObjectGuid guid = ticket->GetAssignedToGUID(); uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid); - security = AccountMgr::GetSecurity(accountId, realmID); + security = AccountMgr::GetSecurity(accountId, realm.Id.Realm); } // Check security diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt index b6e5c8b1c6f..64abecff8f7 100644 --- a/src/server/shared/CMakeLists.txt +++ b/src/server/shared/CMakeLists.txt @@ -16,6 +16,7 @@ file(GLOB_RECURSE sources_DataStores DataStores/*.cpp DataStores/*.h) file(GLOB_RECURSE sources_Dynamic Dynamic/*.cpp Dynamic/*.h) file(GLOB_RECURSE sources_Networking Networking/*.cpp Networking/*.h) file(GLOB_RECURSE sources_Packets Packets/*.cpp Packets/*.h) +file(GLOB_RECURSE sources_Realm Realm/*.cpp Realm/*.h) if( WIN32 ) file(GLOB_RECURSE sources_Service Service/*.cpp Service/*.h) endif( WIN32 ) @@ -36,6 +37,7 @@ set(shared_STAT_SRCS ${sources_Dynamic} ${sources_Networking} ${sources_Packets} + ${sources_Realm} ${sources_Utilities} ${sources_Service} ${sources_localdir} @@ -44,6 +46,7 @@ set(shared_STAT_SRCS include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/Dynamic ${CMAKE_CURRENT_SOURCE_DIR}/Networking + ${CMAKE_CURRENT_SOURCE_DIR}/Realm ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/src/common/ ${CMAKE_SOURCE_DIR}/src/common/Debugging diff --git a/src/server/shared/Realm/Realm.cpp b/src/server/shared/Realm/Realm.cpp new file mode 100644 index 00000000000..0c8f4d1d492 --- /dev/null +++ b/src/server/shared/Realm/Realm.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "Realm.h" diff --git a/src/server/shared/Realm/Realm.h b/src/server/shared/Realm/Realm.h new file mode 100644 index 00000000000..83a344dd817 --- /dev/null +++ b/src/server/shared/Realm/Realm.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2008-2016 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef Realm_h__ +#define Realm_h__ + +#include "Common.h" +#include +#include + +using namespace boost::asio; + +enum RealmFlags +{ + REALM_FLAG_NONE = 0x00, + REALM_FLAG_VERSION_MISMATCH = 0x01, + REALM_FLAG_OFFLINE = 0x02, + REALM_FLAG_SPECIFYBUILD = 0x04, + REALM_FLAG_UNK1 = 0x08, + REALM_FLAG_UNK2 = 0x10, + REALM_FLAG_RECOMMENDED = 0x20, + REALM_FLAG_NEW = 0x40, + REALM_FLAG_FULL = 0x80 +}; + +struct RealmHandle +{ + RealmHandle() : Realm(0) { } + RealmHandle(uint32 index) : Realm(index) { } + + uint32 Realm; // primary key in `realmlist` table + + bool operator<(RealmHandle const& r) const + { + return Realm < r.Realm; + } +}; + +/// Type of server, this is values from second column of Cfg_Configs.dbc +enum RealmType +{ + REALM_TYPE_NORMAL = 0, + REALM_TYPE_PVP = 1, + REALM_TYPE_NORMAL2 = 4, + REALM_TYPE_RP = 6, + REALM_TYPE_RPPVP = 8, + + MAX_CLIENT_REALM_TYPE = 14, + + REALM_TYPE_FFA_PVP = 16 // custom, free for all pvp mode like arena PvP in all zones except rest activated places and sanctuaries + // replaced by REALM_PVP in realm list +}; + +// Storage object for a realm +struct Realm +{ + RealmHandle Id; + uint32 Build; + ip::address ExternalAddress; + ip::address LocalAddress; + ip::address LocalSubnetMask; + uint16 Port; + std::string Name; + uint8 Type; // icon + RealmFlags Flags; + uint8 Timezone; + AccountTypes AllowedSecurityLevel; + float PopulationLevel; +}; + +#endif // Realm_h__ diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 58ddce532c0..007a58ced79 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -34,7 +34,6 @@ #include "OpenSSLCrypto.h" #include "ProcessPriority.h" #include "BigNumber.h" -#include "RealmList.h" #include "World.h" #include "MapManager.h" #include "InstanceSaveMgr.h" @@ -47,6 +46,7 @@ #include "GitRevision.h" #include "WorldSocket.h" #include "WorldSocketMgr.h" +#include "Realm/Realm.h" #include "DatabaseLoader.h" #include "AppenderDB.h" @@ -81,7 +81,7 @@ uint32 _maxCoreStuckTimeInMs(0); WorldDatabaseWorkerPool WorldDatabase; ///< Accessor to the world database CharacterDatabaseWorkerPool CharacterDatabase; ///< Accessor to the character database LoginDatabaseWorkerPool LoginDatabase; ///< Accessor to the realm/login database -uint32 realmID; ///< Id of the realm +Realm realm; void SignalHandler(const boost::system::error_code& error, int signalNumber); void FreezeDetectorHandler(const boost::system::error_code& error); @@ -92,6 +92,7 @@ void WorldUpdateLoop(); void ClearOnlineAccounts(); void ShutdownCLIThread(std::thread* cliThread); void ShutdownThreadPool(std::vector& threadPool); +bool LoadRealmInfo(); variables_map GetConsoleArguments(int argc, char** argv, std::string& cfg_file, std::string& cfg_service); /// Launch the Trinity server @@ -188,7 +189,9 @@ extern int main(int argc, char** argv) } // Set server offline (not connectable) - LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = (flag & ~%u) | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, REALM_FLAG_INVALID, realmID); + LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realm.Id.Realm); + + LoadRealmInfo(); // Initialize the World sWorld->SetInitialWorldSettings(); @@ -223,7 +226,9 @@ extern int main(int argc, char** argv) sWorldSocketMgr.StartNetwork(_ioService, worldListener, worldPort); // Set server online (allow connecting now) - LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag & ~%u, population = 0 WHERE id = '%u'", REALM_FLAG_INVALID, realmID); + LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag & ~%u, population = 0 WHERE id = '%u'", REALM_FLAG_OFFLINE, realm.Id.Realm); + realm.PopulationLevel = 0.0f; + realm.Flags = RealmFlags(realm.Flags & ~uint32(REALM_FLAG_OFFLINE)); // Start the freeze check callback cycle in 5 seconds (cycle itself is 1 sec) if (int coreStuckTime = sConfigMgr->GetIntDefault("MaxCoreStuckTime", 0)) @@ -259,7 +264,7 @@ extern int main(int argc, char** argv) sScriptMgr->Unload(); // set server offline - LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID); + LoginDatabase.DirectPExecute("UPDATE realmlist SET flag = flag | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realm.Id.Realm); // Clean up threads if any if (soapThread != nullptr) @@ -441,6 +446,59 @@ AsyncAcceptor* StartRaSocketAcceptor(boost::asio::io_service& ioService) return acceptor; } +bool LoadRealmInfo() +{ + boost::asio::ip::tcp::resolver resolver(_ioService); + boost::asio::ip::tcp::resolver::iterator end; + + QueryResult result = LoginDatabase.PQuery("SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE id = %u", realm.Id.Realm); + if (!result) + return false; + + Field* fields = result->Fetch(); + realm.Name = fields[1].GetString(); + boost::asio::ip::tcp::resolver::query externalAddressQuery(ip::tcp::v4(), fields[2].GetString(), ""); + + boost::system::error_code ec; + boost::asio::ip::tcp::resolver::iterator endPoint = resolver.resolve(externalAddressQuery, ec); + if (endPoint == end || ec) + { + TC_LOG_ERROR("server.worldserver", "Could not resolve address %s", fields[2].GetString().c_str()); + return false; + } + + realm.ExternalAddress = (*endPoint).endpoint().address(); + + boost::asio::ip::tcp::resolver::query localAddressQuery(ip::tcp::v4(), fields[3].GetString(), ""); + endPoint = resolver.resolve(localAddressQuery, ec); + if (endPoint == end || ec) + { + TC_LOG_ERROR("server.worldserver", "Could not resolve address %s", fields[3].GetString().c_str()); + return false; + } + + realm.LocalAddress = (*endPoint).endpoint().address(); + + boost::asio::ip::tcp::resolver::query localSubmaskQuery(ip::tcp::v4(), fields[4].GetString(), ""); + endPoint = resolver.resolve(localSubmaskQuery, ec); + if (endPoint == end || ec) + { + TC_LOG_ERROR("server.worldserver", "Could not resolve address %s", fields[4].GetString().c_str()); + return false; + } + + realm.LocalSubnetMask = (*endPoint).endpoint().address(); + + realm.Port = fields[5].GetUInt16(); + realm.Type = fields[6].GetUInt8(); + realm.Flags = RealmFlags(fields[7].GetUInt8()); + realm.Timezone = fields[8].GetUInt8(); + realm.AllowedSecurityLevel = AccountTypes(fields[9].GetUInt8()); + realm.PopulationLevel = fields[10].GetFloat(); + realm.Build = fields[11].GetUInt32(); + return true; +} + /// Initialize connection to the databases bool StartDB() { @@ -457,13 +515,14 @@ bool StartDB() return false; ///- Get the realm Id from the configuration file - realmID = sConfigMgr->GetIntDefault("RealmID", 0); - if (!realmID) + realm.Id.Realm = sConfigMgr->GetIntDefault("RealmID", 0); + if (!realm.Id.Realm) { TC_LOG_ERROR("server.worldserver", "Realm ID not defined in configuration file"); return false; } - TC_LOG_INFO("server.worldserver", "Realm running as realm ID %d", realmID); + + TC_LOG_INFO("server.worldserver", "Realm running as realm ID %d", realm.Id.Realm); ///- Clean the database before starting ClearOnlineAccounts(); @@ -490,7 +549,7 @@ void StopDB() void ClearOnlineAccounts() { // Reset online status for all accounts with characters on the current realm - LoginDatabase.DirectPExecute("UPDATE account SET online = 0 WHERE online > 0 AND id IN (SELECT acctid FROM realmcharacters WHERE realmid = %d)", realmID); + LoginDatabase.DirectPExecute("UPDATE account SET online = 0 WHERE online > 0 AND id IN (SELECT acctid FROM realmcharacters WHERE realmid = %d)", realm.Id.Realm); // Reset online status for all characters CharacterDatabase.DirectExecute("UPDATE characters SET online = 0 WHERE online <> 0"); From 6cd63ca3d4dbc07abc3bf72af925f48f6282ec1b Mon Sep 17 00:00:00 2001 From: DDuarte Date: Sun, 28 Feb 2016 15:59:10 +0000 Subject: [PATCH 82/93] Core/Authserver: Partial port of 56cf7ff2a8f1e0a710544ec6300a21cfa44c0f73 Change the "UpdateIfNeed" logic to a deadline_timer --- src/server/authserver/Main.cpp | 2 ++ src/server/authserver/Realms/RealmList.cpp | 38 ++++++++++---------- src/server/authserver/Realms/RealmList.h | 12 +++---- src/server/authserver/Server/AuthSession.cpp | 3 -- 4 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index e6156c7f622..939d15ceca8 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -194,6 +194,8 @@ int main(int argc, char** argv) sAuthSocketMgr.StopNetwork(); + sRealmList->Close(); + // Close the Database Pool and library StopDB(); diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp index b64ff0974f9..8c4ac4fc95c 100644 --- a/src/server/authserver/Realms/RealmList.cpp +++ b/src/server/authserver/Realms/RealmList.cpp @@ -23,20 +23,27 @@ namespace boost { namespace asio { namespace ip { class address; } } } -RealmList::RealmList() : _updateInterval(0), _nextUpdateTime(time(NULL)), _resolver(nullptr) { } +RealmList::RealmList() : _updateInterval(0), _updateTimer(nullptr), _resolver(nullptr) { } RealmList::~RealmList() { delete _resolver; + delete _updateTimer; } // Load the realm list from the database void RealmList::Initialize(boost::asio::io_service& ioService, uint32 updateInterval) { - _resolver = new boost::asio::ip::tcp::resolver(ioService); _updateInterval = updateInterval; + _updateTimer = new boost::asio::deadline_timer(ioService); + _resolver = new boost::asio::ip::tcp::resolver(ioService); // Get the content of the realmlist table in the database - UpdateRealms(true); + UpdateRealms(boost::system::error_code()); +} + +void RealmList::Close() +{ + _updateTimer->cancel(); } void RealmList::UpdateRealm(RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr, @@ -60,23 +67,11 @@ void RealmList::UpdateRealm(RealmHandle const& id, uint32 build, const std::stri realm.Port = port; } -void RealmList::UpdateIfNeed() +void RealmList::UpdateRealms(boost::system::error_code const& error) { - // maybe disabled or updated recently - if (!_updateInterval || _nextUpdateTime > time(NULL)) + if (error) return; - _nextUpdateTime = time(NULL) + _updateInterval; - - // Clears Realm list - _realms.clear(); - - // Get the content of the realmlist table in the database - UpdateRealms(); -} - -void RealmList::UpdateRealms(bool init) -{ TC_LOG_INFO("server.authserver", "Updating Realm List..."); PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST); @@ -143,8 +138,7 @@ void RealmList::UpdateRealms(bool init) UpdateRealm(id, build, name, externalAddress, localAddress, localSubmask, port, icon, flag, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop); - if (init) - TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), externalAddress.to_string().c_str(), port); + TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), externalAddress.to_string().c_str(), port); } catch (std::exception& ex) { @@ -154,6 +148,12 @@ void RealmList::UpdateRealms(bool init) } while (result->NextRow()); } + + if (_updateInterval) + { + _updateTimer->expires_from_now(boost::posix_time::seconds(_updateInterval)); + _updateTimer->async_wait(std::bind(&RealmList::UpdateRealms, this, std::placeholders::_1)); + } } Realm const* RealmList::GetRealm(RealmHandle const& id) const diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h index e8b2c8337fa..28e442b5be0 100644 --- a/src/server/authserver/Realms/RealmList.h +++ b/src/server/authserver/Realms/RealmList.h @@ -24,6 +24,7 @@ #include #include #include +#include using namespace boost::asio; @@ -42,10 +43,7 @@ public: ~RealmList(); void Initialize(boost::asio::io_service& ioService, uint32 updateInterval); - - void UpdateIfNeed(); - - void AddRealm(const Realm& NewRealm) { _realms[NewRealm.Id] = NewRealm; } + void Close(); RealmMap const& GetRealms() const { return _realms; } Realm const* GetRealm(RealmHandle const& id) const; @@ -53,13 +51,13 @@ public: private: RealmList(); - void UpdateRealms(bool init = false); + void UpdateRealms(boost::system::error_code const& error); void UpdateRealm(RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr, ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population); RealmMap _realms; - uint32 _updateInterval; - time_t _nextUpdateTime; + uint32 _updateInterval; + boost::asio::deadline_timer* _updateTimer; boost::asio::ip::tcp::resolver* _resolver; }; diff --git a/src/server/authserver/Server/AuthSession.cpp b/src/server/authserver/Server/AuthSession.cpp index bb30f4f25e4..e0b463b74ad 100644 --- a/src/server/authserver/Server/AuthSession.cpp +++ b/src/server/authserver/Server/AuthSession.cpp @@ -880,9 +880,6 @@ void AuthSession::RealmListCallback(PreparedQueryResult result) } while (result->NextRow()); } - // Update realm list if need - sRealmList->UpdateIfNeed(); - // Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm) ByteBuffer pkt; From ce0e1c0fbe6b17421b686e803e2b57d77d0ea4df Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 6 Mar 2016 21:28:52 +0000 Subject: [PATCH 83/93] DB/Misc: A few updates 1) Delete the duplicated spawns from https://github.com/TrinityCore/TrinityCore/commit/8aabb087f0aa3d3ed627167f5c12075bfc945720 2) Correct targeting for text which was bought up on irc yesterday 3) Correct phasing for objects involved with http://www.wowhead.com/quest=13220/putting-olakin-back-together-again --- sql/updates/world/2016_03_06_00_world.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2016_03_06_00_world.sql diff --git a/sql/updates/world/2016_03_06_00_world.sql b/sql/updates/world/2016_03_06_00_world.sql new file mode 100644 index 00000000000..e991023e514 --- /dev/null +++ b/sql/updates/world/2016_03_06_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `gameobject` WHERE `guid` IN(62187,62190,62198); +UPDATE `smart_scripts` SET `target_type`=7 WHERE `entryorguid`=11448 AND `source_type`=0 AND `id`=2 AND `link`=0; +UPDATE `gameobject` SET `phaseMask`=64 WHERE `guid`IN(16974,16976,99723); From 83e8deaa8f9dffad33169090a7acabf001526582 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Sun, 6 Mar 2016 21:59:07 +0000 Subject: [PATCH 84/93] DB/Quest: Troll Patrol: High Standards Closes #16734 --- sql/updates/world/2016_03_06_01_world.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2016_03_06_01_world.sql diff --git a/sql/updates/world/2016_03_06_01_world.sql b/sql/updates/world/2016_03_06_01_world.sql new file mode 100644 index 00000000000..183121d6735 --- /dev/null +++ b/sql/updates/world/2016_03_06_01_world.sql @@ -0,0 +1,7 @@ +UPDATE `smart_scripts` SET `link`=1 WHERE `entryorguid`IN (28064,28304,28305) AND `source_type`=0 AND `id`=0 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`IN (28064,28304,28305) AND `source_type`=0 AND `id`=1; +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 +(28064, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 51249, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Pedestal 01 - On Spellhit \'Place Banner\' - Cast Summon Agent Crusade Banner'), +(28304, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 51249, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Pedestal 02 - On Spellhit \'Place Banner\' - Cast Summon Agent Crusade Banner'), +(28305, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 51249, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Pedestal 02 - On Spellhit \'Place Banner\' - Cast Summon Agent Crusade Banner'); +UPDATE `creature` SET `spawndist`=0, `MovementType`=0 WHERE `guid` IN(109153,109501,110958); From 7b687be4ba523bc50d3caca894855275a4810c65 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 7 Mar 2016 00:06:13 +0000 Subject: [PATCH 85/93] Core/Auth: Fix the "Added realm" spam --- src/server/authserver/Realms/RealmList.cpp | 9 +++++---- src/server/authserver/Realms/RealmList.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp index 8c4ac4fc95c..f1b25d8554d 100644 --- a/src/server/authserver/Realms/RealmList.cpp +++ b/src/server/authserver/Realms/RealmList.cpp @@ -38,7 +38,7 @@ void RealmList::Initialize(boost::asio::io_service& ioService, uint32 updateInte _resolver = new boost::asio::ip::tcp::resolver(ioService); // Get the content of the realmlist table in the database - UpdateRealms(boost::system::error_code()); + UpdateRealms(true, boost::system::error_code()); } void RealmList::Close() @@ -67,7 +67,7 @@ void RealmList::UpdateRealm(RealmHandle const& id, uint32 build, const std::stri realm.Port = port; } -void RealmList::UpdateRealms(boost::system::error_code const& error) +void RealmList::UpdateRealms(bool init, boost::system::error_code const& error) { if (error) return; @@ -138,7 +138,8 @@ void RealmList::UpdateRealms(boost::system::error_code const& error) UpdateRealm(id, build, name, externalAddress, localAddress, localSubmask, port, icon, flag, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop); - TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), externalAddress.to_string().c_str(), port); + if (init) + TC_LOG_INFO("server.authserver", "Added realm \"%s\" at %s:%u.", name.c_str(), externalAddress.to_string().c_str(), port); } catch (std::exception& ex) { @@ -152,7 +153,7 @@ void RealmList::UpdateRealms(boost::system::error_code const& error) if (_updateInterval) { _updateTimer->expires_from_now(boost::posix_time::seconds(_updateInterval)); - _updateTimer->async_wait(std::bind(&RealmList::UpdateRealms, this, std::placeholders::_1)); + _updateTimer->async_wait(std::bind(&RealmList::UpdateRealms, this, false, std::placeholders::_1)); } } diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h index 28e442b5be0..e35975b215a 100644 --- a/src/server/authserver/Realms/RealmList.h +++ b/src/server/authserver/Realms/RealmList.h @@ -51,7 +51,7 @@ public: private: RealmList(); - void UpdateRealms(boost::system::error_code const& error); + void UpdateRealms(bool init, boost::system::error_code const& error); void UpdateRealm(RealmHandle const& id, uint32 build, const std::string& name, ip::address const& address, ip::address const& localAddr, ip::address const& localSubmask, uint16 port, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float population); From f7a05eba638daba7e6a0fe780aeedeef04be8544 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 7 Mar 2016 10:32:57 +0100 Subject: [PATCH 86/93] DB/Gameobject: Fix respawn time of few Quest GameObjects By Tauriella, closes #16701 --- sql/updates/world/2016_03_07_00_world.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2016_03_07_00_world.sql diff --git a/sql/updates/world/2016_03_07_00_world.sql b/sql/updates/world/2016_03_07_00_world.sql new file mode 100644 index 00000000000..b9df4d07bb9 --- /dev/null +++ b/sql/updates/world/2016_03_07_00_world.sql @@ -0,0 +1,10 @@ +-- +UPDATE `gameobject` SET `spawntimesecs`= 2 WHERE `guid` IN +(9175, -- Deserter Propaganda +40667, -- The Book of Ur +40774, -- Tool Kit +40775, -- Damaged Diving Gear +66308, -- New Avalon Patrol Schedule +66377, -- Empty Cauldron +66378, -- Iron Chain +66384); -- New Avalon Registry From 7ee7548b9443c16d3fe01d4c95493d250b7efd9b Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 7 Mar 2016 10:35:33 +0100 Subject: [PATCH 87/93] DB/Misc: Fix some engrish By tkrokli closes #16648 --- sql/updates/world/2016_03_07_01_world.sql | 112 ++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 sql/updates/world/2016_03_07_01_world.sql diff --git a/sql/updates/world/2016_03_07_01_world.sql b/sql/updates/world/2016_03_07_01_world.sql new file mode 100644 index 00000000000..d74f4296903 --- /dev/null +++ b/sql/updates/world/2016_03_07_01_world.sql @@ -0,0 +1,112 @@ +-- +-- Spelling, grammar and typo corrections, `trinity_string`, branch 3.3.5: +-- +UPDATE `trinity_string` SET `content_default`= "The command %s uses the following subcommands:%s" WHERE `entry`= 8; +UPDATE `trinity_string` SET `content_default`= "The following GMs are active on this server:" WHERE `entry`= 16; +UPDATE `trinity_string` SET `content_default`= "%s's flying command failed." WHERE `entry`= 21; +UPDATE `trinity_string` SET `content_default`= "Up to %u expansions are allowed now." WHERE `entry`= 61; +UPDATE `trinity_string` SET `content_default`= "One or more parameters contain incorrect values." WHERE `entry`= 62; +UPDATE `trinity_string` SET `content_default`= "Wrong parameter, id: %u does not exist." WHERE `entry`= 63; +UPDATE `trinity_string` SET `content_default`= "%s is appearing at your location." WHERE `entry`= 114; +UPDATE `trinity_string` SET `content_default`= "GUID %i, faction is %i, flags is %i, npcflag is %i, dynflag is %i." WHERE `entry`= 128; +UPDATE `trinity_string` SET `content_default`= "You changed GUID=%i's Faction to %i, flags to %i, npcflag to %i, dynflag to %i." WHERE `entry`= 130; +UPDATE `trinity_string` SET `content_default`= "You set all speeds of %s from normal to %2.2f." WHERE `entry`= 137; +UPDATE `trinity_string` SET `content_default`= "%s set all your speeds from normal to %2.2f." WHERE `entry`= 138; +UPDATE `trinity_string` SET `content_default`= "You set the speed of %s from normal to %2.2f." WHERE `entry`= 139; +UPDATE `trinity_string` SET `content_default`= "%s set your speed from normal to %2.2f." WHERE `entry`= 140; +UPDATE `trinity_string` SET `content_default`= "You set the swim speed of %s from normal to %2.2f." WHERE `entry`= 141; +UPDATE `trinity_string` SET `content_default`= "%s set your swim speed from normal to %2.2f." WHERE `entry`= 142; +UPDATE `trinity_string` SET `content_default`= "You set the backwards run speed of %s from normal to %2.2f." WHERE `entry`= 143; +UPDATE `trinity_string` SET `content_default`= "%s set your backwards run speed from normal to %2.2f." WHERE `entry`= 144; +UPDATE `trinity_string` SET `content_default`= "You set the fly speed of %s from normal to %2.2f." WHERE `entry`= 145; +UPDATE `trinity_string` SET `content_default`= "%s set your fly speed from normal to %2.2f." WHERE `entry`= 146; +UPDATE `trinity_string` SET `content_default`= "You set the size of %s to %2.2f." WHERE `entry`= 147; +UPDATE `trinity_string` SET `content_default`= "You take all the copper from %s." WHERE `entry`= 153; +UPDATE `trinity_string` SET `content_default`= "You play the sound %u." WHERE `entry`= 159; +UPDATE `trinity_string` SET `content_default`= "The following locations were found:\n%s" WHERE `entry`= 168; +UPDATE `trinity_string` SET `content_default`= "You tried to play the sound %u, but it does not exist." WHERE `entry`= 170; +UPDATE `trinity_string` SET `content_default`= "You can't teleport yourself to yourself!" WHERE `entry`= 171; +UPDATE `trinity_string` SET `content_default`= "You changed the runic power of %s to %i/%i." WHERE `entry`= 173; +UPDATE `trinity_string` SET `content_default`= "Error, a name can only contain the characters A-Z and a-z." WHERE `entry`= 203; +UPDATE `trinity_string` SET `content_default`= "Item '%u' (with extended cost %u) is already in the vendor list." WHERE `entry`= 210; +UPDATE `trinity_string` SET `content_default`= "Spells will be reset for all players at login. Relogging is strongly recommended!" WHERE `entry`= 218; +UPDATE `trinity_string` SET `content_default`= "Talents will be reset for all players at login. Relogging is strongly recommended!" WHERE `entry`= 219; +UPDATE `trinity_string` SET `content_default`= "No waypoints found in the database." WHERE `entry`= 239; +UPDATE `trinity_string` SET `content_default`= "Warning: Could not delete WP with ID: %d from the world" WHERE `entry`= 242; +UPDATE `trinity_string` SET `content_default`= "Invalid target map or coordinates (X: %f Y: %f MapId: %u)" WHERE `entry`= 263; +UPDATE `trinity_string` SET `content_default`= "Invalid zone coordinates (X: %f Y: %f AreaId: %u)" WHERE `entry`= 264; +UPDATE `trinity_string` SET `content_default`= "Game Object (GUID: %u) is referenced by nonexistent creature %u in GO list, can't be deleted." WHERE `entry`= 274; +UPDATE `trinity_string` SET `content_default`= "You can't kick yourself, log out instead." WHERE `entry`= 281; +UPDATE `trinity_string` SET `content_default`= "Show new ticket: ON" WHERE `entry`= 291; +UPDATE `trinity_string` SET `content_default`= "Show new ticket: OFF" WHERE `entry`= 292; +UPDATE `trinity_string` SET `content_default`= "%s's honor points were set to %u." WHERE `entry`= 299; +UPDATE `trinity_string` SET `content_default`= "Extended item cost %u does not exist." WHERE `entry`= 331; +UPDATE `trinity_string` SET `content_default`= "You repair all of %s's items." WHERE `entry`= 336; +UPDATE `trinity_string` SET `content_default`= "All your items were repaired by %s." WHERE `entry`= 337; +UPDATE `trinity_string` SET `content_default`= "Game Object (Entry: %u) contains invalid data and can't be spawned." WHERE `entry`= 348; +UPDATE `trinity_string` SET `content_default`= "Title %u (%s) set as current selected title for player %s." WHERE `entry`= 355; +UPDATE `trinity_string` SET `content_default`= "Current selected title for player %s is now reset to not known." WHERE `entry`= 356; +UPDATE `trinity_string` SET `content_default`= "Security level of account %s changed to %i." WHERE `entry`= 401; +UPDATE `trinity_string` SET `content_default`= "Your security level is too low for this action." WHERE `entry`= 403; +UPDATE `trinity_string` SET `content_default`= "Account %s does not exist." WHERE `entry`= 413; +UPDATE `trinity_string` SET `content_default`= "Account %s has never been banned." WHERE `entry`= 416; +UPDATE `trinity_string` SET `content_default`= "You learned all crafts, skills and recipes." WHERE `entry`= 433; +UPDATE `trinity_string` SET `content_default`= "Graveyard #%u is already linked to zone #%u (current)." WHERE `entry`= 450; +UPDATE `trinity_string` SET `content_default`= "Graveyard #%u can not be linked to subzone or nonexistent zone #%u (internal error)." WHERE `entry`= 452; +UPDATE `trinity_string` SET `content_default`= "No faction found in Graveyard with id= #%u, please update your database." WHERE `entry`= 454; +UPDATE `trinity_string` SET `content_default`= "Invalid team, please update your database." WHERE `entry`= 455; +UPDATE `trinity_string` SET `content_default`= "Quest %u is started from an item. Add the item to your inventory and start the quest normally: .additem %u" WHERE `entry`= 472; +UPDATE `trinity_string` SET `content_default`= "Player %s must have the skill %u (%s) before using this command." WHERE `entry`= 485; +UPDATE `trinity_string` SET `content_default`= "Target(%s) already knows that spell." WHERE `entry`= 489; +UPDATE `trinity_string` SET `content_default`= "You have already unlearnt that spell." WHERE `entry`= 491; +UPDATE `trinity_string` SET `content_default`= "That player is already in a guild." WHERE `entry`= 500; +UPDATE `trinity_string` SET `content_default`= "The guild was NOT created. Check if that guild already exists." WHERE `entry`= 501; +UPDATE `trinity_string` SET `content_default`= "No items from the itemset '%u' were found." WHERE `entry`= 502; +UPDATE `trinity_string` SET `content_default`= "Item '%i' '%s' added to slot %i." WHERE `entry`= 506; +UPDATE `trinity_string` SET `content_default`= "NPC currently selected by player:\nDB GUID: %u, current GUID: %u.\nFaction: %u.\nnpcFlags: %u.\nEntry: %u.\nDisplayID: %u (Native: %u)." WHERE `entry`= 539; +UPDATE `trinity_string` SET `content_default`= "%s no longer has any explored zones." WHERE `entry`= 552; +UPDATE `trinity_string` SET `content_default`= "Found nearby creatures (distance %f): %u" WHERE `entry`= 556; +UPDATE `trinity_string` SET `content_default`= "%s leveled you up to (%i)." WHERE `entry`= 557; +UPDATE `trinity_string` SET `content_default`= "%s leveled you down to (%i)." WHERE `entry`= 558; +UPDATE `trinity_string` SET `content_default`= "%s has reset your level progress." WHERE `entry`= 559; +UPDATE `trinity_string` SET `content_default`= "The value index %u is too big for %u (count: %u)." WHERE `entry`= 564; +UPDATE `trinity_string` SET `content_default`= "The selected player or creature does not have a victim." WHERE `entry`= 579; +UPDATE `trinity_string` SET `content_default`= "Player %s has learned all default spells for race/class and spell rewards from completed quests." WHERE `entry`= 580; +UPDATE `trinity_string` SET `content_default`= "Found nearby gameobjects (distance %f): %u" WHERE `entry`= 581; +UPDATE `trinity_string` SET `content_default`= "SpawnTime: Full:%s Remaining:%s" WHERE `entry`= 582; +UPDATE `trinity_string` SET `content_default`= "No event found." WHERE `entry`= 584; +UPDATE `trinity_string` SET `content_default`= "The event does not exist." WHERE `entry`= 585; +UPDATE `trinity_string` SET `content_default`= "The event %u is already active." WHERE `entry`= 587; +UPDATE `trinity_string` SET `content_default`= "The event %u is not active." WHERE `entry`= 588; +UPDATE `trinity_string` SET `content_default`= "You have learned all spells from the craft: %s" WHERE `entry`= 592; +UPDATE `trinity_string` SET `content_default`= "Item(s) can not be equipped or stored in the inventory due to a problem." WHERE `entry`= 706; +UPDATE `trinity_string` SET `content_default`= "An email address is required to change your password." WHERE `entry`= 881; +UPDATE `trinity_string` SET `content_default`= "The account %s was NOT deleted (the SQL file format was probably updated)." WHERE `entry`= 1002; +UPDATE `trinity_string` SET `content_default`= "The account %s was NOT deleted (unknown error)." WHERE `entry`= 1003; +UPDATE `trinity_string` SET `content_default`= "An account name can NOT be longer than 16 characters (client limit). The account was NOT created." WHERE `entry`= 1005; +UPDATE `trinity_string` SET `content_default`= "An account with this name already exists!" WHERE `entry`= 1006; +UPDATE `trinity_string` SET `content_default`= "The account %s was NOT created (the SQL file format was probably updated)." WHERE `entry`= 1007; +UPDATE `trinity_string` SET `content_default`= "The account %s was NOT created (unknown error)." WHERE `entry`= 1008; +UPDATE `trinity_string` SET `content_default`= "The character '%s' (GUID: %u Account %u) can NOT be restored: The account does not exist!" WHERE `entry`= 1023; +UPDATE `trinity_string` SET `content_default`= "The character '%s' (GUID: %u Account %u) can NOT be restored: The account character list is full!" WHERE `entry`= 1024; +UPDATE `trinity_string` SET `content_default`= "The character '%s' (GUID: %u Account %u) can NOT be restored: The name is already in use!" WHERE `entry`= 1025; +UPDATE `trinity_string` SET `content_default`= "The account %s (Id: %u) is allowed to use up to %u expansion(s) now." WHERE `entry`= 1100; +UPDATE `trinity_string` SET `content_default`= "The account %s (%u) has reached maximum amount of allowed characters (client limitation)." WHERE `entry`= 1113; +UPDATE `trinity_string` SET `content_default`= "The dump file contains damaged data!" WHERE `entry`= 1114; +UPDATE `trinity_string` SET `content_default`= "The character guid %u is already in use!" WHERE `entry`= 1117; +UPDATE `trinity_string` SET `content_default`= "You changed the gender of %s to %s." WHERE `entry`= 1120; +UPDATE `trinity_string` SET `content_default`= "Your gender was changed to %s by %s." WHERE `entry`= 1121; +UPDATE `trinity_string` SET `content_default`= "No pet found." WHERE `entry`= 1123; +UPDATE `trinity_string` SET `content_default`= "Wrong pet type." WHERE `entry`= 1124; +UPDATE `trinity_string` SET `content_default`= "Your pet has learned all talents." WHERE `entry`= 1125; +UPDATE `trinity_string` SET `content_default`= "The talents of %s's pet were reset." WHERE `entry`= 1127; +UPDATE `trinity_string` SET `content_default`= "Unable to dump deleted characters, aborting." WHERE `entry`= 1130; +UPDATE `trinity_string` SET `content_default`= "All configs are reloaded from the configuration file(s)." WHERE `entry`= 1157; +UPDATE `trinity_string` SET `content_default`= "Invalid name specified. The name must be a name of an online Game Master." WHERE `entry`= 2012; +UPDATE `trinity_string` SET `content_default`= "You cannot unassign tickets from staff members with a higher security level than yourself." WHERE `entry`= 2015; +UPDATE `trinity_string` SET `content_default`= "It might be amusing, but no... you cant freeze yourself." WHERE `entry`= 5001; +UPDATE `trinity_string` SET `content_default`= "Invalid input, check the name of the target." WHERE `entry`= 5002; +UPDATE `trinity_string` SET `content_default`= "You can't teleport yourself to yourself!" WHERE `entry`= 5011; +UPDATE `trinity_string` SET `content_default`= "No reason given." WHERE `entry`= 5035; +UPDATE `trinity_string` SET `content_default`= "You are outdoors." WHERE `entry`= 5042; +UPDATE `trinity_string` SET `content_default`= "You are indoors." WHERE `entry`= 5043; From a41bd8e94379224c081764a14a8498f0b96b6e3c Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 7 Mar 2016 17:30:06 +0000 Subject: [PATCH 88/93] Tools/MMaps: Add format library linking to mmaps_generator (Very) partial cherry pick of ed75b0649add23e082976fa4e5d504bc0c312602 --- src/tools/mmaps_generator/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 4eb416a106b..f1522a66936 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -13,6 +13,7 @@ file(GLOB_RECURSE mmap_gen_sources *.cpp *.h) set(mmap_gen_Includes ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/dep/cppformat ${CMAKE_SOURCE_DIR}/dep/zlib ${CMAKE_SOURCE_DIR}/dep/bzip2 ${CMAKE_SOURCE_DIR}/dep/g3dlite/include @@ -48,6 +49,7 @@ target_link_libraries(mmaps_generator g3dlib Recast Detour + format ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} From c1905771f064e374a09720f470116f04b03e5a42 Mon Sep 17 00:00:00 2001 From: Nyeriah Date: Wed, 9 Mar 2016 00:42:45 -0300 Subject: [PATCH 89/93] Scripts/Command: Solve several format exception crashes introduced in a recent commit Ref #16648 Closes #16751 --- src/server/scripts/Commands/cs_modify.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 761b4c9e0e6..3a062b21c3e 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -473,7 +473,7 @@ public: return false; } - handler->PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, targetNameLink.c_str()); + handler->PSendSysMessage(LANG_YOU_CHANGE_ASPEED, targetNameLink.c_str(), ASpeed); if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_ASPEED_CHANGED, handler->GetNameLink().c_str(), ASpeed); @@ -521,7 +521,7 @@ public: return false; } - handler->PSendSysMessage(LANG_YOU_CHANGE_SPEED, Speed, targetNameLink.c_str()); + handler->PSendSysMessage(LANG_YOU_CHANGE_SPEED, targetNameLink.c_str(), Speed); if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_SPEED_CHANGED, handler->GetNameLink().c_str(), Speed); @@ -566,7 +566,7 @@ public: return false; } - handler->PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, targetNameLink.c_str()); + handler->PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, targetNameLink.c_str(), Swim); if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_SWIM_SPEED_CHANGED, handler->GetNameLink().c_str(), Swim); @@ -611,7 +611,7 @@ public: return false; } - handler->PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, targetNameLink.c_str()); + handler->PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, targetNameLink.c_str(), BSpeed); if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, handler->GetNameLink().c_str(), BSpeed); @@ -647,7 +647,7 @@ public: if (handler->HasLowerSecurity(target, ObjectGuid::Empty)) return false; - handler->PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, handler->GetNameLink(target).c_str()); + handler->PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, handler->GetNameLink(target).c_str(), FSpeed); if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, handler->GetNameLink().c_str(), FSpeed); @@ -684,7 +684,7 @@ public: if (handler->HasLowerSecurity(player, ObjectGuid::Empty)) return false; - handler->PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, handler->GetNameLink(player).c_str()); + handler->PSendSysMessage(LANG_YOU_CHANGE_SIZE, handler->GetNameLink(player).c_str(), Scale); if (handler->needReportToTarget(player)) ChatHandler(player->GetSession()).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, handler->GetNameLink().c_str(), Scale); } From 2b04a9c9d81fd0421e2072de9c6744386209098d Mon Sep 17 00:00:00 2001 From: Dr-J Date: Wed, 9 Mar 2016 23:28:25 +0000 Subject: [PATCH 90/93] DB/Quest: Survey Alcaz Island Move Lady Jaina Proudmoore script (cw) to sai Script turn in event for Survey Alcaz Island Ref #16745 not closing issue yet as even though unrelated issue there maybe issue with credit (needs confirmation as works for me) but is currently delivered by spell_area which does not appear to be correct but the spell to give credit does not work otherwise not even if cast on self --- sql/updates/world/2016_03_09_00_world.sql | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 sql/updates/world/2016_03_09_00_world.sql diff --git a/sql/updates/world/2016_03_09_00_world.sql b/sql/updates/world/2016_03_09_00_world.sql new file mode 100644 index 00000000000..d3ebf1af0ff --- /dev/null +++ b/sql/updates/world/2016_03_09_00_world.sql @@ -0,0 +1,38 @@ +UPDATE `creature_template` SET `ainame`='SmartAI', `scriptname`='' WHERE `entry` IN(4968,23704); +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(4968,23704) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN(2370400) 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 +(4968, 0, 0, 1, 62, 0, 100, 0, 2465, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Gossip Select - Close Gossip'), +(4968, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Gossip Select - Say Line 6'), +(4968, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, 23122, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Gossip Select - Cast Jaina''s Autograph'), +(4968, 0, 3, 4, 20, 0, 100, 0, 11142, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Quest Reward (Survey Alcaz Island - Face player'), +(4968, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 1, 0, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Quest Reward (Survey Alcaz Island - Say Line 0'), -- 04:20:13.000 +(4968, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Quest Reward (Survey Alcaz Island - Set NPC Flags'), +(4968, 0, 6, 0, 52, 0, 100, 0, 0, 4968, 0, 0, 1, 1, 7000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 0 - Say Line 1'), -- 04:20:18.000 +(4968, 0, 7, 0, 52, 0, 100, 0, 1, 4968, 0, 0, 1, 2, 6000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 1 - Say Line 2'), -- 04:20:25.000 +(4968, 0, 8, 0, 52, 0, 100, 0, 2, 4968, 0, 0, 1, 3, 7000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 2 - Say Line 3'), -- 04:20:31.000 +(4968, 0, 9, 0, 52, 0, 100, 0, 3, 4968, 0, 0, 1, 4, 6000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 3 - Say Line 4'), -- 04:20:38.000 +(4968, 0, 10, 0, 52, 0, 100, 0, 4, 4968, 0, 0, 1, 5, 5000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 4 - Say Line 5'), -- 04:20:44.000 +(4968, 0, 11, 12, 52, 0, 100, 0, 5, 4968, 0, 0, 81, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 5 - Set Npc Flag'), +(4968, 0, 12, 0, 61, 0, 100, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Lady Jaina Proudmoore - On Text Over Line 5 - Evade'), +(23704, 0, 0, 1, 62, 0, 100, 0, 8782, 0, 0, 0, 11, 42295, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Cassa Crimsonwing - On Gossip Option 0 Selected - Cast Spell 42295'), +(23704, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Cassa Crimsonwing - On Linked Actions - Close Gossip'); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=2465; +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES +(2465, 0, 0, 'Lady Jaina, this may sound like an odd request... but I have a young ward who is quite shy. You are a hero to him, and he asked me to get your autograph.', 9663, 1, 1, 0, 0, 0, 0, '', 0); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=2465; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 2465, 0, 0, 0, 9, 0, 558, 0, 0, 0, 0, 0, '', 'Lady Jaina Proudmoore Shows gossip option 2465 if player has quest Jaina''s Autograph'); + +DELETE FROM `creature_text` WHERE `entry`=4968; +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES +(4968, 0, 0, 'Perhaps I should explain...', 12, 0, 100, 1, 0, 0, 33092, 'Lady Jaina Proudmoore to Player'), +(4968, 1, 0, 'I had arranged for a secret summit between Warchief Thrall and King Wrynn, here in Theramore.', 12, 0, 100, 1, 0, 0, 33093, 'Lady Jaina Proudmoore to Player'), +(4968, 2, 0, 'The king was to travel here by ship, in secret. But the ship never arrived, and King Wrynn disappeared.', 12, 0, 100, 1, 0, 0, 33094, 'Lady Jaina Proudmoore to Player'), +(4968, 3, 0, 'Your help enabled us to connect the Defias to the mastermind behind the abduction, Onyxia, who was posing as a member of the royal court.', 12, 0, 100, 1, 0, 0, 33095, 'Lady Jaina Proudmoore to Player'), +(4968, 4, 0, 'Meanwhile, the king managed to escape his captors, and returned to Stormwind to deal with Onyxia.', 12, 0, 100, 1, 0, 0, 33096, 'Lady Jaina Proudmoore to Player'), +(4968, 5, 0, 'I will send word that you have discovered the link to the Defias. I was a fool to think them broken with the defeat of Edwin Van Cleef, and King Wrynn will want to make an example of all who remain.', 12, 0, 100, 1, 0, 0, 33097, 'Lady Jaina Proudmoore to Player'), +(4968, 6, 0, 'Why... that is very sweet of you. I gather that you are volunteering time for Children''s Week, yes $c? Well, you are to be commended. It is imperative that we remember those less fortunate - especially the children.$B$BI''d be happy to sign an autograph. Here you go.', 12, 0, 100, 1, 0, 0, 9665, 'Lady Jaina Proudmoore to Player'); From c9f9e93c227103b405b382bd2aadb6dd83fa3c72 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Wed, 9 Mar 2016 23:31:36 +0000 Subject: [PATCH 91/93] Remove Lady Jaina Proudmores CPP script from zone_dustwallow_marsh.cpp --- .../Kalimdor/zone_dustwallow_marsh.cpp | 45 ------------------- 1 file changed, 45 deletions(-) diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index 9df9f0b604a..be49778ee4a 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -24,7 +24,6 @@ SDCategory: Dustwallow Marsh EndScriptData */ /* ContentData -npc_lady_jaina_proudmoore npc_nat_pagle npc_private_hendel npc_cassa_crimsonwing - handled by npc_taxi @@ -38,49 +37,6 @@ EndContentData */ #include "Player.h" #include "WorldSession.h" -/*###### -## npc_lady_jaina_proudmoore -######*/ - -enum LadyJaina -{ - QUEST_JAINAS_AUTOGRAPH = 558, - SPELL_JAINAS_AUTOGRAPH = 23122 -}; - -#define GOSSIP_ITEM_JAINA "I know this is rather silly but i have a young ward who is a bit shy and would like your autograph." - -class npc_lady_jaina_proudmoore : public CreatureScript -{ -public: - npc_lady_jaina_proudmoore() : CreatureScript("npc_lady_jaina_proudmoore") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_SENDER_INFO) - { - player->SEND_GOSSIP_MENU(7012, creature->GetGUID()); - player->CastSpell(player, SPELL_JAINAS_AUTOGRAPH, false); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(QUEST_JAINAS_AUTOGRAPH) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_JAINA, GOSSIP_SENDER_MAIN, GOSSIP_SENDER_INFO); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } - -}; - /*###### ## npc_nat_pagle ######*/ @@ -417,7 +373,6 @@ class spell_energize_aoe : public SpellScriptLoader void AddSC_dustwallow_marsh() { - new npc_lady_jaina_proudmoore(); new npc_nat_pagle(); new npc_private_hendel(); new npc_zelfrax(); From 5c064e1e73283928f95d0c2fcbff6ef72a8837f0 Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 10 Mar 2016 14:27:30 +0000 Subject: [PATCH 92/93] DB/Misc: Lady Jaina Proudmore Few updates to https://github.com/TrinityCore/TrinityCore/commit/2b04a9c9d81fd0421e2072de9c6744386209098d as found npc_text 7012 was assigned to gossip menu in db --- sql/updates/world/2016_03_10_00_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2016_03_10_00_world.sql diff --git a/sql/updates/world/2016_03_10_00_world.sql b/sql/updates/world/2016_03_10_00_world.sql new file mode 100644 index 00000000000..e3170b27499 --- /dev/null +++ b/sql/updates/world/2016_03_10_00_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `creature_text` WHERE `entry`=4968 AND `groupid`=6 AND `id`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=4968 AND `source_type`=0 AND `id` IN(1,2); +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=4968 AND `source_type`=0 AND `id`=0 AND `link`=1; +UPDATE `gossip_menu_option` SET `action_menu_id`=5850 WHERE `menu_id`=2465 AND `id`=0; From d1efa0b8b1a553b184f884ad757bcebc913f117b Mon Sep 17 00:00:00 2001 From: Dr-J Date: Thu, 10 Mar 2016 16:12:02 +0000 Subject: [PATCH 93/93] DB/Quest: Survey Alcaz Island Credit If you already had this quest in log prior you may need to abandon and retake/add quest before it will work as I had been trying to figure out why credit spell would not work even if cast on self, as soon as I removed and re-added quest worked Thanks to @Kodekc --- sql/updates/world/2016_03_10_01_world.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2016_03_10_01_world.sql diff --git a/sql/updates/world/2016_03_10_01_world.sql b/sql/updates/world/2016_03_10_01_world.sql new file mode 100644 index 00000000000..80b23be82c2 --- /dev/null +++ b/sql/updates/world/2016_03_10_01_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_area` WHERE `spell`=42316 AND `area`=2079 AND `quest_start`=11142 AND `aura_spell`=0 AND `racemask`=1101 AND `gender`=2; +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = -42385; +INSERT INTO `spell_linked_spell` (`spell_trigger`,`spell_effect`,`type`,`comment`) VALUES +(-42385, 42316, 0, 'On remove Alcaz Survey Aura - cast Alcaz Survey Credit');